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!",
    }