Vakıf ERP — Muhasebe Boyut Prototipi
Bu prototip üretim için değil. Şimdiye kadar verilen kararların muhasebe sonuçlarını bir arada görmek ve farklı senaryolarda veri tabanını nasıl etkilediğini deneyimlemek için yapıldı. Hangi karara dayanan hangi davranışı sergilediği amber kutularda gösterilir.
1 · Çift kayıt
defter mekaniğiHer işlem ≥2 satırlık dengeli yevmiye. Σ borç = Σ alacak. Kullanıcı tek tarafı (ne oldu) girer, kontrayı sistem üretir; borç/alacak/hesap kodu hiç gösterilmez.
cift-kayit-tercihi/decision-cift-kayit.md2 · 12 iç hesap tipi
kapalı kümeİç motorda TDHP yok; 12 tip: kasa, banka, varlık, cari-bağışçı, cari-tedarikçi, cari-şube, fon-pozisyon, öz-kaynak, gelir, gider, kambiyo, olağandışı. Yalnız kasa+banka kullanıcı-görünür; diğer 10 tipi sistem otomatik açar.
cift-kayit-tercihi/decision-ic-hesap-plani.md3 · Fon × Bölge (kompozit)
çift eksenli kısıtHer yevmiye satırı (fon_id, bolge_id) taşır. Fiş hem org geneli hem her (fon, bölge) bucket'ı için dengelidir. Bucket'lar arası hareket için sistem otomatik interbucket düzeltici çift üretir.
cift-kayit-tercihi/decision-fon-temsil-modeli.md4 · Şube = ayrı defter
inter-entityŞube resmiyette ayrı tüzel kişilik. Her şube kendi defterine yarısını yazar; aradaki bakiye gerçek borç/alacak (cari-şube). Mutabakat ≠ fiili transfer: borç bakiyesi mutabakatı, ayrı kasa hareketi fiili transferi gösterir.
decision-fon-temsil-modeli.md §1.25 · Kayıt katmanı (Taslak/Kesin)
ertelemeli kayıtHer kayıtta kayitDurumu ∈ {Taslak, Kesinleşmiş}. Varsayılan filtre yalnız Kesin'i gösterir. Tam görünüm tek toggle. Banka satırı daima Kesin doğar. Geri (Kesin→Taslak) yasaktır.
kayit-katmani/decision-kayit-katmani.md6 · Cariler (arka plan)
sistem-otoBağışçı/tedarikçi/şube ilk kullanılınca cari hesabı sistem açar. Bakiyesi sadece o varlığa ait satırların toplamıdır. Kullanıcı "Murat'tan 1.000 aldım" der; sistem cari-bağışçı(Murat)'a alacak yazar.
decision-ic-hesap-plani.md §1.1 (4-6)7 · Vakıf payı = gelir anında ayrıştırma
domain kuralıBağış kasaya girdiği anda iki bucket'a bölünür: net → (kısıtlı fon, bağışın bölgesi), pay → her zaman (Genel, Hür). Pay gider değildir; idari giderlerin kaynağıdır. Pay satırı bölgesizdir (rebind-region tetiklemesin diye).
decision-fon-butce-vakif-payi.mdBağış Girişi (canlı)
Form doldurup "Kaydet" deyince sağ panelde hangi yevmiye satırlarının oluştuğunu ve neden o satırların gerektiğini göreceksin. Bu form tüm boyutları aynı anda tetikler.
Bağış
Son işlem · etkiler
Henüz bağış girmediniz. Veya senaryolar sayfasındaki örneklerden birini çalıştırın.
| Hesap | Borç | Alacak | Fon | Bölge |
|---|---|---|---|---|
| interbucket |
Kasalar ve Bankalar
Kullanıcı-görünür hesaplar. Bakiyeler defterden canlı türetilir, kaydedilmiş bir alan değil. Görünüm filtresi aynı agregayı iki kez çalıştırır (Kesin / Tam).
Kesin iken sadece Kesinleşmiş satırlar toplanır. Tam iken Taslak satırlar da gelir. Banka satırı her durumda Kesin'de görünür (banka izi ertelenemez).
Fon × Bölge Bilançosu
Her hücre bir bucket'tır — kendi bilançosu olan mini-defter. Hücrede org geneli (tüm şubeler birleşik) net pozisyon görünür. Yeşil = pozitif (fon var), gri = boş, kırmızı = negatif (anomali).
| Fon \ Bölge | Toplam | |
|---|---|---|
| Toplam |
Bucket dengesini nasıl okurum
Hücredeki sayı, o (fon, bölge) bucket'ına ait fon-pozisyon ailesi hesabının net bakiyesidir.
Pozitif = bağışçıdan gelmiş, henüz harcanmamış (kullanım için bekliyor).
Negatif = harcama girişi var ama fon yetmedi (anomali; bütçeden over-commit). Sıfır = ya hiç hareket yok ya gelir-gider eşitlenmiş.
Bölgeler-arası "rebind-region"
Bucket'lar arası rutin (vakıf payı, fon rebalancing) hareket bölge değişmediği sürece otomatiktir. Bölge değişiyorsa (örneğin Filistin → Afrika) bağışçı kısıtı ihlal edildiği için rebind-region özel işlemi gerekir (onay + log). Bu prototipte rebind-region tetiklenmiyor; mimaride açık.
Şubeler-Arası Mutabakat (Cari-Şube)
Şube = ayrı defter, ayrı tüzel kişilik. Şubeler-arası işlem her iki defterde ayrı yarısı ile yazılır. Aralarındaki net bakiye gerçek borç/alacak (mutabakat). Fiili para hareketi ayrı yevmiye.
Cari-şube bakiyeleri
| Defter (Şube) | Karşı taraf | Bakiye (TL) | Yorum |
|---|---|---|---|
| Tarih | İşlem | Borç | Alacak |
|---|---|---|---|
| Bu defterde henüz şubeler-arası satır yok. | |||
Fiili transfer (havale) eylemi
Mutabakatı kapatmak için bir şubeden diğerine banka havalesi yap. Bu, ayrı bir yevmiye olarak yazılır; iki defterde de bir kasa/banka satırı + cari-şube satırı oluşturur.
Yevmiye Defteri (tüm satırlar)
Sistemdeki tek "ground truth". Tüm bakiyeler, fon pozisyonları, cari hesaplar bu tabloda group-by ile türetilir. Sistemin tek satırını dahi tutmaması bilinçli (snapshot şu an yok — YAGNI).
| Tarih | Fiş | Şube | Açıklama | Hesap | Tip | Fon | Bölge | Borç | Alacak | Katman |
|---|---|---|---|---|---|---|---|---|---|---|
| Bu filtrede satır yok. Senaryolardan birini çalıştırın. | ||||||||||
Veri tabanı şeması (özet)
JournalEntry {
id, number, date, branchId, description, layer ∈ {Taslak, Kesinlesmis},
scenarioRef? (audit)
}
JournalLine {
id, entryId (→ JournalEntry),
branchId, // şube defteri (entry.branchId ile aynı)
accountId (→ Account),
debit decimal, credit decimal, // sadece biri > 0
fundId (→ Fund), // ZORUNLU
regionId (→ Region), // ZORUNLU, NULL değil (Hür = özel id)
currency = 'TRY', // çok-PB için Odoo modeli; bu prototipte tek
layer ∈ {Taslak, Kesinlesmis}, // entry.layer ile cascade
systemGenerated bool, // interbucket/kontra otomatik satırı
parentLineId? (audit)
}
Account {
id, branchId, type ∈ {kasa, banka, varlık,
cari-bağışçı, cari-tedarikçi, cari-şube,
fon-pozisyon, öz-kaynak, gelir, gider,
kambiyo, olağandışı},
name, userVisible bool (sadece kasa/banka true),
// cariler için ek: subjectId (bağışçı/tedarikçi/şube)
}
INVARIANT 1: ∀ entry: Σ(debit)=Σ(credit)
INVARIANT 2: ∀ entry, ∀ (fund, region) bucket: Σ(debit)=Σ(credit)
INVARIANT 3: layer geriye sayılmaz (Kesin→Taslak yasak; düzeltme = ters fiş)
Hazır Senaryolar
Sırayla çalıştır. Her senaryo daha öncekilerin üstüne yazar (state birikir). Bir senaryoyu çalıştırınca Bağış Girişi sayfasındaki son işlem paneli güncellenir; Kasalar, Fon×Bölge, Şube Mutabakatı, Yevmiye sayfalarında etkiyi görebilirsin.