Editor de Exhibit — Petição EB1 (USCIS)

🧩
Editor dentro do sistema vem do exbt
O editor que roda hoje no repositório exbt passa a ser parte do sistema: a revisão da composição e o editor de páginas (exhibit-panel) entram no frontend, como esta aba do filing, com o login do sistema. O gerador do PDF (document-template-node: conversão, numeração, índice) continua um serviço à parte, e deixa de ler o Airtable: petição, documentos e anexos vêm de petition_filings, documents e do Storage. Detalhe na aba Como funciona.
Pronto para gerar o Exhibit List?
94 de 97 itens entram · 2 avisos
94%
Última geração04/08 · 14:22 · v3
Final deadline (protocolo)08/08 · faltam 3 dias
⚠ 3 documentos ficariam de fora da compilação2 sem exhibit title preenchido · 1 com status diferente de aprovado
⚠ Diploma and transcripts: página 2 escaneada torta e com borda pretadetectado pelo agente na última geração · corrigir antes de gerar
🟡 Índice e numeração serão recalculados nesta geraçãoseparadores de exhibit não recebem número; ranges do sumário seguem as páginas carimbadas automático
avisos por IA · advisory · a compilação final é conferida pelo advogado responsável
Todos · 97Entram · 94Ficam de fora · 3Com aviso · 2Por grupo ▾
#PáginaExhibit titleGrupoDocumentoPágsEntra
Forms and Cover · 8 itens
⠿1Form G-1450 ($715 towards I-140)Forms and CoverForm G-14501
⠿2Cover SheetForms and CoverCover sheet1
⠿3Form G-28Forms and CoverForm G-282
⠿4Form I-140 Petition + supporting docsForms and CoverForm I-1406
Evidence · 86 itens
⠿5Letters of SupportEvidenceLetter of Support (EB1)11
⠿6Diploma and transcripts pág. 2 tortaEvidenceDoctoral credential4
⠿7Media / publicationsEvidencePress coverage23
—(sem exhibit title) · Bank statement 2024EvidenceBank statement3
—(sem exhibit title) · Employment letterEvidenceEmployment letter1
—Passport (cópia antiga)EvidencePassport2
🚫 Ficam de fora — e por quê
a razão aparece aqui na mesma tela; era a dor principal (só se descobria depois do PDF pronto)
⚠ Bank statement 2024 · sem exhibit title — preencher no documento
⚠ Employment letter · sem exhibit title — preencher no documento
⚠ Passport (cópia antiga) · status não aprovado (substituído pela v2) — correto ficar de fora
✓ 16 documentos do tipo record only não entram no exhibit por definição
Ajustes desta revisão 3 overrides ativos ordem e inclusão ficam guardadas só aqui (exhibit_overrides) — o dossiê do caso não é alterado
Diploma and transcripts arquivo do cliente · 4 páginas pág. 2 precisa de ajuste
Página 2
1
2 ⚠
3
4
sep.
UNIVERSIDADE FEDERAL · DIPLOMA (scan)
área a manter
Operações nesta página: rotate +3.2° → 0° crop 18,30 → 402,566 pt resize A4 retrato
Escopo do editor: apenas geometria da página (rotate · resize · crop · deletar). Não edita texto, não faz OCR, não junta documentos diferentes — o merge final é do gerador.
🕓 Versões deste arquivo
v2 · 04/08 · Rafael A. ativa
crop na pág. 2 (borda preta do scan) + resize A4
v1 · 02/08 · Cynthia M.
rotate 90° na pág. 3 (landscape → retrato)
original · 29/07 · cliente (APP)
arquivo como recebido — sempre recuperável
o gerador usa a versão ativa; reverter para o original é um clique e não apaga o histórico
GeraçãoQuandoPorItensPáginasResultadoPDF
v304/08 · 14:22Rafael A.943182 avisos📎 abrir
v202/08 · 09:40Cynthia M.92311ok📎 abrir
v130/07 · 17:05Nilzo G.882964 falhas de conversão📎 abrir
📋 Relatório da última geração (v3)
✓ 94 itens compilados · índice gerado · 318 páginas numeradas (separadores sem número)
⚠ 1 página possivelmente em branco (Media / publications, pág. 14)
⚠ 1 scan torto detectado (Diploma, pág. 2) — corrigir no editor
PDF final no Storage · link de download protegido (SSO do time)
⚙️ O caminho do PDF
gerador document-template-node (Express :9007) · POST /document/exhibit-list assíncrono, com fila e dedupe
  1. Lê o filing e os documentos (hoje: API do Airtable · no modelo novo: petition_filings / documents no Supabase)
  2. Filtra: só documentos aprovados e com campos de exhibit preenchidos (o painel mostra quem sobrou de fora e por quê)
  3. Baixa cada anexo e converte para PDF A4 — imagens com sharp, Office com PSPDFKit
  4. Aplica as versões editadas quando existem (rotate/resize/crop/deletar salvos no editor) em vez do arquivo original
  5. Ordena por grupo → ordem do item → título; aplica os overrides da revisão
  6. Gera índice e páginas separadoras com Puppeteer (HTML → PDF) e carimba a numeração contínua
  7. Faz o merge com pdf-lib, comprime e sobe no Supabase Storage; devolve o link protegido
🧱 Onde o estado vive
exhibit_overrides · ordem e inclusão desta revisão
exhibit_edits · operações por página + versão ativa
Storage exhibit-lists · PDFs gerados e versões editadas
o dossiê do caso segue sendo a fonte da verdade; aqui só moram ajustes de montagem
🔀 O que falta para o modelo novo
1. Trocar a leitura do Airtable pelas nossas tabelas (entra no desligamento do Airtable)
2. Entrar embutido na tela do filing, com o mesmo login do sistema (hoje é app interno sem auth)
3. Receber do Agente do Filing a ordem sugerida do exhibit e os avisos de página
nada disso exige reescrever o gerador — ele continua sendo a única lógica de PDF
📚 Documentação do módulo
origem: repo exbt/legalscale-monorepo, com specs próprias. A migração para o sistema está na atividade 40 (specs/40-exhibit-no-sistema/) · specs de lá: visão geral, serviço gerador, painel de revisão, editor de páginas, paginação no download, correções pós-deploy. Boards: fluxo de documentos · fluxo por tecnologias.

Protótipo navegável · dados fictícios (PII anonimizada) · Editor de Exhibit no contexto do filing.