PARA.AI / processors /processor_decisao.py
Carlex22's picture
ParaAIV3.0
f0322a6
raw
history blame
3.8 kB
"""
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"
]