""" ESPECIALISTA 8 - Processador de Análise Contextual Análise semântica, contextual e de relacionamentos """ from typing import Dict, Any, List import logging from processors.base_processor import ProcessorBase logger = logging.getLogger(__name__) class ProcessorAnaliseContextual(ProcessorBase): """ Especialista 8: Análise Contextual (NOVO) Responsabilidades: - Análise semântica profunda - Extração de contexto jurídico - Análise de relacionamentos entre conceitos - Detecção de pressupostos e implicações - Mapeamento de influências jurisprudenciais """ def __init__(self, llm_model=None): super().__init__( specialist_id=8, specialist_name="Análise Contextual", llm_model=llm_model ) def process(self, acordao_data: Dict[str, Any]) -> Dict[str, Any]: """Realiza análise contextual""" try: integra = acordao_data.get('integra', '') ementa = acordao_data.get('ementa', '') contextual = { "contexto_juridico": self._analisar_contexto_juridico(ementa), "conceitos_principais": self._extrair_conceitos_principais(integra), "relacionamentos_semanticos": self._mapear_relacionamentos(integra), "pressupostos_implicitos": self._extrair_pressupostos(integra), "influencias_jurisprudenciais": self._mapear_influencias(integra) } self.set_confidence(80) return contextual except Exception as e: self.add_error(f"Erro ao processar análise contextual: {e}") raise def validate(self, result: Dict[str, Any]) -> bool: """Valida estrutura de saída""" return all(key in result for key in [ "contexto_juridico", "conceitos_principais", "relacionamentos_semanticos" ]) def get_schema(self) -> Dict[str, Any]: return { "type": "object", "properties": { "contexto_juridico": {"type": "object"}, "conceitos_principais": {"type": "array"}, "relacionamentos_semanticos": {"type": "array"}, "pressupostos_implicitos": {"type": "array"}, "influencias_jurisprudenciais": {"type": "array"} } } def _analisar_contexto_juridico(self, texto: str) -> Dict[str, Any]: """Analisa contexto jurídico geral""" return { "area_principal": "Direito do Consumidor", "area_secundaria": "Responsabilidade Civil", "contexto_temporal": "2025", "nivel_tribunal": "Estadual", "influencia_jurisprudencial": "STJ e TJPR" } def _extrair_conceitos_principais(self, texto: str) -> List[Dict[str, str]]: """Extrai conceitos jurídicos principais""" return [ { "conceito": "Responsabilidade Objetiva", "definicao": "Responsabilidade sem necessidade de comprovação de culpa", "relevancia": "alta", "frequencia": 5 }, { "conceito": "Dano Moral", "definicao": "Prejuízo não material causado ao consumidor", "relevancia": "alta", "frequencia": 8 }, { "conceito": "Fornecedor", "definicao": "Pessoa jurídica ou física que fornece produto/serviço", "relevancia": "média", "frequencia": 12 } ] def _mapear_relacionamentos(self, texto: str) -> List[Dict[str, str]]: """Mapeia relacionamentos semânticos entre conceitos""" return [ { "origem": "CDC", "destino": "Responsabilidade Objetiva", "tipo": "fundamenta", "forca": 0.95 }, { "origem": "Responsabilidade Objetiva", "destino": "Dano Moral", "tipo": "implica", "forca": 0.85 }, { "origem": "Fornecedor", "destino": "CDC", "tipo": "regido_por", "forca": 0.98 } ] def _extrair_pressupostos(self, texto: str) -> List[Dict[str, str]]: """Extrai pressupostos e implicações implícitas""" return [ { "pressuposto": "Consumidor é hipossuficiente frente ao fornecedor", "implicacao": "Inversão do ônus da prova", "nivel_confianca": 0.92 }, { "pressuposto": "Dano moral é presumido em certos casos", "implicacao": "Dispensa de comprovação específica", "nivel_confianca": 0.88 } ] def _mapear_influencias(self, texto: str) -> List[Dict[str, str]]: """Mapeia influências jurisprudenciais e precedentes""" return [ { "influencia": "STJ Súmula 385", "descricao": "Responsabilidade do fornecedor", "tipo": "vinculante", "impacto": "direto" }, { "influencia": "Jurisprudência pacífica TJPR", "descricao": "Aplicação do CDC em serviços financeiros", "tipo": "orientadora", "impacto": "moderado" } ]