-- 购买证、运输证与用量核算模型(2026-10-26修订设计草案) -- 仅供评审,不是上线迁移;本次不执行DDL,不更改既有业务表。 -- 取代本文件2026-10-25版:证面仅保留用户分别确认的9项;删除自动换算系数。 -- 设计:docs/superpowers/specs/2026-10-26-pl-contract-cert-design.md -- 开发方案:docs/superpowers/plans/2026-10-26-pl-contract-cert.md -- MySQL 5.7.8+ / InnoDB / utf8mb4 / UUID varchar(64) / 公共字段尾置。 -- JSON仅用于车牌列表与业务快照;证面不增加OCR、二维码、印章、核发机关字段。 -- 合同关联、附件、状态、余额、复核、修订号属于系统业务字段,不计入证面9项。 -- 本版8表:证件先绑定合同,再选择合同内多个适用产品;证件不绑定单一product_id。 -- 50%硫酸、98%硫酸可以共用证面品名为硫酸的证;需人工勾选适用合同产品行。 -- 同张证的本次需求=各适用产品本次证件使用量之和;实际量同样逐项确认后求和。 -- 不按浓度折纯,也不自动按品名包含关系归类;不同单位逐项人工填写后再相加。 -- total_qty、reserved_qty、used_qty全部使用本证quantity_unit;剩余量不单独存储。 -- 异单位只接受用户填写的证件数量;即便吨和千克不同也不自动乘除,不复用历史系数。 -- 合同产品与购买证多对多;同一产品可选择多张购买证并分配本次来源量,每张证仅扣其分配量。 -- 本次运输证仍每个业务产品项选择一张,按完整来源量计量;购买证分配不得使运输证重复扣量。 -- 同一实际运输的同一张证不能装送两侧重复扣;item指定计量来源,另一侧只追溯。 -- 相同证件/关联/usage的唯一键不含del_flag;停用后恢复原记录,不重建额度。 -- 首次启用必须写opening流水并核实历史已用量,不能默认为剩余全额。 -- MySQL5.7不依赖CHECK;逻辑外键、租户、数据权限、数量非负及状态转换由服务层强制。 -- 无自动级联物理删除;已有占用/使用/流水的证件与用量禁止删除,只能状态变更。 SET NAMES utf8mb4; CREATE TABLE `pl_purchase_cert` ( `id` varchar(64) NOT NULL COMMENT '主键UUID', `cert_no` varchar(100) NOT NULL COMMENT '证件编号,租户内按证种唯一;删除后不得重建另一额度池', `issue_date` date DEFAULT NULL COMMENT '核发日期', `product_name_on_cert` varchar(200) NOT NULL COMMENT '证面物品名称原文,不随产品主数据更名', `total_qty` decimal(18,6) NOT NULL COMMENT '证面核定总量,单位为quantity_unit', `quantity_unit` varchar(32) NOT NULL COMMENT '数量单位代码;同证全部余额使用此单位,异单位不自动换算', `valid_from` date DEFAULT NULL COMMENT '有效期起始日期', `valid_to` date DEFAULT NULL COMMENT '有效期截止日期', `valid_use_text` varchar(32) NOT NULL COMMENT '有效次数:一次有效或多次有效;不增加数值次数表单', `attachment_urls` text NOT NULL COMMENT 'MinIO原件附件地址,多附件逗号分隔', `status` varchar(20) NOT NULL DEFAULT 'draft' COMMENT 'draft草稿/active可用/suspended停用/void作废;到期由日期判断', `verified_by` varchar(64) DEFAULT NULL COMMENT '证件信息复核人', `verified_time` datetime DEFAULT NULL COMMENT '证件信息复核时间', `reserved_qty` decimal(18,6) NOT NULL DEFAULT 0 COMMENT '已安排未结转预占量;余额缓存,禁止手工直接编辑', `used_qty` decimal(18,6) NOT NULL DEFAULT 0 COMMENT '已发生量;余额缓存,包含有凭据的期初及调整流水', `revision` int NOT NULL DEFAULT 1 COMMENT '证面信息修订版本;使用时保留快照', `buyer_name` varchar(255) NOT NULL COMMENT '购买单位或个人名称', `buyer_address` varchar(1000) DEFAULT NULL COMMENT '购买方住所或地址', `buyer_legal_representative` varchar(100) DEFAULT NULL COMMENT '购买方法定代表人', `buyer_phone` varchar(100) DEFAULT NULL COMMENT '购买方电话', `seller_name` varchar(255) NOT NULL COMMENT '销售单位名称', `seller_address` varchar(1000) DEFAULT NULL COMMENT '销售单位住所', `seller_legal_representative` varchar(100) DEFAULT NULL COMMENT '销售方法定代表人', `seller_phone` varchar(100) DEFAULT NULL COMMENT '销售方电话', `purchase_purpose` varchar(1000) DEFAULT NULL COMMENT '用途', `tenant_no` varchar(64) NOT NULL COMMENT '租户编号,由服务端当前用户上下文设置', `order_num` int DEFAULT NULL COMMENT '公共排序号', `remark` varchar(1000) DEFAULT NULL COMMENT '系统备注,与证面备注分开', `create_by` varchar(64) DEFAULT NULL COMMENT '创建人', `create_dept_id` varchar(64) NOT NULL DEFAULT '' COMMENT '创建部门', `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `update_by` varchar(64) DEFAULT NULL COMMENT '更新人', `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', `del_flag` smallint NOT NULL DEFAULT 0 COMMENT '软删除标记:0正常,1删除', PRIMARY KEY (`id`), UNIQUE KEY `uk_purchase_cert_no` (`tenant_no`,`cert_no`), KEY `idx_purchase_cert_select` (`tenant_no`,`status`,`del_flag`,`valid_to`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC COMMENT='购买证档案(SQL设计草案)'; CREATE TABLE `pl_transport_cert` ( `id` varchar(64) NOT NULL COMMENT '主键UUID', `cert_no` varchar(100) NOT NULL COMMENT '证件编号,租户内按证种唯一;删除后不得重建另一额度池', `issue_date` date DEFAULT NULL COMMENT '核发日期', `product_name_on_cert` varchar(200) NOT NULL COMMENT '证面物品名称原文,不随产品主数据更名', `total_qty` decimal(18,6) NOT NULL COMMENT '证面核定总量,单位为quantity_unit', `quantity_unit` varchar(32) NOT NULL COMMENT '数量单位代码;同证全部余额使用此单位,异单位不自动换算', `valid_from` date DEFAULT NULL COMMENT '有效期起始日期', `valid_to` date DEFAULT NULL COMMENT '有效期截止日期', `valid_use_text` varchar(32) NOT NULL COMMENT '有效次数:一次有效或多次有效;不增加数值次数表单', `attachment_urls` text NOT NULL COMMENT 'MinIO原件附件地址,多附件逗号分隔', `status` varchar(20) NOT NULL DEFAULT 'draft' COMMENT 'draft草稿/active可用/suspended停用/void作废;到期由日期判断', `verified_by` varchar(64) DEFAULT NULL COMMENT '证件信息复核人', `verified_time` datetime DEFAULT NULL COMMENT '证件信息复核时间', `reserved_qty` decimal(18,6) NOT NULL DEFAULT 0 COMMENT '已安排未结转预占量;余额缓存,禁止手工直接编辑', `used_qty` decimal(18,6) NOT NULL DEFAULT 0 COMMENT '已发生量;余额缓存,包含有凭据的期初及调整流水', `revision` int NOT NULL DEFAULT 1 COMMENT '证面信息修订版本;使用时保留快照', `shipper_name` varchar(255) NOT NULL COMMENT '货主名称或姓名', `shipper_address` varchar(1000) DEFAULT NULL COMMENT '货主住所或地址', `shipper_legal_representative` varchar(100) DEFAULT NULL COMMENT '货主法定代表人', `shipper_phone` varchar(100) DEFAULT NULL COMMENT '货主电话', `packaging_text` varchar(255) DEFAULT NULL COMMENT '包装,例如槽罐', `carrier_name` varchar(255) DEFAULT NULL COMMENT '运输单位名称', `carrier_address_phone` varchar(1200) DEFAULT NULL COMMENT '运输单位住所/电话,按用户指定证面合并栏保存', `transport_mode` varchar(100) DEFAULT NULL COMMENT '运输方式,例如汽车', `vehicle_numbers_json` json NOT NULL COMMENT '车号列表,例如[皖HA3190,皖H10291],所有车共用该证额度', `route_text` text COMMENT '运输路线完整原文', `consignee_name` varchar(255) DEFAULT NULL COMMENT '收货单位名称或姓名', `applicant_name` varchar(255) DEFAULT NULL COMMENT '申请单位名称或姓名', `tenant_no` varchar(64) NOT NULL COMMENT '租户编号,由服务端当前用户上下文设置', `order_num` int DEFAULT NULL COMMENT '公共排序号', `remark` varchar(1000) DEFAULT NULL COMMENT '系统备注,与证面备注分开', `create_by` varchar(64) DEFAULT NULL COMMENT '创建人', `create_dept_id` varchar(64) NOT NULL DEFAULT '' COMMENT '创建部门', `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `update_by` varchar(64) DEFAULT NULL COMMENT '更新人', `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', `del_flag` smallint NOT NULL DEFAULT 0 COMMENT '软删除标记:0正常,1删除', PRIMARY KEY (`id`), UNIQUE KEY `uk_transport_cert_no` (`tenant_no`,`cert_no`), KEY `idx_transport_cert_select` (`tenant_no`,`status`,`del_flag`,`valid_to`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC COMMENT='运输证档案(SQL设计草案)'; CREATE TABLE `pl_transport_cert_purchase_ref` ( `id` varchar(64) NOT NULL COMMENT '主键UUID', `transport_cert_id` varchar(64) NOT NULL COMMENT '运输证ID', `reference_type` varchar(24) NOT NULL COMMENT 'purchase_permit/purchase_filing/export_permit/unknown', `reference_no` varchar(100) NOT NULL COMMENT '被引用的证号,保留未建档号码', `purchase_cert_id` varchar(64) DEFAULT NULL COMMENT '如为山峡所管理购买证,关联其ID;外部未知证号可空', `tenant_no` varchar(64) NOT NULL COMMENT '租户编号,由服务端当前用户上下文设置', `order_num` int DEFAULT NULL COMMENT '公共排序号', `remark` varchar(1000) DEFAULT NULL COMMENT '系统备注,与证面备注分开', `create_by` varchar(64) DEFAULT NULL COMMENT '创建人', `create_dept_id` varchar(64) NOT NULL DEFAULT '' COMMENT '创建部门', `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `update_by` varchar(64) DEFAULT NULL COMMENT '更新人', `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', `del_flag` smallint NOT NULL DEFAULT 0 COMMENT '软删除标记:0正常,1删除', PRIMARY KEY (`id`), UNIQUE KEY `uk_transport_ref` (`tenant_no`,`transport_cert_id`,`reference_no`), KEY `idx_ref_purchase` (`tenant_no`,`purchase_cert_id`,`del_flag`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC COMMENT='运输证证面引用的许可备案证号,不建立客户下游交易台账'; CREATE TABLE `pl_contract_cert_link` ( `id` varchar(64) NOT NULL COMMENT '主键UUID', `contract_id` varchar(64) NOT NULL COMMENT '山峡自身CRM合同ID,不录入客户下游合同', `contract_no_snapshot` varchar(100) NOT NULL COMMENT '系统关联合同编号快照,不等于证件编号', `cert_type` varchar(16) NOT NULL COMMENT 'purchase或transport', `cert_id` varchar(64) NOT NULL COMMENT '按cert_type指向对应证件表;服务层校验同租户', `link_status` varchar(16) NOT NULL DEFAULT 'active' COMMENT 'active可选/inactive停止新增使用;历史使用不迁移', `scope_revision` int NOT NULL DEFAULT 1 COMMENT '适用产品范围版本,增删或停用产品时递增,使未执行用证确认失效', `tenant_no` varchar(64) NOT NULL COMMENT '租户编号,由服务端当前用户上下文设置', `order_num` int DEFAULT NULL COMMENT '公共排序号', `remark` varchar(1000) DEFAULT NULL COMMENT '系统备注,与证面备注分开', `create_by` varchar(64) DEFAULT NULL COMMENT '创建人', `create_dept_id` varchar(64) NOT NULL DEFAULT '' COMMENT '创建部门', `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `update_by` varchar(64) DEFAULT NULL COMMENT '更新人', `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', `del_flag` smallint NOT NULL DEFAULT 0 COMMENT '软删除标记:0正常,1删除', PRIMARY KEY (`id`), UNIQUE KEY `uk_contract_cert` (`tenant_no`,`contract_id`,`cert_type`,`cert_id`), KEY `idx_contract_cert` (`tenant_no`,`contract_id`,`del_flag`), KEY `idx_link_cert` (`tenant_no`,`cert_type`,`cert_id`,`del_flag`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC COMMENT='山峡合同绑定购买证或运输证,一个合同可绑定多张证'; CREATE TABLE `pl_contract_cert_product` ( `id` varchar(64) NOT NULL COMMENT '主键UUID', `contract_cert_link_id` varchar(64) NOT NULL COMMENT 'pl_contract_cert_link.id,继承合同、证种及证件身份', `contract_product_id` varchar(64) NOT NULL COMMENT '该合同中的产品明细ID;多条产品行可属于同一合同证件绑定', `scope_status` varchar(16) NOT NULL DEFAULT 'active' COMMENT 'active允许新增使用/inactive停止新增使用;保留历史', `tenant_no` varchar(64) NOT NULL COMMENT '租户编号,由服务端当前用户上下文设置', `order_num` int DEFAULT NULL COMMENT '公共排序号', `remark` varchar(1000) DEFAULT NULL COMMENT '系统备注', `create_by` varchar(64) DEFAULT NULL COMMENT '创建人', `create_dept_id` varchar(64) NOT NULL DEFAULT '' COMMENT '创建部门', `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `update_by` varchar(64) DEFAULT NULL COMMENT '更新人', `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', `del_flag` smallint NOT NULL DEFAULT 0 COMMENT '软删除标记:0正常,1删除', PRIMARY KEY (`id`), UNIQUE KEY `uk_contract_cert_product` (`tenant_no`,`contract_cert_link_id`,`contract_product_id`), KEY `idx_scope_product` (`tenant_no`,`contract_product_id`,`scope_status`,`del_flag`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC COMMENT='合同产品与证件多对多,同产品可属于多个证件范围;各证独立额度'; CREATE TABLE `pl_plan_cert_usage` ( `id` varchar(64) NOT NULL COMMENT '主键UUID', `plan_id` varchar(64) NOT NULL COMMENT '运输计划ID', `plan_no_snapshot` varchar(100) NOT NULL COMMENT '计划编号快照', `transport_id` varchar(64) DEFAULT NULL COMMENT '运输单ID', `cert_type` varchar(16) NOT NULL COMMENT 'purchase或transport', `cert_id` varchar(64) NOT NULL COMMENT '购买证或运输证ID', `cert_no_snapshot` varchar(100) NOT NULL COMMENT '本次使用证号快照', `cert_revision` int NOT NULL COMMENT '本次确认的证件版本', `quantity_unit` varchar(32) NOT NULL COMMENT '数量单位代码;同证全部余额使用此单位,异单位不自动换算', `reserved_qty` decimal(18,6) NOT NULL DEFAULT 0 COMMENT '本计划对该证当前未结转的占用', `used_qty` decimal(18,6) NOT NULL DEFAULT 0 COMMENT '本计划对该证已发生量', `usage_status` varchar(20) NOT NULL DEFAULT 'draft' COMMENT 'draft/reserved/in_transit/settled/released/exception', `confirmed_by` varchar(64) DEFAULT NULL COMMENT '最近一次用证确认人', `confirmed_time` datetime DEFAULT NULL COMMENT '最近一次用证确认时间', `settled_time` datetime DEFAULT NULL COMMENT '最近一次实际量结转时间', `row_version` int NOT NULL DEFAULT 1 COMMENT '用量记录版本,防止使用旧版本重复修改', `confirmation_snapshot` json DEFAULT NULL COMMENT '证面、计划量、车号、实际装送主体/地址及核验结果快照', `tenant_no` varchar(64) NOT NULL COMMENT '租户编号,由服务端当前用户上下文设置', `order_num` int DEFAULT NULL COMMENT '公共排序号', `remark` varchar(1000) DEFAULT NULL COMMENT '系统备注,与证面备注分开', `create_by` varchar(64) DEFAULT NULL COMMENT '创建人', `create_dept_id` varchar(64) NOT NULL DEFAULT '' COMMENT '创建部门', `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `update_by` varchar(64) DEFAULT NULL COMMENT '更新人', `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', `del_flag` smallint NOT NULL DEFAULT 0 COMMENT '软删除标记:0正常,1删除', PRIMARY KEY (`id`), UNIQUE KEY `uk_plan_cert_usage` (`tenant_no`,`plan_id`,`cert_type`,`cert_id`), KEY `idx_usage_cert` (`tenant_no`,`cert_type`,`cert_id`,`usage_status`,`del_flag`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC COMMENT='一趟计划对一张证的用量汇总,采购与运输证独立记账'; CREATE TABLE `pl_plan_cert_usage_item` ( `id` varchar(64) NOT NULL COMMENT '主键UUID', `usage_id` varchar(64) NOT NULL COMMENT 'pl_plan_cert_usage.id', `contract_cert_link_id` varchar(64) NOT NULL COMMENT '合同与证件绑定ID,须与usage的证件相同', `contract_cert_product_id` varchar(64) NOT NULL COMMENT '本产品的适用范围明细ID:pl_contract_cert_product.id', `contract_scope_revision` int NOT NULL COMMENT '本次确认的合同证件适用范围版本', `contract_id` varchar(64) NOT NULL COMMENT '本次履行的山峡合同ID', `contract_product_id` varchar(64) NOT NULL COMMENT '对应合同产品行ID', `plan_product_id` varchar(64) NOT NULL COMMENT '计划产品行ID', `source_stop_type` varchar(16) NOT NULL COMMENT '唯一计量侧:load或delivery', `source_stop_id` varchar(64) NOT NULL COMMENT '计量来源装货或送货段ID', `source_stop_product_id` varchar(64) NOT NULL COMMENT '计量来源段次产品行ID', `related_stop_products` json DEFAULT NULL COMMENT '关联另一侧段产品ID列表,仅用于追溯,不另行扣量', `source_unit` varchar(32) NOT NULL COMMENT '来源段产品单位', `planned_source_qty` decimal(18,6) NOT NULL COMMENT '安排时来源段产品完整计划数量快照,来源单位;跨证重复快照不得求和', `allocated_source_qty` decimal(18,6) DEFAULT NULL COMMENT '本证分配的来源计划数量,来源单位;同产品各购买证合计须等于完整计划量', `actual_source_qty` decimal(18,6) DEFAULT NULL COMMENT '归档时来源段产品完整实际数量快照,来源单位;未知为NULL', `actual_allocated_source_qty` decimal(18,6) DEFAULT NULL COMMENT '归档时本证分配的来源实际数量;各购买证合计须等于完整实际量,重新确认', `planned_cert_qty` decimal(18,6) DEFAULT NULL COMMENT '用户确认的安排用证量,证件单位;草稿可空,预占前必填', `reserve_input_mode` varchar(16) DEFAULT NULL COMMENT 'same_unit同单位带入/manual异单位人工填写', `reserve_conversion_note` varchar(1000) DEFAULT NULL COMMENT '异单位安排折算说明,manual时必填;不存自动换算系数', `reserve_confirmed_by` varchar(64) DEFAULT NULL COMMENT '安排折算量确认人,服务端取当前用户', `reserve_confirmed_time` datetime DEFAULT NULL COMMENT '安排折算量确认时间', `actual_cert_qty` decimal(18,6) DEFAULT NULL COMMENT '用户确认的实际用证量,证件单位;不可用预占量替代', `settle_input_mode` varchar(16) DEFAULT NULL COMMENT 'same_unit同单位带入/manual异单位重新人工填写', `settle_conversion_note` varchar(1000) DEFAULT NULL COMMENT '异单位归档折算说明,manual时必填', `settle_confirmed_by` varchar(64) DEFAULT NULL COMMENT '归档实际用证量确认人,服务端取当前用户', `settle_confirmed_time` datetime DEFAULT NULL COMMENT '归档实际用证量确认时间', `source_fingerprint` char(64) DEFAULT NULL COMMENT '源数据版本摘要;数量/单位/合同/产品/车辆/装送范围变化使确认失效', `reserved_qty` decimal(18,6) NOT NULL DEFAULT 0 COMMENT '本分配当前预占量,证件单位', `used_qty` decimal(18,6) NOT NULL DEFAULT 0 COMMENT '本分配已发生量,证件单位', `item_status` varchar(20) NOT NULL DEFAULT 'draft' COMMENT 'draft/reserved/in_transit/settled/released/exception', `source_snapshot` json DEFAULT NULL COMMENT '合同、产品、原始计划/归档量与分配依据快照', `tenant_no` varchar(64) NOT NULL COMMENT '租户编号,由服务端当前用户上下文设置', `order_num` int DEFAULT NULL COMMENT '公共排序号', `remark` varchar(1000) DEFAULT NULL COMMENT '系统备注,与证面备注分开', `create_by` varchar(64) DEFAULT NULL COMMENT '创建人', `create_dept_id` varchar(64) NOT NULL DEFAULT '' COMMENT '创建部门', `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `update_by` varchar(64) DEFAULT NULL COMMENT '更新人', `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', `del_flag` smallint NOT NULL DEFAULT 0 COMMENT '软删除标记:0正常,1删除', PRIMARY KEY (`id`), UNIQUE KEY `uk_usage_source` (`tenant_no`,`usage_id`,`source_stop_type`,`source_stop_product_id`), KEY `idx_usage_item_contract` (`tenant_no`,`contract_product_id`,`del_flag`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC COMMENT='用量来源分配,指定一侧为计量来源,避免装送重复相加'; CREATE TABLE `pl_cert_qty_log` ( `id` varchar(64) NOT NULL COMMENT '主键UUID', `operation_id` varchar(64) NOT NULL COMMENT '业务幂等操作号;同一次双证操作共用一个号', `request_hash` char(64) NOT NULL COMMENT '规范化业务请求SHA256,同幂等号不同请求应拒绝', `cert_type` varchar(16) NOT NULL COMMENT 'purchase或transport', `cert_id` varchar(64) NOT NULL COMMENT '证件ID', `usage_id` varchar(64) DEFAULT NULL COMMENT '计划用量ID;有凭据的期初导入可空', `plan_id` varchar(64) DEFAULT NULL COMMENT '计划ID;期初导入可空', `event_type` varchar(24) NOT NULL COMMENT 'opening/reserve/resize/release/settle/adjust/total_adjust', `quantity_unit` varchar(32) NOT NULL COMMENT '数量单位代码;同证全部余额使用此单位,异单位不自动换算', `total_delta` decimal(18,6) NOT NULL DEFAULT 0 COMMENT '核定总量变动,须附修订依据', `reserved_delta` decimal(18,6) NOT NULL DEFAULT 0 COMMENT '预占增量,释放或结转为负数', `used_delta` decimal(18,6) NOT NULL DEFAULT 0 COMMENT '实际使用增量,有依据的纠错可以为负数', `before_total_qty` decimal(18,6) NOT NULL COMMENT '操作前核定总量', `after_total_qty` decimal(18,6) NOT NULL COMMENT '操作后核定总量', `before_reserved_qty` decimal(18,6) NOT NULL COMMENT '操作前预占', `after_reserved_qty` decimal(18,6) NOT NULL COMMENT '操作后预占', `before_used_qty` decimal(18,6) NOT NULL COMMENT '操作前已发生', `after_used_qty` decimal(18,6) NOT NULL COMMENT '操作后已发生', `reason` varchar(1000) NOT NULL COMMENT '操作原因或业务动作说明', `evidence_urls` text COMMENT '期初、核定量修订或实际量调整凭据,多个URL逗号分隔', `event_snapshot` json DEFAULT NULL COMMENT '来源分配、证面版本、校验及变更前后明细', `tenant_no` varchar(64) NOT NULL COMMENT '租户编号,由服务端当前用户上下文设置', `order_num` int DEFAULT NULL COMMENT '公共排序号', `remark` varchar(1000) DEFAULT NULL COMMENT '系统备注,与证面备注分开', `create_by` varchar(64) DEFAULT NULL COMMENT '创建人', `create_dept_id` varchar(64) NOT NULL DEFAULT '' COMMENT '创建部门', `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `update_by` varchar(64) DEFAULT NULL COMMENT '更新人', `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', `del_flag` smallint NOT NULL DEFAULT 0 COMMENT '软删除标记:0正常,1删除', PRIMARY KEY (`id`), UNIQUE KEY `uk_cert_operation` (`tenant_no`,`operation_id`,`cert_type`,`cert_id`), KEY `idx_qty_log_cert` (`tenant_no`,`cert_type`,`cert_id`,`create_time`), KEY `idx_qty_log_usage` (`tenant_no`,`usage_id`,`create_time`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC COMMENT='证件额度及核销次数流水,追加留痕,不覆盖历史';