Welcome back

Sign in to view sales performance.

Sales Panel
—
--
Preset 1 Preset 2 Preset 3 Edit
i
Gross Sales (ESB)
—
—
i
Subtotal (incl. Discount)
—
—
i
Discount + Voucher
—
—
i
Net Sales (ESB)
—
—
i
Service Charge
—
—
i
Tax
—
—
i
Order Fee + Delivery Cost
—
Order Fee — · Delivery —
—
i
Non Sales Transaction
—
— bills
—
i
Void / Cancel (Staff)
—
No ESB sync / Cancel Menu Detail upload
—
i
Auto-Void (System)
—
No ESB sync / Cancel Menu Detail upload
—
i
Rounding
—
—
i
Bill
—
—
i
Pax
—
—
i
Avg Spend / Bill
—
—
i
Avg Spend / Pax
—
—
i
Gross Profit
Rp 0 pending
—
COGS — of Net Sales
—

Net vs Target

i

Menu Engineering Matrix

Qty Sold vs Gross Profit per category · baselines = average across categories
100%
Shift + scroll or +/− to zoom · drag to pan · pinch on touch screens

Top 20 Menu

MenuPortionVolume (Rp)

20 Worst Menu

MenuPortionVolume (Rp)

Branch Performance Ranking

BranchNet SalesGross Sales

Sales Contribution by Visit Purpose

Visit Purpose Ranking

Visit PurposeNet SalesShare

Top Promotion

Promotion Name Generated Gross Sales Total Discount (Rp) Total Voucher Discount (Rp) Expected Net Earning (Rp)

Sales Peak Hour

captured from first order time
SectionTime WindowBillsNet Sales

Hourly Traffic Heatmap

visits by day & hour, from Sales Date In
Total Visits
—
Peak Hour:
—
Low Traffic Moderate Traffic High Traffic

Top 20 Void / Cancel Approvers

i

Generated Bill & Pax (month to date)

Branch Performance Overview

Yearly Targets: Company → Brand → Branch

Computed bottom-up: fill each branch's months in “Monthly Target per Branch” below, and these Brand and Company totals roll up automatically. Names come from your Mapping Template Report groupings.

Yearly figures are computed automatically: Brand = sum of its branches' monthly targets; Company = sum of its brands. Set the numbers in "Monthly Target per Branch" below.

Monthly Target per Branch

Daily Target per Branch

Sales Peak Hour: Time Windows

These sections drive the Sales Peak Hour table on the Sales Panel. Give each window a title and an hour range (24h HH:MM). A window may wrap past midnight (e.g. 22:00 – 06:59). Bills are bucketed by the HOUR of their Sales Date In.

TitleFromTo

General Ledger

Stock Movement

Profit Loss Report

Chart of Accounts: Mapping COA

The COA master mirrors ESB’s Master Charts Of Account Management. Upload the ESB export and it is matched to the right company automatically (cell A2 is verified). Only level 4 accounts take a Mapping, exactly like ESB; refreshing the master never touches it.

Coa NoLevelDescriptionBranchMemorialMapping

Product Average Cost

SeqProduct NameUnit COGS Avg (Amount)%Diff

Item Journal

i
Qty Document
—
—
i
Value Cost
—
—

Cost by Branch

#BranchLocationTotal Cost

Cost by Purpose

#PurposeTotal Cost % COGS Contribution % Sales Comparison

Cost by Category

#CategoryTotal Cost

Cost by Sub Category

#Sub CategoryTotal Cost

Daily Value Cost

Item Journal Detail

Void / Cancel

Source: ESB API (auto); an uploaded Cancel Menu Detail report replaces it for the period it covers. Void = the bill was already paid (the system had detected payment) and was then voided. Cancel = no payment was detected yet (bill unpaid) when the menu / bill was cancelled. Staff from the ESB API are shown by name once their POS user code is known (Menu Mapping ▸ POS User Names), else by code.

i
Void Amount
—
—
i
Cancel Amount
—
—
i
Bills Voided
—
—
i
Bills Cancelled
—
—
i
Auto-Void (System)
—
—
i
Void/Cancel % of Net Sales
—
—

By Approver

i

By Order Staff

i

By Branch

i

By Reason

i

Daily Void / Cancel

i

Void / Cancel Detail

i

Outstanding PO to GR

Period selects Purchase Orders by Purchase Date (statuses Rejected / Waiting For Approval never count); every Goods Receipt of those POs counts, even when received after the period. Only GR lines of Transaction Type "Purchase Order" exist here; Goods Delivery / Simple Transfer are internal moves and are never stored. Source: Purchase Recapitulation + Goods Receipt Recap (With Value) uploads in Data Import, or the ESB Core API pull; the last load wins for its period, never both.

