ai-lawyer-agent/core/tools/obcianPojednavania.py
2025-12-12 08:41:11 +01:00

137 lines
6.8 KiB
Python

import requests
from pydantic import BaseModel, conint
from typing import Optional, List
from enum import Enum
from agents import function_tool
API_BASE_URL = "https://obcan.justice.sk/pilot/api/ress-isu-service"
class SortDirection(str, Enum):
ASC = "ASC"
DESC = "DESC"
class CivilProceedingAPI:
class CivilProceedParams(BaseModel):
query: Optional[str] = None
typSuduFacetFilter: Optional[List[str]] = None
krajFacetFilter: Optional[List[str]] = None
okresFacetFilter: Optional[List[str]] = None
usekFacetFilter: Optional[List[str]] = None
formaUkonuFacetFilter: Optional[List[str]] = None
pojednavaniaOd: Optional[str] = None
pojednavaniaDo: Optional[str] = None
guidSudca: Optional[str] = None
guidSud: Optional[str] = None
spisovaZnacka: Optional[str] = None
verejneVyhlasenie: Optional[bool] = None
indexDatumOd: Optional[str] = None
indexDatumDo: Optional[str] = None
sortProperty: Optional[str] = None
sortDirection: SortDirection = SortDirection.ASC
page: int = 0
size: int = 20
@function_tool
def about_civil_proceeding(args: CivilProceedParams) -> dict:
"""
Načítanie zoznamu občianskoprávnych pojednávaní a verejne vyhlásených rozsudkov na základe filtrovacích kritérií
:param query: Hľadané slovo alebo slovné spojenie, podľa ktorého sa vyhľadávajú občianskoprávne pojednávania.
:param typSuduFacetFilter: Zoznam typov súdov (fazetový filter), napr. ["Okresný súd", "Krajský súd", "Mestský súd"].
:param krajFacetFilter: Zoznam krajov (fazetový filter), napr. ["Bratislavský kraj", "Košický kraj", "Prešovský kraj"].
:param okresFacetFilter: Zoznam okresov (fazetový filter), napr. ["Okres Košice I", "Okres Bratislava IV", "Okres Žilina"].
:param usekFacetFilter: Zoznam úsekov (fazetový filter), napr. ["C", "O", "S"].
:param formaUkonuFacetFilter: Zoznam foriem úkonu (fazetový filter), napr. ["Pojednávanie bez rozhodnutia", "Pojednávanie a rozhodnutie",
"Verejné vyhlásenie rozsudku"].
:param pojednavaniaOd: Dátum pojednávania OD (formát: DD.MM.RRRR), napr. "01.01.2025".
:param pojednavaniaDo: Dátum pojednávania DO (formát: DD.MM.RRRR), napr. "31.12.2025".
:param guidSudca: Identifikátor sudcu pre filtrovanie pojednávaní konkrétneho sudcu, napr. "sudca_2442".
:param guidSud: Identifikátor súdu pre filtrovanie pojednávaní konkrétneho súdu, napr. "sud_135".
:param spisovaZnacka: Spisová značka pojednávania, napr. "30P/1/2025".
:param verejneVyhlasenie: Príznak, či zahrnúť len verejne vyhlásené rozsudky. Hodnota typu boolean.
:param indexDatumOd: Dátum indexácie OD (formát: DD.MM.RRRR), napr. "01.01.2025".
:param indexDatumDo: Dátum indexácie DO (formát: DD.MM.RRRR), napr. "31.12.2025".
:param sortProperty: Názov atribútu, podľa ktorého sa majú záznamy zoradiť, napr. "datumPojednavania", "spisovaZnacka".
:param sortDirection: Smer zoradenia záznamov. Možnosti: "ASC" (predvolené) alebo "DESC".
:param page: Číslo stránky (0 = prvá stránka) pre stránkovanie výsledkov.
:param size: Počet záznamov na stránku (predvolené 20) pre stránkovanie výsledkov.
:return: Slovník (JSON) obsahujúci zoznam občianskoprávnych pojednávaní a verejne vyhlásených rozsudkov s detailnými informáciami, metadátami a filtrami.
"""
try:
url = f"{API_BASE_URL}/v1/obcianPojednavania"
response = requests.get(url, params=args.model_dump())
response.raise_for_status()
if response.status_code == 200:
data = response.json()
print(f"❗🔨\n {data}")
return {"success": True, "data": data}
else:
return {"success": False, "error": f"Unexpected status code: {response.status_code} ⚠️"}
except Exception as e:
return {"success": False, "error": f"Error get contract details: {str(e)} 🛑"}
@function_tool
def civil_proceeding_id(self, id: str) -> dict:
"""
Načítanie detailu občianskoprávneho pojednávania na základe identifikátora.
:param id: Identifikátor sudcu (povinný parameter), napr. "sudca_123", "sudca_456".
:return: Slovník (JSON) obsahujúci detailné informácie o občianskoprávnom pojednávaní na základe identifikátora.
"""
try:
url = f"{API_BASE_URL}/v1/obcianPojednavania/{id}"
response = requests.get(url)
response.raise_for_status()
if response.status_code == 200:
data = response.json()
print(f"⭕🔨\n {data}")
return {"success": True, "data": data}
else:
return {"success": False, "error": f"Unexpected status code: {response.status_code} ⚠️"}
except Exception as e:
return {"success": False, "error": f"Error : {str(e)} 🛑"}
class CivilProceedAutocomplete(BaseModel):
query: Optional[str] = None
guidSud: Optional[str] = None
giudSud: Optional[str] = None
verejneVyhlasenie: Optional[bool] = None
limit: Optional[conint(ge=0)] = None
@function_tool
def civil_proceeding_autocomplete(self, args: CivilProceedAutocomplete) -> dict:
"""
Autocomplete služba pre vyhľadávanie občianskoprávnych pojednávaní a verejne vyhlásených rozsudkov.
:param query: Hľadané slovo alebo slovné spojenie pre vyhľadávanie pojednávaní.
:param guidSud: Identifikátor súdu pre filtrovanie pojednávaní konkrétneho súdu.
:param giudSud: Duplicitný parameter - pravdepodobne chyba, použite guidSud.
:param verejneVyhlasenie: Príznak, či zahrnúť len verejne vyhlásené rozsudky.
:param limit: Maximálny počet návrhov (0 = všetky možné návrhy).
:return: Slovník (JSON) obsahujúci zoznam návrhov pre autocomplete.
"""
try:
url = f"{API_BASE_URL}/v1/obcianPojednavania/autocomplete"
response = requests.get(url, args.model_dump())
response.raise_for_status()
if response.status_code == 200:
data = response.json()
print(f"📛🔨\n {data}")
return {"success": True, "data": data}
else:
return {"success": False, "error": f"Unexpected status code: {response.status_code} ⚠️"}
except Exception as e:
return {"success": False, "error": f"Error : {str(e)} 🛑"}