业务规则

跨模块约定。表结构与流程在各功能文档;确认如何改库存见 14-库存确认契约.md。

根目录 README.md 为需求 V1.2 原文,不改。与 README 冲突时,以本文件 + 功能文档为准。

系统是什么

约 50 人的水果批发 / 产地·销地加工中心用的轻量业财一体进销存:采购入库 →(可选)仓内加工 → 销售出库 → 费用/发票;再叠加夜间盈亏与企微 AI 录单。不是 WMS,不是传统 ERP,不对接老 ERP。

真源:人工确认后的业务单 + stock_ledgers。AI / OCR / 语音只出草稿。

主数据与隔离

  1. 产品即项目单元:一条 products,用 project_name;成员 product_users,至多一名负责人。
  2. 部门 ≠ 产品:部门是企微通讯录部门树。
  3. 仓库 ≠ 产品:仓库独立;库间调拨、盘点、拆合;仓内改规格/等级/包装走加工(不改 product_id)。
  4. 物料:产品即采存售货品(不设品类、不设 SKU)。采购头表 product_id 必填;采购明细记规格名/等级/包装等结算属性,不存产品外键。详见 03-产品.md、05-采购.md。
  5. 权限:默认按员工加入的产品隔离敏感金额;财务等可授全量。正式工 / 外编权限可区分(laravel-permission)。
  6. 审计:单据提交、AI 识别、人工修改、财务驳回须可查。

地址主数据见 02-省市区.md(areas,CSV 导入)。等级字典见 03-产品.md(grades 单据存名称,不外键;无单位字典,unit 列可留但写空串)。客户 morphMany、供应商 / 仓库 morphOne 挂 addresses。客户 / 供应商 code 若填则唯一(同产品)。

主数据与业务单据头表用 SoftDeletes(deleted_at)。stocks / stock_ledgers / 快照 / 中间表 / 员工与部门不加。已确认或已入账单据禁止软删(作废或财务驳回);单号不因软删释放。

开票资料(抬头 / 税号 / 四要素)用 invoice_profiles 多态挂客户、供应商等,不写在客户/供应商表上;与规则 12 的发票单据无关。

进销与交易

  1. 采购:表 purchases,类型 raw 果农原料 / goods 成品或半成品。草稿可改(可等扣损结果);确认即归档并入库(见 14)。运费与 total_amount 分列。统货进仓后再分选/包装/降级,另开仓内加工(见规则 15 与 07)。与销售的对应见规则 8 与 05-采购.md,不靠同日猜测。
  2. 销售单:表 orders。一张单一个产品(头表 product_id)。开单写 summary(订单摘要),明细可后补(先按摘要采购,再补规格/等级/包装与出库仓)。明细是该产品的不同规格/等级/包装(不另建 SKU 表),且每行自带出库仓(多仓拼车履约)。类型默认 external 对外销售;return / reject 仅由原单生成退拒子单。头表不设 settlement。草稿可改;提交审批前须有明细。人审通过 → 待出库 → 出库才按行 sale_out(见 14);可选验收(报损/补发);退拒整单一次。财务闭环两个关键审批节点:开票(on_approve=invoice)、收款(on_approve=collect),见 15 / 08。出库与按批粗利以明细 purchase_id 为准。头表不设 warehouse_id / purchase_id / related_purchase_id(见 05 / 06)。
  3. 确认归档与财务驳回:采购确认后 / 销售出库后业务不可改头表明细。财务可驳回已入账单:先按 14 冲销库存流水,单据回 draft,方可再改。禁止静默改已入账流水。采购与销售出入库/冲销共用同一写流水服务(见 14)。销售审批驳回(尚未出库)也回 draft,不写流水。
  4. 仓间移货:产地仓 ↔ 销地仓实物换仓只走调拨(见 04)。不在销售单上做内部买断;买断结算不进 orders。
  5. 费用二分:挂单经营费用 document_expenses(MorphMany 挂采/销,可正可负)≠ 费用申请 expenses(独立人审,节点 pay 付款)。
  6. 发票与回款:采购发票由采购提交(可挂多张采购单),财务审;销售发票由财务开(可挂多张销售单)。销售单开票 / 收款走审批节点 invoice / collect(见 15),与费用申请节点 pay 同理。
  7. 低频异动:报损、调拨、退货能力保留;等级变更走仓内加工;采购验收/扣损落草稿字段;销售到仓差异走出库后验收(报损/补发),不单建表。

仓库与加工

  1. 库存写入:只经 14。结存唯一键 (仓库, 产品, purchase_id, spec_name, grade, pack)(不含单位),界面展示 purchase_no;空属性存空串。重量列名 weight_kg,语义为斤。可带三费件数单价(加工费 / 包装费 / 隐形分摊)作毛利预估。
  2. 仓内加工:先入库再加工。process_orders 一对 from/to、同一 purchase_id、同一 product_id;产出属性不同则分堆。件数可不守恒(半仓可只扣重量);多产出损耗按产出重量比例分摊;各档三费写对应产出结存。后台不再新开拆合单。不设独立降级单。调拨/加工产出保留批次、行属性与三费单价。
  3. 成本(P0):不做存货单位成本入账。盈亏实收按单据金额 + 已确认挂单经营费用 + 已付/已批费用申请 + 报损等。结存三费件数单价仅预估参考,不入支付、不进费用单据、不构成成本层。

AI 与消息

  1. 采单:企微群机器人官方 API,必须 @;网页上传仅兜底。
  2. 识别与录单:OCR + 火山方舟;须人工确认。财务不可 AI 直接入账。对话问数属 P2。
  3. 出站消息:站内必留,再投递企微等。

分析与财务

  1. 每日分析(P1):盈亏、采销平衡、缺采缺销、库存比对、补货、账期对账导出。
  2. 缺采 / 缺销:单据链路完整性,不是库存缺货。
  3. 利润维度:自加工销售、外采成品、对外销售等(仓间调拨本身不是销售)。
  4. 导出:报表、账期对账支持 Excel / PDF。

非功能

  1. 分析夜间跑,不堵白天录单。
  2. 采购价、成本、利润按权限;原始附件长期存。
  3. PC 完整操作;企微采单;自建业务库。

P0 / 延后

P0 延后
主数据、采销确认归档与财务驳回冲销、加工仓库、费用申请、挂单经营费用、开票资料、采购/销售发票 存货成本层、销售在途、WMS、对话问数、企微部门回写

引用

功能文档写「见规则 N」或「确认见 14」。验收 = 本文件 + 14 + 该模块验收标准。