> ## Documentation Index
> Fetch the complete documentation index at: https://apidocs.noyax.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Siparişler

> Alış ve satış siparişlerinin alanları, cari hareket kurgusu ve kuralları.

Sipariş, bir başlık ve bir ya da daha fazla satırdan oluşur. Alış siparişleri (`OrderType` 1) ve satış siparişleri (`OrderType` 2) aynı endpoint'leri kullanır.

| İşlem            | Endpoint                                                              |
| ---------------- | --------------------------------------------------------------------- |
| Listeleme        | [`GET /orders`](/tr/v1/orders/list)                                   |
| Detay            | [`GET /orders/{orderId}`](/tr/v1/orders/get)                          |
| Oluşturma        | [`POST /orders`](/tr/v1/orders/create)                                |
| Güncelleme       | [`PUT /orders/{orderId}`](/tr/v1/orders/update)                       |
| Kısmi güncelleme | [`PATCH /orders/{orderId}`](/tr/v1/orders/patch)                      |
| Silme            | [`DELETE /orders/{orderId}`](/tr/v1/orders/delete)                    |
| Satır grupları   | [`GET /definitions/line-groups`](/tr/v1/definitions/line-groups/list) |

<Warning>
  **API tutarları hesaplamaz ve tutarlı olup olmadıklarını denetlemez.** Satır tutarları, indirim tutarları, KDV, ek vergiler, tevkifat, sipariş toplamları ve ağırlıklı kur ortalaması gönderdiğiniz gibi kaydedilir. Hesap kuralları için [teklif hesaplamaları](/tr/v1/quotes/calculations) sayfasına bakın; sipariş satırları teklif satırlarıyla aynı alanlara sahiptir. Tek istisna satırın [ana birim miktarıdır](#ana-birim-miktarı), onu API hesaplar.
</Warning>

## Zorunlu alanlar

* `OrderType`: `1` alış siparişi, `2` satış siparişi. Cari hareketi olan siparişte değiştirilemez (`6015`).
* `OrderNumber`: şirkette aynı `OrderType` içinde benzersiz, en fazla 10 karakter (`6002`). Oluştururken `"Next"` gönderilirse numara şirketin numara serisinden üretilir: alış siparişleri için **ALSİPNO**, satış siparişleri için **SATSİPNO**. Güncellemede `"Next"` gönderilemez (`6003`).
* `Date`: sipariş tarihi. Saat de gönderirseniz sipariş saati olarak yazılır, göndermezseniz o anki saat kullanılır.
* `CustomerCode`: kullanıcının görebildiği bir cari. Sipariş carinin adresiyle yazılır: carinin fatura adresi varsa o, yoksa ilk adresi.
* `CurrencyCode`: sipariş dövizi.
* `Lines`: en az bir satır (`6012`).

`DueDays` (vade günü) ve `AverageExchangeRate` (satırların ağırlıklı ortalama kuru, varsayılan `1`) siparişle birlikte saklanır; ikisi de aşağıdaki cari hareketin vadesi ve kuru için kullanılır.

## Cari hareket

`CreateCustomerMovement` alanı siparişin carinin hesabına yansıyıp yansımayacağını belirler. Ayrı bir istek ya da alan göndermeniz gerekmez, hareket siparişle birlikte, aynı işlemde yazılır.

`true` iken sipariş tutarı (`GrandTotal`) carinin hesabına şu şekilde yazılır:

| Sipariş        | Cari hesabına |
| -------------- | ------------- |
| Alış siparişi  | Alacak kaydı  |
| Satış siparişi | Borç kaydı    |

Hareketin tarihi, saati, belge numarası (sipariş no), açıklaması, dövizi (`CurrencyCode`) ve kuru (`AverageExchangeRate`) siparişten alınır. Vade tarihi `Date + DueDays`'tir; `DueDays` `0` ise vade tarihi boş kalır. Yanıtta `CreateCustomerMovement`, siparişin bir cari hareketi olup olmadığını gösterir.

Güncellemede hareket, isteğe göre eşitlenir:

| Mevcut durum | İstek                          | Sonuç                                                                                            |
| ------------ | ------------------------------ | ------------------------------------------------------------------------------------------------ |
| Hareket yok  | `CreateCustomerMovement: true` | Hareket oluşturulur                                                                              |
| Hareket var  | `true`                         | Hareket siparişin yeni değerleriyle (tutar, döviz, cari, tarih, vade, kur, açıklama) güncellenir |
| Hareket var  | `false`                        | Hareket silinir                                                                                  |
| Hareket yok  | `false`                        | Değişiklik yok                                                                                   |

<Warning>
  Hareket bir tahsilat ya da ödeme ile **kapatılmışsa** (kısmen olsa bile) bu hareketin carisi, dövizi ve tutarı değiştirilemez, hareket silinemez ve hareketi olan sipariş silinemez. İşlem iptal edilir ve şu hatalardan biri döner: alış siparişi için `6016`, satış siparişi için `6017`. Tutarı, dövizi ve carisi aynı kalan bir güncelleme kapatılmış hareketi etkilemez, kabul edilir.
</Warning>

## Onay ve durum

Sipariş oluşturulurken aşağıdakiler otomatik atanır, bunlar için istekte bir alan yoktur:

* **Onaylar:** Şirketin aktif sipariş onay tanımlarından, `GrandTotal` tutarı tanımın asgari tutarından büyük olan ve sipariş tipine uyan (tanım hem alış hem satış için ya da yalnızca siparişin tipi için geçerli) her biri için sıra numarasına göre "beklemede" bir onay kaydı oluşur.
* **Durum:** Şirketin varsayılan sipariş durumu tanımlıysa sipariş bu durumla başlar. Tanımlı değilse durum boş kalır.

Yanıttaki `StatusId` ve `StatusName` siparişin güncel durumunu gösterir. Güncelleme ve kısmi güncelleme onayları ve durumu değiştirmez, onaylar `GrandTotal` değişse bile yeniden hesaplanmaz.

## Satırlar

* `ProductCode` ve `UnitCode` zorunludur. Birim, ürünün kendi birimlerinden biri olmalıdır (ana birimi ya da 2./3. birimi).
* `Quantity` sıfırdan büyük olmalı; `UnitPrice` negatif olamaz.
* Satırın `CurrencyCode` alanı verilmezse sipariş dövizi kullanılır; `ExchangeRate` satır dövizinin kurudur.
* `Discounts`, satırın indirim oranlarının listesidir. Liste sırasıyla art arda uygulanır: 10, 10 ve 10 satırda %27,1'lik indirim eder. Satırda indirim yoksa liste boş bırakılır.
* `LineGroupName` isteğe bağlıdır ve [satır grupları](/tr/v1/definitions/line-groups/list) tanımından gelir.
* `WarehouseName` isteğe bağlıdır ve şirketin [depolarından](/tr/v1/stock/warehouses/list) biri olmalıdır (`6112`).
* Satırların ID'si yoktur: listedeki sıraları siparişteki sıralarıdır ve güncelleme bütün satırları değiştirir.

### Ana birim miktarı

Satır miktarı (`Quantity`) satırın birimindedir. Yanıttaki `MainUnitQuantity` aynı miktarın ürünün **ana birimi** cinsinden karşılığıdır ve **API tarafından hesaplanır**; istekte göndermezsiniz.

* `UnitCode` ürünün ana birimiyse `MainUnitQuantity` `Quantity`'ye eşittir.
* Ürünün 2. ya da 3. birimiyse önce o birimin çarpanı bulunur: üründe o birim için tanımlı miktar, karşı miktara bölünür (karşı miktar `0` ise `1` alınır). `MainUnitQuantity` = `Quantity` / çarpan.

Örneğin üründe 2. birim için `100` miktar ve `3` karşı miktar tanımlıysa çarpan `33,33`'tür ve 2. birimden `1000` adetlik bir satır `30` ana birim eder. Ürünün ilgili birimi için miktar tanımlı değilse (`0`) ana birim miktarı hesaplanamaz ve satır `6113` ile reddedilir.

## Düzenleme ve silme

Düzenleme ve silme siparişin durumuna ya da başka belgelere (irsaliye, fatura) aktarılmış olmasına göre kısıtlanmaz. Kısıtlar yalnızca şunlardır: kapatılmış cari hareket (yukarıya bakın) ve başka kayıtların (örneğin bir teklif ya da fırsat) bu siparişe bağlı olması (`6014`).

## Paylaşım

`SharingCode` siparişi kimlerin görebileceğini sınırlar: boşsa herkes görür, doluysa kullanıcının [paylaşım kodlarından](/tr/v1/guides/sharing-codes) biri olmalıdır (`6011`). Kullanıcının göremediği siparişler 404 döner.
