semillero-special-hotel/prisma/migrations/20260611140956_init/migration.sql

206 lines
7 KiB
SQL

-- CreateTable
CREATE TABLE "regions" (
"id" SERIAL NOT NULL,
"name" TEXT NOT NULL,
"code" TEXT NOT NULL,
CONSTRAINT "regions_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "hotels" (
"id" SERIAL NOT NULL,
"name" TEXT NOT NULL,
"code" TEXT NOT NULL,
"region_id" INTEGER NOT NULL,
"status" TEXT NOT NULL DEFAULT 'ACTIVE',
CONSTRAINT "hotels_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "users" (
"id" SERIAL NOT NULL,
"username" TEXT NOT NULL,
"email" TEXT NOT NULL,
"password_hash" TEXT NOT NULL,
"role" TEXT NOT NULL,
"hotel_id" INTEGER NOT NULL,
"area" TEXT NOT NULL,
"status" TEXT NOT NULL DEFAULT 'ACTIVE',
"created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
CONSTRAINT "users_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "compensation_plans" (
"id" SERIAL NOT NULL,
"name" TEXT NOT NULL,
"code" TEXT NOT NULL,
"validity_start" TIMESTAMP(3) NOT NULL,
"validity_end" TIMESTAMP(3),
"type" TEXT NOT NULL,
"formula" TEXT,
"meta_amount" DECIMAL(12,2),
"percentage_rate" DECIMAL(5,4),
"max_cap" DECIMAL(12,2),
"status" TEXT NOT NULL DEFAULT 'DRAFT',
"version" INTEGER NOT NULL DEFAULT 1,
"created_by" INTEGER NOT NULL,
"created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
CONSTRAINT "compensation_plans_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "calculation_rules" (
"id" SERIAL NOT NULL,
"plan_id" INTEGER NOT NULL,
"type" TEXT NOT NULL,
"min_achievement" DECIMAL(5,4) NOT NULL,
"max_achievement" DECIMAL(5,4) NOT NULL,
"rate" DECIMAL(5,4) NOT NULL,
"payout_amount" DECIMAL(12,2) NOT NULL,
CONSTRAINT "calculation_rules_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "goals" (
"id" SERIAL NOT NULL,
"target_type" TEXT NOT NULL,
"target_id" INTEGER NOT NULL,
"period" TEXT NOT NULL,
"amount" DECIMAL(12,2) NOT NULL,
"created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
CONSTRAINT "goals_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "sales_results" (
"id" SERIAL NOT NULL,
"source" TEXT NOT NULL,
"hotel_id" INTEGER NOT NULL,
"user_id" INTEGER NOT NULL,
"period" TEXT NOT NULL,
"amount" DECIMAL(12,2) NOT NULL,
"sales_count" INTEGER NOT NULL,
"status" TEXT NOT NULL DEFAULT 'PENDING',
"idempotency_key" TEXT NOT NULL,
"transaction_id" TEXT,
"uploaded_by" INTEGER NOT NULL,
"created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
CONSTRAINT "sales_results_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "settlements" (
"id" SERIAL NOT NULL,
"period" TEXT NOT NULL,
"plan_id" INTEGER NOT NULL,
"user_id" INTEGER NOT NULL,
"sales_amount" DECIMAL(12,2) NOT NULL,
"goal_amount" DECIMAL(12,2) NOT NULL,
"achievement_percentage" DECIMAL(5,4) NOT NULL,
"calculated_commission" DECIMAL(12,2) NOT NULL,
"calculated_bonus" DECIMAL(12,2) NOT NULL,
"adjustment_amount" DECIMAL(12,2) NOT NULL,
"total_payout" DECIMAL(12,2) NOT NULL,
"status" TEXT NOT NULL DEFAULT 'SIMULATED',
"approved_by" INTEGER,
"approved_at" TIMESTAMP(3),
"rejection_reason" TEXT,
"original_settlement_id" INTEGER,
"adjustment_notes" TEXT,
"created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
CONSTRAINT "settlements_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "audit_logs" (
"id" SERIAL NOT NULL,
"user_id" INTEGER NOT NULL,
"action" TEXT NOT NULL,
"target_table" TEXT NOT NULL,
"target_id" INTEGER NOT NULL,
"previous_value" JSONB,
"new_value" JSONB,
"ip_address" TEXT,
"created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
CONSTRAINT "audit_logs_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "notifications" (
"id" SERIAL NOT NULL,
"user_id" INTEGER NOT NULL,
"title" TEXT NOT NULL,
"message" TEXT NOT NULL,
"status" TEXT NOT NULL DEFAULT 'UNREAD',
"type" TEXT NOT NULL,
"sent_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
CONSTRAINT "notifications_pkey" PRIMARY KEY ("id")
);
-- CreateIndex
CREATE UNIQUE INDEX "regions_code_key" ON "regions"("code");
-- CreateIndex
CREATE UNIQUE INDEX "hotels_code_key" ON "hotels"("code");
-- CreateIndex
CREATE UNIQUE INDEX "users_username_key" ON "users"("username");
-- CreateIndex
CREATE UNIQUE INDEX "users_email_key" ON "users"("email");
-- CreateIndex
CREATE UNIQUE INDEX "sales_results_idempotency_key_key" ON "sales_results"("idempotency_key");
-- AddForeignKey
ALTER TABLE "hotels" ADD CONSTRAINT "hotels_region_id_fkey" FOREIGN KEY ("region_id") REFERENCES "regions"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "users" ADD CONSTRAINT "users_hotel_id_fkey" FOREIGN KEY ("hotel_id") REFERENCES "hotels"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "compensation_plans" ADD CONSTRAINT "compensation_plans_created_by_fkey" FOREIGN KEY ("created_by") REFERENCES "users"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "calculation_rules" ADD CONSTRAINT "calculation_rules_plan_id_fkey" FOREIGN KEY ("plan_id") REFERENCES "compensation_plans"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "goals" ADD CONSTRAINT "goals_target_id_fkey" FOREIGN KEY ("target_id") REFERENCES "users"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "sales_results" ADD CONSTRAINT "sales_results_hotel_id_fkey" FOREIGN KEY ("hotel_id") REFERENCES "hotels"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "sales_results" ADD CONSTRAINT "sales_results_user_id_fkey" FOREIGN KEY ("user_id") REFERENCES "users"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "sales_results" ADD CONSTRAINT "sales_results_uploaded_by_fkey" FOREIGN KEY ("uploaded_by") REFERENCES "users"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "settlements" ADD CONSTRAINT "settlements_plan_id_fkey" FOREIGN KEY ("plan_id") REFERENCES "compensation_plans"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "settlements" ADD CONSTRAINT "settlements_user_id_fkey" FOREIGN KEY ("user_id") REFERENCES "users"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "settlements" ADD CONSTRAINT "settlements_approved_by_fkey" FOREIGN KEY ("approved_by") REFERENCES "users"("id") ON DELETE SET NULL ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "settlements" ADD CONSTRAINT "settlements_original_settlement_id_fkey" FOREIGN KEY ("original_settlement_id") REFERENCES "settlements"("id") ON DELETE SET NULL ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "audit_logs" ADD CONSTRAINT "audit_logs_user_id_fkey" FOREIGN KEY ("user_id") REFERENCES "users"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "notifications" ADD CONSTRAINT "notifications_user_id_fkey" FOREIGN KEY ("user_id") REFERENCES "users"("id") ON DELETE RESTRICT ON UPDATE CASCADE;