-- ===================================================================================== -- 1.0.541 · S5 IQC 来料检验标准事实层(mdp_std_iqc_inspection) -- -- ── 为什么建这张表 ────────────────────────────────────────────────────────────────── -- S8 Stage-3 目前若要拿 IQC 结论,只能直读四张业务/框架表: -- qms_qcp_inspbill · qms_qcp_inspecapplyn · qms_qcp_insappnentry · ApprovalFlowInstance -- 这违反「S8 只消费中台」的边界。本表把已确权的 IQC 事实一次性投影到标准层。 -- -- ── Grain(先证后建,不是拍脑袋)──────────────────────────────────────────────────── -- CANONICAL_GRAIN = (tenant_id, iqc_bill_id) —— BILL GRAIN -- 实测依据(全库 23 张检验单): -- · 每张 Bill 命中的报检分录数 entries ≤ 1(无一例外) -- · 每张 Bill 可达的采购单数 distinct_po ≤ 1 -- · 每张 Bill 的审批流实例数 ≤ 1(多实例 BizId 组数 = 0) -- 结构保证来自 qms_qcp_inspbill.hid —— 它是指向报检分录的【单值外键】(14/23 非空且互异)。 -- 因此不需要 Bill × Entry 网格,也不需要 Fact + Bridge 两张表。 -- -- ── 两条正交轴必须分开存 ──────────────────────────────────────────────────────────── -- 质量轴:qms_qcp_inspbill.pd 0=合格 / 1=不合格 / NULL=未判定 -- 流程轴:ApprovalFlowInstance.Status(2=Approved)与 .EndTime -- 实测 4 张单同时是「检验完成」且 pd=1 —— PROCESS_COMPLETED ≠ QUALITY_ACCEPTED。 -- 故本表同时保留 raw_pd / quality_result / flow_status / completion_time 四列, -- 【不】落单一 is_completed 布尔,否则上面那四种状态组合将不可表达。 -- 亦【不】使用 FBILLSTATUS 作质量 Authority:实测 15 条 Approved 中 9 条该列未回写,是有损镜像。 -- -- ── 行级身份刻意缺席 ──────────────────────────────────────────────────────────────── -- 本表【没有】po_line / receipt_line / source_entry_seq 列,这是有意的: -- 上游 FSRCBILLID / FSRCBILLENTRYSEQ 实测 0/4 全空,属 SOURCE CONTRACT GAP。 -- 禁止用 物料 / 收货单+物料 / 批次 / 供应商 / 数量 反推行号 —— 那是弱关联。 -- -- ── 租户来源 ──────────────────────────────────────────────────────────────────────── -- ApprovalFlowInstance 没有 TenantId 列(实测)。因此租户【只能】来自 qms_qcp_inspbill.tenant_id, -- 审批流实例仅按 (BizType='S5_IQC_INSPBILL', BizId=bill.id) 反查,绝不反向驱动租户。 -- -- ── 本脚本不做 ────────────────────────────────────────────────────────────────────── -- 不建 DWD;不做订单级完成聚合;不回填任何业务源表;不修 PR.work_order; -- 不复用 mdp_std_s4_iqc(其真实 Grain 是采购收货明细、qc_result 由退货数推导,非 IQC 事实); -- 不复用 mdp_std_iqc_receipt_state(0 行、未接线、历史设计依赖已证无效的 Receipt 桥)。 -- ===================================================================================== CREATE TABLE IF NOT EXISTS `mdp_std_iqc_inspection` ( `id` BIGINT NOT NULL AUTO_INCREMENT, `tenant_id` BIGINT NOT NULL COMMENT '租户。唯一权威 = qms_qcp_inspbill.tenant_id,绝不取自审批流', `factory_id` BIGINT NULL COMMENT '工厂。S5 IQC 源无该概念,恒 1,保留以对齐 mdp_std_* 形状', `source_system` VARCHAR(50) NOT NULL COMMENT '来源系统', `iqc_bill_id` BIGINT NOT NULL COMMENT '检验单 id = qms_qcp_inspbill.id(Grain 主体)', `iqc_bill_no` VARCHAR(64) NULL COMMENT '检验单号 = qms_qcp_inspbill.FBILLNO', `application_id` BIGINT NULL COMMENT '报检申请 id = qms_qcp_inspecapplyn.id', `application_no` VARCHAR(64) NULL COMMENT '报检申请单号 = qms_qcp_inspbill.lydjbh = inspecapplyn.FBILLNO', `application_entry_id` BIGINT NULL COMMENT '报检分录 id = qms_qcp_insappnentry.id。经 bill.hid 单值外键解析;解析不唯一时留 NULL,不猜', `purchase_order_no` VARCHAR(80) NULL COMMENT '采购单号(文档级)= insappnentry.purchase_order_no(1.0.540 正式 Writer 所写)。不含行号', `receipt_no` VARCHAR(80) NULL COMMENT '收货单号 = insappnentry.FSRCORDERNUM。与采购单号是两个不同字段,禁止互相覆盖', `material_code` VARCHAR(255) NULL COMMENT '物料编码 = insappnentry.FMATERIALCFG', `material_name` VARCHAR(255) NULL COMMENT '物料名称 = insappnentry.wlmc', `lot_serial` VARCHAR(50) NULL COMMENT '批次号 = insappnentry.FLOTNUMBER', `supplier_code` VARCHAR(255) NULL COMMENT '供应商编码 = insappnentry.gysbm', `supplier_name` VARCHAR(255) NULL COMMENT '供应商名称 = insappnentry.gysmc', `raw_pd` INT NULL COMMENT '质量判定原值 = qms_qcp_inspbill.pd,原样保留:0=合格 1=不合格 NULL=未判定', `quality_result` VARCHAR(16) NULL COMMENT '质量结论:PASS(pd=0) / FAIL(pd=1) / PENDING(pd IS NULL)。派生自 raw_pd,不来自 FBILLSTATUS', `flow_status` INT NULL COMMENT '审批流状态原值 = ApprovalFlowInstance.Status(1=Running 2=Approved 3=Rejected)。无实例时 NULL', `flow_instance_id` BIGINT NULL COMMENT '被采纳的审批流实例 id。实测每张单至多一个实例,故无需取最新', `completion_time` DATETIME NULL COMMENT '流程完成时间 = ApprovalFlowInstance.EndTime。这是【流程】完成时间,不等于质量合格,须与 quality_result 配对使用', `source_row_id` VARCHAR(100) NOT NULL COMMENT '源行 id = iqc_bill_id 的字符串形式,参与唯一键(对齐 mdp_std_* convention)', `source_biz_key` VARCHAR(200) NULL COMMENT '源业务键 = 检验单号', `sync_batch_id` VARCHAR(100) NOT NULL COMMENT '同步批次', `sync_time` DATETIME NOT NULL COMMENT '同步时间', `update_time` DATETIME NULL COMMENT '更新时间', PRIMARY KEY (`id`), UNIQUE KEY `uk_mdp_std_iqc_insp` (`tenant_id`, `source_row_id`), KEY `idx_mdp_std_iqc_insp_bill` (`tenant_id`, `iqc_bill_no`), KEY `idx_mdp_std_iqc_insp_po` (`tenant_id`, `purchase_order_no`), KEY `idx_mdp_std_iqc_insp_result` (`tenant_id`, `quality_result`, `flow_status`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='S5 来料检验标准事实层。Grain = 一张检验单(tenant_id + iqc_bill_id)';