Glossary
33 terms in plain English. Linked to from the small "i" icon next to every metric in the dashboard.
- Aged debtors 60+ dayskpi
Customer (medical-aid + private) balances that are at least 60 days old. Working-capital risk indicator — older buckets typically need active follow-up.
CalculationSum of debtor balances in 60, 90, 120, 150, 180, 210+ day buckets.
SourceAging Analyses → Debtors aging columns.
See alsoDSO — days sales outstanding
- Average basketkpi
Average rand value of one customer transaction across the trading day. A read on whether shoppers are buying more, fewer, or higher-value items per visit.
CalculationTotal POS turnover ÷ Number of POS transactions
SourceDaily Cashup → Average Basket Value (today).
See alsoTurnover
- Average script valuekpi
Mean rand value per dispensed prescription.
CalculationDispensary turnover ÷ Script count (today)
SourceDispensary → Average Script Value (today).
See alsoScripts dispensed, Dispensary share
- Banked vs cash salesterm
Comparison of physical cash deposited against the till's cash takings — the most common single source of reconciliation flags.
CalculationSee banking variance.
SourceDaily Cashup ↔ Sales Cash Value.
See alsoBanked vs expected, Cash share of tenders
- Banked vs expectedkpi
How much was actually banked versus how much cash the till said you should have. A persistently large gap is the headline reconciliation flag.
CalculationCash banked − POS cash sales (today)
SourceDaily Cashup → Total Banked − Sales → Total Cash Value.
See alsoCash share of tenders, Cash banked
- Basketterm
One till transaction — i.e. a customer's bag of goods. Used as the denominator for average basket value.
SourceCounted by the POS system.
See alsoAverage basket
- Cash bankedkpi
Total physical cash deposited at the bank for the trading day, before any reconciliation against POS cash takings.
CalculationSum of cash-up bank deposits (today).
SourceDaily Cashup → Total Banked (today).
See alsoBanked vs expected, Cash share of tenders
- Coverageux
The map of which trading days actually arrived as Vexall reports. Days are flagged received, missing, or expected closure (Sundays for stores that don't trade).
CalculationPer-day status across all pharmacies.
SourcePipeline ingest history (SES → S3 → Lambda → RDS).
See alsoUptime, Health Score
- Daily Management Report (DMR)term
The HTML email Vexall sends after each trading day. It's the canonical record of yesterday's trading and the only data source this dashboard uses.
SourceEmail to dmr@pharma.qberi.com.
- Discount intensitykpi
How aggressively you're refunding/discounting relative to total sales. A spike usually means a promo, a bad batch, or staff training opportunity.
CalculationCash refunds ÷ Total POS turnover × 100
SourceSales → Cash Refunds ÷ Total POS Turnover.
- Dispensary mixterm
Synonym for dispensary share — proportion of turnover coming from the prescription counter.
CalculationSee dispensary share.
SourceVexall daily report.
See alsoDispensary share
- DSO — days sales outstandingterm
On average, how many days it takes to collect the money customers owe you. Higher = slower collections.
CalculationReceivables ÷ (Annual sales ÷ 365)
SourceComputed when receivables history is long enough.
See alsoAged debtors 60+ days
- Front-shop turnoverkpi
All non-dispensary sales — OTC, healthcare, beauty, sundries. The non-prescription side of the business.
Calculationmax(0, Turnover − Dispensary turnover) — both sides include direct-billed medical-aid revenue, so the residual is honest OTC activity.
SourceTOTAL TURNOVER (Excl.) minus Dispensary Turnover.
See alsoDispensary share, Turnover
- FY / FYTD — financial yearterm
South-African fiscal year runs March → February. FYTD is everything from 1 March of the current FY to today.
CalculationΣ MTD values across the months in this FY.
SourceAggregated client-side from monthly closes.
See alsoMTD — month-to-date
- GP% — gross profit marginkpi
The share of every rand of sales that's left after paying for the stock that was sold. A gross-margin proxy for pricing and discount discipline.
CalculationGP% = (Sales − Cost of goods) ÷ Sales × 100
SourceStock Trading → Gross Profit % (today), weighted by total sales.
See alsoTurnover, Discount intensity, Purchase ratio (MTD)
- Health Scoreux
Composite 0–100 score per pharmacy, summarising sales, margin, operations, customer behaviour and working capital. Admins can tune the weights and how aggressively under-performance is penalised under Admin → Score configuration.
CalculationWeighted sum of five 0–100 component scores with a temperature curve applied. Components needing data we don't have yet are excluded and their weight redistributed.
SourceComputed at request time from the daily report and the active scoring config.
See alsoBanked vs expected, GP% — gross profit margin, Aged debtors 60+ days, Stock days on hand
- MTD — month-to-dateterm
Running total from the 1st of the current calendar month up to (and including) the most recent trading day.
CalculationΣ daily values, day 1 → today.
SourceReset on the 1st of every month by Vexall.
See alsoFY / FYTD — financial year, MTD turnover
- MTD turnoverkpi
Cumulative sales month-to-date. As reported by Vexall on each daily report (no rebuild needed).
CalculationΣ Daily POS turnover, day 1 of month → today.
SourceSales → Total POS Turnover MTD.
See alsoTurnover, MTD — month-to-date
- Purchase ratio (MTD)kpi
Stock bought month-to-date as a fraction of sales month-to-date. An early signal that purchasing is running ahead of (or behind) sell-through.
CalculationStock purchases MTD ÷ Total turnover MTD × 100
SourceStock Trading → Purchases MTD ÷ Sales → Total POS Turnover MTD.
See alsoGP% — gross profit margin, Stock days on hand, MTD — month-to-date
- RAMS numberterm
South African Pharmacy Council registration number — the regulatory identity of each pharmacy site.
SourceVexall report header.
- Returns & refundskpi
Total value refunded to customers for the trading day.
CalculationSum of cash refund values (today).
SourceSales → Cash Refunds Value (today).
See alsoDiscount intensity
- Schedule mixterm
Breakdown of dispensary volume by schedule (S1 — S6). Not yet exposed in this dashboard; planned for Stage 5 once the script-level feed arrives.
CalculationCount by schedule code.
SourceVexall script-level feed (pending).
See alsoScripts dispensed
- Scripts dispensedkpi
Number of dispensary prescriptions filled in the trading day. Volume metric — pair with avg script value for revenue.
CalculationCount of dispensed scripts (today).
SourceDispensary → Script Count (today).
See alsoAverage script value, Dispensary share
- SDLM — same day last monthterm
Comparison value from 28 days ago. Indicative for month-on-month trend at constant weekday.
CalculationToday vs (today − 28).
SourceComputed from the 28-day window.
See alsoSDLW — same day last week
- SDLW — same day last weekterm
Comparison value taken from exactly seven days ago. Lets you compare like-for-like (Wednesday → Wednesday) without weekday seasonality polluting the read.
CalculationToday vs (today − 7).
SourceComputed from the 28-day window.
See alsoSDLM — same day last month
- Stock days on handkpi
Roughly how many days of selling stock you're carrying right now, based on the recent burn rate.
CalculationClosing stock ÷ MTD cost-of-sales × 30
SourceStock Trading → Closing Stock ÷ Cost of Sales MTD.
- Trailing 28-day averageterm
Average over the last 28 days, used as the baseline against which today's value is compared. Smooths out weekday noise so spikes stand out.
CalculationΣ daily values ÷ 28
SourceComputed from the 28-day window (excluding today).
See alsoSDLW — same day last week
- Turnoverkpi
Total business revenue for the trading day — includes both till takings AND medical-aid claims billed directly to the medical aid (which never touch the till). This is the number Pieter would quote for 'what did the pharmacy do today'.
CalculationVexall's TOTAL TURNOVER (Excl.) line, summed across selected pharmacies.
SourceDaily Management Report → TOTAL TURNOVER (Excl.).
See alsoDispensary share, Front-shop turnover, Average basket
- Uptimeux
Share of trading days in the window that arrived as a parsed report. Closures don't count against uptime.
CalculationReceived ÷ (Received + Missing) × 100
SourceCoverage status counts.
See alsoCoverage
- Vexallterm
The pharmacy POS / dispensary management software TLC pharmacies use. It emails the Daily Management Report each morning — that's the data feed this dashboard parses.
Pharma