# Manual de Instalação — Sistema de Senhas

Guia completo para instalar o sistema de senhas em um servidor do cliente pela primeira vez.

O sistema é composto por:

- **Backend**: pasta `mvp-senhas` (servidor Node.js com a API e o banco em arquivo JSON).
- **Frontend**: pasta `mvp-senhas-ui` (interface moderna em React, que precisa ser "compilada" antes de ir pro servidor).

Quando o sistema é instalado, o frontend já vem **embutido** dentro da pasta `mvp-senhas/public`. O servidor entrega tudo na mesma porta.

---

## Parte A — Preparar o pacote (na sua máquina)

Você só faz isso uma vez, antes de levar o sistema pro servidor do cliente.

### A1. Pré-requisitos

Na sua máquina precisa estar instalado:

- **Node.js LTS** (versão 20 ou superior): https://nodejs.org/

Confirme no prompt:

```bat
node -v
npm -v
```

### A2. Instalar dependências do frontend

Abrir o prompt na pasta `mvp-senhas-ui`:

```bat
cd "Sistema de Senha Novo\mvp-senhas-ui"
npm install
```

Esse passo só precisa rodar uma vez (ou quando atualizar dependências).

### A3. Gerar o build da interface

Ainda na pasta `mvp-senhas-ui`:

```bat
npm run build
```

Isso cria uma pasta `dist/` com o frontend pronto pra produção (HTML, CSS e JS otimizados).

### A4. Substituir o `public` do backend

