The Veterinary Clinic KPI Guide: What to Measure, How to Calculate It, and When to Use Paper, Excel, or Software
Many clinics know they want “better analytics,” but the real question is simpler:
Which numbers actually matter, what do they mean to the business, and what is the most reasonable way to produce them?
This guide maps the KPI surfaces currently shown across Übik’s analytics-related pages and dashboard views. For each KPI group, it explains:
- what the number means to the clinic
- what data is needed to compute it
- the conceptual equation in plain business variables
- how difficult it would be to reproduce on paper, in Excel, or in Übik
- which method is the most reasonable in practice
This is written for clinic operators and managers, not developers.
How to Read the Difficulty Bars
- Lower is easier.
- Format:
Paper [#####] Excel [###--] Ubik [#----] [#----]means easy.[#####]means very difficult.
One Rule Before We Start
- Paper is only realistic for small same-day counts.
- Excel works for short exports and simple rollups.
- Übik is the right tool when a KPI spans many records, uses timestamps, or needs to stay current.
Home Dashboard
The home dashboard is the clinic’s fast operational snapshot. It answers: what is happening today, where is pressure building, and are we adequately staffed, stocked, and collecting?
Page: /
| KPI surface | What it means to the clinic | Data required | Equation (plain business variables) | Difficulty | Best method |
|---|---|---|---|---|---|
| Appointment status mix: scheduled, waiting, serving, done, canceled | Shows today’s visit flow and whether the day is piling up or moving | Appointments for the clinic day; appointment status; appointment type | Scheduled Visits = count(appointments where Status = Scheduled); Waiting Visits = count(appointments where Status = Waiting); Serving Visits = count(appointments where Status = Serving); Done Visits = count(appointments where Status = Done); Canceled Visits = count(appointments where Status = Canceled) |
Paper [##---] Excel [#----] Ubik [#----] |
Ubik |
| Appointment type mix | Shows what kind of clinical demand is filling the day | Appointments; appointment type | Visits for Appointment Type X = count(appointments where Appointment Type = X) |
Paper [##---] Excel [#----] Ubik [#----] |
Ubik |
| Average waiting time | Measures front-desk and doctor throughput from client arrival to service start | Waiting timestamps or stored waiting minutes | Average Waiting Time = Total Waiting Minutes / Number of Visits Included in Waiting Pool |
Paper [####-] Excel [###--] Ubik [#----] |
Ubik |
| Average serving time | Shows how long visits are consuming clinical capacity | Serving timestamps or stored serving minutes on completed visits | Average Serving Time = Total Serving Minutes for Completed Visits / Number of Completed Visits |
Paper [####-] Excel [###--] Ubik [#----] |
Ubik |
| Smart close: cutoff time and projected finish | Helps decide whether to keep taking more work and whether the team will finish late | Business hours, staff currently clocked in, current load, historical close model | Projected Finish Time = Forecast(Current Queue + Current Staffing + Historical Close Pattern + Business Hours); this is a forecast, not a simple hand formula |
Paper [#####] Excel [#####] Ubik [#----] |
Ubik |
| New vs returning customers | Shows how much of today’s demand is acquisition vs repeat demand | Appointments; linked customer created date | New Customers Seen Today = count(visits where Customer Created Date is Today); Returning Customers Seen Today = count(visits where Customer Created Date is Before Today) |
Paper [###--] Excel [##---] Ubik [#----] |
Ubik |
| New vs returning pets and species mix | Shows case mix and whether growth is coming from new pets or established households | Appointments; linked pet created date; pet species | New Pets Seen Today = count(visits where Pet Created Date is Today); Returning Pets Seen Today = count(visits where Pet Created Date is Before Today); Species Count = count(pets seen where Species = X) |
Paper [###--] Excel [##---] Ubik [#----] |
Ubik |
| Staff mix and staffing now: admins, staff, scheduled to work, currently working | Shows whether coverage is in place and whether the scheduled team has actually clocked in | User roles; employee schedules; open time checks | Admins = count(users where Role = Admin); Staff = count(users where Role = Staff); Scheduled to Work = count(shifts scheduled today); Currently Working = count(open time logs with no clock-out yet) |
Paper [###--] Excel [##---] Ubik [#----] |
Ubik |
| Payment volume and payment-method mix | Shows today’s collection activity and how money is being collected | Payments; refunds; payment method; linked appointment type | Total Payments = count(payment rows); Sales Payments = count(payments linked to POS sales); Appointment Payments = count(payments linked to non-sale visits); Payments by Method = count(payments where Payment Method = X) |
Paper [###--] Excel [##---] Ubik [#----] |
Ubik |
| Inventory health: total items, low stock, out of stock, type mix | Shows whether stock is broadly healthy before the team feels shortages | Inventory records; low-stock flag; out-of-stock flag; inventory type | Total Items = count(inventory records); Low Stock Items = count(items flagged Low Stock); Out of Stock Items = count(items flagged Out of Stock); Items by Type = count(items where Type = X) |
Paper [###--] Excel [##---] Ubik [#----] |
Ubik |
| POS snapshot: sales, unpaid, payments, POS revenue | Shows retail checkout health for the day | Sale appointments; POS payments; POS refunds | POS Sales = count(POS sale appointments); Unpaid POS Sales = count(POS sale appointments where Status = Unpaid); POS Payments = count(POS payment rows); POS Revenue = Total POS Payments - Total POS Refunds |
Paper [###--] Excel [##---] Ubik [#----] |
Ubik |
Appointment Analytics
Appointment analytics is where the clinic can see flow, workload, collection behavior, and operational bottlenecks over a selected period.
Page: /appointment/analytics
| KPI surface | What it means to the clinic | Data required | Equation (plain business variables) | Difficulty | Best method |
|---|---|---|---|---|---|
| Appointment overview: total, done, waiting, canceled, unassigned, sales | Fast operating summary for the selected period | Appointments in range; status; type; assignment | Total Visits = count(all visits in range); Done Visits = count(visits where Status = Done); Waiting Visits = count(visits where Status = Waiting); Canceled Visits = count(visits where Status = Canceled); Unassigned Visits = count(non-sale visits with no assigned clinician); Sales Visits = count(visits where Appointment Type = Sale) |
Paper [###--] Excel [##---] Ubik [#----] |
Ubik |
| Cashier collection totals by person and by method | Shows who collected money and through which channels | Payments; refunds; cashier; payment method | Cashier Net Collection = Total Payments Collected by Cashier - Total Refunds Processed by Cashier; Method Net Collection = Payments by Method - Refunds by Method |
Paper [####-] Excel [###--] Ubik [#----] |
Ubik |
| Appointment detail table: waiting time, serving time, charges, payments | Lets managers audit which visits were slow, underpaid, or high-value | Appointments; charges; payments; refunds | Visit Charges = sum(charge lines linked to visit); Visit Payments = sum(payments linked to visit) - sum(refunds linked to visit); Waiting Time = visit waiting minutes; Serving Time = visit serving minutes |
Paper [#####] Excel [####-] Ubik [#----] |
Ubik |
| Technician table: served count, served minutes, revenue | Shows workload and money associated with each clinician or technician | Appointments with assignee; serving minutes; payments; refunds | Visits Served by Technician = count(visits assigned to technician); Technician Serving Minutes = sum(serving minutes for technician's visits); Technician Revenue = sum(net payments linked to technician's visits) |
Paper [####-] Excel [###--] Ubik [#----] |
Ubik |
| Payment table and payment method counts | Shows collection mix and traceability for each payment | Payments in range; linked customer; cashier; method | Payments by Method = count(payment rows where Method = X); the table is the row-by-row payment ledger |
Paper [###--] Excel [##---] Ubik [#----] |
Ubik |
| Waiting load chart | Shows when the clinic had the heaviest waiting-room pressure | Appointments with waiting start; waiting minutes | Visits in Time Bucket = count(visits whose waiting start falls in bucket); Average Waiting Time in Bucket = Total Waiting Minutes in Bucket / Visits in Bucket |
Paper [####-] Excel [###--] Ubik [#----] |
Ubik |
| Serving load chart | Shows when service demand peaked and which technicians absorbed it | Appointments with serving start; serving minutes; assignee | Served Visits in Time Bucket = count(visits whose serving start falls in bucket); Average Serving Time in Bucket = Total Serving Minutes in Bucket / Served Visits in Bucket; technician bars are counts by technician in the same bucket |
Paper [####-] Excel [###--] Ubik [#----] |
Ubik |
| Initiator/source chart | Shows where appointments are coming from: reception, doctor, customer self-service, kiosk, and more | Appointment initiator or source field | Visits from Source X = count(visits where Initiator Source = X) |
Paper [###--] Excel [##---] Ubik [#----] |
Ubik |
Customer Analytics
Customer analytics turns appointments and payments into retention, value, and communication insight.
Page: /customer/analytics
| KPI surface | What it means to the clinic | Data required | Equation (plain business variables) | Difficulty | Best method |
|---|---|---|---|---|---|
| Active, new, and repeat clients | Shows retention health and whether growth is coming from first-time or returning households | Appointments; customer history; last completed appointment before range | Active Clients = count(unique customers seen in date range); New Clients = count(unique customers seen in range with no completed visit before range); Repeat Clients = count(unique customers seen in range with at least one completed visit before range) |
Paper [####-] Excel [###--] Ubik [#----] |
Ubik |
| Total appointments, cancellation rate, average revisit days, median revisit days | Shows repeat behavior and schedule reliability | Appointments by customer over time; cancellation status | Cancellation Rate = Canceled Visits / Total Visits; Revisit Days = days between one visit date and the previous visit date for the same customer; averages and medians are then taken across all revisit gaps |
Paper [####-] Excel [###--] Ubik [#----] |
Ubik |
| Average and median pets per customer | Shows household depth and cross-sell potential | Customers in range; active pets linked to each customer | Pets per Customer = Active Pets Linked to Customer; Average Pets per Customer = Total Active Pets Across Included Customers / Included Customers; median is the middle household size |
Paper [####-] Excel [###--] Ubik [#----] |
Ubik |
| Revenue summary: gross charges, discounts, payments, promotion credits, net revenue, ARPU, unpaid estimate | Shows client-book value and how much billed work actually converted into cash | Charges; discounts; payments; refunds; promotions; linked customer | Gross Charges = sum(all charge lines); Discounts = sum(discount value); Payments = sum(payments) - sum(refunds); Promotion Credits = sum(payments tied to promotions); Net Revenue = Gross Charges - Promotion Credits; ARPU = Net Revenue / Revenue-Generating Customers; Unpaid Estimate = sum(max(Visit Charges - Visit Payments, 0)) |
Paper [#####] Excel [####-] Ubik [#----] |
Ubik |
| Revenue by service type and by product type | Shows which kinds of care and product demand are driving client value | Charges; linked service or inventory category | Revenue for Category X = sum(charge line revenue where Category = X) |
Paper [####-] Excel [###--] Ubik [#----] |
Ubik |
| Customer lists: active, new, repeat | Turns the summary into action lists for follow-up and relationship management | Customer profiles; pet counts; visit counts; revenue; last visit | List membership follows the segment equations above; rows then show Visits, Revenue, Pets, and Last Visit for each customer |
Paper [####-] Excel [###--] Ubik [#----] |
Ubik |
| Loyalty candidates | Finds clients most worth protecting with follow-up, perks, or reminders | Customer visits; last visit; revenue; pet counts | Loyalty Score = (Recency Score + Visit Score + Revenue Score) / 3, where recency rewards recent visits, visit score rewards frequency, and revenue score rewards higher spend |
Paper [#####] Excel [####-] Ubik [#----] |
Ubik |
| Appointment journey table and flow chart | Shows how customers move from lobby to clinician to payment, and where friction appears | Appointments; assignee; cashier; waiting and serving timestamps; appointment type | Journey Path = Lobby -> Assigned Clinician -> Payment Destination; Waiting Minutes = Service Start - Waiting Start; Serving Minutes = Service End - Service Start |
Paper [#####] Excel [####-] Ubik [#----] |
Ubik |
| Unpaid appointments by customer | Shows who still owes money and how big the balance is | Appointments marked unpaid; charges; payments; refunds | Appointment Balance Gap = Appointment Charges - Appointment Net Payments; Customer Unpaid Balance = sum(Appointment Balance Gap across unpaid appointments for that customer) |
Paper [#####] Excel [####-] Ubik [#----] |
Ubik |
| Charge/payment discrepancies | Finds non-unpaid appointments where billing and payments still do not match | Appointments in range; charges; payments; refunds | Discrepancy = Appointment Charges - Appointment Net Payments; only non-unpaid visits with a non-zero absolute gap are shown |
Paper [#####] Excel [####-] Ubik [#----] |
Ubik |
| Communications: WhatsApp incoming/outgoing, email outgoing, template coverage, estimated cost, unreachable customers | Shows messaging workload, messaging cost, template discipline, and contactability risk | Daily account message stats; communication threads; customer unreachable flag | WhatsApp Incoming = count(inbound WhatsApp threads); WhatsApp Outgoing = total WhatsApp messages sent; Email Outgoing = total emails sent; Estimated Cost = (WhatsApp Incoming x WhatsApp Unit Cost) + (WhatsApp Outgoing x WhatsApp Unit Cost) + (Email Outgoing x Email Unit Cost); Template Coverage = Template-Tracked Outgoing Messages / Total Outgoing Messages; Unreachable Customers = count(customers flagged unreachable) |
Paper [#####] Excel [####-] Ubik [#----] |
Ubik |
User Analytics
User analytics shows whether the clinic’s people are being used effectively and whether workload is balanced.
Page: /user/analytics
| KPI surface | What it means to the clinic | Data required | Equation (plain business variables) | Difficulty | Best method |
|---|---|---|---|---|---|
| Appointments assigned, worked hours, time serving appointments, work utilization | Shows whether each employee is busy, underused, or overloaded | User records; assigned appointments; time checks; serving timestamps | Appointments Assigned = count(visits assigned to employee); Worked Hours = sum(clock-out time - clock-in time); Time Serving Appointments = total non-overlapping serving time for that employee's visits; Work Utilization = Time Serving Appointments / Worked Hours |
Paper [####-] Excel [###--] Ubik [#----] |
Ubik |
| Employee comparison charts | Makes staffing imbalance visible across the team | Same data as above | Charts plot Appointments Assigned, Worked Hours, Time Serving Appointments, and Work Utilization side by side for each employee |
Paper [#####] Excel [###--] Ubik [#----] |
Ubik |
Achievement Analytics
Achievement analytics blends recognition with daily operational performance.
Page: /achievement/analytics
| KPI surface | What it means to the clinic | Data required | Equation (plain business variables) | Difficulty | Best method |
|---|---|---|---|---|---|
| Achievement award log | Shows who is earning recognition and how often | Achievement definitions; achievement logs; employee and date | Achievement Awards = count(achievement log rows in period) |
Paper [###--] Excel [##---] Ubik [#----] |
Ubik |
| Employee performance combo chart | Blends productivity, utilization, case mix, note and vitals completeness, appointment-type mix, and achievements | Daily employee stats: appointments completed, utilization, serve hours, taxonomy mix, note completion, vitals completion, appointment counts by type, average serve duration by type, earned achievements | Main equations include Appointments Completed = count(served visits assigned that day); Utilization Percent = Total Serve Minutes / Standard Workday Minutes; Vitals Completeness = count(appointments with all required vitals); Notes Completeness = count(appointments with all required note sections); Average Serve Duration for Type X = Total Serve Minutes for Type X / Visits of Type X |
Paper [#####] Excel [#####] Ubik [#----] |
Ubik |
Additional notes on the employee-stat formulas used here:
- Appointments completed: count of served appointments assigned to the employee that day.
- Total serve minutes: merged serving time across the employee’s appointments so overlaps are not double-counted.
- Utilization percent: total serve minutes divided by an 8-hour workday in the daily stats job.
- Vitals completeness: count of appointments with all required vitals filled.
- Notes completeness: count of appointments with key note sections filled.
Inventory Analytics
Inventory analytics is where operational stock control becomes financial control. It answers whether the clinic is safe on stock, where shortages are coming, what is moving, what is expiring, and what buying decisions are justified.
Page: /inventory/analytics
Planning Tab
| KPI surface | What it means to the clinic | Data required | Equation (plain business variables) | Difficulty | Best method |
|---|---|---|---|---|---|
| Planning summary: total items, below reorder, low cover, shortage soon, suggested lines, on-hand value, estimated reorder value | Shows whether stock is safe, fragile, or already demanding action | Inventory planning stats; current stock; reorder point; days of cover; suggestion lines; unit cost | Below Reorder Items = count(items where Current Stock + On-Order Qty < Reorder Point); Low Cover Items = count(items where Days of Cover < Low-Cover Threshold); Shortage Soon Items = count(items with projected shortage inside horizon); On-Hand Value = sum(Current Stock x Business Cost per Unit); Estimated Reorder Value = sum(Recommended Qty x Business Cost per Unit) |
Paper [#####] Excel [####-] Ubik [#----] |
Ubik |
| Risk distribution chart | Shows how much of the catalog is healthy vs risky | Planning rows with state labels | Items in State X = count(planning rows where State = X) |
Paper [####-] Excel [###--] Ubik [#----] |
Ubik |
| Top reorder gaps chart | Shows the products with the biggest stock shortfall | Current stock; on-order quantity; reorder point | Reorder Gap = max(Reorder Point - (Current Stock + On-Order Quantity), 0) |
Paper [####-] Excel [###--] Ubik [#----] |
Ubik |
| Supplier pressure table | Shows which suppliers are tied to the most inventory risk and replenishment demand | Risky inventory rows; purchase suggestions; supplier links | Risky Items for Supplier = count(items for supplier where State is risky); Suggested Lines for Supplier = count(open suggestion lines for supplier); Estimated Order Value for Supplier = sum(Recommended Qty x Business Cost per Unit for supplier's suggested lines) |
Paper [#####] Excel [####-] Ubik [#----] |
Ubik |
| Purchase suggestions | Turns planning into a buy list with reason, quantity, value, and shortage date | Purchase suggestions; suggestion lines; inventory unit cost | Recommended Order Value per Line = Recommended Quantity x Business Cost per Unit |
Paper [#####] Excel [####-] Ubik [#----] |
Ubik |
| Negative quantity inventory | Finds obvious stock data failures before they cause bad decisions | Inventory quantity and package balances | Negative Inventory = count(items where On-Hand Quantity < 0) |
Paper [##---] Excel [#----] Ubik [#----] |
Ubik |
| Planning overview table | Gives the operator the full planning context per product | Current stock; supplier; strategy; days of cover; average daily demand; reorder point; gap; shortage date; cost | Core row equations are Days of Cover = Current Stock / Average Daily Demand; Reorder Gap = max(Reorder Point - (Current Stock + On-Order Quantity), 0); On-Hand Value = Current Stock x Business Cost per Unit |
Paper [#####] Excel [####-] Ubik [#----] |
Ubik |
Over Time Tab
| KPI surface | What it means to the clinic | Data required | Equation (plain business variables) | Difficulty | Best method |
|---|---|---|---|---|---|
| Dispense summary: events, distinct items, quantity, packages, business value, customer value | Shows how much inventory is actually moving and its cost/value footprint | Inventory dispenses; quantity; packages; item cost; item sell value | Dispense Events = count(dispense rows); Distinct Items = count(unique products dispensed); Dispensed Quantity = sum(dispensed quantity); Dispensed Packages = sum(dispensed packages); Business Value = sum(dispensed quantity x business cost per unit); Customer Value = sum(dispensed quantity x customer price per unit) |
Paper [####-] Excel [###--] Ubik [#----] |
Ubik |
| Dispense table | Lets the clinic audit who dispensed what, to whom, and at what value | Inventory dispenses; dispenser; customer; pet; quantity; values | Row equations include Business Value = Dispensed Quantity x Business Cost per Unit and Customer Value = Dispensed Quantity x Customer Price per Unit |
Paper [####-] Excel [###--] Ubik [#----] |
Ubik |
| Dispense hierarchy Sankey | Shows the flow from product to dispenser to recipient | Dispense events; item; dispenser; customer, pet, or date | Flow Value = sum(Dispensed Quantity along Product -> Staff -> Recipient path) |
Paper [#####] Excel [#####] Ubik [#----] |
Ubik |
| Quantity by day and stock-on-hand by day | Shows use velocity versus remaining stock trajectory | Dispenses over time; inventory logs over time | Daily Dispensed Quantity = sum(dispensed quantity in day bucket); End-of-Day Stock = latest logged stock balance up to that day |
Paper [#####] Excel [#####] Ubik [#----] |
Ubik |
Expense Cost Tab
| KPI surface | What it means to the clinic | Data required | Equation (plain business variables) | Difficulty | Best method |
|---|---|---|---|---|---|
| Inventory expense cost trend | Shows how purchase prices are moving for selected products | Inventory-linked cost-of-goods expenses; quantity purchased; taxes; supplier | Total Expense Amount = Expense Subtotal + Tax Paid; Converted Inventory Units Added = Purchase Quantity x Purchase-Unit-to-Inventory Multiplier; Unit Price = Total Expense Amount / Converted Inventory Units Added |
Paper [#####] Excel [####-] Ubik [#----] |
Ubik |
| Inventory expense cost table | Compares suppliers, quantities added, total spend, and average price per unit | Same as above, plus purchase-unit conversion | Total Spend per Product = sum(Total Expense Amount); Total Units Added per Product = sum(Converted Inventory Units Added); Average Unit Price = Total Spend per Product / Total Units Added per Product |
Paper [#####] Excel [####-] Ubik [#----] |
Ubik |
| Expense cost recommendations | Suggests which products are most worth analyzing because they have repeated recent expense activity | Recent inventory-linked cost-of-goods expenses | Ranked by Expense Row Count, then Total Expense Amount, then Most Recent Expense Date |
Paper [#####] Excel [####-] Ubik [#----] |
Ubik |
Lots and Expirations Tab
| KPI surface | What it means to the clinic | Data required | Equation (plain business variables) | Difficulty | Best method |
|---|---|---|---|---|---|
| Lot summary: tracked items, open lots, expired lots, expiring in 7 days, expiring in 30 days, estimated expiring value | Shows expiry risk before loss hits margins or patient care | Inventory lots; lot quantity; expiry date; item business cost | Expired Lots = count(lots where Days to Expire < 0); Expiring in 7 Days = count(lots where Days to Expire <= 7); Expiring in 30 Days = count(lots where Days to Expire <= 30); Estimated Expiring Value = sum(Lot Quantity x Business Cost per Unit for expired and near-expiring lots) |
Paper [#####] Excel [####-] Ubik [#----] |
Ubik |
| Expiration risk by bucket | Shows whether expiry exposure is immediate or still manageable | Lot status buckets | Lots in Bucket X = count(open lots where Status Bucket = X) |
Paper [####-] Excel [###--] Ubik [#----] |
Ubik |
| Top expiring-value items | Shows where the clinic is most likely to lose money first | Lots with expiry risk; item business cost | Expiring Value per Product = sum(Lot Quantity x Business Cost per Unit for risky lots on that product) |
Paper [#####] Excel [####-] Ubik [#----] |
Ubik |
| Inventory lots table | Gives the operator the per-lot details needed to act | Product, supplier, lot number, expiry date, quantity, cost value, lot status | Lot Business Value = Lot Quantity x Business Cost per Unit; Days to Expire = Expiry Date - Today |
Paper [#####] Excel [####-] Ubik [#----] |
Ubik |
| Data quality issues | Finds stock records that should not be trusted yet | Inventory quantity; lot quantity; untracked lots; missing expiry dates | Quantity Mismatch = Total Lot Quantity - Current On-Hand Quantity; flags appear when mismatch, missing lots, untracked quantity, or missing expiry quantity are present |
Paper [####-] Excel [###--] Ubik [#----] |
Ubik |
Accounting Analytics
Accounting analytics shows whether the clinic is collecting, spending, moving cash intelligently, and protecting margin.
Page: /accounting/analytics
Overview and Expenses/Income
| KPI surface | What it means to the clinic | Data required | Equation (plain business variables) | Difficulty | Best method |
|---|---|---|---|---|---|
| Pending payments to suppliers | Shows how much cash is still owed to vendors | Expenses; supplier remaining balance; supplier payments | Pending Supplier Balance = sum(Remaining Amount Owed to Supplier across pending expense rows) |
Paper [###--] Excel [##---] Ubik [#----] |
Ubik |
| Income over time chart and payment totals by method | Shows collection timing and payment-method mix | Payments; refunds; payment method; date | Net Payments = Total Payments - Total Refunds; Net Payments by Method X = Payments by Method X - Refunds by Method X |
Paper [####-] Excel [###--] Ubik [#----] |
Ubik |
| Expense type chart | Shows where money is going by expense type and CFDI use | Expenses; subtotal; discount; tax paid; expense type; CFDI use | Expense Amount = Expense Subtotal - Discount + Tax Paid; Expense Type Total = sum(Expense Amount where Expense Type = X) |
Paper [####-] Excel [###--] Ubik [#----] |
Ubik |
| Payments table and expenses table | Gives row-level traceability behind the summary | Payments; expenses; customer; cashier; supplier; type | Row-level ledger; the main supporting equations are the same as the payment and expense equations above | Paper [###--] Excel [##---] Ubik [#----] |
Ubik |
Cashflow
| KPI surface | What it means to the clinic | Data required | Equation (plain business variables) | Difficulty | Best method |
|---|---|---|---|---|---|
| Cashflow summary: cash in, cash out, net, average daily net, largest inflow, largest outflow | Shows whether the clinic is generating or consuming cash in the selected period | Payments; refunds; expenses; supplier payment events | Cash In = sum(all inflow events); Cash Out = sum(all outflow events); Net Cashflow = Cash In - Cash Out; Average Daily Net = Net Cashflow / Number of Days in Range; Largest Inflow = max(single inflow event); Largest Outflow = max(single outflow event) |
Paper [#####] Excel [####-] Ubik [#----] |
Ubik |
| Cashflow over time chart | Shows when cash pressure or cash generation happened | Same as above with dates | Net Cashflow for Time Bucket = Cash In for Bucket - Cash Out for Bucket |
Paper [#####] Excel [####-] Ubik [#----] |
Ubik |
| Cash out by supplier and by type | Shows where cash is leaving the business | Expenses; supplier payment events; expense type | Cash Out for Supplier X = sum(outflow events where Supplier = X); Cash Out for Expense Type X = sum(outflow events where Expense Type = X) |
Paper [####-] Excel [###--] Ubik [#----] |
Ubik |
| Cash in by method | Shows how clients are paying | Payments by method, net of refunds | Cash In by Method X = Payments by Method X - Refunds by Method X |
Paper [###--] Excel [##---] Ubik [#----] |
Ubik |
| Cashflow events table | Provides an auditable event ledger behind the totals | Inflow and outflow events with date, amount, method, note | This table is the event-level ledger used to build the cashflow totals above | Paper [#####] Excel [####-] Ubik [#----] |
Ubik |
Profitability
| KPI surface | What it means to the clinic | Data required | Equation (plain business variables) | Difficulty | Best method |
|---|---|---|---|---|---|
| Profitability summary: revenue, COGS, gross profit, gross margin, operating expenses, net profit | Shows whether the clinic is actually making money after product cost and operating spend | Cash inflows; cost-of-goods expenses; operating expenses | Revenue = sum(cash inflows); COGS = sum(cost-of-goods outflows); Gross Profit = Revenue - COGS; Gross Margin = Gross Profit / Revenue; Operating Expenses = sum(non-COGS operating outflows); Net Profit = Gross Profit - Operating Expenses |
Paper [#####] Excel [####-] Ubik [#----] |
Ubik |
| Profitability waterfall and trend | Explains where margin is lost and when profit changed over time | Same as above with time buckets | Net Profit for Time Bucket = Revenue for Bucket - COGS for Bucket - Operating Expenses for Bucket |
Paper [#####] Excel [####-] Ubik [#----] |
Ubik |
| Operating expenses by type and COGS by supplier | Shows which overhead classes and which vendors are weighing most on margin | Expenses by type; COGS-linked supplier payments | Operating Expenses for Type X = sum(operating expense outflows where Type = X); COGS for Supplier X = sum(cost-of-goods outflows where Supplier = X) |
Paper [####-] Excel [###--] Ubik [#----] |
Ubik |
Promotions
| KPI surface | What it means to the clinic | Data required | Equation (plain business variables) | Difficulty | Best method |
|---|---|---|---|---|---|
| Promotions summary: promotions used, total loss, average loss, unique promotions, top promotion type, top type loss | Shows how expensive discounting really is | Promotion-linked expense rows; linked payment; promotion type or name | Promotion Events = count(promotion-linked loss rows); Total Promotion Loss = sum(promotion-linked loss amount); Average Promotion Loss = Total Promotion Loss / Promotion Events; Unique Promotions = count(unique promotion IDs used); Top Type Loss = max(sum(loss amount by promotion type)) |
Paper [#####] Excel [####-] Ubik [#----] |
Ubik |
| Promotion loss by name | Shows which named promotions are costing the most | Same as above | Promotion Loss for Promotion Name X = sum(loss amount where Promotion Name = X) |
Paper [####-] Excel [###--] Ubik [#----] |
Ubik |
| Promotion events table | Lets management audit each discount event by customer, cashier, payment method, and note | Promotion expense rows; linked customer and cashier | This table is the event-level ledger used to build the promotion-loss totals above | Paper [#####] Excel [####-] Ubik [#----] |
Ubik |
Performance
| KPI surface | What it means to the clinic | Data required | Equation (plain business variables) | Difficulty | Best method |
|---|---|---|---|---|---|
| Product performance table | Shows which products move volume, generate revenue, and keep or lose margin | Inventory charges; quantities; revenue after discount; business cost | Units Sold = sum(quantity sold); Revenue = sum(net sale value after discount); Cost = sum(quantity sold x business cost per unit); Margin Percent = (Revenue - Cost) / Revenue |
Paper [#####] Excel [####-] Ubik [#----] |
Ubik |
| Service performance table | Shows which services carry the most revenue, cost, profit, and trend | Service renders; quantity; service sell price; service business cost | Units Sold = sum(service quantity rendered); Revenue = sum(service sell price x quantity); Cost = sum(service business cost x quantity); Profit = Revenue - Cost; Margin Percent = Profit / Revenue |
Paper [#####] Excel [####-] Ubik [#----] |
Ubik |
| Sales summary table | Gives a mixed leaderboard of services and products by volume and pricing | Charges linked to services or inventory | Charge Count = count(charge rows for item); Average Price = Total Price / Charge Count; Total Billed Amount = sum(charge price values) |
Paper [####-] Excel [###--] Ubik [#----] |
Ubik |
Short Recommendations by Metric Type
Use paper only for:
- daily headcounts
- small one-off status counts
- very small clinics checking one day’s worth of visits
Use Excel for:
- short exported lists
- simple monthly rollups
- ranking customers, products, or suppliers after export
Use Übik for:
- anything mixing appointments, charges, payments, refunds, expenses, inventory, or staff logs
- anything time-based
- anything you need to trust repeatedly
- anything where live or near-live visibility matters
Bottom Line
The easiest metrics to reproduce outside Übik are simple counts:
- status counts
- new vs returning counts
- low stock and out-of-stock counts
- basic payment-method totals
The least practical metrics to reproduce outside Übik are the cross-record metrics:
- smart close forecasting
- profitability and promotion loss
- delinquent and discrepancy balances
- inventory planning and lot-risk analytics
- loyalty scoring
- employee performance blends
If the clinic wants one practical rule:
- use paper for quick same-day headcounts
- use Excel for exported ranking and follow-up lists
- use Übik for every metric that affects staffing, cash, pricing, stock, or collections
Schedule a Free Demo or Send Us a Message
We’d love to show you how Übik can help your clinic turn analytics into better operational decisions.
📞 WhatsApp: 1-612-383-6374
🌐 Website: goubik.com
📧 Email: [email protected]
👉 Or send us a message on Facebook