# Chat: Harita + Transit verisinin prompt’a akışı

Bu dokümanda **Harita + Transit** (doğum haritası ile transit gezegenler arası açılar) verisinin nereden alınıp prompt’ta nereye yazıldığı adım adım anlatılır.

---

## 1. Veri nereden geliyor?

| Adım | Dosya | Ne yapılıyor |
|------|--------|---------------|
| **1.1** | `AIAsistanController::sendMessage()` | İstekte `chart_key` (örn. `natal_transit`) ve panel parametreleri (date, time, lat, lon) alınır. Transit harita ise **2b** bloğunda `chartData['synastryGrid']` ve `chartData['transitPlanetTable']` **her zaman backend’den** doldurulur (`ChartPageBuilderService::build()` → ilgili haritanın `visual`). |
| **1.2** | Aynı metod | `$chartData` (içinde `synastryGrid`, `transitPlanetTable`, `planetTable`, `title` vb.) `sendMessageStream(..., $chartData, $chartKey, ...)` ile servise verilir. |

**Özet:** Harita + Transit açı listesi **backend’de** `ChartVisualizerService::buildSynastryMatrix()` ile üretilen `synastryGrid` (satır = harita gezegenleri, sütun = transit gezegenleri, hücre = açı tipi + orb). Bu veri controller’da `$chartData['synastryGrid']` olarak prompt tarafına taşınır.

---

## 2. Prompt’a nerede yazılıyor?

| Adım | Dosya | Ne yapılıyor |
|------|--------|---------------|
| **2.1** | `OpenAIServiceRefactored::buildSystemContent($chartData, $chartKey, ...)` | System prompt metni oluşturulur. `$chartData` burada kullanılır. |
| **2.2** | Aynı metod, ~satır 372–378 | **Harita verisi prompt’a eklenir:** `$chartContext = $this->chartTransformer->transform($chartData, ...)` çağrılır. Dönen string `"=== AKTİF HARİTA VERİLERİ ===\n" . $chartContext` olarak system içeriğine eklenir. |
| **2.3** | `ChartDataTransformer::transform($chartData, ...)` | `$chartData` alınır; içinden **transit_natal açıları** çıkarılır ve JSON’a yazılır. |

Yani **prompt’ta gördüğünüz “Harita + Transit” bilgisi** şu blokta yer alır:

```
=== AKTİF HARİTA VERİLERİ ===
[VERİ PROTOKOLÜ metni - buildDataProtocol()]
[JSON - içinde transit_natal_acilari ve diğer alanlar]
```

---

## 3. Transit–natal açıları hangi değerle prompt’a giriyor?

| Adım | Dosya | Ne yapılıyor |
|------|--------|---------------|
| **3.1** | `ChartDataTransformer::transform()` | `$transitAcilari = $this->getTransitNatalAcilari($chartData)` çağrılır. |
| **3.2** | `ChartDataTransformer::getTransitNatalAcilari($chartData)` | `$chartData['synastryGrid']` varsa `AspectTransformer::transformSynastryGrid($chartData['synastryGrid'], personA, 'Transit')` ile **pairs** (person_a_planet, person_b_planet, aspect_type, orb) listesine çevrilir. Bu liste `transit_natal_acilari` yapısında döner. |
| **3.3** | `ChartDataTransformer::transform()` | `$jsonData['transit_natal_acilari'] = $transitAcilari` atanır; ardından `buildDataProtocol()` + `json_encode($jsonData)` döndürülür. Bu çıktı **2.2**’deki `$chartContext` olur ve **"=== AKTİF HARİTA VERİLERİ ==="** altında prompt’a yazılır. |

**Özet:**  
- **Çekilen veri:** `$chartData['synastryGrid']` (backend’den, controller’da doldurulmuş).  
- **Prompt’a veren yer:** `ChartDataTransformer::transform()` → çıktı `OpenAIServiceRefactored::buildSystemContent()` içinde **"=== AKTİF HARİTA VERİLERİ ==="** bloğuna eklenir.  
- **Prompt’taki alan:** JSON içindeki `transit_natal_acilari` (içinde `person_a`, `person_b`, `pairs`; her pair’da `aspect_type`, `orb` vb.).

---

## 4. Kısa kod referansları

- **Controller – Harita+Transit verisini backend’den doldurup servise verir:**  
  `app/Http/Controllers/Frontend/AIAsistanController.php`  
  - `sendMessage()` içinde “2b. Transit haritalarda…” bloğu: `chartData['synastryGrid']` ve `chartData['transitPlanetTable']` backend’den set edilir.  
  - Aynı metodta `$this->openAIService->sendMessageStream(..., $chartData, $chartKey, ...)` ile `$chartData` prompt tarafına gider.

- **Prompt’a “AKTİF HARİTA VERİLERİ” olarak ekleyen yer:**  
  `app/Services/OpenAI/OpenAIServiceRefactored.php`  
  - `buildSystemContent()` içinde: `$chartContext = $this->chartTransformer->transform($chartData, ...)` ve  
  - `$systemContent .= "=== AKTİF HARİTA VERİLERİ ===\n" . $chartContext . "\n\n";`  
  → İlgili prompt buradan çekip bu değerle (chartContext) basıyor.

- **transit_natal_acilari’yı üretip JSON’a yazan yer:**  
  `app/Services/OpenAI/Transformers/ChartDataTransformer.php`  
  - `transform()`: `getTransitNatalAcilari($chartData)` ile listeyi alır, `$jsonData['transit_natal_acilari']` yapar; çıktıyı döndürür.  
  - `getTransitNatalAcilari()`: `$chartData['synastryGrid']` → `aspectTransformer->transformSynastryGrid()` → aynı veri prompt’taki JSON’da `transit_natal_acilari` olarak gider.

---

## 5. Özet cümleler

- **Harita + Transit bilgisini prompt’a çekip basan yer:** `OpenAIServiceRefactored::buildSystemContent()` → `chartTransformer->transform($chartData)` → çıktı **"=== AKTİF HARİTA VERİLERİ ==="** altına eklenir.  
- **Bu bilgiyi hangi değerle veriyor:** `ChartDataTransformer::transform()` dönüşü; içinde `transit_natal_acilari` dahil tüm harita JSON’u ve üstte `buildDataProtocol()` metni var.  
- **transit_natal_acilari’nın kaynağı:** Controller’da backend’den gelen `$chartData['synastryGrid']` → `ChartDataTransformer::getTransitNatalAcilari()` → `AspectTransformer::transformSynastryGrid()`.
