Sektör Vakası: Faturadan Kalem Çıkarma + e-Fatura Entegrasyonu
Türkiye'de yaygın senaryo: PDF/görsel faturadan satır kalemlerini çıkarıp e-Fatura formatına dönüştürme. Tam pipeline.
Şükrü Yusuf KAYA
13 dakikalık okuma
OrtaVaka: e-Fatura Kalem Çıkarımı
Senaryo: Türkiye'de küçük muhasebe firması. Müşterilerden gelen kâğıt + PDF faturaları e-Fatura sistemine aktarmak gerekiyor. Manuel: 1 fatura = 8 dk. Hedef: < 30sn.
1. Schema Tanımı#
python
from pydantic import BaseModel, Field, validatorfrom typing import List, Literalfrom datetime import datefrom decimal import Decimal class Item(BaseModel): description: str quantity: Decimal = Field(gt=0) unit: Literal["adet", "kg", "lt", "m", "m2", "m3", "saat"] unit_price: Decimal = Field(gt=0) vat_rate: Literal["0", "1", "8", "10", "18", "20"] # KDV oranları @property def total(self) -> Decimal: return self.quantity * self.unit_price @property def vat_amount(self) -> Decimal: return self.total * Decimal(self.vat_rate) / 100 class Invoice(BaseModel): seller_vkn: str = Field(pattern=r"^\d{10}$") # vergi numarası seller_name: str buyer_vkn_or_tckn: str = Field(pattern=r"^\d{10,11}$") buyer_name: str invoice_no: str invoice_date: date items: List[Item] = Field(min_length=1) @property def grand_total(self) -> Decimal: return sum(i.total + i.vat_amount for i in self.items)e-Fatura için tam Pydantic schema
2. Vision LLM ile Çıkarım#
python
import base64from anthropic import Anthropic client = Anthropic() with open("fatura.pdf.png", "rb") as f: img_b64 = base64.standard_b64encode(f.read()).decode() system = """Sen bir Türk e-Fatura veri çıkarma uzmanısın.Verilen fatura görselinden tüm bilgileri çıkar. Önemli:- Vergi numarası 10 hane (kurum) veya TC Kimlik 11 hane (birey)- KDV oranları: 0, 1, 8, 10, 18, 20 (yeni: %20)- Tutarlar Türk Lirası, ondalık virgül (1.234,56) → 1234.56'ya dönüştür- Tarih: GG.AA.YYYY veya GG/AA/YYYY → YYYY-MM-DD Eksik/okunamayan alanlar → "needs_review": true ekle ve neyin eksik olduğunu söyle.""" r = client.messages.create( model="claude-sonnet-4-6", max_tokens=2000, system=system, messages=[{ "role": "user", "content": [ {"type": "image", "source": {"type": "base64", "media_type": "image/png", "data": img_b64}}, {"type": "text", "content": "Bu faturayı işle, JSON döndür."} ] }]) # Validationimport jsondata = json.loads(r.content[0].text)invoice = Invoice.model_validate(data)print(invoice.grand_total)Vision LLM ile fatura → schema
3. Hata Yönetimi#
Model çıkarımına confidence skoru ekletbil. Eşik altında insan inceler.
class ExtractedInvoice(BaseModel): invoice: Invoice confidence: float = Field(ge=0, le=1) needs_review: bool review_reasons: List[str] = []
confidence < 0.85 veya needs_review → kuyruk → human.
Production sonucu: Bu pattern ile (Claude Sonnet 4.6 vision + Pydantic + cross-check) Türkiye'de bir muhasebe firması fatura işleme süresini 8 dk → 22 sn'ye düşürdü. Hatalı kayıt oranı %3.2 → %0.4.
Yorumlar & Soru-Cevap
(0)Yorum yazmak için giriş yap.
Yorumlar yükleniyor...
İlgili İçerikler
1. Temeller — Yapay Zekâ ve LLM'lere Giriş
Bu Eğitim Hakkında ve Verimli Çalışma Yöntemi
Öğrenmeye Başla1. Temeller — Yapay Zekâ ve LLM'lere Giriş
Yapay Zekâ → Üretken AI → LLM: Bağlamsal Harita
Öğrenmeye Başla1. Temeller — Yapay Zekâ ve LLM'lere Giriş
LLM'ler Aslında Nasıl Düşünür? (Token, Embedding, Attention)
Öğrenmeye BaşlaBağlantılı Pillar Konular