0df8aa77d9
- 员工花名册管理(加密存储、导入导出) - 薪酬管理(发薪批次、薪酬模版、加班费计算、工资条) - 社保公积金(多城市配置、版本管理、基数调整) - 解聘管理(6步流程、证据链、工作交接) - AI 助手(合同审查、风险预测、RAG 知识库) - Dashboard 仪表盘 - 设置与通知
932 lines
34 KiB
SQL
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;
|