118 lines
10 KiB
MySQL
118 lines
10 KiB
MySQL
|
|
-- Running upgrade 79bcc5aa98d4 -> 3bca400421c6
|
|||
|
|
|
|||
|
|
CREATE TABLE monthly_settlements (
|
|||
|
|
id BIGINT UNSIGNED NOT NULL COMMENT '主键ID' AUTO_INCREMENT,
|
|||
|
|
settlement_month VARCHAR(7) NOT NULL COMMENT '结算月份(YYYY-MM;全表唯一)',
|
|||
|
|
status TINYINT NOT NULL COMMENT '状态:1草稿 2待审批 3已审定(终态=已锁定)4已驳回(回草稿)' DEFAULT '1',
|
|||
|
|
total_performance NUMERIC(14, 2) COMMENT '绩效金额合计(可负)',
|
|||
|
|
total_payable NUMERIC(14, 2) COMMENT '应付绩效合计(可负)',
|
|||
|
|
person_count TINYINT NOT NULL COMMENT '结算人数' DEFAULT '0',
|
|||
|
|
snapshot_json JSON COMMENT '月度总览快照(生成时刻的确认回款口径说明与汇总参数)',
|
|||
|
|
approval_order_no VARCHAR(32) COMMENT '关联审批单号(冗余固化;开关关闭自动通过时也有单)',
|
|||
|
|
submitter_id BIGINT UNSIGNED COMMENT '提交人ID(账号删除后置空)',
|
|||
|
|
submitter_name VARCHAR(64) NOT NULL COMMENT '提交人用户名(冗余固化)',
|
|||
|
|
locked_at DATETIME COMMENT '锁定时间(status=3 时回填)',
|
|||
|
|
locked_by 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_monthly_settlements PRIMARY KEY (id),
|
|||
|
|
CONSTRAINT fk_monthly_settlements_submitter_id FOREIGN KEY(submitter_id) REFERENCES users (id) ON DELETE SET NULL,
|
|||
|
|
CONSTRAINT uk_monthly_settlements_settlement_month UNIQUE (settlement_month)
|
|||
|
|
)CHARSET=utf8mb4 ENGINE=InnoDB COMMENT='月度结算表(按月一行;通过即锁定,锁定后走调整单)' COLLATE utf8mb4_general_ci;
|
|||
|
|
|
|||
|
|
CREATE TABLE adjustment_orders (
|
|||
|
|
id BIGINT UNSIGNED NOT NULL COMMENT '主键ID' AUTO_INCREMENT,
|
|||
|
|
order_no VARCHAR(32) NOT NULL COMMENT '调整单号,自动生成 TZ{YYYYMMDD}-{4位当日序号}',
|
|||
|
|
settlement_month VARCHAR(7) NOT NULL COMMENT '调整月份(YYYY-MM;跨月规则待澄清 #9 前不限制)',
|
|||
|
|
personnel_id BIGINT UNSIGNED NOT NULL COMMENT '调整人员ID(personnel.id)',
|
|||
|
|
personnel_name VARCHAR(64) NOT NULL COMMENT '调整人员姓名(冗余固化)',
|
|||
|
|
direction TINYINT NOT NULL COMMENT '方向:1补发 2扣减',
|
|||
|
|
amount NUMERIC(14, 2) NOT NULL COMMENT '调整金额(恒正,方向表达语义)',
|
|||
|
|
reason VARCHAR(255) NOT NULL COMMENT '扣补说明(必填,审批与追溯锚点)',
|
|||
|
|
status TINYINT NOT NULL COMMENT '状态:1待审批 2已生效 3已驳回 4已撤回' DEFAULT '1',
|
|||
|
|
submitter_id BIGINT UNSIGNED COMMENT '提交人ID(账号删除后置空)',
|
|||
|
|
submitter_name VARCHAR(64) 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_adjustment_orders PRIMARY KEY (id),
|
|||
|
|
CONSTRAINT fk_adjustment_orders_personnel_id FOREIGN KEY(personnel_id) REFERENCES personnel (id) ON DELETE RESTRICT,
|
|||
|
|
CONSTRAINT fk_adjustment_orders_submitter_id FOREIGN KEY(submitter_id) REFERENCES users (id) ON DELETE SET NULL,
|
|||
|
|
CONSTRAINT uk_adjustment_orders_order_no UNIQUE (order_no)
|
|||
|
|
)CHARSET=utf8mb4 ENGINE=InnoDB COMMENT='调整单表(已锁定月份的补发/扣减;走审批;生效后不回写月结快照)' COLLATE utf8mb4_general_ci;
|
|||
|
|
|
|||
|
|
CREATE TABLE settlement_items (
|
|||
|
|
id BIGINT UNSIGNED NOT NULL COMMENT '主键ID' AUTO_INCREMENT,
|
|||
|
|
settlement_id BIGINT UNSIGNED NOT NULL COMMENT '月结ID(monthly_settlements.id;头删明细随删)',
|
|||
|
|
personnel_id BIGINT UNSIGNED NOT NULL COMMENT '结算人员ID(personnel.id)',
|
|||
|
|
personnel_name VARCHAR(64) NOT NULL COMMENT '结算人员姓名(冗余固化)',
|
|||
|
|
role_code VARCHAR(32) NOT NULL COMMENT '岗位编码(主岗,聚合锚点)',
|
|||
|
|
calc_type TINYINT NOT NULL COMMENT '核算类型:1单笔回款 2经理团队聚合',
|
|||
|
|
performance_sum NUMERIC(14, 2) NOT NULL COMMENT '绩效金额合计(可负;聚合行排除经理个人户业绩,#12 暂口径)',
|
|||
|
|
payable_sum NUMERIC(14, 2) NOT NULL COMMENT '应付绩效合计(可负)',
|
|||
|
|
basic_amount NUMERIC(14, 2) COMMENT '月工资标准(personnel.salary_standard 当月快照)',
|
|||
|
|
salary_mode VARCHAR(16) COMMENT '月工资口径快照:INCLUDE/DEDUCT/EXCLUDE',
|
|||
|
|
net_amount NUMERIC(14, 2) COMMENT '净工资 = 绩效±基本工资(按口径;试用期 0)',
|
|||
|
|
is_probation TINYINT NOT NULL COMMENT '试用期:1绩效照算不发放(net=0,超年累计记 note)0否' DEFAULT '0',
|
|||
|
|
probation_note VARCHAR(255) COMMENT '试用期说明(年累计超阈值部分年底一次性结算)',
|
|||
|
|
snapshot_json JSON COMMENT '个人明细快照(台账行引用列表)',
|
|||
|
|
CONSTRAINT pk_settlement_items PRIMARY KEY (id),
|
|||
|
|
CONSTRAINT fk_settlement_items_personnel_id FOREIGN KEY(personnel_id) REFERENCES personnel (id) ON DELETE RESTRICT,
|
|||
|
|
CONSTRAINT fk_settlement_items_settlement_id FOREIGN KEY(settlement_id) REFERENCES monthly_settlements (id) ON DELETE CASCADE
|
|||
|
|
)CHARSET=utf8mb4 ENGINE=InnoDB COMMENT='月结明细表(按人固化;支持负数工资;锁定后只读)' COLLATE utf8mb4_general_ci;
|
|||
|
|
|
|||
|
|
CREATE TABLE performance_ledgers (
|
|||
|
|
id BIGINT UNSIGNED NOT NULL COMMENT '主键ID' AUTO_INCREMENT,
|
|||
|
|
receipt_id BIGINT UNSIGNED COMMENT '回款ID(receipts.id;聚合行可为 NULL)',
|
|||
|
|
calc_version TINYINT NOT NULL COMMENT '核算版本(重算+1,旧行 is_active=0)' DEFAULT '1',
|
|||
|
|
is_active TINYINT NOT NULL COMMENT '生效标记:1当前生效 0已被重算替代(重算受控 UPDATE 例外)' DEFAULT '1',
|
|||
|
|
calc_type TINYINT NOT NULL COMMENT '核算类型:1单笔回款 2经理团队聚合(月度)' DEFAULT '1',
|
|||
|
|
business_id BIGINT UNSIGNED NOT NULL COMMENT '业务ID(固化无外键;聚合行为该经理名下首行业务ID,报表下钻锚点)',
|
|||
|
|
business_no VARCHAR(32) NOT NULL COMMENT '业务编号(冗余固化,列表免联查)',
|
|||
|
|
personnel_id BIGINT UNSIGNED NOT NULL COMMENT '归属营销人员ID(personnel.id;核算归属锚点)',
|
|||
|
|
personnel_name VARCHAR(64) NOT NULL COMMENT '归属营销人员姓名(冗余固化)',
|
|||
|
|
role_code VARCHAR(32) NOT NULL COMMENT '岗位编码(business_roles.role_code,计提公式锚点)',
|
|||
|
|
customer_type VARCHAR(32) NOT NULL COMMENT '客户分类:personal/manager_personal/enterprise',
|
|||
|
|
product_category VARCHAR(32) NOT NULL COMMENT '产品类别:municipal_water/rail_transit/mixed(混合业务,行级明细入 snapshot_json)',
|
|||
|
|
ship_date DATE COMMENT '发货日期(回款天数基准)',
|
|||
|
|
receipt_date DATE NOT NULL COMMENT '回款日期(参数版本匹配日,裁决 #11)',
|
|||
|
|
payment_days INTEGER COMMENT '回款天数(发货日首日计第 1 天;未指定批次为 NULL;先款后货照实负值)',
|
|||
|
|
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',
|
|||
|
|
weight_r INTEGER COMMENT '支付权重 R(回款占销售额百分比向下取整)',
|
|||
|
|
payment_weight NUMERIC(7, 6) COMMENT '支付权重系数 R×R(展示用)',
|
|||
|
|
payable_amount NUMERIC(14, 2) COMMENT '当期应付绩效(绩效 × 支付权重;聚合行为当月汇总)',
|
|||
|
|
settlement_month VARCHAR(7) NOT NULL COMMENT '归属月(回款日期所在月,YYYY-MM;月结与报表维度)',
|
|||
|
|
is_probation TINYINT NOT NULL COMMENT '试用期:1照算不发放 0否' DEFAULT '0',
|
|||
|
|
missing_cost TINYINT NOT NULL COMMENT '成本缺失:1有明细行缺成本(该行毛利按 0 计)0否' DEFAULT '0',
|
|||
|
|
snapshot_json JSON COMMENT '计算快照(所用参数版本与行级折算明细,重算可回溯)',
|
|||
|
|
settlement_id BIGINT UNSIGNED COMMENT '所属月结ID(月结生成时回填;NULL=未入结)',
|
|||
|
|
calc_reason VARCHAR(255) 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,
|
|||
|
|
CONSTRAINT pk_performance_ledgers PRIMARY KEY (id),
|
|||
|
|
CONSTRAINT fk_performance_ledger_personnel_id FOREIGN KEY(personnel_id) REFERENCES personnel (id) ON DELETE RESTRICT,
|
|||
|
|
CONSTRAINT fk_performance_ledger_receipt_id FOREIGN KEY(receipt_id) REFERENCES receipts (id) ON DELETE RESTRICT,
|
|||
|
|
CONSTRAINT fk_performance_ledger_settlement_id FOREIGN KEY(settlement_id) REFERENCES monthly_settlements (id) ON DELETE RESTRICT,
|
|||
|
|
CONSTRAINT uk_performance_ledger_receipt_id_calc_version UNIQUE (receipt_id, calc_version)
|
|||
|
|
)CHARSET=utf8mb4 ENGINE=InnoDB COMMENT='绩效核算台账表(append-only 版本行;重算插新版本旧行仅翻 is_active)' COLLATE utf8mb4_general_ci;
|
|||
|
|
|
|||
|
|
CREATE INDEX idx_performance_ledger_business_id ON performance_ledgers (business_id);
|
|||
|
|
|
|||
|
|
CREATE INDEX idx_performance_ledger_month_active ON performance_ledgers (settlement_month, is_active);
|
|||
|
|
|
|||
|
|
CREATE INDEX idx_performance_ledger_month_personnel_type ON performance_ledgers (settlement_month, personnel_id, calc_type);
|
|||
|
|
|
|||
|
|
CREATE INDEX idx_performance_ledger_personnel_id ON performance_ledgers (personnel_id);
|
|||
|
|
|
|||
|
|
ALTER TABLE approval_orders MODIFY order_type TINYINT NOT NULL COMMENT '审批对象类型:1二次分配方案 2月度结算 3调整单';
|
|||
|
|
|
|||
|
|
INSERT INTO param_definitions (id, param_code, param_name, param_group, value_type, unit, dimension_type, options_text, default_value, value_min, value_max, description, sort_order, status) VALUES (19, 'approval.adjustment.enabled', '调整单审批开关', '审批开关', 'BOOL', NULL, 'NONE', NULL, '0', NULL, NULL, '0=调整单提交即生效(系统自动通过留痕);1=走财务复核→领导审核审批流。调整单是已锁定月份补发/扣减的唯一通道', 19, 1);
|
|||
|
|
|
|||
|
|
INSERT INTO param_values (id, param_id, dimension_value, effective_date, value_text, batch_id) VALUES (22, 19, '', '2026-01-01', '0', 1);
|
|||
|
|
|
|||
|
|
UPDATE alembic_version SET version_num='3bca400421c6' WHERE alembic_version.version_num = '79bcc5aa98d4';
|
|||
|
|
|