> ## 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.

# Alış Faturaları

> Alış faturalarının alanları, numaralandırma, depo hareketi ve cari hareket kuralları.

Alış faturası, bir başlık ve bir ya da daha fazla satırdan oluşur. Fatura tipi hiçbir zaman istekte bir alan değildir: çağırdığınız endpoint'e göre sabittir. Dört fatura endpoint grubu vardır — [Alış](/tr/v1/purchase-invoices/overview), [Satış](/tr/v1/sales-invoices/overview), [Alış İade](/tr/v1/purchase-return-invoices/overview) ve [Satış İade](/tr/v1/sales-return-invoices/overview) — aynı alanları, numaralandırma mekanizmasını ve sonuç kodlarını paylaşır; farklar ilgili sayfalarda belirtilmiştir.

| İşlem            | Endpoint                                                                   |
| ---------------- | -------------------------------------------------------------------------- |
| Listeleme        | [`GET /purchase-invoices`](/tr/v1/purchase-invoices/list)                  |
| Detay            | [`GET /purchase-invoices/{invoiceId}`](/tr/v1/purchase-invoices/get)       |
| Oluşturma        | [`POST /purchase-invoices`](/tr/v1/purchase-invoices/create)               |
| Güncelleme       | [`PUT /purchase-invoices/{invoiceId}`](/tr/v1/purchase-invoices/update)    |
| Kısmi güncelleme | [`PATCH /purchase-invoices/{invoiceId}`](/tr/v1/purchase-invoices/patch)   |
| Silme            | [`DELETE /purchase-invoices/{invoiceId}`](/tr/v1/purchase-invoices/delete) |

<Warning>
  **API tutarları hesaplamaz ve tutarlı olup olmadıklarını denetlemez.** Satır tutarları, indirim tutarları, KDV, ek vergiler, fatura toplamları ve ağırlıklı kur ortalaması gönderdiğiniz gibi kaydedilir ([irsaliye satırlarıyla](/tr/v1/despatches/overview) aynı alanlar). API'nin hesapladığı istisnalar: depo hareketi taşıyan bir satırın [ana birim miktarı](#satırlar) ve satırın tevkif edilen KDV tutarı (`WithheldVatAmount = VatAmount * WithholdingNumerator / WithholdingDenominator`).
</Warning>

## Zorunlu alanlar

* `InvoiceNumber`: şirkette bu fatura tipi içinde benzersiz, en fazla 20 karakter. Oluştururken `"Next"` gönderilirse numara **ALFATNO** seri numarasından otomatik üretilir. Güncellemede `"Next"` gönderilemez.
* `Date`: fatura tarihi. Saat de gönderirseniz fatura saati olarak yazılır, göndermezseniz o anki saat kullanılır.
* `CustomerCode`: kullanıcının görebildiği bir cari.
* `Lines`: en az bir satır, her satırda kendi `CurrencyCode`'u.

`DueDays` (vade günü) faturayla birlikte saklanır. `ShipmentDefinitionCode` (isteğe bağlı) [sevkiyat tanımlarından](/tr/v1/definitions/shipment-definitions/list) gelir.

**Fatura dövizi ve `EInvoiceType` istekte yer almaz, API tarafından belirlenir**: `CurrencyCode` başlıkta değil her satırda gönderilir; faturanın dövizi satırlardan türetilir (satırların tek bir dövizi varsa o, birden fazlaysa şirketin varsayılan dövizi) ve yanıtta `CurrencyCode`/`CurrencyId` olarak döner. `EInvoiceType`, şirketin e-Fatura kullanıp kullanmadığına göre API tarafından hesaplanır ve yanıtta döner; siz göndermezsiniz.

## Cariden alınan bilgiler

Faturanın adresi, unvanı, vergi numarası ve vergi dairesi **istekte alan olarak yer almaz**. Bunlar, faturanın kaydedildiği anda cariden kopyalanır (carinin fatura adresi varsa o, yoksa ilk adresi) ve cari sonradan değişse bile faturada sabit kalır — bu yüzden yalnızca yanıtlarda görünürler (`Address`, `CustomerTitle`, `TaxNumber`, `TaxOffice`). Güncellemede bu değerler yalnızca `CustomerCode` değiştiyse yeniden hesaplanır; değişmediyse mevcut değerler korunur.

