Spaces:
Runtime error
Runtime error
| """ | |
| 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" | |
| ] | |