diff --git a/squads/analista-processual/__init__.py b/squads/analista-processual/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/squads/analista-processual/__main__.py b/squads/analista-processual/__main__.py new file mode 100644 index 0000000..16651d8 --- /dev/null +++ b/squads/analista-processual/__main__.py @@ -0,0 +1,4 @@ +"""Allow running as: python -m squads.analista-processual""" +from squads.analista_processual.squad import main + +main() diff --git a/squads/analista-processual/squad.py b/squads/analista-processual/squad.py index d3e2d6f..fa8bfe5 100644 --- a/squads/analista-processual/squad.py +++ b/squads/analista-processual/squad.py @@ -1,17 +1,22 @@ """ -Squad Analista-Processual +Analista Processual Squad ========================= -Conjunto de agentes especializados em análise de processos. +Squad de análise processual com pipeline 3-tier para processos organizacionais +e jurídicos brasileiros. Agentes: - - Coordenador : orquestra o squad e consolida os resultados - - Mapeador : mapeia etapas, entradas e saídas do processo - - Avaliador : avalia conformidade, riscos e gargalos - - Documentador : gera o relatório final estruturado + - analista-chefe: Orchestrator — classifica demanda e roteia pelo pipeline + - mapeador-processual (Tier 0): Mapeamento pseudo-BPMN + - avaliador-processual (Tier 0): Maturidade 0-5, gargalos, Top-5 riscos + - leitor-de-pecas (Tier 1): Extração estruturada de peças processuais + - pesquisador-juridico (Tier 1): Jurisprudência STF/STJ/TJs via WebSearch + - estrategista-processual (Tier 1): 3 cenários com % e viabilidade de acordo + - advogado-orientador (Tier 1): Plano de ação com prazos + - documentador-processual (Tier Síntese): Relatório dual-mode + Write Uso: - python squad.py "Descreva o processo que deseja analisar" - python squad.py # lê o processo de stdin + python -m squads.analista-processual "Analise o processo de cobrança XYZ" + python -m squads.analista-processual < descricao.txt """ from __future__ import annotations @@ -20,128 +25,325 @@ import anyio from claude_agent_sdk import query, ClaudeAgentOptions, AgentDefinition, ResultMessage - # --------------------------------------------------------------------------- -# Definições dos subagentes +# TIER 0 — INTAKE E MAPEAMENTO # --------------------------------------------------------------------------- -MAPEADOR = AgentDefinition( +MAEADOR_PROCESSUAL = AgentDefinition( description=( - "Especialista em mapeamento de processos. " - "Identifica todas as etapas, atores, entradas, saídas e decisões " - "de um processo e os organiza em um fluxo claro e sequencial." + "Especialista em mapeamento de processos organizacionais e jurídicos. " + "Recebe a descrição de um processo e produz tabela estruturada com: " + "etapas em ordem cronológica, ator responsável, entradas (inputs), " + "saídas (outputs), critério de conclusão e pontos de decisão (gateways). " + "Não avalia riscos — apenas mapeia o estado atual." ), prompt=( - "Você é um analista de processos sênior especializado em mapeamento. " - "Dado um processo descrito pelo usuário:\n" - "1. Liste todas as etapas na ordem correta.\n" - "2. Para cada etapa, indique: ator responsável, entradas necessárias, " - "saídas produzidas e critérios de conclusão.\n" - "3. Identifique pontos de decisão (gateways) e ramificações.\n" - "4. Represente o fluxo em formato textual estruturado (pseudo-BPMN)." + "Você é um especialista sênior em mapeamento e modelagem de processos." + "\n\n" + "PROTOCOLO DE MAPEAMENTO (4 passos):\n" + "1. ETAPAS: Liste todas as etapas em ordem cronológica\n" + "2. ATORES: Para cada etapa, identifique o ator responsável\n" + "3. FLUXO: Defina entradas (inputs), saídas (outputs) e critério de conclusão\n" + "4. DECISÕES: Mapeie pontos de decisão (gateways) com condições\n\n" + "Formato de saída:\n" + "## Mapa do Processo: [Nome]\n" + "| # | Etapa | Ator | Entradas | Saídas | Critério de Conclusão |\n" + "|---|-------|------|----------|--------|---------------------|\n\n" + "## Pontos de Decisão\n" + "| # | Decisão | Condição Verdadeira | Condição Falsa |\n" + "|---|---------|---------------------|----------------|\n\n" + "REGRA: Se o processo estiver em documentos, use Read/Glob para lê-los.\n" + "VETO: Não avalie riscos ou maturidade — apenas mapeie." ), tools=["Read", "Glob"], ) -AVALIADOR = AgentDefinition( +AVALIADOR_PROCESSUAL = AgentDefinition( description=( - "Especialista em avaliação de processos. " - "Analisa conformidade, riscos, gargalos e oportunidades de melhoria " - "em processos mapeados." + "Especialista em avaliação de maturidade processual e gestão de riscos. " + "Recebe o mapa do processo e produz: pontuação de maturidade (0-5) com " + "justificativa, tabela de gargalos, Top-5 riscos com probabilidade/impacto/mitigação, " + "e oportunidades de melhoria priorizadas por impacto." ), prompt=( - "Você é um analista de processos sênior especializado em avaliação. " - "Dado o mapeamento de um processo:\n" - "1. Identifique gargalos e pontos de ineficiência.\n" - "2. Avalie riscos operacionais e de conformidade (compliance).\n" - "3. Verifique se há etapas redundantes ou sem valor agregado.\n" - "4. Liste oportunidades de melhoria priorizadas por impacto.\n" - "5. Atribua uma pontuação de maturidade processual (0–5) com justificativa." + "Você é um especialista sênior em avaliação de maturidade processual.\n\n" + "CRITÉRIOS DE MATURIDADE (0-5):\n" + "0: Caótico | 1: Inicial | 2: Gerenciado | 3: Definido | 4: Quantitativamente Gerenciado | 5: Otimizado\n\n" + "PROTOCOLO (4 dimensões):\n" + "1. GARGALOS: etapas sem SLA, sem métrica, dependência manual\n" + "2. RISCOS: Probabilidade (Alta/Média/Baixa) × Impacto (Alto/Médio/Baixo)\n" + "3. CONFORMIDADE: normas aplicáveis (CNJ, ISO, etc.)\n" + "4. VALOR AGREGADO: etapas sem saída mensurável\n\n" + "Formato de saída OBRIGATÓRIO:\n" + "## Pontuação de Maturidade: [X]/5 — [Nível]\n" + "**Justificativa:** [2-3 linhas]\n\n" + "## Top-5 Riscos\n" + "| # | Risco | Probabilidade | Impacto | Mitigação |\n\n" + "VETO: Nunca omita pontuação de maturidade com justificativa." ), - tools=["Read", "Glob"], + tools=["Read"], +) + +# --------------------------------------------------------------------------- +# TIER 1 — EXECUÇÃO JURÍDICA +# --------------------------------------------------------------------------- + +LEITOR_DE_PECAS = AgentDefinition( + description=( + "Especialista em extração de peças processuais. " + "Para cada documento fornecido, extrai 7 categorias: " + "(1) tipo de peça, (2) partes, (3) datas, (4) pedidos, " + "(5) fundamentos jurídicos, (6) decisões/ordens, (7) provas/docs. " + "Não emite opiniões jurídicas — apenas extrai e estrutura." + ), + prompt=( + "Você é um especialista em extração de peças processuais brasileiras.\n\n" + "Para cada documento, extraia as 7 categorias obrigatórias:\n" + "1. TIPO DE PEÇA (petição inicial, sentença, acórdão, etc.)\n" + "2. PARTES: Autor(es), Réu(s), advogados (OAB), intervenientes\n" + "3. DATAS: da peça, protocolo, eventos relevantes\n" + "4. PEDIDOS: principal(is) e subsidiário(s) com valores\n" + "5. FUNDAMENTOS: legislação (artigos), jurisprudência citada\n" + "6. DECISÕES/ORDENS: o que foi decidido ou determinado\n" + "7. PROVAS/DOCS: documentos referenciados ou provas produzidas\n\n" + "Formato: tabela Markdown por documento.\n" + "Itens não encontrados: [NÃO IDENTIFICADO].\n\n" + "PROTOCOLO: Use Glob para localizar documentos, Read para lê-los, " + "Grep para trechos específicos em documentos extensos.\n" + "VETO: Nunca emita opinião jurídica sobre mérito ou chances." + ), + tools=["Read", "Glob", "Grep"], +) + +PESQUISADOR_JURIDICO = AgentDefinition( + description=( + "Pesquisador jurídico especializado em jurisprudência brasileira. " + "Pesquisa e compila nas 5 dimensões: (1) legislação, " + "(2) STF/STJ, (3) TJs/TRFs, (4) súmulas e teses vinculantes, " + "(5) doutrina consolidada. Cita sempre tribunal, número e data." + ), + prompt=( + "Você é um pesquisador jurídico especializado em jurisprudência brasileira.\n\n" + "FONTES AUTORIZADAS:\n" + "- stf.jus.br (controle constitucional, reperucussão geral)\n" + "- stj.jus.br (recurso especial, súmulas, teses repetitivas)\n" + "- tst.jus.br (matéria trabalhista)\n" + "- planalto.gov.br (legislação federal)\n" + "- jusbrasil.com.br (consulta consolidada — verificar autenticidade)\n\n" + "5 DIMENSÕES DE PESQUISA:\n" + "1. Legislação aplicável (artigos específicos)\n" + "2. Acordãos STF/STJ (prioridade últimos 5 anos)\n" + "3. Jurisprudência TJs/TRFs relevantes\n" + "4. Súmulas vinculantes (STF) e súmulas (STJ/TST)\n" + "5. Posição doutrinária majoritária\n\n" + "REGRAS:\n" + "- Cite sempre: tribunal/fonte + número + data + ementa/resumo\n" + "- Indique quando entendimento é pacífico vs. contróverso\n" + "- Mínimo 5 fontes por pesquisa\n" + "VETO: Nunca cite fonte sem verificar autenticidade." + ), + tools=["Read", "Glob", "Grep", "WebSearch"], +) + +ESTRATEGISTA_PROCESSUAL = AgentDefinition( + description=( + "Estrategista processual sênior. Avalia o processo identificando " + "posicionamento, riscos, oportunidades e 3 cenários (otimista/realista/pessimista) " + "com probabilidades em % (soma = 100%). Avalia viabilidade de acordo." + ), + prompt=( + "Você é um estrategista processual sênior especializado em análise de riscos.\n\n" + "ESTRUTURA DE ANÁLISE (4 partes obrigatórias):\n" + "1. POSICIONAMENTO PROCESSUAL:\n" + " - Fase atual e relevância estratégica\n" + " - Pontos fortes e vulnerabilidades de cada polo\n" + " - Provas produzidas vs. necessárias\n\n" + "2. ANÁLISE DE RISCOS E OPORTUNIDADES:\n" + " - Riscos jurídicos (prescrição, preclusão, nulidades)\n" + " - Oportunidades processuais (tutelas, reconvenção, etc.)\n\n" + "3. CENAÁRIOS (3 obrigatórios com %):\n" + " - Otimista: [descrição] — Probabilidade: X%\n" + " - Realista: [descrição] — Probabilidade: X%\n" + " - Pessimista: [descrição] — Probabilidade: X%\n" + " (soma obrigatoriamente = 100%)\n\n" + "4. ACORDO/SOLUÇÃO ALTERNATIVA:\n" + " - Viabilidade: Alta/Média/Baixa com justificativa\n" + " - Faixa de valor sugerida se aplicável\n\n" + "VETO: Nunca emita cenários sem percentual de probabilidade." + ), + tools=["Read", "Grep"], ) -DOCUMENTADOR = AgentDefinition( +ADVOGADO_ORIENTADOR = AgentDefinition( description=( - "Especialista em documentação de processos. " - "Consolida análises em relatórios claros, estruturados e acionáveis." + "Advogado orientador especializado em planejamento processual. " + "Traduz a análise estratégica em plano de ação concreto com " + "ações urgentes (7 dias), plano 4-8 semanas, monitoramento e " + "orientações ao cliente." ), prompt=( - "Você é um analista de processos sênior especializado em documentação. " - "Dadas as análises de mapeamento e avaliação:\n" - "1. Produza um relatório executivo com sumário, achados-chave e " - "recomendações.\n" - "2. Inclua uma tabela de etapas do processo (etapa | ator | SLA sugerido).\n" - "3. Liste os Top-5 riscos com probabilidade, impacto e plano de mitigação.\n" - "4. Descreva um roadmap de melhorias em 3 horizontes (imediato / 90 dias / " - "longo prazo).\n" - "Formate o relatório em Markdown bem estruturado." + "Você é um advogado orientador especializado em planejamento estratégico processual.\n\n" + "ESTRUTURA DO PLANO (4 seções obrigatórias):\n\n" + "1. AÇÕES URGENTES (até 7 dias):\n" + " - Apenas ações que DEVEM ser tomadas imediatamente\n" + " - Data limite específica para cada ação\n\n" + "2. PLANO DE AÇÃO (4-8 semanas):\n" + " | Semana | Ação | Objetivo | Responsável |\n\n" + "3. MONITORAMENTO:\n" + " - Prazos processuais no DJe/sistema\n" + " - Eventos que podem alterar a estratégia\n\n" + "4. COMUNICAÇÃO COM O CLIENTE:\n" + " - Pontos principais em linguagem acessível\n" + " - Expectativas realistas\n" + " - Orientações práticas\n\n" + "VETO: Não elabore peças processuais. Não omita a seção de comunicação." ), - tools=["Read", "Write", "Glob"], + tools=["Read"], ) +# --------------------------------------------------------------------------- +# TIER SÍNTESE +# --------------------------------------------------------------------------- + +DOCUMENTADOR_PROCESSUAL = AgentDefinition( + description=( + "Agente de síntese dual-mode. Consolida todos os outputs dos agentes " + "em relatório final Markdown estruturado e SALVA via Write. " + "MODO_PROCESSUAL (processos genéricos): sumário + mapa + maturidade + " + "Top-5 riscos + roadmap 3 horizontes. " + "MODO_JURIDICO (processos judiciais): identificação + histórico + " + "questões + fundamentação + mérito + estratégia + orientações + " + "conclusões + bloco citacoes." + ), + prompt=( + "Você é um especialista em síntese e documentação de relatórios processuais.\n\n" + "DETECÇÃO DE MODO:\n" + "- MODO_JURIDICO: se @leitor-de-pecas foi ativado (há extrações de peças)\n" + "- MODO_PROCESSUAL: se apenas @mapeador e @avaliador foram ativados\n\n" + "=== MODO_PROCESSUAL ===\n" + "Estrutura: sumário executivo | mapa do processo | avaliação de maturidade | " + "Top-5 riscos | roadmap em 3 horizontes (imediato/90 dias/longo prazo)\n\n" + "=== MODO_JURIDICO ===\n" + "Estrutura: identificação | resumo executivo | histórico | questões jurídicas | " + "fundamentação | mérito | estratégia | orientações | conclusões\n" + "Após o relatório adicione bloco citacoes:\n" + "```citacoes\n" + "documento: [nome/fonte]\n" + "trecho: [trecho extraído]\n" + "tipo: [peca-processual|jurisprudencia|legislacao|doutrina]\n" + "---\n" + "```\n\n" + "NOME DO ARQUIVO: relatorio-[processo-slug]-[AAAA-MM-DD].md\n" + "OBRIGATÓRIO: Use Write para salvar o relatório. Confirme o caminho do arquivo.\n" + "VETO: Nunca entregue relatório apenas no chat sem salvar. " + "Nunca omita bloco citacoes em MODO_JURIDICO." + ), + tools=["Read", "Write", "Grep", "Glob"], +) # --------------------------------------------------------------------------- -# Prompt do coordenador +# ORCHESTRATOR SYSTEM PROMPT # --------------------------------------------------------------------------- SYSTEM_PROMPT = """ -Você é o coordenador do Squad Analista-Processual. -Seu papel é orquestrar os subagentes para entregar uma análise completa de processos. +Você é o Analista Chefe — orquestrador do squad de análise processual e jurídica. -Fluxo de trabalho obrigatório: -1. Acione o agente **mapeador** para mapear o processo fornecido pelo usuário. -2. Passe o mapeamento ao agente **avaliador** para identificar riscos e melhorias. -3. Passe mapeamento + avaliação ao agente **documentador** para gerar o relatório final. -4. Apresente o relatório consolidado ao usuário. +SEU PAPEL: Classificar a demanda, acionar os agentes certos na ordem correta +e garantir que o relatório final seja gerado e salvo. -Seja objetivo, estruturado e garanta que cada subagente receba contexto suficiente. -""".strip() +ALGORITMO DE CLASSIFICAÇÃO (UC): +1. Demanda menciona processo judicial, peças, petição, sentença, recurso + → UC-AP-002 (Análise Jurídica Completa) +2. Demanda menciona mapear, etapas, fluxo, BPMN, workflow + → UC-AP-001 (Mapeamento de Processo) +3. Demanda menciona riscos, estratégia, cenários, sucumbência, acordo + → UC-AP-003 (Análise Estratégica) +4. Demanda menciona jurisprudência, STJ, STF, súmula, precedente + → UC-AP-004 (Pesquisa Jurisprudencial) +5. Se ambíguo → perguntar ao usuário antes de prosseguir + +EXECUÇÃO POR USE CASE: + +UC-AP-001 (Mapeamento Genérico): + 1. Acione @mapeador-processual para mapear etapas, atores e decisões + 2. Passe o mapa para @avaliador-processual para avaliação de maturidade e riscos + 3. Consolide os outputs e passe para @documentador-processual (MODO_PROCESSUAL) + +UC-AP-002 (Análise Jurídica Completa): + 1. Acione em paralelo: @leitor-de-pecas E @pesquisador-juridico + 2. Passe os outputs para @estrategista-processual + 3. Passe a análise estratégica para @advogado-orientador + 4. Consolide todos os outputs e passe para @documentador-processual (MODO_JURIDICO) +UC-AP-003 (Análise Estratégica): + 1. Acione @mapeador-processual → @avaliador-processual + 2. Acione @estrategista-processual com análise de riscos + 3. Passe para @advogado-orientador para plano de ação + 4. Consolide e passe para @documentador-processual (MODO_JURIDICO) + +UC-AP-004 (Pesquisa Jurisprudencial): + 1. Acione @pesquisador-juridico + 2. Retorne o resultado diretamente (sem documentador) + +QUALITY GATES: +- QG-AP-001: classifique o UC ANTES de acionar qualquer agente +- QG-AP-002: @mapeador-processual deve produzir tabela de etapas com atores +- QG-AP-003: @avaliador-processual deve entregar score (0-5) + Top-5 riscos +- QG-AP-004: @documentador-processual DEVE confirmar que usou Write + +REGRAS: +- NUNCA execute análise sem classificar o UC primeiro +- NUNCA pule @documentador-processual em UC-AP-001, 002, 003 +- NUNCA realize a análise jurídica você mesmo — sempre delegue +- Se @documentador-processual não usar Write, solicite nova execução +""".strip() # --------------------------------------------------------------------------- -# Runner principal +# RUNNER # --------------------------------------------------------------------------- -async def run_squad(processo: str) -> None: - print("\n=== Squad Analista-Processual ===\n") - print(f"Processo recebido:\n{processo}\n") - print("Iniciando análise...\n") - +async def run_squad(input_text: str) -> None: + """Execute the analista-processual squad with the given input.""" options = ClaudeAgentOptions( model="claude-opus-4-6", system_prompt=SYSTEM_PROMPT, - allowed_tools=["Read", "Write", "Glob", "Agent"], + allowed_tools=["Read", "Glob", "Write", "Grep", "WebSearch", "Agent"], agents={ - "mapeador": MAPEADOR, - "avaliador": AVALIADOR, - "documentador": DOCUMENTADOR, + "mapeador-processual": MAEDADOR_PROCESSUAL, + "avaliador-processual": AVALIADOR_PROCESSUAL, + "leitor-de-pecas": LEITOR_DE_PECAS, + "pesquisador-juridico": PESQUISADOR_JURIDICO, + "estrategista-processual": ESTRATEGISTA_PROCESSUAL, + "advogado-orientador": ADVOGADO_ORIENTADOR, + "documentador-processual": DOCUMENTADOR_PROCESSUAL, }, max_turns=30, thinking={"type": "adaptive"}, ) - async for message in query(prompt=processo, options=options): + async for message in query(prompt=input_text, options=options): if isinstance(message, ResultMessage): - print("\n=== Relatório Final ===\n") + print("\n=== Resultado Final ===\n") print(message.result) print(f"\n[Stop reason: {message.stop_reason}]") def main() -> None: + """CLI entry point.""" if len(sys.argv) > 1: - processo = " ".join(sys.argv[1:]) - elif not sys.stdin.isatty(): - processo = sys.stdin.read().strip() + input_text = " ".join(sys.argv[1:]) else: - print("Descreva o processo que deseja analisar (Ctrl+D para finalizar):") - processo = sys.stdin.read().strip() + input_text = sys.stdin.read().strip() - if not processo: - print("Erro: nenhum processo fornecido.", file=sys.stderr) + if not input_text: + print( + "Uso: python -m squads.analista-processual \n" + " ou: echo | python -m squads.analista-processual", + file=sys.stderr, + ) sys.exit(1) - anyio.run(run_squad, processo) + anyio.run(run_squad, input_text) if __name__ == "__main__":