Keep booked income and expense separate from cash balances, with installments, recurring items, and reports. Co-authored-by: Cursor <cursoragent@cursor.com>
80 lines
4.0 KiB
SQL
80 lines
4.0 KiB
SQL
ALTER TABLE "FinancialMovement" ADD COLUMN "payrollId" TEXT;
|
|
CREATE INDEX "FinancialMovement_payrollId_idx" ON "FinancialMovement"("payrollId");
|
|
|
|
CREATE TABLE "FinancialPayroll" (
|
|
"id" TEXT NOT NULL,
|
|
"organizationId" TEXT NOT NULL,
|
|
"userId" TEXT NOT NULL,
|
|
"period" TEXT NOT NULL,
|
|
"baseAmount" DECIMAL(18,2) NOT NULL,
|
|
"benefits" DECIMAL(18,2) NOT NULL DEFAULT 0,
|
|
"bonus" DECIMAL(18,2) NOT NULL DEFAULT 0,
|
|
"deductions" DECIMAL(18,2) NOT NULL DEFAULT 0,
|
|
"payable" DECIMAL(18,2) NOT NULL,
|
|
"dueDate" TIMESTAMP(3) NOT NULL,
|
|
"notes" TEXT,
|
|
"status" TEXT NOT NULL DEFAULT 'open',
|
|
"createdById" TEXT,
|
|
"voidedAt" TIMESTAMP(3),
|
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" TIMESTAMP(3) NOT NULL,
|
|
CONSTRAINT "FinancialPayroll_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
CREATE TABLE "FinancialRecurringItem" (
|
|
"id" TEXT NOT NULL,
|
|
"organizationId" TEXT NOT NULL,
|
|
"title" TEXT NOT NULL,
|
|
"kind" TEXT NOT NULL,
|
|
"amount" DECIMAL(18,2) NOT NULL,
|
|
"interval" TEXT NOT NULL,
|
|
"startDate" TIMESTAMP(3) NOT NULL,
|
|
"endDate" TIMESTAMP(3),
|
|
"nextDue" TIMESTAMP(3) NOT NULL,
|
|
"accountId" TEXT,
|
|
"categoryId" TEXT,
|
|
"isActive" BOOLEAN NOT NULL DEFAULT true,
|
|
"createdById" TEXT,
|
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" TIMESTAMP(3) NOT NULL,
|
|
CONSTRAINT "FinancialRecurringItem_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
CREATE TABLE "FinancialRecurringOccurrence" (
|
|
"id" TEXT NOT NULL,
|
|
"itemId" TEXT NOT NULL,
|
|
"periodKey" TEXT NOT NULL,
|
|
"dueDate" TIMESTAMP(3) NOT NULL,
|
|
"documentId" TEXT,
|
|
"status" TEXT NOT NULL DEFAULT 'pending',
|
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
CONSTRAINT "FinancialRecurringOccurrence_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
CREATE TABLE "FinancialReconciliation" (
|
|
"id" TEXT NOT NULL,
|
|
"organizationId" TEXT NOT NULL,
|
|
"accountId" TEXT NOT NULL,
|
|
"reconciledAt" TIMESTAMP(3) NOT NULL,
|
|
"statedBalance" DECIMAL(18,2) NOT NULL,
|
|
"systemBalance" DECIMAL(18,2) NOT NULL,
|
|
"difference" DECIMAL(18,2) NOT NULL,
|
|
"notes" TEXT,
|
|
"createdById" TEXT,
|
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
CONSTRAINT "FinancialReconciliation_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
CREATE UNIQUE INDEX "FinancialPayroll_organizationId_userId_period_key" ON "FinancialPayroll"("organizationId", "userId", "period");
|
|
CREATE INDEX "FinancialPayroll_organizationId_status_idx" ON "FinancialPayroll"("organizationId", "status");
|
|
CREATE INDEX "FinancialRecurringItem_organizationId_isActive_nextDue_idx" ON "FinancialRecurringItem"("organizationId", "isActive", "nextDue");
|
|
CREATE UNIQUE INDEX "FinancialRecurringOccurrence_itemId_periodKey_key" ON "FinancialRecurringOccurrence"("itemId", "periodKey");
|
|
CREATE INDEX "FinancialReconciliation_organizationId_accountId_reconciledAt_idx" ON "FinancialReconciliation"("organizationId", "accountId", "reconciledAt");
|
|
|
|
ALTER TABLE "FinancialPayroll" ADD CONSTRAINT "FinancialPayroll_organizationId_fkey" FOREIGN KEY ("organizationId") REFERENCES "Organization"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
ALTER TABLE "FinancialMovement" ADD CONSTRAINT "FinancialMovement_payrollId_fkey" FOREIGN KEY ("payrollId") REFERENCES "FinancialPayroll"("id") ON DELETE SET NULL ON UPDATE CASCADE;
|
|
ALTER TABLE "FinancialRecurringItem" ADD CONSTRAINT "FinancialRecurringItem_organizationId_fkey" FOREIGN KEY ("organizationId") REFERENCES "Organization"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
ALTER TABLE "FinancialRecurringOccurrence" ADD CONSTRAINT "FinancialRecurringOccurrence_itemId_fkey" FOREIGN KEY ("itemId") REFERENCES "FinancialRecurringItem"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
ALTER TABLE "FinancialReconciliation" ADD CONSTRAINT "FinancialReconciliation_organizationId_fkey" FOREIGN KEY ("organizationId") REFERENCES "Organization"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
ALTER TABLE "FinancialReconciliation" ADD CONSTRAINT "FinancialReconciliation_accountId_fkey" FOREIGN KEY ("accountId") REFERENCES "FinancialAccount"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|