File size: 24,683 Bytes
a72d1cf
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
"""Türkçe tablo-soru test kümesini (TR-TabloSQL) üretir ve altın SQL'leri doğrular.

Soru tipleri Spider (seçim, filtre, toplama, gruplama, sıralama, iç içe sorgu, çoklu tablo)
ve BIRD (dış bilgi/kanıt gerektiren sorular, değer eşleme, birim dönüştürme) kümelerinden
uyarlanmış; Türkiye'ye özgü zorluklar eklenmiştir:
  tr_sayi      : '1.234,56' biçimli sayılar (belgede veya soruda)
  birim        : 'bin TL', 'bin MWh' gibi ölçekli birimler ve dönüşüm
  tarih        : 'Ocak 2024', '15.03.2025' gibi Türkçe tarih yazımları
  deger_esleme : İ/ı, büyük/küçük harf, ek almış özel adlar (İzmir'in, ISPARTA)
  toplam_satiri: belgede hazır 'Toplam' satırı olan tablolarda çift sayım tuzağı
  cevapsiz     : tablolarda cevabı olmayan sorular (sistem bunu açıkça söylemeli)
altin_sql = None olan sorular cevapsızdır.

Çalıştırma:  python benchmark/build_benchmark.py
"""
from __future__ import annotations

import json
import sys
from pathlib import Path

ROOT = Path(__file__).resolve().parent.parent
sys.path.insert(0, str(ROOT))

A = "gider_turlerine_butce_gerceklesme"
B = "yillara_personel_sayisi"
C = "tuketici_fiyat_endeksi_degisim"
D = "illere_elektrik_tuketimi"
E = "ozet_gelir_tablosu"
F = "belediye_hizmet_ucret_tarifesi"
G = "mahallelere_su_abone_sayisi"

