> ## Documentation Index
> Fetch the complete documentation index at: https://docs.azalt.co/llms.txt
> Use this file to discover all available pages before exploring further.

# Target

> Göstergeler için dönem bazlı hedefler; baz yılı desteği ve organizasyon/site kapsamı

Target, bir göstergenin (indicator/KPI) performans hedefini ifade eder. Hedefler organizasyon genelinde veya belirli siteler için tanımlanabilir; mutlak değer (ABSOLUTE) ya da göreli yüzde (RELATIVE\_PERCENT) olarak verilebilir ve yıllık, çeyreklik, aylık veya zaman damgası (timestamp) periyotlarıyla planlanabilir.

## Genel Bakış

* Bir göstergeye bağlanır (önerilir, isteğe bağlı)
* Göreli hedefler için baz dönem belirlenir (yıl/çeyrek/ay)
* Periyot, tip ve değeri içeren bir veya daha fazla hedef girişi eklenir
* Girişler siteye özgü olabilir veya organizasyon kapsamlı bırakılabilir
* Entegrasyon amaçlı metadata saklanabilir (örn. dataset eşlemeleri)

## Veri Modeli

Target (özet):

```ts theme={null}
// apps/azalt/src/server/db/types/target.ts
interface TargetEntry {
  siteId?: string | null;
  period: 'YEARLY' | 'QUARTERLY' | 'MONTHLY' | 'TIMESTAMP';
  year: number;
  month?: number | null;     // MONTHLY için 1-12
  quarter?: number | null;   // QUARTERLY için 1-4
  type: 'ABSOLUTE' | 'RELATIVE_PERCENT';
  targetValue: number;       // RELATIVE_PERCENT için yüzde değişim
}

interface Target {
  id: string;
  indicatorId: string | null;
  organizationId: string;
  title: string | null;
  baselineYear: number | null;
  baselineQuarter: number | null;
  baselineMonth: number | null;
  metadata: Record<string, unknown> | null; // örn. { indicatorMappings: { [indicatorId]: { name, field } } }
  targetEntries: TargetEntry[];
  createdAt: Date;
  updatedAt: Date;
}
```

Notlar:

* `TIMESTAMP`, takvim dışı olay bazlı hedefleri destekler.
* Bir giriş `siteId` içermiyorsa organizasyon genelinde geçerlidir.
* Göreli hedeflerde `targetValue`, baz döneme göre yüzde değişimi ifade eder.

## Hedef Girişleri (Entries)

Her giriş, belirli bir periyot ve (isteğe bağlı) site için hedefi temsil eder:

```json theme={null}
{
  "siteId": "site_123",            // isteğe bağlı
  "period": "MONTHLY",             // YEARLY | QUARTERLY | MONTHLY | TIMESTAMP
  "year": 2025,
  "month": 7,                       // MONTHLY için
  "type": "RELATIVE_PERCENT",      // ABSOLUTE | RELATIVE_PERCENT
  "targetValue": -12.5              // baz döneme göre %-12.5 iyileşme
}
```

Yaygın desenler:

* Organizasyon hedefi: girişlerde `siteId` boş bırakılır
* Site hedefi: girişlerde `siteId` belirtilir; farklı sitelere farklı hedef eğrileri atanır
* Karma plan: yıllık ve aylık girişler bir arada kullanılabilir

## Baz Dönem & Durum

* Mutlak hedef: güncel gösterge değeri doğrudan `targetValue` ile karşılaştırılır
* Göreli hedef: `baselineYear`/`baselineQuarter`/`baselineMonth` üzerinden baz referansa göre değişim değerlendirilir

UI (Targets sayfası) mevcut yılın en güncel girişine göre durumu özetler:

* Mutlak hedefler için Yolunda/Uyarı/Geride (ilerleme yüzdesine göre)
* Göreli hedeflerde baz dönemi gereklidir

## API

TRPC prosedürleri (OpenAPI ile REST karşılıkları):

* `targets.list` → GET `/targets`
* `targets.getById` → GET `/targets/{id}`
* `targets.create` → POST `/targets`
* `targets.update` → PUT `/targets/{id}`
* `targets.delete` → DELETE `/targets/{id}`

Oluşturma örneği:

```json theme={null}
{
  "indicatorId": "ind_abc",
  "title": "Elektrik Yoğunluğu Hedefleri",
  "baselineYear": 2024,
  "baselineQuarter": null,
  "baselineMonth": null,
  "metadata": {
    "indicatorMappings": {
      "ind_usage": { "name": "electricity", "field": "kwh" }
    }
  },
  "targetEntries": [
    { "period": "YEARLY", "year": 2025, "type": "ABSOLUTE", "targetValue": 100 },
    { "siteId": "site_1", "period": "MONTHLY", "year": 2025, "month": 12, "type": "RELATIVE_PERCENT", "targetValue": -10 }
  ]
}
```

Erişim kontrolü:

* Tüm işlemler organizasyon izolasyonuna tabidir
* Girişlerdeki `siteId` değerleri için site erişimi doğrulanır; yetkisiz site varsa istek reddedilir

## UI & İş Akışı

* Sayfa: `/targets` – başlık satır içi düzenleme, gösterge ön izlemesi ve durum rozetleri
* Modal: oluştur/düzenle; periyot bazlı girişler, site kapsamı ve ön izleme
* Zaman Çizgisi/Liste görünümü: girişler arası eğilim oklarıyla ilerleme görselleştirmesi
* Gösterge eşlemeleri: `metadata.indicatorMappings` ile hedef bağlamını gösterge dataset’leriyle hizalama

## Dashboard & Widget Entegrasyonu

* Widget’lar seçili hedef girişlerini referans alabilir (ör. hedef çizgileri)
* Seçim, widget ayarlarında `selectedTargetEntries: string[]` olarak saklanır

## Sorgu Desenleri

* `list` çağrısı; `indicatorId`/`siteId`/`year` ile filtreleme
* İstemci, genellikle güncel gösterge değerlerini çekip mevcut yılın en güncel hedefi ile kıyaslar

## Güvenlik

* Organizasyon bazlı izolasyon sorgularda uygulanır
* Girişlerdeki tüm `siteId` değerleri için erişim doğrulaması yapılır

## Migrasyon Geçmişi (özet)

* İlk sürüm: satır bazlı periyot/tip/değer alanlarıyla `Target`
* Yeniden yapılandırma: çoklu giriş desteği için `targetEntries` (jsonb)
* Eklemeler: `title`, `organizationId`, `baselineQuarter`

## Bkz.

* Kavramlar: `Dataset`, `Unit`, `Dashboard`, `Widget`
* Sunucu: targets router – `apps/azalt/src/server/api/routers/target`
