# Kerno ↔ Taply brug

Kerno en Taply zijn aparte producten. Kerno host geen kassa.
Eén bestand, N kassa’s. `kerno-bridge.js` is overal hetzelfde. Alleen `kerno.config.js` verschilt per vestiging.

## Koppelen

1. In Kerno → Taply → **Nieuwe kassa** (vrije naam).
2. Download de koppel-zip.
3. Upload die zip in de Taply-app, **of** open `GROK.md` en plak de prompt in Grok op de tablet van die kassa.

```
jouw-taply/
  src/lib/kerno-bridge.js      ← ongewijzigd
  src/lib/kerno.config.js      ← deze vestiging (venueId + secret)
  src/pos/close-shift.ts       ← ~8 regels, zie wire-shift-close.example.js
```

Toekomstige Taply: zelfde bridge, nieuwe config uit Kerno.

## Protocol `kerno.taply.v1`

POST `/api/taply/webhook`

| Header               | Waarde                          |
| -------------------- | ------------------------------- |
| `x-kerno-venue`      | venueId                         |
| `x-kerno-timestamp`  | unix seconds                    |
| `x-kerno-signature`  | `v1=<hmac-sha256-hex>`          |

HMAC over `{unix}.{rawJson}`. Timestamp max 15 min. Fooien en uitgenomen blijven buiten omzet én btw. Idempotent op Z-rapport-id.

Roteer de sleutel in Kerno vóór live. Demo-sleutels (als je die ooit ziet) zijn publiek.