Received Value vs PO Value

i
—

Received Qty by Supplier

i

PO to GR Detail

i

Outstanding PR to PO / GTR / GD

Each stage selects its documents by its own date: PRs by PR Date, GTRs by Transfer Date, GDs by GD Date; follow-up documents count whatever their date, and Close Deliveries follow their GD. Branch = the PR's branch for stage 1 and the destination (the requester waiting for the goods) for GTR / GD / Closed. Source: the four uploads in Data Import (Purchase Request Realization, Transfer Report Flow, Goods Delivery Recap With Value, Close Delivery Value), or the ESB Core API pull; the last load wins for its period, never both.

PR not processed

i

GTR not delivered

i

GD not received

i

Closed: Return / Cost

i

Outstanding Lines by Branch

i

Outstanding Detail

i

Outstanding GR to Invoice

Period selects Goods Receipts by GR Date (statuses Rejected / New never count). A GR line is invoiced by the Purchase Invoice lines with the same GR number + product code + unit (the product name when there is no code), whatever the invoice date; uninvoiced qty = GR qty − returned qty − Σ Invoice Qty, never below 0; over-invoiced lines are flagged, never netted. Source: the Goods Receipt Recap upload or purchase pull (v1.45) plus the Purchase Invoice Report upload in Data Import, or the payables Pull from ESB.

GR not fully invoiced

i

Uninvoiced value

i

Oldest waiting GR

i

Partly / over-invoiced

i

Uninvoiced Value by Branch

i

Uninvoiced Value by Supplier

i

GR to Invoice Detail

i

Outstanding Invoice / Disbursement to Payment

Period selects invoices and disbursements by their document date; open / overdue is read as of today. A document is PAID only when its payment voucher's release has a released date (an advance used inside a voucher counts when that voucher is released); ESB's own invoice status (Full Paid / Half Paid) only means a voucher exists and is shown as "ESB status". A Payment Method CREDIT disbursement is a payable; its due date is the document date. One document = one payable, whatever the source. Source: the Purchase Invoice / Disbursement / Purchase Payment / Release Payment uploads in Data Import, or the payables Pull from ESB.

Open documents

i

In payment process vs no voucher

i

Overdue

i

Not yet overdue

i

Aging of the Open Amount

i

Open Amount by Supplier

i

Open Documents Detail

i

Outstanding Payment to Released

