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