1. Apagar todo o conteúdo de `Sistema de Senha Legado\mvp-senhas\public\`.
2. Copiar **todo o conteúdo** da pasta `mvp-senhas-ui\dist\` pra dentro de `mvp-senhas\public\`.

Resultado: dentro de `mvp-senhas\public\` deve ter `index.html`, uma pasta `assets/` e demais arquivos do build.

### A5. Compactar o pacote

Compactar a pasta `mvp-senhas` inteira em um `.zip`. Esse zip é o que vai pro servidor.

---

## Parte B — Instalar no servidor do cliente

### B1. Escolher o servidor

Use um computador que fique sempre ligado:

- servidor Windows da empresa;
- computador dedicado na recepção;
- mini PC ligado na rede;
- servidor virtual interno.

**Evite notebook pessoal** — se desligar, todos perdem acesso.

### B2. Instalar Node.js no servidor

Baixar e instalar Node.js LTS (versão 20 ou superior):

https://nodejs.org/

Confirmar no Prompt de Comando do servidor:

```bat
node -v
```

### B3. Copiar a pasta do sistema

Extrair o zip preparado na Parte A para um caminho fixo, por exemplo:

```text
C:\Sistemas\mvp-senhas
```

### B4. Criar o arquivo `.env`

Dentro de `C:\Sistemas\mvp-senhas`, criar um arquivo chamado `.env` (sem extensão `.txt`) com o conteúdo:

```env
PORT=3030
APP_NAME=Atendimento
SESSION_SECRET=troque-por-um-texto-grande-e-aleatorio
COOKIE_SECURE=false
DATA_FILE=data/state.json
TRUST_PROXY=false
```

Atenção:

- Troque o `SESSION_SECRET` por um texto longo e aleatório (qualquer combinação de letras e números, ex: `kJ8m2nP9xR4tQ7vW1yU6`).
- `COOKIE_SECURE=false` é o correto pra rede interna sem HTTPS. **Não mude para `true`** a menos que esteja servindo via HTTPS.

### B5. Primeiro teste

No Prompt de Comando, dentro da pasta:

```bat
cd C:\Sistemas\mvp-senhas
node server.js
```

Se aparecer mensagem indicando que o servidor está rodando na porta `3030`, está correto.

Abrir no navegador do próprio servidor:

```text
http://localhost:3030
```

Deve aparecer a tela de login.

### B6. Primeiro acesso

Logar com o usuário administrador de suporte:

- **Usuário**: `admin`
- **Senha**: `Adm1nC&bi14863`

⚠️ **NÃO trocar a senha do `admin`.**

Esse usuário e senha são **padrão de suporte da CEBI** — é o que garante que a equipe de suporte consiga acessar o sistema em produção a qualquer momento (pra resolver problema, aplicar correção, ajudar o cliente).

Em vez de trocar a senha do `admin`, o procedimento correto é:

1. Entrar **uma vez** com o `admin` (só pra criar usuários iniciais).
2. **Criar os administradores do cliente** em **Administração → Funcionários → Adicionar** (ver passo B11).
3. Daí em diante, o pessoal do cliente trabalha com os usuários próprios deles. O `admin` fica reservado pra suporte.

> Se por qualquer motivo a senha do `admin` for trocada na produção, comunique a equipe de suporte imediatamente — caso contrário, perde-se o acesso de suporte naquele cliente.

### B7. Liberar firewall

No Windows Firewall do servidor, liberar entrada **TCP na porta 3030**:

1. Abrir "Windows Defender Firewall com Segurança Avançada".
2. Regras de Entrada → Nova Regra → Porta → TCP → 3030 → Permitir conexão.
3. Aplicar a todos os perfis (Domínio, Particular, Público — ou conforme política do cliente).
4. Nomear a regra (ex: "Sistema de Senhas").

Sem isso, o sistema funciona no próprio servidor mas não abre nos outros computadores da rede.

### B8. Acessar de outras máquinas

Em outros computadores da rede:

```text
http://IP_DO_SERVIDOR:3030
```

Exemplos:

```text
http://192.168.0.50:3030
http://SERVIDOR-SENHAS:3030
```

Pra descobrir o IP do servidor, no próprio servidor:

```bat
ipconfig
```

E procurar "IPv4" na seção da placa de rede ativa.

### B9. Rodar automaticamente ao ligar o servidor

Em produção, o sistema precisa subir sozinho quando o servidor reinicia.

#### Opção simples — Agendador de Tarefas do Windows

1. Abrir "Agendador de Tarefas".
2. Criar tarefa (não criar tarefa básica).
3. **Geral**: marcar "Executar com privilégios mais altos".
4. **Disparadores**: novo → "Ao iniciar o computador".
5. **Ações**: nova → Programa: `node` — Argumentos: `server.js` — Iniciar em: `C:\Sistemas\mvp-senhas`.
6. **Configurações**: desmarcar "Parar a tarefa se executar por mais de...".
7. Salvar e testar reiniciando o servidor.

#### Opção mais robusta — NSSM (recomendada)

Permite rodar como serviço Windows de verdade, com restart automático em caso de queda.

1. Baixar NSSM: https://nssm.cc/
2. Abrir prompt como admin e executar `nssm install SistemaSenhas`.
3. Application Path: `C:\Program Files\nodejs\node.exe`
4. Startup directory: `C:\Sistemas\mvp-senhas`
5. Arguments: `server.js`
6. Salvar e iniciar: `nssm start SistemaSenhas`.

### B10. Backup obrigatório

O sistema guarda os dados do cliente em **dois lugares distintos**:

| O que                                          | Contém                                                       |
| ---------------------------------------------- | ------------------------------------------------------------ |
| `C:\Sistemas\mvp-senhas\data\state.json`       | Usuários, guichês, salas, configurações, prioridades, motivos, senhas emitidas, histórico, auditoria |
| `C:\Sistemas\mvp-senhas\public\logo.png`       | Logo do cliente (enviado pelo Admin)                         |
| `C:\Sistemas\mvp-senhas\.env`                  | Configuração local (porta, segredo de sessão)                |

Configurar backup diário automático **dos três itens acima**. Sugestões:

- Robocopy + Task Scheduler agendado pra rodar diariamente;
- Cópia pra outro disco / drive de rede;
- Backup corporativo (Veeam, etc) incluindo essas pastas/arquivos.

Manter pelo menos 7 cópias (uma por dia da última semana). Recomendado também 1 cópia mensal pra arquivamento.

#### Exemplo de comando de backup (Robocopy)

```bat
robocopy C:\Sistemas\mvp-senhas\data C:\Backup-Senhas\%DATE:~6,4%-%DATE:~3,2%-%DATE:~0,2%\data /E
copy C:\Sistemas\mvp-senhas\public\logo.png C:\Backup-Senhas\%DATE:~6,4%-%DATE:~3,2%-%DATE:~0,2%\logo.png
copy C:\Sistemas\mvp-senhas\.env C:\Backup-Senhas\%DATE:~6,4%-%DATE:~3,2%-%DATE:~0,2%\.env
```

Cria uma pasta com data do dia e copia os três artefatos.

### B11. Configuração inicial dentro do sistema

Já logado como admin, configurar:

#### Funcionários

**Administração → Funcionários**:

- **Não mexer no usuário `admin`** — ele é reservado pra suporte da CEBI. Não trocar senha nem desativar.
- **Cadastrar pelo menos um administrador do cliente** (com login próprio, ex: nome do responsável pelo sistema na empresa). É esse usuário que o cliente vai usar pra gerenciar o sistema no dia a dia.
- Cadastrar os atendentes (perfil `atendente`).
- Cada usuário recebe login próprio e senha inicial (pelo menos 6 caracteres).
- Vincular cada atendente a um guichê e sala padrão (opcional, mas recomendado).
- Combinar com o cliente que o dia a dia deve ser feito com os usuários dele — o `admin` só é usado por suporte em casos excepcionais.

#### Guichês

**Administração → Guichês**:

- Cadastrar os guichês físicos (ex: "Guichê 1", "Guichê 2").
- Ativar/desativar conforme necessário.

#### Salas

**Administração → Salas**:

- Cadastrar as salas de atendimento.
- Vincular os atendentes que podem trabalhar em cada sala.

#### Configurações gerais

**Administração → Configurações**:

- Nome da empresa/órgão (aparece no painel e no topo da interface).
- Lógica de prioridade (FIFO / alternância configurável).
- Reset automático do dia (se quiser que zere automaticamente após X horas sem movimento).
- Outras opções (som, tempo de chamada, etc).

#### Logo do cliente

**Administração → Configurações → Logo**:

1. Clicar em "Carregar logo" (ou área equivalente).
2. Selecionar o arquivo de imagem do cliente (PNG recomendado, com fundo transparente).
3. Confirmar o upload.

O logo aparece automaticamente em:

- Topo da interface (todas as telas);
- Tela do Painel (TV);
- Tela do Totem/Recepção.

**Importante saber pra atualizações futuras**:

- O logo do cliente é gravado diretamente como `C:\Sistemas\mvp-senhas\public\logo.png` no servidor.
- Quando você for atualizar o sistema (substituir a pasta `public\`), **o logo do cliente precisa ser preservado** — caso contrário ele será sobrescrito pelo logo padrão que vem no pacote. Ver o **Manual de Atualização** pra o procedimento correto.
- Backup recomendado: incluir `public\logo.png` na rotina de backup junto com o `data\state.json`.

### B12. Telas do sistema

Cada terminal abre a tela conforme a função:

| Tela            | URL/Caminho                       | Uso                                            |
| --------------- | --------------------------------- | ---------------------------------------------- |
| Recepção        | http://IP:3030 → Recepção         | Emitir senhas (totem ou recepcionista)         |
| Atendimento     | http://IP:3030 → Atendimento      | Atendente chama/finaliza senhas                |
| Painel (TV)     | http://IP:3030 → Painel           | TV grande mostrando senhas chamadas (com som)  |
| Histórico       | http://IP:3030 → Histórico        | Consulta histórico do dia                      |
| Administração   | http://IP:3030 → Administração    | Só pra usuários admin                          |

#### Painel na TV

1. Abrir o navegador na TV.
2. Acessar `http://IP_DO_SERVIDOR:3030`.
3. Fazer login (pode criar um usuário específico tipo "painel" com permissão apenas de visualização).
4. Entrar em **Painel**.
5. Clicar uma vez na tela pra ativar o som (browsers bloqueiam áudio sem interação do usuário).
6. Pressionar **F11** pra tela cheia.

