Erweiterungen

This commit is contained in:
2026-01-26 09:39:41 +01:00
parent 5111d6b4f5
commit 608417331b
9 changed files with 2392 additions and 3 deletions

343
docs/JOB_JSON.md Normal file
View File

@@ -0,0 +1,343 @@
# 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 |