Architektur & Transfer Pipeline

Der Versand eines Belegs läuft in **vier Stufen**, von denen die letzten zwei asynchron über die Job Queue laufen (damit PDF-Rendering und der eigentliche REST-Upload die Benutzer-Session nicht blockieren):

```
Beleg (Buchen/Drucken/Archivieren)               Benutzer-Aktion "An d.velop senden"
       │                                                     │
       └──────────────────┬──────────────────────────────────┘
                           ▼
  Stufe 1  KWG_DocTransferDocReferenceMgt.SendToDvelop(...)
           → prüft KWG_DocTransActiveDocSetup (aktiv? automatisch/manuell?)
           → legt KWG_DocumentTransferReference an (Status = New)
                           │
                           ▼
  Stufe 2  KWG_DocTransUploadQueueManager
           → baut JSON-Payload aus KWG_DocumentTransMappingTables/-Fields
           → legt KWG_UploadQueue-Eintrag an
           → erzeugt Job Queue Entry → Codeunit KWG_DocumentTransferHelper
           → Reference-Status = Queued
                           │
                           ▼ (Job Queue, je Beleg)
  Stufe 3  KWG_DocumentTransferHelper.OnRun (TableNo = Job Queue Entry)
           → rendert Beleg als PDF (Report Selections / Report.SaveAs)
           → speichert PDF in KWG_UploadQueue.Document
           → KWG_UploadQueue.Status = Waiting
             (entfällt bei Anhängen/Drag&Drop – Datei liegt bereits vor)
                           │
                           ▼ (Job Queue, wiederkehrend)
  Stufe 4  KWG_DocTransJobQueueDispatcher → KWG_DocTransferDocReferenceMgt.Upload()
           → holt alle Reference-Datensätze mit Status = Queued
           → KWG_DocTransFileUploadRestMgt.UploadDocumentToDvelop:
               1. POST PDF-Chunk  → /dms/r/{Repo}/blob/chunk/  → contentLocationUri
               2. contentLocationUri in Payload einsetzen
               3. POST Payload    → /dms/r/{Repo}/o2m           → d.velop-Dokument-ID/-URL
           → Erfolg: Reference-Status = Upload, d.velop-ID/-URL gespeichert, Queue-Eintrag gelöscht
           → Fehler: Reference-Status = Error, KWG_ErrorProtocol-Eintrag, Fehler in "Error Messages" sichtbar
```

**Wichtig:**
- Die **automatische** Auslösung (Stufe 1) hängt an Standard-BC-Events (`Sales-Printed`, `Purch.Header-Printed`, `OnAfterInsertEvent` der gebuchten Kopftabellen, `ArchiveManagement`-Events, `Document Attachment.OnAfterInsertEvent`).
- Die **manuelle** Auslösung erfolgt über die Aktion „An d.velop senden" auf Beleg-Karten (Einzelbeleg) bzw. per Mehrfachauswahl auf Listenseiten (`KWG_DocumentTransferBatch`).
- Ob automatisch, manuell oder beides gilt, wird pro Belegart/Dokumenttyp in **Aktive Belegübertragungen** (`KWG_DocTransActiveDocSetup`) festgelegt (Enum `KWG_DocTransferTransferType`).
- Die wiederkehrende Job-Queue-Eintrag für `KWG_DocTransJobQueueDispatcher` (Stufe 4) muss einmalig manuell angelegt werden – die App legt ihn nicht automatisch an.

---