← Anterior: [Acesso pela rede](https://iurru.com/manual/Acesso-pela-rede) · [Manual](https://iurru.com/manual/) · Próxima: [Atalhos de teclado](https://iurru.com/manual/Atalhos-de-teclado)

# 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:

1. 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](#como-o-app-garante-que-o-instalador-não-foi-adulterado)).
2. 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:

1. 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.
2. 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.
3. 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](https://iurru.com/manual/Preferencias) → **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

1. Confira a internet e tente de novo em **Preferências → Verificar**.
2. Veja o [Log do sistema](https://iurru.com/manual/Compras-e-NF#log-do-sistema) — falhas de download
   e de verificação ficam registradas ali, com a hora exata.
3. 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.
4. Se mesmo assim persistir, envie um
   [relatório de erro](https://iurru.com/manual/Interface#relatório-de-erro-bug-report) ao suporte —
   ele já inclui o registro técnico da tentativa de instalação, não só o
   log geral do programa.

---

← Anterior: [Acesso pela rede](https://iurru.com/manual/Acesso-pela-rede) · [Manual](https://iurru.com/manual/) · Próxima: [Atalhos de teclado](https://iurru.com/manual/Atalhos-de-teclado)
