# Borç Takip — kurulum kılavuzu

> Müşteri sunucusuna kurulum, güncelleme, kaldırma ve yedek. Kullanım (tanım, önizleme, onay, geri alma) için
> [kilavuz/README.md](kilavuz/README.md). Paket içinde kısa özeti `README-KURULUM.txt` olarak kurulum klasörüne iner.

## 0. Dağıtım modeli ve gereksinimler

Borç Takip **yerinde çalışan ajandır** (A türü): müşterinin Logo sunucusunda (ya da Logo veritabanına erişen bir
sunucuda) Windows servisi olarak koşar; veri ERP'ye gitmez. Tek dosyalık kurulum `BorcTakipKurulum-<sürüm>.exe`
(self-contained, .NET kurulumu gerekmez).

| Gereksinim | Ayrıntı |
|---|---|
| İşletim sistemi | Windows Server 2016+ ya da Windows 10/11, x64; kurulum yönetici yetkisiyle |
| SQL Server | 2016+; ürün veritabanı (tanımlar, çalışma kayıtları, onaylar) için. Logo'nun SQL sunucusu olabilir |
| Logo | Tiger 3 / Tiger Enterprise / GO 3 — SQL üzerinden okuma; yazım için aşağıdaki satır |
| Logo Objects | **Kapama ve geri alma** (Logo'ya yazım) için sunucuda Logo istemcisi + kayıtlı Logo Objects, bir Logo kullanıcısı ve lisansör bilgisi. Yalnız önizleme/rapor kullanılacaksa gerekmez |
| Tarayıcı | Güncel Edge / Chrome / Firefox (panel `http://localhost:5192`) |
| Ağ | Lisans için `https://lisans.erp.tr`, güncelleme için `https://beta.erp.tr` (443). Çevrimdışı lisans `.erplic` ile de olur |
| Disk | ~400 MB (uygulama + güncelleme önbelleği) + arşiv |

## 1. Kurulum

1. `BorcTakipKurulum-<sürüm>.exe` dosyasını sunucuya kopyalayın, çift tıklayın (UAC → **Evet**).
   Exe henüz kod imzalı değildir; SmartScreen uyarısında **Daha fazla bilgi → Yine de çalıştır**.
2. Klasör (varsayılan `C:\ERP\BorcTakip`), servis adı (`ERP BorcTakip`) ve port (`5192`, doluysa sonraki boş
   port önerilir) sorulur; Enter varsayılanı kabul eder.
3. Kurulum dosyaları yerleştirir, **`ERP BorcTakip`** Windows servisini (LocalSystem, otomatik başlat) ve
   **`ERP Update BORCTAKIP`** zamanlanmış görevini (her gece 03:40, SYSTEM) kurar, servisi başlatır ve `/healthz`
   sağlık denetimini bekler.
4. Tarayıcıda `http://localhost:5192/kurulum` açılır. Sihirbaz beş adımdır:

| Adım | Ne sorulur | Not |
|---|---|---|
| 1 Veritabanı | Ürün veritabanının SQL sunucusu ve adı | «Bağlantıyı Test Et» yeşil olmadan İleri yok; şema kendiliğinden kurulur |
| 2 Yönetici | İlk yönetici hesabı | Sonra Profil → İki adımlı doğrulama (TOTP) önerilir |
| 3 Logo | Logo SQL bağlantısı (salt-okur kullanıcı, §2) ve isteğe bağlı Logo Objects kullanıcısı + lisansör | Firma/dönem tanım başına seçilir. Yazım bilgisi yoksa ürün «yalnız önizleme/rapor» kipinde çalışır |
| 4 E-posta | SMTP (rapor ve onay bildirimleri) | Atlanabilir |
| 5 Lisans | Otomatik kayıt → **eşleştirme kodu** (ERP'ye iletilir → 15 gün deneme / lisans bağlanır) | Çevrimdışıysa cihaz bilgi dosyası → `.erplic` aynı kartta yüklenir |

Panel varsayılan olarak **yalnız sunucunun kendisinden** (`127.0.0.1`) açılır; ağdan erişim sonraki sürümdedir.

### Gözetimsiz kurulum

```
BorcTakipKurulum-<sürüm>.exe --sessiz --klasor "D:\ERP\BorcTakip" --port 5192 --servis "ERP BorcTakip" --guncelleme-saati 03:40
```

| Bayrak | Anlamı |
|---|---|
| `--sessiz` | Soru sormaz, varsayılanları/verilenleri kullanır |
| `--klasor`, `--servis`, `--port` | Kurulum klasörü, servis adı, başlangıç portu |
| `--guncelleme-saati SS:dd` | Otomatik güncelleme görevinin saati |
| `--guncelleyici-yok` | Otomatik güncelleme görevini kurmaz (yalnız elle güncelleme) |
| `--tarayici-yok` | Kurulum sonunda tarayıcıyı açmaz |
| `--kaldir` | Kaldırır (§4) |
| `--yardim` (`-h`, `/?`) | Bayrak listesi |

## 2. Logo erişimi

**Okuma** yalnız SQL ile ve **salt-okur** yapılır (bağlantı `ApplicationIntent=ReadOnly`). Sihirbazın Logo adımı
aşağıdaki betiği ekranda üretir; Logo veritabanı yöneticisi çalıştırır (parolayı kendiniz belirleyin):

```sql
USE [master];
CREATE LOGIN [borctakip_okur] WITH PASSWORD = N'<güçlü parola>', CHECK_POLICY = ON;
USE [<LOGO_VERITABANI>];
CREATE USER [borctakip_okur] FOR LOGIN [borctakip_okur];
ALTER ROLE [db_datareader] ADD MEMBER [borctakip_okur];
```

**Yazım** (kapama, geri alma) SQL ile yapılmaz; Logo'nun kendi FIFO borç kapama işlevi **Logo Objects** üzerinden
çağrılır. Bu yüzden Logo'nun iş kuralları (kapama kayıtları, PAYTRANS/CLFLINE bağları) Logo'nun ürettiği gibidir.
Logo kullanıcı parolası ve lisansör bilgisi `BT_Config`'te DataProtection ile şifreli saklanır.

| Logo ürünü | Önizleme/rapor | Kapama + geri alma |
|---|---|---|
| Tiger 3 | ✅ | ✅ uçtan uca denendi (DEMO_TIGER3, TL + dövizli FIFO, geri alma fark 0) |
| Tiger Enterprise | ✅ (aynı şema) | 🟡 Tiger 3 ile aynı Objects arayüzü; sahada ilk kurulumda doğrulanır |
| GO 3 | ✅ | 🟡 sahada ilk kurulumda doğrulanır |

**Korumalar:** her kapama önce önizlenir; yazım onaydan sonra ve lisansla yapılır; firma 1 ve «korumalı» işaretli
firmalarda yöneticinin canlı onayı istenir; aynı firma/dönemde iki kapama aynı anda koşamaz (süreçler arası kilit
`ErpBorcKapama:FFF:DD`, kilit bağlantısı koparsa çalışma durur); her kapama satır satır geri alınabilir.

## 3. Güncelleme

- **Otomatik:** `ERP Update BORCTAKIP` görevi her gece güncelleme sunucusuna sorar; yeni sürüm imzalıysa
  (ES256 + SHA-256) indirir, servisi durdurur, dosyaları değiştirir, sağlık denetimi (`/healthz.version` = hedef)
  geçmezse **eski sürüme geri döner**. Günlük: `C:\ProgramData\ErpUpdate\BORCTAKIP\uygulayici-*.log`.
- **Elle:** yeni `BorcTakipKurulum-<sürüm>.exe`'yi çalıştırın; mevcut kurulumu bulur ve günceller.
- **Korunanlar:** `appsettings.Production.json`, `listen-url.txt`, `%ProgramData%\ERP\BORCTAKIP\` (bağlantı,
  anahtarlar, arşiv) ve SQL veritabanı. Şema yalnız eklemelidir; eski sürüme dönüş veri kaybettirmez.
- Panelde **Ayarlar → Güncelleme** kartı sürüm durumunu gösterir; yönetici aynı yerden müşteri paketini indirebilir.

## 4. Kaldırma

```
BorcTakipKurulum-<sürüm>.exe --kaldir
```

Servisi ve güncelleme görevini kaldırır, kurulum klasörünü siler. **Silmedikleri:** SQL veritabanı ve
`%ProgramData%\ERP\BORCTAKIP\` (anahtarlar + arşiv) — yeniden kurulumda aynı veriyle devam edilir. Tamamen
temizlemek için ikisini elle silin. Logo verisine dokunulmaz.

## 5. Yedek ve geri yükleme

| Ne | Nerede | Nasıl |
|---|---|---|
| Ürün veritabanı | SQL Server (sihirbazda seçilen ad) | Mevcut SQL yedek planına ekleyin (FULL, günlük) |
| Anahtarlar | `%ProgramData%\ERP\BORCTAKIP\keys\` | Klasör yedeği. **Kaybolursa** şifreli Logo/SMTP parolaları çözülemez, sihirbazda yeniden girilir |
| Bağlantı + arşiv | `%ProgramData%\ERP\BORCTAKIP\` | Klasör yedeği |
| Ayar | `<kurulum>\appsettings.Production.json` | Klasör yedeği |

Geri yükleme: aynı sürümü kurun → servisi durdurun → veritabanını ve `%ProgramData%\ERP\BORCTAKIP\`'i geri
koyun → servisi başlatın. Logo tarafındaki kapamalar Logo'nun kendi yedeğindedir.

## 6. Sorun giderme

| Belirti | Bakılacak yer / çözüm |
|---|---|
| Panel açılmıyor | `sc query "ERP BorcTakip"`; `http://localhost:5192/healthz`; günlük `<kurulum>\logs\` |
| Sihirbaz bağlantı testi kırmızı | Ekrandaki öneri metni (sunucu adı, SQL kimlik doğrulama, güvenlik duvarı 1433) ve `<kurulum>\logs\` günlüğü |
| «Yalnız önizleme» kipinde kalıyor | Logo adımında Logo Objects kullanıcısı/lisansör girilmemiş ya da Objects kayıtlı değil (Logo istemcisini onarın) |
| Kapama «değişmedi» | Çalışma ayrıntısında Logo'nun hata metni gösterilir (dönem kilidi, kullanıcı yetkisi, açık oturum) |
| «Kilit alınamadı» | Aynı firma/dönemde başka kapama (bu ürün ya da WizLog) sürüyor; bitince yeniden deneyin |
| Lisans kapalı | Ayarlar → Lisans; internet yoksa `.erplic` yükleyin. Önizleme ve elle rapor lisanssız çalışır |
| Güncelleme olmadı | `C:\ProgramData\ErpUpdate\BORCTAKIP\uygulayici-*.log`; karantinadaki sürüm atlanır |

Destek: support@erp.tr — e-postaya `/healthz` çıktısını ve ilgili günlük dosyasını ekleyin (parola içermez).

## 7. ERP tarafında yapılacaklar (iç)

- Sürüm yayını: paket `deploy\package.ps1 -Yayinla` → beta `/dl/borc-takip/<sürüm>` → ErpLic `Register-ErpLicRelease`
  (yayın anahtarı ErpLic panelinde — Hakan).
- Kod imzası (B-08) ve plan fiyatı (B-07) kararları — Hakan.

## Paketi üretmek

```
pwsh deploy\package.ps1            # dist\BorcTakipKurulum-<sürüm>.exe
pwsh deploy\package.ps1 -Yayinla   # + beta /dl/ ve indirme kaydı
```

Betik sürümü `Directory.Build.props`'tan alır, exe künyesini doğrular, `ConnectionStrings:Ajan` dolu ise paketi
üretmez (müşteri paketinde sır olmaz) ve bu kılavuzun kısa özetini (`deploy\README-KURULUM.txt`) pakete koyar.
