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ă | Cale | Descriere |
|---|---|---|
| GET | /api/v1/service/work-orders | Listă 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-orders | Creează o comandă (pornește în received). |
| PUT | /api/v1/service/work-orders/{id}/status | Tranziție de status (jurnalizată). |
| DELETE | /api/v1/service/work-orders/{id} | Soft-delete. |
Filtre la listare
| Parametru | Tip | Note |
|---|---|---|
status | enum | Vezi lista de statusuri de mai jos. |
customer_id | integer | |
vehicle_id | integer | |
primary_mechanic_id | integer | |
search | string | Caută în work_order_number. |
per_page | integer | Implicit 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 caWO-{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) șitaxation_scheme=standard.
Trecerea în completed setează automat closed_at.
Schema la creare (POST)
| Câmp | Tip | Obligatoriu | Note |
|---|---|---|---|
customer_id | integer | da | FK la customers. |
vehicle_id | integer | nu | FK la vehicles. |
service_advisor_id | integer | nu | Consilierul de service. |
primary_mechanic_id | integer | nu | Mecanicul principal. |
bay_id | integer | nu | FK la service_bays. |
priority | enum | nu | low | normal | high | urgent. |
intake_method | enum | nu | walk_in | booked | tow_in | pickup | mail_in | internal. |
intake_odometer | integer ≥ 0 | nu | Kilometraj la primire. |
complaint | text | nu | Reclamația clientului. |
customer_notes | text | nu | Note vizibile clientului (apar pe pagina de urmărire). |
promise_date | date | nu | Termen promis. |
currency | string (3) | nu | Implicit RON. |
GET /api/v1/service/work-orders/{id} încarcă în plus relațiile: customer, vehicle, bay, laborLines, partsLines, subletLines, statusHistory.
Exemplu — creare comandă
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:
{
"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
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âmp | Tip | Obligatoriu | Note |
|---|---|---|---|
status | enum | da | Una din valorile de status de mai sus. |
reason | string ≤ 255 | nu | Notă 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ă | Cale | Descriere |
|---|---|---|
| GET | /api/v1/service/bays | Listă (nepaginată); filtru is_active. |
| GET | /api/v1/service/bays/{id} | Citește o boxă. |
| POST | /api/v1/service/bays | Creează o boxă. |
| PUT | /api/v1/service/bays/{id} | Actualizează o boxă. |
| Câmp | Tip | Obligatoriu la POST | Note |
|---|---|---|---|
code | string ≤ 16 | da | Cod unic per tenant (ex. B1). |
label | string ≤ 64 | da | Etichetă afișată. |
capabilities | array | nu | Etichete libere (ex. ["suspensie","electrice"]). |
is_active | boolean | nu |
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"] }'