Modülün amacı
İki ayrı şey aynı adı taşır; bu makale ikisini ayrı alt bölümlerde ele alır (CTR-041):
- ErpPosV2 uygulaması —
SOURCE_IMPLEMENTED. Dokunmatik ekran için yazılmış ayrı bir VB.NET/DevExpress vezne (banko) uygulaması: giriş, hesap seçimi (Türkçe normalize arama), bakiye kartı, işlem listesi, NAKİT/MADEN/HURDA/VADELİ/HİZMET satır girişi, sanal klavye/numpad, MRZ kimlik okuma. Aynı ERP veritabanına doğrudan SQL ile bağlanır; okuma yoluBakiye.GetBakiye,Cari.IslemListesi,Stok.*. KaynaktaCari.Islemler'e yazan kod yoktur; YENİ FİŞ/FİŞ BAS düğmeleri veFrmFaturaBasgövdesi boştur. [SOURCE_CODE:erppos/ErpPosV2/ErpPosV2/Form/FrmMainForm.vb:22-34; DERIVED:WF-POS-VEZNE-FIS] POS.*SQL şeması —GENERATED_PROPOSAL. Analiz sırasında üretilen 6 betik (pos/00_POS_Kurulum.sql…05_POS_EvrakKapisi.sql): 6 tablo, 14 fonksiyon, 1 view,POS.FisKaydetyordamı. 2026-09-10 05:36'da yalnız dev DB'ye (ERPGOLDV2) kuruldu; üretimde yoktur ve ERPGOLD özelliği olarak anlatılamaz (Proposals/INDEX.md, UNIFICATION_PLAN §5.5). KB-v1'in "POS ve Mobil şemaları ürünün parçası" ifadesi bu nedenle geçersizdir.
Mevcut mobil yazma yolu ayrıdır: Mobil.CariIslem tek satır yazar, BSMV NULL bırakır (INT-ERPMOBIL); bu SP'nin katalog makalesi yok (GAP).
Hangi müşteri tipleri kullanır
Hedef: banko önünde hızlı peşin işlem yapan Sarraf, Perakende kuyumcu ve Döviz bürosu gişeleri (SECTOR_KNOWLEDGE; ERP tarafındaki eşdeğerleri PERAKENDE ve Gişe İşlemleri ekranlarıdır). VARIANT_MATRIX: "ErpPosV2 uygulaması ●", "POS.* şeması GENERATED_PROPOSAL". GAP: ErpPosV2'nin hangi müşteride canlıda çalıştığına dair ticket/kurulum kanıtı yok; PRB-MOBIL-000 teması mobil/web geneline aittir.
Ana kavramlar
Perakende ekranı, Kasa, Peşin (tip 1), Fiş / fiş numarası, Bakiye kartı, İşlem listesi, BSMV, Has / Milyem, Kur fotoğrafı, Evrak / uyum. Öneri katmanı terimleri (fiş kanalı, iz kaydı, eşik, oturum jetonu, TAKOZ_CARPAN) POS.* betiklerine aittir — ürün terimi değildir. Vezne arayüzü sözleşmesi ve işlem modeli proje notlarındadır (erpposv2-vezne-arayuzu, erpgoldv2-islem-modeli-sozlesmesi — öneri).
Menü konumu
ERP ana menüsünde ErpPosV2 düğmesi yoktur; ayrı bir .exe olarak açılır (MENU_TREE'de yalnız ERP'nin kendi Gise Islemleri ve Seri Islemler › Pesin Islem Ekranı (kodsuz, TD-46) düğmeleri vardır). ErpPosV2 içi gezinme: FrmLogin → FrmMainForm → <Hesap Seciniz> (FrmHesapSec) → işlem menüsü (UiTransaction) → UiStockList.
Ekranlar
ErpPosV2 form/kontrolleri 05_Screens envanterinde değil 09_CodeArchitecture/Classes'ta makalelenmiştir (_lifecycle.json yalnız ERPPRO + AifaDeveloper); yaşam döngüsü sınıfı bu yüzden atanmamış.
| Ekran / kontrol | Sınıf | Yaşam döngüsü | Bir cümle |
|---|---|---|---|
| Giriş | FrmLogin | — | 4 üye; giriş mantığı asgari |
| Ana ekran | FrmMainForm (ErpPosV2; ERP'nin SCR-FRMMAINFORM'u ile ad çakışması) | — | Hesap seçimi, bakiye kartı, işlem listesi, YENİ FİŞ / FİŞ BAS / FATURA BAS / İPTAL ET (yazma kodu yok) |
| Hesap seçimi | FrmHesapSec | — | Id / HesapAdi / TCNo / VergiNo listesi, Türkçe normalize arama (FrmHesapSec.vb:26) |
| İşlem satırı | UiTransaction | — | NAKİT/MADEN/HURDA/VADELİ/HİZMET; Tutar=Round(Miktar×Fiyat,2), Fiyat=Round(Tutar÷Miktar,5) (UiTransaction.vb:40) |
| Stok listesi | UiStockList / GridRow | — | Stok.* fonksiyonlarından dokunmatik liste (5 SQL) |
| Fatura | FrmFaturaBas | — | Gövde boş (2 satır) — GAP |
| Klavye/giriş kontrolleri | UIKeyboard, UINumpad, UITextEdit, UILabelEdit, UIButton, UICheckButton, UXButton, UXKeyboard | — | Dokunmatik sanal klavye ve düğme seti |
| Kimlik MRZ | MrzEdit, MrzKit.MrzParser, MrzResult | — | Pasaport/kimlik MRZ ayrıştırma (MrzDocumentType) |
Ana iş akışları
WF-POS-VEZNE-FIS — 5 adım: giriş → hesap seç → satır gir → fiş düğmeleri (UI'da yazma yok; tasarlanan yol banko.asmx → POS.FisKaydet TVP) → fatura (boş). Adım 1–3 SOURCE_IMPLEMENTED, adım 4–5'in yazma tarafı GENERATED_PROPOSAL. ERP eşdeğerleri: WF-PERAKENDE-SATIS, WF-PERAKENDE-IPTAL, WF-KYC-EVRAK-KAPISI-TETIK (POS.EvrakKapisiDurum aynı kuralı sarar — öneri).
Kullanılan tablolar
ErpPosV2 (okuma, SOURCE_IMPLEMENTED): Cari.Hesaplar, Cari.Islemler, Cari.BakiyeIslem, Stok.Maden, Stok.Nakit, Sistem.Kurlar.
POS.* (GENERATED_PROPOSAL; 08_Database/INDEX.md kurulum "INST-ERPGOLDV2 (dev)", sınıf MANUAL_REVIEW):
| Tablo | Satır (dev) | Tasarlanan rol |
|---|---|---|
| POS.FisKanal | 0 | Fişin kanalı (web/masaüstü), kullanıcı/şube/kasa/cihaz izi |
| POS.Oturumlar | 0 | Jeton bazlı banko oturumu |
| POS.IzKaydi | 4 | Olay/denetim kaydı (test satırları) |
| POS.Sabitler | 3 | FIYAT_SAPMA_YUZDE, TAKOZ_CARPAN=0,6 vb. |
| POS.VergiOranlari | 1 | BSMV oranı, dahil/hariç, yürürlük |
| POS.Esikler | 1 | KIMLIK_TESPIT / MASAK_BILDIRIM eşikleri |
Mobil / ERPMobile şemaları katalogda tablo olarak yok (GAP).
Kullanılan fonksiyon / SP / view / trigger'lar
ErpPosV2 çağırdıkları (SOURCE_IMPLEMENTED): Bakiye.GetBakiye, Cari.IslemListesi (katalogda ayrı makale yok — GAP), Stok.GetMadenStoklari, Stok.GetNakitStoklari, Cari.GetHesapListesi.
POS.* (GENERATED_PROPOSAL — makale front-matter'ları SOURCE_IMPLEMENTED yazsa da CTR-041 gereği öneri): SP POS.FisKaydet (TVP ile çok satırlı fiş; tetik kapalıysa reddeder — 02_POS_FisKaydet.sql:84,117,139); fonksiyonlar POS.GetKur, POS.GetKurAlis, POS.KurBul, POS.BSMVHesapla, POS.AnaBirimId, POS.BakiyeIdBul, POS.KarsiIslemTuru, POS.Sabit, POS.EsikTutar, evrak kapısı POS.EvrakKapisiDurum, POS.EksikEvrakVarMi, POS.EksikEvrakSayisi, POS.EksikEvrakListesi, POS.EksikEvrakMetni; view POS.vEksikler. Tetikleyici: hedef yine Cari.AcceptTransaction.
Raporlar
Modüle ait menü raporu yok. Vezne verisi ERP defterine yazılacağından mevcut raporlar geçerli olur: RPT-9 Nakit Stok Hareket, RPT-1 Bakiye Extresi, Reports.GetNakitGirisCikis. Reports.MusteriUrunHacimRaporu / RPT-91 GENERATED_PROPOSAL'dır, POS'a bağlanmaz.
Entegrasyonlar
INT-POS-ERPPOSV2 (BOTH, HIGH — InternalDb.vb:11 sabit bağlantı dizesi, gizli), INT-ERPMOBIL (Mobil.CariIslem), INT-KYC-AIFAUYUM / INT-DOCUMENTS-DB (evrak kapısı), INT-FIS-YAZICI (termal fiş — POS'ta yazdırma kodu yok), INT-BARKOD.
Ayarlar
ErpPosV2: InternalDb.vb içinde gömülü bağlantı dizesi ve designer'da sabit kasa adı/IP (TD-05); CFG-CONFIGURATION-SETTINGS benzeri bir yapılandırma dosyası yok (GAP). Öneri katmanı (GENERATED_PROPOSAL): CFG-POS-FIYAT-SAPMA-YUZDE, CFG-POS-TAKOZ-CARPAN, CFG-POS-BSMV, CFG-POS-KIMLIK-TESPIT. ERP tarafında geçerli: CFG-HARD-PERAKENDE-7000, CFG-HARD-PERAKENDE-3000USD, CFG-BSMV.
İş kuralları
07_BusinessRules/INDEX.md'te MOD-POS kuralı yok; WF-POS-VEZNE-FIS'in andığı BR-POS-TRIGGER-ACIK-001 makalesi yok (öneri katmanı: "AcceptTransaction kapalıysa fiş yazılmaz"). Vezneye uygulanacak çekirdek kurallar: BR-GENEL-002 yeni fiş numarası, BR-BSMV-001, BR-PERAKENDE-002…006, BR-KUR-001 kur fotoğrafı, BR-KASA-001 kasa kilidi, BR-DEFTER-URETIMI. Enum: UIKeyboard.KeyboardType, UXButtonType, InternalDb.IDbConnectionState, MrzDocumentType. Öneri uyarı metinleri ("v1 kapsami disi IslemKodu…", "HAS kuru bulunamadi…") 02_POS_FisKaydet.sql'dedir.
Sık sorunlar
PRB-MOBIL-000 (mobil/web teması); ErpPosV2'ye özgü ticket tespit edilmedi (GAP-TICKET-03). Perakende/banko şikâyetleri ERP ekranı üzerinden: PB-050 7000 TL / 3000 USD uyarıları, PB-025 termal fiş boş, PB-023 yazıcı yazdırmıyor. Tipik arıza (INT-POS-ERPPOSV2): tetik kapalı → satır yazılır ama bakiye/stok oluşmaz; havuzlu bağlantıda trigger cursor sızıntısı sonraki istekleri zehirler.
Bilinen kusurlar
ErpPosV2: Cari.Islemler'e yazma yolu yok; FrmFaturaBas boş; sabit bağlantı dizesi ve sa parolası açık metin (TD-05); TD-13 InternalDb yaşam döngüsü. ERP tarafı: TD-03 tetikleyici cursor sızıntısı, TD-32 demo DB'de tetikler kapalı, H-006 işlem kaydediliyor ama bakiye/stok oluşmuyor, H-085…H-090 perakende ekranı sorunları. Çelişki: CTR-041.
Müşteri varyasyonları
Hiçbir müşteri şemasında (MüşteriŞemasıD, MüşteriŞemasıA, MüşteriŞemasıB, MüşteriŞemasıC) POS nesnesi yok; POS.* yalnız dev DB'de (ERPGOLDV2). ErpPosV2'nin kurulu olduğu müşteri bilinmiyor (customer_scope: UNKNOWN). Aşama 0 kurulum notları proje dokümanı pos-asama0-kurulum-notlari'nda — öneri.
Kritik kod parçaları
InternalDb (Class/InternalDb.vb, 160 satır — bağlantı ve sorgu; satır 11 bağlantı dizesi), FrmMainForm (Form/FrmMainForm.vb 44 satır — satır 22/34 hesap seçimi ve bakiye yükleme), FrmHesapSec, UiTransaction (satır 40 tutar/fiyat yuvarlama), UiStockList (5 SQL), MrzKit.MrzParser, My.MyApplication. Öneri SQL: pos/00_POS_Kurulum.sql:93,139, 02_POS_FisKaydet.sql:84. Sınıf dizini Classes/INDEX.md (22 sınıf MOD-POS).
İlgili eğitimler
ErpPosV2 için eğitim konusu yok (GAP). Banko akışı için ERP eğitimleri: TRN-041 günlük akış, TRN-102…TRN-105 gün başı/gün içi/gün sonu, TRN-017 NORMAL mi PEŞİN mi, TRN-021 BSMV; veznedar için H-169 pazartesi sabahı kontrol listesi.
Kaynaklar
SOURCE_CODE:erppos/ErpPosV2/ErpPosV2/Form/FrmMainForm.vb:22-34; Form/FrmHesapSec.vb:26; Controls/Cusrtom/UiTransaction.vb:40; Class/InternalDb.vb:11 · GENERATED_PROPOSAL: pos/00_POS_Kurulum.sql:93,139; pos/02_POS_FisKaydet.sql:84,117,139; pos/05_POS_EvrakKapisi.sql:194 · DB_QUERY: POS.* dev DB kurulum zamanı 2026-09-10 05:36 · GOVERNANCE: CTR-041, Proposals/INDEX.md · DERIVED: INT-POS-ERPPOSV2, WF-POS-VEZNE-FIS.
Bilinmeyenler
- GAP: ErpPosV2 canlıda hangi müşteride, hangi sürümle çalışıyor; yazma yolu (
banko.asmx?) hiç geliştirildi mi — kaynakta yok. - CTR-041 uzantısı:
POS.*fonksiyon/SP/view makalelerininrealityalanıSOURCE_IMPLEMENTED, tablolarıGENERATED_PROPOSAL; tutarsız — hepsi GENERATED_PROPOSAL olmalı (findings dosyasına işlendi). - GAP:
Mobil.CariIslem,Cari.IslemListesi,Mobil/ERPMobileşema nesneleri katalogda yok; ERPMobile taşıma katmanı UNVERIFIED. - GAP: ErpPosV2
FrmMainFormile ERPPROFrmMainFormad çakışması —_lifecycle.json/ekran dizininde POS formları yok; sınıf makaleleriproduct_scope: ERPGOLD_COREyazıyor,POS_VARIANTolmalı (CTR adayı). - GAP:
BR-POS-TRIGGER-ACIK-001kural makalesi yok; öneri kuralları BR olarak yazılacaksaGENERATED_PROPOSALetiketiyle yazılmalı.
