İskontolu Sepet Aktar
İskontolu sepet, diğer App2App sepetleriyle aynı akışla çalışır. İş ortağı https://basket.ode.al/{referenceCode} adresini tetikler, Ödeal de sepet detayını iş ortağının basketUrl adresinden GET isteği ile alır. Fark, sepet detayında ürünlere allowances (iskonto) bilgisinin, sepet özetine de totalAllowance ve paidAmount alanlarının eklenmesidir.
HESAPLAMADA DİKKAT EDİLMESİ GEREKENLER
1. Tüm tutarlar KDV dahil gönderilir.
| Alan | Anlamı |
|---|---|
products[].price.grossPrice | Ürünün iskontosuz, KDV dahil birim fiyatı |
products[].allowances[].price | Satırın tamamına (adet × birim fiyat) uygulanan KDV dahil iskonto tutarı. Birim başına değildir. |
basketPrice.grossPrice | Sepetin iskontosuz, KDV dahil toplamı |
basketPrice.totalAllowance | Ürünlere gönderilen iskonto tutarlarının toplamı (KDV dahil) |
basketPrice.paidAmount | Tahsil edilecek tutar: grossPrice − totalAllowance |
2. totalAllowance mutlaka gönderilmelidir. Ürünlerde allowances olsa bile totalAllowance gönderilmez ya da 0 gönderilirse iskontolar dikkate alınmaz ve sepet iskontosuz tutarla oluşur.
3. totalAllowance, ürün iskontolarının toplamına kuruşu kuruşuna eşit olmalıdır. Aksi halde 2081 - İskonto tutarı hatalı hatası alınır.
4. Ara toplam iskontosunu ürünlere KDV dahil tutar üzerinden dağıtın. Örneğin ara toplamdan 40,00 TL iskonto uygulanacaksa bu tutarı satırların KDV dahil tutarlarına oranla dağıtın, her satırı 2 haneye yuvarlayın, kalan kuruşu son satıra ekleyin. Satırlara düşen iskontoların toplamı tam 40,00 olmalıdır.
KDV hariç (matrah) tutarı satırlara bölüp her satıra ayrıca KDV ekleyerek yuvarlamayın. Her satırdaki yuvarlama toplama 1 kuruş fazla ya da eksik yansıyabilir.
5. 1 kuruş farkı normaldir. Ödeal, iskontolu satırlarda matrahı ve KDV'yi satır bazında 2 haneye yuvarlar; sepet ve fatura toplamı satır toplamlarından oluşur (GİB belge aritmetiği). Bu yüzden sizin grossPrice − totalAllowance hesabınızla Ödeal'in hesapladığı toplam arasında en fazla 1 kuruş fark oluşabilir ve bu fark kabul edilir. Fark 1 kuruşu aşarsa sepet reddedilir.
6. Fişte ve faturada farklı iskonto rakamı görünmesi normaldir. Bilgi fişinde KDV dahil iskonto toplamı (totalAllowance), faturada ise KDV hariç (matrahtan düşülen) iskonto tutarı görünür.
Alanlar
İskonto, products[] altındaki allowances dizisi ile gönderilir:
| Alan | Tip | Açıklama |
|---|---|---|
price | decimal | Tutar bazlı iskontoda satırın tamamına uygulanan KDV dahil iskonto tutarı |
rate | decimal | Oran bazlı iskontoda yüzde değeri (ör. 10 = %10) |
isRateBased | boolean | Zorunlu. Tutar bazlı iskonto için false, oran bazlı iskonto için true |
subType | string | LINE: satır (ürün) iskontosu, SUB: ara toplam iskontosunun satıra düşen payı |
UYGULANMA SIRASI
Bir üründe birden fazla iskonto varsa önce LINE, ardından SUB iskontoları uygulanır. Hesaplamanın öngörülebilir olması için her ürüne tek bir iskonto göndermenizi öneririz.
KISITLAR
- İskonto sonrası sepet toplamı 1 TL'den az olamaz.
- Cari hesap ve avans bilgi fişlerinde ürün gönderilmediği için iskonto uygulanmaz.
Örnek Senaryo
Sepette üç ürün var ve ara toplamdan KDV dahil 40,00 TL iskonto uygulanacak:
| Ürün | Adet | KDV dahil birim | KDV | Satır tutarı | Payı | Satıra düşen iskonto |
|---|---|---|---|---|---|---|
| Gözleme | 2 | 120,00 | %10 | 240,00 | 240 / 405 | 23,70 |
| Ayran | 3 | 35,00 | %10 | 105,00 | 105 / 405 | 10,37 |
| Kola | 1 | 60,00 | %20 | 60,00 | 60 / 405 | 5,93 |
| Toplam | 405,00 | 40,00 |
Satır iskontoları 2 haneye yuvarlandıktan sonra toplamları tam 40,00 olduğu için kuruş düzeltmesi gerekmedi. Toplam 40,00'dan farklı çıksaydı fark son satıra eklenirdi.
Sepet Detay Formatı
İlgili referenceCode'a karşılık döneceğiniz sepet detayı aşağıdaki formatta olmalıdır:
{
"referenceCode": "ISK-20261023-0001",
"receiptInfo": {
"Masa No": "12",
"Adisyon No": "4587"
},
"employeeInfo": {
"employeeReferenceCode": "100",
"name": "Mehmet",
"surname": "Demir",
"identityNumber": "10000000146",
"gsmNumber": "5321234567",
"mailAddress": null
},
"customerInfo": {
"type": "INDIVIDUAL",
"title": null,
"name": "Ayşe",
"surname": "Yılmaz",
"identityNumber": "10000000146",
"taxNumber": null,
"taxOffice": null,
"gsmNumber": "5321234567",
"email": "[email protected]",
"city": "İstanbul",
"town": "Kadıköy",
"address": "Caferağa Mah. Örnek Sok. No:1",
"referenceCode": "CUST-0001"
},
"products": [
{
"referenceCode": "GZL-01",
"name": "Gözleme",
"quantity": 2,
"unitCode": "C62",
"price": { "grossPrice": 120.00, "vatRatio": 10, "sctRatio": 0 },
"allowances": [
{ "price": 23.70, "isRateBased": false, "subType": "SUB" }
]
},
{
"referenceCode": "AYR-01",
"name": "Ayran",
"quantity": 3,
"unitCode": "C62",
"price": { "grossPrice": 35.00, "vatRatio": 10, "sctRatio": 0 },
"allowances": [
{ "price": 10.37, "isRateBased": false, "subType": "SUB" }
]
},
{
"referenceCode": "KLA-01",
"name": "Kola",
"quantity": 1,
"unitCode": "C62",
"price": { "grossPrice": 60.00, "vatRatio": 20, "sctRatio": 0 },
"allowances": [
{ "price": 5.93, "isRateBased": false, "subType": "SUB" }
]
}
],
"basketPrice": {
"grossPrice": 405.00,
"totalAllowance": 40.00,
"paidAmount": 365.00
},
"paymentOptions": [
{
"type": "CASH",
"amount": 365.00
}
]
}Önemli
İstek sırasında basketUrl adresinize gelen referenceCode parametresini kullanarak yukarıdaki formatta bir yanıt dönmelisiniz. paymentOptions tutarı, iskonto sonrası tahsil edilecek tutar (paidAmount) olmalıdır.
Ödeal'in Hesapladığı Sonuç
| Ürün | Satır tutarı | İskonto (KDV dahil) | Matrah | KDV | Ödenecek |
|---|---|---|---|---|---|
| Gözleme | 240,00 | 23,70 | 196,64 | 19,66 | 216,30 |
| Ayran | 105,00 | 10,37 | 86,03 | 8,60 | 94,63 |
| Kola | 60,00 | 5,93 | 45,06 | 9,01 | 54,07 |
| Toplam | 405,00 | 40,00 | 327,73 | 37,27 | 365,00 |
1 Kuruş Farkı Neden Oluşur?
Aşağıdaki örnekte KDV dahil birim fiyatı 30,204 TL (KDV hariç 25,17 TL, %20 KDV) olan üç ürün ikişer adet satılıyor. Ara toplam 181,22 TL ve ara toplamdan KDV hariç 10,00 TL (KDV dahil 12,00 TL) iskonto uygulanmak isteniyor.
| Gönderilen satır iskontoları | totalAllowance | Faturada iskonto (KDV hariç) | Genel toplam |
|---|---|---|---|
| 4,00 / 4,00 / 4,00 | 12,00 | 3,33 + 3,33 + 3,33 = 9,99 | 169,23 |
| 4,00 / 4,00 / 4,01 | 12,01 | 3,33 + 3,33 + 3,34 = 10,00 | 169,22 |
İlk satırda 12,00 TL üç satıra eşit bölündüğünde her satırın matrah iskontosu 3,333 → 3,33'e yuvarlanır; faturada iskonto 9,99, toplam 169,23 olur. İkinci satırda kuruş farkı son satıra verildiği için faturadaki iskonto tam 10,00, genel toplam 169,22 olur.
ÖNERİ
Faturadaki iskonto tutarının hedeflediğiniz değere tam eşit çıkmasını istiyorsanız hedef tutarı satırlara 2 haneli olarak dağıtın ve kuruş farkını tek bir satıra verin. Her satırın KDV dahil karşılığını bu tutardan hesaplayıp yuvarlayarak gönderin. Bu durumda fişte görünen KDV dahil iskonto toplamı (yukarıdaki örnekte 12,01) kuruş seviyesinde farklı olabilir; bu bir hata değildir.

