Test Hattı Ölçümleri endpoint'i
Test hattı cihazı üreticileri (Mates vb.) için yazma endpoint'i. Cihazın okuduğu fren / süspansiyon / yanal kayma / dinamometre değerleri buraya gönderilir; plaka eşleşmesi sağlanırsa değerler ilgili ekspertiz raporunun Test Hattı Kontrolleri formuna otomatik işlenir.
POST /api/v1/partner/test-line/measurements
Gerekli scope: test-line:write
node scripts/sign.node.mjs POST /api/v1/partner/test-line/measurements "$(cat olcum.json)"
İşleyiş
branch_code(bayi kodu, örn.YVZ-SB-01) ölçümün hangi firma + bayiye ait olduğunu belirler. Kod yalnız partner'ın erişim izni olan firmaların bayileri arasında aranır — izin dışı kodlar404döner. Bayi kodları devreye alma sırasında ekspertiz.app tarafından paylaşılır (bkz. 09 · Test hattı cihaz entegrasyonu).- Ölçüm paketi ham haliyle kaydedilir — veri hiçbir durumda kaybolmaz.
- Plaka, o bayide açık (yazım aşamasında, son 24 saatte açılmış) bir
raporla eşleşirse değerler rapora anında işlenir →
status: "applied". - Eşleşme yoksa ölçüm havuzda bekler →
status: "pending". Eksper aynı plakaya rapor açtığında Test Hattı sayfasında "Cihazdan ölçüm geldi" bandı görünür ve tek tıkla uygulanır. Yani ölçümün rapordan önce gönderilmesi sorun değildir — doğal akış budur.
İstek gövdesi
{
"branch_code": "YVZ-SB-01",
"plate": "06 ABC 123",
"measured_at": "2026-06-10T14:05:00+03:00",
"external_id": "MATES-OLCUM-90002",
"device_serial": "MTS-2026-001234",
"measurements": {
"DYNO_MEASURED_HP": 118,
"SUSP_FRONT_LEFT": 78,
"SUSP_FRONT_RIGHT": 76,
"SUSP_REAR_LEFT": 71,
"SUSP_REAR_RIGHT": 74,
"BRAKE_FRONT_LEFT": 2.4,
"BRAKE_FRONT_RIGHT": 2.6,
"BRAKE_REAR_LEFT": 1.4,
"BRAKE_REAR_RIGHT": 1.5,
"HANDBRAKE_LEFT": 1.4,
"HANDBRAKE_RIGHT": 1.5,
"SLIP_FRONT": -2,
"SLIP_REAR": 3
}
}
| Alan | Tip | Zorunlu | Açıklama |
|---|---|---|---|
branch_code | string | ✓ | Bayi kodu (kurulumda istasyon yazılımına bir kez yazılır). Büyük/küçük harf duyarsız |
plate | string | ✓ | Türk plakası. Boşluklu/boşluksuz, büyük/küçük harf fark etmez — sunucu normalize eder ("06 abc 123" → "06ABC123") |
measured_at | RFC3339 | – | Ölçüm zamanı, saat dilimi offset'li (örn. +03:00). Verilmezse sunucu saati kullanılır. Gelecek tarih reddedilir |
external_id | string (≤120) | – | Sizin tarafınızdaki ölçüm ID'si — idempotency anahtarı. Şiddetle önerilir: ağ hatasında aynı external_id ile güvenle tekrar gönderebilirsiniz, çift kayıt oluşmaz |
device_serial | string (≤120) | – | Cihaz seri numarası — yalnız iz sürme amaçlı saklanır, yönlendirmede kullanılmaz |
measurements | object | ✓ | Nokta kodu → sayısal değer. En az 1, en çok 50 anahtar. Değerler ondalıklı olabilir (2.4), ondalık ayracı nokta |
Ölçüm nokta kodları
| Kod | Ölçüm | Birim |
|---|---|---|
DYNO_FACTORY_HP | Dinamometre — fabrika gücü | HP |
DYNO_MEASURED_HP | Dinamometre — ölçülen güç | HP |
SUSP_FRONT_LEFT | Süspansiyon verimi — ön sol | % (EuSAMA) |
SUSP_FRONT_RIGHT | Süspansiyon verimi — ön sağ | % (EuSAMA) |
SUSP_REAR_LEFT | Süspansiyon verimi — arka sol | % (EuSAMA) |
SUSP_REAR_RIGHT | Süspansiyon verimi — arka sağ | % (EuSAMA) |
BRAKE_FRONT_LEFT | Fren kuvveti — ön sol | kN |
BRAKE_FRONT_RIGHT | Fren kuvveti — ön sağ | kN |
BRAKE_REAR_LEFT | Fren kuvveti — arka sol | kN |
BRAKE_REAR_RIGHT | Fren kuvveti — arka sağ | kN |
HANDBRAKE_LEFT | El freni — sol | kN |
HANDBRAKE_RIGHT | El freni — sağ | kN |
SLIP_FRONT | Yanal kayma — ön | m/km (± işaretli) |
SLIP_REAR | Yanal kayma — arka | m/km (± işaretli) |
Notlar:
- Tüm kodları göndermek zorunda değilsiniz — cihazınız hangi testleri yaptıysa onları gönderin. Eksik kalanları eksper elle tamamlar.
DYNO_RATIO(güç oranı %) göndermenize gerek yok;DYNO_MEASURED_HPgeldiyse ve aracın fabrika gücü sistemde kayıtlıysa oran otomatik hesaplanır.- Rapor şablonunda karşılığı olmayan kodlar hata üretmez; yanıtta
skipped_pointsiçindeunknown_pointolarak raporlanır. - Her değer için durum etiketi (İyi / Sınırda / Limit Dışı) firma bazlı eşik ayarlarına göre sunucu tarafından otomatik atanır — cihazın durum göndermesine gerek yok.
Yanıtlar
201 — yeni ölçüm kabul edildi, rapora otomatik işlendi:
{
"data": {
"measurement_id": "cmq7z70o300044whonwmykeap",
"status": "applied",
"plate": "61KEJ7501",
"inspection_id": "cmq7z418f00044wf8bsp8t3i7",
"applied_points": ["BRAKE_FRONT_LEFT", "BRAKE_FRONT_RIGHT", "..."],
"idempotent_replay": false
}
}
201 — yeni ölçüm kabul edildi, açık rapor yok (havuzda bekliyor):
{
"data": {
"measurement_id": "cmq7z7srx00074who6kx96q3c",
"status": "pending",
"plate": "06ZZD7777",
"inspection_id": null,
"applied_points": [],
"idempotent_replay": false
}
}
200 — aynı external_id daha önce işlenmişti (idempotent tekrar):
{
"data": {
"measurement_id": "cmq7z70o300044whonwmykeap",
"status": "applied",
"plate": "61KEJ7501",
"inspection_id": "cmq7z418f00044wf8bsp8t3i7",
"idempotent_replay": true
}
}
| Alan | Açıklama |
|---|---|
measurement_id | Platformdaki ölçüm kaydı ID'si — destek taleplerinde referans verin |
status | applied = rapora işlendi · pending = plaka eşleşmesi bekliyor · discarded = eksper yok saydı (yalnız replay yanıtında görülür) |
inspection_id | İşlendiği raporun ID'si (pending'de null) |
applied_points | Rapora yazılan nokta kodları |
skipped_points | Yazılamayan kodlar + sebep (unknown_point, no_status) — yalnız varsa döner |
idempotent_replay | true ise bu external_id daha önce işlenmişti; yeni kayıt açılmadı |
Hata kodları
| HTTP | error.code | Sebep |
|---|---|---|
| 400 | invalid_request | Gövde JSON değil, alan eksik/hatalı, plaka geçersiz, measured_at gelecekte, ölçüm anahtarı formatı bozuk, bayi kodu birden fazla bayiye eşleşiyor |
| 401 | missing_signature_headers / invalid_key / invalid_signature / expired_timestamp / replay_detected | İmzalama sorunları — bkz. 01 · Kimlik doğrulama |
| 403 | scope_required | Anahtarda test-line:write scope'u yok |
| 404 | not_found | Bayi kodu bulunamadı, bayi pasif veya partner'ınızın o firmaya erişim izni yok |
| 413 | payload_too_large | Gövde > 1 MB |
| 429 | rate_limited / ip_rate_limited | Hız sınırı — Retry-After header'ına uyun |
Tüm hata yanıtları standart zarf kullanır:
{ "error": { "code": "not_found", "message": "Resource not found.", "request_id": "req_FX4G57YTBF3F4BEP" } }
request_id'yi loglayın — destek taleplerinde bizimle paylaşın.