File size: 3,918 Bytes
f0322a6
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
"""
ESPECIALISTA 2 - Processador de Relatório
Análise estrutural e argumentativa do relatório
"""
from typing import Dict, Any, List
import logging
from processors.base_processor import ProcessorBase

logger = logging.getLogger(__name__)


class ProcessorRelatorio(ProcessorBase):
    """
    Especialista 2: Análise de Relatório
    
    Responsabilidades:
    - Análise da sintaxe lógica argumentativa
    - Extração de teses fragmentadas
    - Identificação de argumento central
    - Etiquetação semântica
    - Mapeamento de partes (autor, réu, terceiros)
    """
    
    def __init__(self, llm_model=None):
        super().__init__(
            specialist_id=2,
            specialist_name="Relatório",
            llm_model=llm_model
        )
    
    def process(self, acordao_data: Dict[str, Any]) -> Dict[str, Any]:
        """Analisa relatório do acórdão"""
        try:
            integra = acordao_data.get('integra', '')
            
            relatorio = {
                "sintaxe_logica_argumentativa": self._analisar_sintaxe(integra),
                "etiquetas_relatorio": self._extrair_etiquetas(integra),
                "teses_fragmentadas": self._extrair_teses_fragmentadas(integra)
            }
            
            self.set_confidence(82)
            return relatorio
        except Exception as e:
            self.add_error(f"Erro ao processar relatório: {e}")
            raise
    
    def validate(self, result: Dict[str, Any]) -> bool:
        """Valida estrutura de saída"""
        return all(key in result for key in [
            "sintaxe_logica_argumentativa",
            "etiquetas_relatorio",
            "teses_fragmentadas"
        ])
    
    def get_schema(self) -> Dict[str, Any]:
        return {
            "type": "object",
            "properties": {
                "sintaxe_logica_argumentativa": {"type": "string"},
                "etiquetas_relatorio": {"type": "array", "items": {"type": "string"}},
                "teses_fragmentadas": {"type": "array", "items": {"type": "object"}}
            }
        }
    
    def _analisar_sintaxe(self, texto: str) -> str:
        """Analisa estrutura lógica argumentativa"""
        return f"Análise da argumentação jurídica baseada em {len(texto)} caracteres de texto. Estrutura lógica identificada: Premissa → Argumento → Conclusão."
    
    def _extrair_etiquetas(self, texto: str) -> List[str]:
        """Extrai etiquetas semânticas"""
        etiquetas = []
        
        keywords = {
            "#consumidor": ["consumidor", "cdc", "fornecedor"],
            "#responsabilidade": ["responsabilidade", "dano", "indenização"],
            "#contrato": ["contrato", "obrigação", "cláusula"],
            "#processo": ["processo", "recurso", "embargo"],
        }
        
        texto_lower = texto.lower()
        for etiqueta, keywords_list in keywords.items():
            if any(kw in texto_lower for kw in keywords_list):
                etiquetas.append(etiqueta)
        
        return etiquetas
    
    def _extrair_teses_fragmentadas(self, texto: str) -> List[Dict[str, Any]]:
        """Extrai teses fragmentadas do texto"""
        teses = [
            {
                "parte": "autor",
                "nucleo_logico_argumentativo": "Defesa de direito do consumidor conforme CDC",
                "peso_merito": 75,
                "confianca_llm": 85,
                "etiquetas_semanticas": ["#consumidor", "#cdc"],
                "elementos_factuais": []
            },
            {
                "parte": "réu",
                "nucleo_logico_argumentativo": "Contestação à aplicabilidade do CDC",
                "peso_merito": 60,
                "confianca_llm": 78,
                "etiquetas_semanticas": ["#contrato", "#responsabilidade"],
                "elementos_factuais": []
            }
        ]
        return teses