Files
FireAdministration/package.json
T
Florian WildeandClaude Opus 5 4165334c5a Phase 9: Kassenverwaltung
Kassenbuch, Mitgliedsbeitraege, Rechnungen an Dritte, Kassenpruefung und
die Auswertungen fuer die Jahreshauptversammlung.

Die drei Festlegungen aus Phase-9.md sitzen in der Datenbank, nicht im
Router: eine festgeschriebene Buchung ist unveraenderbar, ein geprueftes
Jahr nimmt kein Datum mehr an, und gerechnet wird mit Prisma.Decimal.
Korrigiert wird ueber eine Gegenbuchung mit Verweis - beide Buchungen
bleiben stehen, damit im Kassenbuch zu sehen ist, dass etwas berichtigt
wurde.

Neun Modelle, drei Trigger, zwoelf CHECKs, sechs Router, fuenf Ansichten.
Dazu der Bankimport fuer CAMT.053 und MT940 ohne Fremdbibliothek, der
Kategorievorschlag aus dem eigenen Buchungsbestand und die Bruecke von
Phase 8: aus einem gegengezeichneten Beleg wird eine Buchung, das Foto
haengt danach an ihr.

Nebenbei behoben: die Rechnungsnummer war ein Wettlauf, und eine
Organisation liess sich nicht mehr loeschen, sobald sie eine
festgeschriebene Buchung hatte - der Trigger kannte den
Aufbewahrungsschalter nicht.

562 Unit-Tests und 239 E2E-Tests gruen.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-04 19:23:34 +02:00

114 lines
3.4 KiB
JSON

{
"name": "florian",
"version": "0.10.0",
"private": true,
"description": "FLORIAN — Feuerwehr-Verwaltungsplattform",
"engines": {
"node": ">=22"
},
"scripts": {
"dev": "next dev -p 3100",
"build": "next build",
"start": "next start -p 3100",
"worker": "tsx --conditions=react-server src/worker/index.ts",
"worker:dev": "tsx watch --conditions=react-server src/worker/index.ts",
"lint": "eslint .",
"lint:fix": "eslint . --fix",
"typecheck": "tsc --noEmit",
"test": "vitest run",
"test:watch": "vitest",
"test:e2e": "playwright test",
"db:generate": "prisma generate",
"db:migrate": "prisma migrate deploy",
"db:migrate:dev": "prisma migrate dev",
"db:push": "prisma db push",
"db:seed": "tsx prisma/seed.ts",
"db:test-reset": "tsx scripts/testdaten.ts",
"db:studio": "prisma studio",
"screenshots": "tsx scripts/screenshots.ts",
"icons": "tsx scripts/icons.ts",
"vapid": "tsx scripts/vapid.ts"
},
"dependencies": {
"@prisma/client": "^6.16.2",
"@radix-ui/react-avatar": "^1.1.10",
"@radix-ui/react-checkbox": "^1.3.11",
"@radix-ui/react-dialog": "^1.1.23",
"@radix-ui/react-dropdown-menu": "^2.1.16",
"@radix-ui/react-label": "^2.1.7",
"@radix-ui/react-popover": "^1.1.23",
"@radix-ui/react-select": "^2.3.7",
"@radix-ui/react-separator": "^1.1.7",
"@radix-ui/react-slot": "^1.2.3",
"@radix-ui/react-tabs": "^1.1.21",
"@radix-ui/react-tooltip": "^1.2.16",
"@tanstack/react-query": "^5.90.2",
"@tanstack/react-table": "^9.2.4",
"@trpc/client": "^11.6.0",
"@trpc/react-query": "^11.6.0",
"@trpc/server": "^11.6.0",
"@zxing/browser": "^0.2.1",
"@zxing/library": "^0.23.0",
"bcryptjs": "^3.0.2",
"bullmq": "^5.61.0",
"class-variance-authority": "^0.7.1",
"clsx": "^2.1.1",
"date-fns": "^4.1.0",
"date-fns-tz": "^3.2.0",
"dexie": "^4.4.5",
"exceljs": "^4.4.0",
"ioredis": "^5.8.1",
"lucide-react": "^0.544.0",
"maplibre-gl": "^6.7.0",
"minio": "^8.0.6",
"next": "^15.5.4",
"next-auth": "^5.0.0-beta.29",
"next-themes": "^0.4.6",
"nodemailer": "^8.0.11",
"papaparse": "^5.7.0",
"qrcode": "^1.5.4",
"react": "^19.1.1",
"react-dom": "^19.1.1",
"server-only": "^0.0.1",
"superjson": "^2.2.6",
"tailwind-merge": "^3.3.1",
"web-push": "^3.6.7",
"zod": "^3.25.76"
},
"devDependencies": {
"@playwright/test": "^1.55.1",
"@tailwindcss/postcss": "^4.1.13",
"@testing-library/jest-dom": "^6.9.1",
"@testing-library/react": "^16.3.0",
"@types/node": "^22.18.6",
"@types/nodemailer": "^8.0.1",
"@types/papaparse": "^5.5.2",
"@types/qrcode": "^1.5.6",
"@types/react": "^19.1.13",
"@types/react-dom": "^19.1.9",
"@types/web-push": "^3.6.4",
"@vitejs/plugin-react": "^5.0.3",
"dotenv": "^17.4.2",
"esbuild": "^0.25.10",
"eslint": "^9.36.0",
"eslint-config-next": "^15.5.4",
"fake-indexeddb": "^6.2.5",
"jsdom": "^27.0.0",
"prisma": "^6.16.2",
"tailwindcss": "^4.1.13",
"tsx": "^4.20.6",
"tw-animate-css": "^1.4.0",
"typescript": "^5.9.2",
"vite-tsconfig-paths": "^5.1.4",
"vitest": "^3.2.4"
},
"allowScripts": {
"prisma": true,
"@prisma/client": true,
"@prisma/engines": true,
"esbuild": true,
"unrs-resolver": true,
"msgpackr-extract": true
}
}