# Impressora de etiquetas AL-3179 (Bluetooth)

Impressão direta de etiquetas de preço a partir do UmFlux (Precificação e Pré-vencidos)
na mini printer térmica **AL-3179** (ESC/POS ~58 mm).

## Arquitetura

O browser **não** fala Bluetooth clássico sozinho. O UmFlux monta os bytes ESC/POS e envia para um **agente local** em `http://127.0.0.1:17355`:

| Plataforma | Agente |
| --- | --- |
| Windows | [`tools/umflux-bt-print-agent/`](../../tools/umflux-bt-print-agent/) |
| Android | [`android/umflux-bt-print/`](../../android/umflux-bt-print/) |

Se o agente estiver parado e o Chrome tiver Web Bluetooth BLE, o cliente tenta BLE como fallback.

## Windows (loja)

1. Pareie a AL-3179 em **Definições → Bluetooth** do Windows. Anote a porta **COM** (Gestor de dispositivos → Portas).
2. Na pasta do repositório:

```bat
cd tools\umflux-bt-print-agent
start-windows.bat
```

Ou:

```bat
cd tools\umflux-bt-print-agent
npm install
npm start
```

3. Opcional: force a COM:

```bat
set UMFLUX_BT_PRINT_COM=COM5
npm start
```

4. Abra `https://umflux.tech` → Precificação → **Testar impressora** ou **Etiqueta** numa linha.

Mantenha a janela do agente aberta (ou crie um atalho no arranque da sessão).

## Android

1. No telemóvel, abra o Chrome em `https://umflux.tech`, busque **app**, **apk** ou **downloads**
   em **Buscar módulo**, abra **Downloads · App Android** e toque em **Descarregar APK**.
   Ligação direta: **https://umflux.tech/downloads/umflux-bt-print.apk**
   (também há o botão **Descarregar app Android** na Precificação).
2. Permita instalar de fontes desconhecidas se o Android pedir.
3. Pareie a AL-3179 no telemóvel.
4. Abra **UmFlux Print**, escolha a impressora, toque em **Iniciar agente**.
5. No Chrome do mesmo aparelho, use as etiquetas no site.

O APK é gerado automaticamente (GitHub Actions) a partir de
[`android/umflux-bt-print/`](../../android/umflux-bt-print/).

## Conteúdo da etiqueta

- Nome da rede
- Descrição (até 2 linhas)
- Código interno + EAN
- Preço em destaque
- Código de barras Code128 (quando houver EAN)
- Validade (pré-vencidos) + filial/data

## API do agente

- `GET /health`
- `GET /devices`
- `POST /print` — body JSON `{ "escposBase64": "...", "deviceId": "COM5|AA:BB:..." }`
- `POST /select` — guarda `deviceId` predefinido

Escuta **apenas** `127.0.0.1` (não expõe na rede da loja).

## Resolução de problemas

| Sintoma | O que fazer |
| --- | --- |
| «Agente local parado» | Arranque o `.bat` / app Android |
| Falha ao escrever na COM | Confirme a porta; desligue outros apps POS; re-pareie o BT |
| Barcode em branco | Firmware sem Code128 — o texto EAN/preço continua a sair |
| iOS | Fora de escopo neste MVP |
