Müşavir

mevzuat

19 uç · /api/musavir/v1/mevzuat

İstek örnekleri ucun GERÇEK metodu ve yolundan üretilir. 19 ucun elle doğrulanmış gövde örneği henüz yok; o uçlarda iskelet gövdesizdir — uydurma bir alan yazmıyoruz.

GET/api/musavir/v1/mevzuat

GET /mevzuat/ara — korpus geneli tam-metin arama.

Oturum

🔴 **AYRI UÇ, ÇÜNKÜ AYRI SÖZ** (P3'ün özelge feed'i kararı). GET /mevzuat kütüphane RAFIDIR: "hangi belgeler var, en son ne güncellendi" sorusuna guncellendi desc ile cevap verir ve maddeye hiç inmez. Bu uç "bu kural korpusun NERESİNDE yazıyor" sorusuna cevap verir; sıralaması alaka, birimi hükümdür. İkisini tek uca bayrakla sıkıştırmak, rafın listesine hiç işine yaramayan iki sorgu yüklemek ve o listenin vermediği bir sözü onun ağzına koymak olurdu.

İstek
curl -X GET "https://{slug}.musavir.blesyum.app/api/musavir/v1/mevzuat" \
  -H "Authorization: Bearer <oturum-token>" \
  -H "Accept: application/json"
Yanıt
{
  "data": "…",
  "trace_id": "01JC…"
}
GET/api/musavir/v1/mevzuat/{id}

Bir beyannamenin mükellefe görünen tam hâli.

OturumYol parametresi: id

🔴 404 mesajı "yetkiniz yok" DEMEZ ve dememeli: RLS satırı zaten elediği için başka bir müvekkilin beyannamesi ile hiç var olmayan bir id **ayırt edilemez** — ayırt edilebilseydi uç, "bu büroda şu id'de bir beyanname var mı" sorusunu cevaplayan bir sızıntı olurdu.

İstek
curl -X GET "https://{slug}.musavir.blesyum.app/api/musavir/v1/mevzuat/<id>" \
  -H "Authorization: Bearer <oturum-token>" \
  -H "Accept: application/json"
Yanıt
{
  "data": "…",
  "trace_id": "01JC…"
}
GET/api/musavir/v1/mevzuat/{id}/diff

GET /mevzuat/{id}/diff?eski=<v>&yeni=<v> — iki versiyon arasındaki fark (BLE22-8079).

OturumYol parametresi: id

Parametreler **opsiyoneldir**: verilmezse "son değişiklik" karşılaştırılır ([varsayilan_cift]) — müşavirin sorduğu soru neredeyse her zaman budur. # Errors * eski > yeni ⇒ **400.** 🔴 Ters sıra sessizce takas EDİLMEZ: alan adları (eski/yeni) bir sözleşmedir ve takas, ekranın yeni metni "eski" diye etiketlemesine yol açar — eklenenler silinmiş, silinenler eklenmiş görünür. (P3'ün "ters aralık sessizce boş dönmez" ve MÜF14'ün "gövde alanının ADI bir sözleşmedir" dersleri.) * Versiyon defterde yok ⇒ 404 · yetki yok ⇒ 403 · DB hatası.

İstek
curl -X GET "https://{slug}.musavir.blesyum.app/api/musavir/v1/mevzuat/<id>/diff" \
  -H "Authorization: Bearer <oturum-token>" \
  -H "Accept: application/json"
Yanıt
{
  "data": "…",
  "trace_id": "01JC…"
}
GET/api/musavir/v1/mevzuat/{id}/versiyonlar/{versiyon}

GET /mevzuat/{id}/versiyonlar/{versiyon} — geçmiş metin (versiyon seçici).

OturumYol parametresi: idversiyon
İstek
curl -X GET "https://{slug}.musavir.blesyum.app/api/musavir/v1/mevzuat/<id>/versiyonlar/<versiyon>" \
  -H "Authorization: Bearer <oturum-token>" \
  -H "Accept: application/json"
