๐Ÿ’ง

Wassalon

Eigenaar-portal

{{ error }}

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.

{{ loading ? 'Ladenโ€ฆ' : ('Laatste sync: ' + lastSyncDisplay) }}

Periode

Geselecteerd: {{ periodLabel }} โ€” over {{ wassalons.length }} wassalons ({{ rangeTxCount }} transacties totaal)

Totale omzet โ€” alle wassalons

โ‚ฌ {{ rangeRevenue.toFixed(2) }}

Transacties

{{ rangeTxCount }}

Gemiddelde transactie

โ‚ฌ {{ rangeAvg.toFixed(2) }}

Omzet per wassalon

Geen data in deze periode

Totale omzet over tijd

{{ rangeBinLabel }}
Geen data in deze periode

Top machines (alle wassalons)

Betaalmethode (totaal)

Jaaromzet per wassalon

Gestapelde balken โ€” toont welke wassalon hoeveel bijdraagt aan het totaal per jaar.

Nog geen jaardata

Per wassalon โ€” detail

Wassalon Omzet Transacties Gem. transactie
{{ name }} โ‚ฌ {{ byWassalon.values[i].toFixed(2) }} {{ byWassalon.txCounts[i] }} โ‚ฌ {{ byWassalon.txCounts[i] > 0 ? (byWassalon.values[i] / byWassalon.txCounts[i]).toFixed(2) : '0.00' }}

Periode

Geselecteerd: {{ periodLabel }} โ€” {{ rangeTxCount }} transacties

Totale omzet

โ‚ฌ {{ rangeRevenue.toFixed(2) }}

Transacties

{{ rangeTxCount }}

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) }}

Kassa {{ kassaStatus.online ? 'online' : 'offline' }} โ€” laatst gezien {{ kassaStatus.ageLabel }}

Nog geen machines geconfigureerd.

{{ group.label }}

{{ kindLabel(m.kind) }} {{ m.number }}
Defect Bezet โ€” nog {{ remainingMinutes(m) }} min Vrij
Geen actieve {{ group.label.toLowerCase() }} โ€” activeer ze in de Instellingen-tab.

Kassa {{ kassaStatus.online ? 'online' : 'offline' }} โ€” laatst gezien {{ kassaStatus.ageLabel }}

{{ kassaStatus.message }}

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