Enam field di bawah ini adalah satu-satunya yang saat ini dibaca aplikasi ODE (tabel delivery_order). Field bertanda * wajib.
Dipakai untuk login driver, validasi nopol (CP1), dan tampilan. Bentuknya mengikuti kontrak company-master-sync.
Koordinat + radius dipakai untuk uji geofence CP3/CP6. Default radius 150 m (usulan ODE-OD-004).
Tersimpan di localStorage browser ini. Export untuk dipakai sebagai payload ingestion.
| Nomor DO | Status | Driver | Kendaraan | Customer | Muatan | Aksi |
|---|
Tahap trial: unggah dokumen → periksa → isi form di samping. OCR otomatis belum aktif; teks hasil scan bisa ditempel untuk ekstraksi awal.
Nomor DO, tanggal, nopol, telepon, berat, jumlah koli. Nama/alamat tetap manual karena format surat jalan tiap perusahaan berbeda.
Butuh service OCR (Tesseract/PaddleOCR) + antrean + layar konfirmasi. Jangan auto-commit ke DB tanpa persetujuan manusia — satu salah baca nopol bisa menggagalkan CP1.
Untuk memasukkan banyak DO sekaligus. Format CSV memakai header yang sama dengan template.
doNumber, status, origin, driverRef, vehicleRef, customerRef,
driverName, driverPhone, customerName, cargoDescription, cargoWeightKg,
originName, originLat, originLng, destName, destLat, destLng
Kolom lain opsional dan akan diisi kosong bila tidak ada.
ODE saat ini read-only untuk DO: belum ada endpoint pembuat DO. Kontrak di bawah adalah usulan agar tiga jalur (entry, scan, API) memakai bentuk data yang sama.
POST /v1/admin/delivery-orders
Authorization: Bearer <staff-token>
Idempotency-Key: <uuid>
Content-Type: application/json
{
"doNumber": "DO-2026-10-0001",
"status": "ASSIGNED",
"origin": "company_sync",
"externalSourceId": "ERP-778812",
"driverRef": "DRV-001",
"vehicleRef": "B 9012 XYZ",
"customerRef": "CUST-001",
"master": {
"driver": { "name": "...", "phone": "...", "vehicleRegistrationNumber": "B 9012 XYZ", "vehicleType": "CDD Long" },
"vehicle": { "registrationNumber": "B 9012 XYZ", "type": "CDD Long" },
"customer":{ "name": "...", "phone": "...", "address": "..." },
"locations": [
{ "locationId": "LOC-POOL-01", "name": "Pool Cakung", "type": "loading",
"latitude": -6.1823, "longitude": 106.9437, "geofenceRadiusOverride": 150 }
]
},
"operational": { "...": "lihat tab Panduan Field" }
}
Respons yang diharapkan: 201 Created atau 200 OK dengan replayed: true bila Idempotency-Key sama. Duplikat doNumber → 409 CONFLICT.
| Jalur | Cocok untuk | Status hari ini | Yang perlu dibangun |
|---|---|---|---|
| Entri manual | Volume rendah, koreksi cepat, trial | belum ada di ODE | Form ini + endpoint create |
| Import PDF/scan | DO dari pihak lain / arsip kertas | belum ada | Upload + OCR + layar konfirmasi |
| API ke aplikasi pembuat DO | Volume tinggi, sumber otoritatif | kontrak belum beku (ODE-OD-008) | Adapter + mapping + rekonsiliasi |
Urutan yang saya sarankan: API dulu untuk jangka panjang, tapi form ini dulu supaya trial bisa jalan minggu ini tanpa menunggu kontrak.
Untuk trial, DO bisa dimasukkan server-side (di luar API) memakai upsert idempoten pada delivery_order. Tidak menambah permukaan API publik.
INSERT INTO delivery_order (do_number, status, driver_ref, vehicle_ref, customer_ref, origin, revision)
VALUES ('DO-TRIAL-0001','ASSIGNED','DRV-001','B 9012 XYZ','CUST-001','internal',1)
ON CONFLICT (do_number) DO UPDATE
SET status = EXCLUDED.status,
driver_ref = EXCLUDED.driver_ref,
vehicle_ref = EXCLUDED.vehicle_ref,
customer_ref = EXCLUDED.customer_ref,
revision = delivery_order.revision + 1,
updated_at = now();
Catatan: master kendaraan (vehicle_master_projection) juga harus diisi, kalau tidak validasi nopol CP1 akan menolak semua plat.
| Field | Dipakai ODE? | Kenapa perlu |
|---|---|---|
| doNumber | ya | Identitas DO + kunci idempotensi |
| status | ya | Menentukan DO muncul & bisa dipilih driver |
| origin | ya | Membedakan DO internal vs sync perusahaan |
| driverRef | ya | Filter DO per driver di perangkat |
| vehicleRef | ya | Dicocokkan saat driver input nopol (CP1) |
| customerRef | ya | Referensi customer untuk laporan & filter |
| Driver name/phone | belum | Untuk login & tampilan; butuh master driver |
| Customer name/address | belum | Butuh master customer (REQ-052) |
| Lokasi + lat/lng + radius | belum | Uji geofence CP3/CP6 (REQ-053/064) |
| Muatan & berat | belum | Konteks operasional, laporan, uji beban |
| Uang jalan | belum | Gate CP sebelum progres (REQ-011/071) |
| Window jadwal | belum | Uji keterlambatan & laporan |
| Dokumen | belum | Checklist CP4 (surat jalan, invoice, packing list) |
Kolom “belum” tetap disimpan di form supaya trial terasa realistis dan supaya bentuk datanya sudah siap saat kontrak upstream dibekukan.
ASSIGNED → READY → ACTIVE → OPERATIONALLY_FINISHED → PENDING_SYNC → COMPLETION_PENDING → COMPLETE
Hanya server yang boleh menetapkan COMPLETE. Perangkat berhenti di OPERATIONALLY_FINISHED.
| CP1 | Vehicle Pickup — validasi nopol |
| CP2 | Departure — mulai tracking |
| CP3 | Loading Arrival — geofence |
| CP4 | Loading Process — foto sebelum/proses/sesudah + dokumen |
| CP5 | Start Delivery |
| CP6 | Unloading Arrival — geofence |
| CP7 | Unloading Process — bukti serah terima |