BauDoc Bahn: Baustellen- und Dokumentenverwaltung für EIU-Projekte

Erstimport. Fachliche Grundlage ist die EIU-Ablagestruktur des Auftraggebers
(2-EIU-Ablagestruktur.xlsx): 1.106 Zeilen, aufbereitet zu 159 Ordnern und
944 Soll-Unterlagen mit Fachbereichsrelevanz, Aufbewahrungsfrist, Medium und
Übergabezeitpunkt.

Module
- Dokumentationsstand: Soll-Ist je Projekt, Fristen aus dem Übergabezeitpunkt
  und den Projektterminen, Ampel, CSV-Rückexport im Format der Ursprungsdatei
- Dokumentenmanagement mit Versionen, Freigabelauf, SHA-256-Prüfsummen
- Bautagebuch nach Ril 809.0301, nach Abschluss gesperrt
- Meldungen und Mängel (Behinderung, Bedenken, Mangel, AvL, Unfall)
- Verträge, Nachträge, Aufmaße, Stundenlohnzettel mit zeilenweiser Anerkennung
- Rechnungsprüfung: automatischer Abgleich gegen Vertrag, anerkanntes Aufmaß,
  bestätigte Stundenzettel und Vorrechnungen; getrennte Bescheinigung
  sachlich richtig / rechnerisch richtig / Zahlungsfreigabe
- Kommunikation mit Projektkanälen, Erwähnungen und E-Mail-Benachrichtigung
- Revisionssicheres Protokoll aller Vorgänge

Rechte
Rollen nach dem Vorgabeprozess Bauüberwachung (PL, BHV, BÜB, FBÜ,
kaufmännische Steuerung, Planung, Auftragnehmer, Prüfer, Betreiber), Zuordnung
je Projekt. Auftragnehmer sehen ausschließlich Daten der eigenen Firma; diese
Schranke hängt allein an der Rolle. Welche Bereiche ihnen überhaupt angezeigt
werden, entscheidet der Bauherr je Projekt über Schalter in den Einstellungen.

Betrieb
Docker Compose mit Anwendung, PostgreSQL und Mailpit. Keine Named Volumes –
alle persistenten Daten liegen als Bind-Mount unter data/ im Compose-
Verzeichnis, damit ein Backup ein Kopiervorgang bleibt.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
duffyduck
2026-08-11 13:05:09 +02:00
co-authored by Claude Opus 5
commit 807b7ce541
82 changed files with 45684 additions and 0 deletions
+70
View File
@@ -0,0 +1,70 @@
version: "2.4"
# BauDoc Bahn Baustellen- und Dokumentenmanagement für Eisenbahninfrastruktur
#
# Bewusst OHNE named volumes: alle persistenten Daten liegen als Bind-Mount
# direkt neben dieser Datei unter ./data/. Damit ist ein Backup ein simples
# "tar czf backup.tgz data/" und ein Umzug ein Kopiervorgang.
services:
db:
image: postgres:16-alpine
container_name: baudoc-db
restart: unless-stopped
environment:
POSTGRES_USER: ${POSTGRES_USER:-baudoc}
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-baudoc}
POSTGRES_DB: ${POSTGRES_DB:-baudoc}
# Deutsche Sortierung/Volltext
POSTGRES_INITDB_ARGS: "--locale=C.UTF-8 --encoding=UTF8"
volumes:
- ./data/postgres:/var/lib/postgresql/data
ports:
- "${DB_PORT:-5433}:5432"
healthcheck:
test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER:-baudoc} -d ${POSTGRES_DB:-baudoc}"]
interval: 5s
timeout: 5s
retries: 20
mail:
# Fängt im Betrieb ohne echten Mailserver alle Benachrichtigungen ab.
# Web-UI: http://localhost:8025 im Produktivbetrieb durch echtes SMTP ersetzen.
image: axllent/mailpit:latest
container_name: baudoc-mail
restart: unless-stopped
environment:
MP_MAX_MESSAGES: 5000
MP_DATABASE: /data/mailpit.db
volumes:
- ./data/mail:/data
ports:
- "${MAIL_UI_PORT:-8025}:8025"
app:
build:
context: ./app
dockerfile: Dockerfile
container_name: baudoc-app
restart: unless-stopped
depends_on:
db:
condition: service_healthy
environment:
DATABASE_URL: postgresql://${POSTGRES_USER:-baudoc}:${POSTGRES_PASSWORD:-baudoc}@db:5432/${POSTGRES_DB:-baudoc}?schema=public
AUTH_SECRET: ${AUTH_SECRET:-bitte-in-.env-aendern-mindestens-32-zeichen-lang}
APP_URL: ${APP_URL:-http://localhost:3400}
STORAGE_DIR: /app/storage
SMTP_HOST: ${SMTP_HOST:-mail}
SMTP_PORT: ${SMTP_PORT:-1025}
SMTP_USER: ${SMTP_USER:-}
SMTP_PASS: ${SMTP_PASS:-}
SMTP_FROM: ${SMTP_FROM:-BauDoc Bahn <noreply@baudoc.local>}
SMTP_SECURE: ${SMTP_SECURE:-false}
MAX_UPLOAD_MB: ${MAX_UPLOAD_MB:-200}
TZ: Europe/Berlin
volumes:
# Hochgeladene Dokumente liegen als normale Dateien im Compose-Verzeichnis
- ./data/files:/app/storage
ports:
- "${APP_PORT:-3400}:3000"