-- 历史库存基线;执行前必须取得指定环境的建表授权。 CREATE TABLE IF NOT EXISTS ll_selfop_inventory_flow ( id BIGINT NOT NULL COMMENT '应用生成的流水记录标识', source_account VARCHAR(64) NOT NULL COMMENT '受控来源账号', warehouse_code VARCHAR(64) NOT NULL COMMENT '来源仓库编码', customer_code VARCHAR(64) NOT NULL COMMENT '来源货主编码', sku_code VARCHAR(128) NOT NULL COMMENT '来源商品编码', source_flow_id VARCHAR(64) NOT NULL COMMENT '来源流水字符串标识', product_quality INT NOT NULL COMMENT '来源品质,零正品一次品,其他未知', cell_no VARCHAR(128) NULL COMMENT '来源库位编码', inner_batch_no VARCHAR(128) NULL COMMENT '来源内部批次号', bill_no VARCHAR(128) NULL COMMENT '来源业务单号', source_no VARCHAR(128) NULL COMMENT '来源关联单号', bill_type VARCHAR(32) NULL COMMENT '来源业务类型,未验证类型不得参与正式还原', book_qty DECIMAL(20,6) NULL COMMENT '来源记账增减量,未知为空', book_change_qty_raw VARCHAR(64) NULL COMMENT '来源带符号变动量原文', delta_quantity DECIMAL(20,6) NULL COMMENT '解析后的有符号实物变动量', close_quantity DECIMAL(20,6) NULL COMMENT '对应库位批次品质链的结存', source_create_time VARCHAR(64) NULL COMMENT '来源北京时间原文', event_at_utc DATETIME(3) NULL COMMENT '流水发生UTC时刻,无法解析时为空', business_date DATE NULL COMMENT '北京时间业务日期', quantity_unit VARCHAR(16) NULL COMMENT '已确认数量单位,未知为空', content_hash CHAR(64) NOT NULL COMMENT '当前事实内容摘要', revision_no BIGINT NOT NULL COMMENT '同来源流水单调增加的修订号', stage_id BIGINT NOT NULL COMMENT '当前事实对应不可变暂存证据', first_run_id BIGINT NOT NULL COMMENT '首次观察执行尝试', last_run_id BIGINT NOT NULL COMMENT '最近确认执行尝试', last_observed_at DATETIME(3) NOT NULL COMMENT '最近观察UTC时刻', validation_status VARCHAR(16) NOT NULL COMMENT '字段资格,有效或未知', validation_reason VARCHAR(64) NULL COMMENT '数量或身份待核验原因', PRIMARY KEY (id), UNIQUE KEY uk_selfop_flow_source (source_account,warehouse_code,source_flow_id), KEY idx_selfop_flow_sku (source_account,warehouse_code,customer_code,sku_code,event_at_utc), KEY idx_selfop_flow_day (source_account,warehouse_code,business_date), CONSTRAINT chk_selfop_flow_revision CHECK (revision_no > 0) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin COMMENT='自营历史库存流水最新事实,旧版本保留于暂存证据'; CREATE TABLE IF NOT EXISTS ll_selfop_inventory_day_version ( id BIGINT NOT NULL COMMENT '不可变历史日版本标识', source_account VARCHAR(64) NOT NULL COMMENT '受控来源账号', warehouse_code VARCHAR(64) NOT NULL COMMENT '来源仓库编码', business_date DATE NOT NULL COMMENT '北京时间日末所属日期', scope_hash CHAR(64) NOT NULL COMMENT '业务范围摘要', rule_version VARCHAR(32) NOT NULL COMMENT '日末库存还原规则版本', build_run_id BIGINT NOT NULL COMMENT '历史重建执行尝试', publication_group_id BIGINT NOT NULL COMMENT '必须一起切换的发布组标识', sales_run_id BIGINT NULL COMMENT '构建时固定的销量证据版本', anchor_run_id BIGINT NOT NULL COMMENT '固定的独立库存锚点版本', input_hash CHAR(64) NOT NULL COMMENT '冻结流水修订与覆盖及锚点输入摘要', evidence_json JSON NOT NULL COMMENT '固定输入清单及不可变证据引用', status VARCHAR(16) NOT NULL COMMENT '构建中、就绪、已发布、已替代或失败', head_slot TINYINT NULL COMMENT '当前日头为一,非当前版本为空', valid_sku_count BIGINT NOT NULL DEFAULT 0 COMMENT '合格商品数', unknown_sku_count BIGINT NOT NULL DEFAULT 0 COMMENT '待核验商品数', created_at DATETIME(3) NOT NULL COMMENT '版本创建UTC时刻', published_at DATETIME(3) NULL COMMENT '发布组提交UTC时刻', superseded_at DATETIME(3) NULL COMMENT '被新组替代的UTC时刻', invalidated_at DATETIME(3) NULL COMMENT '已确认输入失效的UTC时刻', invalidation_reason VARCHAR(64) NULL COMMENT '旧版本失效原因', rebuild_run_id BIGINT NULL COMMENT '处理失效版本的重建尝试', PRIMARY KEY (id), UNIQUE KEY uk_selfop_history_head (source_account,warehouse_code,business_date,head_slot), UNIQUE KEY uk_selfop_history_build_day (build_run_id,business_date), KEY idx_selfop_history_group (publication_group_id,status), CONSTRAINT chk_selfop_history_head CHECK (head_slot IS NULL OR (head_slot=1 AND status='PUBLISHED')) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin COMMENT='历史日库存不可变版本及原子发布日头'; CREATE TABLE IF NOT EXISTS ll_selfop_inventory_daily ( day_version_id BIGINT NOT NULL COMMENT '所属历史日版本', customer_code VARCHAR(64) NOT NULL COMMENT '来源货主编码', sku_code VARCHAR(128) NOT NULL COMMENT '来源商品编码', product_quality INT NOT NULL COMMENT '来源库存品质', physical_quantity DECIMAL(20,6) NULL COMMENT '日末实物库存,未知为空,已确认零为零', quality_status VARCHAR(16) NOT NULL COMMENT '日末资格,有效或未知', quality_reason VARCHAR(64) NULL COMMENT '缺覆盖或锚点等未知原因', anchor_reference BIGINT NULL COMMENT '独立库存锚点版本', evidence_hash CHAR(64) NOT NULL COMMENT '该日计算证据摘要', source VARCHAR(32) NOT NULL COMMENT '库存来源标记,流水还原', PRIMARY KEY (day_version_id,customer_code,sku_code,product_quality), KEY idx_selfop_daily_identity (customer_code,sku_code,day_version_id), CONSTRAINT chk_selfop_daily_quantity CHECK ((quality_status='VALID' AND physical_quantity IS NOT NULL AND physical_quantity>=0) OR (quality_status='UNKNOWN' AND physical_quantity IS NULL)) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin COMMENT='历史日末分货主商品品质实物库存';