# Pedido de Uniforme / EPI

App simples e **separado** do sistema de RH. O usuário loga, escolhe um funcionário
(que já tenha **Matrícula**), monta um **pedido de uniformes/EPI** e gera o resultado
em **XLSX, CSV ou PDF** (a ficha de EPI no mesmo layout que vocês já usam).

> O app **só lê** do banco. Ele **não grava nada** — o resultado é sempre um arquivo
> para download (planilha para o almoxarifado ou a ficha em PDF).

## Estrutura (monorepo pnpm)

```
Almoxarifado/
  package.json           -> scripts do workspace
  pnpm-workspace.yaml
  apps/
    api/                 -> API Node + Express (lê o banco e gera XLSX/CSV/PDF)
      src/templates/ficha-epi.html   -> layout da ficha de EPI (PDF)
    frontend/            -> React + MUI (as telas)
```

## Como rodar

Na **raiz** do projeto:

```bash
pnpm install
```

Depois, para subir **os dois ao mesmo tempo**:

```bash
pnpm dev
```

Ou separadamente, em dois terminais:

```bash
pnpm dev:api
```

```bash
pnpm dev:frontend
```

- API: `http://localhost:3333`
- Front: `http://localhost:5173`
- As credenciais do banco e o `JWT_SECRET` ficam em `apps/api/.env`
  (**nunca** versione esse arquivo).

## O fluxo

1. **Login** — usuário e senha do sistema (valida em `usuarios` com bcrypt).
2. **Colaborador** — busca por nome, matrícula ou CPF. Só aparecem os que **têm Matrícula**.
3. **Adicionar uniformes** — escolhe uniforme + tamanho (dos disponíveis) + quantidade.
4. **Gerar XLSX / CSV / PDF**:
   - **XLSX/CSV** — planilha do pedido para o almoxarifado (sistema Python).
   - **PDF** — a ficha de EPI preenchida (mesmo layout de `pdf-almox.html`).

## Colunas da planilha (XLSX/CSV)

`Matricula, Nome, CPF, Contrato, Centro de Custo, Cargo, Uniforme, CA, Tamanho,
Quantidade, Valor Unitario, Valor Total, Solicitante_ID, Data`

> Para casar com o importador em Python, ajuste a constante `COLUNAS` em
> `apps/api/src/routes/pedidos.routes.js`.

## O PDF (ficha de EPI)

- O layout fica em `apps/api/src/templates/ficha-epi.html` (cópia do `pdf-almox.html`).
- Os campos `{{...}}` são preenchidos no backend antes de renderizar.
- A renderização usa **puppeteer** (Chromium headless) — baixado no `pnpm install`.

## Pontos que talvez você queira ajustar

- **Hash da senha:** implementado com **bcrypt** (padrão do seu `verifyPassword`).
  Se o login não validar, me mande `src/utils/password.ts`.
- **Só colaboradores ativos:** hoje mostra todos com Matrícula. Para filtrar apenas
  ativos, adicione `AND c.Ativo = 1` na query em
  `apps/api/src/routes/colaboradores.routes.js`.
- **Margens/estilo do PDF:** ajustáveis em `htmlParaPdf()` e no próprio template.

## ⚠️ Segurança

- A senha do MySQL estava **escrita direto** no `conn.ts` do sistema atual.
  Considere **trocá-la** e mantê-la só em `apps/api/.env` (fora do código e do Git).
