token optimization
This commit is contained in:
@@ -114,7 +114,7 @@ class AnayasaNormDenetimiSearchRequest(BaseModel):
|
||||
review_outcomes: Optional[List[AnayasaIncelemeSonucuEnum]] = Field(default_factory=list, description="List of review types and outcomes (IncelemeTuruKararSonuclar_id[]).")
|
||||
reason_for_final_outcome: Optional[AnayasaSonucGerekcesiEnum] = Field(default=AnayasaSonucGerekcesiEnum.TUMU, description="Main reason for the decision outcome (KararSonucununGerekcesi).")
|
||||
basis_constitution_article_numbers: Optional[List[str]] = Field(default_factory=list, description="List of supporting Constitution article numbers (DayanakHukmu[]).")
|
||||
results_per_page: Optional[int] = Field(10, description="Number of results per page. Options: 10, 20, 30, 40, 50.")
|
||||
results_per_page: Optional[int] = Field(10, ge=1, le=10, description="Results per page.")
|
||||
page_to_fetch: Optional[int] = Field(1, ge=1, description="Page number to fetch for results list.")
|
||||
sort_by_criteria: Optional[str] = Field("KararTarihi", description="Sort criteria. Options: 'KararTarihi', 'YayinTarihi', 'Toplam' (keyword count).")
|
||||
|
||||
|
||||
@@ -33,65 +33,15 @@ DanistayBirimEnum = Literal[
|
||||
|
||||
# Search Request Models
|
||||
class BedestenSearchData(BaseModel):
|
||||
pageSize: int = Field(..., description="""Number of results per page.
|
||||
Range: 1-100 results per page
|
||||
Recommended: 10-50 for balanced performance
|
||||
Higher values for comprehensive analysis""")
|
||||
pageNumber: int = Field(..., description="""Page number to retrieve (1-indexed).
|
||||
Start with 1 for first page
|
||||
Calculate total pages from response.data.total / pageSize
|
||||
Navigate: pageNumber=2 gets next set of results""")
|
||||
itemTypeList: List[str] = Field(..., description="""Court type filter - determines which court decisions to search:
|
||||
• ["YARGITAYKARARI"]: Court of Cassation (Yargıtay) - supreme court civil/criminal decisions
|
||||
• ["DANISTAYKARAR"]: Council of State (Danıştay) - administrative court decisions
|
||||
• ["YERELHUKUK"]: Local Civil Courts (Yerel Hukuk Mahkemeleri) - first instance civil decisions
|
||||
• ["ISTINAFHUKUK"]: Civil Courts of Appeals (İstinaf Hukuk Mahkemeleri) - appellate court decisions
|
||||
• ["KYB"]: Extraordinary Appeal (Kanun Yararına Bozma) - extraordinary appeal decisions
|
||||
Note: Use single-item list for specific court type targeting""")
|
||||
phrase: str = Field(..., description="""Search phrase/keyword with advanced search support:
|
||||
• Regular search: "mülkiyet kararı" - searches words separately
|
||||
• Exact phrase: "\"mülkiyet kararı\"" - searches exact phrase (more precise)
|
||||
• Legal concepts: "\"idari işlem\"", "\"sözleşme ihlali\"", "\"tazminat davası\""
|
||||
• Empty string: searches all documents (use with filters)
|
||||
Exact phrases significantly reduce false positives for precise legal research""")
|
||||
birimAdi: Optional[Union[YargitayBirimEnum, DanistayBirimEnum]] = Field(None, description="""
|
||||
Chamber/Department (Daire) filter (optional). Available options depend on itemTypeList:
|
||||
|
||||
For YARGITAYKARARI - Court of Cassation (52 options):
|
||||
- None/null for ALL chambers
|
||||
- 'Civil General Assembly (Hukuk Genel Kurulu)', '1st Civil Chamber (1. Hukuk Dairesi)' through '23rd Civil Chamber (23. Hukuk Dairesi)'
|
||||
- 'Criminal General Assembly (Ceza Genel Kurulu)', '1st Criminal Chamber (1. Ceza Dairesi)' through '23rd Criminal Chamber (23. Ceza Dairesi)'
|
||||
- 'Civil Chambers Presidents Board (Hukuk Daireleri Başkanlar Kurulu)', 'Criminal Chambers Presidents Board (Ceza Daireleri Başkanlar Kurulu)'
|
||||
- 'Grand General Assembly (Büyük Genel Kurulu)'
|
||||
|
||||
For DANISTAYKARAR - Council of State (27 options):
|
||||
- None/null for ALL chambers
|
||||
- 'Grand General Assembly (Büyük Gen.Kur.)', 'Administrative Cases Chambers Council (İdare Dava Daireleri Kurulu)', 'Tax Cases Chambers Council (Vergi Dava Daireleri Kurulu)'
|
||||
- '1st Chamber (1. Daire)' through '17th Chamber (17. Daire)'
|
||||
- 'Precedents Unification Council (İçtihatları Birleştirme Kurulu)', 'Administrative Affairs Council (İdari İşler Kurulu)', 'Presidents Council (Başkanlar Kurulu)'
|
||||
- Military courts: 'Military High Administrative Court (Askeri Yüksek İdare Mahkemesi)' variants
|
||||
""")
|
||||
kararTarihiStart: Optional[str] = Field(None, description="""Decision start date (Karar Tarihi Başlangıç) filter (optional).
|
||||
Format: YYYY-MM-DDTHH:MM:SS.000Z (ISO 8601 with Z timezone)
|
||||
Examples:
|
||||
• "2024-01-01T00:00:00.000Z" - from beginning of 2024
|
||||
• "2023-06-15T00:00:00.000Z" - from June 15, 2023
|
||||
• "2024-03-01T00:00:00.000Z" - from March 1, 2024
|
||||
Use with kararTarihiEnd for date range, or alone for "from date" filtering""")
|
||||
kararTarihiEnd: Optional[str] = Field(None, description="""Decision end date (Karar Tarihi Bitiş) filter (optional).
|
||||
Format: YYYY-MM-DDTHH:MM:SS.000Z (ISO 8601 with Z timezone)
|
||||
Examples:
|
||||
• "2024-12-31T23:59:59.999Z" - until end of 2024
|
||||
• "2023-12-31T23:59:59.999Z" - until end of 2023
|
||||
• "2024-06-30T23:59:59.999Z" - until end of June 2024
|
||||
Use with kararTarihiStart for date range, or alone for "until date" filtering""")
|
||||
sortFields: List[str] = Field(default=["KARAR_TARIHI"], description="""Sorting field (Sıralama Alanı) specification.
|
||||
["KARAR_TARIHI"]: Sort by decision date (Karar Tarihi) [DEFAULT]
|
||||
Most common use case for chronological ordering""")
|
||||
sortDirection: str = Field(default="desc", description="""Sort direction (Sıralama Yönü) for results.
|
||||
"desc": Descending order - newest decisions first [DEFAULT]
|
||||
"asc": Ascending order - oldest decisions first
|
||||
Recommended: "desc" for latest legal developments""")
|
||||
pageSize: int = Field(..., description="Results per page (1-10)")
|
||||
pageNumber: int = Field(..., description="Page number (1-indexed)")
|
||||
itemTypeList: List[str] = Field(..., description="Court type filter (YARGITAYKARARI/DANISTAYKARAR/YERELHUKUK/ISTINAFHUKUK/KYB)")
|
||||
phrase: str = Field(..., description="Search phrase (use \"exact phrase\" for precise matching)")
|
||||
birimAdi: Optional[Union[YargitayBirimEnum, DanistayBirimEnum]] = Field(None, description="Chamber filter (optional)")
|
||||
kararTarihiStart: Optional[str] = Field(None, description="Start date (ISO 8601 format)")
|
||||
kararTarihiEnd: Optional[str] = Field(None, description="End date (ISO 8601 format)")
|
||||
sortFields: List[str] = Field(default=["KARAR_TARIHI"], description="Sort fields")
|
||||
sortDirection: str = Field(default="desc", description="Sort direction (asc/desc)")
|
||||
|
||||
class BedestenSearchRequest(BaseModel):
|
||||
data: BedestenSearchData
|
||||
|
||||
@@ -5,7 +5,7 @@ from typing import List, Optional, Dict, Any
|
||||
|
||||
class DanistayBaseSearchRequest(BaseModel):
|
||||
"""Base model for common search parameters for Danistay."""
|
||||
pageSize: int = Field(default=10, ge=1, le=100)
|
||||
pageSize: int = Field(default=10, ge=1, le=10)
|
||||
pageNumber: int = Field(default=1, ge=1)
|
||||
# siralama and siralamaDirection are part of detailed search, not necessarily keyword search
|
||||
# as per user's provided payloads.
|
||||
@@ -21,11 +21,11 @@ class DanistayKeywordSearchRequestData(BaseModel):
|
||||
|
||||
class DanistayKeywordSearchRequest(BaseModel): # This is the model the MCP tool will accept
|
||||
"""Model for keyword-based search request for Danistay."""
|
||||
andKelimeler: List[str] = Field(default_factory=list, description="Keywords for AND logic (VE Mantığı), e.g., ['word1', 'word2']")
|
||||
orKelimeler: List[str] = Field(default_factory=list, description="Keywords for OR logic (VEYA Mantığı).")
|
||||
notAndKelimeler: List[str] = Field(default_factory=list, description="Keywords for NOT AND logic (VE DEĞİL Mantığı).")
|
||||
notOrKelimeler: List[str] = Field(default_factory=list, description="Keywords for NOT OR logic (VEYA DEĞİL Mantığı).")
|
||||
pageSize: int = Field(default=10, ge=1, le=100)
|
||||
andKelimeler: List[str] = Field(default_factory=list, description="AND keywords")
|
||||
orKelimeler: List[str] = Field(default_factory=list, description="OR keywords")
|
||||
notAndKelimeler: List[str] = Field(default_factory=list, description="NOT AND keywords")
|
||||
notOrKelimeler: List[str] = Field(default_factory=list, description="NOT OR keywords")
|
||||
pageSize: int = Field(default=10, ge=1, le=10)
|
||||
pageNumber: int = Field(default=1, ge=1)
|
||||
|
||||
class DanistayDetailedSearchRequestData(BaseModel): # Internal data model for detailed search payload
|
||||
@@ -51,20 +51,20 @@ class DanistayDetailedSearchRequestData(BaseModel): # Internal data model for de
|
||||
|
||||
class DanistayDetailedSearchRequest(DanistayBaseSearchRequest): # MCP tool will accept this
|
||||
"""Model for detailed search request for Danistay."""
|
||||
daire: Optional[str] = Field(None, description="Chamber/Department name (e.g., '1. Daire').")
|
||||
esasYil: Optional[str] = Field(None, description="Case year for 'Esas No'.")
|
||||
esasIlkSiraNo: Optional[str] = Field(None, description="Starting sequence for 'Esas No'.")
|
||||
esasSonSiraNo: Optional[str] = Field(None, description="Ending sequence for 'Esas No'.")
|
||||
kararYil: Optional[str] = Field(None, description="Decision year for 'Karar No'.")
|
||||
kararIlkSiraNo: Optional[str] = Field(None, description="Starting sequence for 'Karar No'.")
|
||||
kararSonSiraNo: Optional[str] = Field(None, description="Ending sequence for 'Karar No'.")
|
||||
baslangicTarihi: Optional[str] = Field(None, description="Start date for decision (DD.MM.YYYY).")
|
||||
bitisTarihi: Optional[str] = Field(None, description="End date for decision (DD.MM.YYYY).")
|
||||
mevzuatNumarasi: Optional[str] = Field(None, description="Legislation number.")
|
||||
mevzuatAdi: Optional[str] = Field(None, description="Legislation name.")
|
||||
madde: Optional[str] = Field(None, description="Article number.")
|
||||
siralama: str = Field("1", description="Sorting criteria (e.g., 1: Esas No, 3: Karar Tarihi).")
|
||||
siralamaDirection: str = Field("desc", description="Sorting direction ('asc' or 'desc').")
|
||||
daire: Optional[str] = Field(None, description="Chamber")
|
||||
esasYil: Optional[str] = Field(None, description="Case year")
|
||||
esasIlkSiraNo: Optional[str] = Field(None, description="Start case no")
|
||||
esasSonSiraNo: Optional[str] = Field(None, description="End case no")
|
||||
kararYil: Optional[str] = Field(None, description="Decision year")
|
||||
kararIlkSiraNo: Optional[str] = Field(None, description="Start decision no")
|
||||
kararSonSiraNo: Optional[str] = Field(None, description="End decision no")
|
||||
baslangicTarihi: Optional[str] = Field(None, description="Start date")
|
||||
bitisTarihi: Optional[str] = Field(None, description="End date")
|
||||
mevzuatNumarasi: Optional[str] = Field(None, description="Law number")
|
||||
mevzuatAdi: Optional[str] = Field(None, description="Law name")
|
||||
madde: Optional[str] = Field(None, description="Article")
|
||||
siralama: str = Field("1", description="Sort by")
|
||||
siralamaDirection: str = Field("desc", description="Direction")
|
||||
# Add a general keyword field if detailed search also supports it
|
||||
# arananKelime: Optional[str] = Field(None, description="General keyword for detailed search.")
|
||||
|
||||
@@ -76,15 +76,15 @@ class DanistayApiDecisionEntry(BaseModel):
|
||||
id: str
|
||||
# The API response for keyword search uses "daireKurul", detailed search example uses "daire".
|
||||
# We use an alias to handle both and map to a consistent field name "chamber".
|
||||
chamber: Optional[str] = Field(None, alias="daire", description="The chamber or board.")
|
||||
chamber: Optional[str] = Field(None, alias="daire", description="Chamber")
|
||||
esasNo: Optional[str] = Field(None)
|
||||
kararNo: Optional[str] = Field(None)
|
||||
kararTarihi: Optional[str] = Field(None)
|
||||
arananKelime: Optional[str] = Field(None, description="Matched keyword (Aranan Kelime) if provided in response.")
|
||||
arananKelime: Optional[str] = Field(None, description="Keyword")
|
||||
# index: Optional[int] = None # Present in response, can be added if needed by MCP tool
|
||||
# siraNo: Optional[int] = None # Present in detailed response, can be added
|
||||
|
||||
document_url: Optional[HttpUrl] = Field(None, description="URL (Belge URL) to the full document, constructed by the client.")
|
||||
document_url: Optional[HttpUrl] = Field(None, description="Document URL")
|
||||
|
||||
model_config = ConfigDict(populate_by_name=True, extra='ignore') # Important for alias to work and ignore extra fields
|
||||
|
||||
@@ -93,7 +93,7 @@ class DanistayApiResponseInnerData(BaseModel):
|
||||
data: List[DanistayApiDecisionEntry]
|
||||
recordsTotal: int
|
||||
recordsFiltered: int
|
||||
draw: Optional[int] = Field(None, description="Draw counter (Çizim Sayıcısı) from API, usually for DataTables.")
|
||||
draw: Optional[int] = Field(None, description="Draw counter")
|
||||
|
||||
class DanistayApiResponse(BaseModel):
|
||||
"""Model for the complete search response from the Danistay API."""
|
||||
|
||||
+20
-20
@@ -17,7 +17,7 @@ class EmsalDetailedSearchRequestData(BaseModel):
|
||||
# Add other specific court type fields from the form if they are separate keys in payload
|
||||
# E.g., "Ceza Mahkemeleri", "İdari Mahkemeler" etc.
|
||||
|
||||
birimHukukMah: Optional[str] = Field("", description="List of selected Regional Civil Chambers (Bölge Hukuk Mahkemeleri), '+' separated.")
|
||||
birimHukukMah: Optional[str] = Field("", description="Regional chambers (+ separated)")
|
||||
|
||||
esasYil: Optional[str] = ""
|
||||
esasIlkSiraNo: Optional[str] = ""
|
||||
@@ -36,42 +36,42 @@ class EmsalDetailedSearchRequestData(BaseModel):
|
||||
|
||||
class EmsalSearchRequest(BaseModel): # This is the model the MCP tool will accept
|
||||
"""Model for Emsal detailed search request, with user-friendly field names."""
|
||||
keyword: Optional[str] = Field(None, description="Keyword (Anahtar Kelime) to search.")
|
||||
keyword: Optional[str] = Field(None, description="Keyword")
|
||||
|
||||
selected_bam_civil_court: Optional[str] = Field(None, description="Selected BAM Civil Court (Seçilen BAM Hukuk Mahkemesi) (maps to 'Bam Hukuk Mahkemeleri' payload key).")
|
||||
selected_civil_court: Optional[str] = Field(None, description="Selected Civil Court (Seçilen Hukuk Mahkemesi) (maps to 'Hukuk Mahkemeleri' payload key).")
|
||||
selected_regional_civil_chambers: Optional[List[str]] = Field(default_factory=list, description="Selected Regional Civil Chambers (Seçilen Bölge Hukuk Daireleri) (for 'birimHukukMah', joined by '+').")
|
||||
selected_bam_civil_court: Optional[str] = Field(None, description="BAM Civil Court")
|
||||
selected_civil_court: Optional[str] = Field(None, description="Civil Court")
|
||||
selected_regional_civil_chambers: Optional[List[str]] = Field(default_factory=list, description="Regional chambers")
|
||||
|
||||
case_year_esas: Optional[str] = Field(None, description="Case year (Dava Yılı) for 'Esas No'.")
|
||||
case_start_seq_esas: Optional[str] = Field(None, description="Starting sequence (Başlangıç Sırası) for 'Esas No'.")
|
||||
case_end_seq_esas: Optional[str] = Field(None, description="Ending sequence (Bitiş Sırası) for 'Esas No'.")
|
||||
case_year_esas: Optional[str] = Field(None, description="Case year")
|
||||
case_start_seq_esas: Optional[str] = Field(None, description="Start case no")
|
||||
case_end_seq_esas: Optional[str] = Field(None, description="End case no")
|
||||
|
||||
decision_year_karar: Optional[str] = Field(None, description="Decision year (Karar Yılı) for 'Karar No'.")
|
||||
decision_start_seq_karar: Optional[str] = Field(None, description="Starting sequence (Başlangıç Sırası) for 'Karar No'.")
|
||||
decision_end_seq_karar: Optional[str] = Field(None, description="Ending sequence (Bitiş Sırası) for 'Karar No'.")
|
||||
decision_year_karar: Optional[str] = Field(None, description="Decision year")
|
||||
decision_start_seq_karar: Optional[str] = Field(None, description="Start decision no")
|
||||
decision_end_seq_karar: Optional[str] = Field(None, description="End decision no")
|
||||
|
||||
start_date: Optional[str] = Field(None, description="Start date (Başlangıç Tarihi) for decision (DD.MM.YYYY).")
|
||||
end_date: Optional[str] = Field(None, description="End date (Bitiş Tarihi) for decision (DD.MM.YYYY).")
|
||||
start_date: Optional[str] = Field(None, description="Start date (DD.MM.YYYY)")
|
||||
end_date: Optional[str] = Field(None, description="End date (DD.MM.YYYY)")
|
||||
|
||||
sort_criteria: str = Field("1", description="Sorting criteria (Sıralama Kriteri) (e.g., 1: Esas No).")
|
||||
sort_direction: str = Field("desc", description="Sorting direction (Sıralama Yönü) ('asc' or 'desc').")
|
||||
sort_criteria: str = Field("1", description="Sort by")
|
||||
sort_direction: str = Field("desc", description="Direction")
|
||||
|
||||
page_number: int = Field(default=1, ge=1)
|
||||
page_size: int = Field(default=10, ge=1, le=100)
|
||||
page_size: int = Field(default=10, ge=1, le=10)
|
||||
|
||||
|
||||
class EmsalApiDecisionEntry(BaseModel):
|
||||
"""Model for an individual decision entry from the Emsal API search response."""
|
||||
id: str
|
||||
daire: Optional[str] = Field(None, description="The chamber/court (Daire/Mahkeme) that made the decision.")
|
||||
daire: Optional[str] = Field(None, description="Chamber")
|
||||
esasNo: Optional[str] = Field(None)
|
||||
kararNo: Optional[str] = Field(None)
|
||||
kararTarihi: Optional[str] = Field(None)
|
||||
arananKelime: Optional[str] = Field(None, description="Matched keyword (Aranan Kelime) from the search.")
|
||||
durum: Optional[str] = Field(None, description="Status (Durum) of the decision (e.g., 'KESİNLEŞMEDİ').")
|
||||
arananKelime: Optional[str] = Field(None, description="Keyword")
|
||||
durum: Optional[str] = Field(None, description="Status")
|
||||
# index: Optional[int] = None # Present in Emsal response, can be added if tool needs it
|
||||
|
||||
document_url: Optional[HttpUrl] = Field(None, description="URL (Belge URL) to the full document, constructed by the client.")
|
||||
document_url: Optional[HttpUrl] = Field(None, description="Document URL")
|
||||
|
||||
model_config = ConfigDict(extra='ignore')
|
||||
|
||||
|
||||
+25
-26
@@ -13,28 +13,28 @@ class KikKararTipi(str, Enum):
|
||||
class KikSearchRequest(BaseModel):
|
||||
"""Model for KIK Decision search criteria."""
|
||||
karar_tipi: KikKararTipi = Field(KikKararTipi.UYUSMAZLIK, description="Type")
|
||||
karar_no: Optional[str] = Field(None, description="Number")
|
||||
karar_tarihi_baslangic: Optional[str] = Field(None, description="Start date", pattern=r"^\d{2}\.\d{2}\.\d{4}$")
|
||||
karar_tarihi_bitis: Optional[str] = Field(None, description="End date", pattern=r"^\d{2}\.\d{2}\.\d{4}$")
|
||||
resmi_gazete_sayisi: Optional[str] = Field(None, description="Gazette no")
|
||||
resmi_gazete_tarihi: Optional[str] = Field(None, description="Gazette date", pattern=r"^\d{2}\.\d{2}\.\d{4}$")
|
||||
basvuru_konusu_ihale: Optional[str] = Field(None, description="Tender subject")
|
||||
karar_no: Optional[str] = Field(None, description="No")
|
||||
karar_tarihi_baslangic: Optional[str] = Field(None, description="Start", pattern=r"^\d{2}\.\d{2}\.\d{4}$")
|
||||
karar_tarihi_bitis: Optional[str] = Field(None, description="End", pattern=r"^\d{2}\.\d{2}\.\d{4}$")
|
||||
resmi_gazete_sayisi: Optional[str] = Field(None, description="Gazette")
|
||||
resmi_gazete_tarihi: Optional[str] = Field(None, description="Date", pattern=r"^\d{2}\.\d{2}\.\d{4}$")
|
||||
basvuru_konusu_ihale: Optional[str] = Field(None, description="Subject")
|
||||
basvuru_sahibi: Optional[str] = Field(None, description="Applicant")
|
||||
ihaleyi_yapan_idare: Optional[str] = Field(None, description="Entity")
|
||||
yil: Optional[str] = Field(None, description="Year")
|
||||
karar_metni: Optional[str] = Field(None, description="Text search")
|
||||
karar_metni: Optional[str] = Field(None, description="Text")
|
||||
page: int = Field(1, ge=1, description="Page")
|
||||
|
||||
class KikDecisionEntry(BaseModel):
|
||||
"""Represents a single decision entry from KIK search results."""
|
||||
preview_event_target: str = Field(..., description="Internal event target for fetching details.")
|
||||
karar_no_str: str = Field(..., alias="kararNo", description="Raw decision number as extracted from KIK (e.g., '2024/UH.II-1766').")
|
||||
karar_tipi: KikKararTipi = Field(..., description="The type of decision this entry belongs to.")
|
||||
preview_event_target: str = Field(..., description="Event target")
|
||||
karar_no_str: str = Field(..., alias="kararNo", description="Decision number")
|
||||
karar_tipi: KikKararTipi = Field(..., description="Decision type")
|
||||
|
||||
karar_tarihi_str: str = Field(..., alias="kararTarihi", description="Decision date.")
|
||||
idare_str: Optional[str] = Field(None, alias="idare", description="Procuring entity.")
|
||||
basvuru_sahibi_str: Optional[str] = Field(None, alias="basvuruSahibi", description="Applicant.")
|
||||
ihale_konusu_str: Optional[str] = Field(None, alias="ihaleKonusu", description="Tender subject.")
|
||||
karar_tarihi_str: str = Field(..., alias="kararTarihi", description="Date")
|
||||
idare_str: Optional[str] = Field(None, alias="idare", description="Entity")
|
||||
basvuru_sahibi_str: Optional[str] = Field(None, alias="basvuruSahibi", description="Applicant")
|
||||
ihale_konusu_str: Optional[str] = Field(None, alias="ihaleKonusu", description="Subject")
|
||||
|
||||
@computed_field
|
||||
@property
|
||||
@@ -58,18 +58,17 @@ class KikDocumentMarkdown(BaseModel):
|
||||
"""
|
||||
KIK decision document, with Markdown content potentially paginated.
|
||||
"""
|
||||
retrieved_with_karar_id: Optional[str] = Field(None, description="The Base64 encoded karar_id that was used to request this document.")
|
||||
# Decode edilmiş karar no ve tipini de yanıt olarak ekleyelim, Claude için faydalı olabilir.
|
||||
retrieved_karar_no: Optional[str] = Field(None, description="The raw KIK Decision Number (e.g., '2024/UH.II-1766') this document pertains to.")
|
||||
retrieved_karar_tipi: Optional[KikKararTipi] = Field(None, description="The KIK Decision Type this document pertains to.")
|
||||
retrieved_with_karar_id: Optional[str] = Field(None, description="Request ID")
|
||||
retrieved_karar_no: Optional[str] = Field(None, description="Decision number")
|
||||
retrieved_karar_tipi: Optional[KikKararTipi] = Field(None, description="Decision type")
|
||||
|
||||
karar_id_param_from_url: Optional[str] = Field(None, alias="kararIdParam", description="The KIK system's internal KararId parameter from the document's display URL (KurulKararGoster.aspx).")
|
||||
markdown_chunk: Optional[str] = Field(None, description="The requested chunk of the decision content converted to Markdown.")
|
||||
source_url: Optional[str] = Field(None, description="The source URL of the original document (KurulKararGoster.aspx).")
|
||||
error_message: Optional[str] = Field(None, description="Error message if document retrieval or processing failed.")
|
||||
current_page: int = Field(1, description="The current page number of the markdown chunk being returned.")
|
||||
total_pages: int = Field(1, description="The total number of pages the full markdown content is divided into.")
|
||||
is_paginated: bool = Field(False, description="True if the full markdown content is split into multiple pages.")
|
||||
full_content_char_count: Optional[int] = Field(None, description="Total character count of the full markdown content before chunking.")
|
||||
karar_id_param_from_url: Optional[str] = Field(None, alias="kararIdParam", description="Internal ID")
|
||||
markdown_chunk: Optional[str] = Field(None, description="Content")
|
||||
source_url: Optional[str] = Field(None, description="Source URL")
|
||||
error_message: Optional[str] = Field(None, description="Error")
|
||||
current_page: int = Field(1, description="Page")
|
||||
total_pages: int = Field(1, description="Total pages")
|
||||
is_paginated: bool = Field(False, description="Paginated")
|
||||
full_content_char_count: Optional[int] = Field(None, description="Char count")
|
||||
|
||||
model_config = ConfigDict(populate_by_name=True)
|
||||
@@ -11,21 +11,21 @@ class KvkkSearchRequest(BaseModel):
|
||||
Examples: "açık rıza", "veri güvenliği", "kişisel veri işleme"
|
||||
""")
|
||||
page: int = Field(1, ge=1, le=50, description="Page number for search results (1-50).")
|
||||
pageSize: int = Field(10, ge=1, le=20, description="Number of results per page (1-20).")
|
||||
pageSize: int = Field(10, ge=1, le=10, description="Number of results per page (1-10).")
|
||||
|
||||
class KvkkDecisionSummary(BaseModel):
|
||||
"""Model for a single KVKK decision summary from Brave search results."""
|
||||
title: Optional[str] = Field(None, description="Decision title from search results.")
|
||||
url: Optional[HttpUrl] = Field(None, description="URL to the KVKK decision page.")
|
||||
description: Optional[str] = Field(None, description="Brief description or snippet from search results.")
|
||||
decision_id: Optional[str] = Field(None, description="Extracted decision ID from URL (e.g., Icerik/7288/2021-1303).")
|
||||
publication_date: Optional[str] = Field(None, description="Publication date if extractable from title or description.")
|
||||
decision_number: Optional[str] = Field(None, description="Decision number if extractable from title or description.")
|
||||
decision_id: Optional[str] = Field(None, description="Value")
|
||||
publication_date: Optional[str] = Field(None, description="Value")
|
||||
decision_number: Optional[str] = Field(None, description="Value")
|
||||
|
||||
class KvkkSearchResult(BaseModel):
|
||||
"""Model for the overall search result for KVKK decisions."""
|
||||
decisions: List[KvkkDecisionSummary] = Field(default_factory=list, description="List of KVKK decisions found.")
|
||||
total_results: Optional[int] = Field(None, description="Total number of results available (if provided by Brave API).")
|
||||
total_results: Optional[int] = Field(None, description="Value")
|
||||
page: int = Field(1, description="Current page number of results.")
|
||||
pageSize: int = Field(10, description="Number of results per page.")
|
||||
query: Optional[str] = Field(None, description="The actual search query sent to Brave API.")
|
||||
@@ -41,7 +41,7 @@ class KvkkDocumentMarkdown(BaseModel):
|
||||
current_page: int = Field(description="The current page number of the markdown chunk (1-indexed).")
|
||||
total_pages: int = Field(description="Total number of pages for the full markdown content.")
|
||||
is_paginated: bool = Field(description="True if the full markdown content is split into multiple pages.")
|
||||
error_message: Optional[str] = Field(None, description="Error message if document retrieval or conversion failed.")
|
||||
error_message: Optional[str] = Field(None, description="Value")
|
||||
|
||||
class Config:
|
||||
json_encoders = {
|
||||
|
||||
+9
-9
@@ -972,7 +972,7 @@ async def search_yargitay_detailed(
|
||||
bitisTarihi: str = Field("", description="End date for decision search (DD.MM.YYYY)."),
|
||||
siralama: str = Field("3", description="Sorting criteria (1: Esas No, 2: Karar No, 3: Karar Tarihi)."),
|
||||
siralamaDirection: str = Field("desc", description="Sorting direction ('asc' or 'desc')."),
|
||||
pageSize: int = Field(10, ge=1, le=100, description="Number of results per page."),
|
||||
pageSize: int = Field(10, ge=1, le=10, description="Number of results per page."),
|
||||
pageNumber: int = Field(1, ge=1, description="Page number to retrieve.")
|
||||
) -> CompactYargitaySearchResult:
|
||||
"""Search Yargıtay decisions using primary API with 52 chamber filtering and advanced operators."""
|
||||
@@ -1047,7 +1047,7 @@ async def search_danistay_by_keyword(
|
||||
notAndKelimeler: List[str] = Field(default_factory=list, description="Keywords for NOT AND logic."),
|
||||
notOrKelimeler: List[str] = Field(default_factory=list, description="Keywords for NOT OR logic."),
|
||||
pageNumber: int = Field(1, ge=1, description="Page number."),
|
||||
pageSize: int = Field(10, ge=1, le=100, description="Results per page.")
|
||||
pageSize: int = Field(10, ge=1, le=10, description="Results per page.")
|
||||
) -> CompactDanistaySearchResult:
|
||||
"""Search Danıştay decisions with keyword logic."""
|
||||
|
||||
@@ -1099,7 +1099,7 @@ async def search_danistay_detailed(
|
||||
siralama: str = Field("1", description="Sorting criteria (e.g., 1: Esas No, 3: Karar Tarihi)."),
|
||||
siralamaDirection: str = Field("desc", description="Sorting direction ('asc' or 'desc')."),
|
||||
pageNumber: int = Field(1, ge=1, description="Page number."),
|
||||
pageSize: int = Field(10, ge=1, le=100, description="Results per page.")
|
||||
pageSize: int = Field(10, ge=1, le=10, description="Results per page.")
|
||||
) -> CompactDanistaySearchResult:
|
||||
"""Search Danıştay decisions with detailed filtering."""
|
||||
|
||||
@@ -1179,7 +1179,7 @@ async def search_emsal_detailed_decisions(
|
||||
sort_criteria: str = Field("1", description="Sorting criteria (e.g., 1: Esas No)."),
|
||||
sort_direction: str = Field("desc", description="Sorting direction ('asc' or 'desc')."),
|
||||
page_number: int = Field(1, ge=1, description="Page number (accepts int)."),
|
||||
page_size: int = Field(10, ge=1, le=100, description="Results per page.")
|
||||
page_size: int = Field(10, ge=1, le=10, description="Results per page.")
|
||||
) -> CompactEmsalSearchResult:
|
||||
"""Search Emsal precedent decisions with detailed criteria."""
|
||||
|
||||
@@ -1690,7 +1690,7 @@ async def get_rekabet_kurumu_document(
|
||||
)
|
||||
async def search_yargitay_bedesten(
|
||||
phrase: str = Field(..., description="Search phrase with advanced operators"),
|
||||
pageSize: int = Field(10, ge=1, le=100, description="Sayfa başına sonuç sayısı"),
|
||||
pageSize: int = Field(10, ge=1, le=10, description="Sayfa başına sonuç sayısı"),
|
||||
pageNumber: int = Field(1, ge=1, description="Sayfa numarası"),
|
||||
birimAdi: Optional[YargitayBirimEnum] = Field(None, description="See docs for details"),
|
||||
kararTarihiStart: Optional[str] = Field(None, description="Start date for filtering (ISO 8601 format)"),
|
||||
@@ -1769,7 +1769,7 @@ async def get_yargitay_bedesten_document_markdown(
|
||||
)
|
||||
async def search_danistay_bedesten(
|
||||
phrase: str = Field(..., description="Search phrase with advanced operators"),
|
||||
pageSize: int = Field(10, ge=1, le=100, description="Sayfa başına sonuç sayısı"),
|
||||
pageSize: int = Field(10, ge=1, le=10, description="Sayfa başına sonuç sayısı"),
|
||||
pageNumber: int = Field(1, ge=1, description="Sayfa numarası"),
|
||||
birimAdi: Optional[DanistayBirimEnum] = Field(None, description="See docs for details"),
|
||||
kararTarihiStart: Optional[str] = Field(None, description="Start date for filtering (ISO 8601 format)"),
|
||||
@@ -1848,7 +1848,7 @@ async def get_danistay_bedesten_document_markdown(
|
||||
)
|
||||
async def search_yerel_hukuk_bedesten(
|
||||
phrase: str = Field(..., description="Search phrase with advanced operators"),
|
||||
pageSize: int = Field(10, ge=1, le=100, description="Sayfa başına sonuç sayısı"),
|
||||
pageSize: int = Field(10, ge=1, le=10, description="Sayfa başına sonuç sayısı"),
|
||||
pageNumber: int = Field(1, ge=1, description="Sayfa numarası"),
|
||||
kararTarihiStart: Optional[str] = Field(None, description="Start date for filtering (ISO 8601 format)"),
|
||||
kararTarihiEnd: Optional[str] = Field(None, description="End date for filtering (ISO 8601 format)")
|
||||
@@ -1925,7 +1925,7 @@ async def get_yerel_hukuk_bedesten_document_markdown(
|
||||
)
|
||||
async def search_istinaf_hukuk_bedesten(
|
||||
phrase: str = Field(..., description="Search phrase with advanced operators"),
|
||||
pageSize: int = Field(10, ge=1, le=100, description="Sayfa başına sonuç sayısı"),
|
||||
pageSize: int = Field(10, ge=1, le=10, description="Sayfa başına sonuç sayısı"),
|
||||
pageNumber: int = Field(1, ge=1, description="Sayfa numarası"),
|
||||
kararTarihiStart: Optional[str] = Field(None, description="Start date for filtering (ISO 8601 format)"),
|
||||
kararTarihiEnd: Optional[str] = Field(None, description="End date for filtering (ISO 8601 format)")
|
||||
@@ -2001,7 +2001,7 @@ async def get_istinaf_hukuk_bedesten_document_markdown(
|
||||
)
|
||||
async def search_kyb_bedesten(
|
||||
phrase: str = Field(..., description="Search phrase with advanced operators"),
|
||||
pageSize: int = Field(10, ge=1, le=100, description="Sayfa başına sonuç sayısı"),
|
||||
pageSize: int = Field(10, ge=1, le=10, description="Sayfa başına sonuç sayısı"),
|
||||
pageNumber: int = Field(1, ge=1, description="Sayfa numarası"),
|
||||
kararTarihiStart: Optional[str] = Field(None, description="Start date for filtering (ISO 8601 format)"),
|
||||
kararTarihiEnd: Optional[str] = Field(None, description="End date for filtering (ISO 8601 format)")
|
||||
|
||||
@@ -26,31 +26,30 @@ class RekabetKararTuruAdiEnum(str, Enum):
|
||||
class RekabetKurumuSearchRequest(BaseModel):
|
||||
"""Model for Rekabet Kurumu (Turkish Competition Authority) search request."""
|
||||
sayfaAdi: Optional[str] = Field(None, description="Title")
|
||||
YayinlanmaTarihi: Optional[str] = Field(None, description="Pub date")
|
||||
PdfText: Optional[str] = Field(None, description="Search text")
|
||||
# This field uses the GUID enum as it's used by the client to make the actual web request.
|
||||
YayinlanmaTarihi: Optional[str] = Field(None, description="Date")
|
||||
PdfText: Optional[str] = Field(None, description="Text")
|
||||
KararTuruID: Optional[RekabetKararTuruGuidEnum] = Field(RekabetKararTuruGuidEnum.TUMU, description="Type")
|
||||
KararSayisi: Optional[str] = Field(None, description="Number")
|
||||
KararSayisi: Optional[str] = Field(None, description="No")
|
||||
KararTarihi: Optional[str] = Field(None, description="Date")
|
||||
page: int = Field(1, ge=1, description="Page")
|
||||
|
||||
class RekabetDecisionSummary(BaseModel):
|
||||
"""Model for a single Rekabet Kurumu decision summary from search results."""
|
||||
publication_date: Optional[str] = Field(None, description="Publication Date (Yayımlanma Tarihi).")
|
||||
decision_number: Optional[str] = Field(None, description="Decision Number (Karar Sayısı).")
|
||||
decision_date: Optional[str] = Field(None, description="Decision Date (Karar Tarihi).")
|
||||
decision_type_text: Optional[str] = Field(None, description="Decision Type as text (Karar Türü - metin olarak).")
|
||||
title: Optional[str] = Field(None, description="Decision title or summary text.")
|
||||
decision_url: Optional[HttpUrl] = Field(None, description="URL to the decision's landing page (e.g., /Karar?kararId=...).")
|
||||
karar_id: Optional[str] = Field(None, description="GUID of the decision, extracted from its URL.")
|
||||
related_cases_url: Optional[HttpUrl] = Field(None, description="URL to related court cases page, if available.")
|
||||
publication_date: Optional[str] = Field(None, description="Pub date")
|
||||
decision_number: Optional[str] = Field(None, description="Number")
|
||||
decision_date: Optional[str] = Field(None, description="Date")
|
||||
decision_type_text: Optional[str] = Field(None, description="Type")
|
||||
title: Optional[str] = Field(None, description="Title")
|
||||
decision_url: Optional[HttpUrl] = Field(None, description="URL")
|
||||
karar_id: Optional[str] = Field(None, description="ID")
|
||||
related_cases_url: Optional[HttpUrl] = Field(None, description="Cases URL")
|
||||
|
||||
class RekabetSearchResult(BaseModel):
|
||||
"""Model for the overall search result for Rekabet Kurumu decisions."""
|
||||
decisions: List[RekabetDecisionSummary]
|
||||
total_records_found: Optional[int] = Field(None, description="Total number of records found matching the query.")
|
||||
retrieved_page_number: int = Field(description="The page number of the results that were retrieved.")
|
||||
total_pages: Optional[int] = Field(None, description="Total number of pages available for the query.")
|
||||
total_records_found: Optional[int] = Field(None, description="Total")
|
||||
retrieved_page_number: int = Field(description="Page")
|
||||
total_pages: Optional[int] = Field(None, description="Pages")
|
||||
|
||||
class RekabetDocument(BaseModel):
|
||||
"""
|
||||
@@ -58,16 +57,15 @@ class RekabetDocument(BaseModel):
|
||||
Contains metadata from the landing page, a link to the PDF,
|
||||
and the PDF's content converted to paginated Markdown.
|
||||
"""
|
||||
source_landing_page_url: HttpUrl = Field(description="The URL of the decision's landing page from which the PDF was identified.")
|
||||
karar_id: str = Field(description="GUID of the decision.")
|
||||
source_landing_page_url: HttpUrl = Field(description="Source URL")
|
||||
karar_id: str = Field(description="ID")
|
||||
|
||||
title_on_landing_page: Optional[str] = Field(None, description="Title as found on the landing page (e.g., from <title> tag or a main heading). Could be a generic title if direct PDF.")
|
||||
pdf_url: Optional[HttpUrl] = Field(None, description="Direct URL to the decision PDF document, if successfully found and resolved.")
|
||||
title_on_landing_page: Optional[str] = Field(None, description="Title")
|
||||
pdf_url: Optional[HttpUrl] = Field(None, description="PDF URL")
|
||||
|
||||
# Fields for Markdown content derived from the PDF
|
||||
markdown_chunk: Optional[str] = Field(None, description="A 5,000 character chunk of the Markdown content derived from the decision PDF.")
|
||||
current_page: int = Field(1, description="The current page number of the PDF-derived markdown chunk (1-indexed).")
|
||||
total_pages: int = Field(1, description="Total number of pages for the full PDF-derived markdown content. Will be 0 if content could not be processed.")
|
||||
is_paginated: bool = Field(False, description="True if the full PDF-derived markdown content is split into multiple pages.")
|
||||
markdown_chunk: Optional[str] = Field(None, description="Content")
|
||||
current_page: int = Field(1, description="Page")
|
||||
total_pages: int = Field(1, description="Total pages")
|
||||
is_paginated: bool = Field(False, description="Paginated")
|
||||
|
||||
error_message: Optional[str] = Field(None, description="Contains an error message if the document retrieval or processing failed at any stage.")
|
||||
error_message: Optional[str] = Field(None, description="Error")
|
||||
+23
-105
@@ -16,30 +16,18 @@ class GenelKurulSearchRequest(BaseModel):
|
||||
of the Turkish Court of Accounts, typically addressing interpretation of
|
||||
audit and accountability regulations.
|
||||
"""
|
||||
karar_no: Optional[str] = Field(None, description="Decision number (e.g., '5415')")
|
||||
karar_ek: Optional[str] = Field(None, description="Decision appendix number (max 99)")
|
||||
karar_no: Optional[str] = Field(None, description="Decision no")
|
||||
karar_ek: Optional[str] = Field(None, description="Appendix no")
|
||||
|
||||
karar_tarih_baslangic: Optional[str] = Field(None, description="""
|
||||
Decision start year for date range filtering.
|
||||
Available years: 2006-2024. Format: 'YYYY' (e.g., '2020')
|
||||
Use with karar_tarih_bitis for date range filtering.
|
||||
""")
|
||||
karar_tarih_baslangic: Optional[str] = Field(None, description="Start year (YYYY)")
|
||||
|
||||
karar_tarih_bitis: Optional[str] = Field(None, description="""
|
||||
Decision end year for date range filtering.
|
||||
Available years: 2006-2024. Format: 'YYYY' (e.g., '2024')
|
||||
Use with karar_tarih_baslangic for date range filtering.
|
||||
""")
|
||||
karar_tarih_bitis: Optional[str] = Field(None, description="End year")
|
||||
|
||||
karar_tamami: Optional[str] = Field(None, description="""
|
||||
Content/text search within decision summaries (max 400 characters).
|
||||
Searches in decision abstracts and main content.
|
||||
Example: 'belediye taşınmaz tahsis'
|
||||
""")
|
||||
karar_tamami: Optional[str] = Field(None, description="Value")
|
||||
|
||||
# DataTables pagination
|
||||
start: int = Field(0, description="Starting record for pagination (0-based)")
|
||||
length: int = Field(10, description="Number of records per page (1-100)")
|
||||
length: int = Field(10, description="Number of records per page (1-10)")
|
||||
|
||||
class GenelKurulDecision(BaseModel):
|
||||
"""Single Genel Kurul decision entry from search results."""
|
||||
@@ -66,62 +54,27 @@ class TemyizKuruluSearchRequest(BaseModel):
|
||||
Temyiz Kurulu reviews appeals against audit chamber decisions,
|
||||
providing higher-level review of audit findings and sanctions.
|
||||
"""
|
||||
ilam_dairesi: DaireEnum = Field("ALL", description="""
|
||||
Chamber/Department filter for appeals board decisions.
|
||||
• ALL: All chambers (default)
|
||||
• 1-8: Specific chamber number (1. Daire through 8. Daire)
|
||||
Each chamber specializes in different types of public institutions.
|
||||
""")
|
||||
ilam_dairesi: DaireEnum = Field("ALL", description="Value")
|
||||
|
||||
yili: Optional[str] = Field(None, description="""
|
||||
Account year filter (Hesap Yılı).
|
||||
Available years: 1993-2022. Format: 'YYYY' (e.g., '2020')
|
||||
Refers to the fiscal year being audited, not decision date.
|
||||
""")
|
||||
yili: Optional[str] = Field(None, description="Value")
|
||||
|
||||
karar_tarih_baslangic: Optional[str] = Field(None, description="""
|
||||
Decision start year for date range filtering.
|
||||
Available years: 2000, 2006-2024. Format: 'YYYY' (e.g., '2020')
|
||||
Use with karar_tarih_bitis for date range filtering.
|
||||
""")
|
||||
karar_tarih_baslangic: Optional[str] = Field(None, description="Value")
|
||||
|
||||
karar_tarih_bitis: Optional[str] = Field(None, description="""
|
||||
Decision end year for date range filtering.
|
||||
Available years: 2000, 2006-2024. Format: 'YYYY' (e.g., '2024')
|
||||
Use with karar_tarih_baslangic for date range filtering.
|
||||
""")
|
||||
karar_tarih_bitis: Optional[str] = Field(None, description="End year")
|
||||
|
||||
kamu_idaresi_turu: KamuIdaresiTuruEnum = Field("ALL", description="""
|
||||
Public administration type filter:
|
||||
• ALL: All institutions (default)
|
||||
• Genel Bütçe Kapsamındaki İdareler: General budget administrations
|
||||
• Yüksek Öğretim Kurumları: Higher education institutions
|
||||
• Belediyeler ve Bağlı İdareler: Municipalities and affiliates
|
||||
• Other specific institution types
|
||||
""")
|
||||
kamu_idaresi_turu: KamuIdaresiTuruEnum = Field("ALL", description="Value")
|
||||
|
||||
ilam_no: Optional[str] = Field(None, description="Audit report number (İlam No, max 50 chars)")
|
||||
dosya_no: Optional[str] = Field(None, description="File number for the case")
|
||||
temyiz_tutanak_no: Optional[str] = Field(None, description="Appeals board meeting minutes number")
|
||||
|
||||
temyiz_karar: Optional[str] = Field(None, description="""
|
||||
Content search within appeals decisions.
|
||||
Searches decision text and reasoning.
|
||||
Example: 'araç kiralama kasko'
|
||||
""")
|
||||
temyiz_karar: Optional[str] = Field(None, description="Value")
|
||||
|
||||
web_karar_konusu: WebKararKonusuEnum = Field("ALL", description="""
|
||||
Decision subject category filter:
|
||||
• ALL: All subjects (default)
|
||||
• İhale Mevzuatı ile İlgili Kararlar: Procurement legislation
|
||||
• Personel Mevzuatı ile İlgili Kararlar: Personnel legislation
|
||||
• Harcırah Mevzuatı ile İlgili Kararlar: Travel allowance legislation
|
||||
• Other specialized legal areas
|
||||
""")
|
||||
web_karar_konusu: WebKararKonusuEnum = Field("ALL", description="Value")
|
||||
|
||||
# DataTables pagination
|
||||
start: int = Field(0, description="Starting record for pagination (0-based)")
|
||||
length: int = Field(10, description="Number of records per page (1-100)")
|
||||
length: int = Field(10, description="Number of records per page (1-10)")
|
||||
|
||||
class TemyizKuruluDecision(BaseModel):
|
||||
"""Single Temyiz Kurulu decision entry from search results."""
|
||||
@@ -148,60 +101,25 @@ class DaireSearchRequest(BaseModel):
|
||||
Daire decisions are first-instance audit findings and sanctions
|
||||
issued by individual audit chambers before potential appeals.
|
||||
"""
|
||||
yargilama_dairesi: DaireEnum = Field("ALL", description="""
|
||||
Audit chamber filter:
|
||||
• ALL: All chambers (default)
|
||||
• 1-8: Specific chamber number (1. Daire through 8. Daire)
|
||||
Each chamber audits different types of public institutions.
|
||||
""")
|
||||
yargilama_dairesi: DaireEnum = Field("ALL", description="Value")
|
||||
|
||||
karar_tarih_baslangic: Optional[str] = Field(None, description="""
|
||||
Decision start year for date range filtering.
|
||||
Available years: 2012-2025. Format: 'YYYY' (e.g., '2020')
|
||||
Use with karar_tarih_bitis for date range filtering.
|
||||
""")
|
||||
karar_tarih_baslangic: Optional[str] = Field(None, description="Value")
|
||||
|
||||
karar_tarih_bitis: Optional[str] = Field(None, description="""
|
||||
Decision end year for date range filtering.
|
||||
Available years: 2012-2025. Format: 'YYYY' (e.g., '2024')
|
||||
Use with karar_tarih_baslangic for date range filtering.
|
||||
""")
|
||||
karar_tarih_bitis: Optional[str] = Field(None, description="End year")
|
||||
|
||||
ilam_no: Optional[str] = Field(None, description="Audit report number (İlam No, max 50 chars)")
|
||||
|
||||
kamu_idaresi_turu: KamuIdaresiTuruEnum = Field("ALL", description="""
|
||||
Public administration type filter:
|
||||
• ALL: All institutions (default)
|
||||
• Genel Bütçe Kapsamındaki İdareler: General budget administrations
|
||||
• Yüksek Öğretim Kurumları: Higher education institutions
|
||||
• Belediyeler ve Bağlı İdareler: Municipalities and affiliates
|
||||
• Other specific institution types
|
||||
""")
|
||||
kamu_idaresi_turu: KamuIdaresiTuruEnum = Field("ALL", description="Value")
|
||||
|
||||
hesap_yili: Optional[str] = Field(None, description="""
|
||||
Account year filter (Hesap Yılı).
|
||||
Available years: 2005, 2008-2023. Format: 'YYYY' (e.g., '2020')
|
||||
Refers to the fiscal year being audited, not decision date.
|
||||
""")
|
||||
hesap_yili: Optional[str] = Field(None, description="Value")
|
||||
|
||||
web_karar_konusu: WebKararKonusuEnum = Field("ALL", description="""
|
||||
Decision subject category filter:
|
||||
• ALL: All subjects (default)
|
||||
• İhale Mevzuatı ile İlgili Kararlar: Procurement legislation
|
||||
• Personel Mevzuatı ile İlgili Kararlar: Personnel legislation
|
||||
• Vergi Resmi Harç ve Diğer Gelirlerle İlgili Kararlar: Tax and fee legislation
|
||||
• Other specialized legal areas
|
||||
""")
|
||||
web_karar_konusu: WebKararKonusuEnum = Field("ALL", description="Value")
|
||||
|
||||
web_karar_metni: Optional[str] = Field(None, description="""
|
||||
Content search within chamber decisions.
|
||||
Searches decision text and audit findings.
|
||||
Example: 'birim fiyat revize edilmemesi'
|
||||
""")
|
||||
web_karar_metni: Optional[str] = Field(None, description="Value")
|
||||
|
||||
# DataTables pagination
|
||||
start: int = Field(0, description="Starting record for pagination (0-based)")
|
||||
length: int = Field(10, description="Number of records per page (1-100)")
|
||||
length: int = Field(10, description="Number of records per page (1-10)")
|
||||
|
||||
class DaireDecision(BaseModel):
|
||||
"""Single Daire decision entry from search results."""
|
||||
@@ -235,7 +153,7 @@ class SayistayDocumentMarkdown(BaseModel):
|
||||
decision types (Genel Kurul, Temyiz Kurulu, Daire).
|
||||
"""
|
||||
decision_id: str = Field(..., description="Unique decision identifier")
|
||||
decision_type: str = Field(..., description="Type of decision: 'genel_kurul', 'temyiz_kurulu', or 'daire'")
|
||||
decision_type: str = Field(..., description="Value")
|
||||
source_url: str = Field(..., description="Original URL where the document was retrieved")
|
||||
markdown_content: Optional[str] = Field(None, description="Full decision text converted to Markdown format")
|
||||
retrieval_date: Optional[str] = Field(None, description="Date when document was retrieved (ISO format)")
|
||||
|
||||
@@ -28,41 +28,41 @@ class UyusmazlikKararSonucuEnum(str, Enum): # Based on checkbox text in the form
|
||||
|
||||
class UyusmazlikSearchRequest(BaseModel): # This is the model the MCP tool will accept
|
||||
"""Model for Uyuşmazlık Mahkemesi search request using user-friendly terms."""
|
||||
icerik: Optional[str] = Field("", description="Keyword or content for main text search (Icerik).")
|
||||
icerik: Optional[str] = Field("", description="Search text")
|
||||
|
||||
bolum: Optional[UyusmazlikBolumEnum] = Field(
|
||||
UyusmazlikBolumEnum.TUMU,
|
||||
description="Select the department (Bölüm)."
|
||||
description="Department"
|
||||
)
|
||||
uyusmazlik_turu: Optional[UyusmazlikTuruEnum] = Field(
|
||||
UyusmazlikTuruEnum.TUMU,
|
||||
description="Select the type of dispute (Uyuşmazlık)."
|
||||
description="Dispute type"
|
||||
)
|
||||
|
||||
# User provides a list of user-friendly names for Karar Sonucu
|
||||
karar_sonuclari: Optional[List[UyusmazlikKararSonucuEnum]] = Field( # Changed to list of Enums
|
||||
default_factory=list,
|
||||
description="List of desired 'Karar Sonucu' types."
|
||||
description="Decision types"
|
||||
)
|
||||
|
||||
esas_yil: Optional[str] = Field("", description="Case year ('Esas Yılı').")
|
||||
esas_sayisi: Optional[str] = Field("", description="Case number ('Esas Sayısı').")
|
||||
karar_yil: Optional[str] = Field("", description="Decision year ('Karar Yılı').")
|
||||
karar_sayisi: Optional[str] = Field("", description="Decision number ('Karar Sayısı').")
|
||||
kanun_no: Optional[str] = Field("", description="Relevant Law Number ('KanunNo').")
|
||||
esas_yil: Optional[str] = Field("", description="Case year")
|
||||
esas_sayisi: Optional[str] = Field("", description="Case no")
|
||||
karar_yil: Optional[str] = Field("", description="Decision year")
|
||||
karar_sayisi: Optional[str] = Field("", description="Decision no")
|
||||
kanun_no: Optional[str] = Field("", description="Law no")
|
||||
|
||||
karar_date_begin: Optional[str] = Field("", description="Decision start date (DD.MM.YYYY) ('KararDateBegin').")
|
||||
karar_date_end: Optional[str] = Field("", description="Decision end date (DD.MM.YYYY) ('KararDateEnd').")
|
||||
karar_date_begin: Optional[str] = Field("", description="Start date (DD.MM.YYYY)")
|
||||
karar_date_end: Optional[str] = Field("", description="End date (DD.MM.YYYY)")
|
||||
|
||||
resmi_gazete_sayi: Optional[str] = Field("", description="Official Gazette number ('ResmiGazeteSayi').")
|
||||
resmi_gazete_date: Optional[str] = Field("", description="Official Gazette date (DD.MM.YYYY) ('ResmiGazeteDate').")
|
||||
resmi_gazete_sayi: Optional[str] = Field("", description="Gazette no")
|
||||
resmi_gazete_date: Optional[str] = Field("", description="Gazette date (DD.MM.YYYY)")
|
||||
|
||||
# Detailed text search fields from the "icerikDetail" section of the form
|
||||
tumce: Optional[str] = Field("", description="Exact phrase search ('Tumce').")
|
||||
wild_card: Optional[str] = Field("", description="Search for phrase and its inflections ('WildCard').") # Changed from WildCard for Pythonic name
|
||||
hepsi: Optional[str] = Field("", description="Search for texts containing all specified words ('Hepsi').")
|
||||
herhangi_birisi: Optional[str] = Field("", description="Search for texts containing any of the specified words ('Herhangibirisi').")
|
||||
not_hepsi: Optional[str] = Field("", description="Exclude texts containing these specified words ('NotHepsi').")
|
||||
tumce: Optional[str] = Field("", description="Exact phrase")
|
||||
wild_card: Optional[str] = Field("", description="Wildcard search")
|
||||
hepsi: Optional[str] = Field("", description="All words")
|
||||
herhangi_birisi: Optional[str] = Field("", description="Any word")
|
||||
not_hepsi: Optional[str] = Field("", description="Exclude words")
|
||||
|
||||
class UyusmazlikApiDecisionEntry(BaseModel):
|
||||
"""Model for an individual decision entry parsed from Uyuşmazlık API's HTML search response."""
|
||||
@@ -71,9 +71,9 @@ class UyusmazlikApiDecisionEntry(BaseModel):
|
||||
bolum: Optional[str] = Field(None)
|
||||
uyusmazlik_konusu: Optional[str] = Field(None)
|
||||
karar_sonucu: Optional[str] = Field(None)
|
||||
popover_content: Optional[str] = Field(None, description="Summary/description from popover.")
|
||||
popover_content: Optional[str] = Field(None, description="Summary")
|
||||
document_url: HttpUrl # Full URL to the decision document HTML page
|
||||
pdf_url: Optional[HttpUrl] = Field(None, description="Direct URL to PDF if available.")
|
||||
pdf_url: Optional[HttpUrl] = Field(None, description="PDF URL")
|
||||
|
||||
class UyusmazlikSearchResponse(BaseModel): # This is what the MCP tool will return
|
||||
"""Response model for Uyuşmazlık Mahkemesi search results for the MCP tool."""
|
||||
|
||||
@@ -34,86 +34,41 @@ class YargitayDetailedSearchRequest(BaseModel):
|
||||
to Yargitay's detailed search endpoint (e.g., /aramadetaylist).
|
||||
Based on the payload provided by the user.
|
||||
"""
|
||||
arananKelime: Optional[str] = Field("", description="""Keyword to search for with advanced operators support:
|
||||
• Simple words: 'arsa payı' (OR logic - finds documents with ANY word)
|
||||
• Exact phrases: '"arsa payı"' (finds exact phrase)
|
||||
• AND logic: 'arsa+payı' (both words required)
|
||||
• Wildcards: 'bozma*' (matches bozma, bozması, bozmanın, etc.)
|
||||
• Multiple required: '+"arsa payı" +"bozma sebebi"'
|
||||
• Exclusion: '+"arsa payı" -"inşaat sözleşmesi"'
|
||||
Examples: arsa payı | "arsa payı" | +"mülkiyet hakkı" +"bozma sebebi" | hukuk*""")
|
||||
arananKelime: Optional[str] = Field("", description="Turkish keywords (supports +word -word \"phrase\" operators)")
|
||||
# Department/Board selection - Complete Court of Cassation chamber hierarchy
|
||||
birimYrgKurulDaire: Optional[str] = Field("ALL", description="""
|
||||
Court of Cassation (Yargıtay) chamber/board selection. Options include:
|
||||
- 'ALL' for all chambers
|
||||
- Civil: 'Civil General Assembly (Hukuk Genel Kurulu)', '1st Civil Chamber (1. Hukuk Dairesi)' through '23rd Civil Chamber (23. Hukuk Dairesi)', 'Civil Chambers Presidents Board (Hukuk Daireleri Başkanlar Kurulu)'
|
||||
- Criminal: 'Criminal General Assembly (Ceza Genel Kurulu)', '1st Criminal Chamber (1. Ceza Dairesi)' through '23rd Criminal Chamber (23. Ceza Dairesi)', 'Criminal Chambers Presidents Board (Ceza Daireleri Başkanlar Kurulu)'
|
||||
- General: 'Grand General Assembly (Büyük Genel Kurulu)'
|
||||
Total: 52 possible values (including 'ALL' for all chambers)
|
||||
""")
|
||||
birimYrgHukukDaire: Optional[str] = Field("", description="Legacy field - use birimYrgKurulDaire instead for chamber selection")
|
||||
birimYrgCezaDaire: Optional[str] = Field("", description="Legacy field - use birimYrgKurulDaire instead for chamber selection")
|
||||
birimYrgKurulDaire: Optional[str] = Field("ALL", description="Chamber (ALL or specific chamber name)")
|
||||
birimYrgHukukDaire: Optional[str] = Field("", description="Legacy field")
|
||||
birimYrgCezaDaire: Optional[str] = Field("", description="Legacy field")
|
||||
|
||||
esasYil: Optional[str] = Field("", description="""Case year for 'Esas No' filtering.
|
||||
Format: YYYY (e.g., '2024')
|
||||
Use with sequence numbers for precise case targeting""")
|
||||
esasIlkSiraNo: Optional[str] = Field("", description="""Starting sequence number for 'Esas No' range filtering.
|
||||
Format: numeric string (e.g., '1', '100')
|
||||
Use with esasSonSiraNo for range: cases 100-200 in specified year""")
|
||||
esasSonSiraNo: Optional[str] = Field("", description="""Ending sequence number for 'Esas No' range filtering.
|
||||
Format: numeric string (e.g., '500', '1000')
|
||||
Creates range from esasIlkSiraNo to this number""")
|
||||
esasYil: Optional[str] = Field("", description="Case year (YYYY)")
|
||||
esasIlkSiraNo: Optional[str] = Field("", description="Start case no")
|
||||
esasSonSiraNo: Optional[str] = Field("", description="End case no")
|
||||
|
||||
kararYil: Optional[str] = Field("", description="""Decision year for 'Karar No' filtering.
|
||||
Format: YYYY (e.g., '2024')
|
||||
Filters decisions by the year they were issued""")
|
||||
kararIlkSiraNo: Optional[str] = Field("", description="""Starting sequence number for 'Karar No' range filtering.
|
||||
Format: numeric string (e.g., '1', '50')
|
||||
Use with kararSonSiraNo for decision number ranges""")
|
||||
kararSonSiraNo: Optional[str] = Field("", description="""Ending sequence number for 'Karar No' range filtering.
|
||||
Format: numeric string (e.g., '100', '500')
|
||||
Creates range from kararIlkSiraNo to this number""")
|
||||
kararYil: Optional[str] = Field("", description="Decision year (YYYY)")
|
||||
kararIlkSiraNo: Optional[str] = Field("", description="Start decision no")
|
||||
kararSonSiraNo: Optional[str] = Field("", description="End decision no")
|
||||
|
||||
baslangicTarihi: Optional[str] = Field("", description="""Start date for decision search.
|
||||
Format: DD.MM.YYYY (e.g., '01.01.2024')
|
||||
Use with bitisTarihi for date range filtering
|
||||
Examples: '01.01.2024', '15.06.2023'""")
|
||||
bitisTarihi: Optional[str] = Field("", description="""End date for decision search.
|
||||
Format: DD.MM.YYYY (e.g., '31.12.2024')
|
||||
Creates date range from baslangicTarihi to this date
|
||||
Examples: '31.12.2024', '30.06.2023'""")
|
||||
baslangicTarihi: Optional[str] = Field("", description="Start date (DD.MM.YYYY)")
|
||||
bitisTarihi: Optional[str] = Field("", description="End date (DD.MM.YYYY)")
|
||||
|
||||
siralama: Optional[str] = Field("3", description="""Sorting criteria for search results:
|
||||
• '1': Esas No (Case Number) - sorts by case registration order
|
||||
• '2': Karar No (Decision Number) - sorts by decision issuance order
|
||||
• '3': Karar Tarihi (Decision Date) - sorts by chronological order [DEFAULT]
|
||||
Recommended: Use '3' for most recent decisions first""")
|
||||
siralamaDirection: Optional[str] = Field("desc", description="""Sorting direction for results:
|
||||
• 'desc': Descending order (newest/highest first) [DEFAULT]
|
||||
• 'asc': Ascending order (oldest/lowest first)
|
||||
Most common: 'desc' for latest decisions first""")
|
||||
siralama: Optional[str] = Field("3", description="Sort by (1=case, 2=decision, 3=date)")
|
||||
siralamaDirection: Optional[str] = Field("desc", description="Direction (asc/desc)")
|
||||
|
||||
pageSize: int = Field(10, ge=1, le=100, description="""Number of results per page.
|
||||
Range: 1-100 results per page
|
||||
Recommended: 10-50 for balanced performance and coverage
|
||||
Large values (50-100) for comprehensive analysis""")
|
||||
pageNumber: int = Field(1, ge=1, description="""Page number to retrieve (1-indexed).
|
||||
Start with 1 for first page
|
||||
Use with pageSize to navigate through large result sets
|
||||
Example: pageSize=50, pageNumber=3 gets results 101-150""")
|
||||
pageSize: int = Field(10, ge=1, le=10, description="Results per page (1-100)")
|
||||
pageNumber: int = Field(1, ge=1, description="Page number (1-indexed)")
|
||||
|
||||
class YargitayApiDecisionEntry(BaseModel):
|
||||
"""Model for an individual decision entry from the Yargitay API search response."""
|
||||
id: str # Unique system ID of the decision
|
||||
daire: Optional[str] = Field(None, description="The chamber (Daire) that made the decision.")
|
||||
esasNo: Optional[str] = Field(None, alias="esasNo", description="Case registry number (Esas No).")
|
||||
kararNo: Optional[str] = Field(None, alias="kararNo", description="Decision number (Karar No).")
|
||||
kararTarihi: Optional[str] = Field(None, alias="kararTarihi", description="Date of the decision (Karar Tarihi).")
|
||||
arananKelime: Optional[str] = Field(None, alias="arananKelime", description="Matched keyword (Aranan Kelime) in the search result item.")
|
||||
daire: Optional[str] = Field(None, description="Chamber")
|
||||
esasNo: Optional[str] = Field(None, alias="esasNo", description="Case no")
|
||||
kararNo: Optional[str] = Field(None, alias="kararNo", description="Decision no")
|
||||
kararTarihi: Optional[str] = Field(None, alias="kararTarihi", description="Date")
|
||||
arananKelime: Optional[str] = Field(None, alias="arananKelime", description="Keyword")
|
||||
# 'index' and 'siraNo' from API response are not critical for MCP tool, so omitted for brevity
|
||||
|
||||
# This field will be populated by the client after fetching the search list
|
||||
document_url: Optional[HttpUrl] = Field(None, description="Direct URL (Belge URL) to the decision document.")
|
||||
document_url: Optional[HttpUrl] = Field(None, description="Document URL")
|
||||
|
||||
model_config = ConfigDict(populate_by_name=True) # To allow populating by alias from API response
|
||||
|
||||
@@ -132,9 +87,9 @@ class YargitayApiSearchResponse(BaseModel):
|
||||
|
||||
class YargitayDocumentMarkdown(BaseModel):
|
||||
"""Model for a Yargitay decision document, containing only Markdown content."""
|
||||
id: str = Field(..., description="The unique ID (Belge Kimliği) of the document.")
|
||||
markdown_content: Optional[str] = Field(None, description="The decision content (Karar İçeriği) converted to Markdown.")
|
||||
source_url: HttpUrl = Field(..., description="The source URL (Kaynak URL) of the original document.")
|
||||
id: str = Field(..., description="Document ID")
|
||||
markdown_content: Optional[str] = Field(None, description="Content")
|
||||
source_url: HttpUrl = Field(..., description="Source URL")
|
||||
|
||||
class CompactYargitaySearchResult(BaseModel):
|
||||
"""A more compact search result model for the MCP tool to return."""
|
||||
|
||||
Reference in New Issue
Block a user