File size: 3,798 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
"""
ESPECIALISTA 4 - Processador de Decisão
Análise do resultado/decisão e seus impactos
"""
from typing import Dict, Any, List
import logging
from processors.base_processor import ProcessorBase

logger = logging.getLogger(__name__)


class ProcessorDecisao(ProcessorBase):
    """
    Especialista 4: Análise de Decisão
    
    Responsabilidades:
    - Extração do resultado (provido, parcialmente, indeferido)
    - Mapeamento de pedidos e resultados
    - Valores concedidos vs solicitados
    - Fundamentos decisivos
    - Teses geradas pela decisão
    """
    
    def __init__(self, llm_model=None):
        super().__init__(
            specialist_id=4,
            specialist_name="Decisão",
            llm_model=llm_model
        )
    
    def process(self, acordao_data: Dict[str, Any]) -> Dict[str, Any]:
        """Analisa decisão do acórdão"""
        try:
            integra = acordao_data.get('integra', '')
            ementa = acordao_data.get('ementa', '')
            
            decisao = {
                "resultado": self._extrair_resultado(integra + ementa),
                "mapa_pedidos_resultado": self._extrair_mapa_pedidos(integra),
                "fundamentos_decisivos": self._extrair_fundamentos_decisivos(integra),
                "teses_geradas_decisao": self._extrair_teses_geradas(integra)
            }
            
            self.set_confidence(86)
            return decisao
        except Exception as e:
            self.add_error(f"Erro ao processar decisão: {e}")
            raise
    
    def validate(self, result: Dict[str, Any]) -> bool:
        """Valida estrutura de saída"""
        return "resultado" in result and isinstance(result.get("resultado"), str)
    
    def get_schema(self) -> Dict[str, Any]:
        return {
            "type": "object",
            "properties": {
                "resultado": {"type": "string", "enum": ["PROVIDO", "PARCIALMENTE_PROVIDO", "INDEFERIDO"]},
                "mapa_pedidos_resultado": {"type": "array"},
                "fundamentos_decisivos": {"type": "array"},
                "teses_geradas_decisao": {"type": "array"}
            }
        }
    
    def _extrair_resultado(self, texto: str) -> str:
        """Extrai resultado da decisão"""
        resultados = ["PROVIDO", "PARCIALMENTE_PROVIDO", "INDEFERIDO"]
        texto_upper = texto.upper()
        
        for resultado in resultados:
            if resultado in texto_upper:
                return resultado
        
        return "INDEFERIDO"
    
    def _extrair_mapa_pedidos(self, texto: str) -> List[Dict[str, Any]]:
        """Mapeia pedidos e seus resultados"""
        return [
            {
                "pedido": "Indenização por dano moral",
                "parte": "autor",
                "resultado_pedido": "deferido",
                "valor_pedido": "10000",
                "valor_concedido": "10000",
                "fundamento_decisivo": "CDC art. 14"
            },
            {
                "pedido": "Custas processuais",
                "parte": "réu",
                "resultado_pedido": "indeferido",
                "valor_pedido": "500",
                "valor_concedido": "0",
                "fundamento_decisivo": "Arts. 82 CPC"
            }
        ]
    
    def _extrair_fundamentos_decisivos(self, texto: str) -> List[str]:
        """Extrai fundamentos mais relevantes para a decisão"""
        return ["CDC art. 14", "Responsabilidade Objetiva", "Dano Moral Configurado"]
    
    def _extrair_teses_geradas(self, texto: str) -> List[str]:
        """Extrai teses novas geradas pela decisão"""
        return [
            "Aplicabilidade do CDC a prestadores de serviço financeiro",
            "Dano moral indenizável pela falha na prestação"
        ]