# Merkezi Hareketler Koleksiyonu - Parametre Seti Tasarımı

**Tarih:** 2026-03-15
**Durum:** Onay bekliyor

## Özet

Tüm uygulama verilerini (firma, cihaz, personel, denetim, ajan, vs.) tek bir `hareketler` koleksiyonunda IKart formatında saklamak. Her veri tipi, parametreSetleri ile tanımlanır ve paylaşım sisteminde görüntülenebilir/düzenlenebilir olur.

## Mimari

### Veri Modeli

Her kayıt bir IKart dokümanıdır:

```typescript
{
  _id: ObjectId,
  vt: "FikoYT.sistem.firmalar",              // Virtual table - veri tipini belirler
  yol: "FikoYT.sistem.firmalar.kayit",       // Alt kategori
  turu: "VERI",                               // Kart türü
  sahip: ObjectId,                            // Oluşturan kullanıcı
  gizlilik: "Admin",                          // Erişim seviyesi
  parametreler: [                             // Tip-spesifik alanlar
    { ismi: "firma_adi", turu: "Yazı", degeri: "FikoYT A.Ş." },
    { ismi: "vergi_no", turu: "Yazı", degeri: "1234567890" },
    { ismi: "adres", turu: "Yazı Alanı", degeri: "..." },
    { ismi: "telefon", turu: "Yazı", degeri: "+90..." }
  ],
  veri: { ... },                              // Ek veri (icerikler, solSimge vs.)
  tarih: Date,
  silindi: false
}
```

### Parametre Seti Kaynakları

```
kaynak: 'kod'  → TypeScript'te tanımlı, build-time, sistem setleri
kaynak: 'db'   → MongoDB'de tanımlı, runtime, admin tarafından yönetilir
```

Her iki kaynak runtime'da birleştirilir. Kod tanımları varsayılan, DB tanımları öncelikli (aynı id ise DB kazanır).

### Parametre Seti Hiyerarşisi

```
IParametreSetiGrubu (Grup)
├── id: "sistem"
├── baslik: "Sistem Yönetimi"
├── simge: "⚙️"
├── renk: "#1890ff"
├── kaynak: "kod"
├── altGruplar: IParametreSeti[]
│   ├── Firma Kayıt Seti
│   ├── Personel Kayıt Seti
│   ├── Cihaz Kayıt Seti
│   └── ...
```

### Veri Tipleri ve Parametre Setleri

#### 1. Firmalar
```
vt: "FikoYT.sistem.firmalar"
Grup: Firma Yönetimi (🏢)
Setler:
  - Firma Kayıt: firma_adi, vergi_no, adres, telefon, email, sektor, durum
  - Firma Yetki: yetki_adi, aciklama, seviye
  - Firma Departman: departman_adi, yonetici, personel_sayisi
```

#### 2. Personeller
```
vt: "FikoYT.sistem.personeller"
Grup: Personel Yönetimi (👥)
Setler:
  - Personel Kayıt: ad, soyad, tc_no, telefon, email, departman, pozisyon, giris_tarihi
  - İzin Kayıt: izin_turu, baslangic, bitis, durum, onaylayan
  - Vardiya: vardiya_adi, baslangic_saat, bitis_saat, gunler
```

#### 3. IoT Cihazlar
```
vt: "FikoYT.sistem.cihazlar"
Grup: IoT Cihaz Yönetimi (📡)
Setler:
  - Cihaz Kayıt: cihaz_adi, cihaz_tipi, seri_no, konum, ip_adresi, durum
  - Cihaz Olay: olay_tipi, aciklama, deger, zaman_damgasi
  - Cihaz Komut: komut_adi, parametreler, hedef_cihaz, durum
  - Cihaz Tetikleyici: tetik_kosulu, aksiyon, aktif
```

#### 4. Denetim & Loglama
```
vt: "FikoYT.sistem.denetim"
Grup: Denetim (📋)
Setler:
  - Denetim Kayıt: islem_tipi, kullanici, hedef, detay, ip, tarih
  - Giriş/Çıkış: personel, yon (giris/cikis), zaman, cihaz
```

#### 5. Ajanlar & Görevler
```
vt: "FikoYT.sistem.ajanlar"
Grup: Sistem (🤖)
Setler:
  - Ajan Tanım: ajan_adi, tipi, ayarlar, aktif
  - Görev: baslik, aciklama, atanan, durum, oncelik, bitis_tarihi
  - Bildirim: baslik, icerik, hedef_kullanici, okundu, tip
```

#### 6. İletişim
```
vt: "FikoYT.sistem.iletisim"
Grup: İletişim (💬)
Setler:
  - Mesaj: gonderen, alici, icerik, okundu
  - Soket Oturum: kullanici, cihaz, baglanti_zamani, durum
```

#### 7. Ticaret
```
vt: "FikoYT.sistem.ticaret"
Grup: Ticaret (💰)
Setler:
  - Teklif: musteri, urunler, toplam, durum, gecerlilik
  - Sipariş: teklif_id, urunler, teslimat, durum
  - Kare Kod: kod, tip, iliskili_kayit, olusturma_tarihi
```

## Uygulama Detayları

### 1. Parametre Seti Servis Katmanı

