Uktupus Docs
Core

Today, Control Tower & Lens

Today, Control Tower, and Lens at the top of the sidebar.

Today (/today)

The Today home (/dashboard redirects here) is a customizable widget board. Admins set a default layout per role; each user can add, remove, reorder and resize widgets on top of that, then Reset to default. Layout is saved on the server (same board on every device). Polls published by HR still appear as a prompt at the top of the shell.

Focus bar

At the top of Today you can narrow all widgets by agents, regions, warehouses, customers and customer groups. Save named focuses (e.g. “My team”, “North”), switch with one click, and mark one as your default. Focus always respects warehouse and customer access — you never see another agent’s documents without sales.documents.view_all (or owner).

Widgets

Each widget shows counts and a short preview, with Open full list to the module screen. Initial load is one batched request; single widgets refresh when you change focus or when the tab is visible (and when shell notifications push). Available widgets (hidden if you lack the matching right):

WidgetWhat it shows
KPI tilesRevenue, open orders, unpaid, cash, stock / work-order counts
New sales ordersRecent open orders
Approvals waitingInbox approvals
Radar alertsMissed orders, ordering less, expiring lots
Cash positionCash / bank GL balances
Overdue customersCollections overdue slice
Pinned Lens reportsYour Lens pins
My tasksFinancial close tasks assigned to you
FollowingEvents for records you star

Follow (⭐)

On customer, product, project and (for managers with sales.documents.view_all) employee modals, star a record to follow it. The Following widget shows their events (orders, invoices, radar, stock below minimum). You can turn on optional notify per follow. Following an agent is only allowed when you can already see that agent’s documents.

Role defaults

Users with settings.today_templates.update can edit the default widget set per role from Today → Role defaults. New users get that template the first time they open Today.

Control Tower (/ops/control-tower)

A live exception board with recommend-and-execute that refreshes every 30 seconds. Exceptions sit in three columns — Sales & supply (incl. quality), Service (helpdesk, field service, fleet, people), and Finance. Severity colours each card (red high, amber medium, grey low); worse items sort to the top of their column. Click a card to open the record. Column chips at the top filter the board; each type lists at most 25 cards.

Orchestration (action queue): tiles that can be acted on (low stock with a preferred supplier, MRP suggested lines) expose a primary button — e.g. Create draft PO or Create production order. The top of the page lists a prioritized action queue of those recommendations. Executing uses the same services as Reorder suggestions / MRP (procurement.purchase_orders.create or inventory.mrp_runs.update); you land on the new draft document.

This is company-internal orchestration (sense → recommend → execute), not multi-partner IBP scenario planning.

You only see an exception type if the company is licensed for the module and your role has the right listed below. The board opens with any one of those rights.

AreaExceptionRaised whenSeverityRight
Sales & supplyLate cargo manifestsPosted manifest past its delivery date and the journey isn't finishedHighsales.cargo_manifests.read
Failed stopsStop failed or refused in the last 30 daysHighsales.cargo_manifests.read
Overdue purchase ordersConfirmed or partly received PO past its expected delivery dateMediumprocurement.purchase_orders.read
Stale goods receiptsDraft goods receipt older than 2 daysMediumprocurement.goods_receipts.read or procurement.purchase_orders.read
Low stockProduct below its reorder point (from reorder suggestions); Create draft PO when a preferred supplier is setHigh below minimum or safety stock, otherwise mediuminventory.reorder_suggestions.read or inventory.stock_levels.read
MRP exceptions & suggestionsLatest completed MRP run: planning exceptions plus suggested buy/make lines (create PO or production order from the tile)High for past due / no source / BOM cycleinventory.mrp_runs.read
Stuck warehouse flowAged open documents in the GR → put-away → pick → pack pipelineHigh after 5 days stuckFlow stage read rights (put-away, pick, pack, GR, reservations)
Promotions awaiting approvalSubmitted promotionLowsales.promotions.read
ServiceBreached ticket SLAsOpen helpdesk ticket past its first-response or resolve deadlineHigh for high/urgent priority, otherwise mediumhelpdesk.tickets.read
Tickets at riskOpen ticket whose next SLA deadline is within 2 hoursMedium for high/urgent priority, otherwise lowhelpdesk.tickets.read
Overdue work ordersOpen work order past its SLA due time, or past its scheduled end when it has no SLAHigh when the SLA is breached or priority is urgent, otherwise mediumfield_service.work_orders.read
Sales & supplyFailed quality inspectionsInspection completed as fail or quarantine in the last 30 daysHigh for fail, medium for quarantinehseq.quality_inspections.read
Open non-conformancesNCR that is open or in progressHigh when overdue or critical/high, medium, or low (follows the NCR severity)hseq.non_conformances.read
Expiring supplier certificatesNewest certificate of a type expiring in the next 30 days or expired in the last 30High once expired, medium within 7 days, otherwise lowhseq.supplier_certificates.read
FinanceOverdue invoicesPosted sales invoice past its due date with an open balanceHigh after 30 days, otherwise mediumsales.sales_invoices.read
Credit holdsActive partner on credit holdHighfinance.credit_management.read
Pending credit releasesCredit release request awaiting a decisionMediumfinance.credit_management.read
Unreconciled bank linesLine on a posted bank register older than 7 days that isn't in a completed bank reconciliationMedium after 30 days, otherwise lowfinance.bank_reconciliations.read
ServiceVehicle compliance deadlinesVehicle registration, inspection or insurance, or a transport document (licence, tachograph card…), expiring in the next 30 days or already expiredHigh once expired, medium within 7 days, otherwise lowfleet.compliance.read
Vehicle services dueActive service schedule due by date or odometer (within its lead time)Medium when overdue, otherwise lowfleet.service_schedules.read or fleet.compliance.read
Expiring employee certificationsLatest certification of its kind for an employee expiring in the next 30 days or expired in the last 30 (revoked ones are skipped)High once expired, medium within 7 days, otherwise lowhr.employee_certifications.read

