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.

Sepetten siparişe

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.

Durumlar (sales_order.status)
                       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 · returned

Durumlar

DurumAnlamıSatırlar değişebilir
draftElle hazırlanıyor. Henüz sipariş değil: stok ayrılmaz. Silinebilir.evet
unconfirmedTaslaktan verildi, birinin onaylamasını bekliyor. Stok zaten ayrıldı.evet
unfulfilledOnaylandı, gönderilmeyi bekliyor. Ödeme adımından gelen her sipariş buradan başlar.hayır
partially fulfilledSatırların bir kısmı gönderildi. (Boşlukla yazılır — özgün mağaza verisinden bilerek korundu.)hayır
fulfilledHer şey gönderildi.hayır
partially_returned / returnedGö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
expiredZamanı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.

İşlemNeredenNereyeBaşka ne olur
retail.create_draft_order—draftSıradaki sipariş numarasını alır. Kapalı bir satış kanalında reddedilir.
retail.set_order_linesdraft, unconfirmedaynı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_orderdraftunfulfilled ya da unconfirmedHer satır için stok ayırır — ya hepsi ya hiçbiri (insufficient_stock). Teslimat adresine ve kupona bakar.
retail.complete_checkoutbir sepetunfulfilledSepetin 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_ordersite sepetiunfulfilledWeb 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_orderunconfirmedunfulfilledretail:approve izni ister.
retail.fulfil_orderunfulfilled, partially fulfilledpartially fulfilled ya da fulfilledBelirtilen 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_fulfilmentbir gönderiyeniden hesaplanırStoğu rafa geri koyar.
retail.cancel_orderaçık her durumcanceledretail: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_orderunconfirmedexpiredAyrı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_returngönderilmiş her şeydeğişmezBir 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_productsgönderilmiş her şeypartially_returned ya da returnedİadeyi iade akışı olmadan, stoğa geri koymadan doğrudan kaydeder.
retail.delete_draft_orderdraftsilinirVerilmiş 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_statusNe zaman
noneHiç tahsilat yok.
partialÖdenmesi gerekenden az.
fullTam 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_refund ile verilir (retail:manage ister; 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_status modelde var ama henüz kullanılmıyor: Era kart provizyonlarını tahsilattan ayrı tutmaz.

Stok

AnStoğa ne olur
Ürün sepette15 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önderiRaf 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 dolduAyırmalar bırakılır. Raf sayısı değişmez — ürünler raftan hiç çıkmadı.
İade incelendiYeniden satılabilir ürünler rafa döner (returned).

Siparişi yöneten ayarlar

Ayarlar → Mağaza (/settings/shop) altında:

AyarVarsayılanEtkisi
Yeni siparişleri kendiliğinden onayla (automatically_confirm_orders)açıkTamamlanan 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çıkKapalı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)24Satırlar değiştikten sonra taslağın fiyatlarının ne kadar sabit kalacağı.
Düşük stok eşiği (low_stock_threshold)5Boş 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.

Ödenmiş her siparişi gönder
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}'
Bu sayfa yardımcı oldu mu?