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

122 lines
4.6 KiB
Python

import requests
from pydantic import BaseModel, conint
from typing import List, Optional
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 ContractsAPI:
class ContractsList(BaseModel):
query : Optional[str] = None
typDokumentuFacetFilter: Optional[List[str]] = None
odberatelFacetFilter: Optional[List[str]] = None
dodavatelFacetFilter: Optional[List[str]] = None
hodnotaZmluvyFacetFilter: Optional[List[str]] = None
guidSud: Optional[str] = None
sortProperty: Optional[str] = None
sortDirection: SortDirection = SortDirection.ASC
page: Optional[int] = None
size : conint(ge=0) = 20
@function_tool
def about_contracts(args: ContractsList) -> dict:
"""
Načítanie zoznamu zmlúv podľa zadaných filtrov.
:param query: Hľadaný výraz, podľa ktorého sa vyhľadávajú zmluvy.
:param typDokumentuFacetFilter: Typy dokumentov ako fazetový filter (napr. ["ZMLUVA","FAKTURA"]).
:param odberatelFacetFilter: Odberatelia pre fazetový filter.
:param dodavatelFacetFilter: Dodávatelia pre fazetový filter.
:param hodnotaZmluvyFacetFilter: Hodnoty zmlúv (filtrovacie intervaly).
:param guidSud: Identifikátor súdu (napr. "sud_101").
:param sortProperty: Atribút na triedenie výsledkov.
:param sortDirection: ASC alebo DESC.
:param page: Číslo strany (0 = prvá strana).
:param size: Počet výsledkov na strane.
:return: JSON so zoznamom zmlúv a metadátami.
"""
try:
url = f"{API_BASE_URL}/v1/zmluvy"
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)} 🛑"}
class ContractDetail(BaseModel):
idZmluvy: str
@function_tool
def get_contract(args: ContractDetail) -> dict:
"""
Načítanie detailu zmluvy podľa jej identifikátora.
:param idZmluvy: Jedinečný identifikátor zmluvy.
:return: JSON slovník obsahujúci detailné informácie o zmluve.
"""
try:
url = f"{API_BASE_URL}/v1/zmluvy/{args.idZmluvy}"
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 get contract details: {str(e)} 🛑" }
class ContractsAutocomplete(BaseModel):
query : Optional[str] = None
guidSud: Optional[str] = None
limit: Optional[conint(ge=1)] = None
@function_tool
def contracts_autocomplete(args: ContractsAutocomplete) -> dict:
"""
Autocomplete pre vyhľadávanie zmlúv.
:param query: Hľadaný text alebo výraz na vyhľadanie zmlúv.
:param guidSud: Identifikátor súdu (napr. "sud_101") na filtrovanie zmlúv konkrétneho súdu.
:param limit: Maximálny počet výsledkov.
None = predvolených 5 výsledkov.
Hodnota 0 spôsobí chybu API — použite radšej None.
:return: JSON slovník obsahujúci zoznam návrhov zmlúv pre autocomplete.
"""
try:
url = f"{API_BASE_URL}/v1/zmluvy/autocomplete"
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)} 🛑"}