πŸ’§

Wassalon

Eigenaar-portal

{{ error }}

We sturen je een link via e-mail. Klik erop en je bent ingelogd β€” geen wachtwoord nodig.

{{ error }}

βœ“ Mail verstuurd naar {{ email }}. Check je inbox (en spam-folder).

Geen account? Vraag de wassalon-installateur om je toe te voegen.

πŸ’§

Wassalon-portal

{{ session.user.email }}

Geen wassalon gekoppeld aan dit account.

Vraag de installateur om je als eigenaar toe te voegen.

{{ wassalons[0].name }} β€” {{ wassalons[0].location }}
{{ loading ? 'Laden…' : ('Laatste sync: ' + lastSyncDisplay) }}

Periode

Geselecteerd: {{ periodLabel }} β€” {{ txInRange.length }} transacties

Totale omzet

€ {{ rangeRevenue.toFixed(2) }}

Transacties

{{ txInRange.length }}

Gemiddelde transactie

€ {{ rangeAvg.toFixed(2) }}

Omzet over tijd

{{ rangeBinLabel }}
Geen data in deze periode

Top machines

Betaalmethode

Maandomzet

Jaartotaal {{ selectedYear }}

€ {{ yearTotal(selectedYear).toFixed(2) }}

Vorig jaar ({{ selectedYear - 1 }})

€ {{ yearTotal(selectedYear - 1).toFixed(2) }}

Verschil

{{ yoyDelta > 0 ? '+' : '' }}{{ yoyDelta.toFixed(1) }}%

Jaaromzet

Nog geen jaardata

Patroon-analyses

Gemiddelde omzet per categorie binnen de gekozen periode. Helpt bij staffing en machine-onderhoud-planning.

Per weekdag

Beste dag: {{ bestWeekday }}

Per uur (0-23u)

Drukste uur: {{ bestHour }}

Per maand

Sterkste maand: {{ bestMonth }}

Bezetting (machine-minuten)

Donkerder cellen = drukker. Vertelt wanneer extra capaciteit het nuttigst zou zijn. Berekend uit transactie-duur Γ— tijdstip in de gekozen periode.

Geen data om te tonen
{{ h - 1 }}

Drukste uur: {{ heatmapPeak }}

Betrouwbaarheid per machine

Percentage van de gekozen periode dat de machine niet als defect gemarkeerd stond. Sorteert oplopend zodat de meest problematische machines bovenaan staan.

Geen machine-events in deze periode
Machine Uptime Defect-tijd # storingen
{{ machineDisplay(row.machineId) }} {{ row.uptimePct.toFixed(1) }}% {{ formatDuration(row.defectMs) }} {{ row.incidents }}

Filters

{{ filteredTx.length }} transactie{{ filteredTx.length === 1 ? '' : 's' }}

Totaal: € {{ filteredTotal.toFixed(2) }}
Laden…
Geen transacties matchen deze filters.
Tijd {{ sortDir === 'desc' ? '↓' : '↑' }} Machine Methode Min {{ sortDir === 'desc' ? '↓' : '↑' }} Bedrag {{ sortDir === 'desc' ? '↓' : '↑' }}
{{ formatTime(t.ts) }} {{ machineLabel(t) }} {{ t.payment_method || 'cash' }} {{ t.minutes != null ? t.minutes : 'β€”' }} € {{ (t.amount_cents/100).toFixed(2) }}
{{ (txPage - 1) * txPageSize + 1 }}–{{ Math.min(txPage * txPageSize, filteredTx.length) }} van {{ filteredTx.length }}
{{ txPage }} / {{ totalPages }}

ID: {{ expandedTxId }}

SumUp tx-id: {{ expandedTx.sumup_tx_id }}

Order-id: {{ expandedTx.raw.order_id }}

Lokale machine: {{ expandedTx.raw.local_machine_id }}

{{ JSON.stringify(expandedTx?.raw || {}, null, 2) }}

Nog geen machines geconfigureerd.

{{ group.label }}

{{ group.activeCount }} van {{ group.machines.length }} actief

{{ bulkActief[group.kind] }} / {{ group.machines.length }}

Toepassen zet {{ group.label.toLowerCase() }} 1 t.e.m. {{ bulkActief[group.kind] }} op actief, de rest op inactief.

{{ kindLabel(m.kind) }} {{ m.number }}
{{ effectiveCapacity(m) }} kg
€
Geen actieve {{ group.label.toLowerCase() }} β€” gebruik de stepper hierboven om te activeren.

{{ cmdSent.length }} wijziging{{ cmdSent.length===1?'':'en' }} verzonden, kassa verwerkt binnen 30s