initial commit

This commit is contained in:
Wolf G. Beckmann
2026-04-27 14:57:33 +02:00
commit 1816168d1f
60 changed files with 4615 additions and 0 deletions

225
Doku/Dokumenten-Check.md Normal file
View File

@@ -0,0 +1,225 @@
# Dokumenten-Check
Projekt: https://projects.zoho.eu/portal/aquantico#project/323095000000333012
## Datenmodell
```mermaid
```
```mermaid
erDiagram
dc_users {
number id PK
varchar2_50 username UK
varchar2_100 email UK
varchar2_255 password_hash
varchar2_20 role
number is_active
date created_at
date updated_at
}
dc_user_roles {
number id PK
varchar2_20 role_name UK
clob description
}
dc_document_types {
number id PK
varchar2_100 name
clob description
}
dc_reference_documents {
number id PK
number uploaded_by FK
number document_type_id FK
varchar2_100 name
clob description
varchar2_500 file_path
date upload_date
varchar2_100 mime_type
}
dc_question_catalogs {
number id PK
number created_by_user FK
number based_on_reference FK
number document_type_id FK
varchar2_100 name
varchar2_4000 description
}
dc_question_categories {
number id PK
number catalog_id FK
varchar2_100 name
clob description
}
dc_questions {
number id PK
number category_id FK
clob question_text
varchar2_20 evaluation_type
number threshold
varchar2_20 result_handling
clob example_0_percent
clob example_100_percent
}
dc_projects {
number id PK
number catalog_id FK
number created_by_user FK
varchar2_100 name
clob description
varchar2_20 status
number progress
date completed_at
varchar2_100 notification_email
}
dc_project_documents {
number id PK
number project_id FK
number document_type_id FK
blob original_file
blob translated_file
varchar2_255 filename
varchar2_100 mime_type
date uploaded_at
}
dc_results {
number id PK
number project_id FK
number question_id FK
number doc_id FK
clob answer
number score
varchar2_20 result_type
number deviation
number warning
clob the_comment
date evaluated_at
}
dc_users ||--o{ dc_reference_documents : "uploads"
dc_users ||--o{ dc_question_catalogs : "creates"
dc_users ||--o{ dc_projects : "creates"
dc_document_types ||--o{ dc_reference_documents : "used_in"
dc_document_types ||--o{ dc_question_catalogs : "used_in"
dc_document_types ||--o{ dc_project_documents : "used_in"
dc_reference_documents ||--o{ dc_question_catalogs : "based_on"
dc_question_catalogs ||--o{ dc_question_categories : "contains"
dc_question_categories ||--o{ dc_questions : "contains"
dc_question_catalogs ||--o{ dc_projects : "uses"
dc_projects ||--o{ dc_project_documents : "contains"
dc_projects ||--o{ dc_results : "has"
dc_questions ||--o{ dc_results : "answered_in"
dc_project_documents ||--o{ dc_results : "evaluated_in"
```
## Backend
```mermaid
graph TB
subgraph Browser["🌐 Browser"]
APEX["Oracle APEX\nFrontend UI"]
end
subgraph OracleDB["🗄️ Oracle Database 23c"]
ORDS["ORDS REST Services\n/api/dc/..."]
subgraph Schema["DB Schema"]
Config["Konfiguration\ndc_document_types\ndc_question_catalogs\ndc_question_categories\ndc_questions"]
Exec["Ausführung\ndc_projects\ndc_project_documents\ndc_results"]
Users["dc_users\ndc_user_roles\ndc_reference_documents"]
end
ORDS <--> Schema
end
subgraph Backend["☕ Quarkus Backend (Port 8090)"]
CheckRes["CheckResource\nPOST /check/{projectId}"]
Orch["CheckOrchestrationService\nHauptablauf (async)"]
DocProc["DocumentProcessingService\nPDF/DOCX/ODT → Markdown"]
EvalSvc["EvaluationService\nÜbersetzung + Auswertung"]
OrdsClient["OrdsClient\nMicroProfile REST Client"]
CheckRes -->|"202 Accepted\nFire & Forget"| Orch
Orch --> DocProc
Orch --> EvalSvc
Orch --> OrdsClient
end
subgraph AI["🤖 Ollama (ollama.aquantico.de)"]
MainModel["gpt-oss:20b\nÜbersetzung + Fragenauswertung"]
OcrModel["quen3.5:9b\nPDF Vision-OCR"]
end
APEX -->|"Dokument hochladen\nProjekt anlegen"| ORDS
APEX -->|"POST /check/{id}"| CheckRes
APEX -->|"Ergebnisse lesen"| ORDS
OrdsClient -->|"Projekt/Dok/Fragen laden\nErgebnisse speichern"| ORDS
DocProc -->|"Base64-Bild\nX-API-KEY"| OcrModel
EvalSvc -->|"Text + Prompt\nX-API-KEY"| MainModel
subgraph PhaseA["Phase A (pro Dokument)"]
A1["Download BLOB"] --> A2["OCR / Konvertierung\n→ Markdown"]
A2 --> A3["Übersetzung → Deutsch"]
A3 --> A4["Texte speichern (ORDS)"]
end
subgraph PhaseB["Phase B (pro Dok × Frage)"]
B1["KI-Auswertung\nscore 0100"] --> B2["Abweichung/Hinweis\nberechnen (Java)"]
B2 --> B3["Ergebnis speichern\n(ORDS)"]
end
Orch --> PhaseA
Orch --> PhaseB
style Browser fill:#dbeafe
style OracleDB fill:#fef3c7
style Backend fill:#dcfce7
style AI fill:#f3e8ff
style PhaseA fill:#f0f9ff
style PhaseB fill:#f0f9ff
```
## Dialoge
### Fragenkatalog
#### Tabelle
* Name
* Beschreibung
* Referenz-Dokument
#### Dialog
* Name (Im Kopf aussuchen)
* Referenz-Dokument Upload (Im Kopf)
* Master/Detail
* Fragen-Kategorien
* Fragen
### Projekte
#### Tabelle
* Name
* Beschreibung
* Anz ok,nok,undefiniert
#### Dialog
* Name (Im Kopf Aussuchen)
* Beschreibung
* Master/Details
* Dokumente
* Ergebnisse