**Yeni dosya:** `src/service/fikoyt-ui/src/lib/parametre-setleri/parametre-seti.service.ts`

```typescript
@Injectable({ providedIn: 'root' })
export class ParametreSetiService {
  // Kod tanımlı setler (statik)
  private kodSetleri: IParametreSetiGrubu[] = SISTEM_PARAMETRE_SETLERI;

  // DB tanımlı setler (dinamik)
  private dbSetleri = signal<IParametreSetiGrubu[]>([]);

  // Birleştirilmiş setler (computed)
  tumSetler = computed(() => this.birlestir(this.kodSetleri, this.dbSetleri()));

  // DB'den setleri yükle
  async yukle(): Promise<void> {
    const istek = new FikoYTIstekKok({
      metod: 'POST',
      komut: 'FikoYT.sistem.DB.hareketler.aggregate'
    });
    istek.parametreler = {
      aggregate: [
        { $match: { vt: 'FikoYT.sistem.parametreSetleri', silindi: { $ne: true } } }
      ]
    };
    await istek.isteSync();
    this.dbSetleri.set(istek.cevap?.sonuc || []);
  }

  // Birleştirme: DB aynı id varsa kod tanımını override eder
  private birlestir(kod: IParametreSetiGrubu[], db: IParametreSetiGrubu[]): IParametreSetiGrubu[] {
    const map = new Map<string, IParametreSetiGrubu>();
    kod.forEach(g => map.set(g.id, { ...g, kaynak: 'kod' }));
    db.forEach(g => map.set(g.id, { ...g, kaynak: 'db' }));
    return [...map.values()].sort((a, b) => (a.sira ?? 99) - (b.sira ?? 99));
  }

  // vt'ye göre uygun setleri getir
  vtIcinSetler(vt: string): IParametreSetiGrubu[] { ... }
}
```

### 2. Kod Tanımlı Setler

**Yeni dosya:** `src/service/fikoyt-ui/src/lib/parametre-setleri/sistem-parametre-setleri.ts`

Tüm statik parametre seti tanımlarını export eden sabit dosya. Her grup IParametreSetiGrubu formatında.

### 3. Veri Erişim Katmanı

**Yeni dosya:** `src/service/fikoyt-ui/src/lib/parametre-setleri/hareketler-veri.service.ts`

```typescript
@Injectable({ providedIn: 'root' })
export class HareketlerVeriService {
  // Generic CRUD for any vt type
  async ekle(vt: string, yol: string, parametreler: IParametre[], opts?: {
    gizlilik?: TurGizlilik;
    etiketler?: IEtiket[];
    icerikler?: IIcerik[];
  }): Promise<IKart> { ... }

  async listele(vt: string, filtreler?: any[], sayfalama?: any): Promise<IKart[]> { ... }

  async guncelle(id: string, parametreler: IParametre[]): Promise<void> { ... }

  async sil(id: string): Promise<void> { ... }

  // Aggregate helper
  async aggregate(vt: string, pipeline: any[]): Promise<any[]> { ... }
}
```

### 4. Paylaşım Sistemi Entegrasyonu

Mevcut paylas-kutusu akışı korunur:

```
Kullanıcı → PaylasKutusu → Parametre Seti Seç → Parametreleri Doldur → "Haydi Fikola"
                                                                            ↓
                                                              hareketler.ekle (vt + parametreler)
```

Her uygulama sayfası (firma panel, cihaz yönetimi, vs.) kendi `vt` filtresini kullanarak hareketlerden veri çeker ve FikoYTKartKokComponent ile gösterir.

### 5. Admin Paneli - Parametre Seti Yönetimi

Mevcut admin paneline yeni sayfa:

```
/🧩/👑/parametre-setleri
├── Liste: Tüm gruplar ve setler (kod + db)
├── Ekle: Yeni grup/set oluştur (kaynak: 'db')
├── Düzenle: DB setlerini düzenle, kod setlerini override et
└── Sil: Sadece DB setleri silinebilir
```

## Dosya Yapısı

```
src/service/fikoyt-ui/src/lib/parametre-setleri/
├── parametre-seti.service.ts          # Ana servis (kod + DB birleştirme)
├── hareketler-veri.service.ts         # Generic CRUD helper
├── sistem-parametre-setleri.ts        # Kod tanımlı tüm setler
└── index.ts                           # Public API

src/app/uygulamalar/admin/parametre-setleri/
├── parametre-setleri.component.ts     # Admin CRUD sayfası
├── parametre-setleri.component.html
└── parametre-setleri.routes.ts
```

## Kısıtlamalar

- Backend'e dokunulmayacak (kokDB + FikoYTIstekKok yeterli)
- Mevcut IKart, IParametreSeti, IParametre interface'leri korunacak
- Mevcut paylas-kutusu, fikoyt-kart-kok bileşenleri korunacak
- GridFS (go_files, uyar-dokum) dosya yapısı korunacak

## Başarı Kriterleri

1. Tüm veri tipleri hareketler'de IKart formatında saklanır
2. Her veri tipi paylaşım sisteminde görüntülenebilir
3. Parametre setleri hem kodda hem DB'de tanımlanabilir
4. Admin panelden yeni parametre setleri oluşturulabilir
5. Mevcut paylas-kutusu akışı bozulmaz