Period selects payment vouchers (VS) by their Doc. Date (the day the voucher was submitted to finance). Not yet released = no released date as of today; days waiting = today − the voucher date. Released: gap days = released date − voucher date (a voucher released in parts uses the last part's date). Only Purchase Payment vouchers appear here; Cash Payment (CO) releases are stored but never shown. Source: the Purchase Payment + Release Payment uploads in Data Import, or the payables Pull from ESB.

Not yet released

i

Waiting time

i

Released

i

Release Gap Distribution

i

Average Gap by Supplier

i

Voucher Detail

i

Supplier Payable

No period here: everything is computed from the beginning of the stored data up to ONE as-of date. Advance = opening balance + released Advance Purchase documents − advance used by released vouchers (its own column, never netted against Payable). Payable Suspense = goods received but not invoiced (the GR to Invoice rule as of the date). Payable = the open amount of invoices and CREDIT disbursements; Not Yet Overdue + Overdue = Payable on every row. The view is only right when the stored history reaches back to go-live; watch the coverage line below.

Advance

i

Payable Suspense

i

Payable

i

Overdue

i

Payable by Supplier

i

Projection (Preview 1)

GROUPINGProjected Qty

Selling History (Preview 2)

GROUPINGSales DateQty Sold

Menu Item HPP Costing Configuration

Standard Cost (Manual HPP): edit with your known recipe cost per unit. System Cost (API-filled): sourced automatically from connected SaaS systems; shows '—' until a source provides it.

Seq. #Menu Item NameCategory Standard Cost (Manual HPP)System Cost (API-filled)

User Access & Login Maintenance

UsernameFull nameRoleStatusLast loginActions

ESB API: Realtime Sales Sync

Loading status…

Data Source

Choose how SALESDASHBOARD receives transactions. Whichever source is active, raw rows are stored first, validated against the Mapping Template Report below, and only then shown on the dashboard.

Import ESB Data

Upload the three ESB exports as CSV or Excel. Columns are matched by header name, so column order does not matter. Each upload is recorded below and can be removed as a unit. The Cancel Menu Detail report (Excel, Type "Cancel / Void (Default)") replaces its own period on every upload, so re-uploading never duplicates. It is optional: Void / Cancel comes from the ESB API sync automatically; an uploaded report replaces the API figures for the period it covers and teaches the staff names behind the POS user codes.

📊
Sales Recapitulation one row per bill
Drop file or click
🍴
Sales Detail one row per menu line
Drop file or click
🏷
Sales Promotion one row per promo
Drop file or click
🚫
Cancel Menu Detail (Cancel / Void) optional · the ESB API sync already feeds Void / Cancel; an upload adds staff names + the exact export lines · Type "Cancel / Void (Default)"
Drop file or click
📦
Purchase Recapitulation PO lines for Outstanding PO to GR · Status Mode "Purchase" · replaces its period on every upload
Drop file or click
🚚
Goods Receipt Recap (With Value) GR lines for Outstanding PO to GR · Report Mode "With Value" · only Transaction Type "Purchase Order" is stored
Drop file or click
📝
Purchase Request Realization PR lines for Outstanding PR to PO / GTR / GD · export WITHOUT a Reference Date filter · replaces its period on every upload
Drop file or click
🔄
Transfer Report (Flow) GTR lines + their GD / GR flow · Report Mode "Flow", All Branch / All Location · STF Simple Transfers never count as outstanding
Drop file or click
📦
Goods Delivery Recap (With Value) GD lines for Outstanding PR to PO / GTR / GD · Report Mode "Group by Product With Value"
Drop file or click
🚪
Close Delivery Value Close Delivery lines (Return / Cost) for Outstanding PR to PO / GTR / GD
Drop file or click
🧾
Purchase Invoice Report invoice lines for the payables pages · Report Mode "Detail", Branch "All" · replaces its period on every upload
Drop file or click
💳
Disbursement Report expenses without PR / PO / GR · Report Mode "Detail" · Payment Method CREDIT becomes a payable
Drop file or click
💰
Advance Recapitulation Detail supplier advances incl. the opening balance · Mode "Historical"
Drop file or click
💵
Purchase Payment Report payment vouchers + which invoices they pay · Report Mode "Detail", Branch "All"
Drop file or click
🔓
Release Payment Report released dates per voucher and advance · paid = released only · replaces its period by Released Date
Drop file or click

Mapping Template Report

Reports are ingested raw; nothing in the source file is edited. This mapping decides how each file is validated and how its rows roll up on the dashboard. A Sales Recapitulation upload is rejected if its Company (cell B8), or any row's Brand or Branch, is not listed here.

Company→Company Grouping
Brand→Brand Grouping
Branch→Branch Alias

Organization Structure

Company → Brand → Branch (consolidation)

Built from the groupings and aliases above. Each brand belongs to exactly one company; each branch to exactly one brand. Reports (Sales Year, Target Ops) consolidate using this structure.

CompanyBrandBranch

Recent Imports

WhenTypeFile RowsByActions

Browser Tab Title

Shown in the browser tab. Recommended: keep it under 60 characters so it isn't truncated.

Icon Logo

Replaces the flame logo on the login page, the sidebar, and the browser favicon.
Recommended: square PNG or SVG with transparent background, 512 × 512 px (min 128 × 128). Max 30 MB.

Login Background

Full-screen image behind the login card (a dark overlay is applied for readability).
Recommended: landscape JPG or WEBP, 1920 × 1080 px (16:9), under ~2 MB for fast loads. Max 30 MB.

ESB API Connection

Connect this dashboard to ESB OMS and Core: two APIs with two base URLs. OMS (static token from your ESB PIC) pulls sales and the General Ledger automatically; Core (Core username/password) feeds Stock Movement, Item Journal and System Cost. Leave a base URL blank to use the default shown. Full setup guide: see ESB-API-MANUAL.md in the release.

Sales, General Ledger, menu list (static token)
Stock Movement, Item Journal, System Cost (BOM); Core username/password

One row per company, each with its own Bearer token from ESB. Companies come from Data Import › Mapping Template (the raw Company, not the grouping). Leave a token blank when saving to keep the stored one.

CompanyStatic token (OMS)Branch codesCore usernameCore password

Core username/password are the ESB Core login for that company, needed for Stock Movement, Item Journal and System Cost (menu HPP via BOM lastHpp). Blank keeps the stored password.

A Core API login logs out any other session using the same Core user: use a dedicated API user, not someone's daily login.

Same rules as the sales sync, on their own schedules. General Ledger pulls the last N days for every connected company (replacing matching date + account + branch rows) and feeds the Profit Loss Report. System Cost refreshes the menu HPP from the BOM (needs Core username/password above).

Key Color

The accent color used across the dashboard: buttons, highlights, active menu, and charts. Pick with the color picker or type a hex code (e.g. #E8622C). Default is the ember orange.

Button

Changes apply after a refresh (the logo, title, favicon and key color are set when the page loads).

Change Password

🔥
Loading data…