ci / test (push) Successful in 27s
- ontology/know.yaml: 49 Klassen, 66 Beziehungen, 12 Vokabulare (72 Konzepte); erzeugt: know.ttl (OWL + SKOS), Ansicht aus viewer.html.tmpl - knaster.ontology: Modell + Prüfung, Export, Momentaufnahme der n8n-Workflows (nur GET; KNOW-Spezifikation aus dem Workflow-Code, Aufrufe inkl. Laufzeit- Operationen, direktes SQL), Abgleich, Übernahme von Entscheidungen - Service-Routine Schritt 8: Verstöße als Befunde, Ontologie-Änderungen als Vorschläge ontology_change (immer Freigabe); „ordne P-x <konzept> zu“; Entscheidungen in ontology_decisions, `knaster ontology apply` schreibt sie in die YAML (Version +1) - CLI: knaster ontology validate|export|snapshot|check|apply; knaster validate prüft Modell und Aktualität der Turtle-Datei - Gegen echten n8n-Export geprüft: neue Befunde B31–B33 (verified/confirmed, KAN ruft unbekannte Operation, MPA ordnet Projektereignisse nie ein) - SPEC-ontology, BETRIEB §6, Router-Image enthält die Ontologie Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
570 lines
26 KiB
Markdown
570 lines
26 KiB
Markdown
# KNOW: Tabellen und Zugriffe (n8n, Schema `knowledge`)
|
||
|
||
Stand: 13.10.2026. Abgeleitet aus den Workflow-Definitionen auf n8n.mindboost.app, gelesen über die n8n-API. Inhalte der Datenbank wurden nicht gelesen.
|
||
Interaktive Ansichten (privat, Freigabe über das Share-Menü):
|
||
- Datenfluss: https://claude.ai/artifact/GP8FfU8M6Wk9hPRmJuk96h
|
||
- Ontologie: https://claude.ai/artifact/R7zxBJsCKkkCWdCcztLFUT (Quelle: [ontology/know.yaml](../../ontology/know.yaml), Turtle: [ontology/know.ttl](../../ontology/know.ttl))
|
||
|
||
Befunde mit Belegen, Folgen und Vorschlägen: [KNOW-befunde.md](KNOW-befunde.md) (B1–B33)
|
||
|
||
## Aufbau
|
||
|
||
- **KNOW - Knowledge Base Gateway** ist ein Sub-Workflow mit 80 fest benannten Operationen. Jede Operation ist auf eine SQL-Vorlage abgebildet, freies SQL gibt es nicht. Unbekannte Operationen lehnt KNOW mit `Nicht erlaubte KNOW operation` ab. Die Tabellen legt `setup_schema` an (Postgres, Erweiterung `pg_trgm`).
|
||
- **KGW - KNOW Query Gateway**: Eingang für externe Aufrufer (Hermes, Skripte) über `POST /webhook/know-query`.
|
||
- Authentifizierung: HMAC-SHA256 mit `X-KGW-Timestamp` und `X-KGW-Signature` (Schlüssel in `KGW_HMAC_KEY`), Zeitfenster 5 Min.
|
||
- Erlaubt sind 26 Operationen: alle Lese-Operationen plus Lern-Schreibzugriffe.
|
||
- Gesperrt sind `setup_schema` sowie die Operationen für BSB, KAF-Bestätigung, Kanzlei, Belege, Mailbox-Grants und LLM-Jobs.
|
||
- **Direktes SQL an KNOW vorbei**:
|
||
- `CAT - Postfach Pipeline` aktualisiert `workflow_hints` (`notified_at`, `pending_notification`).
|
||
- `ASP - Absender-Report` liest `contacts`.
|
||
|
||
## Auffälligkeiten (Kurzfassung, ausführlich in [KNOW-befunde.md](KNOW-befunde.md))
|
||
|
||
1. **`CANCEL - Unsubscribe Link`** (aktiv) ruft in 4 Knoten `log_workflow_decision` auf. KNOW kennt diese Operation nicht und lehnt ab. Weil „Continue on Fail“ gesetzt ist, läuft der Workflow weiter, aber es wird nichts protokolliert.
|
||
2. **`KAN-Learn - Kanbau Pattern Learning`** (aktiv) ruft `upsert_kanbau_project_patterns` auf. Auch diese Operation kennt KNOW nicht. Der Knoten hat keine Fehlerbehandlung, die Ausführung bricht dort ab.
|
||
3. **`IN - Sicherheitsregeln Source Sync`** (inaktiv) ruft `upsert_input_validation_rule` und `upsert_input_validation_source_snapshot` auf. Beide gibt es in KNOW nicht.
|
||
4. **Kein aktiver Workflow schreibt über KNOW** in: `contact_aliases`, `contact_project_relations`, `projects`, `project_folders`, `property_development_cases`, `property_development_documents`, `place_enrichments`, `workflow_decisions`, `workflow_hint_config`, `agent_capabilities`, `agent_context_documents`, `agent_execution_log`. Möglich sind Schreibzugriffe von außerhalb von n8n.
|
||
5. **`document_extractions`** wird nur von außen über KGW beschrieben.
|
||
6. **Löschfristen:** Für Klartext-Felder (`llm_jobs.prompt` und `.result`, `document_extractions.extracted_text`, `property_development_cases.meeting_transcripts`, `agent_context_documents.content`) ist keine Bereinigung erkennbar. Es gibt nur `purge_*`-Operationen für Absender-Beobachtungen und Aliase. Bei `browser_sessions.session_data` ist am Schema nicht erkennbar, ob es verschlüsselt ist.
|
||
|
||
## Bezug zu knaster
|
||
|
||
- **Task 6.4:** `find_active_llm_workers` ist über KGW von außen erlaubt. Die Operation liefert `mac, host, model, tier, tier_rank, status, endpoint, last_seen_at, age_seconds` und die Zahl wartender Jobs. Der Router kann aktive Worker damit ohne neuen Webhook lesen, braucht dafür aber den HMAC-Schlüssel.
|
||
- **Gleiche Idee wie die Skill-Graduierung:** `workflow_hint_config.min_observations_for_skip_ai` lässt die KI weg, sobald ein Muster oft genug beobachtet wurde. Aus `workflow_decisions` (Vorschlag vs. tatsächliche Entscheidung) ließen sich Präferenzpaare gewinnen.
|
||
|
||
## Tabellen
|
||
|
||
### Mail und Absender
|
||
|
||
#### `mail_events`
|
||
|
||
Eine Zeile pro verarbeiteter Mail: Kategorie, zugeordnetes Projekt, Status.
|
||
|
||
**Sensibel:** Absender und Betreff jeder verarbeiteten Mail.
|
||
|
||
| Zugriff | Workflows und Operationen |
|
||
|---|---|
|
||
| schreibt | BCAT - Historische Mail-Analyse (inaktiv): `store_mail_event`<br>CAT - Postfach Pipeline: `store_mail_event`<br>MPA - Projekt-Ablage: `store_mail_event` |
|
||
| liest | KGW - KNOW Query Gateway: `find_mail_events, get_mail_events_summary, get_sender_profile`<br>MPA - Projekt-Ablage: `find_mail_events` |
|
||
|
||
<details><summary>11 Spalten</summary>
|
||
|
||
`id` BIGSERIAL, `message_id` TEXT, `mailbox` TEXT, `sender` TEXT, `subject` TEXT, `received_at` TIMESTAMPTZ, `category` TEXT, `assigned_project_key` TEXT, `workflow_status` TEXT, `raw_signals` JSONB, `last_processed_at` TIMESTAMPTZ
|
||
|
||
</details>
|
||
|
||
#### `sender_observations`
|
||
|
||
Absender-Profil je Postfach und Zeitfenster.
|
||
|
||
| Zugriff | Workflows und Operationen |
|
||
|---|---|
|
||
| schreibt | ASP - Absender-Profil Backfill: `upsert_sender_observation` |
|
||
| liest | KGW - KNOW Query Gateway: `get_sender_profile, list_sender_domains` |
|
||
|
||
<details><summary>25 Spalten</summary>
|
||
|
||
`id` BIGSERIAL, `observation_key` TEXT, `mailbox` TEXT, `email` TEXT, `registered_domain` TEXT, `display_name` TEXT, `window_from` TIMESTAMPTZ, `window_to` TIMESTAMPTZ, `mail_count` INTEGER, `junk_count` INTEGER, `category_histogram` JSONB, `dominant_category` TEXT, `dominant_share` NUMERIC, `avg_confidence` NUMERIC, `absender_typ` TEXT, `mail_art` TEXT, `unsubscribe_url` TEXT, `unsubscribe_mailto` TEXT, `unsubscribe_one_click` BOOLEAN, `first_mail_at` TIMESTAMPTZ, `last_mail_at` TIMESTAMPTZ, `subjects_sample` JSONB, `source` TEXT, `created_at` TIMESTAMPTZ, `updated_at` TIMESTAMPTZ
|
||
|
||
</details>
|
||
|
||
#### `platform_domains`
|
||
|
||
Bekannte Plattform-Domains.
|
||
|
||
| Zugriff | Workflows und Operationen |
|
||
|---|---|
|
||
| schreibt | ASP - Absender-Profil Backfill: `upsert_platform_domain` |
|
||
| liest | ASP - Absender-Profil Backfill: `find_platform_domain`<br>HMB - Postfach Backfill (inaktiv): `find_platform_domain`<br>KGW - KNOW Query Gateway: `get_sender_profile, list_sender_domains` |
|
||
|
||
<details><summary>9 Spalten</summary>
|
||
|
||
`id` BIGSERIAL, `registered_domain` TEXT, `display_name` TEXT, `status` TEXT, `source` TEXT, `evidence_json` JSONB, `first_seen_at` TIMESTAMPTZ, `last_seen_at` TIMESTAMPTZ, `updated_at` TIMESTAMPTZ
|
||
|
||
</details>
|
||
|
||
#### `mailbox_grants`
|
||
|
||
Zugriffsrechte auf Postfächer (delegierter Consent).
|
||
|
||
**Sensibel:** OAuth-Tokens, verschlüsselt (AES-256-GCM).
|
||
|
||
| Zugriff | Workflows und Operationen |
|
||
|---|---|
|
||
| schreibt | MPA - Delegated Consent: `upsert_mailbox_grant`<br>MPA - Get Mailbox Access: `upsert_mailbox_grant` |
|
||
| liest | MPA - Get Mailbox Access: `get_mailbox_grant`<br>MPA - Projekt-Ablage: `list_active_mailbox_grants` |
|
||
|
||
<details><summary>13 Spalten</summary>
|
||
|
||
`id` BIGSERIAL, `grant_key` TEXT, `provider` TEXT, `scope` TEXT, `token_ciphertext` TEXT, `token_iv` TEXT, `token_tag` TEXT, `token_alg` TEXT, `expires_hint` TIMESTAMPTZ, `status` TEXT, `source_workflow` TEXT, `created_at` TIMESTAMPTZ, `updated_at` TIMESTAMPTZ
|
||
|
||
</details>
|
||
|
||
### Kontakte und Projekte (KanBau)
|
||
|
||
#### `contacts`
|
||
|
||
Kontakte (Firmen, Personen).
|
||
|
||
**Sensibel:** Personenbezogen: E-Mail, Telefon, Steuer-Nr., USt-IdNr. (IBAN nur als Hash).
|
||
|
||
| Zugriff | Workflows und Operationen |
|
||
|---|---|
|
||
| schreibt | ASP - Absender-Profil Backfill: `upsert_contact`<br>BCAT - Historische Mail-Analyse (inaktiv): `update_sender_relevance`<br>KGW - KNOW Query Gateway: `update_sender_relevance, upsert_contact` |
|
||
| liest | ASP - Absender-Report: `SELECT (Report)`<br>CAT - Postfach Pipeline: `find_workflow_hints`<br>KGW - KNOW Query Gateway: `find_contact_candidates, find_workflow_hints, get_sender_profile`<br>OR - PDF and E-Rechnung Extraction (inaktiv): `find_workflow_hints` |
|
||
|
||
<details><summary>24 Spalten</summary>
|
||
|
||
`id` BIGSERIAL, `contact_key` TEXT, `contact_type` TEXT, `display_name` TEXT, `legal_name` TEXT, `normalized_name` TEXT, `email` TEXT, `phone` TEXT, `website` TEXT, `tax_id` TEXT, `vat_id` TEXT, `iban_hash` TEXT, `address_json` JSONB, `source` TEXT, `source_confidence` NUMERIC, `kanbau_address_id` TEXT, `raw_evidence_json` JSONB, `quality_status` TEXT, `first_seen_at` TIMESTAMPTZ, `last_seen_at` TIMESTAMPTZ, `verified_at` TIMESTAMPTZ, `created_at` TIMESTAMPTZ, `updated_at` TIMESTAMPTZ, `business_relevance_score` NUMERIC
|
||
|
||
</details>
|
||
|
||
#### `contact_aliases`
|
||
|
||
Schreibweisen von Kontakten.
|
||
|
||
| Zugriff | Workflows und Operationen |
|
||
|---|---|
|
||
| schreibt | – |
|
||
| liest | KGW - KNOW Query Gateway: `find_contact_candidates` |
|
||
|
||
<details><summary>11 Spalten</summary>
|
||
|
||
`id` BIGSERIAL, `alias_key` TEXT, `contact_key` TEXT, `alias_type` TEXT, `alias_value` TEXT, `normalized_value` TEXT, `source_workflow` TEXT, `confidence` NUMERIC, `evidence_json` JSONB, `quality_status` TEXT, `created_at` TIMESTAMPTZ
|
||
|
||
</details>
|
||
|
||
#### `contact_project_relations`
|
||
|
||
Kontakt ↔ Projekt.
|
||
|
||
| Zugriff | Workflows und Operationen |
|
||
|---|---|
|
||
| schreibt | – |
|
||
| liest | – |
|
||
|
||
<details><summary>12 Spalten</summary>
|
||
|
||
`id` BIGSERIAL, `relation_key` TEXT, `contact_key` TEXT, `project_key` TEXT, `relation_type` TEXT, `confidence` NUMERIC, `source_workflow` TEXT, `evidence_json` JSONB, `valid_from` DATE, `valid_to` DATE, `quality_status` TEXT, `created_at` TIMESTAMPTZ
|
||
|
||
</details>
|
||
|
||
#### `projects`
|
||
|
||
KanBau-Projekte mit Adresse.
|
||
|
||
| Zugriff | Workflows und Operationen |
|
||
|---|---|
|
||
| schreibt | – |
|
||
| liest | KGW - KNOW Query Gateway: `find_project_candidates, get_sender_profile`<br>NEX - Teams Chat Agent: `find_project_candidates` |
|
||
|
||
<details><summary>17 Spalten</summary>
|
||
|
||
`id` BIGSERIAL, `project_key` TEXT, `kanbau_project_id` TEXT, `project_number` TEXT, `project_name` TEXT, `short_code` TEXT, `company_context` TEXT, `street` TEXT, `zip` TEXT, `city` TEXT, `full_address` TEXT, `normalized_address` TEXT, `status` TEXT, `raw_kanbau_json` JSONB, `last_synced_at` TIMESTAMPTZ, `created_at` TIMESTAMPTZ, `updated_at` TIMESTAMPTZ
|
||
|
||
</details>
|
||
|
||
#### `project_aliases`
|
||
|
||
Aliase und gelernte Tokens zu Projekten.
|
||
|
||
| Zugriff | Workflows und Operationen |
|
||
|---|---|
|
||
| schreibt | KGW - KNOW Query Gateway: `purge_spf_aliases, upsert_project_alias`<br>MPA - Projekt-Ablage: `reject_project_alias, upsert_project_alias, upsert_project_alias_tokens` |
|
||
| liest | KGW - KNOW Query Gateway: `find_project_candidates, get_sender_profile, list_sender_domains`<br>NEX - Teams Chat Agent: `find_project_candidates`<br>PRO - Project Assignment: `find_project_by_alias` |
|
||
|
||
<details><summary>13 Spalten</summary>
|
||
|
||
`id` BIGSERIAL, `alias_key` TEXT, `project_key` TEXT, `kanbau_project_id` TEXT, `alias_type` TEXT, `alias_value` TEXT, `normalized_value` TEXT, `source_workflow` TEXT, `confidence` NUMERIC, `evidence_json` JSONB, `quality_status` TEXT, `verified_at` TIMESTAMPTZ, `created_at` TIMESTAMPTZ
|
||
|
||
</details>
|
||
|
||
#### `project_events`
|
||
|
||
Ereignisse aus Mails (Verzögerung, Mangel, Termin, Kosten).
|
||
|
||
| Zugriff | Workflows und Operationen |
|
||
|---|---|
|
||
| schreibt | MPA - Projekt-Ablage: `upsert_project_event` |
|
||
| liest | – |
|
||
|
||
<details><summary>15 Spalten</summary>
|
||
|
||
`id` BIGSERIAL, `message_id` TEXT, `project_key` TEXT, `mailbox` TEXT, `sender` TEXT, `event_date` TIMESTAMPTZ, `category` TEXT, `affected_unit` TEXT, `urgency` TEXT, `summary` TEXT, `sharepoint_path` TEXT, `quality_status` TEXT, `source_workflow` TEXT, `created_at` TIMESTAMPTZ, `updated_at` TIMESTAMPTZ
|
||
|
||
</details>
|
||
|
||
#### `project_folders`
|
||
|
||
SharePoint-Ordner je Projekt.
|
||
|
||
| Zugriff | Workflows und Operationen |
|
||
|---|---|
|
||
| schreibt | – |
|
||
| liest | – |
|
||
|
||
<details><summary>10 Spalten</summary>
|
||
|
||
`id` BIGSERIAL, `project_key` TEXT, `drive_id` TEXT, `folder_item_id` TEXT, `folder_path` TEXT, `folder_name` TEXT, `verified_at` TIMESTAMPTZ, `source_workflow` TEXT, `created_at` TIMESTAMPTZ, `updated_at` TIMESTAMPTZ
|
||
|
||
</details>
|
||
|
||
#### `project_companies`
|
||
|
||
Kürzel → Gesellschaft.
|
||
|
||
| Zugriff | Workflows und Operationen |
|
||
|---|---|
|
||
| schreibt | RAR - Rechnungsanschrift pruefen: `record_invoice_company` |
|
||
| liest | RAR - Rechnungsanschrift pruefen: `get_project_company` |
|
||
|
||
<details><summary>8 Spalten</summary>
|
||
|
||
`kuerzel` TEXT, `gesellschaft` TEXT, `quelle` TEXT, `bestaetigt` BOOLEAN, `baustelle` TEXT, `evidence_json` JSONB, `created_at` TIMESTAMPTZ, `updated_at` TIMESTAMPTZ
|
||
|
||
</details>
|
||
|
||
#### `invoice_company_observations`
|
||
|
||
Gesellschaft aus Rechnungen beobachtet.
|
||
|
||
| Zugriff | Workflows und Operationen |
|
||
|---|---|
|
||
| schreibt | RAR - Rechnungsanschrift pruefen: `record_invoice_company` |
|
||
| liest | RAR - Rechnungsanschrift pruefen: `get_project_company` |
|
||
|
||
<details><summary>8 Spalten</summary>
|
||
|
||
`message_id` TEXT, `file_name` TEXT, `kuerzel` TEXT, `gesellschaft` TEXT, `mailbox` TEXT, `source_workflow` TEXT, `created_at` TIMESTAMPTZ, `updated_at` TIMESTAMPTZ
|
||
|
||
</details>
|
||
|
||
### Dokumente
|
||
|
||
#### `document_extractions`
|
||
|
||
Extraktionen aus Anhängen.
|
||
|
||
**Sensibel:** Extrahierter Volltext von Anhängen.
|
||
|
||
| Zugriff | Workflows und Operationen |
|
||
|---|---|
|
||
| schreibt | KGW - KNOW Query Gateway: `store_document_extraction` |
|
||
| liest | – |
|
||
|
||
<details><summary>17 Spalten</summary>
|
||
|
||
`id` BIGSERIAL, `request_id` TEXT, `message_id` TEXT, `mailbox` TEXT, `attachment_id` TEXT, `file_name` TEXT, `content_type` TEXT, `extraction_source` TEXT, `document_type` TEXT, `sender_contact_key` TEXT, `project_key` TEXT, `extracted_text` TEXT, `structured_json` JSONB, `detected_addresses_json` JSONB, `detected_contacts_json` JSONB, `confidence` NUMERIC, `created_at` TIMESTAMPTZ
|
||
|
||
</details>
|
||
|
||
### Ankauf und Projektentwicklung (KAF)
|
||
|
||
#### `property_development_cases`
|
||
|
||
Ankaufsfälle (~70 Felder).
|
||
|
||
**Sensibel:** Kaufpreise, Provisionen und Besprechungsmitschriften.
|
||
|
||
| Zugriff | Workflows und Operationen |
|
||
|---|---|
|
||
| schreibt | – |
|
||
| liest | KGW - KNOW Query Gateway: `find_cases_by_deadline, find_cases_missing_documents, find_cases_needing_next_action, find_cases_with_offer_status, find_property_development_candidates, summarize_property_development_case` |
|
||
|
||
<details><summary>73 Spalten</summary>
|
||
|
||
`id` BIGSERIAL, `case_key` TEXT, `name` TEXT, `normalized_name` TEXT, `status` TEXT, `pipeline_status` TEXT, `outcome_status` TEXT, `case_code` TEXT, `case_opened_at` DATE, `folder_name` TEXT, `folder_path` TEXT, `folder_status_source` TEXT, `source_channel` TEXT, `location_city` TEXT, `location_district` TEXT, `street_address` TEXT, `assigned_to` TEXT, `asset_type` TEXT, `process_type` TEXT, `notes` TEXT, `property_size_sqm` NUMERIC, `original_purchase_price_eur` NUMERIC, `average_price_per_sqm_eur` NUMERIC, `commission_including_vat` TEXT, `apartment_count` INTEGER, `development_plan_available` BOOLEAN, `godel_internal` BOOLEAN, `contact_broker` TEXT, `start_date` DATE, `offer_deadline` DATE, `offer_submitted_at` DATE, `last_offer_at` DATE, `offer_count` INTEGER, `review_status` TEXT, `review_result` TEXT, `meeting_transcripts` TEXT, `just_one_week_more` BOOLEAN, `deadline_is_overdue` BOOLEAN, `godel_offer` TEXT, `project_lead` TEXT, `planning` TEXT, `nda_present` BOOLEAN, `loi_present` BOOLEAN, `bplan_document_present` BOOLEAN, `wirtschaftlichkeit_present` BOOLEAN, `purchase_offer_present` BOOLEAN, `building_permit_present` BOOLEAN, `risk_summary` TEXT, `missing_documents` JSONB, `next_action` TEXT, `next_action_due_at` DATE, `last_document_at` DATE, `document_count` INTEGER, `case_readiness` TEXT, `detected_documents` JSONB, `risk_level` TEXT, `readiness_json` JSONB, `source_system` TEXT, `sharepoint_json` JSONB, `raw_evidence_json` JSONB, `quality_status` TEXT, `confidence` NUMERIC, `first_seen_at` TIMESTAMPTZ, `last_seen_at` TIMESTAMPTZ, `created_at` TIMESTAMPTZ, `updated_at` TIMESTAMPTZ, `confirmation_token_hash` TEXT, `confirmation_status` TEXT, `confirmation_expires_at` TIMESTAMPTZ, `selected_project_id` TEXT, `created_saleagr_id` TEXT, `created_saleagr_url` TEXT, `confirmation_request_id` TEXT, `confirmed_by` TEXT (Laufzeit-DDL, B6), `confirmed_at` TIMESTAMPTZ (Laufzeit-DDL, B6)
|
||
|
||
</details>
|
||
|
||
#### `property_development_documents`
|
||
|
||
Dokumente je Ankaufsfall.
|
||
|
||
| Zugriff | Workflows und Operationen |
|
||
|---|---|
|
||
| schreibt | – |
|
||
| liest | KGW - KNOW Query Gateway: `summarize_property_development_case` |
|
||
|
||
<details><summary>20 Spalten</summary>
|
||
|
||
`id` BIGSERIAL, `case_key` TEXT, `document_key` TEXT, `sharepoint_item_id` TEXT, `file_name` TEXT, `file_path` TEXT, `folder_segment` TEXT, `document_type` TEXT, `document_date` DATE, `received_at` DATE, `author_or_sender` TEXT, `source_party` TEXT, `extracted_summary` TEXT, `extracted_fields_json` JSONB, `confidence` NUMERIC, `is_current_version` BOOLEAN, `supersedes_document_key` TEXT, `processing_status` TEXT, `created_at` TIMESTAMPTZ, `updated_at` TIMESTAMPTZ
|
||
|
||
</details>
|
||
|
||
#### `kaf_review_snapshots`
|
||
|
||
Prüfstände von Kaufverträgen.
|
||
|
||
**Sensibel:** Kaufvertragsfelder und Prüfer.
|
||
|
||
| Zugriff | Workflows und Operationen |
|
||
|---|---|
|
||
| schreibt | KAF - Bestätigung Webhook: `complete_kaf_review`<br>KAF - Kaufvertrag Erkennung und Extraktion: `store_kaf_review_snapshot` |
|
||
| liest | KAF - Bestätigung Webhook: `get_kaf_review_snapshot` |
|
||
|
||
<details><summary>22 Spalten</summary>
|
||
|
||
`id` BIGSERIAL, `case_key` TEXT, `review_schema_version` TEXT, `confirmation_token_hash` TEXT, `confirmation_expires_at` TIMESTAMPTZ, `review_status` TEXT, `request_id` TEXT, `review_to` TEXT, `delivery_mode` TEXT, `original_json` JSONB, `distribution_json` JSONB, `fields_json` JSONB, `units_json` JSONB, `artifacts_json` JSONB, `reviewed_values_json` JSONB, `review_comment` TEXT, `reviewed_by` TEXT, `review_identity_source` TEXT, `review_submission_hash` TEXT, `reviewed_at` TIMESTAMPTZ, `created_at` TIMESTAMPTZ, `updated_at` TIMESTAMPTZ
|
||
|
||
</details>
|
||
|
||
#### `kanzlei_field_patterns`
|
||
|
||
Feldmuster je Notarkanzlei.
|
||
|
||
| Zugriff | Workflows und Operationen |
|
||
|---|---|
|
||
| schreibt | KAF - Kaufvertrag Erkennung und Extraktion: `upsert_kanzlei_field_patterns` |
|
||
| liest | KAF - Kaufvertrag Erkennung und Extraktion: `get_kanzlei_field_patterns` |
|
||
|
||
<details><summary>4 Spalten</summary>
|
||
|
||
`kanzlei_key` TEXT, `kanzlei_display` TEXT, `patterns` JSONB, `updated_at` TIMESTAMPTZ
|
||
|
||
</details>
|
||
|
||
#### `kanzlei_project_relations`
|
||
|
||
Kanzlei ↔ Projekt.
|
||
|
||
| Zugriff | Workflows und Operationen |
|
||
|---|---|
|
||
| schreibt | KAF - Kaufvertrag Erkennung und Extraktion: `upsert_kanzlei_project_relation` |
|
||
| liest | – |
|
||
|
||
<details><summary>6 Spalten</summary>
|
||
|
||
`relation_key` TEXT, `kanzlei_key` TEXT, `project_key` TEXT, `project_name` TEXT, `notar_name` TEXT, `updated_at` TIMESTAMPTZ
|
||
|
||
</details>
|
||
|
||
#### `place_enrichments`
|
||
|
||
Adresse → Flurstück, Koordinaten.
|
||
|
||
| Zugriff | Workflows und Operationen |
|
||
|---|---|
|
||
| schreibt | – |
|
||
| liest | – |
|
||
|
||
<details><summary>15 Spalten</summary>
|
||
|
||
`id` BIGSERIAL, `place_key` TEXT, `input_address` TEXT, `match_address` TEXT, `flurstueck` TEXT, `lat` DOUBLE, `lon` DOUBLE, `bundesland` TEXT, `enrichment_json` JSONB, `provenance_json` JSONB, `quality_status` TEXT, `confidence` DOUBLE, `source_workflow` TEXT, `created_at` TIMESTAMPTZ, `refreshed_at` TIMESTAMPTZ
|
||
|
||
</details>
|
||
|
||
### Buchhaltung
|
||
|
||
#### `bel_processed_belege`
|
||
|
||
Verarbeitete SEPA-Belege.
|
||
|
||
**Sensibel:** Bank, Konto-Referenz und Beträge.
|
||
|
||
| Zugriff | Workflows und Operationen |
|
||
|---|---|
|
||
| schreibt | BEL - SEPA-Beleg-Verteilung: `confirm_beleg_uploaded, reserve_beleg` |
|
||
| liest | – |
|
||
|
||
<details><summary>15 Spalten</summary>
|
||
|
||
`id` BIGSERIAL, `beleg_hash` TEXT, `status` TEXT, `bank` TEXT, `account_ref` TEXT, `amount_cents` BIGINT, `sharepoint_path` TEXT, `export_ref` TEXT, `request_id` TEXT, `raw_evidence_json` JSONB, `reserved_at` TIMESTAMPTZ, `uploaded_at` TIMESTAMPTZ, `last_seen_at` TIMESTAMPTZ, `created_at` TIMESTAMPTZ, `updated_at` TIMESTAMPTZ
|
||
|
||
</details>
|
||
|
||
### Lernen und Workflow-Gedächtnis
|
||
|
||
#### `workflow_decisions`
|
||
|
||
Vorschlag vs. tatsächliche Entscheidung.
|
||
|
||
| Zugriff | Workflows und Operationen |
|
||
|---|---|
|
||
| schreibt | – |
|
||
| liest | – |
|
||
|
||
<details><summary>13 Spalten</summary>
|
||
|
||
`id` BIGSERIAL, `request_id` TEXT, `workflow` TEXT, `reference_type` TEXT, `reference_id` TEXT, `proposed_decision` JSONB, `final_decision` JSONB, `confidence` NUMERIC, `correction_reason` TEXT, `quality_status` TEXT, `created_at` TIMESTAMPTZ, `verified_at` TIMESTAMPTZ, `decision_type` TEXT, `decided_by` TEXT, `updated_at` TIMESTAMPTZ
|
||
|
||
</details>
|
||
|
||
#### `workflow_hints`
|
||
|
||
Gelernte Muster mit Bestätigung.
|
||
|
||
| Zugriff | Workflows und Operationen |
|
||
|---|---|
|
||
| schreibt | ASP - Absender-Profil Backfill: `backfill_workflow_hint`<br>CAT - Postfach Pipeline: `UPDATE … SET notified_at, pending_notification, upsert_workflow_hint`<br>KAN - Kanbau API Gateway: `upsert_workflow_hint`<br>KGW - KNOW Query Gateway: `promote_workflow_hint, reject_workflow_hint, upsert_workflow_hint`<br>KNOW - Hint Confirmation Webhook: `promote_workflow_hint, reject_workflow_hint`<br>OR - PDF and E-Rechnung Extraction (inaktiv): `upsert_workflow_hint` |
|
||
| liest | CAT - Postfach Pipeline: `find_workflow_hints, get_pending_hint_proposals`<br>KGW - KNOW Query Gateway: `find_workflow_hints, get_pending_hint_proposals, get_sender_profile, summarize_workflow_lessons`<br>OR - PDF and E-Rechnung Extraction (inaktiv): `find_workflow_hints` |
|
||
|
||
<details><summary>15 Spalten</summary>
|
||
|
||
`hint_key` TEXT, `workflow` TEXT, `hint_type` TEXT, `pattern_key` TEXT, `pattern_value` TEXT, `suggested_action` JSONB, `observation_count` INTEGER, `confidence` NUMERIC, `quality_status` TEXT, `pending_notification` BOOLEAN, `notified_at` TIMESTAMPTZ, `confirmed_at` TIMESTAMPTZ, `confirmed_by` TEXT, `created_at` TIMESTAMPTZ, `updated_at` TIMESTAMPTZ
|
||
|
||
</details>
|
||
|
||
#### `workflow_hint_config`
|
||
|
||
Ab wann die KI übersprungen wird.
|
||
|
||
| Zugriff | Workflows und Operationen |
|
||
|---|---|
|
||
| schreibt | – |
|
||
| liest | BCAT - Historische Mail-Analyse (inaktiv): `update_sender_relevance`<br>CAT - Postfach Pipeline: `find_workflow_hints, get_pending_hint_proposals, upsert_workflow_hint`<br>KAN - Kanbau API Gateway: `upsert_workflow_hint`<br>KGW - KNOW Query Gateway: `find_workflow_hints, get_hint_config, get_pending_hint_proposals, summarize_workflow_lessons, update_sender_relevance, upsert_workflow_hint`<br>OR - PDF and E-Rechnung Extraction (inaktiv): `find_workflow_hints, upsert_workflow_hint` |
|
||
|
||
<details><summary>10 Spalten</summary>
|
||
|
||
`config_key` TEXT, `min_observations_for_skip_ai` INTEGER, `priority_level` TEXT, `preferred_model` TEXT, `safety_floor` BOOLEAN, `relevance_weight` NUMERIC, `outlook_category` TEXT, `requires_action` BOOLEAN, `description` TEXT, `updated_at` TIMESTAMPTZ
|
||
|
||
</details>
|
||
|
||
#### `kanbau_method_examples`
|
||
|
||
Beispiele je KanBau-API-Methode.
|
||
|
||
| Zugriff | Workflows und Operationen |
|
||
|---|---|
|
||
| schreibt | KAN - Kanbau API Gateway: `upsert_kanbau_method_example` |
|
||
| liest | KGW - KNOW Query Gateway: `get_kanbau_method_example` |
|
||
|
||
<details><summary>7 Spalten</summary>
|
||
|
||
`method_key` TEXT, `swagger_ref` TEXT, `example_request` JSONB, `example_response` JSONB, `validated_at` TIMESTAMPTZ, `created_at` TIMESTAMPTZ, `updated_at` TIMESTAMPTZ
|
||
|
||
</details>
|
||
|
||
### Agent
|
||
|
||
#### `agent_capabilities`
|
||
|
||
Fähigkeiten eines Agenten.
|
||
|
||
| Zugriff | Workflows und Operationen |
|
||
|---|---|
|
||
| schreibt | – |
|
||
| liest | – |
|
||
|
||
<details><summary>14 Spalten</summary>
|
||
|
||
`id` BIGSERIAL, `scope_key` TEXT, `capability_key` TEXT, `title` TEXT, `description` TEXT, `intent_examples` JSONB, `workflow_name` TEXT, `workflow_operation` TEXT, `read_or_write` TEXT, `risk_level` TEXT, `requires_approval` BOOLEAN, `enabled` BOOLEAN, `created_at` TIMESTAMPTZ, `updated_at` TIMESTAMPTZ
|
||
|
||
</details>
|
||
|
||
#### `agent_context_documents`
|
||
|
||
Kontextdokumente für Agenten.
|
||
|
||
**Sensibel:** Volltext eingelesener Dokumente.
|
||
|
||
| Zugriff | Workflows und Operationen |
|
||
|---|---|
|
||
| schreibt | – |
|
||
| liest | – |
|
||
|
||
<details><summary>8 Spalten</summary>
|
||
|
||
`id` BIGSERIAL, `scope_key` TEXT, `source_path` TEXT, `document_type` TEXT, `title` TEXT, `content` TEXT, `content_hash` TEXT, `last_ingested_at` TIMESTAMPTZ
|
||
|
||
</details>
|
||
|
||
#### `agent_execution_log`
|
||
|
||
Protokoll der Agent-Aufrufe.
|
||
|
||
| Zugriff | Workflows und Operationen |
|
||
|---|---|
|
||
| schreibt | – |
|
||
| liest | – |
|
||
|
||
<details><summary>10 Spalten</summary>
|
||
|
||
`id` BIGSERIAL, `request_id` TEXT, `agent_scope` TEXT, `user_request` TEXT, `selected_capability` TEXT, `workflow_called` TEXT, `inputs_json` JSONB, `status` TEXT, `errors_json` JSONB, `created_at` TIMESTAMPTZ
|
||
|
||
</details>
|
||
|
||
### Browser-Automation (BSB)
|
||
|
||
#### `session_providers`
|
||
|
||
Login-Abläufe für Browser-Automation.
|
||
|
||
| Zugriff | Workflows und Operationen |
|
||
|---|---|
|
||
| schreibt | BSB - Discover Session: `upsert_session_provider` |
|
||
| liest | BSB - Get Session: `get_session_provider` |
|
||
|
||
<details><summary>10 Spalten</summary>
|
||
|
||
`provider_id` TEXT, `display_name` TEXT, `login_url` TEXT, `auth_type` TEXT, `steps_json` JSONB, `credential_key` TEXT, `max_session_age_minutes` INTEGER, `notes` TEXT, `created_at` TIMESTAMPTZ, `updated_at` TIMESTAMPTZ
|
||
|
||
</details>
|
||
|
||
#### `browser_sessions`
|
||
|
||
Gespeicherte Browser-Sessions.
|
||
|
||
**Sensibel:** Session-Daten als JSON; am Schema nicht erkennbar, ob verschlüsselt.
|
||
|
||
| Zugriff | Workflows und Operationen |
|
||
|---|---|
|
||
| schreibt | BSB - Execute Login: `upsert_browser_session` |
|
||
| liest | BSB - Get Session: `get_browser_session` |
|
||
|
||
<details><summary>5 Spalten</summary>
|
||
|
||
`provider_id` TEXT, `session_data` JSONB, `expires_at` TIMESTAMPTZ, `created_at` TIMESTAMPTZ, `updated_at` TIMESTAMPTZ
|
||
|
||
</details>
|
||
|
||
### LLM-Worker
|
||
|
||
#### `llm_workers`
|
||
|
||
Registrierte lokale LLM-Worker.
|
||
|
||
| Zugriff | Workflows und Operationen |
|
||
|---|---|
|
||
| schreibt | LLM - Job Poll: `claim_llm_job`<br>LLM - Worker Registry: `update_llm_worker_status, upsert_llm_worker` |
|
||
| liest | KGW - KNOW Query Gateway: `find_active_llm_workers`<br>LLM - Router: `find_active_llm_workers` |
|
||
|
||
<details><summary>12 Spalten</summary>
|
||
|
||
`id` BIGSERIAL, `mac` TEXT, `host` TEXT, `model` TEXT, `tier` TEXT, `tier_rank` SMALLINT, `status` TEXT, `hardware_json` JSONB, `last_seen_at` TIMESTAMPTZ, `registered_at` TIMESTAMPTZ, `updated_at` TIMESTAMPTZ, `endpoint` JSONB
|
||
|
||
</details>
|
||
|
||
#### `llm_worker_blocklist`
|
||
|
||
Gesperrte Worker.
|
||
|
||
| Zugriff | Workflows und Operationen |
|
||
|---|---|
|
||
| schreibt | LLM - Worker Registry: `blocklist_llm_worker` |
|
||
| liest | – |
|
||
|
||
<details><summary>6 Spalten</summary>
|
||
|
||
`id` BIGSERIAL, `mac` TEXT, `host` TEXT, `reason` TEXT, `hardware_json` JSONB, `blocked_at` TIMESTAMPTZ
|
||
|
||
</details>
|
||
|
||
#### `llm_jobs`
|
||
|
||
Job-Board für lokale LLMs.
|
||
|
||
**Sensibel:** Prompt und Ergebnis im Klartext.
|
||
|
||
| Zugriff | Workflows und Operationen |
|
||
|---|---|
|
||
| schreibt | LLM - Job Poll: `claim_llm_job`<br>LLM - Job Submit: `enqueue_llm_job`<br>LLM - Result Handler: `complete_llm_job`<br>LLM - Router: `cancel_llm_job, enqueue_llm_job` |
|
||
| liest | KGW - KNOW Query Gateway: `find_active_llm_workers`<br>LLM - Router: `find_active_llm_workers, get_llm_job` |
|
||
|
||
<details><summary>16 Spalten</summary>
|
||
|
||
`id` BIGSERIAL, `job_id` TEXT, `prompt` TEXT, `min_tier` TEXT, `min_tier_rank` SMALLINT, `status` TEXT, `assigned_to` TEXT, `model` TEXT, `tier` TEXT, `result` TEXT, `duration_ms` INTEGER, `error_message` TEXT, `created_at` TIMESTAMPTZ, `assigned_at` TIMESTAMPTZ, `completed_at` TIMESTAMPTZ, `updated_at` TIMESTAMPTZ
|
||
|
||
</details>
|
||
|