feat(P20T2-1,P20T2-2,P20T2-3): 卡授权/交易/支付标记/发票绑定/ERP出站后端
这个提交包含在:
@@ -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;
|
||||
|
||||
在新工单中引用
屏蔽一个用户