# Veri Doğruluğu Kabul Matrisi — Final V1

Bu dosya teknik şartnamenin özellikle 10, 11, 12, 13, 14, 15, 40 ve 50. maddelerinin kod karşılığını özetler.

## 10 — Duplicate kontrolü
- `financial_transactions` üzerinde `source + external_id` UNIQUE.
- Kaynaklar arası tekrarlar için `dedupe_fingerprint`, `dedupe_confidence`, `duplicate_state`, `duplicate_of_id` alanları vardır.
- Yüksek güvenli tekrarlar `duplicate` olarak işaretlenir ve kâr hesabından çıkarılır.
- Orta güvenli tekrarlar `candidate` olur; sessizce sayılmaz ve `data_conflicts` kaydı açılır.

## 11 — Finans normalizasyonu
- `TransactionMapper` ham Trendyol tiplerini kanonik kategori + muhasebe etkisine çevirir.
- Mapping sürümü kayıt üstünde tutulur (`mapping_version`).
- Bilinmeyen tipler `UNKNOWN`; `included_in_profit=false`.

## 12 — Çifte sayma koruması
- Profit sorguları yalnız `duplicate_state=canonical` ve `included_in_profit=true` hareketleri kullanır.
- `CommissionAgreementInvoice` komisyonu ikinci kez gider yazmamak için varsayılan olarak kâr dışıdır.
- Excel finans ekleri API ile aynı pipeline'dan geçer.

## 13 — Profit Engine
- Ham JSON doğrudan hesaplanmaz.
- `FinancialNormalizer` -> kanonik finans hareketleri -> `ProfitReportService` -> `ProfitCalculator` sırası uygulanır.
- Komisyon/bedel iadeleri `expense_reversal` olarak netleştirilir.

## 14 — Maliyet
- Maliyet barkod/product_id + sipariş tarihi ile çözülür.
- Maliyet bulunamazsa `NULL`; 0'a çevrilmez.
- Maliyet geçmişinde açık tarih aralığı yeni kayıt geldiğinde bir önceki gün kapatılır; gelecekle çakışma reddedilir.

## 15 — Eksik veri
- Eksik maliyet, UNKNOWN finans tipi, duplicate adayı, siparişle eşleşmeyen finans kaydı ve açık veri çatışması rapor sağlığını `EKSİK` yapar.
- `net_profit` ve ortak payları güvenilir veri oluşana kadar yayınlanmaz.
- Geçici hesap yalnız `provisional_net_profit` etiketiyle gösterilir.

## 40 — Yasaklanan davranışların kontrolü
- Eksik maliyette `COALESCE(...,0)` ile kâr üretimi kaldırıldı.
- UNKNOWN sessizce atılmaz.
- Cross-source duplicate sessizce iki kez sayılmaz.
- Ürün maliyeti isimden değil barkod/product ilişkisi üzerinden çözülür.
- API secret frontend'e verilmez.
- Sayfalama ve 15 günlük finans penceresi servis/job katmanındadır.

## 50 — Son kabul / mutabakat
- Mutabakat `Payment Order` toplamını aynı `paymentOrderId` ile bağlı kanonik finans hareketlerinin `signed_amount` toplamıyla karşılaştırır.
- Farklar Payment Order bazında listelenir.
- UNKNOWN/duplicate candidate varsa mutabakat `matched` olamaz.
- Seçilen dönemde Payment Order yoksa sistem yanlış şekilde `MUTABIK` demez; `warning` üretir.

## Çalıştırma kabul sırası
1. `.env` içine canlı Trendyol kimlik bilgilerini gir.
2. `php artisan migrate --seed`
3. Queue + scheduler çalıştır.
4. Full Sync çalıştır.
5. Eksik maliyet/UNKNOWN/çatışma ekranlarını sıfırla.
6. Mutabakat ekranında Payment Order farklarını kapat.
7. Dashboard `TAM` olduğunda Net Kâr ve ortak kârı yayınlanır.
