> Menünün altındaki her dal bu dosyada bir bölümdür (`module-doc:section`); dosya ve bölümler ilk deploy'da otomatik açılır. `module-doc:todo` işaretli alt bölümleri modülü üreten kişi ya da AI doldurur (`lowcode.instructions.md` §0.13); MCP ile üretimde talep bu bölümler doldurulmadan Testing'e alınamaz. "Ek — Ekran envanteri" bölümü wizard dosyalarından üretilir, elle düzenlenmez.
Satış ve satınalmanın ortak kullandığı**Kontaklar** kartı (müşteri ve tedarikçi; şirket ya da bireysel), onu sınıflandıran **Kontak Etiketleri** ve uygulamadaki tüm onay adımlarının onaycılarını tek yerde tutan **Onaycılar** listesi. İleride yapılacak Satış ve Satınalma belgeleri (teklif, sipariş, fatura) kontağı bu ekrandan seçer; onay akışları onaycıyı Onaycılar'dan okur. Kart başlangıçta Satınalma › Tanımlamalar altında `App.Prc.Supplier` olarak üretildi; satış tarafı da kullanacağı için Yönetim modülüne taşındı.
- Kart bölümleri (Satış, Satınalma, Mali Bilgi ve Diğer, Muhasebe, Notlar) `Adm_T_Contact` satırının kendisini düzenleyen menüsüz `Form` sekmeleridir (ilişki `Id → Id`), Sağlık Kartları'ndaki kalıp. İlgili Kişiler ve Banka Hesapları liste sekmesidir (`Id → ContactId`).
- Satış/Satınalma sekmelerindeki ödeme koşulu, ödeme yöntemi, teslim yöntemi ve Incoterm seçenekleri Satınalma › Tanımlamalar tablolarından (`Prc_T_*`) gelir; bu tanımlar taşınmadı.
- Adres, Kiracılar ekranıyla aynı zinciri kullanır: Ülke › Şehir › İlçe › Mahalle; mahalle seçimi posta kodunu doldurur.
- Logo tek görseldir (`multiple: false`) ve formda 120×120 gösterilir.
- Sektör (`SectorId`) Sektörler ekranının (`App.Definitions.Sector`, `Adm_T_Sector`) kiracıya ait aktif kayıtlarından seçilir. `JobPosition` kolonu tabloda kalır, ekranda yoktur.
- Kontak telefonu (`Phone`) `phoneCountry` biçimindedir: maske seçilen ülkenin kodu ve numara kalıbıyla değişir, `pattern``^[0-9]{4,15}$`. Ülke alanı olmayan İlgili Kişiler telefonu `phoneGlobal` maskesi ve `^[0-9]{10}$` kuralı taşır; web sitesi `pattern`, e-posta `email` doğrulaması taşır.
- Ekran adı "Onaycılar" (`App.Definitions.Approver`, `Adm_T_Approver`): başlık "Satınalma Onaycıları" olsa da açıklama tüm onayların burada toplanacağını söyler.
Yönetim (`App.Administration`) › Tanımlamalar (`App.Administration.Definitions`):
| Sıra | Ekran | Kod | Not |
| --- | --- | --- | --- |
| 1 | Sektörler | `App.Definitions.Sector` | kod seed'i |
| 2 | Kontaklar | `App.Definitions.Contact` | ana kart; sekmeler: Satış (`App.Definitions.ContactSales`), Satınalma (`App.Definitions.ContactPurchasing`), Mali Bilgi ve Diğer (`App.Definitions.ContactFinancial`), Muhasebe (`App.Definitions.ContactAccounting`), Notlar (`App.Definitions.ContactNotes`), İlgili Kişiler (`App.Definitions.ContactPerson`), Banka Hesapları (`App.Definitions.ContactBankAccount`) — hepsi menüsüz |
Tüm tablolar kiracı (`TenantId`) + tam audit + soft delete taşır.
-`Adm_T_ContactTag` (Name, Color, IsActive)
-`Adm_T_Contact` — kimlik/adres (Country, City, District, Township, PostalCode)/vergi, satış ve satınalma koşulları (`Prc_T_*` tanım tablolarına Id ile), kullanıcılar (`AbpUsers`), para birimi (`Sas_H_Currency.Name`), sektör (`Adm_T_Sector`), dil (`Sas_H_Language.CultureName`), muhasebe alanları, Latitude/Longitude (float), Notes (HTML, nvarchar(MAX)), IsActive.
- Tanım lookup'ları yalnızca `IsActive = 1` ve silinmemiş kayıtları listeler.
- Ülke › İl › İlçe › Mahalle cascade: üst alan değişince alttakiler temizlenir; mahalle seçilince posta kodu `copy` tarifiyle dolar.
- Ana form yalnızca kimlik + adres alanlarını taşır. Satış, Satınalma, Mali Bilgi ve Diğer, Muhasebe ve Notlar sekmelerinde yalnızca düzenleme açıktır; yeni kontak önce ana formdan eklenir, sekmeler kayıttan sonra açılır.
- IBAN doğrulaması: `^[A-Z]{2}[0-9]{2}[A-Z0-9]{11,30}$` (boşluksuz, büyük harf).
- Yeni kayıtta Tür = Şirket, Grup Teklif Talebi = Sipariş Üzerine, Fatura onayı = 3 doğrulamadan sonra sor varsayılanları tablodan gelir.
- **Onaycılar:** aynı departman ve onay yerine birden çok onaycı girilebilir; akış bunları`|` ile birleştirir ve herhangi birinin onayını kabul eder. Pasif satırlar akışta kullanılmaz. Departman lookup'ı aktif şubelerin departmanlarını "Şube - Departman" olarak, onaycı lookup'ı aktif kullanıcıları ad soyad ile listeler. Yeni satırda Onay Yeri = Satınalma, Aktif = evet.
Yetki ağacı: `App.Administration` grubu ›`App.Administration.Definitions`›`App.Definitions.Contact` (sıra 2), `App.Definitions.ContactTag` (sıra 3) ve `App.Definitions.Approver`, her biri + Create/Update/Delete/Export/Import/Note. Alt formların yetkisi `App.Definitions.Contact` altındadır: Satış, Satınalma, Mali Bilgi ve Diğer, Muhasebe, Notlar (7–11), İlgili Kişiler (12), Banka Hesapları (13). `Modules = Sas|Adm`, `MultiTenancySide = Both`. Yetkiler hiçbir role otomatik atanmaz. Onaycılar'ın yazma yetkisi yalnız yöneticilerde olmalıdır; akışlar tabloyu ekran yetkisi olmadan okur. Widget'lar: Kontaklar, Kontak Etiketleri ve Onaycılar'da Toplam · Aktif · Pasif; alt formlarda widget yok.
Dış entegrasyon yok. Ülke/Şehir/İlçe, Para Birimi, Dil, Sektör, Kullanıcılar, Departmanlar, Şubeler ve Satınalma tanımları yalnızca okunur. Onaycılar'ı Satınalma › Talepler departman onayı (`ApprovalArea = 'Purchase'`) okuyacaktır; diğer onay yerleri ilgili modüllerin akışları için hazırdır.
6. Onaycılar'da "Branch1 - Yönetim" departmanı için Onay Yeri = Satınalma, Onaylayacak Kişi = BT eklenir; bu departmanın malzeme talepleri BT'nin onayına düşer.
- **Tedarikçiler ekranı nereye gitti?** Bu ekrandır; müşteri ve tedarikçi aynı Kontaklar kartında tutulur.
- **Kişiler neden listede ayrı satır değil?** Kişi kontak değildir; kartın İlgili Kişiler sekmesindedir.
- **Yeni kontakta Satış/Satınalma sekmeleri neden yok?** Sekmeler kaydın kendisini düzenler; kayıt ana formdan eklendikten sonra görünür.
- **Sekme "Kayıt Bulunamadı" gösteriyor.** Kullanıcının o sekmenin okuma yetkisi yoktur (`App.Definitions.ContactSales` vb.); yetkiler rol ekranından verilir.
- Geri alma: önce `Adm_Contact.json`, sonra alt formlar ve `Adm_ContactTag.json``delete_wizard` ile silinir; `Adm_Approver.json` bağımsızdır ama onu okuyan akışlar önce kaldırılmalıdır. Tablolar yalnızca açık onayla `dropTables: true` ile düşürülür.
| Açıklama | Kontaklar — satış ve satınalmanın ortak kullandığı şirket ya da bireysel kartlar (müşteri ve tedarikçiler): kimlik, adres, vergi no ve iletişim bilgileri. |
| Geliştirme talebi | Satınalma Modülü |
| Kaynak | `Adm_T_Contact` · filtre `"IsDeleted" = 'false'` |
| Alt formlar | `App.Definitions.ContactSales` (Id → Id), `App.Definitions.ContactPurchasing` (Id → Id), `App.Definitions.ContactFinancial` (Id → Id), `App.Definitions.ContactAccounting` (Id → Id), `App.Definitions.ContactNotes` (Id → Id), `App.Definitions.ContactPerson` (Id → ContactId), `App.Definitions.ContactBankAccount` (Id → ContactId) |