Files
shanxia2.0/docs/sql/designs/2026-10-25-purchase-transport-cert-draft.sql

285 lines
24 KiB
SQL
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
-- 购买证、运输证与用量核算模型(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='证件额度及核销次数流水,追加留痕,不覆盖历史';