# Scale Hub (MVP — mock)

Microservicio local para **pesaje** con múltiples balanzas (mock), pensado para correr en una Mac del club y exponer:

- UI web para celular (misma LAN/Wi‑Fi)
- API HTTP + streaming (SSE) por balanza

## Run

Desde el repo:

```bash
node apps/scale-hub/src/main.js
```

Abrí `http://<IP-de-tu-Mac>:4815` desde el celular conectado al mismo Wi‑Fi.

Variables opcionales:

- `PORT` (default `4815`)
- `HOST` (default `0.0.0.0`)
- `SESSION_TTL_MS` (default `1800000` = 30 min)

## Mock (0 → 5.00 g)

Esta versión simula 4 balanzas (`scale-1..scale-4`) con resolución **0.01 g** y rango **0–5.00 g**.

## API (resumen)

- `GET /health`
- `GET /v1/devices`
- `GET /v1/devices/:deviceId`
- `GET /v1/devices/:deviceId/weight`
- `GET /v1/devices/:deviceId/stream` (SSE: eventos `weight` y `session`)
- `POST /v1/devices/:deviceId/session/open` `{ "operatorName": "..." }`
- `POST /v1/devices/:deviceId/session/close` (header `x-session-key`)
- `POST /v1/devices/:deviceId/tare` (header `x-session-key`)
- `POST /v1/devices/:deviceId/tare/clear` (header `x-session-key`)
- `POST /v1/devices/:deviceId/capture` (header `x-session-key`) `{ "context": { ... } }`
- `GET /v1/captures?limit=50`
- `POST /v1/devices/:deviceId/mock/mode` (header `x-session-key`) `{ "mode": "auto" | "manual" }`
- `POST /v1/devices/:deviceId/mock/set` (header `x-session-key`) `{ "grams": 1.23 }`

