380 lines
27 KiB
SQL
380 lines
27 KiB
SQL
CREATE DATABASE IF NOT EXISTS baiyue_finance
|
|
DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci;
|
|
USE baiyue_finance;
|
|
|
|
CREATE TABLE IF NOT EXISTS fin_fee_source (
|
|
id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '主键ID',
|
|
source_system VARCHAR(32) NOT NULL DEFAULT 'FIRSTLEG' COMMENT '费用来源系统,当前FIRSTLEG表示头程服务',
|
|
source_fee_id BIGINT UNSIGNED NOT NULL COMMENT '来源系统费用记录ID',
|
|
source_fee_version INT UNSIGNED NOT NULL COMMENT '来源费用版本号,用于固化不可变来源版本',
|
|
customer_id BIGINT UNSIGNED NOT NULL COMMENT '费用来源所属客户ID',
|
|
source_type VARCHAR(32) NOT NULL COMMENT '来源费用类型:INBOUND_FEE入库单费用、CONTAINER_FEE柜子费用',
|
|
source_no VARCHAR(64) NULL COMMENT '来源入库单号或柜号快照,可为空',
|
|
direction VARCHAR(16) NOT NULL COMMENT '费用方向:RECEIVABLE应收、PAYABLE应付',
|
|
order_id BIGINT UNSIGNED NULL COMMENT '来源头程订单ID,可为空',
|
|
inbound_id BIGINT UNSIGNED NULL COMMENT '来源入库单ID,可为空',
|
|
container_id BIGINT UNSIGNED NULL COMMENT '来源Firstleg装柜计划ID,可为空',
|
|
fee_item_code VARCHAR(64) NOT NULL COMMENT '来源费用项目编码快照',
|
|
fee_item_name VARCHAR(200) NOT NULL COMMENT '来源费用项目名称快照',
|
|
amount DECIMAL(20,6) NOT NULL COMMENT '来源费用金额,精度6位小数',
|
|
currency_code CHAR(3) NOT NULL DEFAULT 'CNY' COMMENT 'ISO 4217三位币种代码,首期仅CNY',
|
|
source_hash CHAR(64) NOT NULL COMMENT 'Firstleg费用来源完整快照SHA-256哈希',
|
|
source_snapshot JSON NOT NULL COMMENT 'Firstleg费用来源完整不可变JSON快照',
|
|
review_status VARCHAR(16) NOT NULL DEFAULT 'PENDING' COMMENT 'Finance费用审核状态:PENDING待审核、APPROVED已通过、REJECTED已驳回',
|
|
review_reason VARCHAR(500) NULL COMMENT 'Finance费用审核说明或驳回原因',
|
|
settlement_included TINYINT NOT NULL DEFAULT 0 COMMENT '是否已人工确认参与结算:0否、1是',
|
|
settlement_reason VARCHAR(500) NULL COMMENT '参与或禁止结算的人工说明',
|
|
operation_version INT UNSIGNED NOT NULL DEFAULT 0 COMMENT '费用审核和结算参与操作版本号',
|
|
status VARCHAR(16) NOT NULL DEFAULT 'AVAILABLE' COMMENT '费用来源状态:AVAILABLE可结算、SUPERSEDED已被新版本替代、VOIDED已作废',
|
|
created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '来源快照入池时间',
|
|
updated_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '来源状态最后更新时间,数据修改时自动刷新',
|
|
PRIMARY KEY (id),
|
|
UNIQUE KEY uk_fin_fee_source (source_system, source_fee_id, source_fee_version),
|
|
KEY idx_fin_fee_source_customer (customer_id, status),
|
|
CONSTRAINT chk_fin_fee_source_currency CHECK (currency_code = 'CNY'),
|
|
CONSTRAINT chk_fin_fee_source_amount CHECK (amount >= 0)
|
|
) ENGINE=InnoDB COMMENT='Firstleg费用来源快照池;账单人工选择并固化明细';
|
|
|
|
CREATE TABLE IF NOT EXISTS fin_inbox_event (
|
|
id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '主键ID',
|
|
event_id VARCHAR(128) NOT NULL COMMENT '来源系统事件唯一ID',
|
|
source_system VARCHAR(32) NOT NULL COMMENT '事件来源系统标识',
|
|
event_type VARCHAR(64) NOT NULL COMMENT '来源事件类型',
|
|
payload JSON NOT NULL COMMENT '来源事件原始JSON载荷快照',
|
|
payload_hash CHAR(64) NOT NULL COMMENT '规范化事件内容SHA-256哈希,用于同事件ID冲突检测',
|
|
result_resource_id BIGINT UNSIGNED NULL COMMENT '成功处理生成或定位的费用来源快照ID',
|
|
error_code VARCHAR(64) NULL COMMENT '处理失败时的稳定FIN错误码',
|
|
status VARCHAR(16) NOT NULL DEFAULT 'RECEIVED' COMMENT '事件处理状态:RECEIVED已接收、PROCESSED已完成、FAILED处理失败',
|
|
received_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '事件接收时间',
|
|
processed_at DATETIME(3) NULL COMMENT '事件处理完成时间,未完成时为空',
|
|
PRIMARY KEY (id),
|
|
UNIQUE KEY uk_fin_inbox_event (source_system, event_id)
|
|
) ENGINE=InnoDB COMMENT='Firstleg费用事件幂等接收记录';
|
|
|
|
CREATE TABLE IF NOT EXISTS fin_subject (
|
|
id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '主键ID',
|
|
subject_code VARCHAR(64) NOT NULL COMMENT '平台财务主体唯一编码',
|
|
subject_name VARCHAR(200) NOT NULL COMMENT '平台收付款及核算主体名称',
|
|
status VARCHAR(16) NOT NULL DEFAULT 'ACTIVE' COMMENT '财务主体状态,ACTIVE表示启用',
|
|
version INT UNSIGNED NOT NULL DEFAULT 0 COMMENT '乐观锁版本号',
|
|
created_by BIGINT UNSIGNED NOT NULL DEFAULT 0 COMMENT '创建操作人ID,0表示系统初始化',
|
|
updated_by BIGINT UNSIGNED NOT NULL DEFAULT 0 COMMENT '最后修改操作人ID,0表示系统初始化',
|
|
created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '记录创建时间',
|
|
updated_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '最后更新时间,数据修改时自动刷新',
|
|
PRIMARY KEY (id),
|
|
UNIQUE KEY uk_fin_subject_code (subject_code)
|
|
) ENGINE=InnoDB COMMENT='平台财务主体;首期仅一个有效主体';
|
|
|
|
INSERT INTO fin_subject
|
|
(subject_code, subject_name, status, version, created_by, updated_by)
|
|
VALUES
|
|
('PLATFORM_DEFAULT', '平台', 'ACTIVE', 0, 0, 0)
|
|
ON DUPLICATE KEY UPDATE
|
|
subject_name = VALUES(subject_name), status = 'ACTIVE', updated_by = 0;
|
|
|
|
CREATE TABLE IF NOT EXISTS fin_customer_settlement_profile (
|
|
id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '主键ID',
|
|
tenant_id BIGINT UNSIGNED NOT NULL COMMENT '客户ID和数据隔离键',
|
|
customer_name_snapshot VARCHAR(200) NOT NULL COMMENT '客户名称快照,客户主数据后续变更不追改',
|
|
credit_days INT UNSIGNED NOT NULL DEFAULT 30 COMMENT '客户账期自然日数,默认30天',
|
|
status VARCHAR(16) NOT NULL DEFAULT 'ACTIVE' COMMENT '客户结算配置状态,ACTIVE表示启用',
|
|
version INT UNSIGNED NOT NULL DEFAULT 0 COMMENT '乐观锁版本号',
|
|
created_by BIGINT UNSIGNED NOT NULL COMMENT '创建操作人ID',
|
|
updated_by BIGINT UNSIGNED NOT NULL COMMENT '最后修改操作人ID',
|
|
created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '记录创建时间',
|
|
updated_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '最后更新时间,数据修改时自动刷新',
|
|
PRIMARY KEY (id),
|
|
UNIQUE KEY uk_fin_customer_profile (tenant_id),
|
|
CONSTRAINT chk_fin_customer_profile_tenant CHECK (tenant_id > 0),
|
|
CONSTRAINT chk_fin_customer_profile_days CHECK (credit_days <= 3650)
|
|
) ENGINE=InnoDB COMMENT='客户结算配置;一客户一个结算对象';
|
|
|
|
CREATE TABLE IF NOT EXISTS fin_bill (
|
|
id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '主键ID',
|
|
tenant_id BIGINT UNSIGNED NOT NULL COMMENT '客户ID和数据隔离键',
|
|
bill_no VARCHAR(64) NOT NULL COMMENT '客户范围内唯一账单编号',
|
|
subject_id BIGINT UNSIGNED NOT NULL COMMENT '平台财务主体ID',
|
|
customer_name_snapshot VARCHAR(200) NOT NULL COMMENT '出账时客户名称快照',
|
|
currency_code CHAR(3) NOT NULL DEFAULT 'CNY' COMMENT 'ISO 4217三位币种代码,首期仅CNY',
|
|
bill_date DATE NOT NULL COMMENT '账单日期',
|
|
due_date DATE NOT NULL COMMENT '到期日期,由账单日期加客户账期计算',
|
|
status VARCHAR(24) NOT NULL DEFAULT 'DRAFT' COMMENT '账单状态:DRAFT草稿、ISSUED已出账、PARTIALLY_PAID部分收款、PAID已收清、VOIDED已作废',
|
|
total_amount DECIMAL(20,6) NOT NULL DEFAULT 0 COMMENT '账单全部明细总金额,精度6位小数',
|
|
received_amount DECIMAL(20,6) NOT NULL DEFAULT 0 COMMENT '账单累计已收金额,精度6位小数',
|
|
outstanding_amount DECIMAL(20,6) NOT NULL DEFAULT 0 COMMENT '账单未收余额,精度6位小数',
|
|
remark VARCHAR(500) NULL COMMENT '平台账单内部备注',
|
|
issued_at DATETIME(3) NULL COMMENT '出账时间,未出账时为空',
|
|
issued_by BIGINT UNSIGNED NULL COMMENT '出账操作人ID,未出账时为空',
|
|
voided_at DATETIME(3) NULL COMMENT '作废时间,未作废时为空',
|
|
voided_by BIGINT UNSIGNED NULL COMMENT '作废操作人ID,未作废时为空',
|
|
void_reason VARCHAR(500) NULL COMMENT '账单作废原因',
|
|
version INT UNSIGNED NOT NULL DEFAULT 0 COMMENT '乐观锁版本号',
|
|
created_by BIGINT UNSIGNED NOT NULL COMMENT '创建操作人ID',
|
|
created_by_name VARCHAR(128) NULL COMMENT '创建操作人名称快照',
|
|
updated_by BIGINT UNSIGNED NOT NULL COMMENT '最后修改操作人ID',
|
|
updated_by_name VARCHAR(128) NULL COMMENT '最后修改操作人名称快照',
|
|
created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '记录创建时间',
|
|
updated_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '最后更新时间,数据修改时自动刷新',
|
|
PRIMARY KEY (id),
|
|
UNIQUE KEY uk_fin_bill_no (tenant_id, bill_no),
|
|
KEY idx_fin_bill_customer_status_date (tenant_id, status, bill_date),
|
|
CONSTRAINT chk_fin_bill_tenant CHECK (tenant_id > 0),
|
|
CONSTRAINT chk_fin_bill_currency CHECK (currency_code = 'CNY'),
|
|
CONSTRAINT chk_fin_bill_amounts CHECK (total_amount >= 0 AND received_amount >= 0 AND outstanding_amount >= 0)
|
|
) ENGINE=InnoDB COMMENT='客户CNY账单;首期账单即应收台账';
|
|
|
|
CREATE TABLE IF NOT EXISTS fin_bill_line (
|
|
id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '主键ID',
|
|
tenant_id BIGINT UNSIGNED NOT NULL COMMENT '客户ID和数据隔离键',
|
|
bill_id BIGINT UNSIGNED NOT NULL COMMENT '所属账单ID',
|
|
source_type VARCHAR(32) NOT NULL DEFAULT 'FIRSTLEG_FEE' COMMENT '费用来源类型,FIRSTLEG_FEE表示头程费用',
|
|
source_id BIGINT UNSIGNED NOT NULL COMMENT '来源费用ID',
|
|
source_version INT UNSIGNED NOT NULL COMMENT '出账固化的来源费用版本号',
|
|
source_no VARCHAR(64) NULL COMMENT '来源费用单号快照,可为空',
|
|
order_id BIGINT UNSIGNED NULL COMMENT '来源头程订单ID,可为空',
|
|
inbound_id BIGINT UNSIGNED NULL COMMENT '来源入库单ID,可为空',
|
|
fee_item_code VARCHAR(64) NOT NULL COMMENT '出账时费用项目编码快照',
|
|
fee_item_name VARCHAR(200) NOT NULL COMMENT '出账时费用项目名称快照',
|
|
amount DECIMAL(20,6) NOT NULL COMMENT '账单明细金额,精度6位小数',
|
|
adjustment_reason VARCHAR(500) NULL COMMENT '最近一次账单调整行原因;完整历史保存在修订与审计记录',
|
|
currency_code CHAR(3) NOT NULL DEFAULT 'CNY' COMMENT 'ISO 4217三位币种代码,首期仅CNY',
|
|
created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '账单明细创建时间',
|
|
PRIMARY KEY (id),
|
|
UNIQUE KEY uk_fin_bill_line_source (source_type, source_id, source_version),
|
|
KEY idx_fin_bill_line_bill (tenant_id, bill_id),
|
|
CONSTRAINT chk_fin_bill_line_tenant CHECK (tenant_id > 0),
|
|
CONSTRAINT chk_fin_bill_line_currency CHECK (currency_code = 'CNY'),
|
|
CONSTRAINT chk_fin_bill_line_amount CHECK (amount >= 0)
|
|
) ENGINE=InnoDB COMMENT='账单费用来源快照明细';
|
|
|
|
CREATE TABLE IF NOT EXISTS fin_receipt (
|
|
id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '主键ID',
|
|
tenant_id BIGINT UNSIGNED NOT NULL COMMENT '客户ID和数据隔离键',
|
|
receipt_no VARCHAR(64) NOT NULL COMMENT '客户范围内唯一收款编号',
|
|
subject_id BIGINT UNSIGNED NOT NULL COMMENT '实际收款的平台财务主体ID',
|
|
currency_code CHAR(3) NOT NULL DEFAULT 'CNY' COMMENT 'ISO 4217三位币种代码,首期仅CNY',
|
|
received_amount DECIMAL(20,6) NOT NULL COMMENT '本次实际到账金额,精度6位小数',
|
|
received_at DATETIME(3) NOT NULL COMMENT '实际到账时间',
|
|
payment_method VARCHAR(32) NULL COMMENT '收款方式编码',
|
|
voucher_no VARCHAR(128) NULL COMMENT '银行流水号或线下收款凭证号',
|
|
voucher_file_ids JSON NOT NULL COMMENT 'File服务财务凭证文件ID字符串数组JSON',
|
|
status VARCHAR(16) NOT NULL DEFAULT 'CONFIRMED' COMMENT '收款状态:CONFIRMED已确认、VOIDED已作废',
|
|
remark VARCHAR(500) NULL COMMENT '平台收款内部备注',
|
|
voided_at DATETIME(3) NULL COMMENT '收款作废时间',
|
|
voided_by BIGINT UNSIGNED NULL COMMENT '收款作废操作人ID',
|
|
void_reason VARCHAR(500) NULL COMMENT '收款作废原因',
|
|
version INT UNSIGNED NOT NULL DEFAULT 0 COMMENT '乐观锁版本号',
|
|
created_by BIGINT UNSIGNED NOT NULL COMMENT '创建操作人ID',
|
|
created_by_name VARCHAR(128) NULL COMMENT '创建操作人名称快照',
|
|
updated_by BIGINT UNSIGNED NOT NULL COMMENT '最后修改操作人ID',
|
|
created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '记录创建时间',
|
|
updated_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '最后更新时间,数据修改时自动刷新',
|
|
PRIMARY KEY (id),
|
|
UNIQUE KEY uk_fin_receipt_no (tenant_id, receipt_no),
|
|
KEY idx_fin_receipt_customer_time (tenant_id, received_at),
|
|
CONSTRAINT chk_fin_receipt_tenant CHECK (tenant_id > 0),
|
|
CONSTRAINT chk_fin_receipt_currency CHECK (currency_code = 'CNY'),
|
|
CONSTRAINT chk_fin_receipt_amount CHECK (received_amount > 0)
|
|
) ENGINE=InnoDB COMMENT='平台财务人工登记收款及凭证';
|
|
|
|
CREATE TABLE IF NOT EXISTS fin_receipt_bill (
|
|
id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '主键ID',
|
|
tenant_id BIGINT UNSIGNED NOT NULL COMMENT '客户ID和数据隔离键',
|
|
receipt_id BIGINT UNSIGNED NOT NULL COMMENT '收款记录ID',
|
|
bill_id BIGINT UNSIGNED NOT NULL COMMENT '被分配收款的账单ID',
|
|
applied_amount DECIMAL(20,6) NOT NULL COMMENT '本笔收款分配到该账单的金额,精度6位小数',
|
|
created_by BIGINT UNSIGNED NOT NULL COMMENT '分配操作人ID',
|
|
created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '收款分配创建时间',
|
|
PRIMARY KEY (id),
|
|
UNIQUE KEY uk_fin_receipt_bill_pair (receipt_id, bill_id),
|
|
KEY idx_fin_receipt_bill_bill (tenant_id, bill_id),
|
|
CONSTRAINT chk_fin_receipt_bill_tenant CHECK (tenant_id > 0),
|
|
CONSTRAINT chk_fin_receipt_bill_amount CHECK (applied_amount > 0)
|
|
) ENGINE=InnoDB COMMENT='人工收款对应账单金额;UI不使用复杂核销术语';
|
|
|
|
CREATE TABLE IF NOT EXISTS fin_cost (
|
|
id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '主键ID',
|
|
tenant_id BIGINT UNSIGNED NOT NULL COMMENT '客户ID和数据隔离键',
|
|
cost_no VARCHAR(64) NOT NULL COMMENT '客户范围内唯一成本编号',
|
|
cost_type VARCHAR(24) NOT NULL COMMENT '成本归属类型:SINGLE_ORDER单票成本、CONTAINER_SHARED整柜公共成本',
|
|
order_id BIGINT UNSIGNED NULL COMMENT '成本归属的头程订单ID,单票成本必填',
|
|
inbound_id BIGINT UNSIGNED NULL COMMENT '成本关联的入库单ID,可为空',
|
|
container_id BIGINT UNSIGNED NULL COMMENT 'Firstleg装柜计划ID,整柜公共成本必填',
|
|
supplier_id BIGINT UNSIGNED NULL COMMENT 'Warehouse公共往来单位或供应商引用ID',
|
|
supplier_name_snapshot VARCHAR(200) NULL COMMENT '登记成本时供应商或成本对象名称快照',
|
|
fee_item_code VARCHAR(64) NOT NULL COMMENT '成本费用项目编码快照',
|
|
fee_item_name VARCHAR(200) NOT NULL COMMENT '成本费用项目名称快照',
|
|
currency_code CHAR(3) NOT NULL DEFAULT 'CNY' COMMENT 'ISO 4217三位币种代码,首期仅CNY',
|
|
cost_amount DECIMAL(20,6) NOT NULL COMMENT '成本总金额,精度6位小数',
|
|
voucher_file_ids JSON NOT NULL COMMENT 'File服务财务凭证文件ID字符串数组JSON',
|
|
status VARCHAR(16) NOT NULL DEFAULT 'DRAFT' COMMENT '成本状态:DRAFT草稿、CONFIRMED已确认、VOIDED已作废',
|
|
remark VARCHAR(500) NULL COMMENT '平台成本内部备注',
|
|
confirmed_at DATETIME(3) NULL COMMENT '成本确认时间',
|
|
confirmed_by BIGINT UNSIGNED NULL COMMENT '成本确认操作人ID',
|
|
voided_at DATETIME(3) NULL COMMENT '成本作废时间',
|
|
voided_by BIGINT UNSIGNED NULL COMMENT '成本作废操作人ID',
|
|
void_reason VARCHAR(500) NULL COMMENT '成本作废原因',
|
|
version INT UNSIGNED NOT NULL DEFAULT 0 COMMENT '乐观锁版本号',
|
|
created_by BIGINT UNSIGNED NOT NULL COMMENT '创建操作人ID',
|
|
created_by_name VARCHAR(128) NULL COMMENT '创建操作人名称快照',
|
|
updated_by BIGINT UNSIGNED NOT NULL COMMENT '最后修改操作人ID',
|
|
created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '记录创建时间',
|
|
updated_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '最后更新时间,数据修改时自动刷新',
|
|
PRIMARY KEY (id),
|
|
UNIQUE KEY uk_fin_cost_no (tenant_id, cost_no),
|
|
KEY idx_fin_cost_ticket (tenant_id, order_id, inbound_id),
|
|
KEY idx_fin_cost_container (tenant_id, container_id),
|
|
CONSTRAINT chk_fin_cost_tenant CHECK (tenant_id > 0),
|
|
CONSTRAINT chk_fin_cost_currency CHECK (currency_code = 'CNY'),
|
|
CONSTRAINT chk_fin_cost_amount CHECK (cost_amount > 0),
|
|
CONSTRAINT chk_fin_cost_target CHECK (
|
|
(cost_type = 'SINGLE_ORDER' AND order_id IS NOT NULL AND container_id IS NULL)
|
|
OR (cost_type = 'CONTAINER_SHARED' AND container_id IS NOT NULL)
|
|
)
|
|
) ENGINE=InnoDB COMMENT='人工成本;单票直接归属,整柜按体积分摊';
|
|
|
|
CREATE TABLE IF NOT EXISTS fin_cost_allocation (
|
|
id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '主键ID',
|
|
tenant_id BIGINT UNSIGNED NOT NULL COMMENT '客户ID和数据隔离键',
|
|
cost_id BIGINT UNSIGNED NOT NULL COMMENT '整柜公共成本ID',
|
|
order_id BIGINT UNSIGNED NOT NULL COMMENT '参与分摊的头程订单ID',
|
|
inbound_id BIGINT UNSIGNED NULL COMMENT '参与分摊订单关联的入库单ID,可为空',
|
|
volume_cbm DECIMAL(20,6) NOT NULL COMMENT '该订单分摊时有效体积快照,单位CBM、精度6位',
|
|
total_volume_cbm DECIMAL(20,6) NOT NULL COMMENT '柜内有效订单总体积快照,单位CBM、精度6位',
|
|
allocation_rate DECIMAL(20,10) NOT NULL COMMENT '订单体积占总体积的分摊比例,精度10位',
|
|
allocated_amount DECIMAL(20,6) NOT NULL COMMENT '分摊到该订单的成本金额,精度6位',
|
|
rounding_adjustment TINYINT NOT NULL DEFAULT 0 COMMENT '尾差归集标记:0未归集、1该行为实际尾差归集行',
|
|
created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '不可变分摊快照创建时间',
|
|
PRIMARY KEY (id),
|
|
UNIQUE KEY uk_fin_cost_allocation_order (cost_id, order_id),
|
|
KEY idx_fin_cost_allocation_query (tenant_id, order_id),
|
|
CONSTRAINT chk_fin_cost_allocation_volume CHECK (volume_cbm >= 0 AND total_volume_cbm > 0),
|
|
CONSTRAINT chk_fin_cost_allocation_amount CHECK (allocated_amount >= 0)
|
|
) ENGINE=InnoDB COMMENT='整柜成本按有效体积分摊的可审计结果';
|
|
|
|
CREATE TABLE IF NOT EXISTS fin_bill_revision (
|
|
id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '主键ID',
|
|
tenant_id BIGINT UNSIGNED NOT NULL COMMENT '客户ID和数据隔离键',
|
|
bill_id BIGINT UNSIGNED NOT NULL COMMENT '被调整账单ID',
|
|
version INT UNSIGNED NOT NULL COMMENT '调整前账单乐观锁版本号',
|
|
reason VARCHAR(500) NULL COMMENT '本次账单调整原因',
|
|
bill_snapshot JSON NOT NULL COMMENT '调整前账单主记录不可变JSON快照',
|
|
line_snapshot JSON NOT NULL COMMENT '调整前全部账单明细不可变JSON数组快照',
|
|
created_by BIGINT UNSIGNED NOT NULL COMMENT '执行调整的操作人ID',
|
|
created_by_name VARCHAR(128) NULL COMMENT '执行调整的操作人名称快照',
|
|
created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '修订快照创建时间',
|
|
PRIMARY KEY (id),
|
|
UNIQUE KEY uk_fin_bill_revision (bill_id, version),
|
|
KEY idx_fin_bill_revision_tenant (tenant_id, bill_id)
|
|
) ENGINE=InnoDB COMMENT='出账后调整前的不可变账单及明细版本快照';
|
|
|
|
CREATE TABLE IF NOT EXISTS fin_idempotency_record (
|
|
id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '主键ID',
|
|
tenant_id BIGINT UNSIGNED NOT NULL COMMENT '客户ID和数据隔离键',
|
|
operator_id BIGINT UNSIGNED NOT NULL COMMENT '发起幂等写操作的操作人ID',
|
|
operation VARCHAR(64) NOT NULL COMMENT '幂等隔离的财务操作类型',
|
|
idempotency_key VARCHAR(128) NOT NULL COMMENT '调用方提供的幂等键',
|
|
request_hash CHAR(64) NOT NULL COMMENT '规范化完整请求的SHA-256十六进制哈希',
|
|
status VARCHAR(16) NOT NULL COMMENT '幂等处理状态:PROCESSING处理中、SUCCEEDED成功、FAILED失败',
|
|
result_resource_id BIGINT UNSIGNED NULL COMMENT '成功操作生成或更新的业务资源ID',
|
|
error_code VARCHAR(64) NULL COMMENT '失败操作的稳定业务错误码',
|
|
created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '幂等请求首次登记时间',
|
|
updated_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '幂等处理状态最后更新时间',
|
|
PRIMARY KEY (id),
|
|
UNIQUE KEY uk_fin_idempotency (tenant_id, operator_id, operation, idempotency_key)
|
|
) ENGINE=InnoDB COMMENT='Finance人工写操作幂等记录';
|
|
|
|
CREATE TABLE IF NOT EXISTS fin_audit_log (
|
|
id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '主键ID',
|
|
tenant_id BIGINT UNSIGNED NOT NULL COMMENT '客户ID和数据隔离键',
|
|
resource_type VARCHAR(32) NOT NULL COMMENT '被审计财务资源类型',
|
|
resource_id BIGINT UNSIGNED NOT NULL COMMENT '被审计财务资源ID',
|
|
action VARCHAR(64) NOT NULL COMMENT '审计业务动作类型',
|
|
reason VARCHAR(500) NULL COMMENT '操作原因或说明',
|
|
before_data JSON NULL COMMENT '操作前业务数据JSON快照',
|
|
after_data JSON NULL COMMENT '操作后业务数据JSON快照',
|
|
operator_id BIGINT UNSIGNED NOT NULL COMMENT '操作人ID',
|
|
operator_name_snapshot VARCHAR(128) NOT NULL COMMENT '操作发生时的操作人名称快照',
|
|
request_id VARCHAR(128) NULL COMMENT '入口请求ID,用于问题定位',
|
|
trace_id VARCHAR(128) NULL COMMENT '分布式调用链追踪ID',
|
|
created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '不可变审计记录创建时间',
|
|
PRIMARY KEY (id),
|
|
KEY idx_fin_audit_resource (tenant_id, resource_type, resource_id, created_at),
|
|
KEY idx_fin_audit_operator (operator_id, created_at)
|
|
) ENGINE=InnoDB COMMENT='Finance不可变业务审计明细';
|
|
|
|
CREATE TABLE IF NOT EXISTS fin_settlement (
|
|
id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '正式应收或应付结算单ID',
|
|
tenant_id BIGINT UNSIGNED NOT NULL COMMENT '客户ID和数据隔离键',
|
|
settlement_no VARCHAR(64) NOT NULL COMMENT '客户范围内唯一结算单号',
|
|
direction VARCHAR(16) NOT NULL COMMENT '结算方向:RECEIVABLE应收、PAYABLE应付',
|
|
customer_name_snapshot VARCHAR(200) NOT NULL COMMENT '结算生成时客户名称快照',
|
|
supplier_id BIGINT UNSIGNED NULL COMMENT '应付结算供应商ID;应收结算为空',
|
|
supplier_name_snapshot VARCHAR(200) NULL COMMENT '应付结算供应商名称快照',
|
|
reconciliation_statement_id BIGINT UNSIGNED NULL COMMENT '应收结算关联的已出账客户对账单ID',
|
|
business_period VARCHAR(32) NULL COMMENT '结算业务期间快照',
|
|
currency_code CHAR(3) NOT NULL DEFAULT 'CNY' COMMENT 'ISO 4217三位币种代码,首期仅CNY',
|
|
total_amount DECIMAL(20,6) NOT NULL COMMENT '正式结算总金额,精度6位小数',
|
|
paid_amount DECIMAL(20,6) NOT NULL DEFAULT 0 COMMENT '累计已收或已付金额,精度6位小数',
|
|
outstanding_amount DECIMAL(20,6) NOT NULL COMMENT '未结清金额,精度6位小数',
|
|
generated_date DATE NOT NULL COMMENT '结算单生成日期',
|
|
due_date DATE NOT NULL COMMENT '结算到期日期',
|
|
payment_status VARCHAR(24) NOT NULL DEFAULT 'UNPAID' COMMENT '收付款状态:UNPAID未收付、PARTIALLY_PAID部分收付、PAID已结清',
|
|
status VARCHAR(24) NOT NULL DEFAULT 'ISSUED' COMMENT '结算状态:ISSUED已生效、PARTIALLY_PAID部分收付、PAID已结清、VOIDED已作废',
|
|
version INT UNSIGNED NOT NULL DEFAULT 0 COMMENT '乐观锁版本号',
|
|
created_by BIGINT UNSIGNED NOT NULL COMMENT '创建操作人ID',
|
|
updated_by BIGINT UNSIGNED NOT NULL COMMENT '最后修改操作人ID',
|
|
created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '记录创建时间',
|
|
updated_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '最后更新时间',
|
|
PRIMARY KEY (id),
|
|
UNIQUE KEY uk_fin_settlement_no (tenant_id, settlement_no),
|
|
UNIQUE KEY uk_fin_settlement_receivable_statement (tenant_id, reconciliation_statement_id, direction),
|
|
KEY idx_fin_settlement_customer_direction_status (tenant_id, direction, status),
|
|
KEY idx_fin_settlement_supplier_status (supplier_id, direction, status),
|
|
CONSTRAINT chk_fin_settlement_tenant CHECK (tenant_id > 0),
|
|
CONSTRAINT chk_fin_settlement_currency CHECK (currency_code = 'CNY'),
|
|
CONSTRAINT chk_fin_settlement_direction CHECK (direction IN ('RECEIVABLE', 'PAYABLE')),
|
|
CONSTRAINT chk_fin_settlement_amounts CHECK (total_amount >= 0 AND paid_amount >= 0 AND outstanding_amount >= 0 AND total_amount = paid_amount + outstanding_amount)
|
|
) ENGINE=InnoDB COMMENT='正式应收与应付结算单;客户账户金额由本表派生';
|
|
|
|
CREATE TABLE IF NOT EXISTS fin_settlement_line (
|
|
id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '正式结算单明细ID',
|
|
tenant_id BIGINT UNSIGNED NOT NULL COMMENT '客户ID和数据隔离键',
|
|
settlement_id BIGINT UNSIGNED NOT NULL COMMENT '所属正式结算单ID',
|
|
fee_source_id BIGINT UNSIGNED NOT NULL COMMENT '结算固化的Finance费用来源ID',
|
|
amount DECIMAL(20,6) NOT NULL COMMENT '结算明细金额,精度6位小数',
|
|
currency_code CHAR(3) NOT NULL DEFAULT 'CNY' COMMENT 'ISO 4217三位币种代码,首期仅CNY',
|
|
created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '明细创建时间',
|
|
PRIMARY KEY (id),
|
|
UNIQUE KEY uk_fin_settlement_line_source (settlement_id, fee_source_id),
|
|
KEY idx_fin_settlement_line_customer (tenant_id, settlement_id),
|
|
KEY idx_fin_settlement_line_source (fee_source_id),
|
|
CONSTRAINT chk_fin_settlement_line_tenant CHECK (tenant_id > 0),
|
|
CONSTRAINT chk_fin_settlement_line_currency CHECK (currency_code = 'CNY'),
|
|
CONSTRAINT chk_fin_settlement_line_amount CHECK (amount > 0)
|
|
) ENGINE=InnoDB COMMENT='正式结算单费用来源金额快照明细';
|
|
|
|
CREATE TABLE IF NOT EXISTS fin_settlement_payment (
|
|
id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '正式结算单收付款记录ID',
|
|
tenant_id BIGINT UNSIGNED NOT NULL COMMENT '客户ID和数据隔离键',
|
|
settlement_id BIGINT UNSIGNED NOT NULL COMMENT '所属正式结算单ID',
|
|
transaction_type VARCHAR(16) NOT NULL COMMENT '交易类型:RECEIPT收款、PAYMENT付款',
|
|
transaction_no VARCHAR(64) NOT NULL COMMENT '客户范围内唯一收付款业务号',
|
|
transaction_date DATE NOT NULL COMMENT '实际收款或付款日期',
|
|
amount DECIMAL(20,6) NOT NULL COMMENT '本次收款或付款金额,精度6位小数',
|
|
currency_code CHAR(3) NOT NULL DEFAULT 'CNY' COMMENT 'ISO 4217三位币种代码,首期仅CNY',
|
|
method VARCHAR(32) NOT NULL COMMENT '人工登记的收付款方式',
|
|
reference_no VARCHAR(128) NULL COMMENT '银行流水号或外部参考号',
|
|
voucher_file_ids JSON NOT NULL COMMENT 'File服务财务凭证文件ID字符串数组',
|
|
remark VARCHAR(500) NULL COMMENT '收付款内部备注',
|
|
created_by BIGINT UNSIGNED NOT NULL COMMENT '登记操作人ID',
|
|
created_by_name VARCHAR(128) NULL COMMENT '登记操作人名称快照',
|
|
created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '登记时间',
|
|
PRIMARY KEY (id),
|
|
UNIQUE KEY uk_fin_settlement_payment_no (tenant_id, transaction_no),
|
|
KEY idx_fin_settlement_payment_settlement (tenant_id, settlement_id, created_at),
|
|
CONSTRAINT chk_fin_settlement_payment_tenant CHECK (tenant_id > 0),
|
|
CONSTRAINT chk_fin_settlement_payment_currency CHECK (currency_code = 'CNY'),
|
|
CONSTRAINT chk_fin_settlement_payment_amount CHECK (amount > 0)
|
|
) ENGINE=InnoDB COMMENT='正式结算单人工收付款与凭证记录';
|