Yanıt
{
  "data": "…",
  "trace_id": "01JC…"
}
GET/api/musavir/v1/mevzuat/abonelikler

Bakiye + defter.

Oturum
İstek
curl -X GET "https://{slug}.musavir.blesyum.app/api/musavir/v1/mevzuat/abonelikler" \
  -H "Authorization: Bearer <oturum-token>" \
  -H "Accept: application/json"
Yanıt
{
  "data": "…",
  "trace_id": "01JC…"
}
POST/api/musavir/v1/mevzuat/abonelikler

🔴 .view yeterli — .manage DEĞİL. MÜF1'in rol matrisi dersi: ölçüt "mutasyon mu?" değil

Oturum

"bu ROLÜN RUTİN İŞİ mi?". Not düşmek muhasebe_elemani/stajyerin günlük işidir ve ellerindeki tek izin V_MUKELLEF'tir; .manage istemek not defterini onlara kapatır. Not WORM olduğu için yanlış yazılan bir not "geri alınamaz idari eylem" de değildir — düzeltmesi yeni bir nottur.

İstek
curl -X POST "https://{slug}.musavir.blesyum.app/api/musavir/v1/mevzuat/abonelikler" \
  -H "Authorization: Bearer <oturum-token>" \
  -H "Accept: application/json"
Yanıt
{
  "data": "…",
  "trace_id": "01JC…"
}
DELETE/api/musavir/v1/mevzuat/abonelikler/{id}

Taslak faturayı sil (BLE2-7893). **Onaylı fatura silinmez** — iptal edilir.

OturumYol parametresi: id
İstek
curl -X DELETE "https://{slug}.musavir.blesyum.app/api/musavir/v1/mevzuat/abonelikler/<id>" \
  -H "Authorization: Bearer <oturum-token>" \
  -H "Accept: application/json"
Yanıt
{
  "data": "…",
  "trace_id": "01JC…"
}
GET/api/musavir/v1/mevzuat/ara

GET /mevzuat/ara — korpus geneli tam-metin arama.

Oturum

🔴 **AYRI UÇ, ÇÜNKÜ AYRI SÖZ** (P3'ün özelge feed'i kararı). GET /mevzuat kütüphane RAFIDIR: "hangi belgeler var, en son ne güncellendi" sorusuna guncellendi desc ile cevap verir ve maddeye hiç inmez. Bu uç "bu kural korpusun NERESİNDE yazıyor" sorusuna cevap verir; sıralaması alaka, birimi hükümdür. İkisini tek uca bayrakla sıkıştırmak, rafın listesine hiç işine yaramayan iki sorgu yüklemek ve o listenin vermediği bir sözü onun ağzına koymak olurdu.

İstek
curl -X GET "https://{slug}.musavir.blesyum.app/api/musavir/v1/mevzuat/ara" \
  -H "Authorization: Bearer <oturum-token>" \
  -H "Accept: application/json"
Yanıt
{
  "data": "…",
  "trace_id": "01JC…"
}
GET/api/musavir/v1/mevzuat/indeks

Kunye

Oturum
İstek
curl -X GET "https://{slug}.musavir.blesyum.app/api/musavir/v1/mevzuat/indeks" \
  -H "Authorization: Bearer <oturum-token>" \
  -H "Accept: application/json"
Yanıt
{
  "data": "…",
  "trace_id": "01JC…"
}
GET/api/musavir/v1/mevzuat/indeks/hatalar

Ölü mektup defteri — "neden bu belge aranmıyor" sorusunun tek dürüst cevabı. SALT OKUNUR:

Oturum

yeniden deneme platformundur (metin değişince kendiliğinden).

İstek
curl -X GET "https://{slug}.musavir.blesyum.app/api/musavir/v1/mevzuat/indeks/hatalar" \
  -H "Authorization: Bearer <oturum-token>" \
  -H "Accept: application/json"
