汇总已落盘的借款本金与还款、兼容历史编号的周期化编号、付款责任与回单核验、报销进度和排序、PWA/采购事务、错误原因与日期校验及ERP退役。 统一共享预算池锁序和锁后判断,恢复差旅原预算选择,补原因码固定夹具及反向完整性检查。 纳入配套迁移、测试、受管QA、分层验收合同、规约及任务记录;原始证据留在ignored artifacts。 关联任务:09-17-company-loan-principal-repayment、09-17-erp-exclusive-retirement、09-18-reimbursement-periodic-numbering、09-08-reimbursement-payment-closeout、09-18-local-concurrency-product-fixes、09-19-budget-pool-concurrency、09-05-error-explainability-payment-readiness。 预算补审由Claude定向验证2文件928项通过,原4446/28及r6结果仍仅对应各自历史输入;本轮未重跑测试。 完整新候选门禁、R1真实入口接入与12项公网义务仍开放。生产编号未启用、差旅仍冻结;不推送、不部署,不宣称发布资格。
52 行
2.4 KiB
PL/PgSQL
52 行
2.4 KiB
PL/PgSQL
-- Additive only: existing identifiers and both old counters and drafts stay intact.
|
|
CREATE TABLE "business_number_policies" (
|
|
"version" INTEGER PRIMARY KEY CHECK ("version" = 2),
|
|
"effective_at" TIMESTAMP(3) NOT NULL,
|
|
"enabled" BOOLEAN NOT NULL DEFAULT false,
|
|
"updated_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updated_by" UUID NOT NULL,
|
|
"reference" TEXT NOT NULL
|
|
);
|
|
CREATE TABLE "business_number_counters" (
|
|
"key" TEXT PRIMARY KEY,
|
|
"current_number" BIGINT NOT NULL DEFAULT 0 CHECK ("current_number" >= 0),
|
|
"updated_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP
|
|
);
|
|
ALTER TABLE "purchase_requests" ADD COLUMN "numbering_version" INTEGER NOT NULL DEFAULT 1
|
|
CHECK ("numbering_version" IN (1, 2));
|
|
-- No INSERT into policy; activation is a separate, explicitly authorized operation.
|
|
|
|
-- Keep the original eligibility and issued high-water durable across rollback or
|
|
-- accidental administrative resets. A pause changes only policy.enabled.
|
|
CREATE FUNCTION guard_business_numbering_history() RETURNS trigger AS $$
|
|
BEGIN
|
|
IF TG_OP = 'DELETE' THEN
|
|
RAISE EXCEPTION 'business numbering history cannot be deleted' USING ERRCODE = '23514';
|
|
END IF;
|
|
IF TG_TABLE_NAME = 'business_number_policies' THEN
|
|
IF NEW.version <> OLD.version OR NEW.effective_at <> OLD.effective_at THEN
|
|
RAISE EXCEPTION 'business numbering activation is immutable' USING ERRCODE = '23514';
|
|
END IF;
|
|
ELSIF TG_TABLE_NAME = 'business_number_counters' THEN
|
|
IF NEW.key <> OLD.key OR NEW.current_number < OLD.current_number THEN
|
|
RAISE EXCEPTION 'business numbering high-water cannot decrease' USING ERRCODE = '23514';
|
|
END IF;
|
|
END IF;
|
|
RETURN NEW;
|
|
END;
|
|
$$ LANGUAGE plpgsql;
|
|
CREATE TRIGGER business_number_policy_history BEFORE UPDATE OR DELETE ON business_number_policies
|
|
FOR EACH ROW EXECUTE FUNCTION guard_business_numbering_history();
|
|
CREATE TRIGGER business_number_counter_history BEFORE UPDATE OR DELETE ON business_number_counters
|
|
FOR EACH ROW EXECUTE FUNCTION guard_business_numbering_history();
|
|
CREATE FUNCTION guard_purchase_numbering_version() RETURNS trigger AS $$
|
|
BEGIN
|
|
IF NEW.numbering_version <> OLD.numbering_version THEN
|
|
RAISE EXCEPTION 'purchase numbering eligibility is immutable' USING ERRCODE = '23514';
|
|
END IF;
|
|
RETURN NEW;
|
|
END;
|
|
$$ LANGUAGE plpgsql;
|
|
CREATE TRIGGER purchase_numbering_version BEFORE UPDATE OF numbering_version ON purchase_requests
|
|
FOR EACH ROW EXECUTE FUNCTION guard_purchase_numbering_version();
|