server: fqdn: "dms.example.com" api_port: 8080 storage: base_path: "/var/lib/archivdms" # enthält inbox/, store/, ocr-tmp/ (siehe README) retention_days: 3650 # GoBD default: 10 Jahre max_upload_size_mb: 50 ocr: tesseract_path: "tesseract" # muss im PATH liegen, apt install tesseract-ocr tesseract-ocr-deu pdftoppm_path: "pdftoppm" # apt install poppler-utils languages: "deu+eng" timeout_seconds: 60 pagesplit: # Trennseiten-Split (internal/pagesplit): mehrseitige PDF-Scans werden beim # Ingest an Barcode-Trennblättern in Einzeldokumente zerlegt. Das Trennblatt # selbst wird verworfen, jedes Teildokument durchläuft den normalen Pfad # (eigene WORM-Ablage, eigene OCR, eigene Autozuordnung). Der Split wird im # Audit-Log als "document_split" mit Seitenbereichen + Dokument-IDs # protokolliert (GoBD-Nachvollziehbarkeit). # Braucht: apt install poppler-utils zbar-tools enabled: false # Default AUS — erst nach Feldvalidierung aktivieren marker: "ARCHIVDMS-SPLIT" # leer = Default "ARCHIVDMS-SPLIT" (Vergleich case-insensitiv) marker_prefix: false # true = Trennblatt-Barcode muss nur mit marker BEGINNEN raster_dpi: 150 # 0 = Default 150 (reicht für einen ganzseitigen Barcode) max_pages: 200 # 0 = Default 200; längere PDFs werden ungesplittet archiviert timeout_seconds: 120 # 0 = Default 120, je poppler-Aufruf jobqueue: # Mandanten-faire Verarbeitungs-Queue (internal/jobqueue): OCR, Taxonomie- # Autozuordnung und on_upload-Workflows laufen asynchron in Worker-Goroutinen # im selben Prozess (kein separater Dienst, kein Redis). Der Upload-Request # macht nur noch Datei speichern + WORM + Job anlegen. disabled: false # true = keine Nachverarbeitung (Dokumente bleiben "queued") workers: 2 # Tesseract ist CPU-gebunden — nicht über die Kernzahl gehen poll_interval_ms: 2000 # wie oft der Dispatcher nach fälligen Jobs schaut job_timeout_seconds: 600 # Limit je Job, zugleich Schwelle des Reapers für hängende Jobs max_retries: 5 # danach dauerhaft "failed", kein Automatik-Retry mehr sftp: enabled: false # eingebetteter SFTP-Server pro Mandant (internal/sftpserver) bind: ":2222" host_key_path: "" # leer = /.ssh/host_key (wird beim ersten Start generiert) index: # Volltext-Index (Manticore, MySQL-Protokoll Port 9306). Leer = deaktiviert. # Phase 1: nur Schreib-/Sync-Layer, noch KEIN Such-Endpunkt. manticore_dsn: "" # z.B. "archivdms@tcp(127.0.0.1:9306)/?charset=utf8mb4" database: host: "127.0.0.1" port: 5432 name: "archivdms" user: "archivdms" password: "CHANGE_ME" sslmode: "disable" smtp_out: host: "smtp.example.com" port: 587 user: "noreply@example.com" password: "CHANGE_ME" tls: false from: "archivdms " api: bind: ":8080" secret: "CHANGE_ME_TO_A_LONG_RANDOM_SECRET" secure_cookies: true trusted_proxies: [] audit: log_path: "/var/log/archivdms/audit.log" retention_days: 3650 logging: path: "/var/log/archivdms/app.log" level: "info"