codvane

E-ticaret sitende e-arşiv faturayı otomatikleştirmek

Sipariş geldiği anda faturanın kesilip müşteriye ulaşması için gereken adımlar: doğru belge türü, entegratör seçimi ve sipariş akışına bağlanma.

codvane ekibi · [Tarih] · 2 dk okuma
Masada dizüstü bilgisayarla çalışan kişi

Bir e-ticaret sitesinde siparişler artmaya başladığında faturayı tek tek elle kesmek hızla bir darboğaza dönüşür. İyi haber şu: doğru kurulduğunda fatura, ödeme onaylandığı anda kendiliğinden kesilip müşterinin e-postasına gidebilir.

1. Hangi belgeyi kesmen gerektiğini netleştir

Kural basit: alıcı e-fatura mükellefiyse e-fatura, değilse e-arşiv fatura düzenlenir. Bireysel müşterilere yaptığın satışların neredeyse tamamı e-arşiv olur. Kurumsal müşteri vergi numarası girdiğinde ise önce mükellefiyet sorgusu yapılır.

2026 itibarıyla elektronik fatura genel kural hâline geldi. Hangi tarihten ve hangi tutardan itibaren zorunlu olduğun ise şirket türüne ve defter tipine göre değişiyor.

Not: Bu yazı genel bilgilendirme amaçlıdır. Kendi durumuna uyan kuralı mali müşavirinle netleştirmeni öneririz.

2. Bir özel entegratör seç

GİB'in ücretsiz e-Arşiv Portalı küçük hacimde iş görür ama otomasyon için bir API sunmaz. Siparişlerden otomatik fatura kesmek için bir özel entegratörün API'sine ihtiyacın var. Seçerken şunlara bak:

  • Belgelenmiş bir REST API ve test (sandbox) ortamı
  • E-fatura mükellef sorgusu yapabilmesi
  • Fatura PDF'ini ve numarasını yanıt olarak dönmesi
  • Kontör ya da belge başı fiyatlandırmanın hacmine uygun olması

3. Siparişten faturaya akışı kur

Akışın kendisi beş adımdan oluşur:

  1. Ödeme onaylandığında bir olay (event) tetiklenir.
  2. Müşteri vergi numarası girdiyse mükellefiyet sorgulanır.
  3. Sonuca göre e-fatura ya da e-arşiv isteği entegratöre gönderilir.
  4. Dönen fatura numarası ve PDF bağlantısı siparişe kaydedilir.
  5. Müşteriye faturalı sipariş onayı e-postası gider.

Medusa v2 kullanıyorsan bu akışı bir subscriber ile kurabilirsin:

// src/subscribers/order-invoice.ts (basitleştirilmiş örnek)
import type { SubscriberArgs, SubscriberConfig } from "@medusajs/framework"
import { Modules } from "@medusajs/framework/utils"
import { createInvoice } from "../lib/e-invoice" // entegratör istemcisi

export default async function orderInvoice({ event, container }: SubscriberArgs<{ id: string }>) {
  const orders = container.resolve(Modules.ORDER)
  const order = await orders.retrieveOrder(event.data.id, { relations: ["items", "billing_address"] })

  const invoice = await createInvoice(order) // e-fatura mı e-arşiv mi, burada karar verilir

  await orders.updateOrders(order.id, {
    metadata: { ...order.metadata, invoice_no: invoice.number, invoice_pdf: invoice.pdfUrl },
  })
}

export const config: SubscriberConfig = { event: "order.placed" }

4. Hataları ve iadeleri unutma

Entegratörün API'si anlık olarak yanıt vermeyebilir. Fatura isteklerini bir kuyruğa alıp başarısız olanları yeniden denemek, siparişlerin faturasız kalmasını önler. İade ve iptallerde de karşılık gelen belgenin otomatik oluşturulması için aynı akışa bir dal eklemen gerekir.

Sonuç

Doğru kurulduğunda fatura süreci operasyonunun görünmeyen bir parçası olur. Sen satışa odaklanırsın, faturalar arka planda kesilir.

Markanı bir üst seviyeye taşıyalım.

Hangi hizmetin sana uygun olduğundan emin değil misin? Bir görüşmede birlikte karar verelim.

Ücretsiz görüşme planla