Lewati ke isi

Sentra Automotive — API Documentation

5.1 POST /api/v1/work-orders

Inisiasi registrasi kendaraan & inspeksi — meregistrasikan check-in kendaraan awal oleh Service Advisor dan menghasilkan SPK.

Request Header:

Content-Type: application/json
Authorization: Bearer <jwt_token>

Request Body:

{
  "license_plate": "B 1234 SQA",
  "vin_number": "MHRM12891K009211",
  "brand_model": "Toyota Avanza 1.3G",
  "current_odometer": 45012,
  "customer_complaints": "Mesin ndut-ndutan di putaran rendah, AC kurang dingin, rem bunyi berdecit saat jalan turunan.",
  "inspection_checklist": {
    "body_scratches": ["Pintu kanan depan baret", "Bumper belakang kiri penyok"],
    "engine_oil_status": "Keruh/Kotor",
    "brake_fluid": "Cukup",
    "battery_voltage": "11.8V (Low)"
  }
}

Response 201 Created:

{
  "status": "success",
  "data": {
    "work_order_id": "ca21b01c-6d1a-41d1-9311-bf17b0c34da8",
    "wo_number": "WO/2026/05/0091",
    "status": "INTAKE",
    "created_at": "2026-05-21T20:20:15+07:00"
  }
}

5.2 POST /api/v1/work-orders/:id/additional-charges

Request persetujuan biaya tambahan — dipanggil ketika mekanik membongkar mesin dan menemukan kerusakan baru yang memerlukan penggantian sparepart di luar estimasi awal SPK. API ini memicu background task untuk mengirimkan link persetujuan digital via WhatsApp ke pelanggan.

Request Body:

{
  "additional_items": [
    {
      "item_type": "SPAREPART",
      "sparepart_id": "b9cf8721-a01c-4b92-809c-7c01bda8f212",
      "name": "Piringan Rem Depan Ori Toyota (Disc Brake)",
      "quantity": 1,
      "estimated_price": 450000.00
    },
    {
      "item_type": "SERVICE_LABOR",
      "name": "Jasa Pasang Piringan Rem Depan",
      "quantity": 1,
      "estimated_price": 75000.00
    }
  ]
}

Response 200 OK:

{
  "status": "success",
  "message": "Additional charges submitted. WhatsApp approval link sent to customer.",
  "data": {
    "approval_transaction_id": "tx_additional_appr_8912",
    "whatsapp_sent_to": "081234567890",
    "approval_url": "https://sentraauto.id/wo/approve/ca21b01c_token"
  }
}

Flow setelah response:

  • WO status berubah ke WAITING_PARTS, SLA timer berhenti.
  • Pelanggan mengklik link approval → APPROVED atau REJECTED.
  • Jika APPROVED: sistem melepas lock, mekanik dapat mengambil part via barcode scan.
  • Jika REJECTED: sistem mencetak disclaimer penolakan di invoice kasir.

5.3 POST /api/v1/inventory/pick-part

Dispense sparepart via barcode reader — dipanggil oleh sistem komputer gudang ketika storekeeper men-scan barcode fisik barang untuk diserahkan ke mekanik yang mengerjakan SPK.

Request Body:

{
  "work_order_id": "ca21b01c-6d1a-41d1-9311-bf17b0c34da8",
  "barcode_data": "8991209381921",
  "quantity": 4
}

Response 200 OK (Sukses Potong Stok FEFO):

{
  "status": "success",
  "message": "Sparepart allocated and stock deducted successfully.",
  "data": {
    "sparepart_name": "Oli Toyota Motor Oil 10W-40 Synthetic",
    "allocated_batch": "BATCH-OLI-2026A",
    "remaining_stock": 142,
    "selling_price_total": 380000.00
  }
}

Response 400 Bad Request (Barcode SKU Tidak Cocok):

{
  "status": "error",
  "error_code": "BARCODE_SKU_MISMATCH",
  "message": "Barcode tidak sesuai dengan item yang diminta di pick-slip SPK. Periksa kembali item yang diambil.",
  "data": {
    "scanned_barcode": "8991209381921",
    "expected_sku": "TMO-5W30-4L"
  }
}

Catatan Teknis:

  • Dispense menggunakan strategi FEFO (First Expired First Out) — sistem secara otomatis mengambil batch dengan tanggal kadaluarsa terdekat terlebih dahulu.
  • Stok sparepart_batches.current_stock dikurangi secara transaksional di dalam DB transaction.
  • Setelah dispense berhasil, biaya part otomatis ditambahkan ke invoice kasir (invoices.parts_subtotal).
  • Peristiwa dispense dicatat ke audit log dengan ID storekeeper, timestamp, dan SKU yang di-scan.

5.4 PATCH /api/v1/work-orders/:id/status

Transisi status WO oleh mekanik atau Service Advisor.

Request Body:

{
  "new_status": "QC_TEST",
  "notes": "Pengerjaan kampas rem selesai, siap uji jalan."
}

Allowed Transitions:

From To Actor
INTAKE DIAGNOSING Service Advisor
DIAGNOSING WORKING Service Advisor
WORKING WAITING_PARTS Mechanic
WAITING_PARTS WORKING System (auto on customer approval)
WORKING QC_TEST Mechanic
QC_TEST WORKING Head Mechanic (rework)
QC_TEST COMPLETED Head Mechanic
* CANCELLED Service Advisor / Branch Manager