merca y ch
This commit is contained in:
135
prisma/migrations/0001_init/migration.sql
Normal file
135
prisma/migrations/0001_init/migration.sql
Normal file
@@ -0,0 +1,135 @@
|
||||
-- CreateSchema
|
||||
CREATE SCHEMA IF NOT EXISTS "public";
|
||||
|
||||
-- CreateEnum
|
||||
CREATE TYPE "public"."RoleKey" AS ENUM ('owner', 'leader', 'employee');
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "public"."User" (
|
||||
"id" TEXT NOT NULL,
|
||||
"name" TEXT,
|
||||
"email" TEXT NOT NULL,
|
||||
"emailVerified" TIMESTAMP(3),
|
||||
"image" TEXT,
|
||||
"passwordHash" TEXT,
|
||||
"status" TEXT NOT NULL DEFAULT 'active',
|
||||
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
"updatedAt" TIMESTAMP(3) NOT NULL,
|
||||
|
||||
CONSTRAINT "User_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "public"."Role" (
|
||||
"id" TEXT NOT NULL,
|
||||
"key" "public"."RoleKey" NOT NULL,
|
||||
"name" TEXT NOT NULL,
|
||||
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
"updatedAt" TIMESTAMP(3) NOT NULL,
|
||||
|
||||
CONSTRAINT "Role_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "public"."UserRole" (
|
||||
"userId" TEXT NOT NULL,
|
||||
"roleId" TEXT NOT NULL,
|
||||
"assignedAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
|
||||
CONSTRAINT "UserRole_pkey" PRIMARY KEY ("userId","roleId")
|
||||
);
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "public"."Invitation" (
|
||||
"id" TEXT NOT NULL,
|
||||
"email" TEXT NOT NULL,
|
||||
"roleKey" "public"."RoleKey" NOT NULL,
|
||||
"tokenHash" TEXT NOT NULL,
|
||||
"expiresAt" TIMESTAMP(3) NOT NULL,
|
||||
"acceptedAt" TIMESTAMP(3),
|
||||
"invitedById" TEXT,
|
||||
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
|
||||
CONSTRAINT "Invitation_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "public"."Account" (
|
||||
"id" TEXT NOT NULL,
|
||||
"userId" TEXT NOT NULL,
|
||||
"type" TEXT NOT NULL,
|
||||
"provider" TEXT NOT NULL,
|
||||
"providerAccountId" TEXT NOT NULL,
|
||||
"refresh_token" TEXT,
|
||||
"access_token" TEXT,
|
||||
"expires_at" INTEGER,
|
||||
"token_type" TEXT,
|
||||
"scope" TEXT,
|
||||
"id_token" TEXT,
|
||||
"session_state" TEXT,
|
||||
|
||||
CONSTRAINT "Account_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "public"."Session" (
|
||||
"id" TEXT NOT NULL,
|
||||
"sessionToken" TEXT NOT NULL,
|
||||
"userId" TEXT NOT NULL,
|
||||
"expires" TIMESTAMP(3) NOT NULL,
|
||||
|
||||
CONSTRAINT "Session_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "public"."VerificationToken" (
|
||||
"identifier" TEXT NOT NULL,
|
||||
"token" TEXT NOT NULL,
|
||||
"expires" TIMESTAMP(3) NOT NULL
|
||||
);
|
||||
|
||||
-- CreateIndex
|
||||
CREATE UNIQUE INDEX "User_email_key" ON "public"."User"("email");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE UNIQUE INDEX "Role_key_key" ON "public"."Role"("key");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE UNIQUE INDEX "Invitation_tokenHash_key" ON "public"."Invitation"("tokenHash");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "Invitation_email_expiresAt_idx" ON "public"."Invitation"("email", "expiresAt");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "Account_userId_idx" ON "public"."Account"("userId");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE UNIQUE INDEX "Account_provider_providerAccountId_key" ON "public"."Account"("provider", "providerAccountId");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE UNIQUE INDEX "Session_sessionToken_key" ON "public"."Session"("sessionToken");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "Session_userId_idx" ON "public"."Session"("userId");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE UNIQUE INDEX "VerificationToken_token_key" ON "public"."VerificationToken"("token");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE UNIQUE INDEX "VerificationToken_identifier_token_key" ON "public"."VerificationToken"("identifier", "token");
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "public"."UserRole" ADD CONSTRAINT "UserRole_roleId_fkey" FOREIGN KEY ("roleId") REFERENCES "public"."Role"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "public"."UserRole" ADD CONSTRAINT "UserRole_userId_fkey" FOREIGN KEY ("userId") REFERENCES "public"."User"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "public"."Invitation" ADD CONSTRAINT "Invitation_invitedById_fkey" FOREIGN KEY ("invitedById") REFERENCES "public"."User"("id") ON DELETE SET NULL ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "public"."Account" ADD CONSTRAINT "Account_userId_fkey" FOREIGN KEY ("userId") REFERENCES "public"."User"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "public"."Session" ADD CONSTRAINT "Session_userId_fkey" FOREIGN KEY ("userId") REFERENCES "public"."User"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
||||
|
||||
@@ -0,0 +1,19 @@
|
||||
-- CreateEnum
|
||||
CREATE TYPE "public"."DepartmentKey" AS ENUM ('marketing', 'administracion', 'capital_humano', 'operaciones');
|
||||
|
||||
-- AlterTable
|
||||
ALTER TABLE "public"."User"
|
||||
ADD COLUMN "department" "public"."DepartmentKey",
|
||||
ADD COLUMN "departmentRole" TEXT;
|
||||
|
||||
-- AlterTable
|
||||
ALTER TABLE "public"."Invitation"
|
||||
ADD COLUMN "inviteeName" TEXT NOT NULL DEFAULT 'Usuario invitado',
|
||||
ADD COLUMN "department" "public"."DepartmentKey" NOT NULL DEFAULT 'marketing',
|
||||
ADD COLUMN "departmentRole" TEXT NOT NULL DEFAULT 'Miembro';
|
||||
|
||||
-- RemoveDefaults
|
||||
ALTER TABLE "public"."Invitation"
|
||||
ALTER COLUMN "inviteeName" DROP DEFAULT,
|
||||
ALTER COLUMN "department" DROP DEFAULT,
|
||||
ALTER COLUMN "departmentRole" DROP DEFAULT;
|
||||
@@ -0,0 +1,48 @@
|
||||
-- CreateEnum
|
||||
CREATE TYPE "public"."MarketingMeetingStatus" AS ENUM ('requested', 'scheduled', 'completed', 'cancelled');
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "public"."MarketingMeeting" (
|
||||
"id" TEXT NOT NULL,
|
||||
"department" "public"."DepartmentKey" NOT NULL,
|
||||
"title" TEXT NOT NULL,
|
||||
"agenda" TEXT NOT NULL,
|
||||
"status" "public"."MarketingMeetingStatus" NOT NULL DEFAULT 'requested',
|
||||
"requestedById" TEXT,
|
||||
"requestedByName" TEXT NOT NULL,
|
||||
"participantNames" JSONB NOT NULL,
|
||||
"suggestedTimes" JSONB NOT NULL,
|
||||
"scheduledFor" TIMESTAMP(3),
|
||||
"completedAt" TIMESTAMP(3),
|
||||
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
"updatedAt" TIMESTAMP(3) NOT NULL,
|
||||
|
||||
CONSTRAINT "MarketingMeeting_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "public"."MarketingCommitment" (
|
||||
"id" TEXT NOT NULL,
|
||||
"meetingId" TEXT NOT NULL,
|
||||
"title" TEXT NOT NULL,
|
||||
"description" TEXT,
|
||||
"ownerName" TEXT,
|
||||
"dueDate" TIMESTAMP(3),
|
||||
"status" TEXT NOT NULL DEFAULT 'pendiente',
|
||||
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
"updatedAt" TIMESTAMP(3) NOT NULL,
|
||||
|
||||
CONSTRAINT "MarketingCommitment_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "MarketingMeeting_department_status_scheduledFor_idx" ON "public"."MarketingMeeting"("department", "status", "scheduledFor");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "MarketingCommitment_meetingId_dueDate_idx" ON "public"."MarketingCommitment"("meetingId", "dueDate");
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "public"."MarketingMeeting" ADD CONSTRAINT "MarketingMeeting_requestedById_fkey" FOREIGN KEY ("requestedById") REFERENCES "public"."User"("id") ON DELETE SET NULL ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "public"."MarketingCommitment" ADD CONSTRAINT "MarketingCommitment_meetingId_fkey" FOREIGN KEY ("meetingId") REFERENCES "public"."MarketingMeeting"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
||||
17
prisma/migrations/0004_password_reset_tokens/migration.sql
Normal file
17
prisma/migrations/0004_password_reset_tokens/migration.sql
Normal file
@@ -0,0 +1,17 @@
|
||||
-- CreateTable
|
||||
CREATE TABLE "public"."PasswordResetToken" (
|
||||
"id" TEXT NOT NULL,
|
||||
"email" TEXT NOT NULL,
|
||||
"tokenHash" TEXT NOT NULL,
|
||||
"expiresAt" TIMESTAMP(3) NOT NULL,
|
||||
"usedAt" TIMESTAMP(3),
|
||||
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
|
||||
CONSTRAINT "PasswordResetToken_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
-- CreateIndex
|
||||
CREATE UNIQUE INDEX "PasswordResetToken_tokenHash_key" ON "public"."PasswordResetToken"("tokenHash");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "PasswordResetToken_email_expiresAt_idx" ON "public"."PasswordResetToken"("email", "expiresAt");
|
||||
@@ -0,0 +1,216 @@
|
||||
-- CreateEnum
|
||||
CREATE TYPE "public"."MarketingInitiativeType" AS ENUM ('evento', 'campania', 'cambio', 'implementacion', 'otro');
|
||||
|
||||
-- CreateEnum
|
||||
CREATE TYPE "public"."MarketingInitiativeStatus" AS ENUM ('planning', 'in_progress', 'completion', 'results', 'evaluation');
|
||||
|
||||
-- CreateEnum
|
||||
CREATE TYPE "public"."MarketingTaskStatus" AS ENUM ('todo', 'in_progress', 'blocked', 'done');
|
||||
|
||||
-- CreateEnum
|
||||
CREATE TYPE "public"."MarketingPublicOpinion" AS ENUM ('positive', 'mixed', 'negative');
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "public"."MarketingInitiative" (
|
||||
"id" TEXT NOT NULL,
|
||||
"department" "public"."DepartmentKey" NOT NULL,
|
||||
"name" TEXT NOT NULL,
|
||||
"type" "public"."MarketingInitiativeType" NOT NULL,
|
||||
"status" "public"."MarketingInitiativeStatus" NOT NULL DEFAULT 'planning',
|
||||
"ownerId" TEXT,
|
||||
"dueDate" TIMESTAMP(3) NOT NULL,
|
||||
"completedAt" TIMESTAMP(3),
|
||||
"importanceWeight" DOUBLE PRECISION NOT NULL DEFAULT 1,
|
||||
"leadRating1to5" INTEGER NOT NULL DEFAULT 3,
|
||||
"target" DOUBLE PRECISION NOT NULL DEFAULT 0,
|
||||
"actual" DOUBLE PRECISION NOT NULL DEFAULT 0,
|
||||
"ticketsTarget" INTEGER NOT NULL DEFAULT 0,
|
||||
"ticketsActual" INTEGER NOT NULL DEFAULT 0,
|
||||
"revenueTarget" DOUBLE PRECISION NOT NULL DEFAULT 0,
|
||||
"revenueActual" DOUBLE PRECISION NOT NULL DEFAULT 0,
|
||||
"opinionPublica" "public"."MarketingPublicOpinion" NOT NULL DEFAULT 'mixed',
|
||||
"queFunciono" TEXT NOT NULL DEFAULT '',
|
||||
"queNo" TEXT NOT NULL DEFAULT '',
|
||||
"proximoIntento" TEXT NOT NULL DEFAULT '',
|
||||
"updatedById" TEXT,
|
||||
"updatedByName" TEXT,
|
||||
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
"updatedAt" TIMESTAMP(3) NOT NULL,
|
||||
|
||||
CONSTRAINT "MarketingInitiative_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "public"."MarketingInitiativeContributor" (
|
||||
"initiativeId" TEXT NOT NULL,
|
||||
"userId" TEXT NOT NULL,
|
||||
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
|
||||
CONSTRAINT "MarketingInitiativeContributor_pkey" PRIMARY KEY ("initiativeId","userId")
|
||||
);
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "public"."MarketingInitiativeLocation" (
|
||||
"id" TEXT NOT NULL,
|
||||
"initiativeId" TEXT NOT NULL,
|
||||
"locationId" TEXT NOT NULL,
|
||||
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
|
||||
CONSTRAINT "MarketingInitiativeLocation_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "public"."MarketingInitiativeEvidence" (
|
||||
"id" TEXT NOT NULL,
|
||||
"initiativeId" TEXT NOT NULL,
|
||||
"url" TEXT NOT NULL,
|
||||
"createdById" TEXT,
|
||||
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
|
||||
CONSTRAINT "MarketingInitiativeEvidence_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "public"."MarketingTask" (
|
||||
"id" TEXT NOT NULL,
|
||||
"initiativeId" TEXT NOT NULL,
|
||||
"title" TEXT NOT NULL,
|
||||
"description" TEXT NOT NULL DEFAULT '',
|
||||
"assigneeId" TEXT,
|
||||
"status" "public"."MarketingTaskStatus" NOT NULL DEFAULT 'todo',
|
||||
"dueDate" TIMESTAMP(3) NOT NULL,
|
||||
"updatedAt" TIMESTAMP(3) NOT NULL,
|
||||
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
|
||||
CONSTRAINT "MarketingTask_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "public"."MarketingTaskEvidence" (
|
||||
"id" TEXT NOT NULL,
|
||||
"taskId" TEXT NOT NULL,
|
||||
"url" TEXT NOT NULL,
|
||||
"createdById" TEXT,
|
||||
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
|
||||
CONSTRAINT "MarketingTaskEvidence_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "public"."MarketingInitiativeEdit" (
|
||||
"id" TEXT NOT NULL,
|
||||
"initiativeId" TEXT NOT NULL,
|
||||
"editedById" TEXT,
|
||||
"editedByName" TEXT NOT NULL,
|
||||
"summary" TEXT NOT NULL,
|
||||
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
|
||||
CONSTRAINT "MarketingInitiativeEdit_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "public"."MarketingSocialSnapshot" (
|
||||
"id" TEXT NOT NULL,
|
||||
"department" "public"."DepartmentKey" NOT NULL,
|
||||
"channel" TEXT NOT NULL,
|
||||
"range" TEXT NOT NULL,
|
||||
"followersStart" INTEGER NOT NULL,
|
||||
"followersEnd" INTEGER NOT NULL,
|
||||
"engagementRate" DOUBLE PRECISION NOT NULL,
|
||||
"reach" INTEGER NOT NULL,
|
||||
"impressions" INTEGER NOT NULL,
|
||||
"capturedAt" TIMESTAMP(3) NOT NULL,
|
||||
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
|
||||
CONSTRAINT "MarketingSocialSnapshot_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "public"."MarketingBrandPulse" (
|
||||
"id" TEXT NOT NULL,
|
||||
"department" "public"."DepartmentKey" NOT NULL,
|
||||
"month" TEXT NOT NULL,
|
||||
"rating1to5" INTEGER NOT NULL,
|
||||
"notes" TEXT NOT NULL DEFAULT '',
|
||||
"updatedById" TEXT,
|
||||
"updatedByName" TEXT,
|
||||
"updatedAt" TIMESTAMP(3) NOT NULL,
|
||||
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
|
||||
CONSTRAINT "MarketingBrandPulse_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "MarketingInitiative_department_status_dueDate_idx" ON "public"."MarketingInitiative"("department", "status", "dueDate");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "MarketingInitiativeContributor_userId_idx" ON "public"."MarketingInitiativeContributor"("userId");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE UNIQUE INDEX "MarketingInitiativeLocation_initiativeId_locationId_key" ON "public"."MarketingInitiativeLocation"("initiativeId", "locationId");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "MarketingInitiativeLocation_locationId_idx" ON "public"."MarketingInitiativeLocation"("locationId");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "MarketingInitiativeEvidence_initiativeId_createdAt_idx" ON "public"."MarketingInitiativeEvidence"("initiativeId", "createdAt");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "MarketingTask_initiativeId_status_dueDate_idx" ON "public"."MarketingTask"("initiativeId", "status", "dueDate");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "MarketingTask_assigneeId_idx" ON "public"."MarketingTask"("assigneeId");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "MarketingTaskEvidence_taskId_createdAt_idx" ON "public"."MarketingTaskEvidence"("taskId", "createdAt");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "MarketingInitiativeEdit_initiativeId_createdAt_idx" ON "public"."MarketingInitiativeEdit"("initiativeId", "createdAt");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "MarketingSocialSnapshot_department_range_channel_capturedAt_idx" ON "public"."MarketingSocialSnapshot"("department", "range", "channel", "capturedAt");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "MarketingBrandPulse_department_month_idx" ON "public"."MarketingBrandPulse"("department", "month");
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "public"."MarketingInitiative" ADD CONSTRAINT "MarketingInitiative_ownerId_fkey" FOREIGN KEY ("ownerId") REFERENCES "public"."User"("id") ON DELETE SET NULL ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "public"."MarketingInitiative" ADD CONSTRAINT "MarketingInitiative_updatedById_fkey" FOREIGN KEY ("updatedById") REFERENCES "public"."User"("id") ON DELETE SET NULL ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "public"."MarketingInitiativeContributor" ADD CONSTRAINT "MarketingInitiativeContributor_initiativeId_fkey" FOREIGN KEY ("initiativeId") REFERENCES "public"."MarketingInitiative"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "public"."MarketingInitiativeContributor" ADD CONSTRAINT "MarketingInitiativeContributor_userId_fkey" FOREIGN KEY ("userId") REFERENCES "public"."User"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "public"."MarketingInitiativeLocation" ADD CONSTRAINT "MarketingInitiativeLocation_initiativeId_fkey" FOREIGN KEY ("initiativeId") REFERENCES "public"."MarketingInitiative"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "public"."MarketingInitiativeEvidence" ADD CONSTRAINT "MarketingInitiativeEvidence_initiativeId_fkey" FOREIGN KEY ("initiativeId") REFERENCES "public"."MarketingInitiative"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "public"."MarketingInitiativeEvidence" ADD CONSTRAINT "MarketingInitiativeEvidence_createdById_fkey" FOREIGN KEY ("createdById") REFERENCES "public"."User"("id") ON DELETE SET NULL ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "public"."MarketingTask" ADD CONSTRAINT "MarketingTask_initiativeId_fkey" FOREIGN KEY ("initiativeId") REFERENCES "public"."MarketingInitiative"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "public"."MarketingTask" ADD CONSTRAINT "MarketingTask_assigneeId_fkey" FOREIGN KEY ("assigneeId") REFERENCES "public"."User"("id") ON DELETE SET NULL ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "public"."MarketingTaskEvidence" ADD CONSTRAINT "MarketingTaskEvidence_taskId_fkey" FOREIGN KEY ("taskId") REFERENCES "public"."MarketingTask"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "public"."MarketingTaskEvidence" ADD CONSTRAINT "MarketingTaskEvidence_createdById_fkey" FOREIGN KEY ("createdById") REFERENCES "public"."User"("id") ON DELETE SET NULL ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "public"."MarketingInitiativeEdit" ADD CONSTRAINT "MarketingInitiativeEdit_initiativeId_fkey" FOREIGN KEY ("initiativeId") REFERENCES "public"."MarketingInitiative"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "public"."MarketingInitiativeEdit" ADD CONSTRAINT "MarketingInitiativeEdit_editedById_fkey" FOREIGN KEY ("editedById") REFERENCES "public"."User"("id") ON DELETE SET NULL ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "public"."MarketingBrandPulse" ADD CONSTRAINT "MarketingBrandPulse_updatedById_fkey" FOREIGN KEY ("updatedById") REFERENCES "public"."User"("id") ON DELETE SET NULL ON UPDATE CASCADE;
|
||||
12
prisma/migrations/0006_add_projects_department/migration.sql
Normal file
12
prisma/migrations/0006_add_projects_department/migration.sql
Normal file
@@ -0,0 +1,12 @@
|
||||
DO $$
|
||||
BEGIN
|
||||
IF NOT EXISTS (
|
||||
SELECT 1
|
||||
FROM pg_type t
|
||||
JOIN pg_enum e ON t.oid = e.enumtypid
|
||||
WHERE t.typname = 'DepartmentKey'
|
||||
AND e.enumlabel = 'proyectos'
|
||||
) THEN
|
||||
ALTER TYPE "public"."DepartmentKey" ADD VALUE 'proyectos';
|
||||
END IF;
|
||||
END $$;
|
||||
49
prisma/migrations/0006_marketing_milestones/migration.sql
Normal file
49
prisma/migrations/0006_marketing_milestones/migration.sql
Normal file
@@ -0,0 +1,49 @@
|
||||
-- CreateEnum
|
||||
CREATE TYPE "public"."MarketingMilestoneStatus" AS ENUM ('pending', 'in_progress', 'completed');
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "public"."MarketingMilestone" (
|
||||
"id" TEXT NOT NULL,
|
||||
"initiativeId" TEXT NOT NULL,
|
||||
"title" TEXT NOT NULL,
|
||||
"description" TEXT NOT NULL DEFAULT '',
|
||||
"dueDate" TIMESTAMP(3) NOT NULL,
|
||||
"status" "public"."MarketingMilestoneStatus" NOT NULL DEFAULT 'pending',
|
||||
"sortOrder" INTEGER NOT NULL DEFAULT 0,
|
||||
"createdById" TEXT,
|
||||
"createdByName" TEXT,
|
||||
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
"updatedAt" TIMESTAMP(3) NOT NULL,
|
||||
|
||||
CONSTRAINT "MarketingMilestone_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "public"."MarketingMilestoneCheckpoint" (
|
||||
"id" TEXT NOT NULL,
|
||||
"milestoneId" TEXT NOT NULL,
|
||||
"note" TEXT NOT NULL,
|
||||
"createdById" TEXT,
|
||||
"createdByName" TEXT,
|
||||
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
|
||||
CONSTRAINT "MarketingMilestoneCheckpoint_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "MarketingMilestone_initiativeId_dueDate_status_idx" ON "public"."MarketingMilestone"("initiativeId", "dueDate", "status");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "MarketingMilestoneCheckpoint_milestoneId_createdAt_idx" ON "public"."MarketingMilestoneCheckpoint"("milestoneId", "createdAt");
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "public"."MarketingMilestone" ADD CONSTRAINT "MarketingMilestone_initiativeId_fkey" FOREIGN KEY ("initiativeId") REFERENCES "public"."MarketingInitiative"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "public"."MarketingMilestone" ADD CONSTRAINT "MarketingMilestone_createdById_fkey" FOREIGN KEY ("createdById") REFERENCES "public"."User"("id") ON DELETE SET NULL ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "public"."MarketingMilestoneCheckpoint" ADD CONSTRAINT "MarketingMilestoneCheckpoint_milestoneId_fkey" FOREIGN KEY ("milestoneId") REFERENCES "public"."MarketingMilestone"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "public"."MarketingMilestoneCheckpoint" ADD CONSTRAINT "MarketingMilestoneCheckpoint_createdById_fkey" FOREIGN KEY ("createdById") REFERENCES "public"."User"("id") ON DELETE SET NULL ON UPDATE CASCADE;
|
||||
@@ -0,0 +1,2 @@
|
||||
ALTER TABLE "public"."MarketingInitiative"
|
||||
ADD COLUMN "isGlobal" BOOLEAN NOT NULL DEFAULT false;
|
||||
@@ -0,0 +1,4 @@
|
||||
ALTER TABLE "public"."MarketingInitiative"
|
||||
ADD COLUMN "trackScore" BOOLEAN NOT NULL DEFAULT true,
|
||||
ADD COLUMN "trackTickets" BOOLEAN NOT NULL DEFAULT true,
|
||||
ADD COLUMN "trackRevenue" BOOLEAN NOT NULL DEFAULT true;
|
||||
@@ -0,0 +1,6 @@
|
||||
ALTER TABLE "MarketingInitiative"
|
||||
ADD COLUMN IF NOT EXISTS "plannedCost" DOUBLE PRECISION NOT NULL DEFAULT 0,
|
||||
ADD COLUMN IF NOT EXISTS "actualCost" DOUBLE PRECISION NOT NULL DEFAULT 0,
|
||||
ADD COLUMN IF NOT EXISTS "targetTicketPrice" DOUBLE PRECISION NOT NULL DEFAULT 0,
|
||||
ADD COLUMN IF NOT EXISTS "actualTicketPrice" DOUBLE PRECISION NOT NULL DEFAULT 0,
|
||||
ADD COLUMN IF NOT EXISTS "projectsSchemaVersion" INTEGER NOT NULL DEFAULT 1;
|
||||
88
prisma/migrations/0010_projects_navigation_v12/migration.sql
Normal file
88
prisma/migrations/0010_projects_navigation_v12/migration.sql
Normal file
@@ -0,0 +1,88 @@
|
||||
DO $$
|
||||
BEGIN
|
||||
IF NOT EXISTS (SELECT 1 FROM pg_type WHERE typname = 'MeetingResponseStatus') THEN
|
||||
CREATE TYPE "public"."MeetingResponseStatus" AS ENUM ('pending', 'accepted', 'declined');
|
||||
END IF;
|
||||
END $$;
|
||||
|
||||
DO $$
|
||||
BEGIN
|
||||
IF NOT EXISTS (SELECT 1 FROM pg_type WHERE typname = 'ProjectCalendarVisibility') THEN
|
||||
CREATE TYPE "public"."ProjectCalendarVisibility" AS ENUM ('personal', 'team');
|
||||
END IF;
|
||||
END $$;
|
||||
|
||||
DO $$
|
||||
BEGIN
|
||||
IF NOT EXISTS (SELECT 1 FROM pg_type WHERE typname = 'ProjectCaptureEvidenceKind') THEN
|
||||
CREATE TYPE "public"."ProjectCaptureEvidenceKind" AS ENUM ('photo', 'document', 'link');
|
||||
END IF;
|
||||
END $$;
|
||||
|
||||
CREATE TABLE IF NOT EXISTS "public"."MarketingMeetingParticipant" (
|
||||
"id" TEXT NOT NULL,
|
||||
"meetingId" TEXT NOT NULL,
|
||||
"userId" TEXT,
|
||||
"displayName" TEXT NOT NULL,
|
||||
"responseStatus" "public"."MeetingResponseStatus" NOT NULL DEFAULT 'pending',
|
||||
"respondedAt" TIMESTAMP(3),
|
||||
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
"updatedAt" TIMESTAMP(3) NOT NULL,
|
||||
|
||||
CONSTRAINT "MarketingMeetingParticipant_pkey" PRIMARY KEY ("id"),
|
||||
CONSTRAINT "MarketingMeetingParticipant_meetingId_fkey" FOREIGN KEY ("meetingId") REFERENCES "public"."MarketingMeeting"("id") ON DELETE CASCADE ON UPDATE CASCADE,
|
||||
CONSTRAINT "MarketingMeetingParticipant_userId_fkey" FOREIGN KEY ("userId") REFERENCES "public"."User"("id") ON DELETE SET NULL ON UPDATE CASCADE
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS "public"."ProjectCalendarEvent" (
|
||||
"id" TEXT NOT NULL,
|
||||
"department" "public"."DepartmentKey" NOT NULL DEFAULT 'proyectos',
|
||||
"ownerUserId" TEXT NOT NULL,
|
||||
"meetingId" TEXT,
|
||||
"title" TEXT NOT NULL,
|
||||
"notes" TEXT,
|
||||
"startAt" TIMESTAMP(3) NOT NULL,
|
||||
"endAt" TIMESTAMP(3) NOT NULL,
|
||||
"visibility" "public"."ProjectCalendarVisibility" NOT NULL DEFAULT 'personal',
|
||||
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
"updatedAt" TIMESTAMP(3) NOT NULL,
|
||||
|
||||
CONSTRAINT "ProjectCalendarEvent_pkey" PRIMARY KEY ("id"),
|
||||
CONSTRAINT "ProjectCalendarEvent_ownerUserId_fkey" FOREIGN KEY ("ownerUserId") REFERENCES "public"."User"("id") ON DELETE CASCADE ON UPDATE CASCADE,
|
||||
CONSTRAINT "ProjectCalendarEvent_meetingId_fkey" FOREIGN KEY ("meetingId") REFERENCES "public"."MarketingMeeting"("id") ON DELETE SET NULL ON UPDATE CASCADE
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS "public"."ProjectCaptureEvidence" (
|
||||
"id" TEXT NOT NULL,
|
||||
"department" "public"."DepartmentKey" NOT NULL DEFAULT 'proyectos',
|
||||
"initiativeId" TEXT,
|
||||
"taskId" TEXT,
|
||||
"uploadedById" TEXT NOT NULL,
|
||||
"kind" "public"."ProjectCaptureEvidenceKind" NOT NULL,
|
||||
"title" TEXT NOT NULL,
|
||||
"note" TEXT,
|
||||
"url" TEXT,
|
||||
"storagePath" TEXT,
|
||||
"mimeType" TEXT,
|
||||
"sizeBytes" INTEGER,
|
||||
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
"updatedAt" TIMESTAMP(3) NOT NULL,
|
||||
|
||||
CONSTRAINT "ProjectCaptureEvidence_pkey" PRIMARY KEY ("id"),
|
||||
CONSTRAINT "ProjectCaptureEvidence_initiativeId_fkey" FOREIGN KEY ("initiativeId") REFERENCES "public"."MarketingInitiative"("id") ON DELETE SET NULL ON UPDATE CASCADE,
|
||||
CONSTRAINT "ProjectCaptureEvidence_taskId_fkey" FOREIGN KEY ("taskId") REFERENCES "public"."MarketingTask"("id") ON DELETE SET NULL ON UPDATE CASCADE,
|
||||
CONSTRAINT "ProjectCaptureEvidence_uploadedById_fkey" FOREIGN KEY ("uploadedById") REFERENCES "public"."User"("id") ON DELETE RESTRICT ON UPDATE CASCADE
|
||||
);
|
||||
|
||||
CREATE UNIQUE INDEX IF NOT EXISTS "MarketingMeetingParticipant_meetingId_userId_key" ON "public"."MarketingMeetingParticipant"("meetingId", "userId");
|
||||
CREATE INDEX IF NOT EXISTS "MarketingMeetingParticipant_meetingId_responseStatus_idx" ON "public"."MarketingMeetingParticipant"("meetingId", "responseStatus");
|
||||
CREATE INDEX IF NOT EXISTS "MarketingMeetingParticipant_userId_idx" ON "public"."MarketingMeetingParticipant"("userId");
|
||||
|
||||
CREATE UNIQUE INDEX IF NOT EXISTS "ProjectCalendarEvent_meetingId_key" ON "public"."ProjectCalendarEvent"("meetingId");
|
||||
CREATE INDEX IF NOT EXISTS "ProjectCalendarEvent_department_startAt_endAt_idx" ON "public"."ProjectCalendarEvent"("department", "startAt", "endAt");
|
||||
CREATE INDEX IF NOT EXISTS "ProjectCalendarEvent_ownerUserId_startAt_idx" ON "public"."ProjectCalendarEvent"("ownerUserId", "startAt");
|
||||
|
||||
CREATE INDEX IF NOT EXISTS "ProjectCaptureEvidence_department_createdAt_idx" ON "public"."ProjectCaptureEvidence"("department", "createdAt");
|
||||
CREATE INDEX IF NOT EXISTS "ProjectCaptureEvidence_initiativeId_createdAt_idx" ON "public"."ProjectCaptureEvidence"("initiativeId", "createdAt");
|
||||
CREATE INDEX IF NOT EXISTS "ProjectCaptureEvidence_taskId_createdAt_idx" ON "public"."ProjectCaptureEvidence"("taskId", "createdAt");
|
||||
CREATE INDEX IF NOT EXISTS "ProjectCaptureEvidence_uploadedById_createdAt_idx" ON "public"."ProjectCaptureEvidence"("uploadedById", "createdAt");
|
||||
60
prisma/migrations/0011_weekly_kpi_board_v1/migration.sql
Normal file
60
prisma/migrations/0011_weekly_kpi_board_v1/migration.sql
Normal file
@@ -0,0 +1,60 @@
|
||||
CREATE TYPE "public"."WeeklyKpiStatus" AS ENUM ('on_track', 'watch', 'risk', 'no_score');
|
||||
|
||||
CREATE TABLE "public"."WeeklyKpiSnapshot" (
|
||||
"id" TEXT NOT NULL,
|
||||
"weekStart" TIMESTAMP(3) NOT NULL,
|
||||
"weekEnd" TIMESTAMP(3) NOT NULL,
|
||||
"source" TEXT NOT NULL DEFAULT 'platform',
|
||||
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
"updatedAt" TIMESTAMP(3) NOT NULL,
|
||||
CONSTRAINT "WeeklyKpiSnapshot_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
CREATE TABLE "public"."WeeklyKpiSection" (
|
||||
"id" TEXT NOT NULL,
|
||||
"snapshotId" TEXT NOT NULL,
|
||||
"sectionKey" TEXT NOT NULL,
|
||||
"rawSectionLabel" TEXT NOT NULL,
|
||||
"mappedDepartment" "public"."DepartmentKey",
|
||||
"ownerTeamLabel" TEXT,
|
||||
"sortOrder" INTEGER NOT NULL DEFAULT 0,
|
||||
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
"updatedAt" TIMESTAMP(3) NOT NULL,
|
||||
CONSTRAINT "WeeklyKpiSection_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
CREATE TABLE "public"."WeeklyKpiRow" (
|
||||
"id" TEXT NOT NULL,
|
||||
"sectionId" TEXT NOT NULL,
|
||||
"rowKey" TEXT NOT NULL,
|
||||
"responsibilityText" TEXT NOT NULL,
|
||||
"objectiveIndicatorText" TEXT,
|
||||
"quantityQualityText" TEXT,
|
||||
"complianceText" TEXT,
|
||||
"dueCommitmentText" TEXT,
|
||||
"targetValue" DOUBLE PRECISION,
|
||||
"quantityValue" DOUBLE PRECISION,
|
||||
"compliancePct" DOUBLE PRECISION,
|
||||
"dueDate" TIMESTAMP(3),
|
||||
"status" "public"."WeeklyKpiStatus" NOT NULL DEFAULT 'no_score',
|
||||
"sortOrder" INTEGER NOT NULL DEFAULT 0,
|
||||
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
"updatedAt" TIMESTAMP(3) NOT NULL,
|
||||
CONSTRAINT "WeeklyKpiRow_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
CREATE UNIQUE INDEX "WeeklyKpiSnapshot_weekStart_key" ON "public"."WeeklyKpiSnapshot"("weekStart");
|
||||
CREATE INDEX "WeeklyKpiSnapshot_weekStart_weekEnd_idx" ON "public"."WeeklyKpiSnapshot"("weekStart", "weekEnd");
|
||||
CREATE UNIQUE INDEX "WeeklyKpiSection_snapshotId_sectionKey_key" ON "public"."WeeklyKpiSection"("snapshotId", "sectionKey");
|
||||
CREATE INDEX "WeeklyKpiSection_snapshotId_mappedDepartment_sortOrder_idx" ON "public"."WeeklyKpiSection"("snapshotId", "mappedDepartment", "sortOrder");
|
||||
CREATE UNIQUE INDEX "WeeklyKpiRow_sectionId_rowKey_key" ON "public"."WeeklyKpiRow"("sectionId", "rowKey");
|
||||
CREATE INDEX "WeeklyKpiRow_sectionId_sortOrder_idx" ON "public"."WeeklyKpiRow"("sectionId", "sortOrder");
|
||||
CREATE INDEX "WeeklyKpiRow_status_dueDate_idx" ON "public"."WeeklyKpiRow"("status", "dueDate");
|
||||
|
||||
ALTER TABLE "public"."WeeklyKpiSection"
|
||||
ADD CONSTRAINT "WeeklyKpiSection_snapshotId_fkey"
|
||||
FOREIGN KEY ("snapshotId") REFERENCES "public"."WeeklyKpiSnapshot"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
||||
|
||||
ALTER TABLE "public"."WeeklyKpiRow"
|
||||
ADD CONSTRAINT "WeeklyKpiRow_sectionId_fkey"
|
||||
FOREIGN KEY ("sectionId") REFERENCES "public"."WeeklyKpiSection"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
||||
@@ -0,0 +1,411 @@
|
||||
-- CreateEnum
|
||||
CREATE TYPE "public"."MarketingSyncRunStatus" AS ENUM ('queued', 'running', 'success', 'failed');
|
||||
|
||||
-- CreateEnum
|
||||
CREATE TYPE "public"."EmploymentStatus" AS ENUM ('active', 'leave', 'terminated');
|
||||
|
||||
-- CreateEnum
|
||||
CREATE TYPE "public"."EmployeeLifecycleEventType" AS ENUM ('hire', 'transfer', 'leave', 'termination', 'rehire');
|
||||
|
||||
-- CreateEnum
|
||||
CREATE TYPE "public"."HrUpdateSeverity" AS ENUM ('info', 'warning', 'critical');
|
||||
|
||||
-- CreateEnum
|
||||
CREATE TYPE "public"."FactoryAssetState" AS ENUM ('draft', 'active', 'down', 'retired');
|
||||
|
||||
-- CreateEnum
|
||||
CREATE TYPE "public"."PmTemplateState" AS ENUM ('draft', 'active', 'archived');
|
||||
|
||||
-- CreateEnum
|
||||
CREATE TYPE "public"."PmWorkOrderState" AS ENUM ('draft', 'scheduled', 'in_progress', 'completed', 'verified', 'overdue', 'cancelled');
|
||||
|
||||
-- CreateEnum
|
||||
CREATE TYPE "public"."ReminderEventState" AS ENUM ('queued', 'sent', 'acknowledged', 'escalated', 'failed');
|
||||
|
||||
-- CreateEnum
|
||||
CREATE TYPE "public"."ApprovalState" AS ENUM ('draft', 'submitted', 'pending_owner', 'approved', 'rejected', 'changes_requested', 'cancelled');
|
||||
|
||||
-- CreateEnum
|
||||
CREATE TYPE "public"."SalesForecastState" AS ENUM ('draft', 'published', 'superseded');
|
||||
|
||||
-- CreateEnum
|
||||
CREATE TYPE "public"."ProductionPlanState" AS ENUM ('draft', 'simulated', 'locked', 'approved', 'released', 'replanned');
|
||||
|
||||
-- AlterTable
|
||||
ALTER TABLE "public"."MarketingInitiative" ADD COLUMN "attributionCampaign" TEXT,
|
||||
ADD COLUMN "attributionChannel" TEXT,
|
||||
ADD COLUMN "attributionEnd" TIMESTAMP(3),
|
||||
ADD COLUMN "attributionPageId" TEXT,
|
||||
ADD COLUMN "attributionStart" TIMESTAMP(3),
|
||||
ADD COLUMN "autoActual" DOUBLE PRECISION,
|
||||
ADD COLUMN "autoRevenueActual" DOUBLE PRECISION,
|
||||
ADD COLUMN "autoTicketsActual" INTEGER,
|
||||
ADD COLUMN "autoUpdatedAt" TIMESTAMP(3);
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "public"."MarketingMetaConnection" (
|
||||
"id" TEXT NOT NULL,
|
||||
"department" "public"."DepartmentKey" NOT NULL DEFAULT 'marketing',
|
||||
"accountId" TEXT NOT NULL,
|
||||
"pageId" TEXT NOT NULL,
|
||||
"pageName" TEXT NOT NULL,
|
||||
"pageAccessToken" TEXT NOT NULL,
|
||||
"tokenExpiresAt" TIMESTAMP(3),
|
||||
"connectedById" TEXT,
|
||||
"isActive" BOOLEAN NOT NULL DEFAULT true,
|
||||
"lastSyncedAt" TIMESTAMP(3),
|
||||
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
"updatedAt" TIMESTAMP(3) NOT NULL,
|
||||
|
||||
CONSTRAINT "MarketingMetaConnection_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "public"."MarketingSocialMetricDaily" (
|
||||
"id" TEXT NOT NULL,
|
||||
"department" "public"."DepartmentKey" NOT NULL DEFAULT 'marketing',
|
||||
"connectionId" TEXT NOT NULL,
|
||||
"channel" TEXT NOT NULL,
|
||||
"metricDate" TIMESTAMP(3) NOT NULL,
|
||||
"followers" INTEGER NOT NULL,
|
||||
"reach" INTEGER NOT NULL,
|
||||
"impressions" INTEGER NOT NULL,
|
||||
"engagements" INTEGER NOT NULL,
|
||||
"engagementRate" DOUBLE PRECISION NOT NULL,
|
||||
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
|
||||
CONSTRAINT "MarketingSocialMetricDaily_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "public"."MarketingSyncRun" (
|
||||
"id" TEXT NOT NULL,
|
||||
"department" "public"."DepartmentKey" NOT NULL DEFAULT 'marketing',
|
||||
"connectionId" TEXT,
|
||||
"status" "public"."MarketingSyncRunStatus" NOT NULL DEFAULT 'queued',
|
||||
"message" TEXT,
|
||||
"rowsIngested" INTEGER NOT NULL DEFAULT 0,
|
||||
"triggeredById" TEXT,
|
||||
"startedAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
"completedAt" TIMESTAMP(3),
|
||||
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
"updatedAt" TIMESTAMP(3) NOT NULL,
|
||||
|
||||
CONSTRAINT "MarketingSyncRun_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "public"."EmployeeProfile" (
|
||||
"id" TEXT NOT NULL,
|
||||
"userId" TEXT NOT NULL,
|
||||
"employeeCode" TEXT,
|
||||
"hireDate" TIMESTAMP(3),
|
||||
"employmentType" TEXT,
|
||||
"managerUserId" TEXT,
|
||||
"locationId" TEXT,
|
||||
"fte" DOUBLE PRECISION NOT NULL DEFAULT 1,
|
||||
"employmentStatus" "public"."EmploymentStatus" NOT NULL DEFAULT 'active',
|
||||
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
"updatedAt" TIMESTAMP(3) NOT NULL,
|
||||
|
||||
CONSTRAINT "EmployeeProfile_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "public"."EmployeeLifecycleEvent" (
|
||||
"id" TEXT NOT NULL,
|
||||
"userId" TEXT NOT NULL,
|
||||
"eventType" "public"."EmployeeLifecycleEventType" NOT NULL,
|
||||
"effectiveAt" TIMESTAMP(3) NOT NULL,
|
||||
"reason" TEXT,
|
||||
"isVoluntary" BOOLEAN,
|
||||
"metadata" JSONB,
|
||||
"createdById" TEXT,
|
||||
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
|
||||
CONSTRAINT "EmployeeLifecycleEvent_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "public"."HrMetricSnapshot" (
|
||||
"id" TEXT NOT NULL,
|
||||
"department" "public"."DepartmentKey",
|
||||
"snapshotDate" TIMESTAMP(3) NOT NULL,
|
||||
"headcount" INTEGER NOT NULL,
|
||||
"hires" INTEGER NOT NULL,
|
||||
"exits" INTEGER NOT NULL,
|
||||
"churnPct" DOUBLE PRECISION NOT NULL,
|
||||
"medianTenureMonths" DOUBLE PRECISION NOT NULL,
|
||||
"peopleHealthScore" DOUBLE PRECISION NOT NULL,
|
||||
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
|
||||
CONSTRAINT "HrMetricSnapshot_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "public"."HrUpdate" (
|
||||
"id" TEXT NOT NULL,
|
||||
"title" TEXT NOT NULL,
|
||||
"body" TEXT NOT NULL,
|
||||
"severity" "public"."HrUpdateSeverity" NOT NULL DEFAULT 'info',
|
||||
"audience" TEXT NOT NULL DEFAULT 'hc_leadership',
|
||||
"status" TEXT NOT NULL DEFAULT 'draft',
|
||||
"publishedAt" TIMESTAMP(3),
|
||||
"authorId" TEXT,
|
||||
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
"updatedAt" TIMESTAMP(3) NOT NULL,
|
||||
|
||||
CONSTRAINT "HrUpdate_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "public"."FactoryAsset" (
|
||||
"id" TEXT NOT NULL,
|
||||
"department" "public"."DepartmentKey" NOT NULL DEFAULT 'operaciones',
|
||||
"assetCode" TEXT NOT NULL,
|
||||
"name" TEXT NOT NULL,
|
||||
"category" TEXT NOT NULL,
|
||||
"locationId" TEXT,
|
||||
"criticality" INTEGER NOT NULL DEFAULT 3,
|
||||
"state" "public"."FactoryAssetState" NOT NULL DEFAULT 'active',
|
||||
"serviceStrategy" TEXT,
|
||||
"lastMaintenanceAt" TIMESTAMP(3),
|
||||
"nextMaintenanceAt" TIMESTAMP(3),
|
||||
"createdById" TEXT,
|
||||
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
"updatedAt" TIMESTAMP(3) NOT NULL,
|
||||
|
||||
CONSTRAINT "FactoryAsset_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "public"."PmTemplate" (
|
||||
"id" TEXT NOT NULL,
|
||||
"assetId" TEXT NOT NULL,
|
||||
"title" TEXT NOT NULL,
|
||||
"description" TEXT,
|
||||
"cadenceDays" INTEGER,
|
||||
"cadenceHours" INTEGER,
|
||||
"state" "public"."PmTemplateState" NOT NULL DEFAULT 'active',
|
||||
"createdById" TEXT,
|
||||
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
"updatedAt" TIMESTAMP(3) NOT NULL,
|
||||
|
||||
CONSTRAINT "PmTemplate_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "public"."PmWorkOrder" (
|
||||
"id" TEXT NOT NULL,
|
||||
"assetId" TEXT NOT NULL,
|
||||
"templateId" TEXT,
|
||||
"title" TEXT NOT NULL,
|
||||
"description" TEXT,
|
||||
"scheduledFor" TIMESTAMP(3) NOT NULL,
|
||||
"dueBy" TIMESTAMP(3) NOT NULL,
|
||||
"startedAt" TIMESTAMP(3),
|
||||
"completedAt" TIMESTAMP(3),
|
||||
"estimatedCost" DOUBLE PRECISION NOT NULL DEFAULT 0,
|
||||
"expectedDowntimeHours" DOUBLE PRECISION NOT NULL DEFAULT 0,
|
||||
"actualCost" DOUBLE PRECISION,
|
||||
"actualDowntimeHours" DOUBLE PRECISION,
|
||||
"state" "public"."PmWorkOrderState" NOT NULL DEFAULT 'scheduled',
|
||||
"requestedById" TEXT,
|
||||
"approvedById" TEXT,
|
||||
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
"updatedAt" TIMESTAMP(3) NOT NULL,
|
||||
|
||||
CONSTRAINT "PmWorkOrder_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "public"."ReminderEvent" (
|
||||
"id" TEXT NOT NULL,
|
||||
"workOrderId" TEXT NOT NULL,
|
||||
"remindAt" TIMESTAMP(3) NOT NULL,
|
||||
"channel" TEXT NOT NULL DEFAULT 'in_app',
|
||||
"message" TEXT,
|
||||
"state" "public"."ReminderEventState" NOT NULL DEFAULT 'queued',
|
||||
"acknowledgedAt" TIMESTAMP(3),
|
||||
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
|
||||
CONSTRAINT "ReminderEvent_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "public"."MaintenanceApprovalPolicy" (
|
||||
"id" TEXT NOT NULL,
|
||||
"department" "public"."DepartmentKey" NOT NULL DEFAULT 'operaciones',
|
||||
"costThreshold" DOUBLE PRECISION NOT NULL DEFAULT 5000,
|
||||
"downtimeThresholdHours" DOUBLE PRECISION NOT NULL DEFAULT 4,
|
||||
"ownerUserId" TEXT,
|
||||
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
"updatedAt" TIMESTAMP(3) NOT NULL,
|
||||
|
||||
CONSTRAINT "MaintenanceApprovalPolicy_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "public"."SalesForecast" (
|
||||
"id" TEXT NOT NULL,
|
||||
"department" "public"."DepartmentKey" NOT NULL DEFAULT 'operaciones',
|
||||
"weekStart" TIMESTAMP(3) NOT NULL,
|
||||
"weekEnd" TIMESTAMP(3) NOT NULL,
|
||||
"locationId" TEXT,
|
||||
"sku" TEXT,
|
||||
"forecastUnits" DOUBLE PRECISION NOT NULL,
|
||||
"multiplier" DOUBLE PRECISION NOT NULL DEFAULT 1.2,
|
||||
"state" "public"."SalesForecastState" NOT NULL DEFAULT 'draft',
|
||||
"createdById" TEXT,
|
||||
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
"updatedAt" TIMESTAMP(3) NOT NULL,
|
||||
|
||||
CONSTRAINT "SalesForecast_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "public"."ProductionPlan" (
|
||||
"id" TEXT NOT NULL,
|
||||
"department" "public"."DepartmentKey" NOT NULL DEFAULT 'operaciones',
|
||||
"weekStart" TIMESTAMP(3) NOT NULL,
|
||||
"weekEnd" TIMESTAMP(3) NOT NULL,
|
||||
"lineName" TEXT NOT NULL,
|
||||
"plannedUnits" DOUBLE PRECISION NOT NULL,
|
||||
"forecastUnits" DOUBLE PRECISION NOT NULL,
|
||||
"capacityUnits" DOUBLE PRECISION NOT NULL,
|
||||
"varianceUnits" DOUBLE PRECISION NOT NULL,
|
||||
"state" "public"."ProductionPlanState" NOT NULL DEFAULT 'draft',
|
||||
"createdById" TEXT,
|
||||
"approvedById" TEXT,
|
||||
"approvedAt" TIMESTAMP(3),
|
||||
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
"updatedAt" TIMESTAMP(3) NOT NULL,
|
||||
|
||||
CONSTRAINT "ProductionPlan_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "public"."ApprovalRequest" (
|
||||
"id" TEXT NOT NULL,
|
||||
"department" "public"."DepartmentKey" NOT NULL DEFAULT 'operaciones',
|
||||
"requestType" TEXT NOT NULL,
|
||||
"workOrderId" TEXT,
|
||||
"productionPlanId" TEXT,
|
||||
"submittedById" TEXT,
|
||||
"approverId" TEXT,
|
||||
"state" "public"."ApprovalState" NOT NULL DEFAULT 'submitted',
|
||||
"reason" TEXT,
|
||||
"decidedAt" TIMESTAMP(3),
|
||||
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
"updatedAt" TIMESTAMP(3) NOT NULL,
|
||||
|
||||
CONSTRAINT "ApprovalRequest_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "MarketingMetaConnection_department_isActive_idx" ON "public"."MarketingMetaConnection"("department", "isActive");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE UNIQUE INDEX "MarketingMetaConnection_department_pageId_isActive_key" ON "public"."MarketingMetaConnection"("department", "pageId", "isActive");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "MarketingSocialMetricDaily_department_channel_metricDate_idx" ON "public"."MarketingSocialMetricDaily"("department", "channel", "metricDate");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE UNIQUE INDEX "MarketingSocialMetricDaily_connectionId_channel_metricDate_key" ON "public"."MarketingSocialMetricDaily"("connectionId", "channel", "metricDate");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "MarketingSyncRun_department_createdAt_idx" ON "public"."MarketingSyncRun"("department", "createdAt");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "MarketingSyncRun_status_createdAt_idx" ON "public"."MarketingSyncRun"("status", "createdAt");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE UNIQUE INDEX "EmployeeProfile_userId_key" ON "public"."EmployeeProfile"("userId");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "EmployeeProfile_employmentStatus_hireDate_idx" ON "public"."EmployeeProfile"("employmentStatus", "hireDate");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "EmployeeLifecycleEvent_userId_effectiveAt_idx" ON "public"."EmployeeLifecycleEvent"("userId", "effectiveAt");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "EmployeeLifecycleEvent_eventType_effectiveAt_idx" ON "public"."EmployeeLifecycleEvent"("eventType", "effectiveAt");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "HrMetricSnapshot_snapshotDate_department_idx" ON "public"."HrMetricSnapshot"("snapshotDate", "department");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "HrUpdate_status_publishedAt_idx" ON "public"."HrUpdate"("status", "publishedAt");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE UNIQUE INDEX "FactoryAsset_assetCode_key" ON "public"."FactoryAsset"("assetCode");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "FactoryAsset_department_state_idx" ON "public"."FactoryAsset"("department", "state");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "FactoryAsset_nextMaintenanceAt_state_idx" ON "public"."FactoryAsset"("nextMaintenanceAt", "state");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "PmTemplate_assetId_state_idx" ON "public"."PmTemplate"("assetId", "state");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "PmWorkOrder_assetId_state_dueBy_idx" ON "public"."PmWorkOrder"("assetId", "state", "dueBy");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "PmWorkOrder_state_scheduledFor_idx" ON "public"."PmWorkOrder"("state", "scheduledFor");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "ReminderEvent_workOrderId_state_idx" ON "public"."ReminderEvent"("workOrderId", "state");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "ReminderEvent_remindAt_state_idx" ON "public"."ReminderEvent"("remindAt", "state");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE UNIQUE INDEX "MaintenanceApprovalPolicy_department_key" ON "public"."MaintenanceApprovalPolicy"("department");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "SalesForecast_department_weekStart_state_idx" ON "public"."SalesForecast"("department", "weekStart", "state");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "ProductionPlan_department_weekStart_state_idx" ON "public"."ProductionPlan"("department", "weekStart", "state");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "ApprovalRequest_department_state_createdAt_idx" ON "public"."ApprovalRequest"("department", "state", "createdAt");
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "public"."MarketingSocialMetricDaily" ADD CONSTRAINT "MarketingSocialMetricDaily_connectionId_fkey" FOREIGN KEY ("connectionId") REFERENCES "public"."MarketingMetaConnection"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "public"."MarketingSyncRun" ADD CONSTRAINT "MarketingSyncRun_connectionId_fkey" FOREIGN KEY ("connectionId") REFERENCES "public"."MarketingMetaConnection"("id") ON DELETE SET NULL ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "public"."EmployeeProfile" ADD CONSTRAINT "EmployeeProfile_userId_fkey" FOREIGN KEY ("userId") REFERENCES "public"."User"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "public"."EmployeeLifecycleEvent" ADD CONSTRAINT "EmployeeLifecycleEvent_userId_fkey" FOREIGN KEY ("userId") REFERENCES "public"."User"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "public"."EmployeeLifecycleEvent" ADD CONSTRAINT "EmployeeLifecycleEvent_createdById_fkey" FOREIGN KEY ("createdById") REFERENCES "public"."User"("id") ON DELETE SET NULL ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "public"."HrUpdate" ADD CONSTRAINT "HrUpdate_authorId_fkey" FOREIGN KEY ("authorId") REFERENCES "public"."User"("id") ON DELETE SET NULL ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "public"."PmTemplate" ADD CONSTRAINT "PmTemplate_assetId_fkey" FOREIGN KEY ("assetId") REFERENCES "public"."FactoryAsset"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "public"."PmWorkOrder" ADD CONSTRAINT "PmWorkOrder_assetId_fkey" FOREIGN KEY ("assetId") REFERENCES "public"."FactoryAsset"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "public"."PmWorkOrder" ADD CONSTRAINT "PmWorkOrder_templateId_fkey" FOREIGN KEY ("templateId") REFERENCES "public"."PmTemplate"("id") ON DELETE SET NULL ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "public"."ReminderEvent" ADD CONSTRAINT "ReminderEvent_workOrderId_fkey" FOREIGN KEY ("workOrderId") REFERENCES "public"."PmWorkOrder"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "public"."ApprovalRequest" ADD CONSTRAINT "ApprovalRequest_workOrderId_fkey" FOREIGN KEY ("workOrderId") REFERENCES "public"."PmWorkOrder"("id") ON DELETE SET NULL ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "public"."ApprovalRequest" ADD CONSTRAINT "ApprovalRequest_productionPlanId_fkey" FOREIGN KEY ("productionPlanId") REFERENCES "public"."ProductionPlan"("id") ON DELETE SET NULL ON UPDATE CASCADE;
|
||||
327
prisma/migrations/20260322183442_experienciometro/migration.sql
Normal file
327
prisma/migrations/20260322183442_experienciometro/migration.sql
Normal file
@@ -0,0 +1,327 @@
|
||||
-- CreateEnum
|
||||
CREATE TYPE "public"."ExperienceTemplateState" AS ENUM ('draft', 'published', 'archived');
|
||||
|
||||
-- CreateEnum
|
||||
CREATE TYPE "public"."ExperienceFindingPriority" AS ENUM ('low', 'medium', 'high', 'critical');
|
||||
|
||||
-- CreateEnum
|
||||
CREATE TYPE "public"."ExperienceFindingStatus" AS ENUM ('open', 'in_progress', 'resolved', 'closed');
|
||||
|
||||
-- CreateEnum
|
||||
CREATE TYPE "public"."ExperienceScoreAggregationMode" AS ENUM ('weighted_recent', 'moving_average', 'full_average');
|
||||
|
||||
-- CreateEnum
|
||||
CREATE TYPE "public"."ExperienceTrendDirection" AS ENUM ('up', 'down', 'flat');
|
||||
|
||||
-- CreateEnum
|
||||
CREATE TYPE "public"."ExperienceSignalStatus" AS ENUM ('green', 'yellow', 'red');
|
||||
|
||||
-- CreateEnum
|
||||
CREATE TYPE "public"."ExperienceEvidenceKind" AS ENUM ('photo', 'document', 'link');
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "public"."Location" (
|
||||
"id" TEXT NOT NULL,
|
||||
"code" TEXT NOT NULL,
|
||||
"name" TEXT NOT NULL,
|
||||
"city" TEXT,
|
||||
"managerUserId" TEXT,
|
||||
"isActive" BOOLEAN NOT NULL DEFAULT true,
|
||||
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
"updatedAt" TIMESTAMP(3) NOT NULL,
|
||||
|
||||
CONSTRAINT "Location_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "public"."ExperienceTemplate" (
|
||||
"id" TEXT NOT NULL,
|
||||
"name" TEXT NOT NULL,
|
||||
"version" INTEGER NOT NULL,
|
||||
"state" "public"."ExperienceTemplateState" NOT NULL DEFAULT 'draft',
|
||||
"isDefault" BOOLEAN NOT NULL DEFAULT false,
|
||||
"createdById" TEXT,
|
||||
"publishedAt" TIMESTAMP(3),
|
||||
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
"updatedAt" TIMESTAMP(3) NOT NULL,
|
||||
|
||||
CONSTRAINT "ExperienceTemplate_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "public"."ExperienceTemplateCategory" (
|
||||
"id" TEXT NOT NULL,
|
||||
"templateId" TEXT NOT NULL,
|
||||
"key" TEXT NOT NULL,
|
||||
"name" TEXT NOT NULL,
|
||||
"weight" DOUBLE PRECISION NOT NULL DEFAULT 1,
|
||||
"sortOrder" INTEGER NOT NULL DEFAULT 0,
|
||||
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
"updatedAt" TIMESTAMP(3) NOT NULL,
|
||||
|
||||
CONSTRAINT "ExperienceTemplateCategory_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "public"."ExperienceTemplateItem" (
|
||||
"id" TEXT NOT NULL,
|
||||
"categoryId" TEXT NOT NULL,
|
||||
"key" TEXT NOT NULL,
|
||||
"label" TEXT NOT NULL,
|
||||
"weight" DOUBLE PRECISION NOT NULL DEFAULT 1,
|
||||
"sortOrder" INTEGER NOT NULL DEFAULT 0,
|
||||
"allowsComment" BOOLEAN NOT NULL DEFAULT true,
|
||||
"requiresObservation" BOOLEAN NOT NULL DEFAULT false,
|
||||
"allowsEvidence" BOOLEAN NOT NULL DEFAULT true,
|
||||
"isActive" BOOLEAN NOT NULL DEFAULT true,
|
||||
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
"updatedAt" TIMESTAMP(3) NOT NULL,
|
||||
|
||||
CONSTRAINT "ExperienceTemplateItem_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "public"."ExperienceEvaluation" (
|
||||
"id" TEXT NOT NULL,
|
||||
"locationId" TEXT NOT NULL,
|
||||
"templateId" TEXT NOT NULL,
|
||||
"createdById" TEXT,
|
||||
"evaluatedAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
"generalObservations" TEXT NOT NULL DEFAULT '',
|
||||
"strengths" TEXT NOT NULL DEFAULT '',
|
||||
"improvementAreas" TEXT NOT NULL DEFAULT '',
|
||||
"totalScore" DOUBLE PRECISION NOT NULL,
|
||||
"signal" "public"."ExperienceSignalStatus" NOT NULL,
|
||||
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
"updatedAt" TIMESTAMP(3) NOT NULL,
|
||||
|
||||
CONSTRAINT "ExperienceEvaluation_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "public"."ExperienceEvaluationResponse" (
|
||||
"id" TEXT NOT NULL,
|
||||
"evaluationId" TEXT NOT NULL,
|
||||
"categoryId" TEXT NOT NULL,
|
||||
"itemId" TEXT NOT NULL,
|
||||
"score" INTEGER NOT NULL,
|
||||
"scorePct" DOUBLE PRECISION NOT NULL,
|
||||
"comment" TEXT,
|
||||
"observation" TEXT,
|
||||
"hasObservation" BOOLEAN NOT NULL DEFAULT false,
|
||||
"categoryLabelSnapshot" TEXT NOT NULL,
|
||||
"itemLabelSnapshot" TEXT NOT NULL,
|
||||
"categoryWeightSnapshot" DOUBLE PRECISION NOT NULL,
|
||||
"itemWeightSnapshot" DOUBLE PRECISION NOT NULL,
|
||||
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
"updatedAt" TIMESTAMP(3) NOT NULL,
|
||||
|
||||
CONSTRAINT "ExperienceEvaluationResponse_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "public"."ExperienceFinding" (
|
||||
"id" TEXT NOT NULL,
|
||||
"locationId" TEXT NOT NULL,
|
||||
"evaluationId" TEXT,
|
||||
"createdById" TEXT,
|
||||
"responsibleUserId" TEXT,
|
||||
"title" TEXT NOT NULL,
|
||||
"description" TEXT NOT NULL DEFAULT '',
|
||||
"categoryKey" TEXT,
|
||||
"categoryLabel" TEXT,
|
||||
"priority" "public"."ExperienceFindingPriority" NOT NULL DEFAULT 'medium',
|
||||
"status" "public"."ExperienceFindingStatus" NOT NULL DEFAULT 'open',
|
||||
"dueDate" TIMESTAMP(3),
|
||||
"resolvedAt" TIMESTAMP(3),
|
||||
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
"updatedAt" TIMESTAMP(3) NOT NULL,
|
||||
|
||||
CONSTRAINT "ExperienceFinding_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "public"."ExperienceEvidence" (
|
||||
"id" TEXT NOT NULL,
|
||||
"locationId" TEXT NOT NULL,
|
||||
"evaluationId" TEXT,
|
||||
"findingId" TEXT,
|
||||
"responseId" TEXT,
|
||||
"uploadedById" TEXT,
|
||||
"kind" "public"."ExperienceEvidenceKind" NOT NULL,
|
||||
"title" TEXT NOT NULL,
|
||||
"note" TEXT,
|
||||
"url" TEXT,
|
||||
"storagePath" TEXT,
|
||||
"mimeType" TEXT,
|
||||
"sizeBytes" INTEGER,
|
||||
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
"updatedAt" TIMESTAMP(3) NOT NULL,
|
||||
|
||||
CONSTRAINT "ExperienceEvidence_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "public"."ExperienceLocationMetric" (
|
||||
"id" TEXT NOT NULL,
|
||||
"locationId" TEXT NOT NULL,
|
||||
"currentScore" DOUBLE PRECISION NOT NULL DEFAULT 0,
|
||||
"previousScore" DOUBLE PRECISION NOT NULL DEFAULT 0,
|
||||
"trendDelta" DOUBLE PRECISION NOT NULL DEFAULT 0,
|
||||
"trendDirection" "public"."ExperienceTrendDirection" NOT NULL DEFAULT 'flat',
|
||||
"signal" "public"."ExperienceSignalStatus" NOT NULL DEFAULT 'yellow',
|
||||
"totalEvaluations" INTEGER NOT NULL DEFAULT 0,
|
||||
"openFindings" INTEGER NOT NULL DEFAULT 0,
|
||||
"lastEvaluationAt" TIMESTAMP(3),
|
||||
"lastEvaluationId" TEXT,
|
||||
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
"updatedAt" TIMESTAMP(3) NOT NULL,
|
||||
|
||||
CONSTRAINT "ExperienceLocationMetric_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "public"."ExperienceScoringPolicy" (
|
||||
"id" TEXT NOT NULL,
|
||||
"name" TEXT NOT NULL,
|
||||
"isActive" BOOLEAN NOT NULL DEFAULT true,
|
||||
"aggregationMode" "public"."ExperienceScoreAggregationMode" NOT NULL DEFAULT 'weighted_recent',
|
||||
"recentWindow" INTEGER NOT NULL DEFAULT 3,
|
||||
"recentWeightsCsv" TEXT NOT NULL DEFAULT '0.5,0.3,0.2',
|
||||
"greenThreshold" DOUBLE PRECISION NOT NULL DEFAULT 85,
|
||||
"yellowThreshold" DOUBLE PRECISION NOT NULL DEFAULT 70,
|
||||
"createdById" TEXT,
|
||||
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
"updatedAt" TIMESTAMP(3) NOT NULL,
|
||||
|
||||
CONSTRAINT "ExperienceScoringPolicy_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
-- CreateIndex
|
||||
CREATE UNIQUE INDEX "Location_code_key" ON "public"."Location"("code");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "Location_isActive_name_idx" ON "public"."Location"("isActive", "name");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "ExperienceTemplate_state_updatedAt_idx" ON "public"."ExperienceTemplate"("state", "updatedAt");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE UNIQUE INDEX "ExperienceTemplate_name_version_key" ON "public"."ExperienceTemplate"("name", "version");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "ExperienceTemplateCategory_templateId_sortOrder_idx" ON "public"."ExperienceTemplateCategory"("templateId", "sortOrder");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE UNIQUE INDEX "ExperienceTemplateCategory_templateId_key_key" ON "public"."ExperienceTemplateCategory"("templateId", "key");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "ExperienceTemplateItem_categoryId_sortOrder_idx" ON "public"."ExperienceTemplateItem"("categoryId", "sortOrder");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE UNIQUE INDEX "ExperienceTemplateItem_categoryId_key_key" ON "public"."ExperienceTemplateItem"("categoryId", "key");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "ExperienceEvaluation_locationId_evaluatedAt_idx" ON "public"."ExperienceEvaluation"("locationId", "evaluatedAt");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "ExperienceEvaluation_templateId_evaluatedAt_idx" ON "public"."ExperienceEvaluation"("templateId", "evaluatedAt");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "ExperienceEvaluationResponse_evaluationId_categoryId_idx" ON "public"."ExperienceEvaluationResponse"("evaluationId", "categoryId");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE UNIQUE INDEX "ExperienceEvaluationResponse_evaluationId_itemId_key" ON "public"."ExperienceEvaluationResponse"("evaluationId", "itemId");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "ExperienceFinding_locationId_status_createdAt_idx" ON "public"."ExperienceFinding"("locationId", "status", "createdAt");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "ExperienceFinding_evaluationId_idx" ON "public"."ExperienceFinding"("evaluationId");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "ExperienceFinding_responsibleUserId_status_idx" ON "public"."ExperienceFinding"("responsibleUserId", "status");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "ExperienceEvidence_locationId_createdAt_idx" ON "public"."ExperienceEvidence"("locationId", "createdAt");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "ExperienceEvidence_evaluationId_createdAt_idx" ON "public"."ExperienceEvidence"("evaluationId", "createdAt");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "ExperienceEvidence_findingId_createdAt_idx" ON "public"."ExperienceEvidence"("findingId", "createdAt");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE UNIQUE INDEX "ExperienceLocationMetric_locationId_key" ON "public"."ExperienceLocationMetric"("locationId");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "ExperienceLocationMetric_signal_currentScore_idx" ON "public"."ExperienceLocationMetric"("signal", "currentScore");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "ExperienceScoringPolicy_isActive_updatedAt_idx" ON "public"."ExperienceScoringPolicy"("isActive", "updatedAt");
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "public"."Location" ADD CONSTRAINT "Location_managerUserId_fkey" FOREIGN KEY ("managerUserId") REFERENCES "public"."User"("id") ON DELETE SET NULL ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "public"."ExperienceTemplate" ADD CONSTRAINT "ExperienceTemplate_createdById_fkey" FOREIGN KEY ("createdById") REFERENCES "public"."User"("id") ON DELETE SET NULL ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "public"."ExperienceTemplateCategory" ADD CONSTRAINT "ExperienceTemplateCategory_templateId_fkey" FOREIGN KEY ("templateId") REFERENCES "public"."ExperienceTemplate"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "public"."ExperienceTemplateItem" ADD CONSTRAINT "ExperienceTemplateItem_categoryId_fkey" FOREIGN KEY ("categoryId") REFERENCES "public"."ExperienceTemplateCategory"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "public"."ExperienceEvaluation" ADD CONSTRAINT "ExperienceEvaluation_locationId_fkey" FOREIGN KEY ("locationId") REFERENCES "public"."Location"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "public"."ExperienceEvaluation" ADD CONSTRAINT "ExperienceEvaluation_templateId_fkey" FOREIGN KEY ("templateId") REFERENCES "public"."ExperienceTemplate"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "public"."ExperienceEvaluation" ADD CONSTRAINT "ExperienceEvaluation_createdById_fkey" FOREIGN KEY ("createdById") REFERENCES "public"."User"("id") ON DELETE SET NULL ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "public"."ExperienceEvaluationResponse" ADD CONSTRAINT "ExperienceEvaluationResponse_evaluationId_fkey" FOREIGN KEY ("evaluationId") REFERENCES "public"."ExperienceEvaluation"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "public"."ExperienceEvaluationResponse" ADD CONSTRAINT "ExperienceEvaluationResponse_categoryId_fkey" FOREIGN KEY ("categoryId") REFERENCES "public"."ExperienceTemplateCategory"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "public"."ExperienceEvaluationResponse" ADD CONSTRAINT "ExperienceEvaluationResponse_itemId_fkey" FOREIGN KEY ("itemId") REFERENCES "public"."ExperienceTemplateItem"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "public"."ExperienceFinding" ADD CONSTRAINT "ExperienceFinding_locationId_fkey" FOREIGN KEY ("locationId") REFERENCES "public"."Location"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "public"."ExperienceFinding" ADD CONSTRAINT "ExperienceFinding_evaluationId_fkey" FOREIGN KEY ("evaluationId") REFERENCES "public"."ExperienceEvaluation"("id") ON DELETE SET NULL ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "public"."ExperienceFinding" ADD CONSTRAINT "ExperienceFinding_createdById_fkey" FOREIGN KEY ("createdById") REFERENCES "public"."User"("id") ON DELETE SET NULL ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "public"."ExperienceFinding" ADD CONSTRAINT "ExperienceFinding_responsibleUserId_fkey" FOREIGN KEY ("responsibleUserId") REFERENCES "public"."User"("id") ON DELETE SET NULL ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "public"."ExperienceEvidence" ADD CONSTRAINT "ExperienceEvidence_locationId_fkey" FOREIGN KEY ("locationId") REFERENCES "public"."Location"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "public"."ExperienceEvidence" ADD CONSTRAINT "ExperienceEvidence_evaluationId_fkey" FOREIGN KEY ("evaluationId") REFERENCES "public"."ExperienceEvaluation"("id") ON DELETE SET NULL ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "public"."ExperienceEvidence" ADD CONSTRAINT "ExperienceEvidence_findingId_fkey" FOREIGN KEY ("findingId") REFERENCES "public"."ExperienceFinding"("id") ON DELETE SET NULL ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "public"."ExperienceEvidence" ADD CONSTRAINT "ExperienceEvidence_responseId_fkey" FOREIGN KEY ("responseId") REFERENCES "public"."ExperienceEvaluationResponse"("id") ON DELETE SET NULL ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "public"."ExperienceEvidence" ADD CONSTRAINT "ExperienceEvidence_uploadedById_fkey" FOREIGN KEY ("uploadedById") REFERENCES "public"."User"("id") ON DELETE SET NULL ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "public"."ExperienceLocationMetric" ADD CONSTRAINT "ExperienceLocationMetric_locationId_fkey" FOREIGN KEY ("locationId") REFERENCES "public"."Location"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "public"."ExperienceLocationMetric" ADD CONSTRAINT "ExperienceLocationMetric_lastEvaluationId_fkey" FOREIGN KEY ("lastEvaluationId") REFERENCES "public"."ExperienceEvaluation"("id") ON DELETE SET NULL ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "public"."ExperienceScoringPolicy" ADD CONSTRAINT "ExperienceScoringPolicy_createdById_fkey" FOREIGN KEY ("createdById") REFERENCES "public"."User"("id") ON DELETE SET NULL ON UPDATE CASCADE;
|
||||
158
prisma/migrations/20260323195000_capture_v1/migration.sql
Normal file
158
prisma/migrations/20260323195000_capture_v1/migration.sql
Normal file
@@ -0,0 +1,158 @@
|
||||
-- CreateEnum
|
||||
CREATE TYPE "public"."CaptureMode" AS ENUM ('manual', 'auto', 'hybrid');
|
||||
|
||||
-- CreateEnum
|
||||
CREATE TYPE "public"."CaptureAutomationRunStatus" AS ENUM ('queued', 'running', 'success', 'failed');
|
||||
|
||||
-- AlterTable
|
||||
ALTER TABLE "public"."WeeklyKpiRow"
|
||||
ADD COLUMN "captureNote" TEXT,
|
||||
ADD COLUMN "lastAutomationAt" TIMESTAMP(3),
|
||||
ADD COLUMN "lastCapturedAt" TIMESTAMP(3),
|
||||
ADD COLUMN "lastCapturedById" TEXT;
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "public"."KpiCaptureCatalog" (
|
||||
"id" TEXT NOT NULL,
|
||||
"weekStart" TIMESTAMP(3) NOT NULL,
|
||||
"sectionKey" TEXT NOT NULL,
|
||||
"rowKey" TEXT NOT NULL,
|
||||
"weeklyKpiRowId" TEXT,
|
||||
"department" "public"."DepartmentKey" NOT NULL,
|
||||
"captureMode" "public"."CaptureMode" NOT NULL DEFAULT 'manual',
|
||||
"automationSource" TEXT,
|
||||
"ownerUserId" TEXT,
|
||||
"freshnessSlaHours" INTEGER NOT NULL DEFAULT 168,
|
||||
"captureNote" TEXT,
|
||||
"lastCapturedAt" TIMESTAMP(3),
|
||||
"lastCapturedById" TEXT,
|
||||
"lastAutomationAt" TIMESTAMP(3),
|
||||
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
"updatedAt" TIMESTAMP(3) NOT NULL,
|
||||
|
||||
CONSTRAINT "KpiCaptureCatalog_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "public"."KpiCaptureEvidence" (
|
||||
"id" TEXT NOT NULL,
|
||||
"department" "public"."DepartmentKey" NOT NULL,
|
||||
"weekStart" TIMESTAMP(3) NOT NULL,
|
||||
"sectionKey" TEXT NOT NULL,
|
||||
"rowKey" TEXT NOT NULL,
|
||||
"catalogId" TEXT,
|
||||
"weeklyKpiRowId" TEXT,
|
||||
"initiativeId" TEXT,
|
||||
"taskId" TEXT,
|
||||
"uploadedById" TEXT NOT NULL,
|
||||
"kind" "public"."ProjectCaptureEvidenceKind" NOT NULL,
|
||||
"title" TEXT NOT NULL,
|
||||
"note" TEXT,
|
||||
"url" TEXT,
|
||||
"storagePath" TEXT,
|
||||
"mimeType" TEXT,
|
||||
"sizeBytes" INTEGER,
|
||||
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
"updatedAt" TIMESTAMP(3) NOT NULL,
|
||||
|
||||
CONSTRAINT "KpiCaptureEvidence_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "public"."KpiCaptureAutomationRun" (
|
||||
"id" TEXT NOT NULL,
|
||||
"department" "public"."DepartmentKey" NOT NULL,
|
||||
"weekStart" TIMESTAMP(3) NOT NULL,
|
||||
"source" TEXT NOT NULL,
|
||||
"status" "public"."CaptureAutomationRunStatus" NOT NULL DEFAULT 'queued',
|
||||
"rowsTouched" INTEGER NOT NULL DEFAULT 0,
|
||||
"errorMessage" TEXT,
|
||||
"triggeredById" TEXT,
|
||||
"startedAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
"completedAt" TIMESTAMP(3),
|
||||
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
"updatedAt" TIMESTAMP(3) NOT NULL,
|
||||
|
||||
CONSTRAINT "KpiCaptureAutomationRun_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
-- CreateIndex
|
||||
CREATE UNIQUE INDEX "KpiCaptureCatalog_weekStart_sectionKey_rowKey_key" ON "public"."KpiCaptureCatalog"("weekStart", "sectionKey", "rowKey");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE UNIQUE INDEX "KpiCaptureCatalog_weeklyKpiRowId_key" ON "public"."KpiCaptureCatalog"("weeklyKpiRowId");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "KpiCaptureCatalog_department_weekStart_idx" ON "public"."KpiCaptureCatalog"("department", "weekStart");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "KpiCaptureCatalog_ownerUserId_weekStart_idx" ON "public"."KpiCaptureCatalog"("ownerUserId", "weekStart");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "KpiCaptureEvidence_department_weekStart_createdAt_idx" ON "public"."KpiCaptureEvidence"("department", "weekStart", "createdAt");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "KpiCaptureEvidence_sectionKey_rowKey_weekStart_idx" ON "public"."KpiCaptureEvidence"("sectionKey", "rowKey", "weekStart");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "KpiCaptureEvidence_catalogId_createdAt_idx" ON "public"."KpiCaptureEvidence"("catalogId", "createdAt");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "KpiCaptureEvidence_initiativeId_createdAt_idx" ON "public"."KpiCaptureEvidence"("initiativeId", "createdAt");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "KpiCaptureEvidence_taskId_createdAt_idx" ON "public"."KpiCaptureEvidence"("taskId", "createdAt");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "KpiCaptureEvidence_uploadedById_createdAt_idx" ON "public"."KpiCaptureEvidence"("uploadedById", "createdAt");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "KpiCaptureAutomationRun_department_weekStart_createdAt_idx" ON "public"."KpiCaptureAutomationRun"("department", "weekStart", "createdAt");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "KpiCaptureAutomationRun_status_createdAt_idx" ON "public"."KpiCaptureAutomationRun"("status", "createdAt");
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "public"."KpiCaptureCatalog"
|
||||
ADD CONSTRAINT "KpiCaptureCatalog_weeklyKpiRowId_fkey"
|
||||
FOREIGN KEY ("weeklyKpiRowId") REFERENCES "public"."WeeklyKpiRow"("id") ON DELETE SET NULL ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "public"."KpiCaptureCatalog"
|
||||
ADD CONSTRAINT "KpiCaptureCatalog_ownerUserId_fkey"
|
||||
FOREIGN KEY ("ownerUserId") REFERENCES "public"."User"("id") ON DELETE SET NULL ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "public"."KpiCaptureCatalog"
|
||||
ADD CONSTRAINT "KpiCaptureCatalog_lastCapturedById_fkey"
|
||||
FOREIGN KEY ("lastCapturedById") REFERENCES "public"."User"("id") ON DELETE SET NULL ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "public"."KpiCaptureEvidence"
|
||||
ADD CONSTRAINT "KpiCaptureEvidence_catalogId_fkey"
|
||||
FOREIGN KEY ("catalogId") REFERENCES "public"."KpiCaptureCatalog"("id") ON DELETE SET NULL ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "public"."KpiCaptureEvidence"
|
||||
ADD CONSTRAINT "KpiCaptureEvidence_weeklyKpiRowId_fkey"
|
||||
FOREIGN KEY ("weeklyKpiRowId") REFERENCES "public"."WeeklyKpiRow"("id") ON DELETE SET NULL ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "public"."KpiCaptureEvidence"
|
||||
ADD CONSTRAINT "KpiCaptureEvidence_initiativeId_fkey"
|
||||
FOREIGN KEY ("initiativeId") REFERENCES "public"."MarketingInitiative"("id") ON DELETE SET NULL ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "public"."KpiCaptureEvidence"
|
||||
ADD CONSTRAINT "KpiCaptureEvidence_taskId_fkey"
|
||||
FOREIGN KEY ("taskId") REFERENCES "public"."MarketingTask"("id") ON DELETE SET NULL ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "public"."KpiCaptureEvidence"
|
||||
ADD CONSTRAINT "KpiCaptureEvidence_uploadedById_fkey"
|
||||
FOREIGN KEY ("uploadedById") REFERENCES "public"."User"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "public"."KpiCaptureAutomationRun"
|
||||
ADD CONSTRAINT "KpiCaptureAutomationRun_triggeredById_fkey"
|
||||
FOREIGN KEY ("triggeredById") REFERENCES "public"."User"("id") ON DELETE SET NULL ON UPDATE CASCADE;
|
||||
399
prisma/migrations/20260330001000_hc_workspace_v1/migration.sql
Normal file
399
prisma/migrations/20260330001000_hc_workspace_v1/migration.sql
Normal file
@@ -0,0 +1,399 @@
|
||||
-- CreateEnum
|
||||
CREATE TYPE "WorkspaceConfigStatus" AS ENUM ('draft', 'published', 'archived');
|
||||
|
||||
-- CreateEnum
|
||||
CREATE TYPE "HrFileRecordStatus" AS ENUM ('missing', 'submitted', 'verified', 'rejected');
|
||||
|
||||
-- CreateEnum
|
||||
CREATE TYPE "HrVacancyStatus" AS ENUM ('draft', 'open', 'interviewing', 'offered', 'hired', 'closed', 'cancelled');
|
||||
|
||||
-- CreateEnum
|
||||
CREATE TYPE "HrPayrollFrequency" AS ENUM ('weekly', 'biweekly');
|
||||
|
||||
-- CreateEnum
|
||||
CREATE TYPE "HrPayrollLineType" AS ENUM ('percepciones', 'deducciones', 'aportaciones');
|
||||
|
||||
-- CreateEnum
|
||||
CREATE TYPE "HrImportJobStatus" AS ENUM ('queued', 'success', 'partial', 'failed');
|
||||
|
||||
-- CreateEnum
|
||||
CREATE TYPE "HrCareerContentType" AS ENUM ('announcement', 'course');
|
||||
|
||||
-- CreateEnum
|
||||
CREATE TYPE "HrCareerAssignmentStatus" AS ENUM ('not_started', 'in_progress', 'completed');
|
||||
|
||||
-- CreateEnum
|
||||
CREATE TYPE "HrComplianceBody" AS ENUM ('imss', 'infonavit', 'fonacot', 'other');
|
||||
|
||||
-- CreateEnum
|
||||
CREATE TYPE "HrComplianceStatus" AS ENUM ('on_time', 'due_soon', 'overdue', 'paid', 'blocked');
|
||||
|
||||
-- CreateEnum
|
||||
CREATE TYPE "HrCompliancePaymentStatus" AS ENUM ('scheduled', 'paid', 'late', 'failed');
|
||||
|
||||
-- CreateEnum
|
||||
CREATE TYPE "HrAutomationTaskStatus" AS ENUM ('queued', 'success', 'warning', 'failed');
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "HrWorkspaceConfigVersion" (
|
||||
"id" TEXT NOT NULL,
|
||||
"department" "DepartmentKey" NOT NULL DEFAULT 'capital_humano',
|
||||
"version" INTEGER NOT NULL,
|
||||
"status" "WorkspaceConfigStatus" NOT NULL DEFAULT 'draft',
|
||||
"name" TEXT NOT NULL DEFAULT 'Capital Humano Workspace',
|
||||
"tabs" JSONB NOT NULL,
|
||||
"changeSummary" TEXT,
|
||||
"createdById" TEXT,
|
||||
"publishedById" TEXT,
|
||||
"publishedAt" TIMESTAMP(3),
|
||||
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
"updatedAt" TIMESTAMP(3) NOT NULL,
|
||||
|
||||
CONSTRAINT "HrWorkspaceConfigVersion_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "HrFileRequirement" (
|
||||
"id" TEXT NOT NULL,
|
||||
"department" "DepartmentKey" NOT NULL DEFAULT 'capital_humano',
|
||||
"key" TEXT NOT NULL,
|
||||
"label" TEXT NOT NULL,
|
||||
"description" TEXT,
|
||||
"fieldType" TEXT NOT NULL DEFAULT 'document',
|
||||
"isRequired" BOOLEAN NOT NULL DEFAULT true,
|
||||
"isActive" BOOLEAN NOT NULL DEFAULT true,
|
||||
"sortOrder" INTEGER NOT NULL DEFAULT 0,
|
||||
"createdById" TEXT,
|
||||
"updatedById" TEXT,
|
||||
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
"updatedAt" TIMESTAMP(3) NOT NULL,
|
||||
|
||||
CONSTRAINT "HrFileRequirement_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "HrEmployeeFileRecord" (
|
||||
"id" TEXT NOT NULL,
|
||||
"userId" TEXT NOT NULL,
|
||||
"requirementId" TEXT NOT NULL,
|
||||
"status" "HrFileRecordStatus" NOT NULL DEFAULT 'missing',
|
||||
"valueText" TEXT,
|
||||
"evidenceUrl" TEXT,
|
||||
"note" TEXT,
|
||||
"verifiedAt" TIMESTAMP(3),
|
||||
"verifiedById" TEXT,
|
||||
"updatedById" TEXT,
|
||||
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
"updatedAt" TIMESTAMP(3) NOT NULL,
|
||||
|
||||
CONSTRAINT "HrEmployeeFileRecord_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "HrIdealOrgTarget" (
|
||||
"id" TEXT NOT NULL,
|
||||
"department" "DepartmentKey" NOT NULL DEFAULT 'capital_humano',
|
||||
"locationCode" TEXT NOT NULL,
|
||||
"roleKey" TEXT NOT NULL,
|
||||
"targetCount" INTEGER NOT NULL,
|
||||
"isActive" BOOLEAN NOT NULL DEFAULT true,
|
||||
"updatedById" TEXT,
|
||||
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
"updatedAt" TIMESTAMP(3) NOT NULL,
|
||||
|
||||
CONSTRAINT "HrIdealOrgTarget_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "HrVacancy" (
|
||||
"id" TEXT NOT NULL,
|
||||
"department" "DepartmentKey" NOT NULL DEFAULT 'capital_humano',
|
||||
"locationCode" TEXT NOT NULL,
|
||||
"roleKey" TEXT NOT NULL,
|
||||
"title" TEXT NOT NULL,
|
||||
"status" "HrVacancyStatus" NOT NULL DEFAULT 'open',
|
||||
"priority" TEXT NOT NULL DEFAULT 'medium',
|
||||
"openedAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
"targetStartAt" TIMESTAMP(3),
|
||||
"closedAt" TIMESTAMP(3),
|
||||
"hiringManagerUserId" TEXT,
|
||||
"ownerUserId" TEXT,
|
||||
"notes" TEXT,
|
||||
"createdById" TEXT,
|
||||
"updatedById" TEXT,
|
||||
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
"updatedAt" TIMESTAMP(3) NOT NULL,
|
||||
|
||||
CONSTRAINT "HrVacancy_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "HrPayrollRun" (
|
||||
"id" TEXT NOT NULL,
|
||||
"department" "DepartmentKey" NOT NULL DEFAULT 'capital_humano',
|
||||
"source" TEXT NOT NULL DEFAULT 'contpaqi_csv',
|
||||
"externalRef" TEXT,
|
||||
"periodStart" TIMESTAMP(3) NOT NULL,
|
||||
"periodEnd" TIMESTAMP(3) NOT NULL,
|
||||
"frequency" "HrPayrollFrequency" NOT NULL,
|
||||
"locationCode" TEXT,
|
||||
"status" TEXT NOT NULL DEFAULT 'imported',
|
||||
"rawHash" TEXT,
|
||||
"importedById" TEXT,
|
||||
"importedAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
"updatedAt" TIMESTAMP(3) NOT NULL,
|
||||
|
||||
CONSTRAINT "HrPayrollRun_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "HrPayrollLine" (
|
||||
"id" TEXT NOT NULL,
|
||||
"runId" TEXT NOT NULL,
|
||||
"userId" TEXT,
|
||||
"personIdentifier" TEXT NOT NULL,
|
||||
"lineType" "HrPayrollLineType" NOT NULL,
|
||||
"concept" TEXT NOT NULL,
|
||||
"amount" DOUBLE PRECISION NOT NULL,
|
||||
"currency" TEXT NOT NULL DEFAULT 'MXN',
|
||||
"locationCode" TEXT,
|
||||
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
"updatedAt" TIMESTAMP(3) NOT NULL,
|
||||
|
||||
CONSTRAINT "HrPayrollLine_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "HrPayrollImportJob" (
|
||||
"id" TEXT NOT NULL,
|
||||
"department" "DepartmentKey" NOT NULL DEFAULT 'capital_humano',
|
||||
"status" "HrImportJobStatus" NOT NULL DEFAULT 'queued',
|
||||
"sourceFileName" TEXT,
|
||||
"requestHash" TEXT,
|
||||
"message" TEXT,
|
||||
"rowsRead" INTEGER NOT NULL DEFAULT 0,
|
||||
"rowsImported" INTEGER NOT NULL DEFAULT 0,
|
||||
"failedRows" INTEGER NOT NULL DEFAULT 0,
|
||||
"runId" TEXT,
|
||||
"triggeredById" TEXT,
|
||||
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
"updatedAt" TIMESTAMP(3) NOT NULL,
|
||||
"completedAt" TIMESTAMP(3),
|
||||
|
||||
CONSTRAINT "HrPayrollImportJob_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "HrCareerContent" (
|
||||
"id" TEXT NOT NULL,
|
||||
"department" "DepartmentKey" NOT NULL DEFAULT 'capital_humano',
|
||||
"contentType" "HrCareerContentType" NOT NULL,
|
||||
"title" TEXT NOT NULL,
|
||||
"body" TEXT NOT NULL,
|
||||
"sourceDepartment" "DepartmentKey",
|
||||
"sourceRef" TEXT,
|
||||
"startsAt" TIMESTAMP(3),
|
||||
"endsAt" TIMESTAMP(3),
|
||||
"isActive" BOOLEAN NOT NULL DEFAULT true,
|
||||
"createdById" TEXT,
|
||||
"updatedById" TEXT,
|
||||
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
"updatedAt" TIMESTAMP(3) NOT NULL,
|
||||
|
||||
CONSTRAINT "HrCareerContent_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "HrCareerAssignment" (
|
||||
"id" TEXT NOT NULL,
|
||||
"contentId" TEXT NOT NULL,
|
||||
"userId" TEXT NOT NULL,
|
||||
"status" "HrCareerAssignmentStatus" NOT NULL DEFAULT 'not_started',
|
||||
"progressPct" DOUBLE PRECISION NOT NULL DEFAULT 0,
|
||||
"assignedAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
"dueAt" TIMESTAMP(3),
|
||||
"completedAt" TIMESTAMP(3),
|
||||
"notes" TEXT,
|
||||
"updatedById" TEXT,
|
||||
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
"updatedAt" TIMESTAMP(3) NOT NULL,
|
||||
|
||||
CONSTRAINT "HrCareerAssignment_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "HrComplianceObligation" (
|
||||
"id" TEXT NOT NULL,
|
||||
"department" "DepartmentKey" NOT NULL DEFAULT 'capital_humano',
|
||||
"body" "HrComplianceBody" NOT NULL,
|
||||
"title" TEXT NOT NULL,
|
||||
"status" "HrComplianceStatus" NOT NULL DEFAULT 'due_soon',
|
||||
"locationCode" TEXT,
|
||||
"referencePeriod" TEXT,
|
||||
"dueDate" TIMESTAMP(3),
|
||||
"lastPaymentAt" TIMESTAMP(3),
|
||||
"lastPaymentAmount" DOUBLE PRECISION,
|
||||
"notes" TEXT,
|
||||
"createdById" TEXT,
|
||||
"updatedById" TEXT,
|
||||
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
"updatedAt" TIMESTAMP(3) NOT NULL,
|
||||
|
||||
CONSTRAINT "HrComplianceObligation_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "HrCompliancePayment" (
|
||||
"id" TEXT NOT NULL,
|
||||
"obligationId" TEXT NOT NULL,
|
||||
"paymentDate" TIMESTAMP(3) NOT NULL,
|
||||
"amount" DOUBLE PRECISION NOT NULL,
|
||||
"status" "HrCompliancePaymentStatus" NOT NULL DEFAULT 'paid',
|
||||
"referencePeriod" TEXT,
|
||||
"receiptUrl" TEXT,
|
||||
"note" TEXT,
|
||||
"createdById" TEXT,
|
||||
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
"updatedAt" TIMESTAMP(3) NOT NULL,
|
||||
|
||||
CONSTRAINT "HrCompliancePayment_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "HrAutomationTask" (
|
||||
"id" TEXT NOT NULL,
|
||||
"department" "DepartmentKey" NOT NULL DEFAULT 'capital_humano',
|
||||
"taskType" TEXT NOT NULL,
|
||||
"status" "HrAutomationTaskStatus" NOT NULL DEFAULT 'queued',
|
||||
"title" TEXT NOT NULL,
|
||||
"message" TEXT,
|
||||
"payload" JSONB,
|
||||
"runAt" TIMESTAMP(3) NOT NULL,
|
||||
"resolvedAt" TIMESTAMP(3),
|
||||
"assignedToId" TEXT,
|
||||
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
"updatedAt" TIMESTAMP(3) NOT NULL,
|
||||
|
||||
CONSTRAINT "HrAutomationTask_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "HrExceptionQueueItem" (
|
||||
"id" TEXT NOT NULL,
|
||||
"department" "DepartmentKey" NOT NULL DEFAULT 'capital_humano',
|
||||
"source" TEXT NOT NULL,
|
||||
"errorCode" TEXT,
|
||||
"message" TEXT NOT NULL,
|
||||
"payload" JSONB,
|
||||
"status" TEXT NOT NULL DEFAULT 'open',
|
||||
"retryCount" INTEGER NOT NULL DEFAULT 0,
|
||||
"lastRetriedAt" TIMESTAMP(3),
|
||||
"resolvedAt" TIMESTAMP(3),
|
||||
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
"updatedAt" TIMESTAMP(3) NOT NULL,
|
||||
|
||||
CONSTRAINT "HrExceptionQueueItem_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
-- CreateIndex
|
||||
CREATE UNIQUE INDEX "HrWorkspaceConfigVersion_department_version_key" ON "HrWorkspaceConfigVersion"("department", "version");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "HrWorkspaceConfigVersion_department_status_version_idx" ON "HrWorkspaceConfigVersion"("department", "status", "version");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE UNIQUE INDEX "HrFileRequirement_department_key_key" ON "HrFileRequirement"("department", "key");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "HrFileRequirement_department_isActive_sortOrder_idx" ON "HrFileRequirement"("department", "isActive", "sortOrder");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE UNIQUE INDEX "HrEmployeeFileRecord_userId_requirementId_key" ON "HrEmployeeFileRecord"("userId", "requirementId");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "HrEmployeeFileRecord_userId_status_idx" ON "HrEmployeeFileRecord"("userId", "status");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "HrEmployeeFileRecord_requirementId_status_idx" ON "HrEmployeeFileRecord"("requirementId", "status");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE UNIQUE INDEX "HrIdealOrgTarget_department_locationCode_roleKey_key" ON "HrIdealOrgTarget"("department", "locationCode", "roleKey");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "HrIdealOrgTarget_department_locationCode_roleKey_idx" ON "HrIdealOrgTarget"("department", "locationCode", "roleKey");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "HrVacancy_department_status_openedAt_idx" ON "HrVacancy"("department", "status", "openedAt");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "HrVacancy_department_locationCode_roleKey_idx" ON "HrVacancy"("department", "locationCode", "roleKey");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "HrPayrollRun_department_periodStart_periodEnd_idx" ON "HrPayrollRun"("department", "periodStart", "periodEnd");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "HrPayrollRun_department_frequency_locationCode_idx" ON "HrPayrollRun"("department", "frequency", "locationCode");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "HrPayrollRun_rawHash_idx" ON "HrPayrollRun"("rawHash");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "HrPayrollLine_runId_lineType_idx" ON "HrPayrollLine"("runId", "lineType");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "HrPayrollLine_userId_idx" ON "HrPayrollLine"("userId");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "HrPayrollLine_locationCode_lineType_idx" ON "HrPayrollLine"("locationCode", "lineType");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "HrPayrollImportJob_department_status_createdAt_idx" ON "HrPayrollImportJob"("department", "status", "createdAt");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "HrPayrollImportJob_requestHash_idx" ON "HrPayrollImportJob"("requestHash");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "HrCareerContent_department_contentType_isActive_idx" ON "HrCareerContent"("department", "contentType", "isActive");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "HrCareerContent_sourceDepartment_createdAt_idx" ON "HrCareerContent"("sourceDepartment", "createdAt");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE UNIQUE INDEX "HrCareerAssignment_contentId_userId_key" ON "HrCareerAssignment"("contentId", "userId");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "HrCareerAssignment_userId_status_idx" ON "HrCareerAssignment"("userId", "status");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "HrComplianceObligation_department_body_status_dueDate_idx" ON "HrComplianceObligation"("department", "body", "status", "dueDate");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "HrComplianceObligation_department_locationCode_body_idx" ON "HrComplianceObligation"("department", "locationCode", "body");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "HrCompliancePayment_obligationId_paymentDate_idx" ON "HrCompliancePayment"("obligationId", "paymentDate");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "HrAutomationTask_department_status_runAt_idx" ON "HrAutomationTask"("department", "status", "runAt");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "HrExceptionQueueItem_department_status_createdAt_idx" ON "HrExceptionQueueItem"("department", "status", "createdAt");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "HrExceptionQueueItem_source_status_idx" ON "HrExceptionQueueItem"("source", "status");
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "HrEmployeeFileRecord" ADD CONSTRAINT "HrEmployeeFileRecord_requirementId_fkey" FOREIGN KEY ("requirementId") REFERENCES "HrFileRequirement"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "HrPayrollLine" ADD CONSTRAINT "HrPayrollLine_runId_fkey" FOREIGN KEY ("runId") REFERENCES "HrPayrollRun"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "HrPayrollImportJob" ADD CONSTRAINT "HrPayrollImportJob_runId_fkey" FOREIGN KEY ("runId") REFERENCES "HrPayrollRun"("id") ON DELETE SET NULL ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "HrCareerAssignment" ADD CONSTRAINT "HrCareerAssignment_contentId_fkey" FOREIGN KEY ("contentId") REFERENCES "HrCareerContent"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "HrCompliancePayment" ADD CONSTRAINT "HrCompliancePayment_obligationId_fkey" FOREIGN KEY ("obligationId") REFERENCES "HrComplianceObligation"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
||||
3
prisma/migrations/migration_lock.toml
Normal file
3
prisma/migrations/migration_lock.toml
Normal file
@@ -0,0 +1,3 @@
|
||||
# Please do not edit this file manually
|
||||
# It should be added in your version-control system (e.g., Git)
|
||||
provider = "postgresql"
|
||||
Reference in New Issue
Block a user