grantforge-api / backend /agents /tools /krs_graph_tool.py
GrantForge Bot
Deploy to Hugging Face
afd56bc
import logging
from typing import Dict, Any
from langchain_core.tools import tool
from integrations.krs_client import KRSClient
from rag_pipeline.graph_store import graph_store
logger = logging.getLogger(__name__)
@tool
def analyze_company_network(krs_number: str) -> Dict[str, Any]:
"""
Analizuje struktur臋 powi膮za艅 kapita艂owych i osobowych firmy na podstawie numeru KRS.
Narz臋dzie pobiera oficjalne dane z API KRS (odpis aktualny), dodaje je do bazy grafowej Neo4j,
a nast臋pnie wyszukuje jakiekolwiek powi膮zania weryfikuj膮ce status M艢P (zwi膮zki z innymi firmami).
Zwraca s艂ownik zawieraj膮cy dane rejestrowe firmy oraz zidentyfikowan膮 siatk臋 powi膮za艅 (wraz ze wsp贸lnikami i zarz膮dem).
"""
logger.info(f"Rozpocz臋cie analizy powi膮za艅 dla KRS: {krs_number}")
# 1. Pobierz aktualne dane z publicznego API KRS
odpis_json = KRSClient.get_odpis_aktualny(krs_number)
if not odpis_json:
return {
"error": f"Nie uda艂o si臋 pobra膰 odpisu dla KRS {krs_number}. Upewnij si臋, 偶e wpisany KRS jest poprawny."
}
# 2. Przekszta艂膰 JSON w w臋z艂y struktur (Wsp贸lnicy, Zarz膮d)
extracted_data = KRSClient.extract_graph_relations(odpis_json)
if not extracted_data:
return {
"error": "Format odpisu KRS by艂 niepoprawny lub nie wspierany w obecnej strukturze."
}
# 3. Zapisz/zaktualizuj graf Neo4j
graph_store.merge_company_graph(extracted_data)
# 4. Sprawd藕 powi膮zania grafowe - szukaj firm zale偶nych, powi膮zanych os贸b
network = graph_store.check_company_network(krs_number)
# Zwr贸膰 zagregowany profil do Agenta (np. Audytora)
return {
"podmiot": {
"nazwa": extracted_data.get("nazwa"),
"krs": extracted_data.get("krs"),
"nip": extracted_data.get("nip"),
"kapital_zakladowy": extracted_data.get("kapitalZakladowy"),
},
"wspolnicy_bezposredni": [
f"{w.get('imiona')} {w.get('nazwa')} (Sp贸艂ka: {w.get('is_spolka')})"
for w in extracted_data.get("wspolnicy", [])
],
"zarzad": [
f"{z.get('imiona')} {z.get('nazwa')} - {z.get('funkcja')}"
for z in extracted_data.get("zarzad", [])
],
"wykryte_relacje_grafowe": network
if network
else "Brak zidentyfikowanych powi膮za艅 sieciowych w bazie GraphRAG poza bezpo艣rednio ujawnionymi w odpisie.",
"rekomendacja_msp": "UWAGA: Je偶eli w sekcji 'wykryte_relacje_grafowe' zidentyfikowano inne sp贸艂ki, kapita艂, zatrudnienie lub przychody z tych firm mog膮 wlicza膰 si臋 w weryfikacj臋 statusu M艢P analizowanej firmy!",
}