## 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.
* `Discounts`, satırın indirim oranlarının listesidir, sırasıyla art arda uygulanır.
* `LineGroupName` isteğe bağlıdır, [satır grupları](/tr/v1/definitions/line-groups/list) tanımından gelir.
* `WarehouseName`, ürünün stok tipi "stok tutulmuyor" **dışında** olan her satırda zorunludur ve şirketin [depolarından](/tr/v1/stock/warehouses/list) biri olmalıdır: böyle bir satır her zaman bir depo hareketi taşır (aşağıya bakınız). Ürün stok tutmuyorsa `WarehouseName` gönderilmeyebilir; bu durumda satır hiç depo hareketi üretmez.
* `CurrencyCode` her satırda zorunludur. `ExchangeRate`, satırın dövizi şirketin varsayılan döviziyse `1` olmalı; değilse zorunlu ve 0'dan büyük olmalıdır (entegratörden gelir, API hesaplamaz).
* `WithholdingNumerator`/`WithholdingDenominator` tevkifat payını/paydasını tanımlar; API bunlardan ve `VatAmount`'tan `WithheldVatAmount`'ı hesaplar.
* `AdditionalTaxCode1-3`/`AdditionalTaxRate1-3`/`AdditionalTaxAmount1-3`/`AdditionalTaxBase1-3` üç bağımsız slotta gönderildiği gibi kaydedilir.

Yanıttaki `MainUnitQuantity`, `Quantity`'nin ürünün ana birimine çevrilmiş halidir; [irsaliye satırlarıyla](/tr/v1/despatches/overview#satırlar) aynı hesaplama: `UnitCode` ana birimse miktarın kendisi, değilse birimin çarpanına bölünmüş hali.

## Depo hareketi, Lot ve seri no takibi

