Files
TurboHR/backend/prisma/migrations/20260724011853_init/migration.sql
T
selfrelease 0df8aa77d9 feat: AIHR 智能人力资源管理系统初始提交
- 员工花名册管理(加密存储、导入导出)
- 薪酬管理(发薪批次、薪酬模版、加班费计算、工资条)
- 社保公积金(多城市配置、版本管理、基数调整)
- 解聘管理(6步流程、证据链、工作交接)
- AI 助手(合同审查、风险预测、RAG 知识库)
- Dashboard 仪表盘
- 设置与通知
2026-07-24 13:53:11 +08:00

932 lines
34 KiB
SQL

-- 启用 pgvector 扩展(RAG 知识库需要 vector 类型)
CREATE EXTENSION IF NOT EXISTS vector;
-- CreateEnum
CREATE TYPE "Plan" AS ENUM ('FREE', 'PRO', 'ENTERPRISE');
-- CreateEnum
CREATE TYPE "Role" AS ENUM ('ADMIN', 'HR', 'VIEWER');
-- CreateEnum
CREATE TYPE "EmployeeStatus" AS ENUM ('ACTIVE', 'RESIGNED');
-- CreateEnum
CREATE TYPE "ContractType" AS ENUM ('FIXED', 'UNFIXED', 'UNSIGNED');
-- CreateEnum
CREATE TYPE "SignMethod" AS ENUM ('PAPER', 'ELECTRONIC');
-- CreateEnum
CREATE TYPE "RiskType" AS ENUM ('CONTRACT', 'SALARY', 'TERMINATION', 'MONTHLY', 'ONBOARDING');
-- CreateEnum
CREATE TYPE "RiskLevel" AS ENUM ('HIGH', 'MEDIUM', 'LOW');
-- CreateEnum
CREATE TYPE "PayrollBatchType" AS ENUM ('REGULAR', 'TERMINATION', 'BONUS', 'SEVERANCE');
-- CreateEnum
CREATE TYPE "PayrollBatchStatus" AS ENUM ('DRAFT', 'ARCHIVED');
-- CreateEnum
CREATE TYPE "PayslipItemType" AS ENUM ('INPUT', 'CALCULATED');
-- CreateEnum
CREATE TYPE "PayslipStatus" AS ENUM ('PENDING', 'PUBLISHED');
-- CreateEnum
CREATE TYPE "RiskStatus" AS ENUM ('PENDING', 'RESOLVED', 'IGNORED');
-- CreateEnum
CREATE TYPE "TerminationReason" AS ENUM ('NEGOTIATED', 'FAULT', 'NONFAULT', 'LAYOFF', 'EXPIRED', 'RESIGNATION');
-- CreateEnum
CREATE TYPE "RiskAssessment" AS ENUM ('SAFE', 'WARNING', 'DANGER');
-- CreateEnum
CREATE TYPE "OnboardingStatus" AS ENUM ('PENDING', 'APPROVED', 'REJECTED', 'CANCELLED');
-- CreateEnum
CREATE TYPE "ContractConfirmStatus" AS ENUM ('UNCONFIRMED', 'CONFIRMED', 'EXPIRED');
-- CreateTable
CREATE TABLE "Organization" (
"id" TEXT NOT NULL,
"name" TEXT NOT NULL,
"plan" "Plan" NOT NULL DEFAULT 'FREE',
"maxEmployees" INTEGER NOT NULL DEFAULT 20,
"city" TEXT,
"payrollFrequency" INTEGER NOT NULL DEFAULT 1,
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updatedAt" TIMESTAMP(3) NOT NULL,
CONSTRAINT "Organization_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "User" (
"id" TEXT NOT NULL,
"orgId" TEXT NOT NULL,
"phone" TEXT NOT NULL,
"email" TEXT,
"passwordHash" TEXT NOT NULL,
"name" TEXT NOT NULL,
"role" "Role" NOT NULL DEFAULT 'ADMIN',
"disabled" BOOLEAN NOT NULL DEFAULT false,
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"lastLoginAt" TIMESTAMP(3),
CONSTRAINT "User_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "Employee" (
"id" TEXT NOT NULL,
"orgId" TEXT NOT NULL,
"name" TEXT NOT NULL,
"department" TEXT NOT NULL,
"hireDate" TIMESTAMP(3) NOT NULL,
"monthlySalary" TEXT NOT NULL,
"status" "EmployeeStatus" NOT NULL DEFAULT 'ACTIVE',
"gender" TEXT,
"phone" TEXT,
"idCardNumber" TEXT,
"idCardHash" TEXT,
"emergencyContact" TEXT,
"emergencyPhone" TEXT,
"address" TEXT,
"bankAccount" TEXT,
"bankName" TEXT,
"passwordHash" TEXT,
"isPregnant" BOOLEAN NOT NULL DEFAULT false,
"isInMedicalPeriod" BOOLEAN NOT NULL DEFAULT false,
"isWorkInjured" BOOLEAN NOT NULL DEFAULT false,
"socialInsBase" DOUBLE PRECISION,
"housingFundBase" DOUBLE PRECISION,
"socialInsStartMonth" TEXT,
"socialInsEndMonth" TEXT,
"housingFundStartMonth" TEXT,
"housingFundEndMonth" TEXT,
"specialDeduction" DOUBLE PRECISION NOT NULL DEFAULT 0,
"city" TEXT,
"createdBy" TEXT NOT NULL,
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updatedAt" TIMESTAMP(3) NOT NULL,
CONSTRAINT "Employee_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "LaborContract" (
"id" TEXT NOT NULL,
"orgId" TEXT NOT NULL,
"employeeId" TEXT NOT NULL,
"signDate" TIMESTAMP(3),
"startDate" TIMESTAMP(3) NOT NULL,
"endDate" TIMESTAMP(3),
"contractType" "ContractType" NOT NULL,
"signMethod" "SignMethod" NOT NULL DEFAULT 'PAPER',
"contractYears" INTEGER NOT NULL DEFAULT 3,
"probationMonths" INTEGER NOT NULL DEFAULT 0,
"probationSalary" INTEGER NOT NULL DEFAULT 0,
"renewalCount" INTEGER NOT NULL DEFAULT 0,
"attachmentName" TEXT,
"attachmentUrl" TEXT,
"electronicContractNo" TEXT,
"electronicContractUrl" TEXT,
"createdBy" TEXT NOT NULL,
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updatedAt" TIMESTAMP(3) NOT NULL,
CONSTRAINT "LaborContract_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "OvertimeRecord" (
"id" TEXT NOT NULL,
"orgId" TEXT NOT NULL,
"employeeId" TEXT NOT NULL,
"month" TEXT NOT NULL,
"weekdayHours" DOUBLE PRECISION NOT NULL DEFAULT 0,
"weekendHours" DOUBLE PRECISION NOT NULL DEFAULT 0,
"holidayHours" DOUBLE PRECISION NOT NULL DEFAULT 0,
"weekdayPay" DOUBLE PRECISION NOT NULL DEFAULT 0,
"weekendPay" DOUBLE PRECISION NOT NULL DEFAULT 0,
"holidayPay" DOUBLE PRECISION NOT NULL DEFAULT 0,
"totalPay" DOUBLE PRECISION NOT NULL DEFAULT 0,
"batchId" TEXT,
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
CONSTRAINT "OvertimeRecord_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "TerminationRecord" (
"id" TEXT NOT NULL,
"orgId" TEXT NOT NULL,
"employeeId" TEXT NOT NULL,
"type" TEXT NOT NULL DEFAULT 'TERMINATION',
"reason" "TerminationReason" NOT NULL,
"terminationDate" TIMESTAMP(3) NOT NULL,
"resignationReason" TEXT,
"compensation" DOUBLE PRECISION NOT NULL DEFAULT 0,
"socialInsEndMonth" TEXT,
"housingFundEndMonth" TEXT,
"riskLevel" "RiskAssessment" NOT NULL DEFAULT 'SAFE',
"checklist" JSONB NOT NULL,
"remark" TEXT,
"createdBy" TEXT NOT NULL,
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
CONSTRAINT "TerminationRecord_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "RiskItem" (
"id" TEXT NOT NULL,
"orgId" TEXT NOT NULL,
"employeeId" TEXT,
"type" "RiskType" NOT NULL,
"level" "RiskLevel" NOT NULL,
"status" "RiskStatus" NOT NULL DEFAULT 'PENDING',
"title" TEXT NOT NULL,
"description" TEXT NOT NULL,
"actionUrl" TEXT,
"resolvedAt" TIMESTAMP(3),
"resolvedBy" TEXT,
"remark" TEXT,
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updatedAt" TIMESTAMP(3) NOT NULL,
CONSTRAINT "RiskItem_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "AuditLog" (
"id" TEXT NOT NULL,
"orgId" TEXT NOT NULL,
"userId" TEXT NOT NULL,
"action" TEXT NOT NULL,
"entity" TEXT NOT NULL,
"entityId" TEXT,
"detail" JSONB,
"ip" TEXT,
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
CONSTRAINT "AuditLog_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "SocialInsuranceConfig" (
"id" TEXT NOT NULL,
"orgId" TEXT NOT NULL,
"city" TEXT NOT NULL DEFAULT '北京',
"pensionOrg" DOUBLE PRECISION NOT NULL DEFAULT 16,
"pensionEmp" DOUBLE PRECISION NOT NULL DEFAULT 8,
"medicalOrg" DOUBLE PRECISION NOT NULL DEFAULT 9.8,
"medicalEmp" DOUBLE PRECISION NOT NULL DEFAULT 2,
"unemploymentOrg" DOUBLE PRECISION NOT NULL DEFAULT 0.5,
"unemploymentEmp" DOUBLE PRECISION NOT NULL DEFAULT 0.5,
"injuryOrg" DOUBLE PRECISION NOT NULL DEFAULT 0.2,
"maternityOrg" DOUBLE PRECISION NOT NULL DEFAULT 0.8,
"baseMin" DOUBLE PRECISION NOT NULL DEFAULT 6326,
"baseMax" DOUBLE PRECISION NOT NULL DEFAULT 33891,
"effectiveFrom" TEXT NOT NULL,
"effectiveTo" TEXT,
"isCurrent" BOOLEAN NOT NULL DEFAULT true,
"adjustmentDone" BOOLEAN NOT NULL DEFAULT false,
"createdBy" TEXT NOT NULL,
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updatedAt" TIMESTAMP(3) NOT NULL,
CONSTRAINT "SocialInsuranceConfig_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "HousingFundConfig" (
"id" TEXT NOT NULL,
"orgId" TEXT NOT NULL,
"city" TEXT NOT NULL DEFAULT '北京',
"housingOrg" DOUBLE PRECISION NOT NULL DEFAULT 12,
"housingEmp" DOUBLE PRECISION NOT NULL DEFAULT 12,
"baseMin" DOUBLE PRECISION NOT NULL DEFAULT 6326,
"baseMax" DOUBLE PRECISION NOT NULL DEFAULT 33891,
"effectiveFrom" TEXT NOT NULL,
"effectiveTo" TEXT,
"isCurrent" BOOLEAN NOT NULL DEFAULT true,
"adjustmentDone" BOOLEAN NOT NULL DEFAULT false,
"createdBy" TEXT NOT NULL,
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updatedAt" TIMESTAMP(3) NOT NULL,
CONSTRAINT "HousingFundConfig_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "NotificationSetting" (
"id" TEXT NOT NULL,
"orgId" TEXT NOT NULL,
"contractExpiry" BOOLEAN NOT NULL DEFAULT true,
"expiryDays" INTEGER NOT NULL DEFAULT 30,
"contractUnsigned" BOOLEAN NOT NULL DEFAULT true,
"overtimeAlert" BOOLEAN NOT NULL DEFAULT true,
"payslipReady" BOOLEAN NOT NULL DEFAULT true,
"payrollDay" INTEGER NOT NULL DEFAULT 10,
"socialInsDay" INTEGER NOT NULL DEFAULT 15,
"housingFundDay" INTEGER NOT NULL DEFAULT 15,
"taxDay" INTEGER NOT NULL DEFAULT 15,
"wechatWebhook" TEXT,
"emailNotify" BOOLEAN NOT NULL DEFAULT false,
"email" TEXT,
"updatedAt" TIMESTAMP(3) NOT NULL,
CONSTRAINT "NotificationSetting_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "OvertimeConfig" (
"id" TEXT NOT NULL,
"orgId" TEXT NOT NULL,
"weekdayRate" DOUBLE PRECISION NOT NULL DEFAULT 1.5,
"weekendRate" DOUBLE PRECISION NOT NULL DEFAULT 2.0,
"holidayRate" DOUBLE PRECISION NOT NULL DEFAULT 3.0,
"monthlyDays" DOUBLE PRECISION NOT NULL DEFAULT 21.75,
"dailyHours" DOUBLE PRECISION NOT NULL DEFAULT 8,
"updatedAt" TIMESTAMP(3) NOT NULL,
CONSTRAINT "OvertimeConfig_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "NotificationLog" (
"id" TEXT NOT NULL,
"orgId" TEXT NOT NULL,
"type" TEXT NOT NULL,
"title" TEXT NOT NULL,
"content" TEXT NOT NULL,
"channel" TEXT NOT NULL,
"status" TEXT NOT NULL DEFAULT 'SENT',
"employeeId" TEXT,
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
CONSTRAINT "NotificationLog_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "EmployeeAttachment" (
"id" TEXT NOT NULL,
"orgId" TEXT NOT NULL,
"employeeId" TEXT NOT NULL,
"fileName" TEXT NOT NULL,
"fileType" TEXT NOT NULL,
"fileUrl" TEXT NOT NULL,
"fileSize" INTEGER NOT NULL DEFAULT 0,
"uploadedBy" TEXT NOT NULL,
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
CONSTRAINT "EmployeeAttachment_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "DisciplinaryRecord" (
"id" TEXT NOT NULL,
"orgId" TEXT NOT NULL,
"employeeId" TEXT NOT NULL,
"violationDate" TIMESTAMP(3) NOT NULL,
"violationType" TEXT NOT NULL,
"description" TEXT NOT NULL,
"severity" TEXT NOT NULL DEFAULT 'WARNING',
"action" TEXT NOT NULL DEFAULT 'ORAL_WARNING',
"actionDetail" TEXT,
"employeeAck" BOOLEAN NOT NULL DEFAULT false,
"ackDate" TIMESTAMP(3),
"ackMethod" TEXT,
"witness" TEXT,
"attachmentUrl" TEXT,
"createdBy" TEXT NOT NULL,
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updatedAt" TIMESTAMP(3) NOT NULL,
CONSTRAINT "DisciplinaryRecord_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "AttendanceRecord" (
"id" TEXT NOT NULL,
"orgId" TEXT NOT NULL,
"employeeId" TEXT NOT NULL,
"date" TIMESTAMP(3) NOT NULL,
"checkInTime" TEXT,
"checkOutTime" TEXT,
"status" TEXT NOT NULL DEFAULT 'NORMAL',
"lateMinutes" INTEGER NOT NULL DEFAULT 0,
"earlyMinutes" INTEGER NOT NULL DEFAULT 0,
"workHours" DOUBLE PRECISION NOT NULL DEFAULT 0,
"overtimeHours" DOUBLE PRECISION NOT NULL DEFAULT 0,
"remark" TEXT,
"createdBy" TEXT NOT NULL,
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
CONSTRAINT "AttendanceRecord_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "TrainingRecord" (
"id" TEXT NOT NULL,
"orgId" TEXT NOT NULL,
"employeeId" TEXT NOT NULL,
"trainingDate" TIMESTAMP(3) NOT NULL,
"topic" TEXT NOT NULL,
"content" TEXT,
"trainer" TEXT,
"duration" DOUBLE PRECISION NOT NULL DEFAULT 0,
"ackStatus" TEXT NOT NULL DEFAULT 'PENDING',
"ackDate" TIMESTAMP(3),
"attachmentUrl" TEXT,
"remark" TEXT,
"createdBy" TEXT NOT NULL,
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
CONSTRAINT "TrainingRecord_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "PerformanceRecord" (
"id" TEXT NOT NULL,
"orgId" TEXT NOT NULL,
"employeeId" TEXT NOT NULL,
"period" TEXT NOT NULL,
"score" DOUBLE PRECISION NOT NULL DEFAULT 0,
"grade" TEXT NOT NULL DEFAULT 'B',
"result" TEXT NOT NULL DEFAULT 'QUALIFIED',
"summary" TEXT,
"improvementPlan" TEXT,
"employeeAck" BOOLEAN NOT NULL DEFAULT false,
"ackDate" TIMESTAMP(3),
"reviewer" TEXT,
"createdBy" TEXT NOT NULL,
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
CONSTRAINT "PerformanceRecord_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "Payslip" (
"id" TEXT NOT NULL,
"orgId" TEXT NOT NULL,
"employeeId" TEXT NOT NULL,
"month" TEXT NOT NULL,
"baseSalary" DOUBLE PRECISION NOT NULL DEFAULT 0,
"overtimePay" DOUBLE PRECISION NOT NULL DEFAULT 0,
"weekdayOvertimePay" DOUBLE PRECISION NOT NULL DEFAULT 0,
"weekendOvertimePay" DOUBLE PRECISION NOT NULL DEFAULT 0,
"holidayOvertimePay" DOUBLE PRECISION NOT NULL DEFAULT 0,
"allowance" DOUBLE PRECISION NOT NULL DEFAULT 0,
"deduction" DOUBLE PRECISION NOT NULL DEFAULT 0,
"bonus" DOUBLE PRECISION NOT NULL DEFAULT 0,
"totalPay" DOUBLE PRECISION NOT NULL DEFAULT 0,
"socialEmp" DOUBLE PRECISION NOT NULL DEFAULT 0,
"housingEmp" DOUBLE PRECISION NOT NULL DEFAULT 0,
"tax" DOUBLE PRECISION NOT NULL DEFAULT 0,
"netPay" DOUBLE PRECISION NOT NULL DEFAULT 0,
"ytdIncome" DOUBLE PRECISION NOT NULL DEFAULT 0,
"ytdTaxDeducted" DOUBLE PRECISION NOT NULL DEFAULT 0,
"ytdSocialEmp" DOUBLE PRECISION NOT NULL DEFAULT 0,
"ytdHousingEmp" DOUBLE PRECISION NOT NULL DEFAULT 0,
"status" "PayslipStatus" NOT NULL DEFAULT 'PENDING',
"confirmedAt" TIMESTAMP(3),
"confirmedIp" TEXT,
"publishedAt" TIMESTAMP(3),
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updatedAt" TIMESTAMP(3) NOT NULL,
CONSTRAINT "Payslip_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "PayrollBatch" (
"id" TEXT NOT NULL,
"orgId" TEXT NOT NULL,
"month" TEXT NOT NULL,
"batchNo" INTEGER NOT NULL,
"name" TEXT NOT NULL,
"type" "PayrollBatchType" NOT NULL DEFAULT 'REGULAR',
"status" "PayrollBatchStatus" NOT NULL DEFAULT 'DRAFT',
"employeeCount" INTEGER NOT NULL DEFAULT 0,
"totalPay" DOUBLE PRECISION NOT NULL DEFAULT 0,
"totalNetPay" DOUBLE PRECISION NOT NULL DEFAULT 0,
"totalSocialOrg" DOUBLE PRECISION NOT NULL DEFAULT 0,
"totalSocialEmp" DOUBLE PRECISION NOT NULL DEFAULT 0,
"totalHousingOrg" DOUBLE PRECISION NOT NULL DEFAULT 0,
"totalHousingEmp" DOUBLE PRECISION NOT NULL DEFAULT 0,
"totalTax" DOUBLE PRECISION NOT NULL DEFAULT 0,
"remark" TEXT,
"createdBy" TEXT NOT NULL,
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"archivedAt" TIMESTAMP(3),
"updatedAt" TIMESTAMP(3) NOT NULL,
CONSTRAINT "PayrollBatch_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "BatchEntry" (
"id" TEXT NOT NULL,
"batchId" TEXT NOT NULL,
"orgId" TEXT NOT NULL,
"employeeId" TEXT NOT NULL,
"baseSalary" DOUBLE PRECISION NOT NULL DEFAULT 0,
"overtimePay" DOUBLE PRECISION NOT NULL DEFAULT 0,
"allowance" DOUBLE PRECISION NOT NULL DEFAULT 0,
"deduction" DOUBLE PRECISION NOT NULL DEFAULT 0,
"bonus" DOUBLE PRECISION NOT NULL DEFAULT 0,
"socialEmp" DOUBLE PRECISION NOT NULL DEFAULT 0,
"socialOrg" DOUBLE PRECISION NOT NULL DEFAULT 0,
"housingEmp" DOUBLE PRECISION NOT NULL DEFAULT 0,
"housingOrg" DOUBLE PRECISION NOT NULL DEFAULT 0,
"tax" DOUBLE PRECISION NOT NULL DEFAULT 0,
"totalPay" DOUBLE PRECISION NOT NULL DEFAULT 0,
"netPay" DOUBLE PRECISION NOT NULL DEFAULT 0,
"riskWarnings" JSONB,
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updatedAt" TIMESTAMP(3) NOT NULL,
CONSTRAINT "BatchEntry_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "PayslipItem" (
"id" TEXT NOT NULL,
"orgId" TEXT NOT NULL,
"name" TEXT NOT NULL,
"code" TEXT NOT NULL,
"type" "PayslipItemType" NOT NULL DEFAULT 'INPUT',
"formula" TEXT,
"order" INTEGER NOT NULL DEFAULT 0,
"isDefault" BOOLEAN NOT NULL DEFAULT true,
"isEditable" BOOLEAN NOT NULL DEFAULT true,
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updatedAt" TIMESTAMP(3) NOT NULL,
CONSTRAINT "PayslipItem_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "SalaryChangeRecord" (
"id" TEXT NOT NULL,
"orgId" TEXT NOT NULL,
"employeeId" TEXT NOT NULL,
"oldSalary" DOUBLE PRECISION NOT NULL,
"newSalary" DOUBLE PRECISION NOT NULL,
"effectiveDate" TIMESTAMP(3) NOT NULL,
"effectiveMonth" TEXT NOT NULL,
"endMonth" TEXT,
"changeType" TEXT NOT NULL DEFAULT 'SALARY_CHANGE',
"reason" TEXT,
"createdBy" TEXT NOT NULL,
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
CONSTRAINT "SalaryChangeRecord_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "EmployeeSocialInsRecord" (
"id" TEXT NOT NULL,
"orgId" TEXT NOT NULL,
"employeeId" TEXT NOT NULL,
"city" TEXT NOT NULL DEFAULT '北京',
"startMonth" TEXT NOT NULL,
"endMonth" TEXT,
"base" DOUBLE PRECISION NOT NULL,
"changeType" TEXT NOT NULL,
"changeRefId" TEXT,
"remark" TEXT,
"createdBy" TEXT NOT NULL,
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
CONSTRAINT "EmployeeSocialInsRecord_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "EmployeeHousingFundRecord" (
"id" TEXT NOT NULL,
"orgId" TEXT NOT NULL,
"employeeId" TEXT NOT NULL,
"city" TEXT NOT NULL DEFAULT '北京',
"startMonth" TEXT NOT NULL,
"endMonth" TEXT,
"base" DOUBLE PRECISION NOT NULL,
"changeType" TEXT NOT NULL,
"changeRefId" TEXT,
"remark" TEXT,
"createdBy" TEXT NOT NULL,
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
CONSTRAINT "EmployeeHousingFundRecord_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "EmployeeDepartmentRecord" (
"id" TEXT NOT NULL,
"orgId" TEXT NOT NULL,
"employeeId" TEXT NOT NULL,
"oldDepartment" TEXT NOT NULL,
"newDepartment" TEXT NOT NULL,
"effectiveMonth" TEXT NOT NULL,
"endMonth" TEXT,
"reason" TEXT,
"changeType" TEXT NOT NULL,
"createdBy" TEXT NOT NULL,
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
CONSTRAINT "EmployeeDepartmentRecord_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "OnboardingLink" (
"id" TEXT NOT NULL,
"orgId" TEXT NOT NULL,
"token" TEXT NOT NULL,
"employeeName" TEXT,
"phone" TEXT,
"status" "OnboardingStatus" NOT NULL DEFAULT 'PENDING',
"formData" JSONB,
"expiresAt" TIMESTAMP(3) NOT NULL,
"usedAt" TIMESTAMP(3),
"createdBy" TEXT NOT NULL,
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updatedAt" TIMESTAMP(3) NOT NULL,
CONSTRAINT "OnboardingLink_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "ContractConfirmLink" (
"id" TEXT NOT NULL,
"orgId" TEXT NOT NULL,
"contractId" TEXT NOT NULL,
"token" TEXT NOT NULL,
"status" "ContractConfirmStatus" NOT NULL DEFAULT 'UNCONFIRMED',
"confirmedAt" TIMESTAMP(3),
"confirmedIp" TEXT,
"expiresAt" TIMESTAMP(3) NOT NULL,
"createdBy" TEXT NOT NULL,
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updatedAt" TIMESTAMP(3) NOT NULL,
CONSTRAINT "ContractConfirmLink_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "AIConversation" (
"id" TEXT NOT NULL,
"orgId" TEXT NOT NULL,
"userId" TEXT NOT NULL,
"title" TEXT NOT NULL DEFAULT '新对话',
"messages" JSONB NOT NULL,
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updatedAt" TIMESTAMP(3) NOT NULL,
CONSTRAINT "AIConversation_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "AIReviewRecord" (
"id" TEXT NOT NULL,
"orgId" TEXT NOT NULL,
"employeeId" TEXT,
"type" TEXT NOT NULL,
"input" TEXT NOT NULL,
"result" TEXT NOT NULL,
"createdBy" TEXT NOT NULL,
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
CONSTRAINT "AIReviewRecord_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "rag_knowledge" (
"id" TEXT NOT NULL,
"title" TEXT NOT NULL,
"content" TEXT NOT NULL,
"source" TEXT NOT NULL,
"category" TEXT NOT NULL,
"embedding" vector(1536),
"created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
CONSTRAINT "rag_knowledge_pkey" PRIMARY KEY ("id")
);
-- CreateIndex
CREATE UNIQUE INDEX "User_phone_key" ON "User"("phone");
-- CreateIndex
CREATE UNIQUE INDEX "Employee_orgId_idCardHash_key" ON "Employee"("orgId", "idCardHash");
-- CreateIndex
CREATE UNIQUE INDEX "OvertimeRecord_employeeId_month_key" ON "OvertimeRecord"("employeeId", "month");
-- CreateIndex
CREATE INDEX "RiskItem_orgId_status_idx" ON "RiskItem"("orgId", "status");
-- CreateIndex
CREATE INDEX "RiskItem_orgId_type_idx" ON "RiskItem"("orgId", "type");
-- CreateIndex
CREATE INDEX "AuditLog_orgId_createdAt_idx" ON "AuditLog"("orgId", "createdAt");
-- CreateIndex
CREATE INDEX "SocialInsuranceConfig_orgId_isCurrent_idx" ON "SocialInsuranceConfig"("orgId", "isCurrent");
-- CreateIndex
CREATE UNIQUE INDEX "SocialInsuranceConfig_orgId_city_effectiveFrom_key" ON "SocialInsuranceConfig"("orgId", "city", "effectiveFrom");
-- CreateIndex
CREATE INDEX "HousingFundConfig_orgId_isCurrent_idx" ON "HousingFundConfig"("orgId", "isCurrent");
-- CreateIndex
CREATE UNIQUE INDEX "HousingFundConfig_orgId_city_effectiveFrom_key" ON "HousingFundConfig"("orgId", "city", "effectiveFrom");
-- CreateIndex
CREATE UNIQUE INDEX "NotificationSetting_orgId_key" ON "NotificationSetting"("orgId");
-- CreateIndex
CREATE UNIQUE INDEX "OvertimeConfig_orgId_key" ON "OvertimeConfig"("orgId");
-- CreateIndex
CREATE INDEX "NotificationLog_orgId_createdAt_idx" ON "NotificationLog"("orgId", "createdAt");
-- CreateIndex
CREATE INDEX "EmployeeAttachment_orgId_employeeId_idx" ON "EmployeeAttachment"("orgId", "employeeId");
-- CreateIndex
CREATE INDEX "DisciplinaryRecord_orgId_employeeId_idx" ON "DisciplinaryRecord"("orgId", "employeeId");
-- CreateIndex
CREATE INDEX "AttendanceRecord_orgId_employeeId_idx" ON "AttendanceRecord"("orgId", "employeeId");
-- CreateIndex
CREATE UNIQUE INDEX "AttendanceRecord_employeeId_date_key" ON "AttendanceRecord"("employeeId", "date");
-- CreateIndex
CREATE INDEX "TrainingRecord_orgId_employeeId_idx" ON "TrainingRecord"("orgId", "employeeId");
-- CreateIndex
CREATE INDEX "PerformanceRecord_orgId_employeeId_idx" ON "PerformanceRecord"("orgId", "employeeId");
-- CreateIndex
CREATE UNIQUE INDEX "PerformanceRecord_employeeId_period_key" ON "PerformanceRecord"("employeeId", "period");
-- CreateIndex
CREATE INDEX "Payslip_orgId_month_idx" ON "Payslip"("orgId", "month");
-- CreateIndex
CREATE INDEX "Payslip_orgId_status_idx" ON "Payslip"("orgId", "status");
-- CreateIndex
CREATE UNIQUE INDEX "Payslip_employeeId_month_key" ON "Payslip"("employeeId", "month");
-- CreateIndex
CREATE INDEX "PayrollBatch_orgId_month_idx" ON "PayrollBatch"("orgId", "month");
-- CreateIndex
CREATE INDEX "PayrollBatch_orgId_status_idx" ON "PayrollBatch"("orgId", "status");
-- CreateIndex
CREATE UNIQUE INDEX "PayrollBatch_orgId_month_batchNo_key" ON "PayrollBatch"("orgId", "month", "batchNo");
-- CreateIndex
CREATE INDEX "BatchEntry_orgId_employeeId_idx" ON "BatchEntry"("orgId", "employeeId");
-- CreateIndex
CREATE UNIQUE INDEX "BatchEntry_batchId_employeeId_key" ON "BatchEntry"("batchId", "employeeId");
-- CreateIndex
CREATE UNIQUE INDEX "PayslipItem_orgId_code_key" ON "PayslipItem"("orgId", "code");
-- CreateIndex
CREATE INDEX "SalaryChangeRecord_orgId_employeeId_idx" ON "SalaryChangeRecord"("orgId", "employeeId");
-- CreateIndex
CREATE INDEX "SalaryChangeRecord_employeeId_effectiveMonth_endMonth_idx" ON "SalaryChangeRecord"("employeeId", "effectiveMonth", "endMonth");
-- CreateIndex
CREATE INDEX "EmployeeSocialInsRecord_orgId_employeeId_idx" ON "EmployeeSocialInsRecord"("orgId", "employeeId");
-- CreateIndex
CREATE INDEX "EmployeeSocialInsRecord_employeeId_startMonth_endMonth_idx" ON "EmployeeSocialInsRecord"("employeeId", "startMonth", "endMonth");
-- CreateIndex
CREATE INDEX "EmployeeSocialInsRecord_orgId_city_idx" ON "EmployeeSocialInsRecord"("orgId", "city");
-- CreateIndex
CREATE INDEX "EmployeeHousingFundRecord_orgId_employeeId_idx" ON "EmployeeHousingFundRecord"("orgId", "employeeId");
-- CreateIndex
CREATE INDEX "EmployeeHousingFundRecord_employeeId_startMonth_endMonth_idx" ON "EmployeeHousingFundRecord"("employeeId", "startMonth", "endMonth");
-- CreateIndex
CREATE INDEX "EmployeeDepartmentRecord_orgId_employeeId_idx" ON "EmployeeDepartmentRecord"("orgId", "employeeId");
-- CreateIndex
CREATE INDEX "EmployeeDepartmentRecord_employeeId_effectiveMonth_endMonth_idx" ON "EmployeeDepartmentRecord"("employeeId", "effectiveMonth", "endMonth");
-- CreateIndex
CREATE UNIQUE INDEX "OnboardingLink_token_key" ON "OnboardingLink"("token");
-- CreateIndex
CREATE INDEX "OnboardingLink_orgId_status_idx" ON "OnboardingLink"("orgId", "status");
-- CreateIndex
CREATE UNIQUE INDEX "ContractConfirmLink_token_key" ON "ContractConfirmLink"("token");
-- CreateIndex
CREATE INDEX "ContractConfirmLink_orgId_status_idx" ON "ContractConfirmLink"("orgId", "status");
-- CreateIndex
CREATE INDEX "AIConversation_orgId_userId_idx" ON "AIConversation"("orgId", "userId");
-- CreateIndex
CREATE INDEX "AIReviewRecord_orgId_employeeId_idx" ON "AIReviewRecord"("orgId", "employeeId");
-- CreateIndex
CREATE INDEX "rag_knowledge_category_idx" ON "rag_knowledge"("category");
-- AddForeignKey
ALTER TABLE "User" ADD CONSTRAINT "User_orgId_fkey" FOREIGN KEY ("orgId") REFERENCES "Organization"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "Employee" ADD CONSTRAINT "Employee_orgId_fkey" FOREIGN KEY ("orgId") REFERENCES "Organization"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "LaborContract" ADD CONSTRAINT "LaborContract_orgId_fkey" FOREIGN KEY ("orgId") REFERENCES "Organization"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "LaborContract" ADD CONSTRAINT "LaborContract_employeeId_fkey" FOREIGN KEY ("employeeId") REFERENCES "Employee"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "OvertimeRecord" ADD CONSTRAINT "OvertimeRecord_orgId_fkey" FOREIGN KEY ("orgId") REFERENCES "Organization"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "OvertimeRecord" ADD CONSTRAINT "OvertimeRecord_employeeId_fkey" FOREIGN KEY ("employeeId") REFERENCES "Employee"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "TerminationRecord" ADD CONSTRAINT "TerminationRecord_orgId_fkey" FOREIGN KEY ("orgId") REFERENCES "Organization"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "TerminationRecord" ADD CONSTRAINT "TerminationRecord_employeeId_fkey" FOREIGN KEY ("employeeId") REFERENCES "Employee"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "RiskItem" ADD CONSTRAINT "RiskItem_orgId_fkey" FOREIGN KEY ("orgId") REFERENCES "Organization"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "RiskItem" ADD CONSTRAINT "RiskItem_employeeId_fkey" FOREIGN KEY ("employeeId") REFERENCES "Employee"("id") ON DELETE SET NULL ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "AuditLog" ADD CONSTRAINT "AuditLog_orgId_fkey" FOREIGN KEY ("orgId") REFERENCES "Organization"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "SocialInsuranceConfig" ADD CONSTRAINT "SocialInsuranceConfig_orgId_fkey" FOREIGN KEY ("orgId") REFERENCES "Organization"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "HousingFundConfig" ADD CONSTRAINT "HousingFundConfig_orgId_fkey" FOREIGN KEY ("orgId") REFERENCES "Organization"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "NotificationSetting" ADD CONSTRAINT "NotificationSetting_orgId_fkey" FOREIGN KEY ("orgId") REFERENCES "Organization"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "OvertimeConfig" ADD CONSTRAINT "OvertimeConfig_orgId_fkey" FOREIGN KEY ("orgId") REFERENCES "Organization"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "NotificationLog" ADD CONSTRAINT "NotificationLog_orgId_fkey" FOREIGN KEY ("orgId") REFERENCES "Organization"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "EmployeeAttachment" ADD CONSTRAINT "EmployeeAttachment_orgId_fkey" FOREIGN KEY ("orgId") REFERENCES "Organization"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "EmployeeAttachment" ADD CONSTRAINT "EmployeeAttachment_employeeId_fkey" FOREIGN KEY ("employeeId") REFERENCES "Employee"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "DisciplinaryRecord" ADD CONSTRAINT "DisciplinaryRecord_orgId_fkey" FOREIGN KEY ("orgId") REFERENCES "Organization"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "DisciplinaryRecord" ADD CONSTRAINT "DisciplinaryRecord_employeeId_fkey" FOREIGN KEY ("employeeId") REFERENCES "Employee"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "AttendanceRecord" ADD CONSTRAINT "AttendanceRecord_orgId_fkey" FOREIGN KEY ("orgId") REFERENCES "Organization"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "AttendanceRecord" ADD CONSTRAINT "AttendanceRecord_employeeId_fkey" FOREIGN KEY ("employeeId") REFERENCES "Employee"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "TrainingRecord" ADD CONSTRAINT "TrainingRecord_orgId_fkey" FOREIGN KEY ("orgId") REFERENCES "Organization"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "TrainingRecord" ADD CONSTRAINT "TrainingRecord_employeeId_fkey" FOREIGN KEY ("employeeId") REFERENCES "Employee"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "PerformanceRecord" ADD CONSTRAINT "PerformanceRecord_orgId_fkey" FOREIGN KEY ("orgId") REFERENCES "Organization"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "PerformanceRecord" ADD CONSTRAINT "PerformanceRecord_employeeId_fkey" FOREIGN KEY ("employeeId") REFERENCES "Employee"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "Payslip" ADD CONSTRAINT "Payslip_orgId_fkey" FOREIGN KEY ("orgId") REFERENCES "Organization"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "Payslip" ADD CONSTRAINT "Payslip_employeeId_fkey" FOREIGN KEY ("employeeId") REFERENCES "Employee"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "PayrollBatch" ADD CONSTRAINT "PayrollBatch_orgId_fkey" FOREIGN KEY ("orgId") REFERENCES "Organization"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "BatchEntry" ADD CONSTRAINT "BatchEntry_batchId_fkey" FOREIGN KEY ("batchId") REFERENCES "PayrollBatch"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "BatchEntry" ADD CONSTRAINT "BatchEntry_employeeId_fkey" FOREIGN KEY ("employeeId") REFERENCES "Employee"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "PayslipItem" ADD CONSTRAINT "PayslipItem_orgId_fkey" FOREIGN KEY ("orgId") REFERENCES "Organization"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "SalaryChangeRecord" ADD CONSTRAINT "SalaryChangeRecord_orgId_fkey" FOREIGN KEY ("orgId") REFERENCES "Organization"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "SalaryChangeRecord" ADD CONSTRAINT "SalaryChangeRecord_employeeId_fkey" FOREIGN KEY ("employeeId") REFERENCES "Employee"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "EmployeeSocialInsRecord" ADD CONSTRAINT "EmployeeSocialInsRecord_orgId_fkey" FOREIGN KEY ("orgId") REFERENCES "Organization"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "EmployeeSocialInsRecord" ADD CONSTRAINT "EmployeeSocialInsRecord_employeeId_fkey" FOREIGN KEY ("employeeId") REFERENCES "Employee"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "EmployeeHousingFundRecord" ADD CONSTRAINT "EmployeeHousingFundRecord_orgId_fkey" FOREIGN KEY ("orgId") REFERENCES "Organization"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "EmployeeHousingFundRecord" ADD CONSTRAINT "EmployeeHousingFundRecord_employeeId_fkey" FOREIGN KEY ("employeeId") REFERENCES "Employee"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "EmployeeDepartmentRecord" ADD CONSTRAINT "EmployeeDepartmentRecord_orgId_fkey" FOREIGN KEY ("orgId") REFERENCES "Organization"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "EmployeeDepartmentRecord" ADD CONSTRAINT "EmployeeDepartmentRecord_employeeId_fkey" FOREIGN KEY ("employeeId") REFERENCES "Employee"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "OnboardingLink" ADD CONSTRAINT "OnboardingLink_orgId_fkey" FOREIGN KEY ("orgId") REFERENCES "Organization"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "ContractConfirmLink" ADD CONSTRAINT "ContractConfirmLink_orgId_fkey" FOREIGN KEY ("orgId") REFERENCES "Organization"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "ContractConfirmLink" ADD CONSTRAINT "ContractConfirmLink_contractId_fkey" FOREIGN KEY ("contractId") REFERENCES "LaborContract"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "AIConversation" ADD CONSTRAINT "AIConversation_orgId_fkey" FOREIGN KEY ("orgId") REFERENCES "Organization"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "AIReviewRecord" ADD CONSTRAINT "AIReviewRecord_orgId_fkey" FOREIGN KEY ("orgId") REFERENCES "Organization"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "AIReviewRecord" ADD CONSTRAINT "AIReviewRecord_employeeId_fkey" FOREIGN KEY ("employeeId") REFERENCES "Employee"("id") ON DELETE SET NULL ON UPDATE CASCADE;