O módulo usa a identidade Supabase, isola cada workspace e registra storage, TTL, runner e biblioteca XLSX como decisões ainda abertas. Co-authored-by: Cursor <cursoragent@cursor.com>
8.7 KiB
MASTER CONTEXT — Adaptador de Planilhas Elo Pro
Use este contexto em todas as etapas de implementação.
Papel do agente
Você está implementando um módulo de produção dentro do ecossistema Elo Pro. Trabalhe como engenheiro sênior full-stack. Antes de alterar código, inspecione padrões existentes no repositório e reutilize-os. Não crie subsistemas paralelos de autenticação, autorização, design system, auditoria, observabilidade, feature flags ou acesso ao Supabase quando já houver equivalentes.
Objetivo do produto
O Adaptador recebe planilhas de origens diferentes, valida sua estrutura, mapeia colunas manualmente para um modelo padronizado, mostra uma prévia do resultado e gera um novo arquivo consolidado sem alterar o modelo original.
Fluxo principal:
Elo Pro autenticado -> Adaptador -> selecionar modelo -> carregar fonte(s) -> selecionar aba/cabeçalho quando necessário -> validar -> mapear -> revisar -> processar -> acompanhar progresso -> baixar -> continuar com outra fonte ou encerrar.
Identidade e login — regra inegociável
- O Adaptador NÃO possui login próprio.
- O Adaptador NÃO possui cadastro de senha, hash de senha, refresh token proprietário ou tabela própria de usuários.
- Use o mesmo Supabase Auth do Elo Pro.
- Use o mesmo
auth.users,profiles,workspace_members, clientes Supabase SSR/server/browser e fluxo de logout já existentes. - Ao entrar no módulo, valide sessão, workspace ativo, membership e habilitação do módulo.
- Ausência de sessão deve seguir o fluxo central de autenticação Elo Pro.
- Logout encerra a sessão Elo Pro.
- A meta é uma identidade/uma senha para vários apps do ecossistema. Não copie usuários entre bancos e não crie credenciais duplicadas.
Tenant e autorização
- Tenant técnico:
workspace_id. - Toda persistência do módulo deve ser isolada por workspace.
- RLS é obrigatória quando aplicável.
- Não aceite
workspace_iddo cliente como verdade. Derive/valide no servidor conforme padrão Elo Pro. - Papéis operacionais:
owner,admin,gestor,agentconforme modelo existente. owner/admin: gestão de modelos e configurações.gestor/agent: fluxo operacional. Upload de modelo só se configuração específica permitir.superadmin: permanece mecanismo de plataforma já existente, auditado; não crie modo especial dentro do Adaptador.- Segurança deve existir no servidor/banco. Esconder botão no frontend é apenas UX.
Regras de negócio do MVP
- Até 10 modelos ativos por workspace.
- Nome lógico de modelo único dentro do workspace; sem versionamento automático no MVP.
- Entradas suportadas: XLSX e CSV.
- XLS, ODS e XML ficam fora do MVP.
- Fonte: até 10 MB e 50.000 linhas úteis por arquivo.
- Até 10 fontes por operação/jornada.
- XLSX pode ter múltiplas abas, mas exatamente uma aba é selecionada/processada por fonte em cada execução.
- Permitir seleção da linha de cabeçalho quando necessário.
- Toda coluna utilizada precisa ter cabeçalho identificável.
- Detectar inconsistências relevantes de tipo por coluna e impedir processamento inválido; não corrigir automaticamente.
- Mapeamento manual 1:1: uma coluna fonte -> no máximo uma coluna modelo e vice-versa.
- Todas as colunas obrigatórias do modelo devem estar mapeadas.
- Mapeamento não vira template reutilizável no MVP.
- Deve existir etapa de pré-visualização antes do processamento.
- Uma operação do usuário não executa duas transferências concorrentes.
- Modelo persistido é imutável durante transformação. Saída é sempre novo artefato.
- Modelos são persistentes. Fontes e saídas são temporárias, sujeitas a TTL.
- Exclusão de modelo exige confirmação, só
owner/admin, e é bloqueada se houver processamento ativo usando o modelo. - Configuração por workspace pode permitir/bloquear upload de modelo por perfis não administrativos. Isso não concede exclusão/gestão geral.
- Auditar upload/exclusão de modelo, alteração de configuração, início/fim/erro de processamento e downloads relevantes, sem registrar conteúdo de células.
- Sem fórmulas, normalização semântica, conversão de moeda/data, enriquecimento ou junção simultânea de fontes no MVP.
Stack obrigatória
Frontend:
- Next.js 16, App Router
- React 19
- TypeScript 5
- Tailwind CSS v4
- Lucide React
@dnd-kitpara drag and drop acessível- TanStack Query v5 para estado remoto/cache
@react-pdf/rendererpara PDF
Backend/infra:
- Supabase Auth + PostgreSQL com
@supabase/supabase-jse@supabase/ssr - Redis via
ioredis - Sentry client/server/edge
postgres+tsxpara migrations/ETL onde esse for o padrão do repositório
IA:
@anthropic-ai/sdkpode existir na stack, mas não participa do caminho crítico do MVP.
Qualidade:
- Vitest
- ESLint 9
- typecheck estrito conforme padrão do monorepo/repo
UX/UI — EloPro Design System Global V2.1
O Adaptador não cria Design System próprio.
- Interface predominantemente clara.
- Cloud White
#FBFBFE: base. - Midnight Ink
#071B45: texto/estrutura. - Action/Primary Blue: ações principais conforme token oficial do repo.
- Bright Blue
#2F8FFF: foco/hover/ativos quando previsto. - Aqua Signal
#00C2A8: sucesso, continuidade e progresso. - Warning
#F39A2D. - Error
#E63946, sempre com texto/ícone; nunca cor isolada. - Tipografia operacional: Manrope.
- Espaçamento base: 4px.
- Reutilize componentes oficiais: Button, IconButton, Card/OpenFramePanel, Input, Select, Checkbox, Radio, Switch, Dialog, Toast, Tooltip, Tabs/CapsuleTabs, SemanticMarker, JourneyTrail quando semanticamente adequado.
- Lucide React para ícones.
- Drag-and-drop precisa ter alternativa via teclado/select.
- Estados obrigatórios: loading/skeleton, empty, disabled, error recuperável e success.
- Não use fluxogramas antigos como referência visual; eles são referência funcional.
Modelo de dados proposto
Adapte nomes/convenções ao repo, mantendo semântica:
-
spreadsheet_adapter_settingsworkspace_idPK/FKallow_non_admin_model_upload- timestamps
-
spreadsheet_modelsid,workspace_id,name,original_filename,format,storage_keysheet_name,header_row,columns_schema jsonbcreated_by,created_at,status
-
spreadsheet_jobsid,workspace_id,user_id,model_id,statussource_count,current_source,output_format,progresserror_code,started_at,finished_at,created_at
-
spreadsheet_job_sourcesid,job_id,source_name,temp_storage_keyselected_sheet,header_row,row_count,size_bytes,status,expires_at
-
spreadsheet_job_mappingsid,job_source_id,source_column,model_column,is_required,position
-
Reuse
audit_logexistente quando compatível.
Rotas sugeridas
Adapte ao padrão existente do Elo Pro:
GET /api/spreadsheet-adapter/modelsPOST /api/spreadsheet-adapter/modelsDELETE /api/spreadsheet-adapter/models/:idGET/PATCH /api/spreadsheet-adapter/settingsPOST /api/spreadsheet-adapter/sources/validatePOST /api/spreadsheet-adapter/jobsGET /api/spreadsheet-adapter/jobs/:idPOST /api/spreadsheet-adapter/jobs/:id/processGET /api/spreadsheet-adapter/jobs/:id/download?format=xlsx|csv|pdf
Server Actions podem substituir rotas quando o padrão Elo Pro indicar, desde que contratos de segurança, teste e idempotência permaneçam claros.
Pendências que NÃO devem ser inventadas
Se o repo não trouxer uma decisão, pare e documente a alternativa recomendada em vez de “decidir silenciosamente”:
- Object storage definitivo: Supabase Storage privado ou equivalente S3.
- Topologia de login único entre hosts/domínios.
- Job runner durável para processamentos que possam exceder request timeout.
- TTL exato de fontes/saídas temporárias.
- Biblioteca XLSX de produção (licença, segurança, manutenção, preservação de formatação).
- Exclusão física vs soft delete de modelos.
Segurança mínima
- RLS e checagem server-side contra IDOR.
- Validar extensão, MIME e assinatura/estrutura do arquivo.
- Proteger contra path traversal e nomes maliciosos.
- Tratar CSV injection em exportações quando relevante.
- Nunca logar conteúdo de célula no Sentry/audit log.
- Não enviar planilha ao Anthropic no MVP.
- Storage privado; download somente após autorização.
- Sanitizar nomes e metadados exibidos.
Definição de pronto geral
Uma etapa só está concluída quando:
- implementação segue padrões existentes do Elo Pro;
- lint/typecheck passam;
- testes da etapa passam;
- segurança de workspace/permissões foi coberta;
- estados de UX relevantes existem;
- nenhuma nova autenticação paralela foi criada;
- mudanças e decisões abertas estão documentadas.