# 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 0–100"] --> 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