职责:供应商;果农原料 / 成品半成品采购;确认归档入库;财务可驳回;与销售关联供财务看板与按批核算。
边界:销售见 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
confirmed:见 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 同类。
raw/goods 草稿 → 改到扣损/价格确认 → 确认归档。purchase_id(一单可多批;从结存添加时带出)。purchase_id(投入须已有结存)。raw/goods;确认入库、财务驳回冲销回草稿。purchase_id;支持一销多批);财务看板含采销差、利润率提示、发票情况。| P0 | 延后 |
|---|---|
| 上表 + 看板计算 | 采购运费资本化进存货;自动猜采销对应 |