import 'package:fikoyt_ui/fikoyt_ui.dart'; import 'package:isar/isar.dart'; part 'finans.model.g.dart'; // Kullanıcı Türü enum KullaniciTipi { bireysel("bireysel"), sirket("sirket"); final String isim; const KullaniciTipi(this.isim); } // Hesap Türü enum IHesapTipi { nakit("Nakit", "💸"), banka("Banka", "🏛️"), mevduat("Mevduat", "📈"), kredili("Kredili", "🎫"), yatirim("Yatırım", "📊"), birikim("Birikim", "🎟️"), tasarruf("Tasarruf", "🥇"); final String isim; final String emoji; const IHesapTipi(this.isim, this.emoji); } // Döviz Türü enum ParaBirimiTipi { banknot("banknot"), fiat("fiat"), kripto("kripto"); final String isim; const ParaBirimiTipi(this.isim); } // İşlem Türü enum TranscationType { gelir("gelir"), gider("gider"); final String isim; const TranscationType(this.isim); } // İşlem Alt Türleri enum TranscationSubtype { odeme("odeme"), transfer("transfer"), yatirim("yatirim"); final String isim; const TranscationSubtype(this.isim); } // Hedef Durumu enum FinancialGoalStatus { aktif("aktif"), tamamlandi("tamamlandi"), basarisiz("basarisiz"); final String isim; const FinancialGoalStatus(this.isim); } // Durum (Genel) enum Status { aktif("aktif"), odendi("odendi"), gecikmis("gecikmis"); final String isim; const Status(this.isim); } // Kullanıcılar (Bireysel ve Şirket Hesapları için) @Collection() class Kullanici { Id id = Isar.autoIncrement; String? ismi; // Kullanıcı adı String? eposta; // E-posta String? parola; // Şifre DateTime? olusturulmaTarihi; DateTime? guncellemeTarihi; @enumerated KullaniciTipi kullaniciTipi = KullaniciTipi.bireysel; // Bireysel veya şirket (personal, business) String? profilResmiUrl; String? dili; // Dil tercihi (örn: "en", "tr", "zh") final IsarLinks hesaplar = IsarLinks(); // Kullanıcı hesapları final IsarLinks finansalHedefler = IsarLinks(); // Finansal hedefler final IsarLinks borclar = IsarLinks(); // Borçlar final IsarLinks alacaklar = IsarLinks(); // Alacaklar final IsarLinks yatirimlar = IsarLinks(); // Yatırımlar final IsarLinks islemler = IsarLinks(); // İşlemler final IsarLinks faturalar = IsarLinks(); // Faturalar final IsarLinks yzTavsiyeler = IsarLinks(); // Yapay Zeka Tavsiyeleri } // Borç ve Alacak Yönetimi @Collection() class Borc { Id id = Isar.autoIncrement; late String creditor; // Alacaklı adı late double amountOwed; // Borç miktarı late DateTime dueDate; // Vade tarihi late DateTime createdAt; late String status; // "active", "paid", "overdue" final IsarLink account = IsarLink(); // Borçlu hesap } @Collection() class Alacak { Id id = Isar.autoIncrement; late String debtor; // Borçlu adı late double amountDue; // Alacak miktarı late DateTime dueDate; // Ödeme tarihi late DateTime createdAt; late String status; // "active", "paid", "overdue" final IsarLink account = IsarLink(); // Alacaklı hesap } // Hesaplar (Bireysel ve Şirket hesapları, banka hesapları, kredi kartları vb.) @Collection() class Hesap { Id id = Isar.autoIncrement; String? ismi; String? hesapNo; String? simgesi; String? aciklama; @Ignore() double? bakiye; // Hesap bakiyesi @enumerated IHesapTipi hesapTipi = IHesapTipi.nakit; // Hesap türü ("bank", "credit_card", "investment", vb.) DateTime? acilisTarihi; ///Mevduat Hesabı DateTime? mevduatVadeBaslangic; DateTime? mevduatVadeBitis; double? mevduatFaizi; /// Kredili Hesap DateTime? krediliSonOdemeTarihi; double? krediLimiti; /// birikim Hesap DateTime? birikimHedefTarihi; double? birikimMiktari; /// final IsarLink paraBirimi = IsarLink(); // Hesap dövizi final IsarLinks islemler = IsarLinks(); // Hesaba ait işlemler final IsarLinks periyodikIslemler = IsarLinks(); // Periyodik gelir/giderler final IsarLinks abonelikler = IsarLinks(); // Abonelikler // final IsarLinks financialStatements = IsarLinks(); // Finansal durum raporları @Backlink(to: "hesaplar") final sahibi = IsarLinks(); int? siralama; @ignore bool get bosMu { return (ismi == null || ismi!.isEmpty) && (simgesi == null || simgesi!.isEmpty); } @ignore bool get mevduatBosMu { return (bosMu || (mevduatFaizi == null && mevduatFaizi!.isLowerThan(0) && mevduatFaizi!.isNaN) || (mevduatVadeBaslangic == null) || (mevduatVadeBitis == null)); } @ignore bool get krediliBosMu { return (bosMu || (krediLimiti == null && krediLimiti!.isLowerThan(0) && krediLimiti!.isNaN) || (krediliSonOdemeTarihi == null)); } @ignore bool get birikimBosMu { return (bosMu || (birikimMiktari == null && birikimMiktari!.isLowerThan(0) && birikimMiktari!.isNaN) || (birikimHedefTarihi == null)); } } // @Collection() // class HesapTipi { // Id id = Isar.autoIncrement; // } // Finansal Hedefler @Collection() class FinansalHedefler { Id id = Isar.autoIncrement; late String ismi; // Hedef adı (Örneğin: Ev almak, tatil yapmak) late double hedefMiktar; // Hedef tutar late double mevcutMiktar; // Şu anki birikim late DateTime bitisTarihi; // Hedef tarih late DateTime baslangicTarihi; @enumerated FinancialGoalStatus durum = FinancialGoalStatus.aktif; // "active", "completed", "failed" final IsarLink hesap = IsarLink(); // Hedef için hesap bağlantısı } // Dövizler (Fiat ve Kripto döviz cinsleri) @Collection() class ParaBirimi { Id id = Isar.autoIncrement; String? ismi; // Döviz adı (USD, EUR, BTC, vb.) String? aciklama; String? kod; // Döviz sembolü ($, €, ₺, vb.) String? sembol; // Döviz sembolü ($, €, ₺, vb.) double? oran; // Döviz kuru double? tersOran; // Döviz kuru DateTime? guncellemeTarihi; // Güncellenme tarihi @enumerated ParaBirimiTipi tipi = ParaBirimiTipi.banknot; // Döviz tipi ("fiat", "crypto", vb.) final sahibi = IsarLink(); @Backlink(to: "paraBirimi") final hesaplar = IsarLinks(); @ignore bool get bosMu { return (ismi == null || ismi!.isEmpty) && (kod == null || kod!.isEmpty) && (sembol == null || sembol!.isEmpty) && (oran == null || oran!.isNaN) && (tersOran == null || tersOran!.isNaN); } } // Kripto Varlıklar (Bitcoin, Ethereum, vb.) @Collection() class CryptoAsset { Id id = Isar.autoIncrement; late String cryptoName; // Kripto para adı (BTC, ETH, vb.) late double quantity; // Miktar late double purchasePrice; // Alım fiyatı late double currentPrice; // Şu anki fiyat late DateTime purchasedAt; // Alım tarihi late DateTime updatedAt; // Güncellenme tarihi final IsarLink currency = IsarLink(); // Kripto varlık dövizi } // İşlem (Bireysel ve iş hesaplarındaki işlemler) @Collection() class Islemler { Id id = Isar.autoIncrement; late String islemAdi; // İşlem adı late double miktar; // Miktar late DateTime tarihi; // Tarih late String tipi; // "income" veya "expense" late String islemTipi; // "payment", "transfer", "deposit", vb. final IsarLink hesap = IsarLink(); // Hesap linki final IsarLink paraBirimi = IsarLink(); // Döviz türü final IsarLink yzTavsiye = IsarLink(); // Yapay zeka önerisi } // Yapay Zeka Önerileri (Yatırım, Vergi, Tasarruf vb.) @Collection() class YZTavsiye { Id id = Isar.autoIncrement; late String category; // "investment", "savings", "tax" late String advice; // Yapay zekadan alınan tavsiye late DateTime createdAt; // Tavsiye tarih } // Periyodik Giderler ve Gelirler (Gelir-gider planlaması) @Collection() class PeriyodikIslemler { Id id = Isar.autoIncrement; late String ismi; // Başlık (Örneğin: "Kira", "Maaş") late double miktar; // Miktar late String periyot; // "monthly", "weekly", "yearly" late DateTime ilkOdemeTarihi; // Bir sonraki ödeme tarihi late String tipi; // "income" veya "expense" final IsarLink hesap = IsarLink(); // Hesap bağlantısı } // Abonelikler (Tekrarlanan ödemeler, Netflix, Spotify vb.) @Collection() class Abonelikler { Id id = Isar.autoIncrement; late String ismi; // Abonelik adı (Örneğin: Netflix, Spotify) late double miktar; // Abonelik bedeli late String periyot; // "monthly", "yearly" late DateTime ilkOdemeTarihi; // Bir sonraki ödeme tarihi late String durum; // "active", "canceled", vb. final IsarLink hesap = IsarLink(); // Abonelik hesap bağlantısı } // Finansal Durum Raporu (Aylık/ Yıllık gelir-gider ve varlık yönetimi) // @Collection() // class FinancialStatement { // Id id = Isar.autoIncrement; // late DateTime reportDate; // Rapor tarihi // late double totalIncome; // Toplam gelir // late double totalExpense; // Toplam gider // late double netWorth; // Net değer // late String reportType; // "monthly", "annual" // final IsarLink account = IsarLink(); // Hesap bağlantısı // } // Yatırım Yönetimi (Borsa, Kripto, Altın vb.) @Collection() class Yatirim { Id id = Isar.autoIncrement; late String investmentType; // Yatırım türü (Hisse Senedi, Kripto, vb.) late double amount; // Yatırım miktarı late double returnRate; // Yatırım getirisi late double currentValue; // Yatırımın mevcut değeri late DateTime investmentDate; // Yatırım tarihi late DateTime updatedAt; // Son güncellenme tarihi final IsarLink currency = IsarLink(); // Yatırım yapılan döviz türü final IsarLink user = IsarLink(); // Yatırımcı kullanıcı } // Vergi Hesaplama ve Tahakkuk Yönetimi @Collection() class TaxCalculation { Id id = Isar.autoIncrement; late String taxType; // "income", "vat", "corporate" late double amount; // Vergi miktarı late double taxableAmount; // Vergiye tabi tutar late double taxRate; // Vergi oranı late double calculatedTax; // Hesaplanan vergi late DateTime taxDate; // Vergi hesaplama tarihi final IsarLink user = IsarLink(); // Vergi mükellefi kullanıcı final IsarLink account = IsarLink(); // Hesap bağlantısı } // Dinamik Fiyatlandırma ve İndirim Stratejileri @Collection() class PricingStrategy { Id id = Isar.autoIncrement; late String strategyName; // Strateji adı late double discountRate; // İndirim oranı late String condition; // Koşul (örn: "buy 2 get 1 free") late DateTime validFrom; // Başlangıç tarihi late DateTime validUntil; // Bitiş tarihi final IsarLink product = IsarLink(); // İlgili ürün } // Fatura Yönetimi (Bireysel ve iş faturaları) @Collection() class Fatura { Id id = Isar.autoIncrement; late String invoiceNumber; // Fatura numarası late DateTime invoiceDate; // Fatura tarihi late double totalAmount; // Fatura tutarı final IsarLink seller = IsarLink(); // Satıcı final IsarLink buyer = IsarLink(); // Alıcı final IsarLinks invoiceItems = IsarLinks(); // Fatura öğeleri final IsarLink currency = IsarLink(); // Döviz türü } // Fatura Öğeleri (Ürün detayları) @Collection() class InvoiceItem { Id id = Isar.autoIncrement; late double price; // Ürün fiyatı late int quantity; // Adet final IsarLink product = IsarLink(); // Ürün final IsarLink currency = IsarLink(); // Döviz türü } // Ürün Yönetimi (Ürünler, fiyatlar, kategoriler) @Collection() class Product { Id id = Isar.autoIncrement; late String productName; // Ürün adı late double price; // Fiyat late String category; // Kategori (örn: Elektronik, Giyim vb.) late DateTime createdAt; // Ürün oluşturulma tarihi final IsarLink currency = IsarLink(); // Ürün dövizi final IsarLinks invoiceItems = IsarLinks(); // Fatura öğeleri }