PARA.AI / processors /processor_fundamentacao.py
Carlex22's picture
ParaAIV3.0
f0322a6
raw
history blame
3.18 kB
"""
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"
]