# bedesten_mcp_module/models.py from pydantic import BaseModel, Field from typing import List, Optional, Dict, Any, Literal, Union from datetime import datetime # Import YargitayBirimEnum for chamber filtering from yargitay_mcp_module.models import YargitayBirimEnum # Court Type Options for Unified Search BedestenCourtTypeEnum = Literal[ "YARGITAYKARARI", # Yargıtay (Court of Cassation) "DANISTAYKARAR", # Danıştay (Council of State) "YERELHUKUK", # Local Civil Courts "ISTINAFHUKUK", # Civil Courts of Appeals "KYB" # Extraordinary Appeals (Kanun Yararına Bozma) ] # Danıştay Chamber/Board Options DanistayBirimEnum = Literal[ "ALL", # "ALL" for all chambers # Main Councils "Büyük Gen.Kur.", # Grand General Assembly "İdare Dava Daireleri Kurulu", # Administrative Cases Chambers Council "Vergi Dava Daireleri Kurulu", # Tax Cases Chambers Council "İçtihatları Birleştirme Kurulu", # Precedents Unification Council "İdari İşler Kurulu", # Administrative Affairs Council "Başkanlar Kurulu", # Presidents Council # Chambers "1. Daire", "2. Daire", "3. Daire", "4. Daire", "5. Daire", "6. Daire", "7. Daire", "8. Daire", "9. Daire", "10. Daire", "11. Daire", "12. Daire", "13. Daire", "14. Daire", "15. Daire", "16. Daire", "17. Daire", # Military High Administrative Court "Askeri Yüksek İdare Mahkemesi", "Askeri Yüksek İdare Mahkemesi Daireler Kurulu", "Askeri Yüksek İdare Mahkemesi Başsavcılığı", "Askeri Yüksek İdare Mahkemesi 1. Daire", "Askeri Yüksek İdare Mahkemesi 2. Daire", "Askeri Yüksek İdare Mahkemesi 3. Daire" ] # Search Request Models class BedestenSearchData(BaseModel): 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 applicationName: str = "UyapMevzuat" paging: bool = True # Search Response Models class BedestenItemType(BaseModel): name: str description: str class BedestenDecisionEntry(BaseModel): documentId: str itemType: BedestenItemType birimId: Optional[str] = None birimAdi: Optional[str] esasNoYil: Optional[int] = None esasNoSira: Optional[int] = None kararNoYil: Optional[int] = None kararNoSira: Optional[int] = None kararTuru: Optional[str] = None kararTarihi: str kararTarihiStr: str kesinlesmeDurumu: Optional[str] = None kararNo: Optional[str] = None esasNo: Optional[str] = None class BedestenSearchDataResponse(BaseModel): emsalKararList: List[BedestenDecisionEntry] total: int start: int class BedestenSearchResponse(BaseModel): data: Optional[BedestenSearchDataResponse] metadata: Dict[str, Any] # Document Request/Response Models class BedestenDocumentRequestData(BaseModel): documentId: str class BedestenDocumentRequest(BaseModel): data: BedestenDocumentRequestData applicationName: str = "UyapMevzuat" class BedestenDocumentData(BaseModel): content: str # Base64 encoded HTML or PDF mimeType: str version: int class BedestenDocumentResponse(BaseModel): data: BedestenDocumentData metadata: Dict[str, Any] class BedestenDocumentMarkdown(BaseModel): documentId: str = Field(..., description="The document ID (Belge Kimliği) from Bedesten") markdown_content: Optional[str] = Field(None, description="The decision content (Karar İçeriği) converted to Markdown") source_url: str = Field(..., description="The source URL (Kaynak URL) of the document") mime_type: Optional[str] = Field(None, description="Original content type (İçerik Türü) (text/html or application/pdf)")