Spaces:
Running
Running
| 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__) | |
| 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!", | |
| } | |