View File

@@ -0,0 +1,58 @@
### Ziel
Unterstützende Vorprüfung von Dokumenten
- TU-Dokumenten gegen eine manuell zu konfigurierenden Fragenkatalog
- Transportbedingungen gegen die **Allgemeinen Deutschen Spediteurbedingungen (ADSp)
**
### Leistungsumfang
Erstellen einer APEX-Applikation mit folgenden Funktionalitäten
**Administration**
- Konfigurierbare **Fragenk****a****taloge** (TU-Dokumente / Transportbedingungen)
- Es werden in Kategorien Fragen definiert und angegeben wie die Frage bewertet werden soll.
- Beispiele für eine 0% Bewertung und Beispiele für eine 100% Bewertung
- Schwellwert für OK / Unklar / Nicht OK
- Umgang mit dem Ergebnis der Antwort
- Markieren als Abweichung
- Ausgabe als Hinweis (z.B. um Strafzahlungen explizit anzuzeigen)
- Hinterlegung von Referenzdokumenten auf die sich die Fragen beziehen können. (z.B. die ADSp)
- Benutzeradministration
- Anlegen und Verwalten von Benutzern
- Wer darf Konfigurationen hinterlegen?
- Wer darf Dokumente prüfen?
- Hinterlegen einer E-Mail für die Benachrichtigung
**Prüf-Funktionalität**
- Anlegen eines Prüfungsauftrags
- Laden von Dokumenten
- Angabe, welche Prüfung erfolgen soll
- Start der Prüfung
- Prüfung als Hintergrundverarbeitung
- Dokumente ins Deutsche Übersetzen
- Dokumente entsprechend des vorgegebenen Fragenkataloges prüfen
- Pro Dokument ein Prüfprotokoll erstellen
- Wenn alle Prüfungen abgeschlossen sind
- Abschließendes Prüfungsprotokoll erstellen
- Benutzer per Email über die abgeschlossene Prüfung Informieren
- Alle Prüfungsprotokolle werden angehängt, auch das abschließende
- Link, um in die Applikation zum Prüfungsauftrag zu springen um die Prüfungsergebnisse, Dokumente original und übersetzt direkt anzeigen zu lassen
- Prüfungsübersicht
- Anzeige der laufenden und fertiggestellten Prüfungen
- Bei laufenden Prüfungen den Fortschritt
- Sprung zum Prüfungsauftrag
- Prüfungsauftrag anzeigen
- Darstellen welcher Fragenkatalog auf die Dokumente angewendet wurde
- Auflisten der Dokumente (original und übersetzt) mit der Möglichkeit der Anzeige und des Downloads
- Darstellen der Prüfungsergebnisse (oder Fehler bei der Verarbeitung) pro Dokument
ACHTUNG: Eine KI kann Fehler machen. Die Ergebnisse können nicht rechtssicher sein.