# (soru, altın_sql | None, zorluk, kategoriler, kanıt(BIRD tarzı) | None, uyarlama)
Q = [
    # ---------------------------------------------------------------- A: bütçe gerçekleşme
    ("2024 yılında personel giderleri için ne kadar harcama gerçekleşti?",
     f"SELECT gerceklesme_2024 FROM {A} WHERE TR_NORM(gider_turu)=TR_NORM('Personel Giderleri')",
     "kolay", ["secim", "tr_sayi", "deger_esleme"], None, "Spider: tek tablo seçim"),
    ("Sermaye giderlerinin 2023 bütçesi kaç TL'dir?",
     f"SELECT butce_2023 FROM {A} WHERE gider_turu='Sermaye Giderleri'",
     "kolay", ["secim", "deger_esleme", "tr_sayi"], None, "Spider: tek tablo seçim"),
    ("2024 bütçesinde en fazla ödenek ayrılan gider türü hangisidir?",
     f"SELECT gider_turu FROM {A} WHERE toplam_satiri=0 ORDER BY butce_2024 DESC LIMIT 1",
     "orta", ["siralama", "toplam_satiri"], None, "Spider: ORDER BY ... LIMIT"),
    ("2024 yılında tüm gider türlerinin toplam gerçekleşmesi ne kadardır?",
     f"SELECT SUM(gerceklesme_2024) FROM {A} WHERE toplam_satiri=0",
     "orta", ["toplama", "toplam_satiri", "tr_sayi"], None, "Spider: SUM"),
    ("Gerçekleşme oranı yüzde 90'ın altında kalan gider türleri hangileridir?",
     f"SELECT gider_turu FROM {A} WHERE gerceklesme_orani_2024 < 90 AND toplam_satiri=0",
     "orta", ["filtre", "yuzde"], None, "Spider: WHERE karşılaştırma"),
    ("Faiz giderlerinin bütçesi 2023'ten 2024'e yüzde kaç arttı?",
     f"SELECT (butce_2024-butce_2023)*100.0/butce_2023 FROM {A} WHERE gider_turu='Faiz Giderleri'",
     "orta", ["artis_yuzdesi", "sayisal"], "Artış yüzdesi = (yeni - eski) / eski × 100",
     "BIRD: formül kanıtı"),
    ("2023 yılında gider türü başına ortalama bütçe nedir?",
     f"SELECT AVG(butce_2023) FROM {A} WHERE toplam_satiri=0",
     "orta", ["toplama", "toplam_satiri"], None, "Spider: AVG"),
    ("Kaç gider türünün 2024 gerçekleşmesi bütçesini aştı?",
     f"SELECT COUNT(*) FROM {A} WHERE gerceklesme_2024 > butce_2024 AND toplam_satiri=0",
     "orta", ["sayim", "karsilastirma", "toplam_satiri"], None, "Spider: COUNT + sütunlar arası koşul"),
    ("Mal ve hizmet alımlarında 2024 bütçesi ile gerçekleşme arasındaki fark kaç TL?",
     f"SELECT butce_2024-gerceklesme_2024 FROM {A} WHERE gider_turu='Mal ve Hizmet Alım Giderleri'",
     "orta", ["sayisal", "deger_esleme"], None, "BIRD: aritmetik"),
    ("2024 yılında 100 milyon TL'den fazla harcama yapılan gider türleri hangileri?",
     f"SELECT gider_turu FROM {A} WHERE gerceklesme_2024 > 100000000 AND toplam_satiri=0",
     "orta", ["filtre", "birim", "toplam_satiri"], "100 milyon TL = 100.000.000 TL",
     "BIRD: birim kanıtı"),
    ("2022 yılı personel gideri bütçesi ne kadardı?", None,
     "orta", ["cevapsiz"], None, "Cevapsız: tabloda 2022 yok"),
    ("2024 yılı genel bütçe gerçekleşme oranı yüzde kaçtır?",
     f"SELECT gerceklesme_orani_2024 FROM {A} WHERE toplam_satiri=1",
     "orta", ["secim", "yuzde", "toplam_satiri"], None, "Spider: seçim"),
    # ---------------------------------------------------------------- B: personel
    ("2022 yılında kaç memur çalışıyordu?",
     f"SELECT memur FROM {B} WHERE yil=2022",
     "kolay", ["secim", "tr_sayi"], None, "Spider: seçim"),
    ("Toplam personel sayısının en yüksek olduğu yıl hangisi?",
     f"SELECT yil FROM {B} ORDER BY toplam DESC LIMIT 1",
     "kolay", ["siralama"], None, "Spider: ORDER BY"),
    ("2020-2024 döneminde ortalama işçi sayısı kaçtır?",
     f"SELECT AVG(isci) FROM {B} WHERE yil BETWEEN 2020 AND 2024",
     "kolay", ["toplama", "tr_sayi"], None, "Spider: AVG"),
    ("Sözleşmeli personel sayısı 2020'den 2024'e kaç kişi arttı?",
     f"SELECT (SELECT sozlesmeli_personel FROM {B} WHERE yil=2024)-(SELECT sozlesmeli_personel FROM {B} WHERE yil=2020)",
     "orta", ["sayisal", "ic_ice"], None, "Spider: iç içe sorgu"),
    ("İşçi sayısı 2.400'ün üzerinde olan yıllar hangileri?",
     f"SELECT yil FROM {B} WHERE isci > 2400",
     "kolay", ["filtre", "tr_sayi"], None, "Spider: WHERE"),
    ("2024'te memurların toplam personel içindeki payı yüzde kaçtır?",
     f"SELECT memur*100.0/toplam FROM {B} WHERE yil=2024",
     "orta", ["sayisal", "yuzde"], "Pay (%) = memur / toplam × 100", "BIRD: formül kanıtı"),
    ("2025 yılında kaç işçi istihdam edilmesi planlanıyor?", None,
     "orta", ["cevapsiz"], None, "Cevapsız: plan/2025 verisi yok"),
    # ---------------------------------------------------------------- C: fiyat endeksi
    ("Mart 2025'te endeks değeri kaçtı?",
     f"SELECT endeks FROM {C} WHERE donem='2025-03'",
     "kolay", ["secim", "tarih", "tr_sayi"], None, "Spider: seçim"),
    ("2024 yılında aylık değişimin en yüksek olduğu ay hangisi?",
     f"SELECT donem FROM {C} WHERE donem LIKE '2024-%' ORDER BY degisim_aylik DESC LIMIT 1",
     "orta", ["siralama", "tarih"], None, "Spider: ORDER BY + filtre"),
    ("2024 yılı aylık değişim oranlarının ortalaması nedir?",
     f"SELECT AVG(degisim_aylik) FROM {C} WHERE donem LIKE '2024-%'",
     "orta", ["toplama", "tarih", "yuzde"], None, "Spider: AVG"),
    ("Haziran 2025'te yıllık değişim yüzde kaç olarak gerçekleşti?",
     f"SELECT degisim_yillik FROM {C} WHERE donem='2025-06'",
     "kolay", ["secim", "tarih", "yuzde"], None, "Spider: seçim"),
    ("Aylık değişimin %4'ü aştığı kaç ay var?",
     f"SELECT COUNT(*) FROM {C} WHERE degisim_aylik > 4",
     "orta", ["sayim", "filtre", "yuzde"], None, "Spider: COUNT"),
    ("Endeks Ocak 2024'ten Aralık 2024'e yüzde kaç arttı?",
     f"SELECT ((SELECT endeks FROM {C} WHERE donem='2024-12')-(SELECT endeks FROM {C} WHERE donem='2024-01'))*100.0/(SELECT endeks FROM {C} WHERE donem='2024-01')",
     "zor", ["artis_yuzdesi", "tarih", "ic_ice"], "Artış yüzdesi = (yeni - eski) / eski × 100",
     "BIRD: formül kanıtı + iç içe"),
    ("Yıllık değişimin yüzde 50'nin altına ilk düştüğü dönem hangisidir?",
     f"SELECT MIN(donem) FROM {C} WHERE degisim_yillik < 50",
     "zor", ["tarih", "filtre"], None, "Spider: MIN + filtre"),
    ("Temmuz 2025 endeks değeri nedir?", None,
     "orta", ["cevapsiz", "tarih"], None, "Cevapsız: veri Haziran 2025'te bitiyor"),
    # ---------------------------------------------------------------- D: elektrik
    ("İzmir'in 2024 elektrik tüketimi ne kadar?",
     f"SELECT yil_2024 FROM {D} WHERE TR_NORM(il)=TR_NORM('İzmir')",
     "kolay", ["secim", "deger_esleme", "tr_sayi"], None, "Spider: seçim"),
    ("Isparta'nın 2023 yılındaki elektrik tüketimi kaç bin MWh'tir?",
     f"SELECT yil_2023 FROM {D} WHERE il='Isparta'",
     "kolay", ["secim", "deger_esleme"], None, "Spider: seçim"),
    ("ISPARTA ilinin 2022 tüketimi nedir?",
     f"SELECT yil_2022 FROM {D} WHERE il='Isparta'",
     "kolay", ["secim", "deger_esleme"], None, "Türkçe büyük harf: I/ı"),
    ("Marmara bölgesindeki illerin 2024 toplam tüketimi ne kadar?",
     f"SELECT SUM(yil_2024) FROM {D} WHERE bolge='Marmara'",
     "orta", ["toplama", "filtre"], None, "Spider: SUM + WHERE"),
    ("2024'te en çok elektrik tüketen il hangisi?",
     f"SELECT il FROM {D} WHERE toplam_satiri=0 ORDER BY yil_2024 DESC LIMIT 1",
     "orta", ["siralama", "toplam_satiri"], None, "Spider: ORDER BY"),
    ("Tüketimi 2023'ten 2024'e azalan kaç il var?",
     f"SELECT COUNT(*) FROM {D} WHERE yil_2024 < yil_2023 AND toplam_satiri=0",
     "orta", ["sayim", "karsilastirma", "toplam_satiri"], None, "Spider: COUNT"),
    ("Bölgelere göre 2024 toplam tüketimini listeler misin?",
     f"SELECT bolge, SUM(yil_2024) FROM {D} WHERE toplam_satiri=0 GROUP BY bolge",
     "orta", ["gruplama", "toplam_satiri"], None, "Spider: GROUP BY"),
    ("Ankara'nın 2024 elektrik tüketimi kaç MWh?",
     f"SELECT yil_2024*1000 FROM {D} WHERE il='Ankara'",
     "orta", ["birim", "secim"], "Tablo bin MWh cinsindendir; 1 bin MWh = 1.000 MWh", "BIRD: birim kanıtı"),
    ("İstanbul'un tüketimi 2022'den 2024'e yüzde kaç değişti?",
     f"SELECT (yil_2024-yil_2022)*100.0/yil_2022 FROM {D} WHERE il='İstanbul'",
     "orta", ["artis_yuzdesi", "deger_esleme"], "Değişim yüzdesi = (yeni - eski) / eski × 100",
     "BIRD: formül kanıtı"),
    ("Değişim oranı en düşük olan il hangisidir?",
     f"SELECT il FROM {D} WHERE toplam_satiri=0 ORDER BY degisim_2023_2024 ASC LIMIT 1",
     "orta", ["siralama", "toplam_satiri", "yuzde"], None, "Spider: ORDER BY"),
    ("İç Anadolu'daki illerin 2023 ortalama tüketimi nedir?",
     f"SELECT AVG(yil_2023) FROM {D} WHERE bolge='İç Anadolu'",
     "orta", ["toplama", "filtre", "deger_esleme"], None, "Spider: AVG + WHERE"),
    ("Mersin'in 2024 elektrik tüketimi ne kadar?", None,
     "orta", ["cevapsiz", "deger_esleme"], None, "Cevapsız: il tabloda yok"),
    ("17 ilin 2022 yılındaki toplam tüketimi kaç bin MWh?",
     f"SELECT SUM(yil_2022) FROM {D} WHERE toplam_satiri=0",
     "orta", ["toplama", "toplam_satiri", "tr_sayi"], None, "Spider: SUM"),
    ("Karadeniz bölgesinde kaç il var?",
     f"SELECT COUNT(*) FROM {D} WHERE bolge='Karadeniz'",
     "kolay", ["sayim", "filtre"], None, "Spider: COUNT"),
    # ---------------------------------------------------------------- E: gelir tablosu
    ("2024 yılında hasılat ne kadardı?",
     f"SELECT cari_donem_2024 FROM {E} WHERE kalem='Hasılat'",
     "kolay", ["secim", "tr_sayi"], None, "Spider: seçim"),
    ("Şirketin 2023 dönem net kârı kaç TL'dir?",
     f"SELECT onceki_donem_2023*1000 FROM {E} WHERE kalem='Dönem Net Kârı'",
     "orta", ["birim", "secim"], "Tablo bin TL cinsindendir", "BIRD: birim kanıtı"),
    ("Net kâr bir önceki yıla göre yüzde kaç arttı?",
     f"SELECT (cari_donem_2024-onceki_donem_2023)*100.0/onceki_donem_2023 FROM {E} WHERE kalem='Dönem Net Kârı'",
     "orta", ["artis_yuzdesi"], "Artış yüzdesi = (cari - önceki) / önceki × 100", "BIRD: formül kanıtı"),
    ("2024'te satışların maliyeti ne kadar?",
     f"SELECT cari_donem_2024 FROM {E} WHERE kalem='Satışların Maliyeti (-)'",
     "kolay", ["secim", "tr_sayi", "negatif"], None, "Parantezli negatif sayı"),
    ("2024 brüt kâr marjı yüzde kaçtır?",
     f"SELECT (SELECT cari_donem_2024 FROM {E} WHERE kalem='Brüt Kâr')*100.0/(SELECT cari_donem_2024 FROM {E} WHERE kalem='Hasılat')",
     "zor", ["sayisal", "ic_ice", "yuzde"], "Brüt kâr marjı = Brüt Kâr / Hasılat × 100", "BIRD: alan bilgisi kanıtı"),
    ("Finansman giderleri 2023'e göre ne kadar arttı?",
     f"SELECT ABS(cari_donem_2024)-ABS(onceki_donem_2023) FROM {E} WHERE kalem='Finansman Giderleri (-)'",
     "zor", ["sayisal", "negatif"], "Giderler tabloda negatif (parantezli) gösterilir", "BIRD: işaret kanıtı"),
    ("Şirketin 2024 yılındaki çalışan sayısı kaçtır?", None,
     "orta", ["cevapsiz"], None, "Cevapsız: gelir tablosunda yok"),
    # ---------------------------------------------------------------- F: ücret tarifesi
    ("İşyeri açma ruhsatı ücreti ne kadar?",
     f"SELECT ucret FROM {F} WHERE hizmet='İşyeri Açma Ruhsatı'",
     "kolay", ["secim", "deger_esleme", "tr_sayi"], None, "Spider: seçim"),
    ("Zabıta hizmetleri grubunda kaç farklı hizmet var?",
     f"SELECT COUNT(DISTINCT hizmet) FROM {F} WHERE hizmet_grubu='Zabıta Hizmetleri'",
     "kolay", ["sayim", "birlesik_hucre"], None, "Spider: COUNT DISTINCT (birleşik hücre)"),
    ("1 Temmuz 2025'te yürürlüğe giren hizmetler hangileri?",
     f"SELECT hizmet FROM {F} WHERE yururluk_tarihi='2025-07-01'",
     "orta", ["filtre", "tarih"], None, "Spider: WHERE (tarih)"),
    ("Yürürlük tarihi 15.03.2025 olan hizmetlerin ortalama ücreti nedir?",
     f"SELECT AVG(ucret) FROM {F} WHERE yururluk_tarihi='2025-03-15'",
     "orta", ["toplama", "tarih"], None, "Türkçe tarih biçimi"),
    ("Sosyal tesisler grubundaki en pahalı hizmet hangisi?",
     f"SELECT hizmet FROM {F} WHERE hizmet_grubu='Sosyal Tesisler' ORDER BY ucret DESC LIMIT 1",
     "orta", ["siralama", "filtre", "birlesik_hucre"], None, "Spider: ORDER BY + WHERE"),
    ("Ücreti 2.000 TL'nin üzerinde olan kaç hizmet var?",
     f"SELECT COUNT(*) FROM {F} WHERE ucret > 2000",
     "kolay", ["sayim", "filtre", "tr_sayi"], None, "Spider: COUNT + WHERE"),
    ("Hizmet gruplarına göre ortalama ücretleri listeler misin?",
     f"SELECT hizmet_grubu, AVG(ucret) FROM {F} GROUP BY hizmet_grubu",
     "orta", ["gruplama", "birlesik_hucre"], None, "Spider: GROUP BY"),
    ("Mart 2025'ten önce yürürlüğe giren hizmetlerin sayısı nedir?",
     f"SELECT COUNT(*) FROM {F} WHERE yururluk_tarihi < '2025-03-01'",
     "orta", ["sayim", "tarih"], None, "Spider: COUNT + tarih karşılaştırma"),
    ("Otopark ücreti ne kadar?", None,
     "kolay", ["cevapsiz"], None, "Cevapsız: tarifede yok"),
    # ---------------------------------------------------------------- G: su (çizgisiz tablo)
    ("Fatih mahallesindeki abone sayısı kaç?",
     f"SELECT abone_sayisi FROM {G} WHERE mahalle='Fatih'",
     "kolay", ["secim", "tr_sayi"], None, "Spider: seçim"),
    ("En fazla su tüketen mahalle hangisi?",
     f"SELECT mahalle FROM {G} WHERE toplam_satiri=0 ORDER BY yillik_tuketim DESC LIMIT 1",
     "orta", ["siralama", "toplam_satiri"], None, "Spider: ORDER BY"),
    ("Tüm mahallelerin toplam abone sayısı nedir?",
     f"SELECT SUM(abone_sayisi) FROM {G} WHERE toplam_satiri=0",
     "orta", ["toplama", "toplam_satiri", "tr_sayi"], None, "Spider: SUM"),
    ("Abone başına tüketimi 150 m³'ün üzerinde olan mahalleler hangileri?",
     f"SELECT mahalle FROM {G} WHERE abone_basina_tuketim > 150 AND toplam_satiri=0",
     "orta", ["filtre", "birim"], None, "Spider: WHERE"),
    ("Yıldırım Beyazıt mahallesinin yıllık tüketimi kaç litre?",
     f"SELECT yillik_tuketim*1000 FROM {G} WHERE mahalle='Yıldırım Beyazıt'",
     "orta", ["birim", "secim", "deger_esleme"], "1 m³ = 1.000 litre", "BIRD: birim kanıtı"),
    ("Kurtuluş mahallesinde 2023 yılındaki abone sayısı kaçtı?", None,
     "orta", ["cevapsiz"], None, "Cevapsız: yalnızca 2024 verisi var"),
    # ---------------------------------------------------------------- çoklu tablo
    ("2024'te personel giderleri gerçekleşmesinin toplam personel sayısına bölümü (kişi başı personel gideri) ne kadardır?",
     f"SELECT (SELECT gerceklesme_2024 FROM {A} WHERE gider_turu='Personel Giderleri')*1.0/(SELECT toplam FROM {B} WHERE yil=2024)",
     "zor", ["coklu_tablo", "sayisal", "ic_ice"], "Kişi başı gider = gider / personel sayısı",
     "Spider: çoklu tablo (skaler alt sorgular)"),
]


