Files
Dokumenten-Check/CLAUDE.md
Wolf G. Beckmann 1816168d1f initial commit
2026-04-27 14:57:33 +02:00

108 lines
4.5 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# CLAUDE.md
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
## Project Overview
**Dokumenten-Check** is a document pre-verification system for Frigosped (freight forwarding). It checks transport documents and general terms & conditions (AGB) against configurable question catalogs, with AI-powered document translation and evaluation. Built on **Oracle APEX** + **Oracle Database 23c**.
## Database Setup
```bash
# Connect to Oracle DB and run scripts in order:
sqlplus user/pass@db @"Scripts/Datenmodell DocumentCheck.sql"
sqlplus user/pass@db @"Scripts/Fragenkatalog-AGB anlegen.sql"
```
No build/compilation step — APEX applications deploy directly to Oracle instances.
## Architecture
### Data Model (10 tables in `Scripts/Datenmodell DocumentCheck.sql`)
**Configuration hierarchy:**
- `dc_document_types``dc_question_catalogs``dc_question_categories``dc_questions`
**Execution hierarchy:**
- `dc_projects``dc_project_documents``dc_results`
**Supporting:** `dc_users`, `dc_user_roles`, `dc_reference_documents`
### Key Patterns
- **Audit triggers on all tables**: Every table has BEFORE INSERT/UPDATE triggers that set `created_at`, `created_by`, `updated_at`, `updated_by`, `row_version`. User identity comes from `APEX_APPLICATION.G_USER`.
- **Oracle Identity columns**: All PKs use `GENERATED BY DEFAULT AS IDENTITY`.
- **Config-driven evaluation**: Each question defines `evaluation_type`, `threshold`, `result_on_deviation` (ABWEICHUNG/HINWEIS), plus example answers for 0%/100% cases.
- **Async processing**: Projects progress through `PENDING → IN_PROGRESS → COMPLETED` with a 0100% `processing_progress` field and email notification on completion.
- **Filestorage**: `dc_project_documents` stores the`original_file` (BLOB) with MIME type and filename metadata. The original text `original_text` (CLOB) after after OCR and conversion to Markdown and the `translated_file` after Translation to German (CLOB)
### Result Types
- `OK`, `UNKLAR` (unclear), `NOK` (not OK)
- Boolean flags: `is_deviation`, `is_warning`
### User Roles
- `ADMIN` — configuration management
- `AUDITOR` — document verification
## Key Files
| File | Purpose |
|------|---------|
| `Scripts/Datenmodell DocumentCheck.sql` | Full DB schema: 10 tables + 8 triggers |
| `Scripts/Fragenkatalog-AGB anlegen.sql` | Sample AGB question catalog (6 categories, 25 questions) |
| `Scripts/ORDS REST Services.sql` | All 11 ORDS REST endpoints (idempotent, run after schema) |
| `Doku/Projektbeschreibung.md` | German requirements specification |
| `Doku/Dokumenten-Check.md` | Data model + UI dialog specifications |
## Backend Service (Quarkus)
Located in `dc-backend/`. Java 21, Quarkus 3.15.1, LangChain4J 0.36.2.
```bash
# Dev-Modus (hot reload)
cd dc-backend
mvn quarkus:dev
# Produktion bauen
mvn package -DskipTests
java -jar target/quarkus-app/quarkus-run.jar
```
**Trigger-Endpunkt:**
```bash
POST http://localhost:8090/check/{projectId}
# → 202 Accepted, Verarbeitung läuft asynchron
```
### Backend-Architektur
```
CheckResource POST /check/{projectId} → 202, Fire & Forget
CheckOrchestrationService Haupt-Ablauf (Phase A: OCR/Übersetzung, Phase B: Auswertung)
DocumentProcessingService PDF→KI-OCR, DOCX→POI→Markdown, ODT→ODF-Toolkit→Markdown
EvaluationService translate() + evaluate() via LangChain4J ChatLanguageModel
OrdsClient (REST Client) MicroProfile REST Client für alle /api/dc/-Endpunkte
AiModelProducer (CDI) @Named("main") gpt-oss:20b + @Named("ocr") quen3.5:9b
```
### KI-Modelle
| Qualifier | Modell | Zweck |
|-----------|--------|-------|
| `@Named("main")` | `gpt-oss:20b` | Übersetzung + Fragenauswertung |
| `@Named("ocr")` | `quen3.5:9b` | PDF-Seiten als Bild → Markdown-Text |
Beide sprechen `https://ollama.aquantico.de` an (Ollama-API `/api/chat`) mit `X-API-KEY`-Header.
Konfiguration in `dc-backend/src/main/resources/application.properties`.
### Verarbeitungsablauf
1. ORDS: Projekt laden + `status → IN_PROGRESS`
2. ORDS: Dokumente + Fragen laden
3. ORDS: Alte Ergebnisse löschen (Re-Processing-fähig)
4. **Phase A** (pro Dokument): Download → OCR/Konvertierung → Übersetzung → ORDS `PUT /texts`
5. **Phase B** (pro Dokument × Frage): Auswertung → Abweichungs-Berechnung → ORDS `POST /results`
6. ORDS: `status → COMPLETED`
Abweichung/Hinweis wird in Java berechnet (nicht durch KI): `score < threshold` → prüfe `result_handling` (ABWEICHUNG/HINWEIS).