Sari la conținut

Comenzi de service (RO)

Comanda de service (repair order, RO) este unitatea centrală a atelierului: leagă un client, un vehicul, un mecanic și o boxă de lucru, și parcurge un flux de statusuri jurnalizat. De ea se atașează devize, inspecții, cereri de piese și pontaj.

Endpoint-uri

MetodăCaleDescriere
GET/api/v1/service/work-ordersListă paginată; filtre status, customer_id, vehicle_id, primary_mechanic_id, search.
GET/api/v1/service/work-orders/{id}Citește o comandă cu toate liniile și istoricul.
POST/api/v1/service/work-ordersCreează o comandă (pornește în received).
PUT/api/v1/service/work-orders/{id}/statusTranziție de status (jurnalizată).
DELETE/api/v1/service/work-orders/{id}Soft-delete.

Filtre la listare

ParametruTipNote
statusenumVezi lista de statusuri de mai jos.
customer_idinteger
vehicle_idinteger
primary_mechanic_idinteger
searchstringCaută în work_order_number.
per_pageintegerImplicit 50.

Statusuri

draft · received · diagnosing · estimate_pending · estimate_sent · estimate_approved · estimate_declined · in_progress · awaiting_parts · awaiting_customer · awaiting_sublet · qa · ready_for_pickup · completed · invoiced · paid · cancelled.

La creare, comanda primește automat:

  • work_order_number — generat ca WO-{AN}-{secvență}, ex. WO-2026-000142.
  • status = received.
  • tracking_token — token de 40 de caractere folosit de urmărirea publică.
  • currency = RON (dacă nu e trimis altul) și taxation_scheme = standard.

Trecerea în completed setează automat closed_at.

Schema la creare (POST)

CâmpTipObligatoriuNote
customer_idintegerdaFK la customers.
vehicle_idintegernuFK la vehicles.
service_advisor_idintegernuConsilierul de service.
primary_mechanic_idintegernuMecanicul principal.
bay_idintegernuFK la service_bays.
priorityenumnulow | normal | high | urgent.
intake_methodenumnuwalk_in | booked | tow_in | pickup | mail_in | internal.
intake_odometerinteger ≥ 0nuKilometraj la primire.
complainttextnuReclamația clientului.
customer_notestextnuNote vizibile clientului (apar pe pagina de urmărire).
promise_datedatenuTermen promis.
currencystring (3)nuImplicit RON.

GET /api/v1/service/work-orders/{id} încarcă în plus relațiile: customer, vehicle, bay, laborLines, partsLines, subletLines, statusHistory.

Exemplu — creare comandă

bash
curl -X POST https://tenant.notsowms.ro/api/v1/service/work-orders \
  -H "Authorization: Bearer tenant.7c4a8d09ca3762af61e59520943dc26494f8941b" \
  -H "Content-Type: application/json" \
  -d '{
    "customer_id": 42,
    "vehicle_id": 17,
    "priority": "normal",
    "intake_method": "booked",
    "intake_odometer": 8450,
    "complaint": "Zgomot la frânare față, revizie 10.000 km.",
    "promise_date": "2026-05-28"
  }'

Răspuns 201:

json
{
  "data": {
    "id": 901,
    "work_order_number": "WO-2026-000142",
    "customer_id": 42,
    "vehicle_id": 17,
    "status": "received",
    "priority": "normal",
    "intake_method": "booked",
    "intake_odometer": 8450,
    "complaint": "Zgomot la frânare față, revizie 10.000 km.",
    "promise_date": "2026-05-28",
    "tracking_token": "f3a9c1e8b2d74a6f90c5e1d8a7b4c2f0e9d6a3b1",
    "currency": "RON",
    "taxation_scheme": "standard",
    "created_at": "2026-05-25T09:30:00.000000Z",
    "updated_at": "2026-05-25T09:30:00.000000Z"
  }
}

Tranziție de status

bash
curl -X PUT https://tenant.notsowms.ro/api/v1/service/work-orders/901/status \
  -H "Authorization: Bearer tenant.7c4a8d09ca3762af61e59520943dc26494f8941b" \
  -H "Content-Type: application/json" \
  -d '{ "status": "in_progress", "reason": "Piese pe stoc, încep lucrul." }'
CâmpTipObligatoriuNote
statusenumdaUna din valorile de status de mai sus.
reasonstring ≤ 255nuNotă jurnalizată în istoricul de status.

Fiecare tranziție creează o înregistrare în istoricul comenzii (cu status-ul anterior, cel nou, autorul și motivul) și emite un eveniment pe tenant.{tenantId}.work_orders. Dacă status-ul trimis este identic cu cel curent, răspunsul este 200 fără efecte.

Boxe de lucru

Registrul de boxe (posturi de lucru) folosit la atribuirea comenzilor.

MetodăCaleDescriere
GET/api/v1/service/baysListă (nepaginată); filtru is_active.
GET/api/v1/service/bays/{id}Citește o boxă.
POST/api/v1/service/baysCreează o boxă.
PUT/api/v1/service/bays/{id}Actualizează o boxă.
CâmpTipObligatoriu la POSTNote
codestring ≤ 16daCod unic per tenant (ex. B1).
labelstring ≤ 64daEtichetă afișată.
capabilitiesarraynuEtichete libere (ex. ["suspensie","electrice"]).
is_activebooleannu
bash
curl -X POST https://tenant.notsowms.ro/api/v1/service/bays \
  -H "Authorization: Bearer tenant.7c4a8d09ca3762af61e59520943dc26494f8941b" \
  -H "Content-Type: application/json" \
  -d '{ "code": "B1", "label": "Box 1 — diagnoză", "capabilities": ["electrice","diagnoza"] }'

Documentație API notso WMS