fix(T+与核算): 对齐抵顶口径和托管说明

根据审查结果统一以物抵顶的线下核实口径,移除当前模型、初始化脚本和前端接口中的自动折算误导文案。\n补充业务接入必须持有共享 T+ 命名锁的执行契约,明确来源快照稳定性依赖。\nWindows 部署说明区分新 supervisor 与旧任务迁移检查,避免现场并行启动旧 worker。\n\n影响范围:T+ 托管文档、业务接入契约、回款/台账模型注释和参数试算说明。\n\nCo-Authored-By: Claude Code <noreply@anthropic.com>
This commit is contained in:
liuwenxin committed 2026-11-06 14:49:06 +08:00
1 parent eb4e06d1e8
commit a4794489b1
8 files changed
+127 -26

No files matched your search

+77 -3
View File
@@ -664,8 +664,12 @@ CREATE TABLE receipts (
shipment_id BIGINT UNSIGNED COMMENT '发货单ID(shipments.id;手动指定的回款对应批次,须与本行业务一致;NULL=暂未指定)',
receipt_date DATE NOT NULL COMMENT '回款到账日(M3 按此日匹配参数版本,对照表 #11)',
amount DECIMAL(14, 2) NOT NULL COMMENT '回款金额(≥0;一期禁负数/红字)',
is_barter TINYINT NOT NULL COMMENT '以物抵顶标记:1是 0否(M3 核算按应发绩效×barter.discount 折算,M2 仅标记)' DEFAULT '0',
is_barter TINYINT NOT NULL COMMENT '以物抵顶标记:1是 0否(特殊绩效线下核实,系统不自动折算)' DEFAULT '0',
settlement_status TINYINT NOT NULL COMMENT '绩效核算状态:0未核算 1已核算(M3 核算防重锚点;已核算回款禁改禁删)' DEFAULT '0',
confirmation_status TINYINT NOT NULL DEFAULT 0 COMMENT '人工确认状态:0待确认 1已确认,独立于凭证及核算状态',
confirmed_by VARCHAR(64) COMMENT '人工确认人账号快照',
confirmed_at DATETIME COMMENT '人工确认时间',
confirmed_revision VARCHAR(64) COMMENT '人工确认时回款关键内容指纹',
remark VARCHAR(255) COMMENT '备注',
create_time DATETIME NOT NULL COMMENT '创建时间' DEFAULT CURRENT_TIMESTAMP,
update_time DATETIME NOT NULL COMMENT '更新时间' DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
@@ -877,7 +881,7 @@ CREATE TABLE performance_ledgers (
rate_text VARCHAR(32) NOT NULL COMMENT '计提比例原文(如 4/360,防 Fraction 截断;聚合行存 12.5%/5% 结构说明)',
converted_profit NUMERIC(14, 2) COMMENT '折算毛利润额(可负;混合业务为各行汇总)',
performance_amount NUMERIC(14, 2) COMMENT '绩效金额(可负,裁决:负绩效照算不归零)',
barter_applied TINYINT NOT NULL COMMENT '以物抵顶折算:1已按 80% 折算 0否' DEFAULT '0',
barter_applied TINYINT NOT NULL COMMENT '以物抵顶处理标记:当前系统不自动折算,1表示由线下规则处理 0表示未标记' DEFAULT '0',
weight_r INTEGER COMMENT '支付权重 R(回款占销售额百分比向下取整)',
payment_weight NUMERIC(7, 6) COMMENT '支付权重系数 R×R(展示用)',
payable_amount NUMERIC(14, 2) COMMENT '当期应付绩效(绩效 × 支付权重;聚合行为当月汇总)',
@@ -1712,4 +1716,74 @@ VALUES
('TPL_PREPAY_FIXED', '预付款·固定计提', 'prepay_fixed', JSON_OBJECT('rate','prepay.rate'), '乘法:预付回款额 × 预付比例', 50, 1, 1);
-- 迁移版本记录:须等于当前 head,使 alembic upgrade head 成为空操作
INSERT INTO alembic_version (version_num) VALUES ('28a9b0c1d2e3');
INSERT INTO param_definitions (param_code,param_name,param_group,value_type,dimension_type,default_value,description,sort_order,status) SELECT 'receipt.confirmation.enabled','回款人工确认开关','回款确认','BOOL','NONE','1','默认开启。关闭仅跳过人工确认,继续校验凭证等资格;与工资审核独立。',16,1 WHERE NOT EXISTS (SELECT 1 FROM param_definitions WHERE param_code='receipt.confirmation.enabled');
INSERT INTO permissions (perm_code,perm_name,perm_type,sort_order,status) SELECT 'business:receipts:confirm','回款管理:人工确认',2,100,1 WHERE NOT EXISTS (SELECT 1 FROM permissions WHERE perm_code='business:receipts:confirm');
UPDATE permissions p JOIN permissions parent ON parent.perm_code='business:receipts:view' SET p.parent_id=parent.id,p.status=1 WHERE p.perm_code='business:receipts:confirm';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='business:receipts:confirm' WHERE r.role_code IN ('admin','payroll_maker') AND NOT EXISTS (SELECT 1 FROM role_permissions old WHERE old.role_id=r.id AND old.permission_id=p.id);
-- V30:业务接入与核算准备解耦;默认关闭自动接入,不执行回填或工资核算。
ALTER TABLE products MODIFY product_category VARCHAR(32) NULL COMMENT '核算分类,NULL=待确认';
ALTER TABLE customers MODIFY customer_type VARCHAR(32) NULL DEFAULT NULL COMMENT '核算客户类型,NULL=待确认';
ALTER TABLE business_items MODIFY product_category VARCHAR(32) NULL COMMENT '核算分类,NULL=待确认';
ALTER TABLE shipments MODIFY freight_amount DECIMAL(14,2) NULL DEFAULT NULL COMMENT '运费金额,NULL=来源待核实';
ALTER TABLE businesses ADD integration_json JSON NULL COMMENT 'T+接入范围及来源人员摘要,非核算快照';
ALTER TABLE tplus_source_heads ADD source_parent_id VARCHAR(64) NULL COMMENT '源父单据ID查询投影', ADD source_customer_id VARCHAR(64) NULL COMMENT '源客户ID查询投影', ADD source_date VARCHAR(10) NULL COMMENT '源业务日期查询投影';
UPDATE tplus_source_heads h JOIN tplus_sync_records r ON r.id=h.record_id SET h.source_parent_id=NULLIF(JSON_UNQUOTE(JSON_EXTRACT(r.payload_json,'$.source_parent_id')),'null'), h.source_customer_id=NULLIF(JSON_UNQUOTE(COALESCE(JSON_EXTRACT(r.payload_json,'$.idcustomer'),JSON_EXTRACT(r.payload_json,'$.idpartner'))),'null'), h.source_date=LEFT(NULLIF(JSON_UNQUOTE(COALESCE(JSON_EXTRACT(r.payload_json,'$.voucherdate'),JSON_EXTRACT(r.payload_json,'$.voucherDate'))),'null'),10);
CREATE INDEX idx_tplus_source_heads_parent ON tplus_source_heads(source_database,entity_type,source_parent_id);
CREATE INDEX idx_tplus_source_heads_customer_date ON tplus_source_heads(source_database,entity_type,source_customer_id,source_date);
CREATE INDEX idx_tplus_source_heads_date ON tplus_source_heads(source_database,entity_type,source_date,id);
CREATE TABLE tplus_business_sync_configs (
id BIGINT UNSIGNED NOT NULL COMMENT '主键ID' AUTO_INCREMENT,
source_database VARCHAR(128) NOT NULL COMMENT '源账套',
enabled INTEGER NOT NULL COMMENT '自动接入是否启用',
start_date DATE NOT NULL COMMENT '业务接入起点',
version INTEGER NOT NULL COMMENT '配置乐观版本',
updated_by BIGINT UNSIGNED NOT NULL COMMENT '授权启用账号',
last_error VARCHAR(64) COMMENT '后台接入暂停原因',
create_time DATETIME NOT NULL COMMENT '创建时间' DEFAULT CURRENT_TIMESTAMP,
update_time DATETIME NOT NULL COMMENT '更新时间' DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
CONSTRAINT pk_tplus_business_sync_configs PRIMARY KEY (id),
CONSTRAINT uk_tplus_business_sync_configs_source UNIQUE (source_database)
)ENGINE=InnoDB CHARSET=utf8mb4 COMMENT='T+业务自动接入设置' COLLATE utf8mb4_general_ci;
CREATE TABLE tplus_business_documents (
id BIGINT UNSIGNED NOT NULL COMMENT '主键ID' AUTO_INCREMENT,
source_database VARCHAR(128) NOT NULL COMMENT '源账套',
entity_type VARCHAR(32) NOT NULL COMMENT '源实体',
source_id VARCHAR(64) NOT NULL COMMENT '源单据或明细ID',
source_no VARCHAR(128) COMMENT '原始单号',
record_id BIGINT UNSIGNED NOT NULL COMMENT '当前观察到的源快照ID',
applied_record_id BIGINT UNSIGNED COMMENT '已接入的源快照ID',
fingerprint VARCHAR(64) COMMENT '已应用的业务字段指纹',
business_id BIGINT UNSIGNED COMMENT '关联业务ID',
target_id BIGINT UNSIGNED COMMENT '正式单据或明细ID',
status VARCHAR(24) NOT NULL COMMENT 'APPLIED/PENDING/CONFLICT/EXCLUDED',
reason VARCHAR(128) COMMENT '固定待补或差异编码',
data_json JSON NOT NULL COMMENT '最小必要来源与差异说明',
create_time DATETIME NOT NULL COMMENT '创建时间' DEFAULT CURRENT_TIMESTAMP,
update_time DATETIME NOT NULL COMMENT '更新时间' DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
CONSTRAINT pk_tplus_business_documents PRIMARY KEY (id),
CONSTRAINT uk_tplus_business_documents_source_entity_id UNIQUE (source_database, entity_type, source_id)
)ENGINE=InnoDB CHARSET=utf8mb4 COMMENT='T+业务单据接入与差异账本' COLLATE utf8mb4_general_ci;
CREATE INDEX idx_tplus_business_documents_business_entity ON tplus_business_documents (business_id, entity_type, id);
CREATE INDEX idx_tplus_business_documents_source_status ON tplus_business_documents (source_database, status, id);
-- 运行控制不随开发初始化删除;已有设置保留,新库默认停止。
CREATE TABLE IF NOT EXISTS tplus_runtime_controls (
id BIGINT UNSIGNED NOT NULL,
desired_state VARCHAR(16) NOT NULL DEFAULT 'STOPPED',
actual_state VARCHAR(16) NOT NULL DEFAULT 'STOPPED',
worker_phase VARCHAR(16) NOT NULL DEFAULT 'STOPPED',
heartbeat_at DATETIME NULL,
last_error VARCHAR(255) NULL,
host VARCHAR(128) NULL,
platform VARCHAR(32) NULL,
owner VARCHAR(36) NULL,
version INTEGER NOT NULL DEFAULT 0,
updated_by BIGINT UNSIGNED NULL,
create_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
update_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
CONSTRAINT pk_tplus_runtime_control PRIMARY KEY (id)
) ENGINE=InnoDB CHARSET=utf8mb4 COLLATE utf8mb4_general_ci COMMENT='T+读取服务运行控制';
INSERT IGNORE INTO tplus_runtime_controls (id) VALUES (1);
INSERT INTO alembic_version (version_num) VALUES ('33e4f5a6b7c8');