347 lines
14 KiB
SQL
347 lines
14 KiB
SQL
-- =============================================================================
|
|
-- Phase 9 — Kassenverwaltung
|
|
--
|
|
-- HINWEIS zu den entfernten DropIndex-Bloecken: Prisma schlaegt bei jeder
|
|
-- Migration erneut vor, die von Hand angelegten GiST- und Trigram-Indizes aus
|
|
-- Phase 1 abzuraeumen. Es kennt sie nicht, weil sie nicht aus dem Schema
|
|
-- stammen. Neunte Migration in Folge, in der sie wieder herausgenommen werden.
|
|
-- =============================================================================
|
|
|
|
-- CreateEnum
|
|
CREATE TYPE "KontoArt" AS ENUM ('BAR', 'BANK', 'RUECKLAGE');
|
|
|
|
-- CreateEnum
|
|
CREATE TYPE "BuchungsArt" AS ENUM ('EINNAHME', 'AUSGABE');
|
|
|
|
-- CreateEnum
|
|
CREATE TYPE "BeitragStand" AS ENUM ('OFFEN', 'BEZAHLT', 'ERLASSEN', 'GEMAHNT');
|
|
|
|
-- CreateEnum
|
|
CREATE TYPE "RechnungStand" AS ENUM ('ENTWURF', 'VERSENDET', 'BEZAHLT', 'GEMAHNT', 'STORNIERT');
|
|
|
|
-- CreateEnum
|
|
CREATE TYPE "RechnungsAnlass" AS ENUM ('FEHLALARM', 'OELEINSATZ', 'VERANSTALTUNG', 'VERMIETUNG', 'SONSTIGES');
|
|
|
|
-- AlterTable
|
|
ALTER TABLE "belegentwurf" ADD COLUMN "buchungId" UUID;
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "kassenkonto" (
|
|
"id" UUID NOT NULL,
|
|
"organisationId" UUID NOT NULL,
|
|
"bezeichnung" VARCHAR(120) NOT NULL,
|
|
"art" "KontoArt" NOT NULL DEFAULT 'BAR',
|
|
"iban" VARCHAR(34),
|
|
"bic" VARCHAR(11),
|
|
"anfangsbestand" DECIMAL(12,2) NOT NULL DEFAULT 0,
|
|
"bemerkung" VARCHAR(500),
|
|
"aktiv" BOOLEAN NOT NULL DEFAULT true,
|
|
"erstelltAm" TIMESTAMPTZ(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"geaendertAm" TIMESTAMPTZ(3) NOT NULL,
|
|
"geloeschtAm" TIMESTAMPTZ(3),
|
|
|
|
CONSTRAINT "kassenkonto_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "buchungskategorie" (
|
|
"id" UUID NOT NULL,
|
|
"organisationId" UUID NOT NULL,
|
|
"name" VARCHAR(120) NOT NULL,
|
|
"art" "BuchungsArt" NOT NULL,
|
|
"oberkategorieId" UUID,
|
|
"kontonummer" VARCHAR(20),
|
|
"bemerkung" VARCHAR(500),
|
|
"aktiv" BOOLEAN NOT NULL DEFAULT true,
|
|
"erstelltAm" TIMESTAMPTZ(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"geaendertAm" TIMESTAMPTZ(3) NOT NULL,
|
|
"geloeschtAm" TIMESTAMPTZ(3),
|
|
|
|
CONSTRAINT "buchungskategorie_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "buchung" (
|
|
"id" UUID NOT NULL,
|
|
"organisationId" UUID NOT NULL,
|
|
"kontoId" UUID NOT NULL,
|
|
"kategorieId" UUID NOT NULL,
|
|
"datum" DATE NOT NULL,
|
|
"art" "BuchungsArt" NOT NULL,
|
|
"betrag" DECIMAL(12,2) NOT NULL,
|
|
"verwendungszweck" VARCHAR(300) NOT NULL,
|
|
"belegnummer" VARCHAR(60),
|
|
"personId" UUID,
|
|
"lieferant" VARCHAR(200),
|
|
"gegenkontoId" UUID,
|
|
"belegDateiId" UUID,
|
|
"festgeschriebenAm" TIMESTAMPTZ(3),
|
|
"storniertVonId" UUID,
|
|
"erfasstVonId" UUID,
|
|
"erstelltAm" TIMESTAMPTZ(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"geaendertAm" TIMESTAMPTZ(3) NOT NULL,
|
|
|
|
CONSTRAINT "buchung_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "beitragssatz" (
|
|
"id" UUID NOT NULL,
|
|
"organisationId" UUID NOT NULL,
|
|
"bezeichnung" VARCHAR(120) NOT NULL,
|
|
"betrag" DECIMAL(12,2) NOT NULL,
|
|
"abteilung" VARCHAR(60),
|
|
"abJahr" INTEGER NOT NULL,
|
|
"aktiv" BOOLEAN NOT NULL DEFAULT true,
|
|
"erstelltAm" TIMESTAMPTZ(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"geaendertAm" TIMESTAMPTZ(3) NOT NULL,
|
|
|
|
CONSTRAINT "beitragssatz_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "beitrag" (
|
|
"id" UUID NOT NULL,
|
|
"organisationId" UUID NOT NULL,
|
|
"personId" UUID NOT NULL,
|
|
"jahr" INTEGER NOT NULL,
|
|
"satzId" UUID,
|
|
"betrag" DECIMAL(12,2) NOT NULL,
|
|
"stand" "BeitragStand" NOT NULL DEFAULT 'OFFEN',
|
|
"buchungId" UUID,
|
|
"bezahltAm" DATE,
|
|
"mahnstufe" INTEGER NOT NULL DEFAULT 0,
|
|
"gemahntAm" DATE,
|
|
"erlassGrund" VARCHAR(300),
|
|
"bemerkung" VARCHAR(500),
|
|
"erstelltAm" TIMESTAMPTZ(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"geaendertAm" TIMESTAMPTZ(3) NOT NULL,
|
|
|
|
CONSTRAINT "beitrag_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "rechnung" (
|
|
"id" UUID NOT NULL,
|
|
"organisationId" UUID NOT NULL,
|
|
"nummer" VARCHAR(20) NOT NULL,
|
|
"anlass" "RechnungsAnlass" NOT NULL DEFAULT 'SONSTIGES',
|
|
"stand" "RechnungStand" NOT NULL DEFAULT 'ENTWURF',
|
|
"empfaenger" VARCHAR(200) NOT NULL,
|
|
"empfaengerZusatz" VARCHAR(200),
|
|
"strasse" VARCHAR(200),
|
|
"plz" VARCHAR(10),
|
|
"ort" VARCHAR(120),
|
|
"einsatzId" UUID,
|
|
"datum" DATE NOT NULL,
|
|
"faelligAm" DATE NOT NULL,
|
|
"betrag" DECIMAL(12,2) NOT NULL,
|
|
"bemerkung" VARCHAR(1000),
|
|
"buchungId" UUID,
|
|
"bezahltAm" DATE,
|
|
"gemahntAm" DATE,
|
|
"mahnstufe" INTEGER NOT NULL DEFAULT 0,
|
|
"pdfDateiId" UUID,
|
|
"erstelltVonId" UUID,
|
|
"erstelltAm" TIMESTAMPTZ(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"geaendertAm" TIMESTAMPTZ(3) NOT NULL,
|
|
|
|
CONSTRAINT "rechnung_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "rechnungsposition" (
|
|
"id" UUID NOT NULL,
|
|
"organisationId" UUID NOT NULL,
|
|
"rechnungId" UUID NOT NULL,
|
|
"reihenfolge" INTEGER NOT NULL,
|
|
"bezeichnung" VARCHAR(300) NOT NULL,
|
|
"menge" DECIMAL(12,3) NOT NULL DEFAULT 1,
|
|
"einheit" VARCHAR(20),
|
|
"einzelpreis" DECIMAL(12,2) NOT NULL,
|
|
"gesamtpreis" DECIMAL(12,2) NOT NULL,
|
|
"erstelltAm" TIMESTAMPTZ(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
|
|
CONSTRAINT "rechnungsposition_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "kassenabschluss" (
|
|
"id" UUID NOT NULL,
|
|
"organisationId" UUID NOT NULL,
|
|
"vonAm" DATE NOT NULL,
|
|
"bisAm" DATE NOT NULL,
|
|
"bestandLautBuch" DECIMAL(12,2) NOT NULL,
|
|
"gezaehlterBestand" DECIMAL(12,2) NOT NULL,
|
|
"differenz" DECIMAL(12,2) NOT NULL,
|
|
"erlaeuterung" VARCHAR(2000),
|
|
"prueferId" UUID,
|
|
"zweiterPrueferId" UUID,
|
|
"geprueftAm" DATE,
|
|
"berichtDateiId" UUID,
|
|
"festgeschriebenAm" TIMESTAMPTZ(3),
|
|
"erstelltAm" TIMESTAMPTZ(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"geaendertAm" TIMESTAMPTZ(3) NOT NULL,
|
|
|
|
CONSTRAINT "kassenabschluss_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "abschlussposten" (
|
|
"id" UUID NOT NULL,
|
|
"organisationId" UUID NOT NULL,
|
|
"abschlussId" UUID NOT NULL,
|
|
"kontoId" UUID NOT NULL,
|
|
"bestandLautBuch" DECIMAL(12,2) NOT NULL,
|
|
"gezaehlterBestand" DECIMAL(12,2) NOT NULL,
|
|
"differenz" DECIMAL(12,2) NOT NULL,
|
|
"bemerkung" VARCHAR(500),
|
|
"erstelltAm" TIMESTAMPTZ(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
|
|
CONSTRAINT "abschlussposten_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "kassenkonto_organisationId_aktiv_idx" ON "kassenkonto"("organisationId", "aktiv");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "kassenkonto_organisationId_bezeichnung_key" ON "kassenkonto"("organisationId", "bezeichnung");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "buchungskategorie_organisationId_art_idx" ON "buchungskategorie"("organisationId", "art");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "buchungskategorie_organisationId_name_key" ON "buchungskategorie"("organisationId", "name");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "buchung_organisationId_datum_idx" ON "buchung"("organisationId", "datum" DESC);
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "buchung_organisationId_kontoId_datum_idx" ON "buchung"("organisationId", "kontoId", "datum");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "buchung_organisationId_kategorieId_idx" ON "buchung"("organisationId", "kategorieId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "beitragssatz_organisationId_abJahr_idx" ON "beitragssatz"("organisationId", "abJahr");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "beitragssatz_organisationId_abteilung_abJahr_key" ON "beitragssatz"("organisationId", "abteilung", "abJahr");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "beitrag_organisationId_jahr_stand_idx" ON "beitrag"("organisationId", "jahr", "stand");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "beitrag_personId_jahr_key" ON "beitrag"("personId", "jahr");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "rechnung_organisationId_stand_idx" ON "rechnung"("organisationId", "stand");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "rechnung_organisationId_datum_idx" ON "rechnung"("organisationId", "datum" DESC);
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "rechnung_organisationId_nummer_key" ON "rechnung"("organisationId", "nummer");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "rechnungsposition_organisationId_idx" ON "rechnungsposition"("organisationId");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "rechnungsposition_rechnungId_reihenfolge_key" ON "rechnungsposition"("rechnungId", "reihenfolge");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "kassenabschluss_organisationId_bisAm_idx" ON "kassenabschluss"("organisationId", "bisAm" DESC);
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "abschlussposten_organisationId_idx" ON "abschlussposten"("organisationId");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "abschlussposten_abschlussId_kontoId_key" ON "abschlussposten"("abschlussId", "kontoId");
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "belegentwurf" ADD CONSTRAINT "belegentwurf_buchungId_fkey" FOREIGN KEY ("buchungId") REFERENCES "buchung"("id") ON DELETE SET NULL ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "kassenkonto" ADD CONSTRAINT "kassenkonto_organisationId_fkey" FOREIGN KEY ("organisationId") REFERENCES "organisation"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "buchungskategorie" ADD CONSTRAINT "buchungskategorie_organisationId_fkey" FOREIGN KEY ("organisationId") REFERENCES "organisation"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "buchungskategorie" ADD CONSTRAINT "buchungskategorie_oberkategorieId_fkey" FOREIGN KEY ("oberkategorieId") REFERENCES "buchungskategorie"("id") ON DELETE SET NULL ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "buchung" ADD CONSTRAINT "buchung_organisationId_fkey" FOREIGN KEY ("organisationId") REFERENCES "organisation"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "buchung" ADD CONSTRAINT "buchung_kontoId_fkey" FOREIGN KEY ("kontoId") REFERENCES "kassenkonto"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "buchung" ADD CONSTRAINT "buchung_kategorieId_fkey" FOREIGN KEY ("kategorieId") REFERENCES "buchungskategorie"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "buchung" ADD CONSTRAINT "buchung_personId_fkey" FOREIGN KEY ("personId") REFERENCES "person"("id") ON DELETE SET NULL ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "buchung" ADD CONSTRAINT "buchung_erfasstVonId_fkey" FOREIGN KEY ("erfasstVonId") REFERENCES "person"("id") ON DELETE SET NULL ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "buchung" ADD CONSTRAINT "buchung_belegDateiId_fkey" FOREIGN KEY ("belegDateiId") REFERENCES "datei"("id") ON DELETE SET NULL ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "buchung" ADD CONSTRAINT "buchung_storniertVonId_fkey" FOREIGN KEY ("storniertVonId") REFERENCES "buchung"("id") ON DELETE SET NULL ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "beitragssatz" ADD CONSTRAINT "beitragssatz_organisationId_fkey" FOREIGN KEY ("organisationId") REFERENCES "organisation"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "beitrag" ADD CONSTRAINT "beitrag_organisationId_fkey" FOREIGN KEY ("organisationId") REFERENCES "organisation"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "beitrag" ADD CONSTRAINT "beitrag_personId_fkey" FOREIGN KEY ("personId") REFERENCES "person"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "beitrag" ADD CONSTRAINT "beitrag_satzId_fkey" FOREIGN KEY ("satzId") REFERENCES "beitragssatz"("id") ON DELETE SET NULL ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "beitrag" ADD CONSTRAINT "beitrag_buchungId_fkey" FOREIGN KEY ("buchungId") REFERENCES "buchung"("id") ON DELETE SET NULL ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "rechnung" ADD CONSTRAINT "rechnung_organisationId_fkey" FOREIGN KEY ("organisationId") REFERENCES "organisation"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "rechnung" ADD CONSTRAINT "rechnung_buchungId_fkey" FOREIGN KEY ("buchungId") REFERENCES "buchung"("id") ON DELETE SET NULL ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "rechnung" ADD CONSTRAINT "rechnung_pdfDateiId_fkey" FOREIGN KEY ("pdfDateiId") REFERENCES "datei"("id") ON DELETE SET NULL ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "rechnung" ADD CONSTRAINT "rechnung_erstelltVonId_fkey" FOREIGN KEY ("erstelltVonId") REFERENCES "person"("id") ON DELETE SET NULL ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "rechnungsposition" ADD CONSTRAINT "rechnungsposition_organisationId_fkey" FOREIGN KEY ("organisationId") REFERENCES "organisation"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "rechnungsposition" ADD CONSTRAINT "rechnungsposition_rechnungId_fkey" FOREIGN KEY ("rechnungId") REFERENCES "rechnung"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "kassenabschluss" ADD CONSTRAINT "kassenabschluss_organisationId_fkey" FOREIGN KEY ("organisationId") REFERENCES "organisation"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "kassenabschluss" ADD CONSTRAINT "kassenabschluss_prueferId_fkey" FOREIGN KEY ("prueferId") REFERENCES "person"("id") ON DELETE SET NULL ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "kassenabschluss" ADD CONSTRAINT "kassenabschluss_zweiterPrueferId_fkey" FOREIGN KEY ("zweiterPrueferId") REFERENCES "person"("id") ON DELETE SET NULL ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "kassenabschluss" ADD CONSTRAINT "kassenabschluss_berichtDateiId_fkey" FOREIGN KEY ("berichtDateiId") REFERENCES "datei"("id") ON DELETE SET NULL ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "abschlussposten" ADD CONSTRAINT "abschlussposten_organisationId_fkey" FOREIGN KEY ("organisationId") REFERENCES "organisation"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "abschlussposten" ADD CONSTRAINT "abschlussposten_abschlussId_fkey" FOREIGN KEY ("abschlussId") REFERENCES "kassenabschluss"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "abschlussposten" ADD CONSTRAINT "abschlussposten_kontoId_fkey" FOREIGN KEY ("kontoId") REFERENCES "kassenkonto"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|