""" 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