NetSuite’te Depozito / Avans Tahsilat Yönetimi: 340’tan 120’ye Otomatik Virman, Fatura Kapatma ve Kur Değerleme (Detaylı Rehber)
- abdullah susuz
- 5 gün önce
- 5 dakikada okunur
Birçok şirkette sahada gördüğümüz standart senaryo şu:
Müşteriden önce ödeme (depozito/avans) geliyor.
Muhasebe bu tahsilatı 340 (Alınan Sipariş Avansları / Depozitolar) benzeri hesaplarda tutuyor.
Sonra satış faturası kesilince bu avansı 120 (Alıcılar) tarafına virmanlayıp faturayla kapatmak gerekiyor.
Kur farkı olan işlemlerde iş daha da uzuyor:
tahsilat kuru, fatura kuru, ay sonu değerleme kuru ve oluşan farklar…
Bu yazıda NetSuite tarafında bu yapıyı sürdürülebilir ve otomatik hale getirmenin mantığını, muhasebe etkisini ve kurguyu adım adım anlatıyorum.

1) İşin Muhasebe Mantığı: Neyi, Ne Zaman, Hangi Kurla Taşıyoruz?
Bu yapıda 3 temel olay var:
A) Depozito/Avans Tahsilatı Geldiğinde
Para bankaya girer.
Muhasebe etkisi (örnek):
102 Banka (Borç)
340 Avanslar (Alacak)
NetSuite’te bu “Customer Deposit / Customer Payment” gibi standart akışlarla yapılabilir; ancak bazı şirketlerde süreç/kurgu/yerel ihtiyaç nedeniyle bu avans “prepayment” gibi standart modülle değil, manuel/entegrasyonla 340’a alınmış olabilir. Sizdeki senaryo da bu: mevcut düzeni bozmayacağız.
B) Fatura Kesildiğinde
Fatura GL etkisi genellikle:
120 Alıcılar (Borç)
600/391 vb. (Alacak)
Ama burada “müşteri zaten ödemişti” dediğimiz noktaya geliyoruz. Yani 120’de alacak oluştu ama tahsilat 340’ta bekliyor.
Çözüm:
Fatura kesildiği an, 340’taki avansın fatura tutarı kadar kısmını 120’ye virmanlamak.
Muhasebe virman kaydı:
340 (Borç)
120 (Alacak)
Bu kayıt sonrası 120’de fatura borcu ile 120’ye gelen “alacak virman” birbirini kapatabilecek hale gelir.
C) Faturayı Kapatma (Apply / Match)
Son adımda NetSuite’te faturanın kapatılması gerekir. İki yöntem vardır:
Payment üzerinden faturayı kapatmak (Apply)
Journal ile kapatmak (NetSuite’de “Journal Apply” mantığı – hesap türleri ve ayarlara bağlı)
Sizin ihtiyacınız “otomatik” olduğu için tipik yaklaşım:
Fatura oluşunca virman jurnalını üret,
Ardından “apply” işlemini otomatikleştir (script ile) veya yapıyı “fatura ödeme eşleştirmesi” şeklinde kurgula.
2) NetSuite’te Sağlam Bir Kurgunun Temel Taşları
Bu işin düzgün çalışması için 4 yapı taşını netleştirmek lazım:
2.1. Depozito / Avansın Faturaya Bağlanma Anahtarı
Sahada en çok hata buradan çıkar.
Bağlantı anahtarı seçenekleri:
Sales Order numarası
Fatura üzerindeki sipariş referansı (created from / custom field)
Müşteri + Proje + Dönem gibi kombinasyon
External ID (entegrasyon varsa)
Öneri: “fatura üzerinde bulunan sipariş numarası” sizde anahtar gibi duruyor. En sağlamı:
Tahsilat kaydında (340’a atan) hangi SO / hangi iş / hangi referans olduğunu net tutmak
Fatura üzerinde aynı referansı taşımak
2.2. GL Hesaplarının Netliği (340/120) ve Çoklu Defter (varsa)
NetSuite multi-book kullanılıyorsa bu virmanın hangi book’ta oluşacağı, hangi subsidiary’de çalışacağı önemlidir.
340 ve 120 aynı subsidiary / aynı book mantığında mı?
Intercompany var mı?
Tek hesap planı mı, subsidiary bazlı farklı hesap mı?
Bunlar net değilse script doğru jurnal üretse bile “kapanış” tarafında muhasebe itirazı gelir.
2.3. Para Birimi ve Kur Mantığı
Kur farkı konusu ikiye ayrılır:
İşlem anındaki kur (tahsilat, fatura)
Ay sonu değerleme kuru (revaluation)
Bunları ayrı ele almak gerekir.
2.4. Otomasyonun “İdempotent” Olması
Bu kelime kritik: Aynı faturaya script 2 kere çalışırsa 2 kere jurnal basmamalı.
Bu yüzden:
Fatura üzerinde “Virman Oluşturuldu” flag’i
Oluşan jurnal internal id’si fatura body field’ına yazılır
Yeniden çalışırsa aynı kaydı bulur, ikinciyi üretmez
3) Otomasyon Akışı: Fatura Kesilince Ne Olacak?
Burada en temiz senaryo:
Fatura (Invoice) oluşturulur / onaylanır (status)
Script invoice’u yakalar (UE afterSubmit veya Scheduled/MapReduce)
Fatura tutarı + para birimi + referans (SO no) alınır
İlgili müşterinin 340’ta bekleyen avansları bulunur
Toplam avans >= fatura tutarı ise:
340→120 virman journal oluştur
Journal’ı invoice’a referansla bağla
Apply/Close adımını çalıştır
Avans < fatura tutarı ise:
Kısmi virman yap (isteniyorsa)
Kalan tutar 120’de açık kalsın
Uyarı / log / görev üret
“Avansları bulma” yaklaşımı
Avanslar sistemde nasıl tutuluyor?
Eğer avanslar “Customer Payment” ile giriliyor ama GL 340’a gidiyorsa, aramada “deposit/prepayment” yerine “payment transaction + GL impact” tarafı incelenir.
Eğer avanslar “Journal Entry” ile 340’a alınıyorsa, o journal’lar filtrelenir.
En sağlıklı yöntem: Avansı yaratan kayıtta mutlaka bir “reference field” taşımak (SO No / Project / External Ref).
4) Kapanış İşlemi: Journal ile Fatura Kapanır mı?
Bu sorunun cevabı NetSuite’te “kurguya” bağlı.
Standart yaklaşım: Payment transaction’ı üzerinden Invoice “apply” edilir.
Journal doğrudan “apply” edilmez (klasik muhasebe mantığında da jurnal bir ödeme değildir).
Ancak bazı hesap tipleri ve ayarlarla “Journal Application” benzeri kapatma davranışları kurgulanabilir.
Sizin senaryoda hedef:
Müşteri ödeme işlemi zaten “340’ta”
Biz 340’ı 120’ye taşırken ödeme gibi davranmak istiyoruz
Bu yüzden 2 yaklaşım var:
Yaklaşım 1 (Muhasebe açısından en temiz):
Customer Payment/Deposit’ı doğru mantıkla kullanmak ve invoice apply’ı standarttan yapmak.
Ama siz “mevcut yapıyı koruyacağız” dediğiniz için bunu değiştirmiyoruz.
Yaklaşım 2 (Mevcut yapıya uyumlu):
340→120 virman journal üret
Sonra invoice’u kapatmak için:
ya ikinci bir “Customer Payment” yaratıp apply etmek (sanal ödeme)
ya da mevcut deposit/payment kaydını invoice’a bağlamak (script ile)
En pratik olan genelde:
invoice oluştuğunda, “application” işlemini otomatik yapan bir script.
5) Kur Değerleme (Revaluation) İşin Neresinde?
Kur değerleme iki yerde karşımıza çıkar:
5.1. Tahsilat ile Fatura Arasındaki Kur Farkı
Örnek:
Avans 1.1000 kurla geldi
Fatura 1.1500 kurla kesildi
Burada 340’ta bekleyen tutar ve faturanın 120 etkisi farklı kurdan olduğu için virman sırasında kur farkı doğabilir.
Bu farkın muhasebeleşmesi için 2 seçenek var:
Virmanı fatura kurundan yaparsın, aradaki farkı “kur farkı” hesaplarına atarsın
Virmanı avans kurundan yaparsın, fatura açık kalır ve kapanışta fark oluşur
Hangi yöntem doğru?
Şirketin muhasebe politikası + denetim yaklaşımı + yerel uygulamalar belirler.
Türkiye’de pratikte çoğu firma:
Ödeme ve fatura farklı kurdan ise aradaki farkı kur farkı gelir/gider olarak muhasebeleştirir.
5.2. Ay Sonu Değerleme (Unrealized FX)
Ay kapanışında 120’de açık bakiye varsa değerleme yapılır.
Ama siz otomasyonla faturayı kapatıyorsanız, 120 açık kalmayacağı için değerleme etkisi azalır.
Asıl soru:
340 hesabı da dövizli bakiye tutuyor mu?
Ay sonu 340 için de revaluation gerekiyor mu?
Eğer 340 dövizli açık bakiye taşıyorsa:
340 da revaluation’a tabi olabilir (hesap tipine ve muhasebe yaklaşımına göre)
NetSuite’te revaluation genelde AR/AP hesaplarına odaklıdır; ama hesap bazlı revaluation kurguları ayrıca ele alınır.
Bu yüzden iyi bir tasarımda:
340’ta dövizli bakiye kalmaması hedeflenir (mümkünse)
Ya da 340 için de kur değerleme kuralı netleştirilir
6) Kenar Senaryolar (Gerçek Hayatın Zor Kısmı)
Bu otomasyon en çok şu durumlarda patlar; baştan tasarlamak gerekir:
6.1. Kısmi Avans + Kısmi Fatura
Avans 5.000 USD
Fatura 8.000 USD
Ne yapacağız?
5.000 USD’lik kısmı 340→120 virman
Kalan 3.000 USD invoice açık
Bu durumda script:
“available deposit” mantığıyla kısmi virman yapmalı
ve bir sonraki tahsilatta kalan kısmı kapatacak şekilde çalışabilmeli
6.2. Bir Avans ile Birden Fazla Fatura
Avans tek, faturalar parçalı
Burada avansı “allocation” yapmanız gerekir:
Avansın kalan bakiyesi izlenmeli
Hangi faturaya ne kadar gittiği loglanmalı
Genelde bu noktada bir “custom record: deposit allocation ledger” mantığı şart olur.
6.3. İade / Credit Memo
Fatura kesildi, kapandı, sonra iade oldu.
340’a geri mi atılacak?
Müşteriye nakit iade mi?
Sonraki faturaya mı sayılacak?
Bu senaryoları tasarlamazsanız otomasyon bir ay sonra “muhasebe kabusu” olur.
6.4. Subsidiary / Intercompany
Avans bir subsidiary’de, fatura başka subsidiary’deyse:
intercompany due to/from gerekir
düz 340→120 virmanı yetmez
7) Minexa Yaklaşımı: Bu İş Neden “Script Yazdım Bitti” Değil?
Bu tip otomasyonlar sadece kod değil:
Muhasebe politikası
Kur yönetimi
Referans anahtarı tasarımı
Denetlenebilir kayıt izi (audit trail)
Hata yönetimi (re-run, rollback, log)
ile birlikte bir “mini ürün” gibi tasarlanmalı.
İyi bir çözümde mutlaka şunlar olur:
Fatura üzerinde “Avans Bulundu / Virman Yapıldı / Kapatıldı” statüleri
Oluşan journal ve payment referansları
Hata olursa kullanıcıya açıklayan log + e-posta bildirim
Tekrar çalıştırınca çift kayıt basmayan idempotent yapı
Yorumlar