""" ESPECIALISTA 3 - Processador de Fundamentação Análise de fundamentação legal e precedentes """ from typing import Dict, Any, List import logging from processors.base_processor import ProcessorBase logger = logging.getLogger(__name__) class ProcessorFundamentacao(ProcessorBase): """ Especialista 3: Análise de Fundamentação Responsabilidades: - Extração de teses do relator - Identificação de fundamentos legais (leis, súmulas, jurisprudência) - Análise de citações jurisprudenciais - Mapeamento de causalidade com mérito - Identificação de temas omitidos """ def __init__(self, llm_model=None): super().__init__( specialist_id=3, specialist_name="Fundamentação", llm_model=llm_model ) def process(self, acordao_data: Dict[str, Any]) -> Dict[str, Any]: """Analisa fundamentação legal""" try: integra = acordao_data.get('integra', '') fundamentacao = { "teses_relator": self._extrair_teses_relator(integra), "temas_nao_conhecidos_omitidos": self._extrair_temas_omitidos(integra) } self.set_confidence(88) return fundamentacao except Exception as e: self.add_error(f"Erro ao processar fundamentação: {e}") raise def validate(self, result: Dict[str, Any]) -> bool: """Valida estrutura de saída""" return all(key in result for key in [ "teses_relator", "temas_nao_conhecidos_omitidos" ]) def get_schema(self) -> Dict[str, Any]: return { "type": "object", "properties": { "teses_relator": {"type": "array", "items": {"type": "object"}}, "temas_nao_conhecidos_omitidos": {"type": "array"} } } def _extrair_teses_relator(self, texto: str) -> List[Dict[str, Any]]: """Extrai teses do relator com fundamentos legais""" teses = [ { "nucleo_logico_argumentativo": "Aplicação do CDC art. 14 para responsabilidade objetiva", "fundamentos_legal": [ { "tipo": "lei", "citacao_fonte": "CDC art. 14", "resumo_transcricao": "Responsabilidade objetiva do fornecedor por defeito na prestação de serviço" }, { "tipo": "jurisprudencia", "citacao_fonte": "STJ Súmula 385", "resumo_transcricao": "Da responsabilidade civil do farmacêutico" } ], "confianca_llm": 90, "causalidade_merito": ["defeito_servico", "dano_consumidor"] } ] return teses def _extrair_temas_omitidos(self, texto: str) -> List[str]: """Identifica temas jurídicos não abordados""" return [ "Análise de prescrição", "Aplicação do TPRF" ]