采购

职责:供应商;果农原料 / 成品半成品采购;确认归档入库;财务可驳回;与销售关联供财务看板与按批核算。
边界:销售见 06-订单.md;入库后的分选/包装/降级走仓内加工;发票/费用见财务。确认/驳回见 14-库存确认契约.md。
对照:线下 #1 / #2 见 13-线下单据映射.md。

线下 purchases.type
果农原料分级结算单 raw 果农原料
常规采购单 goods 成品或半成品

供应商

表:suppliers

字段 说明
id 主键,从 200000 起
name 名称
code 编码,可空,唯一,最长 32
type farmer / processor / other
contact / mobile 可空
bank_name / bank_account / account_name 货款收款户,可空;开票四要素见开票资料
status 启用 / 停用
remark 可空
created_at / updated_at / deleted_at 时间戳;软删除

地址:morphOne addresses(见 02-省市区.md),仅一条。

开票资料:morphMany invoice_profiles(见 08-财务.md),不写在本表。

采购单

表:purchases;purchase_no 唯一(采购单号,亦作批次号展示)。

字段 说明
id 主键
purchase_no 全局唯一
type raw 果农原料 / goods 成品或半成品
supplier_id 供应商
product_id 产品,必填;确认入库结存挂此产品
warehouse_id 入库仓
business_date 业务/到货日;不得晚于当天(可早于当天)
batch_no / plate_no / origin 可空
status draft 草稿 / confirmed 已确认 / cancelled 已取消
freight_fee 运费
total_amount 明细合计,不含运费
invoice_complete 是否开票完毕(人工勾选,默认 false)
rejected_at / rejected_by / reject_reason 最近财务驳回,可空
source wecom 企微 / web 网页 / manual 手工
operator_id 采购员
accepted_at / acceptor_id / accept_remark 验收,可空
remark 可空
created_at / updated_at / deleted_at 时间戳;软删除

明细 purchase_items

字段 说明
id 主键
purchase_id 采购单
spec_name 规格名,可空
grade 等级名称(→ grades.name),可空
pack 包装,可空
unit 单位编码
quantity 件数
weight_kg 重量(斤)
unit_price 元/斤
amount 行金额
remark 可空

果农按等级结算:明细多行可选不同 grade(等级字典名称;及规格/包装)。统货先入库(结存挂头表 product_id),再分选/包装走仓内加工。确认入库:流水与结存的 product_id 取头表、purchase_id 取本单;行属性可从明细带入(同键合并规则见 04)。明细不存产品外键。

采销关联

真源:销售明细 order_items.purchase_id → 本采购。一张销售单可含多个采购批次;按批汇总销售、粗利、采销匹配时按明细行归集。不另建 purchase_order_links。

不按「同产品同日」自动猜测关联。订单头不设 purchase_id;出库与按批归集以明细行为准。

状态机

draft → pending → confirmed   # 提交审批 → 通过后归档(库存见 14)
pending → rejected|cancelled  # 审批驳回 / 作废
rejected → draft              # 驳回退回发起人时可再改
confirmed → draft             # 仅财务驳回:冲销后回草稿
draft → cancelled
  • draft:可改;提交人审人审批流(见 15)。
  • pending:审批中,业务只读。
  • confirmed:业务只读;财务看看板、审发票。

确认 / 驳回副作用

  • 审批通过 → confirmed:见 14「采购确认」。
  • 财务驳回:见 14「财务驳回采购」。

财务看板(只读汇总)

针对已 confirmed 采购单,界面计算展示(可不落库):

指标 算法要点
关联销售数量/重量 销售明细中 purchase_id=本采购 id 的行(已出库及之后状态)→ quantity / weight_kg 合计
采销差 采购明细合计 − 关联销售明细合计(件数、重量分列)
粗利润 / 利润率 关联销售行金额合计(或按行分摊后的应收)−(本采购 total_amount + 运费 + 分摊到本单的已确认挂单经营费用)等;利润率 = 利润 / 销售收入;阈值见 finance_thresholds
发票情况 关联已 approved 采购发票金额合计 vs 本单金额;以及 invoice_complete
按批次查销售 purchase_id → 销售明细行;界面展示 purchase_no

阈值配置 finance_thresholds

字段 说明
id 主键
name 如 min_profit_rate
value 数值
remark 可空
updated_at 时间

也可用简单 config;与 loss_params 同类。

维护方式

  1. 建 raw/goods 草稿 → 改到扣损/价格确认 → 确认归档。
  2. 销售侧按行填 purchase_id(一单可多批;从结存添加时带出)。
  3. 仓内分选/包装:加工单挂 purchase_id(投入须已有结存)。
  4. 采购发票、挂单经营费用、费用申请:见 08-财务.md。

验收标准

  • [ ] raw/goods;确认入库、财务驳回冲销回草稿。
  • [ ] 采销关联完整(明细 purchase_id;支持一销多批);财务看板含采销差、利润率提示、发票情况。
  • [ ] draft 阶段可改后再确认。

P0 / 延后

P0 延后
上表 + 看板计算 采购运费资本化进存货;自动猜采销对应