# Prompt voor Grok — koppel een Taply-kassa aan Kerno

Kerno en Taply zijn aparte producten. Kerno host de kassa niet.
Deze zip drop je in een Taply (of je plakt deze prompt in Grok op de tablet).

---

Je werkt in een Taply POS-app (kassa, tablet). Voeg een Kerno-boekhoudkoppeling toe. Wijzig zo weinig mogelijk.

## Wat Kerno is
Kerno is boekhouden + loon. Bij het sluiten van een shift stuur je één ondertekend Z-rapport. Kerno boekt 6/12/21 als dagontvangsten, houdt fooien buiten de omzet, en is idempotent op shift-id.

## Bestanden (niet herschrijven)
- `kerno-bridge.js` — drop-in, ONGEWIJZIGD in `src/lib/` (of equivalent).
- `kerno.config.js` — per vestiging, gegenereerd door Kerno. VenueId + HMAC-secret.
- `kerno-bridge.d.ts` — types.
- `wire-shift-close.example.js` — voorbeeld-hook.

## Protocol `kerno.taply.v1`
POST naar het `endpoint` in `kerno.config.js` (`/api/taply/webhook`).

Headers:
- `content-type: application/json`
- `x-kerno-venue: <venueId>`
- `x-kerno-timestamp: <unix seconds>`
- `x-kerno-signature: v1=<hmac-sha256-hex>`

HMAC-SHA256 over `{unix}.{rawJson}` met de secret uit kerno.config.js.
Timestamp max 15 minuten scheef.

Body (Z-rapport): vat-bedragen INCLUSIEF. `tips` en `payouts` horen niet in omzet of btw.

## Wat jij moet doen
1. Plaats `kerno-bridge.js` en `kerno.config.js` naast elkaar.
2. Zoek de bestaande functie die de shift sluit / het Z-rapport print.
3. Voeg daar `await kerno.sendZReport({...})` toe. Map de bestaande velden. Fire-and-forget: een netwerkfout mag de kassa niet blokkeren (de bridge queued tot 50 rapporten in localStorage).
4. Geen tweede boekhouding in Taply. Geen eigen factuurnummers. Geen btw-aangifte.
5. Nieuwe vestiging later = nieuwe `kerno.config.js` (andere venueId + secret), zelfde bridge-bestand.

Klaar als: shift-close in Taply → in Kerno verschijnt een betaalde verkoopfactuur “Dagontvangsten \<kassanaam\>” met lijnen 6/12/21.
