Madras1 commited on
Commit
595485e
·
verified ·
1 Parent(s): 7223f8f

Upload 58 files

Browse files
Files changed (1) hide show
  1. app/services/investigation.py +39 -2
app/services/investigation.py CHANGED
@@ -9,6 +9,7 @@ import asyncio
9
 
10
  from app.services.brazil_apis import consultar_cnpj, CompanyData
11
  from app.services.transparencia_api import verificar_sancoes
 
12
  from app.services import lancer
13
  from app.services.nlp import entity_extractor
14
  from app.core.database import get_db
@@ -38,6 +39,7 @@ class Dossier:
38
  dados_cadastrais: Optional[DossierSection] = None
39
  socios: Optional[DossierSection] = None
40
  sancoes: Optional[DossierSection] = None
 
41
  noticias: Optional[DossierSection] = None
42
  entidades_relacionadas: Optional[DossierSection] = None
43
 
@@ -226,7 +228,42 @@ async def investigar_pessoa(nome: str, cpf: Optional[str] = None) -> Dossier:
226
  conteudo=sancoes
227
  )
228
 
229
- # 2. Web search for information
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
230
  try:
231
  web_result = await lancer.search(f'"{nome}" biografia cargo empresa', max_results=10)
232
 
@@ -296,7 +333,7 @@ def dossier_to_dict(dossier: Dossier) -> Dict[str, Any]:
296
  "secoes": {}
297
  }
298
 
299
- for field_name in ["dados_cadastrais", "socios", "sancoes", "noticias", "entidades_relacionadas"]:
300
  section = getattr(dossier, field_name)
301
  if section:
302
  result["secoes"][field_name] = {
 
9
 
10
  from app.services.brazil_apis import consultar_cnpj, CompanyData
11
  from app.services.transparencia_api import verificar_sancoes
12
+ from app.services.tse_api import buscar_politico
13
  from app.services import lancer
14
  from app.services.nlp import entity_extractor
15
  from app.core.database import get_db
 
39
  dados_cadastrais: Optional[DossierSection] = None
40
  socios: Optional[DossierSection] = None
41
  sancoes: Optional[DossierSection] = None
42
+ dados_politicos: Optional[DossierSection] = None # TSE data
43
  noticias: Optional[DossierSection] = None
44
  entidades_relacionadas: Optional[DossierSection] = None
45
 
 
228
  conteudo=sancoes
229
  )
230
 
231
+ # 2. Check TSE for political data
232
+ try:
233
+ tse_data = await buscar_politico(nome)
234
+
235
+ if tse_data.get("encontrado"):
236
+ dossier.fonte_dados.append("TSE (DivulgaCand)")
237
+
238
+ # Build political section
239
+ candidaturas = tse_data.get("candidaturas", [])
240
+ patrimonio = tse_data.get("total_patrimonio", 0)
241
+ partidos = tse_data.get("partidos", [])
242
+
243
+ dossier.dados_politicos = DossierSection(
244
+ titulo=f"Dados Políticos ({len(candidaturas)} candidatura(s))",
245
+ icone="🗳️",
246
+ conteudo={
247
+ "ultimo_cargo": tse_data.get("ultimo_cargo"),
248
+ "partidos": partidos,
249
+ "patrimonio_declarado": patrimonio,
250
+ "ufs": tse_data.get("ufs", []),
251
+ "candidaturas": candidaturas
252
+ }
253
+ )
254
+
255
+ # Red flags for politicians
256
+ if patrimonio > 10000000: # > 10 milhões
257
+ dossier.red_flags.append(f"💰 Patrimônio declarado alto: R$ {patrimonio:,.2f}")
258
+
259
+ # Check for multiple parties (can indicate opportunism)
260
+ if len(partidos) >= 3:
261
+ dossier.red_flags.append(f"🔄 Passou por {len(partidos)} partidos: {', '.join(partidos)}")
262
+ dossier.dados_politicos.status = "warning"
263
+ except Exception as e:
264
+ print(f"TSE search error: {e}")
265
+
266
+ # 3. Web search for information
267
  try:
268
  web_result = await lancer.search(f'"{nome}" biografia cargo empresa', max_results=10)
269
 
 
333
  "secoes": {}
334
  }
335
 
336
+ for field_name in ["dados_cadastrais", "socios", "sancoes", "dados_politicos", "noticias", "entidades_relacionadas"]:
337
  section = getattr(dossier, field_name)
338
  if section:
339
  result["secoes"][field_name] = {