# Job JSON Struktur Diese Dokumentation beschreibt die JSON-Struktur eines Jobs mit allen zugehörigen Tasks. ## Job Objekt ```json { "id": "507f1f77bcf86cd799439011", "jobNumber": "JOB-2024-001", "status": "CREATED", "createdAt": "2024-01-15T10:30:00", "updatedAt": "2024-01-15T14:45:00", "createdBy": "admin@example.com", "isDraft": false, "customerSelection": "Kunde01", "pickupCompany": "Absender GmbH", "pickupSalutation": "Herr", "pickupFirstName": "Max", "pickupLastName": "Mustermann", "pickupPhone": "+49 123 456789", "pickupStreet": "Musterstraße", "pickupHouseNumber": "42", "pickupAddressAddition": "2. OG", "pickupZip": "12345", "pickupCity": "Musterstadt", "deliveryCompany": "Empfänger AG", "deliverySalutation": "Frau", "deliveryFirstName": "Erika", "deliveryLastName": "Musterfrau", "deliveryPhone": "+49 987 654321", "deliveryStreet": "Beispielweg", "deliveryHouseNumber": "7", "deliveryAddressAddition": null, "deliveryZip": "54321", "deliveryCity": "Beispielstadt", "digitalProcessing": true, "appUser": "fahrer01", "pickupDate": "2024-01-20", "deliveryDate": "2024-01-21", "remark": "Bitte zwischen 9-12 Uhr liefern", "price": 150.00 } ``` ## Job Status Werte | Status | Display Name | Beschreibung | |--------|-------------|--------------| | `CREATED` | Erstellt | Job wurde angelegt | | `IN_PROGRESS` | In Bearbeitung | Job wird bearbeitet | | `PICKUP_SCHEDULED` | Abholung geplant | Abholtermin wurde festgelegt | | `PICKED_UP` | Abgeholt | Ware wurde abgeholt | | `IN_TRANSIT` | Unterwegs | Ware ist auf dem Transportweg | | `DELIVERED` | Zugestellt | Ware wurde zugestellt | | `COMPLETED` | Abgeschlossen | Job vollständig abgeschlossen | | `CANCELLED` | Storniert | Job wurde storniert | ## Task Struktur Tasks sind polymorph und haben eine gemeinsame Basisstruktur plus typspezifische Daten. ### Basis Task Felder ```json { "id": "507f1f77bcf86cd799439012", "jobId": "507f1f77bcf86cd799439011", "taskType": "PHOTO", "taskOrder": 1, "description": "Fotos der Ware bei Abholung", "completed": false, "completedAt": null, "completedBy": null, "taskSpecificData": { ... } } ``` ### Task Typen | TaskType | Display Name | Beschreibung | |----------|-------------|--------------| | `CONFIRMATION` | Bestätigung | Einfache Bestätigung per Button | | `SIGNATURE` | Unterschrift | Unterschrift erfassen | | `TODOLIST` | To-Do Liste | Checkliste mit Punkten | | `PHOTO` | Foto | Fotos aufnehmen | | `BARCODE` | Barcode | Barcodes scannen | | `COMMENT` | Kommentar | Textkommentar eingeben | --- ## Task Beispiele nach Typ ### CONFIRMATION Task ```json { "id": "507f1f77bcf86cd799439012", "jobId": "507f1f77bcf86cd799439011", "taskType": "CONFIRMATION", "taskOrder": 1, "description": "Bitte bestätigen Sie die Übernahme der Ware", "completed": false, "completedAt": null, "completedBy": null, "taskSpecificData": { "taskType": "CONFIRMATION", "buttonText": "Ware übernommen" } } ``` ### SIGNATURE Task ```json { "id": "507f1f77bcf86cd799439013", "jobId": "507f1f77bcf86cd799439011", "taskType": "SIGNATURE", "taskOrder": 2, "description": "Unterschrift des Empfängers", "completed": false, "completedAt": null, "completedBy": null, "taskSpecificData": { "taskType": "SIGNATURE" } } ``` ### PHOTO Task ```json { "id": "507f1f77bcf86cd799439014", "jobId": "507f1f77bcf86cd799439011", "taskType": "PHOTO", "taskOrder": 3, "description": "Fotos der Ware bei Abholung", "completed": false, "completedAt": null, "completedBy": null, "taskSpecificData": { "taskType": "PHOTO", "minPhotoCount": 1, "maxPhotoCount": 5 } } ``` ### BARCODE Task ```json { "id": "507f1f77bcf86cd799439015", "jobId": "507f1f77bcf86cd799439011", "taskType": "BARCODE", "taskOrder": 4, "description": "Scannen Sie alle Pakete", "completed": false, "completedAt": null, "completedBy": null, "taskSpecificData": { "taskType": "BARCODE", "minBarcodeCount": 1, "maxBarcodeCount": 10 } } ``` ### TODOLIST Task ```json { "id": "507f1f77bcf86cd799439016", "jobId": "507f1f77bcf86cd799439011", "taskType": "TODOLIST", "taskOrder": 5, "description": "Checkliste vor Auslieferung", "completed": false, "completedAt": null, "completedBy": null, "taskSpecificData": { "taskType": "TODOLIST", "todoItems": [ "Verpackung auf Beschädigungen prüfen", "Anzahl der Pakete kontrollieren", "Lieferschein beiliegen" ] } } ``` ### COMMENT Task ```json { "id": "507f1f77bcf86cd799439017", "jobId": "507f1f77bcf86cd799439011", "taskType": "COMMENT", "taskOrder": 6, "description": "Anmerkungen zur Lieferung", "completed": false, "completedAt": null, "completedBy": null, "taskSpecificData": { "taskType": "COMMENT", "commentText": null, "required": false } } ``` --- ## Vollständiges Beispiel: Job mit Tasks ```json { "job": { "id": "507f1f77bcf86cd799439011", "jobNumber": "JOB-2024-001", "status": "IN_PROGRESS", "createdAt": "2024-01-15T10:30:00", "updatedAt": "2024-01-15T14:45:00", "createdBy": "admin@example.com", "isDraft": false, "customerSelection": "Kunde01", "pickupCompany": "Absender GmbH", "pickupSalutation": "Herr", "pickupFirstName": "Max", "pickupLastName": "Mustermann", "pickupPhone": "+49 123 456789", "pickupStreet": "Musterstraße", "pickupHouseNumber": "42", "pickupAddressAddition": "2. OG", "pickupZip": "12345", "pickupCity": "Musterstadt", "deliveryCompany": "Empfänger AG", "deliverySalutation": "Frau", "deliveryFirstName": "Erika", "deliveryLastName": "Musterfrau", "deliveryPhone": "+49 987 654321", "deliveryStreet": "Beispielweg", "deliveryHouseNumber": "7", "deliveryAddressAddition": null, "deliveryZip": "54321", "deliveryCity": "Beispielstadt", "digitalProcessing": true, "appUser": "fahrer01", "pickupDate": "2024-01-20", "deliveryDate": "2024-01-21", "remark": "Bitte zwischen 9-12 Uhr liefern", "price": 150.00 }, "tasks": [ { "id": "507f1f77bcf86cd799439012", "jobId": "507f1f77bcf86cd799439011", "taskType": "CONFIRMATION", "taskOrder": 1, "description": "Ware übernommen bestätigen", "completed": true, "completedAt": "2024-01-20T09:15:00", "completedBy": "fahrer01", "taskSpecificData": { "taskType": "CONFIRMATION", "buttonText": "Ware übernommen" } }, { "id": "507f1f77bcf86cd799439013", "jobId": "507f1f77bcf86cd799439011", "taskType": "PHOTO", "taskOrder": 2, "description": "Fotos bei Abholung", "completed": true, "completedAt": "2024-01-20T09:20:00", "completedBy": "fahrer01", "taskSpecificData": { "taskType": "PHOTO", "minPhotoCount": 2, "maxPhotoCount": 5 } }, { "id": "507f1f77bcf86cd799439014", "jobId": "507f1f77bcf86cd799439011", "taskType": "BARCODE", "taskOrder": 3, "description": "Pakete scannen", "completed": false, "completedAt": null, "completedBy": null, "taskSpecificData": { "taskType": "BARCODE", "minBarcodeCount": 1, "maxBarcodeCount": 3 } }, { "id": "507f1f77bcf86cd799439015", "jobId": "507f1f77bcf86cd799439011", "taskType": "SIGNATURE", "taskOrder": 4, "description": "Unterschrift Empfänger", "completed": false, "completedAt": null, "completedBy": null, "taskSpecificData": { "taskType": "SIGNATURE" } } ] } ``` --- ## Feldtypen Referenz | Feld | Typ | Nullable | Beschreibung | |------|-----|----------|--------------| | `id` | String (ObjectId) | Nein | MongoDB ObjectId als String | | `jobNumber` | String | Nein | Eindeutige Auftragsnummer | | `status` | String (Enum) | Nein | Siehe Job Status Werte | | `createdAt` | ISO DateTime | Nein | Erstellungszeitpunkt | | `updatedAt` | ISO DateTime | Ja | Letzter Änderungszeitpunkt | | `createdBy` | String | Nein | Benutzername des Erstellers | | `isDraft` | Boolean | Nein | Entwurf-Kennzeichen | | `pickupDate` | ISO Date | Ja | Abholdatum | | `deliveryDate` | ISO Date | Ja | Lieferdatum | | `price` | Decimal | Ja | Preis in EUR (netto) | | `taskOrder` | Integer | Nein | Reihenfolge der Tasks (0-basiert) | | `completed` | Boolean | Nein | Task abgeschlossen | | `completedAt` | ISO DateTime | Ja | Abschlusszeitpunkt | | `completedBy` | String | Ja | App-User der den Task abgeschlossen hat |