Yanıt
{
  "data": "…",
  "trace_id": "01JC…"
}
GET/api/musavir/v1/mevzuat/kararlar

GET /mevzuat/kararlar — İçtihat / yargı kararları feed'i (MÜF15 P6 · BLE22-8122).

Oturum

🔴 **AYRI UÇ, ÇÜNKÜ AYRI SÖZ** (P3'ün özelge kararının aynısı). /mevzuat?tur=yargi_karari bir KESİTTİR; bu ekran üç şey taahhüt eder ve üçü de ara_hın işi değildir: kararın künyesi (mercii · esas/karar no · kesinleşme) · her satırın hukuki AĞIRLIĞI · feed'in kendi tazeliğinin hesabı. Üçünü ara_ha bayrak olarak eklemek, kanun listesine hiç işine yaramayan üç sorgu yüklemek olurdu.

İstek
curl -X GET "https://{slug}.musavir.blesyum.app/api/musavir/v1/mevzuat/kararlar" \
  -H "Authorization: Bearer <oturum-token>" \
  -H "Accept: application/json"
Yanıt
{
  "data": "…",
  "trace_id": "01JC…"
}
GET/api/musavir/v1/mevzuat/kurumlar

GET /mevzuat/kurumlar — süzgecin değer kümesi + kurum başına adet (MÜF15 P5).

Oturum
İstek
curl -X GET "https://{slug}.musavir.blesyum.app/api/musavir/v1/mevzuat/kurumlar" \
  -H "Authorization: Bearer <oturum-token>" \
  -H "Accept: application/json"
Yanıt
{
  "data": "…",
  "trace_id": "01JC…"
}
GET/api/musavir/v1/mevzuat/oranlar

GET /mevzuat/oranlar — kategori-sekmeli referans tablo (BLE22-8112).

Oturum

Her kod için: sorulan tarihte **kapsayan** dönem + geçmiş/gelecek dönemler + dayanak.

İstek
curl -X GET "https://{slug}.musavir.blesyum.app/api/musavir/v1/mevzuat/oranlar" \
  -H "Authorization: Bearer <oturum-token>" \
  -H "Accept: application/json"
Yanıt
{
  "data": "…",
  "trace_id": "01JC…"
}
GET/api/musavir/v1/mevzuat/oranlar/{kategori}/{kod}

GET /mevzuat/oranlar/{kategori}/{kod} — **bir kodun sorulan tarihteki değeri**

OturumYol parametresi: kategorikod

(BLE22-8106). 🔴 Üç hâl de **200** döner: boşluk bir istemci hatası DEĞİLDİR (P2'nin "çözümleme ucu 4xx dönmez" kararının kardeşi) ve 404 dönseydi ekran onu "böyle bir oran yok" diye gösterir, veri eksiğini kod hatası sanırdı. Hâl gövdededir (hal alanı). ⚠ kategori yol parçası **doğrulanır ama süzgeç değildir**: kodun kendi kategorisiyle uyuşmazsa 404 döner. Yolun anlamsız bir süs olması, aynı kodu iki farklı kategori altında çözülebilir yapardı ve bağlantılar sessizce yanlış sekmeye giderdi.

İstek
curl -X GET "https://{slug}.musavir.blesyum.app/api/musavir/v1/mevzuat/oranlar/<kategori>/<kod>" \
  -H "Authorization: Bearer <oturum-token>" \
  -H "Accept: application/json"
Yanıt
{
  "data": "…",
  "trace_id": "01JC…"
}
GET/api/musavir/v1/mevzuat/ozelgeler

GET /mevzuat/ozelgeler — **Son 15 Özelge** feed'i (BLE2-7942/7946/7952).

Oturum

## Neden AYRI bir uç (korpus tek tablo, tur=ozelge zaten çalışıyorken) Çünkü feed **başka bir söz veriyor**. /mevzuat?tur=ozelge bir KESİTTİR: sıralaması korpus damgası, uyarısı yok, tazeliği hakkında bir iddiası da yok. Feed ise adında "son" geçen bir ekrandır ve üç şeyi taahhüt eder: 1. sıra **özelgenin kendi tarihine** göredir (ozelge_feed), 2. **kendi tazeliğinin hesabını verir** (ozelge_kunyesi — HER yanıtta), 3. her satır **dayanağıyla birlikte** gelir (VUK 413 uyarısının yanında tek somut dayanak odur). Bu üçünü ara_ha bayrak olarak eklemek, kanun listesine hiç işine yaramayan üç sorgu yüklemek ve o ekranın vermediği bir sözü de onun ağzına koymak olurdu. 🔴 **DAYANAK BURADA OPSİYONEL DEĞİLDİR.** Tebliğ listesinde dayanak=true bir tercihti; özelgede dayanağın kendisi ekranın var oluş sebebine dâhildir: bağlayıcı olmayan bir görüşe bakan müşavirin elindeki TEK sağlam şey, o görüşün dayandığı hükümdür — ve o hüküm mülga olmuşsa özelge çifte ölüdür (ne bağlayıcı, ne dayanaklı).

İstek
curl -X GET "https://{slug}.musavir.blesyum.app/api/musavir/v1/mevzuat/ozelgeler" \
  -H "Authorization: Bearer <oturum-token>" \
  -H "Accept: application/json"
Yanıt
{
  "data": "…",
  "trace_id": "01JC…"
}
GET/api/musavir/v1/mevzuat/yer-imleri

Bakiye + defter.

Oturum
İstek
curl -X GET "https://{slug}.musavir.blesyum.app/api/musavir/v1/mevzuat/yer-imleri" \
  -H "Authorization: Bearer <oturum-token>" \
  -H "Accept: application/json"
Yanıt
{
  "data": "…",
  "trace_id": "01JC…"
}
POST/api/musavir/v1/mevzuat/yer-imleri

🔴 .view yeterli — .manage DEĞİL. MÜF1'in rol matrisi dersi: ölçüt "mutasyon mu?" değil

Oturum

"bu ROLÜN RUTİN İŞİ mi?". Not düşmek muhasebe_elemani/stajyerin günlük işidir ve ellerindeki tek izin V_MUKELLEF'tir; .manage istemek not defterini onlara kapatır. Not WORM olduğu için yanlış yazılan bir not "geri alınamaz idari eylem" de değildir — düzeltmesi yeni bir nottur.

İstek
curl -X POST "https://{slug}.musavir.blesyum.app/api/musavir/v1/mevzuat/yer-imleri" \
  -H "Authorization: Bearer <oturum-token>" \
  -H "Accept: application/json"
Yanıt
{
  "data": "…",
  "trace_id": "01JC…"
}
PATCH/api/musavir/v1/mevzuat/yer-imleri/{id}

Not

OturumYol parametresi: id
İstek
curl -X PATCH "https://{slug}.musavir.blesyum.app/api/musavir/v1/mevzuat/yer-imleri/<id>" \
  -H "Authorization: Bearer <oturum-token>" \
  -H "Accept: application/json"
Yanıt
{
  "data": "…",
  "trace_id": "01JC…"
}
DELETE/api/musavir/v1/mevzuat/yer-imleri/{id}

Taslak faturayı sil (BLE2-7893). **Onaylı fatura silinmez** — iptal edilir.

OturumYol parametresi: id
İstek
curl -X DELETE "https://{slug}.musavir.blesyum.app/api/musavir/v1/mevzuat/yer-imleri/<id>" \
  -H "Authorization: Bearer <oturum-token>" \
  -H "Accept: application/json"
Yanıt
{
  "data": "…",
  "trace_id": "01JC…"
}
Bu sayfa işine yaradı mı?