İrsaliyeden farklı olarak fatura kendisi bir depo fişi değildir, ama **her satır her zaman bir tane taşır**: API, faturanın arkasında otomatik bir depo fişi (alış faturasında giriş hareketi) ve ürünün stok tipine göre irsaliyenin gerektireceği aynı Lot ya da seri no girdilerini üretir — satırdaki `Lots` ya da `SerialNumbers`, [irsaliye kurallarının](/tr/v1/despatches/overview#lot-ve-seri-no-takibi) birebir aynısıyla (Lot izlenen bir ürün `LotNo`/`Quantity`/`UnitCode` ister, FIFO/LIFO/FEFO bir ürünün giriş girdileri yeni lot oluşturur, seri izlenen bir ürünün girdileri yeni seri no kaydeder). Bu depo fişi tamamen dahili bir uygulama detayıdır: yanıtta dönmez ve irsaliye numara serilerini tüketmez.

## Güncellemede satırın kimliği

İrsaliye satırı gibi, bir fatura satırının ürettiği depo hareketi, Lot/seri no girdileri ve sipariş bağlantısı kaydı satırın kendi ID'sine referans verir; bu yüzden "bütün satırları sil, yenilerini yaz" mantığı bu referansları koparır. Bunun yerine, [irsaliyedeki](/tr/v1/despatches/overview#güncellemede-satırın-kimliği) gibi **satırların istekte gönderildiği sıra, güncellemede kimliklerini belirler**: istekteki `i`. sıradaki satır, o anda `i`. sırada olan mevcut satırla aynı kabul edilir ve ürettiği kayıtlar onunla birlikte taşınır. Öncekinden daha az satır göndermek sondaki satırları kaldırır, daha fazla göndermek sona yeni satırlar ekler.

## Sipariş ve irsaliye bağlantısı

Bir fatura satırının ürettiği depo hareketi, tıpkı bir irsaliye satırı gibi bir sipariş satırına bağlantı taşıyabilir; API satırın miktarının bağlı sipariş satırının kalan miktarını aşmadığını kontrol eder. Noyax uygulamasında var olan bir irsaliyeden aktarılarak oluşturulmuş bir fatura satırı (kendi depo hareketini üretmek yerine) bu bağlantıyı korur: bu API böyle bir aktarım oluşturmaz, ama böyle bir bağlantısı olan mevcut bir faturayı güncellerseniz miktarı bağlı irsaliye satırına göre kontrol edilir.

## Cari hareket

Her alış faturası **koşulsuz olarak** bir cari hareket kaydı oluşturur (alacak, çünkü alış faturası şirketin tedarikçiye olan borcunu artırır) — Sipariş'in isteğe bağlı `CreateCustomerMovement`'ının aksine burada bir seçenek yoktur. Bu hareket bir tahsilat/ödeme ile zaten kapatılmışsa faturanın carisi, tutarı ve dövizi artık değiştirilemez ve fatura silinemez (`3015`).

## Kaydet kontrolleri

* Bir satırda `VatRate` `0` gönderildiyse `VatExemptionCode` doldurulmalıdır; bu kural yalnızca satış ve alış iade faturasında uygulanır.
* Herhangi bir satırda `VatExemptionCode` doluysa faturanın `InvoiceTypeCode`'u `ISTISNA`, `IHRACKAYITLI` ya da `SGK` olmalıdır.
* `ProfileId` ve `InvoiceTypeCode` ikisi birlikte gönderildiğinde, `InvoiceTypeCode` seçilen `ProfileId` için izin verilen değerlerden biri olmalıdır (aşağıdaki tabloya bakınız). Alış iade ve satış iade faturalarında `InvoiceTypeCode` yalnızca `IADE` olabilir.
* Şirket e-Fatura kullanıyorsa `ProfileId` ve `InvoiceTypeCode` zorunlu olur; kullanmıyorsa ikisi de isteğe bağlıdır.
* Şirket e-Fatura kullanıyorsa, satış ve alış iade faturasında seçilen carinin vergi numarası, fatura ünvanı ve vergi dairesi dolu olmalıdır.
* Fatura GİB'e gönderildiyse (`EFaturaId` doluysa) güncellenemez.

| `ProfileId`       | İzin verilen `InvoiceTypeCode` değerleri                        |
| ----------------- | --------------------------------------------------------------- |
| `IHRACAT`         | `ISTISNA`                                                       |
| `TEMELFATURA`     | `SARJ`, `SARJANLIK`, `IADE`, `TEVKIFATIADE` dışındakiler        |
| `TICARIFATURA`    | `SARJ`, `SARJANLIK`, `IADE`, `SGK`, `TEVKIFATIADE` dışındakiler |
| `KAMU`            | `SATIS`, `TEVKIFAT`, `ISTISNA`                                  |
| `ENERJI`          | `SARJ`, `SARJANLIK`                                             |
| `HKS`             | `SATIS`, `KOMISYONCU`                                           |
| `ILAC_TIBBICIHAZ` | `SATIS`, `TEVKIFAT`                                             |
| `YATIRIMTESVIK`   | `SATIS`, `TEVKIFAT`, `ISTISNA`                                  |
| `IDIS`            | `SATIS`, `TEVKIFAT`, `ISTISNA`, `IHRACKAYITLI`                  |

## Ek yapılandırılmış alanlar

Fatura, daha az sık karşılaşılan senaryolar (ihracat, kamu, SGK, ilaç/tıbbi cihaz, Hal) için bir dizi tamamen isteğe bağlı ek alan kabul eder. Bunların hiçbiri API tarafından doğrulanmaz ya da `ProfileId`/`InvoiceTypeCode` ile herhangi bir şekilde eşleştirilmez: ne gönderirseniz olduğu gibi kaydedilir ve döner; kendi `ProfileId`'nize uygun olanları göndermek sizin sorumluluğunuzdadır.

**Başlık**: `DeliveryInfo` (ihracat teslimat adresi ve şartları), `PaymentMeans` (ödeme yöntemleri), `ReferencedDespatches` (faturanın referans verdiği irsaliyeler), `CustomerIdentitySchemes` (ek cari kimlik numaraları, ör. `MUSTERINO`, `TICARETSICILNO`), `PublicSectorSpendingUnit` (ödemeyi yapacak kamu harcama birimi) ve `SgkInfo` (SGK fatura detayları).

**Satır**: `ExportInfo` (satırın ihracat teslimat/paketleme detayları), `MedicineDeviceInfo` (ilaç/tıbbi cihaz takip satırları), `HalInfo` (hal künye bilgisi) ve `ProductInfo` (model, marka, menşei ülke ve diğer tanımlayıcılar).

## Paylaşım

`SharingCode` faturayı 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. Kullanıcının göremediği faturalar 404 döner.
