Atualização do aplicativo
O sistema se atualiza sozinho. Não é preciso baixar instalador, entrar em site nem executar arquivo à mão — o app baixa, confere e instala a versão nova por conta própria, e ainda faz uma cópia de segurança do banco antes de tocar em qualquer arquivo.
Como a verificação chega até você
Não existe uma conexão dedicada a isso. A cada 30 minutos (electron/periodic-check.ts) o app faz uma única requisição ao servidor — a mesma que confere se a licença continua válida — e é dentro dessa mesma resposta que vem a informação "existe versão nova". Enquanto o servidor não anexa essa informação, a checagem simplesmente não acontece: sem erro, sem aviso, sem segunda tentativa. Essa unificação (uma checagem, uma requisição) é regra estrutural do projeto — ver a seção correspondente no CLAUDE.md do repositório se quiser o motivo completo.
Quando o servidor informa uma versão maior que a instalada:
- O app baixa em segundo plano, sem interromper quem está trabalhando, e confere a integridade do arquivo baixado (ver Como o app garante que o instalador não foi adulterado).
- A instalação acontece na primeira abertura do dia — e só uma vez por dia, não importa quantas vezes o app for reaberto na sequência.
Duas regras de conduta, por decisão de produto
Nunca instala no meio do expediente. O ciclo periódico só baixa; instalar sozinho durante uma venda em andamento seria pior que esperar. A única exceção é quando o servidor marca a atualização como importante/urgente — mesmo aí, o app só avisa na hora com um modal; quem decide o momento de efetivamente instalar continua sendo o operador, não o sistema.
Uma instalação automática por dia, no máximo. Reabrir o app dez vezes na mesma manhã não gera dez tentativas de instalação — a data da última instalação automática fica registrada, e o app só tenta de novo no dia seguinte (ou se o operador pedir manualmente).
Cópia de segurança antes de qualquer instalação
Sempre, antes de sobrescrever os arquivos do programa — silenciosa, automática ou disparada manualmente pelo botão —, o app copia o banco de dados (data/pdv.db) e as fotos de produto (product-images/) para uma pasta de backup cifrada, com carimbo de data/hora e da versão. Se essa cópia falhar por qualquer motivo, a atualização é adiada: não existe caminho, neste sistema, que sobrescreva os arquivos do cliente sem uma cópia de segurança bem-sucedida antes.
- Só as 5 cópias mais recentes ficam guardadas — as mais antigas são apagadas automaticamente.
- Hoje não existe um botão de "restaurar" essa cópia pela interface — o que existe é a garantia de que ela foi feita. Recuperar um backup, se um dia for necessário, é trabalho de suporte técnico.
- A cifra usada é a mesma "classe pesada" reservada a dado sensível neste projeto (AES-256-GCM, chave derivada via addon nativo compilado, não JavaScript puro) — o mesmo padrão usado para proteger o próprio instalador contra adulteração, explicado a seguir.
Como o app garante que o instalador não foi adulterado
O instalador do PDV Autopeças não tem assinatura digital própria — em vez disso, o sistema confere um hash (SHA-256) publicado junto com a versão:
- O download só é aceito se vier por conexão segura (HTTPS) e se o servidor publicou um hash para conferência — sem os dois, não baixa.
- O arquivo chega com um nome temporário e só passa a ser reconhecido como "instalador pronto" depois de bater o hash — um download que falhou ou foi interrompido no meio nunca é confundido com um instalador válido.
- O hash é conferido de novo, na hora exata de instalar — o arquivo já estava salvo no disco desde o download, e pode ter sido trocado nesse intervalo (por exemplo, por outro programa malicioso na máquina).
Isso protege contra um instalador corrompido ou trocado localmente, na própria máquina do cliente. Não é proteção contra o servidor de atualização em si ser comprometido — o hash conferido vem da mesma origem que o próprio instalador.
Atualizar manualmente
Em Preferências → Atualização do aplicativo:
- Versão instalada — a versão que está rodando agora nesta máquina;
- Verificar — consulta o servidor na hora, sem esperar o próximo ciclo de 30 minutos;
- Baixar e atualizar — dispara o download com barra de progresso visível;
- ao final do download: "Download concluído. Instalando…" — o app se fecha, o instalador roda (sem pedir nada, já reaproveitando os dados da instalação existente) e o programa reabre sozinho.
Quando já está tudo em dia: "Você já está na versão mais recente." Quando não há nada publicado ainda: "Nenhuma atualização disponível no momento."
Clicar Baixar e atualizar duas vezes seguidas, ou clicar bem na hora em que o ciclo automático de 30 minutos também está baixando a mesma versão, não gera dois downloads concorrentes disputando o mesmo arquivo — o app percebe que já existe um download daquela versão em andamento e aproveita o mesmo, em vez de começar outro.
O que a atualização NUNCA faz
- Não apaga nem move dados. O banco fica em
%APPDATA%\PDV Autopeças\data\pdv.db, fora da pasta de instalação do programa (%LOCALAPPDATA%\PDV Autopecas) — atualizar o programa não toca nessa pasta, e o passo de backup descrito acima é uma camada extra de segurança em cima disso, não a única proteção. - Não volta versão. O sistema recusa downgrade — nunca instala uma versão anterior à que já está rodando na máquina, porque não existe "migration de volta" pro banco de dados: uma vez que uma versão nova ajusta o esquema do banco, uma versão antiga não sabe mais lê-lo.
- Não muda suas configurações. Preferências de aparência, impressora, usuários e permissões cadastrados continuam exatamente como estavam.
Se a atualização falhar ou travar
- Confira a internet e tente de novo em Preferências → Verificar.
- Veja o Log do sistema — falhas de download e de verificação ficam registradas ali, com a hora exata.
- Persistindo — por exemplo, o app fechou pra atualizar e não voltou a abrir —, o próprio sistema tem uma verificação automática pra esse cenário: na próxima vez que o app conseguir abrir, ele confere sozinho se uma instalação tinha começado e nunca terminou, e tenta de novo automaticamente, reportando o ocorrido ao suporte sem precisar que ninguém peça.
- Se mesmo assim persistir, envie um relatório de erro ao suporte — ele já inclui o registro técnico da tentativa de instalação, não só o log geral do programa.