### B13. Validação final

Antes de entregar pro cliente, testar:

- [ ] Emitir uma senha comum na Recepção.
- [ ] Chamar a senha em Atendimento de outro computador.
- [ ] Ver a senha sendo anunciada no Painel (com som).
- [ ] Finalizar a senha.
- [ ] Conferir o registro em Histórico.
- [ ] Reiniciar o servidor e confirmar que o sistema sobe sozinho.
- [ ] Confirmar backup do `data\state.json`.

---

## Resumo dos caminhos importantes

| Arquivo/pasta                                      | Para que serve                                |
| -------------------------------------------------- | --------------------------------------------- |
| `C:\Sistemas\mvp-senhas\server.js`                 | Inicia o servidor                             |
| `C:\Sistemas\mvp-senhas\.env`                      | Configuração de porta, sessão, etc            |
| `C:\Sistemas\mvp-senhas\data\state.json`           | **Banco de dados** (fazer backup diário)      |
| `C:\Sistemas\mvp-senhas\public\`                   | Interface (HTML/JS/CSS gerados do React)      |
| `C:\Sistemas\mvp-senhas\src\`                      | Código do backend Node.js                     |

---

## Problemas comuns

### "Funciona no servidor mas não abre nos outros computadores"

- Firewall não liberado (passo B7).
- IP do servidor mudou (servidor sem IP fixo). Considere reservar IP no DHCP.

### "Login não funciona depois de algumas horas"

- O sistema mantém sessão por **8 horas** absolutas. Após esse tempo o usuário precisa fazer login de novo.
- Se o servidor reinicia, todas as sessões caem (comportamento esperado).

### "O servidor não sobe ao reiniciar"

- Verificar se a tarefa do Agendador / serviço NSSM está configurada (passo B9).
- Conferir se o `node.exe` está no PATH ou se o caminho completo foi usado na configuração do serviço.

### "Som do painel não funciona"

- Clicar uma vez na tela depois de abrir o Painel — é uma restrição dos navegadores.
- Conferir o volume do sistema operacional.

---

## Limitações desta versão

Esta versão é adequada para **um cliente/unidade em rede interna**.

Não é ideal para:

- vários clientes diferentes no mesmo portal (multi-tenancy);
- exposição pública na internet sem HTTPS/proxy reverso;
- alto volume (centenas de atendentes simultâneos);
- integração com banco corporativo (Oracle/SQL Server);
- controle avançado de infraestrutura.

Para esses casos, planejar evolução pra arquitetura corporativa.