feat(P20T2-1,P20T2-2,P20T2-3): 卡授权/交易/支付标记/发票绑定/ERP出站后端

这个提交包含在:
2026-03-11 06:41:11 +08:00
父节点 539c2cc4dd
当前提交 dc74d9e53f
共修改 23 个文件,包含 4265 行新增和 218 行删除
@@ -0,0 +1,152 @@
-- AlterTable
ALTER TABLE "invoice_pool" ADD COLUMN "travel_order_id" UUID;
-- AlterTable
ALTER TABLE "travel_orders" ADD COLUMN "paid_at" TIMESTAMP(3),
ADD COLUMN "paid_by" UUID,
ADD COLUMN "payment_channel" VARCHAR(20),
ADD COLUMN "payment_date" DATE,
ADD COLUMN "payment_voucher_no" VARCHAR(50);
-- CreateTable
CREATE TABLE "card_authorizations" (
"id" UUID NOT NULL,
"source" VARCHAR(32) NOT NULL DEFAULT 'manual',
"external_auth_no" TEXT NOT NULL,
"employee_id" UUID NOT NULL,
"department_id" UUID,
"travel_request_id" UUID NOT NULL,
"budget_pool_id" UUID,
"legal_entity_id" UUID NOT NULL,
"cost_center_id" UUID NOT NULL,
"authorized_amount" DECIMAL(14,2) NOT NULL,
"settled_amount" DECIMAL(14,2) NOT NULL DEFAULT 0,
"reversed_amount" DECIMAL(14,2) NOT NULL DEFAULT 0,
"currency" VARCHAR(8) NOT NULL DEFAULT 'CNY',
"occurred_at" TIMESTAMP(3),
"expires_at" TIMESTAMP(3),
"status" VARCHAR(32) NOT NULL DEFAULT 'authorized',
"raw_payload" JSONB,
"created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"created_by" UUID,
"updated_at" TIMESTAMP(3) NOT NULL,
"updated_by" UUID,
CONSTRAINT "card_authorizations_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "card_transactions" (
"id" UUID NOT NULL,
"source" VARCHAR(32) NOT NULL DEFAULT 'manual',
"external_txn_id" TEXT NOT NULL,
"card_authorization_id" UUID,
"employee_id" UUID NOT NULL,
"department_id" UUID,
"travel_request_id" UUID NOT NULL,
"travel_order_id" UUID,
"amount" DECIMAL(14,2) NOT NULL,
"currency" VARCHAR(8) NOT NULL DEFAULT 'CNY',
"txn_type" VARCHAR(20) NOT NULL,
"status" VARCHAR(20) NOT NULL DEFAULT 'pending',
"occurred_at" TIMESTAMP(3),
"freeze_suggested_at" TIMESTAMP(3),
"freeze_suggested_by" UUID,
"freeze_reason_code" VARCHAR(32),
"freeze_reason_note" TEXT,
"raw_payload" JSONB,
"created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"created_by" UUID,
"updated_at" TIMESTAMP(3) NOT NULL,
"updated_by" UUID,
CONSTRAINT "card_transactions_pkey" PRIMARY KEY ("id")
);
-- CreateIndex
CREATE INDEX "idx_card_authorizations_employee_occurred" ON "card_authorizations"("employee_id", "occurred_at");
-- CreateIndex
CREATE INDEX "idx_card_authorizations_department_status" ON "card_authorizations"("department_id", "status");
-- CreateIndex
CREATE INDEX "idx_card_authorizations_request_status" ON "card_authorizations"("travel_request_id", "status");
-- CreateIndex
CREATE INDEX "idx_card_authorizations_budget_pool" ON "card_authorizations"("budget_pool_id");
-- CreateIndex
CREATE INDEX "idx_card_authorizations_legal_cost_center" ON "card_authorizations"("legal_entity_id", "cost_center_id");
-- CreateIndex
CREATE UNIQUE INDEX "card_authorizations_source_auth_ux" ON "card_authorizations"("source", "external_auth_no");
-- CreateIndex
CREATE INDEX "idx_card_transactions_authorization" ON "card_transactions"("card_authorization_id");
-- CreateIndex
CREATE INDEX "idx_card_transactions_employee_occurred" ON "card_transactions"("employee_id", "occurred_at");
-- CreateIndex
CREATE INDEX "idx_card_transactions_department_status" ON "card_transactions"("department_id", "status");
-- CreateIndex
CREATE INDEX "idx_card_transactions_request" ON "card_transactions"("travel_request_id");
-- CreateIndex
CREATE INDEX "idx_card_transactions_order" ON "card_transactions"("travel_order_id");
-- CreateIndex
CREATE INDEX "idx_card_transactions_freeze_suggested_by" ON "card_transactions"("freeze_suggested_by");
-- CreateIndex
CREATE UNIQUE INDEX "card_transactions_source_txn_ux" ON "card_transactions"("source", "external_txn_id");
-- CreateIndex
CREATE INDEX "invoice_pool_travel_order_id_idx" ON "invoice_pool"("travel_order_id");
-- CreateIndex
CREATE INDEX "travel_orders_paid_by_idx" ON "travel_orders"("paid_by");
-- AddForeignKey
ALTER TABLE "invoice_pool" ADD CONSTRAINT "invoice_pool_travel_order_id_fkey" FOREIGN KEY ("travel_order_id") REFERENCES "travel_orders"("id") ON DELETE SET NULL ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "travel_orders" ADD CONSTRAINT "travel_orders_paid_by_fkey" FOREIGN KEY ("paid_by") REFERENCES "employees"("id") ON DELETE SET NULL ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "card_authorizations" ADD CONSTRAINT "card_authorizations_employee_id_fkey" FOREIGN KEY ("employee_id") REFERENCES "employees"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "card_authorizations" ADD CONSTRAINT "card_authorizations_department_id_fkey" FOREIGN KEY ("department_id") REFERENCES "departments"("id") ON DELETE SET NULL ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "card_authorizations" ADD CONSTRAINT "card_authorizations_travel_request_id_fkey" FOREIGN KEY ("travel_request_id") REFERENCES "travel_requests"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "card_authorizations" ADD CONSTRAINT "card_authorizations_budget_pool_id_fkey" FOREIGN KEY ("budget_pool_id") REFERENCES "budget_pools"("id") ON DELETE SET NULL ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "card_authorizations" ADD CONSTRAINT "card_authorizations_legal_entity_id_fkey" FOREIGN KEY ("legal_entity_id") REFERENCES "legal_entities"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "card_authorizations" ADD CONSTRAINT "card_authorizations_cost_center_id_fkey" FOREIGN KEY ("cost_center_id") REFERENCES "cost_centers"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "card_transactions" ADD CONSTRAINT "card_transactions_card_authorization_id_fkey" FOREIGN KEY ("card_authorization_id") REFERENCES "card_authorizations"("id") ON DELETE SET NULL ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "card_transactions" ADD CONSTRAINT "card_transactions_employee_id_fkey" FOREIGN KEY ("employee_id") REFERENCES "employees"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "card_transactions" ADD CONSTRAINT "card_transactions_department_id_fkey" FOREIGN KEY ("department_id") REFERENCES "departments"("id") ON DELETE SET NULL ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "card_transactions" ADD CONSTRAINT "card_transactions_travel_request_id_fkey" FOREIGN KEY ("travel_request_id") REFERENCES "travel_requests"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "card_transactions" ADD CONSTRAINT "card_transactions_travel_order_id_fkey" FOREIGN KEY ("travel_order_id") REFERENCES "travel_orders"("id") ON DELETE SET NULL ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "card_transactions" ADD CONSTRAINT "card_transactions_freeze_suggested_by_fkey" FOREIGN KEY ("freeze_suggested_by") REFERENCES "employees"("id") ON DELETE SET NULL ON UPDATE CASCADE;