# art-supabase-scm **Repository Path**: wangyanghub/art-supabase-scm ## Basic Information - **Project Name**: art-supabase-scm - **Description**: No description available - **Primary Language**: Unknown - **License**: MulanPSL-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-09-22 - **Last Updated**: 2026-10-04 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 亿企工场 SCM · 供应链管理 本仓是 [亿企工场](https://gitee.com/wangyanghub/art-supabase-pro) 的供应链管理(SCM)业务子仓,位于主仓的 `modules/art-supabase-scm`,通过 Git submodule 独立维护。 ## 职责边界 SCM 负责供应链领域的业务页面、API、类型和规则。认证、租户、菜单、权限、布局、公共组件及 Supabase 公共客户端由主平台统一提供。业务功能上线时,应沿用现有子应用的独立运行和平台宿主接入方式,并在服务端落实租户与权限校验。 ## 已接入的销售功能 - 销售报价:报价费用定义、报价项分类、销售报价单、项目报价。 - 销售管理:销售合同、销售订单、发货通知单、发货装车、装车出库。 - 六类销售单据共用租户隔离、来源单据关联、明细计价、状态流转与详情视图;数据库端复核金额、来源关系和发货剩余数量。 - 项目报价可从已生效报价生成销售合同草稿。采购申请与 MES 生产计划尚未接入,“生成计划”会明确提示当前暂不可执行。 ### 销售报价单与审批 - 报价单号由数据库规则 `scm.sales_quotation` 生成:`XSBJ{YYYYMM}-{SEQ:3}`,按月重置;单据类型取销售报价单菜单下已启用的 MDM 单据类型,有默认类型时自动带入。 - 报价草稿可批量删除;删除前统一用 `MasterDataDeleteGuard` 检查引用。物料编码由 `scm_generate_quotation_materials` 逐行建立并返填,要求报价操作权限及 MDM 物料新增权限。 - 提交审批使用流程中心业务类型 `scm_sales_quotation`。当前有一版已发布的单节点默认流程,审批人沿用持有报价维护权限的角色;流程中心可调整并发布新版本。运行中锁定报价编辑和删除,只有审批回调能让报价生效。 - 报价产品分类、产品名称允许为空,提交审批仍要求项目及报价明细。分类为空时不生成分类汇总。报价行的基本单位参选 MDM 计量单位,参选物料时带入基本单位名称并允许调整。 - 审批通过后按租户、项目、报价产品分类汇总 `scm_quote_category`;`quotation_no` 保存参与汇总的报价单号。系统生成的分类由数据库保护,不能手工修改或删除。 - 已生效报价可通过 `scm_convert_standard_quotation_to_contract` 生成销售合同草稿,通过 `scm_convert_quotation_to_bom` 选择父件并生成待复核的报价 BOM,通过 `scm_convert_quotation_lines_to_work_orders` 将已编码的报价行转为 MES 工单。后两者按来源去重;工单关系保存在 `app_private.scm_quotation_work_order_link`,不写入受控的 MES 扩展字段。 - 服务端对这些转换复核当前用户的权限、租户、报价状态和来源明细。2026-10-02 以事务回滚方式验证了物料编码生成、报价转 BOM、工单生成与重复执行、提交审批、审批通过及分类金额汇总;测试事务未留下业务数据。 ## 与 WMS 的单据链路 - 2026-10-03 移除 SCM 采购入库、采购退货、委外收货和委外入库菜单及其按钮权限。采购入库、退货的单据类型、业务类型和编号场景归属 WMS;保留业务数据。采购订单下推采购入库使用 `WmsPurchaseInbound:Add`,打开目标使用 `WmsPurchaseInbound:View`,原 SCM 三种非入库目标不再提供下推入口。WMS 保存及状态变更仅使用对应 WMS 权限,读取继续校验租户范围。 - 单据按明细展示及导出时,单位编码或 ID 按单据租户匹配 MDM 单位名称;历史停用单位仍显示名称,未匹配值保留原值以便核查。 - 采购:采购收料明细下推 WMS 收料入库草稿;下推成功后可直接打开该草稿。WMS 核对数量、仓库及物料后确认入库。 - 销售:已提交的发货通知单按通知行和实时可用库存生成装车单;装车单确认后按装车行进入装车出库,选择库存批次、数量和序列号,再由 `scm_post_loading_outbound_secure` 原子调用 WMS 销售出库并记录装车行与库存流水的对应关系。页面汇总装车数量、累计出库数量、剩余数量和出库状态,支持分批出库及请求幂等。 - 销售合同与销售订单通过流程中心业务类型 `scm_sales_contract`、`scm_sales_order` 审批;已发布的流程版本按持有对应维护权限的角色配置。数据库阻止直接越过提交及批准节点,审批回调更新业务状态。合同金额可人工维护;订单按合同明细及剩余可下单量选单。发货通知单按订单行剩余可发数量选单,装车单按通知行剩余可装数量选单。 - 销售四类单据使用各自菜单下启用的 MDM 单据类型。装车编号规则为 `FHZC{YYYYMM}-{SEQ:3}`,每月重置。新建和批量删除经过菜单权限、租户及 `MasterDataDeleteGuard` 引用检查;服务端再校验来源、状态、可用数量、删除引用和出库权限。 - 前置资料:MDM 中的物料、仓库、组织及项目归属必须有效;出入库仓库业务范围、库位配置和单据租户须匹配。库存数量以 WMS 过账结果为准,SCM 单据状态不能代替库存流水。 - 数据库中的 `scm_loading_outbound_allocation` 只允许持有装车出库权限的安全函数写入;读取遵守租户范围和查看权限。WMS 对已被有效装车单引用的通知行限制直接出库,装车出库函数在同一事务内完成授权、剩余数量、库存和序列号复核。 - 2026-10-02 使用事务回滚验证了合同及订单审批、装车编号、跨行装车数量与删除保护、装车出库过账、请求幂等和超量拒绝;测试事务未留下业务数据。TMS 承运交接尚需独立契约和验收。 本地独立开发使用 `pnpm dev`,默认端口为 `3021`;与主平台联调时按主仓说明安装并启动托管模块。 ## 与主仓协作 1. 在本仓提交供应链业务变更。 2. 在主仓更新 `modules/art-supabase-scm` 的子模块指针。 3. 主仓克隆时使用 `git clone --recurse-submodules`,已有工作区使用 `git submodule update --init --recursive`。 远端仓库:[art-supabase-scm](https://gitee.com/wangyanghub/art-supabase-scm)。