业务规则

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

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

系统是什么

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

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

主数据与隔离

  1. 产品即项目单元:一条 products,用 project_name;不另建项目组表。成员 product_user,至多一名负责人。
  2. 部门 ≠ 产品:部门是企微通讯录部门树。
  3. 仓库 ≠ 产品:仓库独立;库间调拨、盘点、拆合、SKU 降级。
  4. 物料:产品 → SKU(不设品类)。单据行只引用 SKU,禁止游离品名主数据。采销明细另存 sku_namesku_snapshot(开单时拷贝,确认后只读)。
  5. 权限:默认按员工加入的产品隔离敏感金额;财务等可授全量。正式工 / 外编权限与报销制度可区分(laravel-permission)。
  6. 审计:单据提交、AI 识别、人工修改、财务驳回须可查。

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

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

进销与交易

  1. 采购raw / goods;草稿可改(可等扣损结果);确认即归档并入库(见 14)。运费与 total_amount 分列。统货再分选另开加工单。与销售的对应用显式 purchase_order_links,不靠同日猜测。
  2. 订单:对外 / 买断 / 退货 / 拒收;settlement=simple|full 仅录入模板差异。草稿可改;确认即归档并出/入库(见 14)。扣损与调整在草稿阶段做完。线下「对外销售对账单」= 简易销售。
  3. 确认归档与财务驳回:采购/销售确认后业务不可改。财务可驳回:先按 14 冲销库存流水,单据回 draft,方可再改再确认。禁止静默改已入账流水。
  4. 内部买断:销售 type=buyout + 对方采购,related_purchase_id;仓间实物只走调拨。
  5. 请款:采购货款与费用报销走 payment_requests。采购请款时财务须能看到采销数量差、粗利润率、发票情况(默认提示,不硬拦)。
  6. 业务费用单 ≠ 个人报销:费用单(装卸/人工/运费等)MorphMany 挂采购/销售等(列在 expenses 上),金额可正可负;报销仍走 expense_claims
  7. 发票:采购发票由采购提交(可挂多张采购单),财务审;销售发票由财务开(可挂多张销售单)。
  8. 低频异动:等级变更、报损、调拨、退货能力保留;验收与扣损不单建表。

仓库与加工

  1. 库存写入:只允许经 14;结存含包装单位、件数、实际重量
  2. 拆合 / 降级 / 加工:同前(拆合不改 SKU;降级改 SKU 不走加工;加工改 SKU 计 process_fee)。
  3. 成本 V1:不做存货单位成本 / 移动平均。盈亏按单据金额 + 已确认业务费用单(正负)+ 已批报销 + 报损等汇总。完整存货成本延后。

AI 与消息

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

分析与财务

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

非功能

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

V1 / 延后

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

引用

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