Skill: inicial-nao-contratado
Geração automatizada de petições iniciais em ações declaratórias de inexistência de relação jurídica c/c repetição do indébito em dobro e danos morais, por empréstimo consignado não contratado (descontos no benefício previdenciário sem autorização do segurado). Escritório De Azevedo Lima & Rebonatto.
INSTRUÇÕES OPERACIONAIS (uso da skill)
Quando o usuário invocar /inicial-nao-contratado ou pedir para gerar uma inicial:
1. Identificar o perfil de jurisdição (UF + foro):
| O que o usuário diz | Perfil a usar |
|---|---|
| BA / Salvador / JEF Federal Bahia | BA_FEDERAL |
| AM / Manaus / Maués / Boa Vista do Ramos / TJAM | AM_ESTADUAL |
| AL / Arapiraca / Maceió / JEF AL (≤ 60 SM = R$ 91.080) | AL_FEDERAL |
| AL Estadual / TJAL (> 60 SM ou sorteio) | AL_ESTADUAL |
| MG / Ipatinga / Uberlândia / Belo Horizonte / TJMG | MG_ESTADUAL |
2. Localizar a pasta do cliente (em C:\Users\gabri\OneDrive\Área de Trabalho\APP - NÃO CONTRATADO\<cliente> ou subpasta de banco)
3. Ler procuração via OCR (texto-camada → easyocr → multimodal Read se PDF escaneado) para extrair número(s) de contrato. REGRA CRÍTICA §9-quater: nunca pegar todos os contratos do banco; se OCR falhar, pedir números explícitos ao usuário.
4. Ler RG + comprovante via OCR multimodal — extrair CPF, RG, data nascimento (≥60 = idoso → prioridade), endereço, estado civil. Se RG ilegível, anotar como pendente; nunca escrever [A CONFIRMAR] sem antes tentar OCR.
5. Invocar pipeline genérico:
from _pipeline_generico import gerar_inicial_padrao
res = gerar_inicial_padrao(
perfil_chave='AL_FEDERAL', # ou BA_FEDERAL / AM_ESTADUAL / AL_ESTADUAL
pasta_cliente=r'...',
autora={'nome': ..., 'cpf': ..., 'data_nascimento': datetime(...), ...},
comarca='Arapiraca',
numeros_contrato_explicitos=['xxxxxxxxxx'],
output_path=r'.../INICIAL_<cliente>.docx',
)
A skill aplica AUTOMATICAMENTE:
- Procuração-fonte-única (
ProcuracaoSemFiltroErrorse sem filtro) - Fontes Segoe UI Bold no autor/banco/INSS via rStyle 2TtuloChar
- Cabeçalho em Segoe UI Bold inline (sem caps)
- Conjugação f/m automática (nacionalidade → inscrita/inscrito + domiciliada/domiciliado)
- Omissão limpa de RG inválido / igual ao CPF / vazio /
[A CONFIRMAR] - Endereço composto matriz Joaçaba/SC + unidade de apoio na UF do cliente (
montar_endereco_escritorio_completo+inserir_unidade_apoio_se_faltando) - Bloco fático sem mencionar depósito (default conservador AL)
- Intro fática com BANCO + CONTRATO Nº em Cambria Bold CAPS (não Segoe UI)
- Pedido declaratório com escolha empréstimo vs refinanciamento
- Prioridade idoso só se autor ≥ 60 anos:
- cabeçalho em Cambria 11pt + alinhamento direita + recuo 4cm
- pedido como item I da lista numerada em Cambria Bold
- Grifo amarelo em todas as alterações
- Validação template (
validar_template.py) se template novo
6. Reportar para o usuário:
- Caminho do DOCX gerado
- N de contratos detectados
- Banco-réu identificado
- Modificações + residuais
- Alertas (pendências de leitura ocular, divergências doc vs HISCRE, etc.)
Estrutura de arquivos da skill
~/.claude/skills/inicial-nao-contratado/
├── SKILL.md ← este arquivo
├── GUIA_NOVA_UF.md ← passo a passo para adicionar PE/MG/SE/ES
└── references/
├── _pipeline_generico.py ← wrapper de alto nível (use este)
├── perfis_juridicos.py ← PERFIS = {'BA_FEDERAL', 'AM_ESTADUAL', 'AL_FEDERAL', 'AL_ESTADUAL', 'MG_ESTADUAL'}
├── helpers_redacao.py ← regras de fonte/redação canônica (compartilhado) — inclui montar_endereco_escritorio_completo, inserir_unidade_apoio_se_faltando, inserir_prioridade_idoso_se_faltando, inserir_pedido_prioridade_idoso_se_faltando
├── extrator_procuracao.py ← OCR de procurações (text-layer + easyocr)
├── extrator_hiscon.py ← parser HISCON com FIM DE DESCONTO + fuzzy + auditoria
├── extrator_hiscre.py ← parser HISCRE
├── extrator_calculo.py ← parser cálculo jurídico
├── escritorios.py ← procuradores + OABs + endereços + decidir_foro_al
├── bancos_canonicos.py ← CNPJs/endereços de bancos
├── helpers_docx.py ← run-aware substituição com grifo amarelo
├── adaptador_am.py ← convenção placeholders AM + classificar_menor
├── auditor_dano_moral.py ← regra dano moral (1 contrato = 15k; 2+ = 5k×N)
├── verificador_dados_pessoais.py ← doc físico vs HISCRE
├── seletor_template.py ← decide entre base/multiplos/refin (BA)
├── validar_template.py ← checklist automático para template novo
├── _run_caso_padrao.py ← TEMPLATE de runner (copiar pra cada cliente)
├── _run_demos_ficticias.py ← gera 9 demos para teste
├── _pipeline_caso.py ← BA Federal (chamado pelo genérico)
├── _pipeline_caso_am.py ← AM Estadual
└── _pipeline_caso_al.py ← AL Federal/Estadual
Templates .docx ficam em
~/OneDrive/Documentos/Obsidian Vault/Modelos/IniciaisNaoContratado/_templates/
(10 templates ativos: BA × 3, AM × 2, AL × 4, MG × 1).
TODOs conhecidos (pendentes de validação prática)
BA sem PDF de cálculo cai com
R$ 0,00no valor da causa. Aplicar fallback "soma_dobros + dano_moral" (igual ao AL faz).AM com 2+ contratos do MESMO banco: o pipeline AM ainda não duplica bloco fático. Replicar lógica do AL (
_preencher_bloco_faticocaminho B 1banco×N contratos) quando aparecer caso real.
Contratos VIRTUAIS (procuração tem, HISCON não tem) — regra 2026-05-13
Quando o contrato consta na procuração mas NÃO está no HISCON atual, o escritório quer gerar a inicial mesmo assim, com valores estimados, e marcar pendência de "juntar HISCON do período do empréstimo".
Use permitir_contrato_virtual=True ao chamar gerar_inicial_padrao:
gerar_inicial_padrao(
perfil_chave='AM_ESTADUAL',
pasta_cliente=...,
numeros_contrato_explicitos=['123505288054'], # contrato virtual
autora=...,
permitir_contrato_virtual=True,
contrato_virtual_overrides={
'data_inclusao': '01/01/2020', # estimado (período HISCRE)
'competencia_inicio': '01/2020',
'qtd_parcelas': 84,
'valor_parcela': 56.18, # média dos contratos do banco no JSON
'valor_emprestado': 2500.00,
},
)
A skill cria um contrato VIRTUAL com _virtual: True + _pendencia_hiscon: True
e segue a geração normal. Gerar relatório paralelo de pendência informando
o operador para juntar o HISCON real e atualizar os valores antes do protocolo.
Caso paradigma: EDINA Bradesco (2026-05-13) — 5 procurações, 3 contratos no HISCON (geradas normais) + 2 virtuais (geradas com estimativa = média dos 3 reais = R$ 56,18; valor causa estimado R$ 26.853,96).
Regras críticas (não esquecer)
1. Polo passivo VARIA conforme jurisdição
| Jurisdição | Polo passivo | Procurador | OAB |
|---|---|---|---|
| BA — JEF (Federal) | Banco + INSS (TNU TEMA 183 II) | Dr. Gabriel Cardoso de Aguiar | OAB/BA 88973 |
| AM — TJAM Estadual rito comum | Apenas o banco (sem INSS) | Dr. Patrick Willian da Silva (sempre) | OAB/AM A2638 |
| AL — JEF (Federal, ≤60 SM) | Banco + INSS | Dr. Tiago de Azevedo Lima (transição → Alexandre) | OAB/AL 20906A |
| AL — TJAL Estadual (>60 SM ou sorteio) | Apenas o banco | Dr. Tiago de Azevedo Lima (transição → Alexandre) | OAB/AL 20906A |
| MG — TJMG Estadual rito comum | Apenas o banco | Dr. Alexandre Raizel de Meira | OAB/MG 230436 |
REGRA OPERACIONAL AM: mesmo quando a notificação extrajudicial é assinada por outro procurador do escritório (Eduardo, Gabriel ou Tiago — que constam na procuração), a inicial AM é sempre protocolada pelo Patrick porque o sistema PJe/Projudi do TJAM é acessado por ele localmente. Os demais procuradores ficam apenas no instrumento de procuração anexo.
Atenção: quando a jurisdição é Estadual (AM), NÃO incluir o INSS no polo passivo nem invocar a fundamentação federal (TNU TEMA 183, legitimidade do INSS, Justiça Federal competente, etc.). Isso já está pré-removido do template
inicial-jeam-*.docx— não precisa mexer.
Como decidir a jurisdição: depende do domicílio do autor + decisão estratégica do escritório. Se o autor reside em comarca AM (Manaus, Maués, Boa Vista do Ramos, Caapiranga, etc.), o template jeam é o padrão. Se BA (Salvador, Camaçari, Mata de São João, etc.), jfba.
2. Renda da parte autora — do extrato INSS ou da base de cálculo do HISCON
{{valor_renda_liquida}} é o valor LÍQUIDO do benefício. Fontes possíveis:
- Extrato INSS (preferencial, se anexado pelo cliente)
- HISCON p.2 — campo
BASE DE CÁLCULO(atenção: é a renda BRUTA — usar se não tiver extrato) - KIT — declaração de hipossuficiência ou autodeclaração de renda
Se NÃO houver fonte identificável: NÃO inventar valor padrão: alertar no relatório paralelo "RENDA NÃO IDENTIFICADA — preencher manualmente" e deixar [A CONFIRMAR] no DOCX.
3. Cálculo do dano moral — regra fixa do escritório
| Cenário | Valor pleiteado |
|---|---|
| 1 contrato isolado | R$ 15.000,00 |
| 2+ contratos do mesmo banco | R$ 5.000,00 × N contratos |
| Refinanciamento ATIVO | R$ 15.000,00 + R$ 5.000,00 (dano temporal adicional) |
4. Auditoria do dano moral vs PDF de cálculo
A skill SEMPRE compara o valor calculado pela regra acima com o valor "DANOS MORAIS" extraído do PDF de cálculo:
- BATER: usa o valor calculado, sem alerta.
- DIVERGIR: usa o valor da regra, mas alerta no relatório paralelo:
⚠ Cálculo PDF traz R$ {valor_pdf}; regra do escritório para {N} contratos seria R$ {valor_regra}. CONFERIR antes do protocolo.
5. Valor da causa = "Total Geral" do PDF de cálculo
NÃO recalcular. O PDF de cálculo já vem PRONTO do escritório (formato Cálculo Jurídico). Extrair o "Total Geral" da p.2 e usar como {{valor_causa}}.
Se o cálculo NÃO bater com a regra do dano moral (ver § 4), alertar mas usar o valor do PDF mesmo (porque é o valor que vai instruir o pedido).
6. Bancos canônicos — fonte única de CNPJ + endereço
Toda referência a banco-réu vem do bancos_canonicos.py (espelho do Modelos/IniciaisNaoContratado/bancos-canonicos.md). 70+ bancos catalogados em 4 jurisdições (Matriz / AL / AM / BA).
Regra de seleção do endereço:
- DEFAULT = matriz (qualquer estado)
- EXCEÇÃO = se opta pelo foro do domicílio do réu (ex.: Maceió/AL), usar a filial do estado correspondente
7. Documentos do cliente — estrutura padrão
APP - NÃO CONTRATADO/
└── <CLIENTE> - <Procurador>/
├── 1. KIT/ ← KIT COMPLETO (escaneado, OCR easyocr)
│ ├── KIT COMPLETO.pdf ← contém RG/CPF/comp.residência/etc.
│ ├── AUTODECLARAÇÃO DE RESIDÊNCIA.pdf
│ ├── TERMO DE CONSENTIMENTO.pdf
│ └── CONTRATO DE PRESTAÇÃO DE SERVIÇOS.pdf
└── BANCO XXX/<sub-tese>/ ← UMA pasta por BANCO
├── 2 - PROCURAÇÃO XXX <Nº CONTRATO>.pdf ← N procurações = N contratos
├── 3 - RG.pdf
├── 4 - DECLARAÇÃO DE HIPOSSUFICIÊNCIA.pdf
├── 5 - DECLARAÇÃO DE BENS MÓVEIS E IMÓVEIS.pdf
├── 6 - DECLARAÇÃO DE ISENÇÃO DO IMPOSTO DE RENDA.pdf
├── 7 - COMPROVANTE DE RESIDÊNCIA.pdf
├── 8 - HISTÓRICO DE EMPRÉSTIMO.pdf ← HISCON (mesmo de todos os bancos)
├── 9 - HISTÓRICO DE CRÉDITO.pdf ← HISCRE
└── 10 - CÁLCULO.pdf (ou 9- CÁLCULO) ← cálculo PRONTO, específico por banco
Sub-tese = 1 AVERBAÇÃO NOVA INATIVO, 1 REFINANCIAMENTO INATIVO, 2 AVERBAÇÃO NOVA INATIVO, etc. Combinação de:
- Numeração da procuração (1, 2, 3...)
- Origem da operação (
AVERBAÇÃO NOVA/REFINANCIAMENTO/PORTABILIDADE) - Status (
INATIVO= excluído/encerrado /ATIVO= em curso)
8. Pasta KIT — usar APENAS para qualificação do autor
A pasta 1. KIT/ (ou variantes) tem documentos pessoais (RG, comp. residência, autodeclaração). É a fonte primária da qualificação. Os documentos da pasta de cada banco são repetições/versões + procurações específicas + HISCON + cálculo.
9. Auditoria automática pós-geração
Após gerar o DOCX, rodar auditor.auditar_inicial_gerada() que detecta:
- Placeholders residuais
{{...}}não preenchidos - Valores R$ XXX,XX que parecem caso-específico (verificar contra HISCON+cálculo)
- CNPJs/CPFs/contas/CEPs fora da lista esperada
- Datas fora de jurisprudência
9-bis. OBRIGATÓRIO: hierarquia de fontes para dados pessoais + verificação cruzada
Para os campos CPF, RG, nome, data de nascimento, nome da mãe, NB:
Hierarquia de fontes (em ordem de prioridade):
- PRIMÁRIA: documento pessoal físico — RG, CPF, CNH escaneado no KIT do cliente (pasta
1. KIT/ouKIT/). Esta é a fonte que o procurador apresentaria em juízo. - SUBSIDIÁRIA: HISCRE (Histórico de Créditos do INSS) — usado quando o documento físico não está legível ou faltou. Por ser oficial do INSS, é confiável mas não substitui o documento.
- VERIFICAÇÃO CRUZADA OBRIGATÓRIA: comparar SEMPRE entre as fontes — para detectar:
- Documento pessoal de OUTRA PESSOA na pasta (ex.: cônjuge, dependente, terceiro)
- OCR mal-feito do KIT (manuscrito difícil)
- Divergência entre nome no doc e no HISCRE (caso de homônimo, mudança de nome por casamento, etc.)
Implementação técnica:
def verificar_dados_pessoais(autora_do_doc, hiscre):
"""Compara dados extraídos do documento físico (autora_do_doc) com o HISCRE.
Retorna lista de divergências."""
divergencias = []
for campo in ['cpf', 'nome', 'data_nascimento', 'nome_mae']:
v_doc = autora_do_doc.get(campo)
v_hiscre = hiscre.get(campo)
if v_doc and v_hiscre and v_doc != v_hiscre:
divergencias.append({
'campo': campo,
'doc': v_doc,
'hiscre': v_hiscre,
'severidade': 'CRÍTICA' if campo in ['cpf', 'nome'] else 'ATENÇÃO',
})
return divergencias
No relatório paralelo: se houver QUALQUER divergência, gerar seção destacada "🚨 DIVERGÊNCIAS DOC vs HISCRE":
- Listar campo, valor do doc, valor do HISCRE
- CRÍTICA → "REVISAR ANTES DE PROTOCOLAR — pode ser documento de outra pessoa"
- ATENÇÃO → "CONFERIR — pode ser homônimo, mudança de nome ou OCR errado"
Regra de qual valor usar:
- Se AUTORA preenchida (lida do doc) → usar AUTORA (mesmo se divergir)
- Se AUTORA vazia → usar HISCRE com alerta "Dado extraído do HISCRE (subsidiário). Verifique RG físico do cliente."
- Se ambos vazios → erro fatal: "REVISAR — KIT/HISCRE não fornecem CPF/RG/nome"
9-ter. OBRIGATÓRIO: cruzar procurações com HISCON e usar coluna LITERAL FIM DE DESCONTO
Dois bugs históricos que NÃO PODEM se repetir (caso paradigma: GEORGE/FACTA, 07/05/2026):
(a) Filtro de contratos por procuração — fuzzy match e auditoria cruzada
O filtro do pipeline BA pega o número de contrato a partir do nome do arquivo das procurações (2 - PROCURAÇÃO FACTA 0047032901.pdf → 0047032901). Esse nome pode ter typo. No caso GEORGE/FACTA, a procuração 2 - PROCURAÇÃO FACTA 0047633052.pdf deveria ser 0047033052 (1 dígito errado: 63 vs 03) — e o pipeline silenciosamente perdia o terceiro contrato.
Defesas obrigatórias (já implementadas em extrator_hiscon.py):
filtrar_contratos_por_numero(..., fuzzy_dist=1)— admite até 1 dígito de diferença para casar com contrato do mesmo tamanho. Match fuzzy é flagado com_match_fuzzyno dict de saída.auditar_procuracoes_vs_hiscon(contratos_hiscon, numeros_procuracao, banco_codigo)— cruza:- números casados EXATOS;
- números casados FUZZY (gera alerta);
- números no HISCON do banco que NÃO foram referidos por nenhuma procuração, classificados em suspeitos (data de inclusão a ≤31 dias dos casados ou prefixo idêntico — alta probabilidade de ser irmão esquecido) vs informativos (outros contratos do banco em outros períodos);
- números nas procurações que NÃO estão no HISCON do banco (alerta crítico).
REGRA OPERACIONAL DE TOLERÂNCIA (Gabriel, 07/05/2026):
| Procurações com fuzzy match na pasta | Comportamento da skill |
|---|---|
| 0 | Segue silencioso |
| 1 | Segue + alerta ⚠ ATENÇÃO (1 typo de 1 dígito é tolerável; provavelmente o procurador renomeou errado) |
| 2 ou mais | Segue + alerta 🚨 CRÍTICO: pode indicar erro sistemático (lote inteiro com typo, mistura com outro cliente, OCR ruim na geração das procurações). NÃO PROTOCOLAR sem revisar TODAS as procurações |
A skill NUNCA pula contratos silenciosamente — sempre que há divergência entre nome do arquivo e HISCON, gera alerta visível no relatório paralelo + console. Os alertas vão na seção de pendências, em ordem de criticidade. O procurador SEMPRE confere.
(b) Competência FIM DE DESCONTO — usar a coluna literal do HISCON, não calcular
O HISCON traz duas colunas que o parser do analise-cadeias-hiscon antigamente PULAVA: COMPETÊNCIA INÍCIO DE DESCONTO (col 5, ex.: 06/2021) e COMPETÊNCIA FIM DE DESCONTO (col 6, ex.: 02/2024). Antes, a skill estimava a competência fim como data_exclusao − 1 mês, o que dava resultado errado quando a exclusão acontecia no MESMO mês do último desconto (resultava em mês a menos).
Solução obrigatória: analise-cadeias-hiscon/scripts/analisador.py agora extrai competencia_inicio_desconto e competencia_fim_desconto direto da tabela. extrator_hiscon.formatar_contrato_para_template PRIORIZA esses campos; só cai para o cálculo via data_exclusao − 1 mês se a coluna vier vazia (HISCON antigo, antes da mudança da Dataprev).
| Fonte | Prioridade | Observação |
|---|---|---|
competencia_fim_desconto (col 6 do HISCON) |
1ª — autoritativa | string 'mm/yyyy' |
data_exclusao − 1 mês |
2ª (fallback) | quando a coluna 6 está vazia |
comp_inicio + qtd_parcelas − 1 |
3ª (contrato ATIVO sem exclusão) | só para Ativos |
9-quater. OBRIGATÓRIO: a PROCURAÇÃO é a única fonte autoritativa dos contratos a impugnar
Caso paradigma: EDMUNDA LIMA DOS SANTOS (07/05/2026). Pasta tinha:
2 - Procuração — N°1.pdf(1 procuração, sem número no nome)- HISCON com 2 contratos do BANCO BRADESCO
A skill pegou silenciosamente os 2 contratos do banco. Mas a procuração outorgava poderes apenas sobre 1 contrato (0123527065102) — o segundo contrato do HISCON não estava autorizado. Isso resultou em uma inicial fora do escopo do mandato.
Regra fundamental gravada (não pode ser violada):
A procuração é a ÚNICA fonte autoritativa do que o cliente nos autorizou a impugnar. NUNCA assumir contratos sem confirmação na procuração. NUNCA pegar "todos os contratos do banco" como fallback silencioso.
Hierarquia obrigatória de extração (em ordem de tentativa):
- Número no nome do arquivo da procuração — ex.:
2 - PROCURAÇÃO FACTA 0047032901.pdf. Pipeline lê via regex. - Número no CONTEÚDO da procuração (text-layer do PDF) — ex.: "ajuizar ação referente ao Contrato n° 0123527065102". Pipeline tenta
pymupdf.get_text(). - OCR via EasyOCR no PDF escaneado — para procurações que vêm em scan sem text-layer. Roda em pt-BR com resolução até 2400px.
numeros_contrato_explicitos=[...]— parâmetro do chamador. Use quando o procurador leu manualmente e quer passar diretamente.
Comportamento se TODAS as 4 fontes falharem:
raise ProcuracaoSemFiltroError(
"🚨 IMPOSSÍVEL extrair números de contrato. AÇÃO: abrir o PDF "
"manualmente e passar via numeros_contrato_explicitos=[...]. "
"NUNCA pegamos 'todos os contratos do banco' como fallback."
)
A skill PARA o pipeline e o procurador precisa intervir. Isso evita gerar inicial com contratos não outorgados.
Implementado nos 3 pipelines (atualizado 07/05/2026):
extrator_procuracao.py— extrator OCR (text-layer + EasyOCR fallback)_pipeline_caso.py(BA) —ProcuracaoSemFiltroError_pipeline_caso_al.py(AL) —ProcuracaoSemFiltroError_pipeline_caso_am.py(AM) —ProcuracaoSemFiltroError(caso paradigma adicional: FABIO/C6)
9-quinquies. REDAÇÃO CANÔNICA: helpers_redacao.py compartilhado pelos 3 pipelines
Para garantir que as MESMAS regras de formatação valem em BA/AM/AL, todos os pipelines importam de helpers_redacao.py:
| Função | O que faz |
|---|---|
make_run |
cria <w:r> com fonte/bold/grifo controlados; aceita usar_rstyle_titulo (apenas para nomes em destaque, NÃO usar em cabeçalho — gera caps automático) e tamanho_pt (sz em meio-pontos) |
substituir_qualificacao_autor |
reescreve qualificação com NOME (Segoe UI Bold via rStyle 2TtuloChar) + resto Cambria; conjugação f/m automática; omite estado_civil/RG vazios; recebe end_escritorio da montar_endereco_escritorio_completo(uf) |
substituir_polo_passivo |
reescreve polo passivo com NOMES (banco + INSS) em Segoe UI Bold + resto Cambria |
substituir_intro_contratos |
reescreve "tomou conhecimento dos descontos referentes a empréstimo(s)..." com BANCO e CONTRATO Nº em Cambria Bold + CAPS (regra fixa 07/05/2026 — substituiu Segoe UI Bold via rStyle); aplica <w:highlight> amarelo |
modalidade_extenso |
mapeia tipo_origem → 'empréstimo' / 'refinanciamento' / 'empréstimo (portabilidade)' |
preencher_pedidos_declaratorios |
reescreve "Declarar a inexistência do empréstimo/refinanciamento..." com escolha automática + dados reais; duplica o parágrafo para N contratos (1 pedido por contrato); detecta layout MG (sub-itens) vs BA/AM/AL e despacha para _preencher_pedidos_formato_mg quando necessário |
preencher_bloco_fatico_formato_mg |
preenche o bloco "Do contrato nº A:" do template MG com sub-itens por contrato |
remover_prioridade_pedidos |
remove o pedido de prioridade idoso quando autor não é idoso |
inserir_unidade_apoio_se_faltando |
padroniza endereço hardcoded dos templates BA/AM substituindo run-aware por montar_endereco_escritorio_completo(uf) (matriz Joaçaba/SC + unidade de apoio na UF do cliente). Idempotente: se o parágrafo já tem o endereço composto correto, não duplica |
inserir_prioridade_idoso_se_faltando |
quando autor é idoso, INSERE no cabeçalho o parágrafo "Prioridade de tramitação: art. 1.048 do Código de Processo Civil (Idoso)" em Cambria 11pt + alinhamento à direita + recuo esquerdo de 4cm (ind=2268 twips) + grifo amarelo |
inserir_pedido_prioridade_idoso_se_faltando |
quando autor é idoso, INSERE como item I da lista numerada de pedidos o pleito "A prioridade na tramitação..." em Cambria Bold + grifo amarelo, herdando o pPr (pStyle=5Listaalfabtica) do primeiro item da lista para entrar na renumeração automática |
Regra de fontes — NUNCA violar:
| Tipo de conteúdo | Fonte/estilo |
|---|---|
| Cabeçalho/endereçamento ('Ao Juízo...') | Segoe UI Bold INLINE (NÃO usar rStyle 2TtuloChar — tem caps automático) |
| Nome do AUTOR (qualificação) | Segoe UI Bold via rStyle 2TtuloChar (caps + bold do estilo do template) |
| Nome do BANCO no POLO PASSIVO | Segoe UI Bold via rStyle 2TtuloChar |
| Nome do INSS (Federal) no polo passivo | Segoe UI Bold via rStyle 2TtuloChar |
| BANCO + CONTRATO Nº na INTRO FÁTICA ("tomou conhecimento dos descontos…") | Cambria Bold + CAPS (regra fixa 07/05/2026 — substituiu Segoe UI rStyle) |
| Cabeçalho "Prioridade de tramitação: art. 1.048…" (idoso) | Cambria 11pt + alinh. direita + recuo esquerdo 4cm (ind=2268 twips) + grifo amarelo |
| Pedido "A prioridade na tramitação…" (idoso) | Cambria Bold + pStyle 5Listaalfabtica (entra na numeração romana I) + grifo amarelo |
| Resto da qualificação/polo passivo/intro | Cambria |
| Toda alteração da skill | highlight amarelo |
9-sexies. REGRAS CANÔNICAS DE ENDEREÇO E PRIORIDADE IDOSO (gravadas 07/05/2026)
Quatro regras fixas do escritório, propagadas por TODOS os pipelines (BA + AM + AL + MG) via helpers_redacao.py. Aplicadas automaticamente — não requerem configuração por caso.
(1) Endereço do escritório — matriz Joaçaba/SC SEMPRE primeiro + unidade de apoio na UF do cliente
Toda inicial deve trazer no parágrafo de qualificação do autor:
"…com escritório profissional em Rua Frei Rogério, 541, Centro, Joaçaba/SC, CEP 89600-000, e unidade de apoio em [endereço completo da filial da UF do cliente], local onde recebem avisos e intimações, vem…"
A função escritorios.montar_endereco_escritorio_completo(uf) retorna a string composta correta. Mapa de filiais por UF (FILIAL_APOIO_POR_UF em escritorios.py):
| UF do cliente | Filial de apoio | Endereço |
|---|---|---|
| BA / ES | Salvador/BA | Rua Portugal, 5, Ed. Status, Comércio, CEP 40015-903 |
| AM | Maués/AM | Travessa Michiles, S/N, Centro, CEP 69190-000 |
| AL / SE | Arapiraca/AL | Rua Nossa Senhora da Salete, 597, Sala 04, Itapuã, CEP 57314-175 |
| MG | Uberlândia/MG | Av. Floriano Peixoto, 615, Ed. Floriano Center, Loja 07, Térreo, Centro, CEP 38400-102 |
| SC | (nenhuma — é a matriz) | só matriz |
Implementação:
- Pipeline AL (e MG via
uf_override='MG'): chamamontar_endereco_escritorio_completo(uf)direto em_substituir_qualificacaoantes desubstituir_qualificacao_autor. - Pipelines BA + AM: chamam
inserir_unidade_apoio_se_faltando(doc, uf)ao final dogerar_inicial. O helper detecta o trecho hardcoded do template (3 padrões cobertos) e substitui run-aware preservando os placeholders restantes do parágrafo. - Caso especial AM com REPRESENTANTE LEGAL: o pipeline já constrói o parágrafo de qualificação do zero usando
montar_endereco_escritorio_completo('AM').
(2) Cabeçalho de prioridade — Cambria 11pt + alinhamento à direita + recuo esquerdo de 4cm
Quando o autor é idoso (eh_idoso=True), inserir LOGO ABAIXO do cabeçalho "Ao Juízo…" o parágrafo:
"Prioridade de tramitação: art. 1.048 do Código de Processo Civil (Idoso)."
Formatação OOXML obrigatória (não negociável):
<w:p>
<w:pPr>
<w:ind w:left="2268"/> <!-- 4cm = 2268 twips -->
<w:jc w:val="right"/> <!-- alinhamento DIREITA -->
</w:pPr>
<w:r>
<w:rPr>
<w:rFonts w:ascii="Cambria" w:hAnsi="Cambria"/>
<w:sz w:val="22"/> <!-- sz em meio-pontos: 22 = 11pt -->
<w:szCs w:val="22"/>
<w:highlight w:val="yellow"/>
</w:rPr>
<w:t xml:space="preserve">Prioridade de tramitação: art. 1.048 do Código de Processo Civil (Idoso).</w:t>
</w:r>
</w:p>
Implementado em inserir_prioridade_idoso_se_faltando(doc, eh_idoso, grifo). Idempotente — se o parágrafo já existe, não duplica.
(3) BANCO + CONTRATO Nº na intro fática — Cambria Bold + CAPS (NÃO mais Segoe UI)
A intro do bloco fático ("Nessa oportunidade, após informações, tomou conhecimento dos descontos referentes a empréstimo que não contratou junto ao BANCO X, CONTRATO Nº 1234567:") deve sair em:
<w:rFonts w:ascii="Cambria"/>(não Segoe UI)<w:b/><w:bCs/>(BOLD)- Texto em CAIXA ALTA (chamada
.upper()no helper) <w:highlight w:val="yellow"/>- NÃO usar
<w:rStyle w:val="2TtuloChar"/>(que é Segoe UI Bold com caps automático do estilo)
Helper: substituir_intro_contratos(p_elem, nome_banco, numeros, grifo). Funciona idêntico para 1, 2 ou N contratos (ajusta singular/plural e usa "e" para o último item).
(4) Pedido de prioridade — em BOLD, herdando pStyle do primeiro item da lista numerada
Quando o autor é idoso, INSERIR como item I da lista numerada de pedidos:
"A prioridade na tramitação, tendo em vista que a parte autora é pessoa idosa, nos termos do art. 1.048, inciso I, do Código de Processo Civil;"
Estratégia técnica:
- Localizar o primeiro parágrafo da lista após "DOS PEDIDOS" cujo
pStylecontenha "Lista" (pStyle padrão:5Listaalfabtica). deepcopydessepPr(preserva numeração romana automática I, II, III).- Inserir o novo parágrafo ANTES dele (vira o novo item I; Word renumera automaticamente).
- Texto em
<w:b/><w:bCs/>Cambria + grifo amarelo.
Implementado em inserir_pedido_prioridade_idoso_se_faltando(doc, eh_idoso, grifo). Idempotente.
Casos paradigma das 4 regras: JOSE DELI JORGE PEREIRA (3 bancos MG: DAYCOVAL, PARANÁ, SENFA), JOÃO PEDRO DA SILVA (PARANÁ MG), JOSÉ JESUS DA COSTA (PAN MG × 2 processos) — todos validados em 07/05/2026 com 4/4 ajustes presentes.
10. OBRIGATÓRIO: grifar (highlight amarelo) TODAS as alterações da skill
Toda substituição de placeholder e todo conteúdo INJETADO pela skill no DOCX gerado DEVE receber <w:highlight w:val="yellow"/>. Isso permite ao procurador a revisão visual rápida das alterações.
Áreas grifadas:
- Substituição de placeholders comuns (qualificação autor, banco-réu, benefício, valores, datas)
- Conteúdo gerado para blocos repetíveis (síntese fática por contrato + DECLARAR por contrato)
- Listas montadas pela skill (
{{contratos_lista_breve}}) - Resultado da remoção do marcador
{{SE_IDOSO}}(quando autor é idoso, o texto restante fica grifado)
NÃO grifar:
- Texto fixo do template (toda a fundamentação jurídica, preliminares, jurisprudência)
- Nome/OAB do procurador (fixo)
SEMPRE grifar (mesmo que pareça "fixo"):
- Endereço do escritório (matriz + unidade de apoio): a skill substitui o trecho hardcoded do template via
inserir_unidade_apoio_se_faltando(doc, uf)para deixar dinâmico por UF do cliente; como é alteração da skill, recebe grifo amarelo. - Cabeçalho de prioridade idoso: inserido pela skill quando
eh_idoso=True. - Pedido de prioridade idoso: idem.
Implementação técnica: o helper substituir_in_run(p, mapa, grifo=True) aplica o highlight automaticamente nos caracteres SUBSTITUÍDOS (não nos preexistentes). Para runs criados manualmente (ex.: polo passivo com 5 runs separados, blocos repetíveis duplicados), aplicar <w:highlight w:val="yellow"/> no rPr antes de inserir no XML.
9-terdecies. PLANILHA DE CÁLCULO DE INDÉBITO em EXCEL (gravado 13/05/2026, refinado mesma data)
A planilha de cálculo do indébito é gerada pela skill kit-juridico (na fase F — montar estrutura), uma por pasta de ação. A skill inicial-nao-contratado lê esse Excel para usar o TOTAL GERAL como valor da causa, em vez de estimar.
Fluxo do fluxo (gravado 13/05/2026):
kit-juridico fase F (organizar) inicial-nao-contratado
───────────────────────────────── ────────────────────────
para cada pasta de ação: para cada inicial:
cria pasta BENEFÍCIO/BANCO/ procura CALCULO_INDEBITO.xlsx
copia procurações se achou:
copia docs comuns lê TOTAL GERAL DA AÇÃO
grifa HISCON usa como valor_causa
gera ESTUDO.docx senão:
gera CALCULO_INDEBITO.xlsx ←──┐ usa PDF de cálculo ou estima
│ + gera fallback CALCULO_<base>.xlsx
└───────── decide foro AL pelo valor
Hierarquia de leitura do valor da causa (em _pipeline_caso_al.py):
CALCULO_INDEBITO.xlsxna pasta de ação → autoritativo (kit-juridico)- Qualquer
CALCULO_*.xlsxna pasta (compatibilidade com Excels gerados pela inicial em sessões anteriores) - PDF de cálculo (legado — formato Cálculo Jurídico)
- Estimativa: soma dos dobros + dano moral
Helpers em _common/calculadora_indebito.py:
| Função | Uso |
|---|---|
gerar_excel_indebito(contratos, cliente_nome, output_path) |
Gera planilha completa |
calcular_contrato(contrato) |
Cálculo isolado de 1 contrato |
calcular_dano_moral(n_contratos) |
R$ 15k (1) ou R$ 5k×N (2+) |
ler_total_geral_xlsx(path) |
Lê TOTAL GERAL DA AÇÃO de um Excel |
localizar_excel_indebito(pasta) |
Busca CALCULO_INDEBITO.xlsx → qualquer CALCULO_*.xlsx |
Para que a inicial use o Excel correto: o usuário deve rodar a kit-juridico PRIMEIRO (que organiza pasta + gera Excel canônico), depois rodar a inicial.
(Conteúdo histórico abaixo — implementação V1, antes da migração para kit-juridico):
Junto com cada inicial AL/MG/AM/BA (consignado, RMC, RCC), a skill agora gera automaticamente uma planilha Excel CALCULO_<nome>.xlsx na mesma pasta do DOCX, com cálculo detalhado mensal dos descontos atualizados.
Regime fixo (conforme pedido nas iniciais do escritório):
- Correção monetária: INPC (responsabilidade civil — STJ Tema 905)
- Juros de mora: 1% a.m. simples (juros legais — art. 406 CC c/c CTN)
- Dobro: art. 42, p. único, CDC
- Dano moral: R$ 15.000 (1 contrato) ou R$ 5.000 × N contratos (2+)
Estrutura da planilha:
- Aba
RESUMO— uma linha por contrato com totais (descontado, corrigido+juros, em dobro), linha SUBTOTAL com soma, linha DANO MORAL e linha TOTAL GERAL DA AÇÃO (subtotal em dobro + dano moral). - Aba por contrato — tabela mensal de cada parcela descontada com: competência, valor original, fator INPC, valor corrigido, meses para juros, juros 1% a.m., total simples e total em dobro.
Arquivos da implementação:
| Arquivo | Conteúdo |
|---|---|
skills/_common/dados/inpc_bcb_serie188.json |
Tabela INPC mensal oficial BCB (jan/2017 em diante). Atualizar periodicamente via API BCB. |
skills/_common/indices_oficiais.py |
inpc_acumulado_entre(), corrigir_inpc(), juros_simples_mes() |
skills/_common/calculadora_indebito.py |
calcular_contrato(), calcular_dano_moral(), gerar_excel_indebito() |
_pipeline_caso_al.py linha 1149 |
Hook após doc.save() que chama gerar_excel_indebito() |
Não se aplica a: skill inicial-bradesco (Patrick AM — Bradesco encargos/tarifas/capitalização/PE tem regime próprio, cálculo é feito por outra rota).
Atualização periódica do INPC:
curl -sL "https://api.bcb.gov.br/dados/serie/bcdata.sgs.188/dados?formato=json&dataInicial=01/01/2017&dataFinal=31/12/2026" \\
-o skills/_common/dados/inpc_bcb_serie188.json
9-undecies. REGRA DE CIDADE FIXA AL → SEMPRE JEF FEDERAL (gravado 13/05/2026)
Decisão operacional do escritório: clientes residentes em Viçosa/AL, São Sebastião/AL ou Traipu/AL sempre ajuízam no JEF Federal, independente do valor da causa. Quando o valor excede 60 SM (R$ 91.080), inclui-se pedido expresso de renúncia ao excedente (Art. 17, § 4º, Lei 10.259/01).
Implementação: escritorios.cidade_forca_foro_federal(cidade) retorna True para essas 3 cidades (com normalização Unicode tolerante a acento/maiúsculas). A função decidir_foro_al(valor, forcar, cidade_autor) aplica a hierarquia:
forcar(override manual viaperfil_chave='AL_FEDERAL'ou'AL_ESTADUAL') — sempre vencecidade_autoremCIDADES_AL_SEMPRE_FEDERAL— JEF Federal com renúncia se > 60 SM- Valor da causa ≤ 60 SM → Federal; > 60 SM → Estadual
Quando a regra de cidade impõe Federal mas o valor excede 60 SM, retorna renuncia_ao_excedente=True e o pipeline acrescenta alerta na inicial: "INICIAL DEVE CONTER PEDIDO EXPRESSO DE RENÚNCIA AO EXCEDENTE (Art. 17, § 4º, Lei 10.259/01)".
Para usuário: ao gerar inicial, passar perfil_chave='AL_FEDERAL' para clientes dessas 3 cidades — independente do valor. Se passar AL_ESTADUAL, o forcar vence (você se responsabiliza pela decisão).
9-duodecies. BLOCO FÁTICO MÚLTIPLOS CONTRATOS: cabeçalho numerado + sub-itens (gravado 13/05/2026, ajuste fino noite 13/05/2026)
Caso paradigma: ANAIZA PENSAO ITAU (10 contratos a–j).
Mudança no layout do bloco fático quando há ≥2 contratos do mesmo banco:
Antes (até 12/05/2026):
a) No que diz respeito ao referido empréstimo, cumpre informar que a primeira
parcela descontada... contrato n° 622902175, cuja operação foi realizada...
b) No que diz respeito ao referido empréstimo, cumpre informar que a primeira
parcela descontada... contrato n° 626302197, cuja operação foi realizada...
Repetição do "No que diz respeito ao referido empréstimo, cumpre informar que" em CADA bloco gerava texto pesado e redundante.
Agora (13/05/2026):
4. No que diz respeito ao referido empréstimo, cumpre informar: ← NUMERADO (4.)
a) o contrato de nº 622902175: a primeira parcela descontada... ← BOLD em "a) o contrato de nº 622902175:"
b) o contrato de nº 626302197: a primeira parcela descontada... ← BOLD em "b) o contrato de nº 626302197:"
...
Estrutura:
- Cabeçalho NUMERADO ("4. No que diz respeito ao referido empréstimo, cumpre informar:") — mantém o
numProriginal do parágrafo template, continuando a numeração da lista da inicial (1./2./3./4.). - N sub-itens SEM numeração mas com
[letra]) o contrato de nº NNN:em NEGRITO — destaca visualmente cada contrato.
Implementação em _pipeline_caso_al.py:_preencher_bloco_fatico (caminho B):
Cabeçalho criado ANTES do loop de remoção de
numPr(senão herda elementos sem numPr):deepcopy(elem_template)preservandopPrcompleto (comnumPr→ ganha "4." automático)- Limpa só os
<w:r>(runs) do deepcopy - Adiciona novo run com texto fixo "No que diz respeito ao referido empréstimo, cumpre informar:"
- Insere ANTES de
elem_template
Loop de remoção de
numPr/pStylede lista APENAS nos sub-itens (elementos = cópias). O cabeçalho criado acima fica fora do loop e preserva sua numeração.Cada sub-item:
- Substitui "No que diz respeito ao referido empréstimo, cumpre informar que a primeira parcela" → "[letra]) o contrato de nº [NUM]: a primeira parcela"
- Remove "contrato n° xxxxxxx, " do meio (número já apareceu no início, evita duplicidade)
- Após todas as substituições, chama
_aplicar_bold_inicio(elem, "[letra]) o contrato de nº [NUM]:")— função interna que quebra o primeiro<w:r>em 2: um run BOLD (prefixo) + um run normal (resto), preservando fonte/grifo.
Para N=1 (1 só contrato) NÃO se aplica — o parágrafo singular fica como está.
9-septies. TEMPLATES AL/MG: literais piloto + xxxxx no bloco fático (gravado 12/05/2026)
Caso paradigma: ANAIZA / ANTONIO / CICERO (AL_FEDERAL e AL_ESTADUAL, 12/05/2026).
Dois bugs simultâneos que rebentam iniciais AL/MG silenciosamente — gravados aqui para nunca mais voltar:
(1) Templates AL (inicial-jfal-1banco, inicial-jfal-2bancos, inicial-jeal-1banco, inicial-jeal-2bancos) e MG (inicial-jemg-1banco) NÃO podem ter placeholders {{nome_autor}}/{{banco_reu_nome}}/etc.
O pipeline _pipeline_caso_al.py faz substituições TARGETED no DOCX usando string matching dos textos literais do caso piloto (FULANO DE TAL, BANCO BRADESCO, NB 149.139.433-9, etc.). Templates parametrizados com {{...}} quebram o pipeline porque os padrões regex/contains não encontram o que esperam.
Se você (ou alguém) parametrizar um template AL/MG no vault, o pipeline gera DOCX com placeholders intactos e qualificação/polo passivo/intro vazios. Sempre manter os templates AL/MG na versão LITERAL do caso piloto — o pipeline reescreve em cima dos literais.
Onde estão os backups da versão literal correta:
C:\Users\gabri\OneDrive\Documentos\Obsidian Vault\Modelos\IniciaisNaoContratado\_templates\
├── inicial-jfal-1banco.docx ← USAR
├── inicial-jfal-1banco.docx.bak_pre_parametrizacao ← backup literal seguro
├── inicial-jfal-1banco.docx.bak_pre_pente_fino ← versão {{}} ruim (não usar)
├── inicial-jfal-1banco.docx.parametrizado_<DATA> ← snapshot quando deu errado
Se aparecer {{placeholders}} em DOCX gerado, restaurar template do .bak_pre_parametrizacao e regerar.
**(2) Bloco fático "No que diz respeito ao referido empréstimo..." deve es
…(truncated)