File size: 2,874 Bytes
b52eac0
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
66
67
68
69
70
71
72
73
74
import os
import json
import google.generativeai as genai
from typing import Dict
import logging
from .base_analyzer import BaseAnalyzer

logger = logging.getLogger(__name__)

class GeminiAnalyzer(BaseAnalyzer):
    def __init__(self):
        self.api_key = os.getenv("GOOGLE_API_KEY")
        if not self.api_key:
            logger.error("GOOGLE_API_KEY não encontrada nas variáveis de ambiente")
            raise ValueError("GOOGLE_API_KEY não configurada")
        
        genai.configure(api_key=self.api_key)
        logger.info("API Gemini configurada com sucesso")

    def _extract_json_from_response(self, response_text: str) -> str:
        json_content = response_text.strip()
        if json_content.startswith('```'):
            json_content = json_content.split('\n', 1)[1]
        if json_content.endswith('```'):
            json_content = json_content.rsplit('\n', 1)[0]
        return json_content.strip()

    def analyze(self, text: str) -> Dict:
        logger.info("Iniciando extração de representantes legais com Gemini")
        try:
            model = genai.GenerativeModel('gemini-pro')
            prompt = """
            Analise o seguinte contrato social e extraia:
            1. Todos os sócios e seus percentuais de participação
            2. Todos os administradores mencionados
            
            Formate a resposta como um dicionário JSON com as seguintes chaves:
            - "socios": lista de dicionários com "nome" e "participacao"
            - "administradores": lista de nomes
            
            Contrato Social:
            {contract_text}
            """
            
            response = model.generate_content(prompt.format(contract_text=text))
            json_content = self._extract_json_from_response(response.text)
            result = json.loads(json_content)
            
            return result
        except Exception as e:
            logger.error(f"Erro na análise Gemini: {str(e)}")
            return {
                "socios": [],
                "administradores": [],
                "erro": str(e)
            }

    def format_output(self, analysis_result: Dict) -> str:
        output = "ANÁLISE DO CONTRATO SOCIAL (Gemini)\n\n"
        
        output += "SÓCIOS:\n"
        for socio in analysis_result.get("socios", []):
            participacao = socio.get('participacao', 'Não especificada')
            participacao_str = f"{participacao}%" if participacao is not None else "Participação não especificada"
            output += f"- {socio['nome']}: {participacao_str}\n"
        
        output += "\nADMINISTRADORES:\n"
        for admin in analysis_result.get("administradores", []):
            output += f"- {admin}\n"
        
        if "erro" in analysis_result:
            output += f"\nERRO: {analysis_result['erro']}"
        
        return output