Each card shows what is affected, who owns it (assignee, driver, employee or supplier) and the due date or age.

Lens (/analytics/reports)

Uktupus Lens is a free-form explorer over live ERP data — the same builder for every allowlisted dataset (sales, POS, procurement, payments, general ledger, stock, leave, work orders). Flow:

  1. Module — pick Sales, Procurement, Finance, etc. (or All)
  2. Sentence — Show · by · across · from · for · compared to. Use + field under by to stack dimensions (e.g. agent × product × month). Across pivots a second field as columns (e.g. agents as series across months).
  3. Optional starters — pack chips preload a useful shape; keep changing any chip after that
  4. More — extra measures, filters (pick specific agents/products), formula · Drill — click a bucket; last level is documents

Example: Show net by sales agent × product, across sale date (month), then in More filter to two agents.

Sales lines is the sales star: posted invoice lines, POS lines, and returns in company currency. A POS receipt that was later invoiced counts once (the invoice). A return/credit counts once on the return lines. Margin and margin % use only lines that have cost; cost coverage % (shown next to margin in the sales pack templates) is net sales with cost ÷ all net sales. Service products use cost 0. COGS comes from the stock movement linked to the delivery/invoice/POS/return line — not from date matching. Price-only credit notes reduce sales but not COGS; restock returns reverse COGS.

Examples: agent × region × product; margin by month; region × month; purchases by supplier × month; stock by warehouse × product.

Saved reports still accept the older single “group by / break down” shape.

Charts — time fields go on the X axis; other fields become the legend/series; the measure is Y. Multi-field results also show a pivot table. Types include bar, horizontal bar, stacked, 100% stacked, line, area, combo, Pareto (ranked bars + cumulative % with an 80% guide), line race and bar race (animated, with Replay), pie, donut, rose, radar, funnel, scatter, treemap, heatmap, waterfall, and table. In Options: data labels, zoom/brush, smooth lines, and compare (previous period, year-over-year, or a custom window).

Quick chips — This month · Last 3 months · This year · YoY · Top 10. Pack starters go beyond plain bars: margin & net trends, margin %, returns vs net, weekday radar, agent race, region/channel heatmaps, category/brand/customer Pareto concentration, AP outstanding, payment mix, GL concentration, stock movement stacks, leave/work-order funnels, and more. When cost coverage is under 95%, a warning appears next to the result: margin is based only on the share of lines that have cost.

Save a report as personal or shared with the team. Viewing and running reports needs analytics.reports.read; creating, editing and deleting are separate rights.

Export offers three formats:

  • PDF — landscape report: period/meta strip, KPI totals, up to three chart panels (your chart plus complementary views), then a compact data table (first 40 rows). Charts are rendered from the on-screen result and embedded as images.
  • Excel (.xlsx) — the server runs the report again with the current settings and returns a workbook: one sheet named after the report, a bold header row, date groups as real Excel dates, amounts as numbers with two decimals, counts as whole numbers, a bold total row, sized columns and a frozen header. A report returns at most 500 groups, or the top N you chose.
  • CSV — the rows currently on screen.

Pin to dashboard appears once a report is saved and adds it to your Today page. Opening a pinned report from the dashboard loads it in the builder (/analytics/reports?report=<id>). Sales overview What changed deep-links into Lens with dataset, measure, rows, compare, and dates already set (?module=sales&dataset=sales_lines&…).

Day-to-day vs Advanced

Most teams only need Today, Control Tower, and Lens → Reports (pin useful reports to Today). Each of Sales, Inventory, and Finance also has an Overview home with KPIs and interactive charts.

Advanced Lens tools (same allowlisted datasets; the UI never sends SQL) sit under Lens → Advanced so the default path stays clean:

AdvancedPathRights
KPI boards/analytics/kpi-boardsanalytics.kpi_boards.*
Board packs/analytics/board-packsanalytics.board_packs.*
Write-backs/analytics/writebacksanalytics.writebacks.*
Warehouse export/analytics/warehouse-exportsanalytics.warehouse_exports.*

KPI boards are personal, shared, or role-scoped. Optional accounting ledger and company group fields apply ledger and entity RLS when the board is evaluated.

Board packs schedule a board evaluation (daily / weekly / monthly) and stage an export artifact. Due packs run hourly via Analytics::RunDueBoardPacksJob; you can also Run now.

Write-backs map tile totals, dataset totals, or fixed amounts into a finance planning version line period (Apply requires an editable draft/rejected version).

Warehouse export configures Snowflake or BigQuery destinations, stages JSONL extracts under RLS, and returns provider-specific load SQL for the connector to finish the COPY/LOAD.