# ============================================================================
# AYRILMIŞ TEST BÖLÜMÜ: kural tabanlı sistem geliştirilirken HİÇ kullanılmadı.
# Yeni ifade kalıpları, farklı varlıklar ve yeni soru biçimleri içerir.
QT = [
    ("Borç verme kaleminde 2024 yılında gerçekleşen tutar nedir?",
     f"SELECT gerceklesme_2024 FROM {A} WHERE gider_turu='Borç Verme'",
     "kolay", ["secim", "tr_sayi"], None, "Spider: seçim"),
    ("2023'te bütçesi en düşük olan gider türü hangisi?",
     f"SELECT gider_turu FROM {A} WHERE toplam_satiri=0 ORDER BY butce_2023 ASC LIMIT 1",
     "orta", ["siralama", "toplam_satiri"], None, "Spider: ORDER BY"),
    ("Cari transferlerin 2024 gerçekleşme oranı kaçtır?",
     f"SELECT gerceklesme_orani_2024 FROM {A} WHERE gider_turu='Cari Transferler'",
     "kolay", ["secim", "yuzde"], None, "Spider: seçim"),
    ("2023 yılında gerçekleşen toplam harcama ne kadar?",
     f"SELECT SUM(gerceklesme_2023) FROM {A} WHERE toplam_satiri=0",
     "orta", ["toplama", "toplam_satiri"], None, "Spider: SUM"),
    ("Sermaye transferleri için 2024'te ayrılan bütçe kaç milyon TL?",
     f"SELECT butce_2024/1000000.0 FROM {A} WHERE gider_turu='Sermaye Transferleri'",
     "orta", ["birim", "secim"], "1 milyon TL = 1.000.000 TL", "BIRD: birim kanıtı"),
    ("2021 yılında faiz giderleri ne kadar gerçekleşti?", None,
     "orta", ["cevapsiz"], None, "Cevapsız: 2021 yok"),
    ("2023 yılındaki sözleşmeli personel sayısı nedir?",
     f"SELECT sozlesmeli_personel FROM {B} WHERE yil=2023",
     "kolay", ["secim"], None, "Spider: seçim"),
    ("Memur sayısının en az olduğu yıl hangisidir?",
     f"SELECT yil FROM {B} ORDER BY memur ASC LIMIT 1",
     "kolay", ["siralama"], None, "Spider: ORDER BY"),
    ("Beş yıllık dönemde toplam personel sayısının ortalaması kaç?",
     f"SELECT AVG(toplam) FROM {B}",
     "orta", ["toplama"], None, "Spider: AVG"),
    ("Toplam personel 2021'den 2023'e yüzde kaç değişti?",
     f"SELECT ((SELECT toplam FROM {B} WHERE yil=2023)-(SELECT toplam FROM {B} WHERE yil=2021))*100.0/(SELECT toplam FROM {B} WHERE yil=2021)",
     "zor", ["artis_yuzdesi", "ic_ice"], "Değişim yüzdesi = (yeni - eski) / eski × 100", "BIRD: formül kanıtı"),
    ("Ekim 2024 aylık değişim oranı nedir?",
     f"SELECT degisim_aylik FROM {C} WHERE donem='2024-10'",
     "kolay", ["secim", "tarih", "yuzde"], None, "Spider: seçim"),
    ("2025'in ilk yarısında endeksin en yüksek değeri nedir?",
     f"SELECT MAX(endeks) FROM {C} WHERE donem BETWEEN '2025-01' AND '2025-06'",
     "orta", ["toplama", "tarih"], None, "Spider: MAX + tarih aralığı"),
    ("Aylık değişimin yüzde 2'nin altında kaldığı dönemler hangileri?",
     f"SELECT donem FROM {C} WHERE degisim_aylik < 2",
     "orta", ["filtre", "tarih", "yuzde"], None, "Spider: WHERE"),
    ("2024 Ağustos ayında yıllık değişim yüzde kaçtı?",
     f"SELECT degisim_yillik FROM {C} WHERE donem='2024-08'",
     "orta", ["secim", "tarih"], None, "Tarih yazım sırası farklı"),
    ("Eylül 2025 aylık değişimi ne olmuştur?", None,
     "orta", ["cevapsiz", "tarih"], None, "Cevapsız: kapsam dışı dönem"),
    ("Gaziantep'in 2022 yılı elektrik tüketimi nedir?",
     f"SELECT yil_2022 FROM {D} WHERE il='Gaziantep'",
     "kolay", ["secim", "deger_esleme"], None, "Spider: seçim"),
    ("IĞDIR ilinde 2024 tüketimi ne kadardı?",
     f"SELECT yil_2024 FROM {D} WHERE il='Iğdır'",
     "kolay", ["secim", "deger_esleme"], None, "Türkçe büyük harf: I/Ğ"),
    ("Akdeniz bölgesindeki illerin 2022 toplam elektrik tüketimi kaç bin MWh?",
     f"SELECT SUM(yil_2022) FROM {D} WHERE bolge='Akdeniz'",
     "orta", ["toplama", "filtre"], None, "Spider: SUM + WHERE"),
    ("2023 yılında en az elektrik tüketen il hangisidir?",
     f"SELECT il FROM {D} WHERE toplam_satiri=0 ORDER BY yil_2023 ASC LIMIT 1",
     "orta", ["siralama", "toplam_satiri"], None, "Spider: ORDER BY"),
    ("Tüketimi 2023'ten 2024'e artan illeri listeler misin?",
     f"SELECT il FROM {D} WHERE yil_2024 > yil_2023 AND toplam_satiri=0",
     "orta", ["filtre", "karsilastirma", "toplam_satiri"], None, "Spider: sütunlar arası koşul"),
    ("Doğu Anadolu bölgesinde kaç il bulunuyor?",
     f"SELECT COUNT(*) FROM {D} WHERE bolge='Doğu Anadolu'",
     "kolay", ["sayim", "filtre"], None, "Spider: COUNT"),
    ("Kocaeli'nin 2023 tüketimi kaç MWh'tir?",
     f"SELECT yil_2023*1000 FROM {D} WHERE il='Kocaeli'",
     "orta", ["birim", "secim"], "1 bin MWh = 1.000 MWh", "BIRD: birim kanıtı"),
    ("Antalya'nın 2025 elektrik tüketimi nedir?", None,
     "orta", ["cevapsiz"], None, "Cevapsız: 2025 yok"),
    ("2024 yılı vergi öncesi kârı ne kadardır?",
     f"SELECT cari_donem_2024 FROM {E} WHERE kalem='Vergi Öncesi Kâr'",
     "kolay", ["secim", "deger_esleme"], None, "Spider: seçim"),
    ("Hasılat 2023'ten 2024'e yüzde kaç arttı?",
     f"SELECT (cari_donem_2024-onceki_donem_2023)*100.0/onceki_donem_2023 FROM {E} WHERE kalem='Hasılat'",
     "orta", ["artis_yuzdesi"], "Artış yüzdesi = (yeni - eski) / eski × 100", "BIRD: formül kanıtı"),
    ("2023 yılında pazarlama giderleri kaç TL idi?",
     f"SELECT onceki_donem_2023*1000 FROM {E} WHERE kalem='Pazarlama Giderleri (-)'",
     "orta", ["birim", "negatif"], "Tablo bin TL cinsindendir", "BIRD: birim kanıtı"),
    ("Düğün salonu kiralama ücreti ne kadardır?",
     f"SELECT ucret FROM {F} WHERE hizmet='Düğün Salonu Kiralama'",
     "kolay", ["secim"], None, "Spider: seçim"),
    ("Çevre hizmetleri grubundaki hizmetlerin ortalama ücreti nedir?",
     f"SELECT AVG(ucret) FROM {F} WHERE hizmet_grubu='Çevre Hizmetleri'",
     "orta", ["toplama", "filtre", "birlesik_hucre"], None, "Spider: AVG + WHERE"),
    ("En ucuz hizmet hangisidir?",
     f"SELECT hizmet FROM {F} ORDER BY ucret ASC LIMIT 1",
     "kolay", ["siralama"], None, "Spider: ORDER BY"),
    ("01.01.2025 tarihinde yürürlüğe giren kaç hizmet var?",
     f"SELECT COUNT(*) FROM {F} WHERE yururluk_tarihi='2025-01-01'",
     "orta", ["sayim", "tarih"], None, "Türkçe tarih biçimi"),
    ("Nikah salonu ücreti nedir?", None,
     "kolay", ["cevapsiz"], None, "Cevapsız: tarifede yok"),
    ("Bahçelievler mahallesinin abone başına tüketimi kaç m³?",
     f"SELECT abone_basina_tuketim FROM {G} WHERE mahalle='Bahçelievler'",
     "kolay", ["secim"], None, "Spider: seçim"),
    ("Abone sayısı en az olan mahalle hangisidir?",
     f"SELECT mahalle FROM {G} WHERE toplam_satiri=0 ORDER BY abone_sayisi ASC LIMIT 1",
     "orta", ["siralama", "toplam_satiri"], None, "Spider: ORDER BY"),
    ("Abone sayısı 5.000'in üzerinde olan kaç mahalle var?",
     f"SELECT COUNT(*) FROM {G} WHERE abone_sayisi > 5000 AND toplam_satiri=0",
     "orta", ["sayim", "filtre", "tr_sayi", "toplam_satiri"], None, "Spider: COUNT + WHERE"),
    ("Mahallelerin ortalama yıllık su tüketimi nedir?",
     f"SELECT AVG(yillik_tuketim) FROM {G} WHERE toplam_satiri=0",
     "orta", ["toplama", "toplam_satiri"], None, "Spider: AVG"),
]


