Siparişler nasıl işler
Era'da bir siparişin yaşamı: durumları, onu hangi işlemlerin ilerlettiği, ödemenin ve stoğun ona nasıl eşlik ettiği ve bunları yöneten ayarlar.
Era'da bir sipariş (sales_order, orders kaynağı) ya ödeme adımındaki bir sepetten ya da birinin elle hazırladığı bir taslaktan doğar. Sonra gönderilmeyi bekler, bir ya da birkaç gönderiyle çıkar ve bir iade olarak geri dönebilir — ya da yolda iptal edilir veya süresi dolar. Ödeme ve stok elle girilen alanlar değildir; aşağıdaki işlemlerle siparişi izlerler.
complete_draft_order
draft ─────────────────────────────────────┐
│ (automatically_confirm_orders kapalı) │ (açık)
▼ ▼
unconfirmed ──── confirm_order ──────────► unfulfilled ◄──── complete_checkout / site_place_order
│ │
└── expire_order ──► expired │ fulfil_order (bir kısmı) fulfil_order (kalanı)
├──────────► partially fulfilled ──────────► fulfilled
cancel_order (açık her durumdan) ──► canceled │
return_products / receive_return
▼
partially_returned · returnedDurumlar
| Durum | Anlamı | Satırlar değişebilir |
|---|---|---|
draft | Elle hazırlanıyor. Henüz sipariş değil: stok ayrılmaz. Silinebilir. | evet |
unconfirmed | Taslaktan verildi, birinin onaylamasını bekliyor. Stok zaten ayrıldı. | evet |
unfulfilled | Onaylandı, gönderilmeyi bekliyor. Ödeme adımından gelen her sipariş buradan başlar. | hayır |
partially fulfilled | Satırların bir kısmı gönderildi. (Boşlukla yazılır — özgün mağaza verisinden bilerek korundu.) | hayır |
fulfilled | Her şey gönderildi. | hayır |
partially_returned / returned | Gönderilenin bir kısmı ya da tamamı geri geldi. | hayır |
canceled | İptal edildi. Ayrılan stok serbest kalır; finansa ödenen tutarı iade etmesi söylenir. | hayır |
expired | Zamanında onaylanmamış, onay bekleyen bir sipariş. | hayır |
Siparişin bir de origin alanı vardır: checkout (sepetten) ya da draft (elle hazırlanmış); pazaryerinden aktarılanlar marketplace olur.
Siparişi ilerleten işlemler
Her işlem mağaza başvurusunda yer alır; bölümü bütün ön koşul kodlarını listeler.
| İşlem | Nereden | Nereye | Başka ne olur |
|---|---|---|---|
retail.create_draft_order | — | draft | Sıradaki sipariş numarasını alır. Kapalı bir satış kanalında reddedilir. |
retail.set_order_lines | draft, unconfirmed | aynı | Bütün satırları değiştirir, yeniden fiyatlar, indirimleri ve vergiyi yeniden uygular; taslak fiyatlarını draft_order_price_freeze_hours boyunca sabitler. |
retail.complete_draft_order | draft | unfulfilled ya da unconfirmed | Her satır için stok ayırır — ya hepsi ya hiçbiri (insufficient_stock). Teslimat adresine ve kupona bakar. |
retail.complete_checkout | bir sepet | unfulfilled | Sepetin 15 dakikalık stok rezervasyonlarını ayırmaya çevirir ve sepeti siler. Eskimiş fiyatları (prices_stale) ve izin yoksa ödenmemiş sepetleri (order_not_paid) reddeder. |
retail.site_place_order | site sepeti | unfulfilled | Web sitesinin ödeme adımı: önce siparişi verir, hemen ardından ödemeyi alır; ödeme başarısız olursa sipariş kaybolmaz, ödenmemiş olarak kalır. |
retail.confirm_order | unconfirmed | unfulfilled | retail:approve izni ister. |
retail.fulfil_order | unfulfilled, partially fulfilled | partially fulfilled ya da fulfilled | Belirtilen depolardan bir gönderi oluşturur; raf stoğunu düşürür ve stok hareketi yazar. Sipariş edilenden fazlasını göndermez (over_fulfilment); ön siparişteki satır bekler (preorder_not_fulfillable). |
retail.cancel_fulfilment | bir gönderi | yeniden hesaplanır | Stoğu rafa geri koyar. |
retail.cancel_order | açık her durum | canceled | retail:manage izni ister. Ayrılan stoğu bırakır, hediye kartlarını ve kupon kullanımını geri verir. Önce canlı gönderiler iptal edilmelidir (order_has_fulfilments). |
retail.expire_order | unconfirmed | expired | Ayrılan stoğu ve kuponu bırakır. expire_orders_after_minutes'tan eski siparişler için 15 dakikada bir çalışır. |
retail.request_return | gönderilmiş her şey | değişmez | Bir iade açar (requested → received → inspected → closed ya da rejected). İade teslim alındığında sipariş partially_returned ya da returned olur; incelemede yeniden satılabilir ürünler stoğa döner. |
retail.return_products | gönderilmiş her şey | partially_returned ya da returned | İadeyi iade akışı olmadan, stoğa geri koymadan doğrudan kaydeder. |
retail.delete_draft_order | draft | silinir | Verilmiş siparişler silinmez, iptal edilir (not_a_draft). |
Satırlar, teslimat yöntemi ve müşteri retail.update_order ile yalnız sipariş hâlâ draft ya da unconfirmed iken değiştirilebilir (müşteri ayrıca hiçbir şey gönderilmemişken).
Ödeme: charge_status
Ödemeler siparişin üzerinde tutulmaz. Sipariş verildiğinde finans onun için bir anlaşma açar; bu anlaşmaya kaydedilen ödemeler (bir ödeme uygulaması, havale ya da Finans → Tahsilatlar'da bir kişi tarafından) siparişin tahsil ettiği tutardır. Her ödeme, eşleştirme, iade ya da ödeme sağlayıcısı olayından sonra Era siparişin charge_status değerini yeniden hesaplar:
charge_status | Ne zaman |
|---|---|
none | Hiç tahsilat yok. |
partial | Ödenmesi gerekenden az. |
full | Tam olarak ödenmesi gereken kadar. |
overcharged | Ödenmesi gerekenden fazla. |
Ödenmesi gereken tutar; toplam artı hediye kartları, eksi verilmiş iadelerdir. Bütün tutarlar en küçük para biriminin tam sayısıdır (kuruş) — total_amount: 125000, 1.250,00 demektir.
Bilinmesi gerekenler:
- Gönderim ödemeyi beklemez.
fulfil_order,charge_status'a bakmaz; yalnız ödenmiş siparişleri gönderiyorsan onları süz:GET /api/v1/orders?status=unfulfilled&charge_status=full. - İptal iade başlatır. Sipariş iptal edildiğinde finansa, onun için tahsil edileni iade etmesi söylenir.
- Kısmi iadeler
retail.grant_refundile verilir (retail:manageister; siparişin satış tutarını asla aşmaz). Finans sonra iadeyi tutarı karşılayabilen ödemeden yapar — tek bir ödeme karşılamıyorsa iadeyi bir kişinin göndermesine bırakır. authorize_statusmodelde var ama henüz kullanılmıyor: Era kart provizyonlarını tahsilattan ayrı tutmaz.
Stok
| An | Stoğa ne olur |
|---|---|
| Ürün sepette | 15 dakikalık bir rezervasyon; böylece iki alıcı son ürünü birlikte alamaz. |
| Sipariş verildi (sepet ya da taslak) | Rezervasyonlar ayırmaya dönüşür: ürünler bu sipariş için tutulur (quantity_allocated artar). Ya bütün satırlar ya hiçbiri. |
| Gönderi | Raf sayısı ve ayırma düşer; fulfilment nedenli bir stok hareketi yazılır. |
| Gönderi iptal edildi | Ürünler rafa döner (fulfilment_canceled). |
| Sipariş iptal edildi ya da süresi doldu | Ayırmalar bırakılır. Raf sayısı değişmez — ürünler raftan hiç çıkmadı. |
| İade incelendi | Yeniden satılabilir ürünler rafa döner (returned). |
Siparişi yöneten ayarlar
Ayarlar → Mağaza (/settings/shop) altında:
| Ayar | Varsayılan | Etkisi |
|---|---|---|
Yeni siparişleri kendiliğinden onayla (automatically_confirm_orders) | açık | Tamamlanan bir taslak doğrudan unfulfilled olur; kapalıysa confirm_order için unconfirmed olarak bekler. Ödeme adımından gelen siparişler her zaman unfulfilled başlar. |
Ödenmemiş siparişlere izin ver (allow_unpaid_orders) | kapalı | Kapalıyken complete_checkout, hiç ödeme alınmamış sepeti reddeder (order_not_paid). Web sitesinin kendi ödeme adımı, bu ayar ne olursa olsun önce siparişi verir, sonra ödemeyi alır. |
Gönderileri kendiliğinden onayla (fulfilment_auto_approve) | açık | Kapalıyken gönderi waiting_for_approval olarak oluşur (stok zaten düşer) ve biri onaylayana kadar bekler. |
Onaylanmamış siparişlerin süresi (dakika) (expire_orders_after_minutes) | 0 (hiç) | Bundan eski, onay bekleyen siparişlerin süresi dolar ve stokları serbest kalır. |
Stoktan fazla satışa izin ver (allow_oversell) | kapalı | Açıkken stoğu yetmeyen satır insufficient_stock ile reddedilmez, eksik olarak ayrılır. |
Ayırma stratejisi (allocation_strategy) | depo sırası | Önce hangi deponun tutulacağı: kanalın depo sırası ya da boş stoğu en çok olan (prioritize-high-stock). |
Taslak fiyat sabitleme (saat) (draft_order_price_freeze_hours) | 24 | Satırlar değiştikten sonra taslağın fiyatlarının ne kadar sabit kalacağı. |
Düşük stok eşiği (low_stock_threshold) | 5 | Boş stok bu sayıya inince retail.stock_low yayımlanır. |
Siparişlere tepki vermek
Her adım bir olay yayımlar — retail.order_placed, retail.order_confirmed, retail.fulfilment_created, retail.order_canceled, retail.order_expired, retail.order_returned, retail.order_charge_status_changed, retail.stock_low ve dahası (tam liste). Bunlara bir webhook ya da iş akışı bağla.
era orders list --status unfulfilled --charge-status full --json
era orders fulfil_order ORDER_ID --data '{"lines":[{"orderLineId":"LINE_ID","warehouseId":"WAREHOUSE_ID","quantity":1}],"notifyCustomer":true}'