feat(plan): devreden borç planın parçası, borçlu ayda %45 kuralı
- Devreden borç: elle girilen ya da dönem başından önceki son ay sonu ölçümü - Borçlu ay: harcanabilir = gelir × oran (vars. %45), kalan borca, artan birikime - Birikim hedefi ve Kakeibo devri borçlu ayda uygulanmaz; kapanış devir üretmez - Plan düzenleme ve sihirbazda devreden borç alanı + oran; canlı önizleme - Plan'daki eski borç bölümü ve taksit önerisi kaldırıldı (veri yerinde) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,194 @@
|
||||
# Kakeibo panel istekleri (güncel: 14 Kasım 2026, 2. tur)
|
||||
|
||||
## VS Code'daki Claude'a verilecek prompt
|
||||
|
||||
Aşağıdaki metni olduğu gibi kopyalayıp yapıştırın:
|
||||
|
||||
```text
|
||||
docs/KAKEIBO_PANEL_ISTEKLERI.md dosyasını baştan sona oku. Bu dosya, docs/BORC_TAKIBI.md'deki
|
||||
"Borç sayfası" yaklaşımının yerine geçiyor; borç artık ayrı sayfada değil, aylık planın ve panelin
|
||||
içinde "Devreden borç" olarak takip edilecek.
|
||||
|
||||
Kurallar:
|
||||
1. Kod yazmadan önce: ilgili dosyaları bul (Planlama, Defter, Ay sonu değerlendirmesi, Panel,
|
||||
Borç sayfası, nav menüsü) ve bana dosya listesiyle birlikte adım adım bir plan göster.
|
||||
Onayımı bekle.
|
||||
2. Mevcut verilere dokunma: veritabanı yedeği al, yalnızca alan ekle, eski kayıtları toplu
|
||||
değiştirme, koleksiyon silme. Borç sayfasını kaldırırken verisini silme.
|
||||
3. Bölüm sırasıyla ilerle (A → H). Her bölümden sonra test et, kısa özet ver.
|
||||
4. Hesapları dosyadaki "Kontrol" rakamlarıyla birim testine dönüştür.
|
||||
5. Türkçe büyük harf için toLocaleUpperCase("tr-TR") kullan; CSS text-transform kullanma.
|
||||
6. Bitince npm run lint, typecheck ve testler geçsin; CHANGELOG "Yayınlanmamış" altına yaz.
|
||||
```
|
||||
|
||||
> **Not (Claude, sohbetten):** Bu bilgisayardaki çalışma kopyasında (dal `faz/17-ice-aktarma`, sürüm 1.2.0, 9 Kasım) Planlama, Defter, Ay sonu ve Borç ekranları yok. Bu ekranların bulunduğu güncel sürüm üzerinde çalışılmalı. Dosyalar bulunamazsa Claude tahminle yeni ekran yazmasın, sorsun.
|
||||
|
||||
---
|
||||
|
||||
## A · Devreden borç: planın parçası olsun
|
||||
|
||||
### A1 · Planlama sayfasında yeni kutu
|
||||
- "Birikim hedefi" kutusunun **üzerine** aynı görünümde **"Devreden borç"** kutusu eklenir.
|
||||
- Aylık plana alanlar eklenir (eski alanlar değişmez, varsayılan `null`):
|
||||
- `carriedDebtMinor`: devreden borç (pozitif sayı)
|
||||
- `carriedDebtSource`: `"auto"` ya da `"manual"`
|
||||
- `debtPaymentMinor`: bu ay borca giden tutar (hesaplanır)
|
||||
- `spendableRateBp`: borçlu ayda harcanabilir oranı (varsayılan **4500** = %45)
|
||||
|
||||
### A2 · İlk dönem: elle giriş
|
||||
- Önceki tanımlı dönem yoksa "Devreden borç" boş ve düzenlenebilir gelir. Kullanıcı elle girer (`source = "manual"`).
|
||||
- Yardım metni: "Maaş hesabının eksi bakiyesi + kartın tüm borcu (ekstre + dönem içi harcama) + kalan taksitler − hesaptaki artı bakiye."
|
||||
|
||||
### A3 · Sonraki dönemler: otomatik
|
||||
- Yeni dönem planı oluşturulurken devreden borç, **önceki dönemin ay sonu borcundan** otomatik dolar (`source = "auto"`). Ay sonu borcunun tanımı için bkz. **C**.
|
||||
- Kullanıcı isterse elle düzeltebilir. Düzeltince `source = "manual"` olur ve kutuda "elle düzeltildi" rozeti görünür.
|
||||
|
||||
### A4 · Borç varsa birikim yok, borç odaklı plan
|
||||
- `carriedDebtMinor > 0` iken **birikim hedefi plana dahil edilmez** (0 sayılır).
|
||||
- Planlama sayfasında "Birikim hedefi" kutusu yerine **"Devreden borç"** ve altında **"Bu ay borca giden"** gösterilir. Birikim kutusu gizlenir ya da soluk "Borç bitince açılır" yazısıyla durur.
|
||||
- Panelde de aynı kutu "Devreden borç" yazar (bkz. D).
|
||||
|
||||
### A5 · Harcanabilir hesabı (borçlu ay)
|
||||
Devreden borcun tamamını tek ayda düşmek harcanabiliri eksiye sokar. Bu yüzden:
|
||||
|
||||
```
|
||||
Harcanabilir = Toplam gelir × %45 (spendableRateBp ile ayarlanabilir)
|
||||
Bu ay borca giden = Toplam gelir − Sabit giderler − Harcanabilir
|
||||
```
|
||||
|
||||
Kenar durumları:
|
||||
- `Bu ay borca giden` **devreden borçtan büyükse**: borca yalnızca devreden borç kadar gider, kalan tutar birikime yazılır (borç bu ay biter).
|
||||
- `Gelir − Sabit < Gelir × %45` ise (sabitler çok yüksek): Harcanabilir = Gelir − Sabit, borca giden 0, kırmızı uyarı: "Sabit giderler çok yüksek, bu ay borç azalmıyor."
|
||||
- Ekranda formül açıkça yazılsın: `Gelir − Sabit − Bu ay borca giden = Harcanabilir`. Altında küçük satır: "Devreden borç 57.100 · ay sonu hedef 36.376,60."
|
||||
|
||||
**Kontrol (Aralık 2026 rakamlarıyla):**
|
||||
- Gelir 79.509,64 · Sabit 23.006,90 · Devreden borç 57.100
|
||||
- Harcanabilir = 79.509,64 × 0,45 = **35.779,34**
|
||||
- Bu ay borca giden = 79.509,64 − 23.006,90 − 35.779,34 = **20.723,40**
|
||||
- Ay sonu hedef borç = 57.100 − 20.723,40 = **36.376,60**
|
||||
- Kenar durumu testi: devreden borç 10.000 → borca giden 10.000, birikime 10.723,40.
|
||||
|
||||
### A6 · Borç bitince
|
||||
- Devreden borç 0 olduğunda (otomatik ya da elle) plan normal Kakeibo düzenine döner: `Gelir − Sabit − Birikim hedefi = Harcanabilir`. Birikim kutusu tekrar görünür, %45 kuralı devre dışı kalır.
|
||||
|
||||
---
|
||||
|
||||
## B · Borçlar sayfası kaldırılsın
|
||||
- Borç sayfası rotası (`/borc` ya da benzeri), menü bağlantısı ve sayfaya özel bileşenler kaldırılır.
|
||||
- **Veri silinmez:** `debtSnapshots` / `installmentPlans` koleksiyonları ve modelleri yerinde kalır. Kullanılmayan servis kodu silinebilir, migration ile koleksiyon düşürülmez.
|
||||
- Taksit yükü bilgisi gerekiyorsa Planlama → Sabit giderler → "Taksitler" satırında öneri olarak kalabilir.
|
||||
- `docs/BORC_TAKIBI.md` dosyasının en üstüne "Bu yaklaşım KAKEIBO_PANEL_ISTEKLERI.md ile değiştirildi" notu eklenir.
|
||||
|
||||
---
|
||||
|
||||
## C · Ay sonu: "Ne kadar biriktirdim?" → "Ne kadar borç devretti?"
|
||||
|
||||
### Tanım (tek doğru kaynak)
|
||||
```
|
||||
Ay sonu borcu = banka hesaplarının eksi bakiyeleri (KMH)
|
||||
+ kredi kartı tüm borcu (ekstre + dönem içi + provizyon)
|
||||
+ kalan taksitler
|
||||
− hesaplardaki artı bakiyeler (nakit, banka, yemek kartı, toplu taşıma)
|
||||
(sonuç eksiyse borç 0, aradaki fark birikimdir)
|
||||
```
|
||||
Hesap, dönem bitiş tarihindeki hesap bakiyelerinden yapılır. Transferler (kart ödemesi, ATM, kendi hesapları arası havale) borcu değiştirmez.
|
||||
|
||||
### Ekran
|
||||
- **Borç varken** başlık: **"4 · Ne kadar borç devretti?"**
|
||||
- Ana rakam: ay sonu borcu (bir sonraki dönemin devreden borcu olur).
|
||||
- Altında: "Ay başı 78.530,48 → ay sonu X" ve fark. Azaldıysa yeşil "borç Y TL azaldı", arttıysa kırmızı "borç Y TL arttı".
|
||||
- Plan karşılaştırması: "Hedef: Z TL borca gidecekti, gerçekleşen: Y TL".
|
||||
- **Borç yokken** başlık: **"4 · Ne kadar biriktirdim?"**. Değer = ay sonu net artı − ay başı net artı. Eksiyse birikim yazılmaz, "Bu ay birikim yok" denir.
|
||||
- **Plan hedefi asla gerçekleşen olarak gösterilmez.**
|
||||
|
||||
### Mevcut hatanın kontrolü
|
||||
Kullanıcı hiç birikim girmedi, hesap sürekli ekside, ama ekranda birikim çıkıyor. Şu dört olasılığı kontrol et:
|
||||
1. Plan hedefi (C) gerçekleşen yerine yazılıyor olabilir.
|
||||
2. Hesap yalnızca `gelir − gider` olarak yapılıp sabit giderler, kart borcu ya da KMH faizi düşülmüyor olabilir.
|
||||
3. Kart ödemesi veya hesaplar arası havale birikim sayılıyor olabilir.
|
||||
4. Eksi sonuç `Math.max(0, …)` ile sıfıra çekiliyor ya da işareti kayboluyor olabilir.
|
||||
|
||||
**Kontrol (bankayla doğrulanmış):** 31 Ekim ay sonu borcu **78.530,48**, 13 Kasım **79.078,85** → "borç **548,37 TL arttı**". Birikim gösterilmez.
|
||||
|
||||
---
|
||||
|
||||
## D · Panel (dashboard)
|
||||
|
||||
### D1 · Plan satırı
|
||||
```
|
||||
[ Toplam gelir ] − [ Sabit giderler ] − [ Devreden borç ] − [ Toplam birikim ] = [ Harcanabilir ]
|
||||
```
|
||||
- "Devreden borç" kutusunun ana rakamı **bu ay borca giden** tutardır. Küçük satırda devreden borcun tamamı yazar: "toplam 57.100". Formül böylece eksiye düşmez.
|
||||
- Borç varken birikim kutusu 0 ve soluk ("borç bitince"). Borç yokken devreden borç kutusu soluk/gizli.
|
||||
|
||||
### D2 · Ödeme türleri satırı (anlık bakiye)
|
||||
`[ Nakit ] [ Kredi kartı ] [ Banka kartı + Havale/EFT ] [ Yemek kartı ] [ Toplu taşıma kartı ]`
|
||||
|
||||
| Kutu | Kaynak (hesap türü) | Ana rakam | Alt satır |
|
||||
|---|---|---|---|
|
||||
| Nakit | `cash` | bakiye | bu ay nakit harcama (minibüs, taksi dahil) |
|
||||
| Kredi kartı | `credit_card` | **dönem içi borç** (ör. −29.713,54) | toplam borç (taksit dahil) · son ödeme · kalan limit |
|
||||
| Banka kartı + Havale/EFT | `bank` | bakiye (ör. **−39.264,44**, kırmızı) | KMH kullanılan / limit · bu ay çıkış |
|
||||
| Yemek kartı | `meal_card` | bakiye | bu ay harcanan |
|
||||
| Toplu taşıma kartı | **yeni** `transit_card` | bakiye | bu ay yükleme / harcama |
|
||||
|
||||
Kurallar:
|
||||
- **Ödeme türü = işlemin hesabının türü.** Defter kodları: N `cash`, KK `credit_card`, BK `bank`, YK `meal_card`, TT `transit_card`.
|
||||
- **Havale/EFT** banka hesabından çıktığı için "Banka kartı" kutusunda gider sayılır. Kendi hesapları arası havale (maaş → Enpara, kızın ek hesabı) transferdir.
|
||||
- **Kart ödemesi ve ATM çekimi transferdir**, hiçbir kutuda gider değildir.
|
||||
- **İstanbulkart:** yükleme, banka/nakit hesabından `transit_card` hesabına transfer. Binişler ulaşım gideri (ya da ay sonunda tek düzeltme kaydı). İçe aktarmada "İSTANBULKART YUKLEME" yeni aktarmalarda bu hesaba transfer olarak eşlensin; eski kayıtlar değişmesin.
|
||||
- `transit_card` için: `shared/accounts.ts` → `ACCOUNT_TYPES`, hesap formu, `tr.ts` ("Toplu taşıma kartı" / "Toplu taşıma kartları"), ikon. Enum genişlediği için migration gerekmez.
|
||||
- Her kutuda **son içe aktarma / mutabakat tarihi** küçük yazılsın. Bankayla farklıysa mevcut mutabakat akışına bağlantı.
|
||||
- **Kontrol (13 Kasım):** Banka kartı **−39.264,44**, Kredi kartı **−29.713,54**. 235 TL provizyon "onay bekleyen" olarak ayrı.
|
||||
|
||||
### D3 · Yerleşim
|
||||
- Orta alan çok dar. Ana kapsayıcının dar `max-w-*` sınırı kaldırılsın ya da genişletilsin (ör. `max-w-screen-2xl`, yanlarda `px-4 lg:px-8`).
|
||||
- Kutu satırları ekran genişliğine yayılsın:
|
||||
- Plan satırı: mobilde 2, tablette 3, masaüstünde 5 sütun.
|
||||
- Ödeme türleri: mobilde 2, masaüstünde 5 sütun.
|
||||
- Altındaki kartlar iki sütun (`lg:grid-cols-2`).
|
||||
- Kutular arasındaki "−" ve "=" işaretleri masaüstünde görünsün, mobilde gizlensin.
|
||||
|
||||
---
|
||||
|
||||
## E · Defter: Açıklama varsayılan büyük harf
|
||||
- İşlem formu (`transaction-form.tsx`, `name="description"`) ve defter satırlarındaki açıklama alanları.
|
||||
- `toLocaleUpperCase("tr-TR")`: hem yazarken (onChange) hem sunucuda (zod `.transform`).
|
||||
- Mevcut kayıtlar toplu değiştirilmez.
|
||||
|
||||
## F · Planlama: Sabit gelirler / Sabit giderler kutuları büyük harf
|
||||
- Bu iki bölümdeki metin kutuları (kalem adı) aynı kuralla.
|
||||
- Ortak yardımcı: `shared/format.ts` → `upperTr(s)`. Birim testi: `"elma market"` → `"ELMA MARKET"`, `"istanbul"` → `"İSTANBUL"`, `"ılık"` → `"ILIK"`.
|
||||
|
||||
## G · Metin değişiklikleri (`tr.ts`)
|
||||
- "Birikim hedefi" → borçlu ayda "Devreden borç" / "Bu ay borca giden".
|
||||
- Ay sonu: "Ne kadar biriktirdim?" → borçlu ayda "Ne kadar borç devretti?".
|
||||
- Panel kutusu: "Devreden borç".
|
||||
|
||||
## H · Kabul kriterleri
|
||||
- [ ] Planlamada "Devreden borç" kutusu birikim hedefinin üstünde. İlk dönemde elle, sonraki dönemlerde otomatik dolar, elle düzeltilebilir.
|
||||
- [ ] Borç varken birikim hedefi plana girmez. Harcanabilir = gelir × %45. A5 kontrol rakamları testte birebir.
|
||||
- [ ] Borç 0 olunca plan birikim düzenine döner.
|
||||
- [ ] Borçlar sayfası ve menü bağlantısı yok. Verisi duruyor.
|
||||
- [ ] Ay sonu "Ne kadar borç devretti?" gösteriyor. Test: 78.530,48 → 79.078,85 = "borç 548,37 TL arttı".
|
||||
- [ ] Panelde plan satırı `Gelir − Sabit − Devreden borç − Birikim = Harcanabilir` ve ödeme türleri satırı var. 13 Kasım: −39.264,44 ve −29.713,54.
|
||||
- [ ] Kart ödemesi, ATM ve kendi hesaplar arası havale hiçbir kutuda gider değil.
|
||||
- [ ] Panel orta alanı geniş ekranda yayılıyor, mobilde taşma yok.
|
||||
- [ ] Açıklama ve sabit gelir/gider adları Türkçe büyük harfle kaydediliyor. Eski kayıtlar değişmedi.
|
||||
- [ ] Lint, typecheck ve testler geçiyor. CHANGELOG güncel.
|
||||
|
||||
---
|
||||
|
||||
## Kakeibo uyarlaması ve kararlar (kullanıcı, 14 Kasım 2026)
|
||||
|
||||
Belge butcem için yazıldı; Kakeibo karşılıkları ve kullanıcı kararları:
|
||||
|
||||
1. **Panel bakiyeleri (D2):** son ay sonu ölçümünden (`debt_snapshots`) gelir; canlı banka eşleşmesi yok.
|
||||
Önceki aydan devreden yoksa planlamada elle yazılır.
|
||||
2. **Borçlu aylarda Kakeibo'nun kendi aşım devri (`carryovers`) üretilmez** (çifte sayım olmasın).
|
||||
3. **Taksit planları için ayrı ekran yok.** Taksitler sabit giderlere elle eklenir; taksit önerileri kaldırılır,
|
||||
`installment_plans` verisi yerinde kalır.
|
||||
4. **%45 kuralı varsayılan:** açık dönem dahil, borç > 0 olan her dönemde.
|
||||
5. Mevcut veriye dokunulmaz: yalnızca alan eklenir (`periods.spendable_rate_bp`, `payment_methods.type`),
|
||||
eski kayıtlar toplu değiştirilmez; `periods.opening_debt` (B1'den) devreden borcun elle değeridir.
|
||||
|
||||
Reference in New Issue
Block a user