Manual do Supabase

Como deixar a nuvem do Contrô pronta — em poucos minutos, com um script só.

1O script único (migrações 001 a 027)

Todas as atualizações do banco da nuvem num arquivo só. Pode rodar quantas vezes quiser: nada é apagado, o que já existe fica como está.

  1. Entre no Supabase → abra o seu projeto → menu SQL Editor → New query.
  2. Clique em Copiar o script (abaixo) e cole tudo lá.
  3. Clique em Run (ou Ctrl+Enter).
  4. No fim aparece uma tabela: todas as linhas precisam dizer ✓ OK. Se alguma disser "FALTANDO", rode de novo e confira a mensagem de erro que o Supabase mostrar.
Projeto novo, ainda vazio? Rode primeiro o arquivo schema_supabase.sql inteiro (pasta do programa) — ele já inclui as 13 migrações. O script único é para quem já tem o Contrô no Supabase.
Ver o script (carregando…)
carregando…

2Os dados que o Contrô precisa

Onde pegarO que copiar
Supabase → Project Settings → API (ou "Data API")Project URL (ex.: https://xxxx.supabase.co)
Supabase → Project Settings → API KeysA chave secreta (secret / service_role). Nunca a anon / publishable.
Cloudflare → R2 Object StorageAccount ID e o nome do bucket (crie um, ex.: contro-fotos-biometria)
Cloudflare → R2 → Manage API Tokens → Create API token (permissão Object Read & Write, só nesse bucket)Access Key ID e Secret Access Key (a secreta aparece uma vez só — guarde)
As chaves secretas dão acesso total aos dados. Digite-as só na tela do Contrô — nunca mande por chat, e-mail ou foto.

3No Contrô (em cada computador)

  1. Configurações → Nuvem → Sincronização com a Nuvem: backend "Supabase + Cloudflare R2".
  2. Preencha os dados do passo 2 → Salvar credenciais Supabase/R2 (o Contrô confere se estão certas).
  3. Ligue "Sincronizar com a nuvem automaticamente" → Salvar.
  4. Só na primeira vez, no computador que já tem os cadastros: Ressincronizar tudo desde o início.
  5. Para um computador cadastrar num facial que está em outro: ligue o Encaminhamento de comandos pela nuvem (e, se quiser, "Liberar acesso pela nuvem") nos dois computadores.
  6. Perfis na nuvem: marque os perfis que devem ir para a nuvem e clique em Salvar seleção. A nuvem aceita um perfil por nome e um login por operador — se dois computadores tiverem o mesmo nome, renomeie um deles.

4Como saber que está tudo certo

5Problemas comuns

MensagemO que fazer
"Could not find the function …", "PGRST202", "Rode a migração …"Rode o script único (passo 1).
"Nuvem: conflito(s) de nome" / "já existe outro perfil com esse nome"Perfil ou login repetido em outro computador: renomeie um dos dois, ou remova o outro em Perfis na nuvem → Na nuvem agora.
"NameResolutionError", "Max retries exceeded"Falha de internet/DNS naquele momento — o Contrô tenta de novo sozinho.
"permission denied", "401", "Invalid API key"Chave errada: use a chave secreta (service_role), não a anon.
"Horário da nuvem incorreto"Confira o fuso e o relógio do computador; clique em "Verificar relógio da nuvem agora".
Espaço do plano gratuito (500 MB) quase cheioA trava automática apaga o histórico de acessos mais antigo da nuvem (nunca dos computadores).

O que cada migração faz

NºO que traz
001Trava automática de espaço do banco
002Permissão para criar/apagar os meses do histórico de acessos
003Encaminhamento de cadastros para o computador que alcança o facial + presença das máquinas
004Registro de credenciais (UserIDs) entre os computadores
005O mesmo ID da pessoa no facial em todos os computadores
006Liberar acesso e acertar o horário do facial pela nuvem
007Quadro de avisos das unidades
008Índices da sincronização rápida
009Computador e operador de origem de cada cadastro
010Prazo de exposição e lixeira dos avisos
011Trava de segurança do histórico: RLS em cada partição de mês, caminho fixo nas funções e execução das funções de manutenção só pela chave secreta
012Lápide de remoção: o que você remove da nuvem (bloco, unidade, equipamento, perfil ou operador) não volta mais sozinho
013Quem emitiu cada credencial (issuer_id): a identidade do operador fica guardada no cadastro
014União de pessoas duplicadas entre as máquinas: a união feita numa máquina vale em todas
015Modelo do ID de facial de cada pessoa (antigo ou atual): a nuvem e as máquinas sabem em qual modelo cada pessoa está
016O modelo do ID de facial nunca é rebaixado: uma máquina desatualizada não desfaz o ID novo de uma pessoa
017Apagar de vez a ficha antiga de uma pessoa unida (nuvem): passa cadastros e acessos para a principal, apaga a linha e impede que ela volte
018MAC do equipamento: a nuvem guarda o MAC que cada facial informa e o compartilha entre as máquinas (só informação nesta fase, nada é bloqueado)
019Contrô Gateway: cada Gateway (o aparelho leve que fica na rede do cliente) ganha uma chave própria, que pode ser bloqueada na hora se ele for roubado, sem afetar mais ninguém
020Observação do operador: um campo de texto livre, opcional, em cada cadastro (por destino), para documentar o que for preciso
021Informações da unidade: ramal, telefone e responsável, mostrados só sob demanda (ícone ℹ️)
022Vencimento tardio não derruba renovação: um computador que ficou offline e expira um cadastro com a validade antiga não desfaz mais a renovação feita antes noutro computador (só a função de envio de cadastros; nenhuma linha muda)
023Reservada (rascunho do Gateway) — não faz parte deste script
024Reservada (rascunho do Gateway) — não faz parte deste script
025Reservada (rascunho do Gateway) — não faz parte deste script
027Apelidos de equipamento: quando dois identificadores são o mesmo facial (provado pelo MAC), o antigo vira apelido do oficial e acessos, registro e comandos que o citem passam a valer para o oficial; mais as funções que desativam (e reativam) as linhas do registro de credenciais de um facial gêmeo. Só acrescenta — nada é apagado nem movido
026CPF do operador: o CPF que a própria pessoa digita no primeiro acesso passa a subir com o operador e reconhece a mesma pessoa em todos os computadores (índice único; o Contrô antigo continua funcionando sem esta migração)