def main():
    from t2s.pipeline import build_reference_db
    from t2s.schema import connect
    ref = ROOT / "outputs" / "db" / "referans.db"
    build_reference_db(ref)
    con = connect(ref, readonly=True)
    items = []
    allq = [("gelistirme", f"TR{i:03d}", x) for i, x in enumerate(Q, 1)] + \
           [("test", f"TRT{i:02d}", x) for i, x in enumerate(QT, 1)]
    for bolum, qid, (soru, sql, zor, kat, kanit, uyar) in allq:
        if sql:
            res = con.execute(sql).fetchall()
            assert res and any(v is not None for row in res for v in row), (qid, soru, res)
        items.append({"id": qid, "bolum": bolum, "soru": soru, "altin_sql": sql, "cevaplanabilir": sql is not None,
                      "zorluk": zor, "kategoriler": kat, "kanit": kanit, "uyarlama": uyar,
                      "tablolar": sorted({t for t in (A, B, C, D, E, F, G) if sql and t in sql})})
    out = ROOT / "benchmark" / "tr_tablosoru.json"
    out.write_text(json.dumps({"ad": "TR-TabloSQL v1", "aciklama": __doc__.strip().splitlines()[0],
                               "soru_sayisi": len(items), "sorular": items}, ensure_ascii=False, indent=1),
                   encoding="utf-8")
    print(f"{len(items)} soru yazıldı -> {out}")
    print("cevapsız:", sum(not x["cevaplanabilir"] for x in items),
          "| geliştirme:", sum(x["bolum"] == "gelistirme" for x in items),
          "| ayrılmış test:", sum(x["bolum"] == "test" for x in items))


if __name__ == "__main__":
    main()