Commit Graph

65 Commits

Author SHA1 Message Date
CTO (LegalAI)
7b1407268b feat: Generisches Dokument-Upload-System fuer Entscheidungen, Normen und Falldokumente
- Neues documents-Schema mit Mandantentrennung (tenantId), Kategorien (entscheidung/norm/falldokument/sonstiges) und optionaler Verknuepfung zu cases/decisions/normInstruments
- Upload-Library (src/lib/documents/) mit Datei-Upload, PDF/DOCX-Textextraktion und gefilterten Listen
- API-Route POST/GET /api/documents mit RBAC, Audit-Logging und asynchroner Textextraktion
- Wiederverwendbare DokumentUpload-Komponente mit Drag-and-Drop, Fortschrittsanzeige und Dateiliste
- Integration in Fall-Detailseite, Entscheidungs-Detailseite und Normen-Detailseite
- Drizzle-Migration fuer documents-Tabelle mit RLS-konformer Mandantentrennung
- DSGVO: 90-Tage Aufbewahrungsfrist fuer hochgeladene Dokumente

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-04-09 10:18:56 +00:00
CTO (LegalAI)
a8124fa6b9 fix: use set_config() instead of SET LOCAL for tenant RLS context
PostgreSQL SET commands do not support parameterized queries ($1),
causing "syntax error at or near $1" on all tenant-scoped operations.
Replaced with set_config('app.tenant_id', $1, true) which supports
parameters safely. Also added BEGIN/COMMIT transaction wrapping since
set_config(..., true) requires a transaction for LOCAL scope.

Fixed SQL injection vulnerability in tenant.ts which used unescaped
string interpolation.

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-04-09 09:05:02 +00:00
CTO (LegalAI)
517184bbae fix: add /cases/new route to prevent dynamic [id] catch
The static "new" segment was missing, so Next.js treated "new" as a
UUID parameter for [id]/page.tsx, causing a Postgres "invalid input
syntax for type uuid" error. Adding cases/new/page.tsx with a create
form resolves the server error.

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-04-09 08:48:09 +00:00
CTO (LegalAI)
f0c87d9332 feat: implement case management (Fallverwaltung) UI and API
- API routes: GET/POST /api/cases (list + create), GET/PATCH/DELETE /api/cases/[id]
- Cases list page with search, status filter, and pagination
- Case detail page showing linked analyses and proceedings
- Sidebar navigation: added "Fälle" link after Dashboard
- Tenant isolation via withTenantDb + requirePermission on all API routes
- Audit logging on all case operations

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-04-09 08:38:21 +00:00
CTO (LegalAI)
07a057bf79 feat: add /api/auth/register route for user registration
Creates tenant and admin user with bcrypt-hashed password.
Fixes registration page JSON parse error caused by missing endpoint.

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-04-09 08:14:22 +00:00
CTO (LegalAI)
ffdab093ff feat: add Ollama/local LLM provider support
Add Ollama as a third AI provider option alongside Anthropic and OpenAI.
Uses the OpenAI-compatible API endpoint that Ollama exposes, configured
via OLLAMA_URL and OLLAMA_MODEL env vars. Provider selection is now
tenant-aware via DB settings, with env var fallback.

- New provider type 'ollama' in AIProvider union
- Tenant-aware getModelForTenant() reads AI config from tenant settings jsonb
- Admin settings UI on /einstellungen for provider/model selection
- API route GET/PATCH /api/settings/ai for tenant AI config
- Updated all AI call sites (analysis, structured-analysis, contracts)

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-04-09 08:11:31 +00:00
CEO
bd132315b4 fix: port mappings (3002 for app, 5434 for postgres) to avoid conflicts
Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-04-09 08:05:19 +00:00
CTO (LegalAI)
38973f2d63 feat: add deployment script and project README
- deploy.sh: pulls from Gitea, rebuilds and restarts Docker containers
- README.md: setup instructions, env vars, deployment guide

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-04-09 07:57:00 +00:00
CTO (LegalAI)
7dfbc42b8c feat: contract analysis API improvements and DSGVO compliance updates
Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-04-09 07:56:01 +00:00
CTO (LegalAI)
0daf65ce91 fix(decisions): enforce DSGVO tenant isolation and RBAC on decisions API
- GET /api/decisions: Add requirePermission('decisions:read'), use
  withTenantDb() for RLS enforcement, add application-level tenant
  filter (own tenant OR published+anonymized)
