Spaces:
Running
Running
File size: 2,700 Bytes
3b7f713 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 | 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!",
}
|