完善借款、编号、付款与预算并发及验收(09-06-release-gate-integrity)
汇总已落盘的借款本金与还款、兼容历史编号的周期化编号、付款责任与回单核验、报销进度和排序、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项公网义务仍开放。生产编号未启用、差旅仍冻结;不推送、不部署,不宣称发布资格。
这个提交包含在:
@@ -0,0 +1,51 @@
|
||||
-- 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();
|
||||
在新工单中引用
屏蔽一个用户