- POST /api/decisions: Add requirePermission('decisions:write'), use
  withTenantDb(), set tenantId from authenticated session context
  instead of accepting it from request body (prevents tenant spoofing)

Addresses DSGVO Art. 32 (security of processing) and Art. 5(1)(f)
(integrity and confidentiality).

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-04-09 00:45:55 +00:00
CTO (LegalAI)
b837f4a71e feat: Phase 4.4 — Human-in-the-Loop APIs (AIIA-27)
- POST /api/analyses/:id/feedback — correction/approval/rejection workflow
- GET /api/headnotes — Leitsatz-Vorschlags-Workflow (pending headnote review)

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-04-09 00:24:34 +00:00
CTO (LegalAI)
78ccf64948 feat: Phase 4 — WebApp-Frontend für Bühnenrecht (AIIA-27)
Complete frontend implementation with Next.js App Router:

- Dashboard with case/analysis/proceeding stats and quick actions
- Normen-Browser with Quellenrang hierarchy and instrument detail
- Entscheidungssuche with full-text search and detail view
- Analysemodus with streaming AI analysis (4 modes: Gutachten, Entscheidung, Vergleich, Risiko)
- Vertragsanalyse with file upload (PDF/DOCX)
- Verfahren overview (BSchGO/ArbGG)
- Auth pages (Login/Register)
- Mandantenfähigkeit: tenant switcher, RBAC-based settings
- Responsive sidebar navigation with Tailwind CSS
- Dashboard layout with session-based auth guard
- Installed missing runtime deps (pdf-parse, mammoth, devDependencies)

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-04-09 00:23:09 +00:00
CTO (LegalAI)
3c16fdc30f feat: add NV Bühne non-renewal & compensation module (Phase 3.2)
Implement § 61 NV Bühne non-renewal deadline calculation with tiered
protection (standard 31.10., extended 31.07. for 15+ years, special
protection for over-55), tariff-based compensation calculation with
Gagenklassen and Dienstalterszulage, and Spielzeit seasonal logic
(1.8.–31.7. with Probenzeit). Includes DB schema (contracts,
compensationRules, nonRenewalDeadlines), migration, and three API
endpoints under /api/nv-buehne/.

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-04-08 23:25:54 +00:00
CTO (LegalAI)
a7245001ad feat: vollständiges Datenmodell für Normen und Entscheidungen (AIIA-15)
Replaces placeholder schema with full legal data model:
- Normen with temporal versioning (valid_from/valid_to), source rank hierarchy,
  immutable version chains, and norm-to-norm cross-references
- Entscheidungen with structured metadata (Aktenzeichen, Gremium, Leitsatz,
  Tenor, Tatbestand, Entscheidungsgründe), decision-norm links with Stichtag
- NV Bühne Fachgruppen and BSchGO Arbitration Tribunals
- Cases, Analyses, and DSGVO Audit Log
- Mandantentrennung via tenant_id + PostgreSQL Row-Level Security policies
- Initial Drizzle migration and RLS migration

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-04-08 21:16:40 +00:00
CTO (LegalAI)
1d61b2ad8a Initial project structure: Next.js 15 + TypeScript + Drizzle ORM
- Next.js 15 with App Router, TypeScript, Tailwind CSS
- Directory structure per LegalAI architecture plan
- Docker Compose setup (PostgreSQL 16, Meilisearch, App)
- Drizzle ORM with base schema (tenants, users, norms, decisions)
- AI abstraction layer structure (Vercel AI SDK)
- Normen-Engine with Quellenrang hierarchy
- Search abstraction layer
- Auth placeholder (NextAuth.js)

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-04-08 21:07:22 +00:00