Introduction
Getting around
TheOrder is an import/export ERP. The left sidebar switches pages; the top bar has Settings (gear) and this Help (?). Click the ? next to a field anywhere in the app to jump straight to its explanation here.
How this Help works
This panel always opens to the page you're currently on. Use the tabs at the top to read about another page, or the search box to find a topic by keyword.
Many controls in the app have a small ? next to them — clicking it opens this panel right at that control's explanation.
"It was there yesterday" — features that appear only when relevant
Several controls only show up when they have something to do. For example, a filter's "Show all" toggle only appears when a filter is actually active. So if you don't see an option you expected, it's usually because the data that triggers it isn't set up yet — not a bug. Each page's help calls out these cases under "Why don't I see…".
Signing in & out
TheOrder is a multi-tenant ERP reached at your company's own web address. You sign in with a username and password; what you can see and do afterwards is decided by your job title's access rights and the branches you're assigned to — two people on the same system can see very different menus. This topic covers getting in and out safely.
Signing in
On the login screen you enter your username and password. On success you land on the Dashboard, and the app loads your profile, branches, currencies, and access rights in one bootstrap so everything is ready. If your password is wrong or your account is inactive, the screen says so — an admin manages accounts in Settings → Access Rights.
Signing out
The sign-out button is the last icon on the top bar (top-right). It ends your session cleanly — it clears your local session data and returns you to the login screen, so it's the safe way to leave on a shared computer. The app also warns you before an idle session times out.
The top bar
The top bar runs across the top of every page. On the left it toggles the navigation and names the page you're on; on the right sits a cluster of always-available tools — status, your workspace, the clock, Help, the Settings shortcut, the notification bell, and your profile / sign-out. This tour walks each one.
Page title
Names the page you're currently on — it updates as you navigate, so you always know where you are. The button to its left folds the navigation sidebar (covered in the Navigation topic).
The Live indicator
A green "Live" chip confirms the app is connected to the server and receiving updates. If connection is lost it changes, so you know when what you're seeing may be stale.
Workspace identity
Shows which workspace (company / subdomain) you're in, plus plan and usage — click it for detail. It's here so "whose books am I in?" is always one glance away, which matters if you work across more than one TheOrder tenant.
The clock
A live clock. Because the ledger records times in UTC, it helps to see the current time at a glance when you're posting or auditing dated activity.
The Help button
The yellow Help pill opens this help panel, defaulting to the page you're on. Every panel also has a "Take the tour" walkthrough, and many individual fields carry a small ? that jumps straight to their explanation.
The Settings shortcut
The gear opens Settings. From most pages it opens FILTERED to the settings panels relevant to that page (with an orange chip you can clear to see everything) — a fast path from a page to the config behind it. The sidebar's Settings item always opens the full, unfiltered list.
The notification bell
The Action-Center bell — its number and colours break down the work waiting on you (approvals, requests, reminders) versus work you've raised. Click it to jump to whichever side has open items.
Your profile
Your name (hover shows your username + branch), with a profile popover beside it for your account details. The sign-out button is at the very end — see the "Signing in & out" topic.
Navigation & the sidebar
The dark sidebar on the left is how you move around TheOrder. Pages are grouped into colour-coded SECTIONS (Operations, Finance, HR, System …), and you only see the pages your access rights allow — so your menu is tailored to your role. It folds to a slim icon rail to give a busy page more room.
Sections & pages
Pages are grouped into labelled sections, each with its own colour dot — so related work (orders, the finance ledger, HR, system config) clusters together. Items you don't have access to simply don't appear. A badge on an item flags work waiting there (e.g. pending approvals).
Folding the sidebar
Two ways to collapse the sidebar to a slim icon-rail (and back): the arrow / menu button on the top bar, or clicking the logo at the top of the sidebar itself. Collapsed, you still navigate by icon — hover shows each page's name. Your choice is remembered.
Operations
Dashboard
Your home screen — a live, at-a-glance read of the business, scoped to a time period and branch. It's built from stacked zones: a control bar, headline metrics, performance breakdowns, alerts that need action, quick launchers into every page, charts, and a recent-activity feed. Everything is clickable — a number is a doorway to the records behind it.
The control bar
The strip across the top scopes the WHOLE dashboard — change anything here and every zone below re-fetches to match. It holds the Period and Branch scope, an Include-closed toggle, the jump search, a freshness stamp with a Refresh button, and the gear that customizes your board. The next steps walk each control.
Note — If you're not an ORD-admin, a "Your activity" badge appears — the numbers are YOUR orders / customers / vendors, not the whole company's.
Period — the time window
Sets the time window for every metric and chart on the board. Open it and pick: Today, This Week, This Month, This Quarter, This Year, or "Custom range…" — which reveals a from/to date pair for any window you like. Everything below recalculates the moment you change it.
Branch — the location scope
Narrows the whole board to one branch, or "All Branches". Together with Period, this is the scope every tile, alert and chart is measured against. (You can also re-scope to a branch by clicking its row in the Performance zone below.)
Include closed periods
By default the board hides rows from sealed (closed) fiscal years, so the numbers reflect live activity. Admins get this toggle to switch sealed-year rows back ON across every zone — for audit or research — then off again. It's a separate axis from the Period window above.
Note — Only ORD-admins see this toggle; for everyone else it simply isn't there.
Jump search — go straight to anything
The search box in the control bar searches EVERYTHING at once — you don't pick a category first. It matches:
- Order numbers (Ord#) and shipped-order numbers (SO#).
- Shipping bills and general bills.
- Customer, Vendor and Contractor names.
Note — Each result carries a coloured kind-tag (ORD, SO, BILL, CUSTOMER…) so you know what it is. Click a result and it takes you straight there — the order opens in detail, the bill opens, or the entity opens its profile. It respects your Branch filter. It's the fastest way to one specific record without opening a page and filtering.
The KPI tiles
Your headline metrics. Each tile is a mini panel — never just a single number — and every tile is a doorway: click it to open the page behind it. The next steps walk each tile in turn.
Note — You choose which tiles appear in Customize (⚙), and a tile for a page your role can't open never shows. So your set may differ from what this tour highlights.
Tile — Active Orders
Your live purchase orders. The big figure is the count; underneath, the tile breaks down total Quantity, Cartons (CTN), CBM (volume in m³) and Gross Weight, then the money — the value in each currency in play, with a single local-currency total below. A small status strip shows how those orders split across the stages (Pending / Confirmed / Part-received / …). Click the tile to open the Orders page.
Tile — Shipped Orders
The same rich breakdown as Active Orders — count, quantity, cartons, CBM, weight, and value per currency — but for cargo that has already shipped and been archived. It's your "what's gone out" figure for the period. Click to open the Shipped Orders page.
Tile — Customers
How many customers are in scope for the period, plus the volume (CBM, weight) and the money tied to them, shown per currency with a local-currency total. Click the tile to open the Customers page.
Tile — Vendors
The same shape as the Customers tile, for your suppliers: how many, their volume, and the money per currency with a local total. Click to open the Vendors page.
Tile — Contractors
Your service providers (freight, customs, inspection…): how many, how many bills they've generated, and the money per currency. Click to open the Contractors page.
Tile — Cargo Inventory
Goods physically sitting in your warehouses right now — this is stock on hand, NOT orders. It shows the number of item lines, cartons, CBM and weight, split by warehouse. Click to open the Inventory page.
Tile — Cash Position
Your current cash across all cash and bank accounts. Unlike the order tiles, this is a live balance SNAPSHOT — it reflects the accounts right now, not the selected period. Needs Finance access. Click to open the Chart of Accounts at those accounts.
Note — The next three tiles are Finance-only (Cash, AR/AP, Top Expenses) — you won't see them without FIN access.
Tile — AR / AP
The two sides of your working capital as live balances: Accounts Receivable (what your customers owe you) versus Accounts Payable (what you owe your suppliers). A quick read on who owes whom. Finance access; click to open the accounts.
Tile — Top Expenses
Your largest expense accounts by balance, so you can see where the money is going at a glance. Finance access; click to open the accounts.
Needs Attention — every alert
The action list. Each tile is a real problem with a live count, and clicking it lands you on the EXACT records behind it (e.g. "Pending > 7 days · 7" opens those 7, not all of Pending). The alerts:
- Forgotten Pending — orders left Pending too long (default > 7 days).
- Delivery Delay — Confirmed orders overdue (default > 21 days).
- Warehouse Aging — goods sitting received too long (default > 14 days).
- Ready to Archive — Ready-to-Ship orders waiting to be shipped and archived.
- L/C Docs Missing · Documents Expired · Shipments Missing Docs — shipment-paperwork problems (logistics).
- Period Close Approaching · Opening Balances Incomplete — finance housekeeping.
- Awaiting my approval — requests other people sent you to action.
- My pending requests — requests you sent that aren't resolved yet.
Note — Labels and day-thresholds are set by admins in Dashboard Settings, so your wording may differ. When nothing's outstanding the whole zone turns green — "all clear".
The Launchpad — quick jumps
Launcher tiles into the pages you use most, each with a live count so you can gauge the workload before clicking. A tile just opens the page fresh — no filter is forced on you. The tiles (you only see the ones your role can reach):
- Active Orders and Shipped Orders (Orders module).
- Shipping Bills, General Bills, Payments, Treasury, Journals, General Ledger (Finance module).
- Pay Period (Payroll module).
Note — Which tiles are pinned is yours to choose in Customize (⚙).
The charts — one by one
The visual read of the same period + branch scope. Every slice uses the same colours as the rest of the app. The charts:
- Monthly Trend — orders and their value over recent months (area chart).
- Currency Mix — the share of your orders by currency, weighted by value (donut).
- Order Pipeline — how many orders sit at each lifecycle stage (bar).
- Alert Distribution — where your open alerts are concentrated (donut).
- Top 5 Customers / Vendors / Contractors / Products — who and what make up the biggest share (donuts).
Note — Hover any slice or point for the exact numbers. Pick which charts show in Customize (⚙).
Recent Activity
A live feed of what's happening across the workspace — created / updated / deleted, colour-coded (green / blue / red), most recent first. Where an entry points at a real record it's clickable: jump straight to that order or bill, or open the profile of the person who made the change. It's the quick "what just happened" pulse of the business.
Customize — the gear
The gear (⚙) at the far right of the control bar opens your personal dashboard preferences. The tour opens the panel for you in the next step.
Your dashboard preferences
This panel (the tour opened it) is yours alone and round-trips on your next login. You set your default Period and default Branch when the board loads, and — with checkboxes — exactly which KPI tiles, Launchpad tiles and charts you want to see. Tick what's useful, untick the noise; everyone shapes their own home screen.
Products
Your product catalogue — the master list every order, packing list and stock figure is built from. Each product carries its price and currency, a category, shipping dimensions and weights, identifiers (SKU / barcode / HS code), a default supplier, and an optional set of quantity price-breaks. This page is the grid of all products plus one form for adding or editing a single product.
The narrowing filters
Four dropdowns narrow the grid: Units, Currency, Category and Sub-Category. They stack (each narrows further), and Sub-Category cascades from Category — it stays disabled until you pick a category, and resets when you change it. Each clears back to "All".
The Low Stock filter
This pill shows only products that need restocking — anything at zero, or at/below its reorder limit. The number on the pill is how many currently qualify. Click it to show just those; click again to clear. It's the fast way to build a reorder shortlist.
The product grid
One row per product. Click a row to open it in the form; click the open row's header (or the fold arrow) to close it again.
- Click a column header to sort by it.
- The thumbnail cell — click a photo to enlarge it.
- A variant sits indented under its parent, with a link icon; a parent shows a "(N variants)" tag.
- The tick-box (left) selects rows for a bulk update — the bulk bar appears once any row is ticked.
- The action cell (right) has Duplicate (copy this product into a new form) and Delete (blocked if the product is used by any order or stock).
- Cards view groups the same products by category, with per-category stock and low-stock counts.
Photo, Name & Specifications
The photo box on the left takes a click or a drag-and-drop image. Product Name is required and is what shows everywhere else (orders, packing, reports). Specifications is free text for the details — material, grade, dimensions in words — up to 100 characters.
Category, Sub-Category & Type
Category and Sub-Category classify the product (and drive the vendor narrowing below). "Product Type" (e.g. Whole-Set / Accessories / Spare-Parts) is a separate classification. Sub-Category cascades from Category. Use the small +New button beside each picker to add a new value straight into the lookup list without leaving the form (admins only).
Price, Currency & Exchange Rate
Price is the unit price in the Currency you pick beside it. Exchange Rate is that currency's rate to your local (books) currency — it auto-fills from the currency and is normally left alone. The gear/manage button by Currency jumps to the currency settings if you need to add or fix one.
Units, Reorder Limit & Stock
Units is the unit of measure (Pcs, Box, Set… from the lookup list; +New to add one). Reorder Limit is the level at which the product counts as "low stock" (and lights up the Low Stock filter). Stock is read-only here — it's the live on-hand quantity, driven by receiving and shipping on the Orders side; a new product starts at 0. Click the stock badge to drill into its inventory.
Default Vendor & the "Show all" toggle
The Default Vendor picker is narrowed to vendors that supply this product's category — so you pick from the right suppliers, not the whole list.
Open the picker and, when a narrowing is active, a header appears at the top of the dropdown: "Suppliers of 'X' (N)" with a "Show all" link. Click "Show all" to drop the filter and choose any vendor; "Filter to category" puts it back. Changing the product's category re-applies its own narrowing. The +New button beside it adds a vendor without losing this form.
Note — Don't see the cue / "Show all" toggle? It only appears when the category is supplied by SOME vendors but not all — i.e. when there's actually something to narrow. If no vendor lists this category (Vendors → supplied product categories), the picker just shows every vendor and there's nothing to toggle. Set a vendor's supplied categories to activate it.
Variant of — product families
"Variant of" links this product as a child of another (a size, colour or grade of the same base item). A variant keeps its own stock and price but sits indented under its parent in the grid, and the parent shows a "(N variants)" tag. Leave it "None" for a standalone product.
Origin
Origin is the country the goods are made in / shipped from ("Made in…"). It flows onto the order line and the customs paperwork as a default.
HS Code — the customs tariff code
The HS Code is the customs classification for the goods. The field is a live search over the code catalogue — type a number or a description and pick the match (it never loads the whole multi-thousand-row list, so it stays fast). The Manage button beside it opens the HS Codes settings if you need to add or edit codes. This value defaults onto orders and the packing list.
SKU & Barcode must be unique
Every product's SKU and Barcode must be unique, so a scanner read or an exact SKU/name resolves to exactly one product. Leaving either blank is fine — many products can have no SKU/barcode.
Note — If you try to save (or CSV-import) a product with a SKU or barcode already used by another product, you'll get a clear message naming the other product. Fix the value or clear it.
Shipping Dimensions (fold-out)
Click "Shipping Dimensions" to expand it. Here you set Units per Carton, the carton's Length/Width/Height in cm, and Gross/Net weight. From the size the app shows the CBM (cubic metres) per carton, and per total. These defaults flow onto every order line for this product and feed the packing list's cartons, weights and volume.
Price Tiers (fold-out)
Click "Price Tiers" to expand it. Tiers are quantity price-breaks: a minimum quantity, its price and currency, and an optional date window (from/to). Add as many rows as you need. They let "buy more, pay less" pricing apply automatically instead of being typed by hand each order.
Print, Audit, and saving
At the bottom of the form: Print produces a one-product detail sheet; Audit shows this product's full change history (who changed what, when); Cancel discards; Save writes your changes. Nothing is saved until you click Save.
Updating many products at once
Tick several rows in the grid and a bulk bar appears above it. Choose a field — Category or Default Vendor — set the value, and Apply writes it to every ticked product in one go. Clear deselects them. It's the quick way to re-file a batch of products under a new category or supplier.
Import from a spreadsheet
Import loads products from a .csv file. A dialog opens where you map each spreadsheet column to a product field, review the parsed rows, and then apply. Headers can be the long form from a recent Export, or the older short form — both are accepted. Import is insert-only: a name that collides with an existing product is saved as a version ("Name (2)"), while a duplicate SKU or barcode is rejected with a per-row message.
Export to a spreadsheet
Export downloads the products you're currently looking at (after your filters and sort) as a .csv file. The columns cover every editable field, so the file round-trips straight back through Import — handy for bulk edits in a spreadsheet.
Report Center
Report (the printer button) opens the Report Center: choose which columns to include, filter and group, add charts, then print or export to Excel / PDF. It's the full-featured way to produce a product listing document, versus the raw Export file.
Sourcing
Sourcing is the pre-order desk — where a customer's request for goods turns into purchase orders. You open a request for one customer, list what they want (the demand lines), then collect price quotes from suppliers against each line. Once you've compared the offers you set how much to buy from each supplier, record the customer's and the admin's approval on the chosen lines, and seed them into real purchase Orders — grouped by supplier, so one request can create several orders. Along the way you can email the customer a quotation PDF; when everything's ordered you close the request. Sourcing posts nothing to the ledger — it is purely pre-order (no margin, a straight cost relay); the money starts only when the seeded Orders are confirmed in Orders.
The stage chips
The chips filter the list by where each request sits in its life. The number on each chip is how many requests are in that stage:
- Open — being worked on: collecting offers, setting buys, gathering approvals, seeding.
- Closed — done and marked complete (you can still reopen it).
- Cancelled — abandoned.
Note — Click a chip to show only that stage; click it again to clear.
The filters
Three pickers narrow the list — Customer, Branch, and Employee (the owner) — plus a search box. They combine, so you can zero in on one customer's requests in a couple of clicks.
New request — starting a request
New request opens the form for a fresh request (the tour just opened it). A request always belongs to ONE customer; you pick the customer and the owner, then list the demand lines. The next steps walk through it.
New request · the demand lines
Each demand line is one thing the customer wants. Per line you set the product (the same picker as Orders, with “+ New”), a specification, the quantity and units, and a target price with its own currency and rate. When you pick a product its list price and its last purchase price are shown for reference. The product can be left as free text and formalized later. Use “+ Add demand line” for more, then Create.
Note — Currency is per line, not per request — sourcing compares quotes across currencies. There is no warehouse here; a seeded Order line takes Orders' default.
Opening a request
Clicking a request opens its detail (the tour just opened one). The strip up top counts the demand lines, suppliers, quotes, approved and ordered lines. Below, each demand line is a card with its own price comparison. The header carries the lifecycle buttons and the Quotation / Seed / Report tools.
The demand lines
Each demand-line card shows the full line — product, specs, needed quantity and units, target price, the product's list price, its last purchase price, category and any notes. Edit or Delete the line from the purple drawer; “+ Add demand line” adds another. Deleting a line removes its supplier quotes too.
Collecting supplier prices
Under each demand line, “Add a supplier's price” records one supplier's quote for that line — pick the supplier, the unit price with its currency and rate, the quantity they offer, lead time, and (if they offered a different item) a substitute product. Every supplier you quote appears as a row in the line's price table so you can compare them side by side: unit price, the same price converted to your local currency, minimum order (MOQ), the offered quantity, and lead time. A SUBSTITUTE tag flags a different product.
Buy & approvals
On each price row you decide the deal:
- Buy — how much to purchase from THIS supplier. Split one demand line across several suppliers by setting a Buy on more than one row. Buy can't be below the supplier's MOQ.
- Cust — the customer's approval (you tick it on their behalf until a customer portal exists).
- Admin — the internal approval.
Note — A row turns solid green when it's ready to seed — a Buy quantity, both approvals, and a real product. That's what the Seed step picks up.
Seed to Orders
“Seed to Orders” turns the ready rows into real purchase Orders. It first shows a preview: one card per supplier, with each line's demand-vs-offered-vs-buy quantities, target-vs-quoted price and the difference, a coverage roll-up, the cheapest quote flagged, and lead-time / MOQ warnings — plus whether each order is brand new or appended to one this request already made for that supplier. Confirm and it creates the orders (grouped by supplier — one order per supplier), seeded as Pending so nothing posts to the ledger until you confirm them in Orders. Seeded rows lock and show the order number they went to.
Quotation PDF & sending to the customer
Quotation PDF opens a printable quotation — your company letterhead, the request details, and per item the supplier options with prices and the lines you recommend highlighted. Send to customer emails that same PDF (confirm or correct the address first). This is how the customer reviews and approves before you seed.
Closing & clearing stale quotes
When Open, the header offers Close (mark it done — it highlights once everything you selected is seeded), Cancel (abandon it), and Clear stale quotes (delete the losing supplier quotes that were never chosen). A Closed or Cancelled request is locked — Reopen it to make changes again.
Report Center
On both the list and inside a request, Report Center prints or exports the data — the requests list, or the full offer-comparison for one request (every demand line with its suppliers, prices and terms).
Orders
This is your Purchase Orders page — where you record what you're buying from suppliers and follow each order from the moment you place it, through receiving the goods, to shipping them out. Every row is one order line: a single product with its quantity, price and progress.
The status chips
The coloured pills — All, Pending, Confirmed, Part Rcv (part received), Part Shp (part shipped), Received, Ready to Ship — filter the list to orders at that stage. The number in each pill tells you how many orders are at that stage right now, so you can see your workload at a glance. Click one to show only those; click All to show everything.
The filter dropdowns
Below the status chips are seven dropdowns — Branch, Currency, Employee, Customer, Vendor, Warehouse and Cargo Type. Pick a value in any of them to narrow the list.
They work together: choosing a customer, for example, shrinks the other dropdowns to only the values that actually appear in that customer's orders — so you can't pick a combination that shows nothing.
The totals bar
The strip between the filters and the list adds up what you're currently looking at — quantities and money, broken down per currency plus a single total in your local currency. It always reflects your filters, so narrow the list and the totals follow.
The order list
The main grid shows one row per order line. Click a column header to sort by it. Click a row to open that order in detail.
Use the Cards / Table button (top right) to switch layouts — the table is dense and good for scanning; cards are roomier and show more per order at a glance.
Creating a new order
Click New Order to open the create form. The next steps of this tour walk you through filling it in — who the order is for, the product lines, and saving.
Line columns — Product & Spec
Now the line columns, left to right. In the Product cell, start typing to search your whole catalogue by name, SKU, barcode or category; pick a result and the line fills in automatically — price, dimensions, weights, units, origin, and the product's SKU and barcode. A barcode scanner works here too. The Spec column beside it holds the specification text for that product.
Note — If the order's vendor has "supplied product categories" set (Vendors page), the picker only shows products in those categories, with a "Show all" header to reach others.
Quantity & Units
Quantity is how many you're ordering. Units is the unit of measure (Pcs, Box, Set…) — it comes from the product but you can change it on the line.
Price, Currency, Rate → Amount & Local Amount
Price is the unit price, in the line's Currency. Rate is that currency's exchange rate to your local (books) currency.
Amount = Quantity × Price (in the line's currency). Local Amount converts that into your local currency using the Rate. Amount and Local Amount are worked out for you — you never type them.
Warehouse & Cargo type
Warehouse is where the goods are planned to go — while the order is still Pending or Confirmed you can list one or more; after that it's kept in step with the actual receive/ship movements. Cargo type classifies the shipment (by transport mode, etc.) and is used later to group the Packing list.
Cartons — Units/Carton, CTNs, CBM
Units/Carton (U/CTN) is how many pieces fit in one carton. From that and the quantity, the app computes CTNs (how many cartons) and, with the dimensions, CBM (total volume in cubic metres). CTNs and CBM are calculated — you only set Units/Carton and the box size.
Dimensions — L · W · H
The carton's Length, Width and Height in centimetres. They feed the CBM (volume) figure and the carton labels. They default from the product; set them on the line if this order's packing differs.
Weights — Gross & Net
GW is the gross weight per carton (goods + packaging); NW is the net weight (goods only). The totals bar adds these up across all lines for the whole order.
Labels — Product Label & Imported By
Product Label is the product name as it should print on the cartons and shipping documents (sometimes different from the catalogue name). Imported By names who the goods are imported by (defaults from the customer). Both appear on carton labels and paperwork.
Origin (and HS code)
Origin is the country the goods are made in / shipped from. Together with the HS tariff code carried from the product, it drives customs paperwork. It defaults from the product.
SKU & Barcode
SKU and Barcode are snapshots copied from the product the moment you pick it — so the order records exactly what was ordered even if the product master is edited later. They also print on labels and let a scanner find the line.
Delivery date (per line)
The date this line is expected to be delivered. Each line has its own; the header shows a summary of all of them. The date is colour-coded by urgency — green = comfortable time, amber = due, red = overdue — so tight lines stand out.
Import lines from a spreadsheet
Importing is a different thing from exporting, and it lives INSIDE an order — not in the top toolbar. You'll find the "Import CSV" button here in the New Order form (next to Add Line), and again inside an existing order's detail view.
It opens a column-mapping dialog: you match your spreadsheet's columns to the order fields, check the preview, then apply. In a new order it fills the draft's lines; in an existing order it adds the lines onto it. It's the quick way to load a big order from a supplier's list instead of typing each line.
Note — The Import button only shows once you've opened the New Order form or an order's detail — that's why it isn't next to Export in the toolbar.
Add Line, Import, and saving
Under the line table: "Add Line" adds another blank product row; "Import CSV" bulk-fills the lines from a spreadsheet; "Cancel" throws the draft away; "Create Order" saves it. Nothing is saved until you click Create Order.
Opening and editing an order
Click any order to open its detail panel. There you can edit the lines, add more lines, and record progress. Most cells edit in place — click, change, and it saves. To close, click the order's header again or press Escape.
Receiving and shipping goods
As goods arrive or leave, use the Rcv (receive) and Shp (ship) buttons on a line. A small panel slides in where you pick the warehouse and the quantity. Before you confirm, it shows a live preview — green if it's fine, red if there's a problem (for example, trying to ship more than a warehouse holds) — so you can't accidentally oversell.
The line's status moves along on its own from the quantities: once everything's received it becomes Received, and once it's ready to leave, Ready to Ship.
Warehouses
A warehouse isn't fixed for a whole order — it's chosen at each receive or each ship, because goods can land in or leave from different places. While an order is still Pending or Confirmed you can note the planned warehouse(s); after that, the page keeps the warehouse list up to date automatically from the actual movements you record.
Doing many lines at once
Inside an open order you can tick several lines and apply the same action to all of them together — for example, receive or ship a whole batch in one go instead of line by line. A preview shows what will happen before you confirm.
Carton labels — where to start
Still inside the open order: every line has a "Labels" button (a printer icon, or a count like "6 CTN" once labels exist). Click it to open the Carton Label Designer for that line's cartons. If the line has no labels yet, the app first works them out from the line's Quantity and Units/Carton, then opens the designer.
Note — The next steps open the designer with a few sample labels so you can see every control. Your real labels are filled from the order line automatically.
The label designer — the settings panel
The strip down the left of the designer is where you shape the labels — font, border, how many fit on a page, margins, paper size, and the barcode/cut-mark toggles. Everything you change updates the preview on the right instantly. Nothing is committed until you print, so try things freely.
Presets — a one-click starting point
The preset buttons (Shipping Label, Small Sticker, Single Full Page, Thermal Printer) load a whole set of sensible settings at once — font, size, border, how many labels per page, margins and paper. Pick the one closest to what you want, then fine-tune. Choosing a preset also jumps you back to page 1.
Font & text
Set the typeface (a monospace font like Courier keeps columns aligned and is the safest for labels), the font size in points, the line spacing, and the weight (how bold). Above weight 900 the app adds an extra stroke to make the text even heavier for low-quality printers. You can also switch the text to italic.
Label box & border
"Label Padding" is the breathing space inside each label between the border and the text. "Border Style" draws a line around every label — solid, dashed, or none — and when it's on, "Border Width" sets how thick that line is. Dashed borders double as a cut guide when you print many labels per sheet.
Labels per page & per row
"Labels / Page" is how many labels print on one sheet; "Labels / Row" is how many sit side by side before wrapping to the next line. H-Spacing and V-Spacing are the gaps (in millimetres) between labels across and down. Together these turn one design into a full sheet of repeated labels.
Page margins
The blank border around the whole sheet — top, bottom, left and right, in millimetres. Increase them if your printer clips the edges, or shrink them to fit more on the page.
Paper size & orientation
Choose A4, Letter, or Custom. For Custom you type the exact width and height in millimetres — use this for label rolls or a thermal printer. Orientation flips the sheet between portrait (tall) and landscape (wide).
Cut marks & barcode
"Show cut marks" adds small corner guides at each label's edges so you know exactly where to cut a full sheet. "Show barcode" toggles the barcode line (the product barcode, printed as the last line of each label) — turn it off for a cleaner text-only label.
Zoom the preview
Zoom in or out to inspect the label closely or see the whole sheet at once. This only changes how big the preview looks on your screen — it does NOT change the printed size, which always follows the paper and label settings. "Fit" resets the zoom to 100%.
The preview — and editing the text
The white sheet is an exact preview of what will print. Click any line of text on a label to edit it right there — handy for a quick correction before printing. Your edits apply to this print session.
Note — The label text comes from the order line automatically, so you rarely need to type here. To change it permanently, edit the order line (product label, quantity, dimensions, etc.) rather than the label text.
Print this page or all pages
"Page" prints just the sheet you're looking at; "All" prints every page of labels for this line (the number in brackets is how many pages). Both open your browser's normal print dialog, where you pick the printer and confirm. The printout uses your exact settings — paper, margins, borders and barcode.
Move between label pages
When a line has more cartons than fit on one sheet, the labels spread across several pages. Use First / Prev / Next / Last at the bottom of the designer to step through them and check each page before printing. Close the designer (the ✕) to return to the order.
Delivery dates and the colours
Each line can carry its own delivery date. The date shows a colour by how close it is — green when there's comfortable time, amber when it's getting near, red when it's due or overdue — so urgent orders stand out. Lines already received or ready to ship don't show a dot, since the date no longer matters for them.
Export to a spreadsheet
The Export CSV button in the top toolbar downloads the orders you're currently looking at (after your filters) as a spreadsheet file — handy for sharing or working with the numbers outside the app.
Printing and Report Center
Report Center (the top button) is where you print and export. You choose which columns to include and whether to print exactly what's on screen or a wider set, then print or save it.
Handing off to Packing
When orders are ready to ship, the "Shipping and Packing list" button takes you to the Packing page and carries your current filters across as a starting scope — so you continue with the same set of orders you were just looking at.
Shipping & Packing
This is where ready goods actually leave the company. The main job of this page is SHIPPING: you take the Ready-to-Ship lines, ship them as one cargo, and the app calculates the service fee, posts it, and updates every related account — then the finished orders move to the archive. Around that main job, the page also carries the supporting work: the loading order of the cartons, weights and volumes, customs codes, and — last of all — printing the packing list document.
Shipping the ready goods — the main job
The teal "Migrate Shipped Orders" button is the heart of this page. When lines are Ready to Ship, this is how they leave the system as one cargo. In one confirmed action the app does four things: the lines are archived to the Shipped Orders page, every money movement that belonged to them is remapped to the new shipped order, the service fee is calculated from your fee rules and posted, and all the related accounts are updated.
The number on the button tells you how many Ready-to-Ship lines are waiting. The next steps of this tour open the panel and walk it control by control.
Note — Only ORD-admins see this button, and it lights up only when there ARE Ready-to-Ship lines. Nothing ships until you confirm inside the panel — opening it is always safe.
The shipping panel
This panel is a checklist, not a trigger: you describe the cargo, choose what goes in it, run a safe Check, review the preview — and only the final "Migrate Now" button actually ships. You can close it any time with the ✕ (or the Close button) and nothing will have happened.
While the panel is open the whole page switches to shipping mode: the table shows only the Ready-to-Ship lines in your scope, each with a tick-box.
Note — If you carried a scope from the Orders page, the panel starts pre-filled with it — same branch, customer, vendor, employee and cargo you were just looking at.
Cargo Type — the one required choice
Every shipment must carry a Cargo Type (sea, air, land… — whatever types you've defined). It does two jobs: it labels the archived cargo so you can find and group it later, and it's one of the keys used to match the right service-fee rule. The Check button refuses to run until you've picked one.
Narrowing the cargo
The dropdowns beside Cargo Type — Branches, Suppliers, Customers, Employees — narrow which Ready-to-Ship lines go into this cargo. They're smart: each one only offers values that actually appear in the Ready-to-Ship lines in front of you, so you can't pick an empty combination.
Changing any filter resets the Check — the preview you saw no longer matches what's selected, so you simply run Check again.
Ticking the exact lines
In shipping mode every Ready-to-Ship line in the table gets a tick-box — this is the finest level of control over what ships. Everything starts ticked; untick a line to leave it for the next cargo. The tick-box in the column header selects or clears all visible lines at once.
So you have three levels: the panel filters (broad), the order chips (whole orders), and these tick-boxes (single lines).
Choosing whole orders — the order chips
The chip bar lists every order in the shipping scope with a count like (3/5) — selected lines out of total. Click a chip to hide that whole order from the table and drop it from this cargo; click again to bring it back. "Show all" restores everything. It's the quick way to say "this container takes orders 12 and 15, but 17 waits for the next one".
Check — the safe dry-run
Check asks the server to rehearse the whole shipment without changing anything. Two things can come back:
An orange "Issues found" box — a numbered list of what blocks the shipment (for example, a line missing data or quantities that don't add up). Fix them and Check again.
A green "Ready to migrate" box — the preview of exactly what will ship: how many lines and orders, the total value, the branches involved, and the service fee it matched. Run Check as many times as you like; it never costs anything.
The preview & the service fee
The green box is your last look before committing. Beside the counts and total value it shows the matched service-fee rule: your fee rules each carry a priority, a percentage, a minimum fee and a currency — the highest-priority rule that fits this cargo wins. The preview names the rule and shows the percentage and minimum, and you can override the fee currency right there if this cargo should be billed in a different one.
When it all looks right, "Migrate Now" executes the shipment. That click is the only irreversible one on this page.
After shipping — what you get back
When the migration finishes, a blue summary reports everything that happened: the new Shipped Order ID (the archived cargo's number), how many lines and which orders were migrated, how many money transactions were remapped onto it, the service fees actually posted, and the list of affected accounts — worth a review by your finance side, since balances moved.
From here on, the cargo lives on the Archived Orders page: the working Orders list stays lean, and the full history — lines, documents, fees — is preserved under that one shipped order.
Note — If the service fee couldn't be posted (for example no rule matched), the summary says so with a warning instead of failing the whole shipment — the goods still ship, and you can sort the fee out afterwards.
The status chips
Same idea as on the Orders page: the coloured pills filter the list to lines at that stage, and the number in each pill is how many are there right now. For shipping you'll mostly live in Received and Ready to Ship — but every stage is available, so you can plan a container before the goods have even arrived.
Note — The chips disappear while the shipping panel is filtering — in that mode the table shows only the Ready-to-Ship lines the panel has scoped.
The cargo totals
The cards add up what you're currently looking at: how many lines, total quantity, how much is received and shipped, total cartons, gross and net weight in kilograms, and CBM (the total volume in cubic metres). This is your loading maths — narrow the list to one cargo and you can read its weight and volume straight off the cards, before the truck arrives.
The lines table
One row per order line, with everything the warehouse needs side by side. The table is wider than the screen — scroll sideways for the far columns — and every column header sorts when you click it:
- Seq — the load sequence (next step of this tour).
- Order / Ser — which order the line belongs to and its line number.
- Customer, Vendor, Product Name, Spec — who and what.
- Qty / Rcvd / Shpd — ordered, received so far, shipped so far.
- U/CTN and CTN — pieces per carton, and how many cartons that makes.
- Carton No. — the carton numbering for the boxes (explained shortly).
- L×W×H, G.W., N.W. — carton size and weights, feeding the totals above.
- HS Code, SKU, Barcode — customs code and product identifiers.
- Status — the line's current stage.
Load sequence — planning the container
The Seq column is the order the cartons go into the truck or container: 1 loads first, 2 next, and so on. Plan it so what must come OUT first goes IN last.
Type a number in any line's Seq box and press Enter (or click away) to save it. If the number is already taken, the other lines shift to make room — you never get two lines fighting over the same position. Click the Seq column header to sort by it and read your loading plan top to bottom.
Auto Seq — number everything in one click
Auto Seq numbers every visible line 1, 2, 3… in one go. So: filter the table down to the cargo you're loading, then click Auto Seq and the plan writes itself. You can still fine-tune individual lines by hand afterwards.
Note — It numbers the lines you can SEE — your filters decide what gets numbered. That's a feature: filter to one cargo first, and Auto Seq numbers just that cargo.
Reset Seq — start over
Reset Seq clears the numbering (back to blank) on every visible line, after asking you to confirm. Use it when the plan changed and you'd rather renumber from scratch than fix lines one by one. Any manual numbering on those lines is lost — that's the point — so read the confirmation before you agree.
Carton No. — how the boxes get named
The Carton No. column builds a carton numbering for each line automatically: the vendor's initials, the customer's initials, the product's number, then the carton range — for example GT-AC-102-1~5 means five cartons of product 102, from vendor G.T. for customer A.C. The same numbering appears on the printed packing list, so the warehouse can tie every physical box back to its line.
HS Code — editable right here
The HS Code is the customs tariff code for the goods. It usually comes from the product, but you can set or correct it right in the table: click the HS Code cell and search the code catalogue by number or description. Preparing the shipment is exactly the moment you'd catch a missing one — the printed packing list and customs paperwork use this value.
Printing the packing list
Report Center prints the packing list document: sequence, product, quantities, cartons, carton numbers, sizes, weights, CBM, HS codes and barcodes — with totals. You choose which columns to include, then print or save it. The list follows your current filters and sort, so what you arranged on screen is what lands on paper.
Shipped Orders
Shipped Orders is the archive of cargo that has fully shipped and left the company. When you run "Migrate Shipped Orders" on the Packing page, that cargo moves here as a shipment (an SO#). It's a read-only record: the grid lists one row per shipment, and opening one shows everything about it — the product lines, the shipment expenses and service fees that were booked, the accounting transactions behind them, and the shipment's documents.
The filters
Narrow the shipments by Branch, Currency, Employee, Customer, Vendor and Warehouse. They cross-narrow: picking one shrinks the others to only the values that still yield a matching shipment, so you can't build an empty combination.
Cargo type chips
Filter to a single cargo type (sea / air / land / …) — the type each shipment was migrated under. Each chip carries its own colour and a count; "All" clears it.
The totals banner
Sums the shipments you're currently looking at (after your filters), broken down per currency. Your at-a-glance "how much has shipped" read for the current scope.
The shipment grid
One row per shipment (SO#): the cargo type and date, the customers and vendors on it, the roll-up metrics (quantity, weight, value…), a documents-status chip, and the branches. Click any row to open its detail panel.
Opening a shipment
Clicking a row opens the shipment's detail panel (the tour just did it). At the top is a totals banner for THIS one shipment; below it a drill-down with four tabs — the next steps walk each. Click the panel header (or the fold arrow) to close it.
The four drill-down tabs
The segmented bar switches what you're looking at inside the shipment: Lines, Shipment Expenses, Transactions, and Shipments Docs. Clicking the active tab again folds its body without closing the panel.
Note — Shipment Expenses and Transactions are the money side — only Finance users see those two tabs.
Tab — Lines (every column)
Every product line that shipped — a frozen snapshot of exactly what left, as it was at ship time. Column by column:
- Ser — the line's serial number within the shipment.
- Customer / Vendor — who the goods are for, and who supplied them.
- Product / Spec — the product name and its specification text.
- Qty / Units — how many, and the unit of measure.
- Price — the unit price, in the Cur (currency) shown beside it.
- Rate — that currency's exchange rate to your books currency, locked at ship time.
- Raw Amount — Qty × Price in the line's OWN currency. Amount — that converted to your local currency (Raw × Rate); this is the figure that hits the books.
- U/CTN · L×W×H · GW · CBM — units per carton, carton dimensions, gross weight, volume.
- HS Code · SKU · Barcode · Origin — the customs code and the product identifiers.
- WH / Branch — the warehouse it shipped from and the owning branch.
- Delivery / Employee — the delivery date and who handled the line.
Expenses — one statement per customer
The Shipment Expenses tab lays the customer charges out as one STATEMENT card per customer (and branch). The card header carries the identity — customer, branch, currency (or "multi-cur") — and three running totals in your local currency: Total (everything charged here), Paid (already received), and Outstanding (Total − Paid, shown RED until it reaches zero). The next steps highlight each control on the card.
Expenses — the Print button
The highlighted Print button opens the formatted "Shipment Statement" — a company-header document listing this customer's shipped lines, the Service fees, the Shipping, and the Total / Paid / Outstanding — ready to print or hand over.
Expenses — the Send button
The highlighted Send button emails that same statement straight to the customer. It's greyed out and disabled when the customer has no email address on file — add one on their Customer record to enable it.
Expenses — Service Fees & Shipping
Each card breaks into two tables. SERVICE FEES is your own handling charge; SHIPPING is the freight and surcharges you re-billed (surcharge lines carry a badge). Both share the same columns — item · Share (the % applied) · Amount raw (its own currency) · Amount (local) — with a grey sub-row naming the fee RULE and notes behind each line, and a subtotal. The two subtotals make up the header Total.
Expenses — "Show GL detail"
The tour has expanded the "Show GL detail" fold-out for you: it reveals the raw double-entry ledger postings behind the whole statement — the debit/credit rows that actually hit the books, read exactly like the Transactions tab. The "N tx" badge counts them; click it any time to hide the detail again.
Tab — Transactions (the double-entry, field by field)
The raw accounting for this shipment — every general-ledger transaction as a DOUBLE ENTRY: a debit and an equal credit on the same row. Field by field:
- TX# · Date · Type · Description — which posting, when, what kind, and its narrative.
- Ser — the shipment line the entry relates to.
- The DEBIT side: DR Acc (account number), DR Name (account name), Raw DR (amount in its own currency), Dr Cur, Dr Rate (its exchange rate), Local DR (converted to your books currency).
- The CREDIT side: the same six fields — CR Acc, CR Name, Raw CR, Cr Cur, Cr Rate, Local CR.
- Branch — which branch the entry belongs to.
Note — Every row's Local Debit equals its Local Credit — that's the double-entry rule, and it's why this tab is the audit trail tying the shipment to the books.
Docs — the status banner
The Shipments Docs tab is a full document control panel, not just a file list. The banner at the top shows the document Owner, a completion status, an L/C-required flag, and expiry counters — how many files are expiring soon (≤30 days) or already expired — plus a total file count.
Docs — the missing-docs strip
On the banner's counter row, a "Missing N" strip lists every document type that's EXPECTED for this shipment but hasn't been uploaded yet, each as a colour-coded chip. It's the at-a-glance checklist of what's still needed before the shipment is document-complete.
Docs — files by category
Uploaded files are grouped into colour-coded, collapsible category sections — Commercial, Transport, Origin, Inspection, Treatment, Customs, Financial, Photos, Logistics and Other. Recommended-preset types are gold-starred, expected ones carry an EXPECTED tag.
Docs — the per-file actions
The highlighted buttons sit on every file row. The eye 👁 previews the file (images open inline in a lightbox; PDF/Office prompt to download), the download ⬇ saves it to disk, and Manage opens the Manage Docs drawer focused on that file to edit its metadata, replace or delete it.
Docs — the Configure button
The highlighted Configure button opens the document-set settings drawer. It can be opened even before any file is uploaded — it's where an admin defines what this shipment SHOULD carry. The next steps open it and walk each setting inside.
Configure — Owner
Inside the Configure drawer, the first field is Owner. The owner governs who may edit or delete every file under this shipment (alongside logistics/admin rights). Admins can reassign it from the dropdown; everyone else sees it read-only.
Configure — L/C required
The "L/C required" checkbox marks this shipment as governed by a Letter of Credit. When ticked, the system alerts if L/C documents are missing — this is what feeds the Dashboard's "L/C Docs Missing" alert.
Configure — Completion status
Completion status works two ways. Leave the Expected list (next step) empty and you're in MANUAL mode — you pick Incomplete / Partial / Complete / N-A yourself. Add anything to Expected and it flips to AUTO mode — the status is computed from what's missing or expired, and this dropdown locks.
Configure — Expected documents
The heart of the drawer: pick, by category, exactly which document types this shipment SHOULD carry. Anything expected but not uploaded shows in the ⚠ missing strip up top; while this list is non-empty it also drives the completion status automatically. This one list powers the missing-docs alerts everywhere in the app.
Configure — Overall notes
A free-text notes field for the whole document set — anything the team should know about this shipment's paperwork. Save at the bottom writes every setting; closing the drawer without saving discards changes.
Docs — the Manage Docs button
The highlighted Manage Docs button opens the one drawer where all file work happens — upload, edit metadata, replace, delete — and everything auto-saves. The next two steps open it and show its two panes.
Note — Uploading / editing / deleting is permission-gated (logistics or admin rights, or the order's owner).
Manage Docs — the type list
The left rail of the Manage drawer lists every document type, grouped by category, with a search box on top. Badges tell the story at a glance: ✓N already uploaded, +N queued, and a red "!" for an expected type with nothing uploaded. Recommended-corridor types are gold-starred. Clicking a type opens its panel on the right — the tour has picked one for you.
Manage Docs — an uploaded file
Each file already on this type gets its own card: the filename and size, view 👁 / download ⬇ / delete 🗑 buttons, and inline metadata fields — doc number, issue & expiry dates (with a live expiry countdown), issuer, notes. Edit any field and it saves on blur; there's no Save button. Delete removes the file immediately.
Manage Docs — add a file
At the bottom, the "Add another file" slot: drop a file or click to choose. It reads the filename to auto-detect and pre-fill fields (you'll see an "auto" hint). You can set the doc number, an issue date (Today shortcut), an expiry date (+30d / +90d / +1y shortcuts with a live countdown), the issuer, a B/L type for transport docs, a "wet-ink original on file" flag, and notes. Dropping the file uploads it instantly — no separate Upload button, and the footer confirms it auto-saves on every change.
Report Center
Report Center prints or exports the shipment list (with your current filters) to Excel or PDF, with custom columns — the polished way to produce a shipped-cargo report.
Inventory
Inventory is the live record of the goods physically in your warehouses. You never type it in by hand — it's built automatically from the Receive and Ship movements you record on your orders, so it always reflects what's actually on hand, what it's worth, and where it sits. The page is a THREE-LEVEL drill-down: the grid lists one row per order/shipment; click a row to open its product line-items; click a line to open that item's full movement history. A metrics strip at the top sums up whatever you're currently looking at.
The filters
Four ways to narrow the grid: by Warehouse (where the stock sits), by Branch (who owns it), by Currency, and by Product. The Product filter is a search picker — type a name, SKU, barcode or category and pick to see only that product's stock across every warehouse. Filters combine, and the metrics strip re-totals to match.
Include closed periods
By default the grid hides refs from sealed (closed) fiscal years — but your current on-hand stock always shows regardless. Admins get this toggle to bring the sealed-year refs and their movements back into view for audit or research, then hide them again.
Note — Only admins see this toggle. Current stock is never hidden by it — it only affects historical, closed-period refs.
In Stock vs Cleared — the lifecycle (important)
This is the part people find confusing, so here it is plainly. An inventory line stays tied to its live order until that order has FULLY shipped; only then is it "cleared" and archived. The three chips filter by that lifecycle:
- All — every line, active and cleared.
- In Stock — lines still tied to a live order. These hold your current on-hand balance. (A line can even sit at 0 for a moment and still count as In Stock — it stays active until its whole order ships.)
- Cleared — lines whose order has fully shipped. They're archived, their balance is always 0, and they're kept purely for history.
Note — The number on each chip is how many lines are in that state right now.
The metrics strip — how to read it
The strip of cards up top. Every card sums whatever is currently visible (after your filters and the In-Stock/Cleared chip). On most cards you get TWO numbers: the big one is the CURRENT balance across those rows; the small "+in / −out" line below is the LIFETIME movement — everything ever received versus everything ever shipped. The next steps take each card.
Card — Lines
How many inventory lines you're looking at right now. (In the Cleared view this flips to "Orders" — how many distinct shipped orders.) It's your headline "how much am I looking at" number, and it moves as you filter.
Card — Products
How many DISTINCT products appear across the visible lines — so five lines of the same product count as one product here. A quick read on variety versus volume.
Card — Qty
The current stock quantity on hand across the visible rows. The green +in / red −out below is the lifetime: everything ever received versus everything ever shipped for those rows. Current qty is essentially (in − out).
Card — Value
The worth of the stock on hand, converted to your LOCAL currency (Finance access only) — quantity × price × rate. The breakdown below is per-currency lifetime in/out in the original amounts, so you can read the money in each currency on its own line.
Card — CTN (cartons)
Total cartons on hand, worked out from quantity ÷ units-per-carton (rounded up). The in/out below is the lifetime cartons moved. This is what the warehouse and the truck actually handle.
Card — GW (gross weight)
Total gross weight in kilograms across the visible stock (per-carton weight × cartons), with lifetime weight moved below. Your shipping-weight figure at a glance.
Card — CBM (volume)
Total volume in cubic metres (length × width × height × cartons), with lifetime volume moved below. This is your "how much container space does this take" number — the key figure for planning a shipment.
Card — Vendors
How many distinct suppliers (the SOURCE of the goods) appear across the visible rows.
Card — Customers
How many distinct customers (the DESTINATION the goods are for) appear across the visible rows.
Card — WH (warehouses)
How many distinct warehouses the visible stock is spread across — useful when you're deciding where to consolidate.
Card — Branches
How many distinct branches own the visible rows. Narrows to one when you set the Branch filter.
Layer 1 — the grid (one row per order / shipment)
The main grid is the TOP of the drill-down — one row per order or shipment (Order# for a live order, SO# for a shipped one). Each row summarises that ref's lines across its columns:
- Ref# and Date — which order/shipment, and when it was created.
- Branches · Status · Customers · Vendors · Employee — the who and the current stage.
- Warehouses · Cargo · Cur — where it's stored, the cargo type, the currency.
- Lines · Qty · CBM · GW · Local — the roll-ups: how many product lines, total quantity, volume, weight, and the value in your local currency.
Note — Click any row to open its line-items (Layer 2).
Layer 2 — the line-items inside a ref
Clicking a row opens the products INSIDE that order/shipment — the dense per-line view (the tour just did it). It's the detailed level: one row per product line, with the product name pinned on the left as you scroll sideways. For each line you get:
- Product name + Specification — what it is.
- Quantity ON HAND now, Units, and Units-per-carton.
- Cartons, Dimensions (L×W×H), Gross / Net weight, CBM.
- Price, Currency and Local value; Origin and HS code.
- Status and the relevant dates.
Note — The panel header totals only the IN-HAND items (qty > 0). Click any line to drill to its movement history (Layer 3).
Layer 3 — a line's full movement history
Clicking a line opens its complete traceability — every stock MOVEMENT for that one product line (the tour opened it). This is the bottom of the pyramid, the "where did my stock go?" answer. Each movement row shows:
- When it happened (time-stamped, pinned on the left).
- The action — Receive, Ship, partial Ship, or Return.
- The quantity moved (+ received / − shipped) and the warehouse.
- The reference document behind it, and the running balance after that movement.
Note — Summary cards at the top net all the ins against all the outs — so the current on-hand quantity is simply where this history ends up.
Report Center
Report Center prints or exports the inventory grid (with your current filters) to Excel or PDF — choose the columns, then print or save. The polished way to produce a stock report.
Check Reports
A Check Report is an inspection record. When goods arrive against an order, an operator opens a report, pulls in the exact order lines being checked, and records a verdict on each one — Matched or Different — with notes and photos of what was expected versus what was received. The report is then submitted to a manager, who approves or rejects it from the Action Center; once approved it can be closed, which locks it for good. A report can carry lines from LIVE orders and from already-shipped (archived) orders side by side, and each line stays linked to its order, so the report always reflects the real thing. The list page is where you find, filter, and open reports; opening one shows its lines, verdicts, photos, and the approval controls.
The stage chips
The coloured chips filter the list by where each report sits in its life. The number on each chip is how many reports are in that stage right now:
- Draft — being worked on; fully editable.
- Submitted — sent to a manager and waiting on their decision; edits are paused.
- Approved — the manager approved it; it can now be closed.
- Rejected — the manager sent it back with a reason; edit and re-submit.
- Closed — final and locked; read-only forever.
Note — Click a chip to show only that stage; click it again to clear.
The filters
Seven pickers narrow the list — Branch, Customer, Vendor, Warehouse, Cargo, Currency, and Employee. They read from the orders behind each report's lines, so filtering by (say) a customer shows only reports that touch that customer's goods. They combine, and each picker only offers values that still make sense given the others you've set.
New Report — starting an inspection
New Report opens the line picker — a dedicated screen for choosing exactly which order lines the report will cover (the tour just opened it). It lists the lines of your LIVE orders (the goods you can inspect right now). The next steps walk through it.
New Report · order-status chips
Across the top of the picker, one chip per order status (Pending, Confirmed, Part_Rcv, Received, Part_Shp, Ready_to_Ship) with a live count. Click one to show only lines whose order is at that status — e.g. Received — so you inspect the right stage; click it again to clear.
New Report · the filters
The same seven cross-narrowing pickers as the list — Branch, Customer, Vendor, Warehouse, Cargo, Currency, Employee — plus a line search box. Each picker only offers values still valid given the others you've set, so you can zero in on one shipment in a couple of clicks.
New Report · picking and creating
The action strip runs the selection:
- Lines match — a live count of the lines your filters + chips currently show.
- Hide already-checked — on by default; hides lines already sitting in another report so you can't double-check them.
- Select all — tick every selectable line currently shown.
- Create — builds the report from your ticked lines and opens it; the number on the button is how many you've picked.
New Report · the line list
Each row is one live order line — a checkbox, the order reference, the product, quantity, order status, warehouse and vendor. Tick the lines to inspect. Lines already in another report are greyed out and labelled with that report's number, so the same line is never checked twice.
Note — A report is built from LIVE order lines at creation time. As those orders ship and archive later, the report keeps following them.
Opening a report
Click any report to open it (the tour just did). The detail view is the working surface: a header with the report's stage, the approval controls, and every inspected line with its verdict, notes, and photos. The next steps walk through it.
The approval workflow (important)
This strip drives the report's life. The rule is simple: a report is editable until it is CLOSED. The flow is edit → submit for approval → the manager approves or rejects → close.
- Submit for approval — hands the report to the assigned manager and pauses editing. Unchecked lines are dropped at submit.
- Recall — pull a submitted report back to edit it, as long as the manager hasn't acted yet.
- Approved / Rejected — the manager decides from the Action Center. A rejection comes back with a reason; fix it and submit again.
- Report Closing — once approved, closing locks the report permanently (read-only).
Note — Editing an already-approved report is allowed, but it must be submitted and approved AGAIN before it can be closed. A closed report shows a yellow read-only banner and can no longer be changed.
The inspection lines — the verdict
Each row is one order line being checked (the tour is on the first one). It shows the order reference and line, the order's current status, and the product — and on the right, the VERDICT toggle: click Matched or Different. Lines marked Different get a red edge so exceptions stand out.
Note — The verdict, notes, and photos are only editable while the report isn't closed.
Expected vs Received notes
Under each line sit two note boxes, side by side — Expected (what the order called for) and Received (what actually arrived). Type your observations; they save when you click away. This is where you record the detail behind a Different verdict.
Line photos
Below the notes, attach photos — an Expected set and a Received set, per line. Add uploads an image and a thumbnail appears. Click any thumbnail to view it full-size; when a line has several, step through them with the ‹ › arrows (or the keyboard). These photos ride along into the Report Center print and the emailed PDF.
Report Center — printing the report (with photos)
The Report Center button opens the print/export builder for THIS report's lines — choose columns, sort, page setup, then print or export to Excel. It includes a Photos column, so the expected/received photos print alongside each line. Save Query remembers your chosen layout for next time.
Send — emailing the report to customers
Send emails the report as a PDF (header, per-line verdicts and notes, and the photos) to the customers on the report. It opens a dialog listing each customer with an EDITABLE email — correct or add an address, untick anyone you don't want, then send. A result panel then tells you exactly who it went to and who was skipped, and why.
Note — Customers with no email address are skipped. If nothing sends and the reason reads "no SMTP configuration", an email account still has to be set up in Settings before mail can leave.
The sidebar alert & the Action Center
The Check Reports item in the sidebar carries a bell: it turns GREEN when reports are waiting on a manager's decision, and RED when one has been rejected and needs attention. The approvals themselves happen in the Action Center — the manager opens the case (with the report PDF attached), reads the lines and photos, and approves or rejects with a note, which flows straight back onto the report here.
Vendors
Vendors are your suppliers and service providers — the "who you buy from" master. This page is the grid of all vendors plus one form for adding or editing a single vendor. Two fields here (Supplied Categories and Type) quietly drive behaviour on other pages, so they're worth setting up.
The vendor grid
One row per vendor. Click a row to open it in the form below; click the open row's header (or the fold arrow) to close it.
- Columns: ID, Account #, Branches, Name, Location, Email — plus a Balance column if you have Finance access, and any classification columns your workspace uses.
- Click a column header to sort.
- The Account # links to the vendor's ledger (Finance users).
- The round photo cell — click it to enlarge.
Photo, Name, Account No. & contact
The photo box takes a click or a dropped image. Vendor Name is required. The Account No. is read-only — it's generated on save and links the vendor into the chart of accounts. Alongside are Email and, for vendors, Tax ID plus optional Birth/Starting dates.
Type (supplier vs service-provider)
"Type" is the vendor's own classification — supplier, service provider, etc. It's a separate idea from "supplied product categories": Type is what the vendor IS; supplied categories are what it SELLS. (This field used to be called "Category", which caused confusion with product categories — hence the rename.)
Supplied product categories — the key setting
Each vendor can list the product categories it supplies (the "supplied product categories" multi-select on the vendor form) — tick every category this vendor can provide. This is the Approved-Vendor-List link between a vendor and the products it can source.
Note — This one setting unlocks the product-picker narrowing across the app. Until you fill it in for at least one vendor, the Orders product picker and the Products "Default Vendor" picker have nothing to narrow by — so their "Show all" toggle never appears. If those toggles are missing, set a vendor's supplied categories first.
Branch Restriction
A vendor's branches control which of your company branches can transact with it. The "All Branches" toggle opens it to every branch; otherwise untick it and pick specific ones. The line underneath tells you the current state ("All branches" or "Restricted to N").
Address & Notes
The Address block picks Country → Province → City (each cascades from the one above) plus a free-text street line. Notes is a free-text field for anything else you want on file for this vendor.
Print, Ledger, and saving
At the bottom of the form: Print produces a one-vendor detail sheet; Ledger (Finance users, once the vendor is saved) opens its account ledger; Cancel discards; Save writes your changes. Nothing is saved until you click Save.
Import from a spreadsheet
Import CSV loads vendors from a .csv file through a column-mapping dialog: match each spreadsheet column to a vendor field, review the rows, then apply. One thing to know — the Branches column takes branch ID numbers (as exported), not names, and an empty Branches cell means "all branches".
Export to a spreadsheet
Export CSV downloads every vendor as an import-ready .csv — the same column shape Import expects, so you can bulk-edit in a spreadsheet and load it back, or move vendors into another workspace.
Report Center
Report Center opens the full print/export builder: choose columns, filter and group, then print or export to Excel / PDF — the polished way to produce a vendor listing, versus the raw Export file.
Customers
Customers are the people and companies you sell to or import for — the "who you buy on behalf of" master. This page is the grid of all customers plus one form for adding or editing a single customer. It works exactly like the Vendors page.
The customer grid
One row per customer. Click a row to open it in the form below; click the open row's header (or the fold arrow) to close it.
- Columns: ID, Account #, Branches, Name, Location, Email — plus a Balance column if you have Finance access, and any classification columns your workspace uses.
- Click a column header to sort.
- The Account # links to the customer's ledger (Finance users).
- The round photo cell — click it to enlarge.
Photo, Name, Account No. & contact
The photo box takes a click or a dropped image. Customer Name is required. The Account No. is read-only — it's generated on save and links the customer into the chart of accounts. Alongside are Email, Tax ID, and optional Birth/Starting dates.
Classification
The classification dropdowns (whatever your workspace defines for customers — for example Area, Class, Category) group customers so you can filter and report on them. Each comes from the lookup lists in Settings and clears back to "—".
Branch Restriction
A customer's branches control which of your company branches can transact with it. The "All Branches" toggle opens it to every branch; otherwise untick it and pick specific ones. The line underneath tells you the current state ("All branches" or "Restricted to N").
Address & Notes
The Address block picks Country → Province → City (each cascades from the one above) plus a free-text street line. Notes is a free-text field for anything else you want on file for this customer.
Print, Ledger, and saving
At the bottom of the form: Print produces a one-customer detail sheet; Ledger (Finance users, once the customer is saved) opens its account ledger; Cancel discards; Save writes your changes. Nothing is saved until you click Save.
Import from a spreadsheet
Import CSV loads customers from a .csv file through a column-mapping dialog: match each spreadsheet column to a customer field, review the rows, then apply. One thing to know — the Branches column takes branch ID numbers (as exported), not names, and an empty Branches cell means "all branches".
Export to a spreadsheet
Export CSV downloads every customer as an import-ready .csv — the same column shape Import expects, so you can bulk-edit in a spreadsheet and load it back, or move customers into another workspace.
Report Center
Report Center opens the full print/export builder: choose columns, filter and group, then print or export to Excel / PDF — the polished way to produce a customer listing, versus the raw Export file.
Contractors
Contractors are the outside parties you engage for services — freight forwarders, customs brokers, inspectors, and the like. This page is the grid of all contractors plus one form for adding or editing a single contractor. It works exactly like the Vendors and Customers pages.
The contractor grid
One row per contractor. Click a row to open it in the form below; click the open row's header (or the fold arrow) to close it.
- Columns: ID, Account #, Branches, Name, Location, Email — plus a Balance column if you have Finance access, and any classification columns your workspace uses.
- Click a column header to sort.
- The Account # links to the contractor's ledger (Finance users).
- The round photo cell — click it to enlarge.
Photo, Name, Account No. & contact
The photo box takes a click or a dropped image. Contractor Name is required. The Account No. is read-only — it's generated on save and links the contractor into the chart of accounts. Alongside are Email, Tax ID, and optional Birth/Starting dates.
Classification
The classification dropdowns (whatever your workspace defines for contractors — for example Area, Class, Category) group contractors so you can filter and report on them. Each comes from the lookup lists in Settings and clears back to "—".
Branch Restriction
A contractor's branches control which of your company branches can transact with it. The "All Branches" toggle opens it to every branch; otherwise untick it and pick specific ones. The line underneath tells you the current state ("All branches" or "Restricted to N").
Address & Notes
The Address block picks Country → Province → City (each cascades from the one above) plus a free-text street line. Notes is a free-text field for anything else you want on file for this contractor.
Print, Ledger, and saving
At the bottom of the form: Print produces a one-contractor detail sheet; Ledger (Finance users, once the contractor is saved) opens its account ledger; Cancel discards; Save writes your changes. Nothing is saved until you click Save.
Import from a spreadsheet
Import CSV loads contractors from a .csv file through a column-mapping dialog: match each spreadsheet column to a contractor field, review the rows, then apply. One thing to know — the Branches column takes branch ID numbers (as exported), not names, and an empty Branches cell means "all branches".
Export to a spreadsheet
Export CSV downloads every contractor as an import-ready .csv — the same column shape Import expects, so you can bulk-edit in a spreadsheet and load it back, or move contractors into another workspace.
Report Center
Report Center opens the full print/export builder: choose columns, filter and group, then print or export to Excel / PDF — the polished way to produce a contractor listing, versus the raw Export file.
Employees
Your staff roster — and the source of everything payroll needs. Each employee carries personal details, their job (title / grade / branch), and a full compensation setup (salary, pay schedule, tax & social-insurance rules, and per-person pay lines). An employee can also have a login account. This page is the grid of all employees plus a rich edit panel with three tabs. This tour opens a real employee and walks each tab.
The employee grid
One row per employee — ID, photo, name, title, grade, branch, salary, balance (Finance users) and status. Click a row to open the edit panel. Admins also see a Login indicator (does this employee have a user account?) and a delete action. Click a column header to sort.
The employee header
When you open an employee, the panel opens with a header card: the profile photo (click or drop an image to change it), the name, and quick chips for job title, grade, branch and Active/Inactive status. The Print button on the right produces a one-employee detail sheet.
Note — The three tabs below only appear for a SAVED employee. When you're adding a new one, all sections stack on a single form so you fill everything before the first Save; the login account is created in a second step.
Tab 1 — Details & Address
The first tab is WHO the employee is and WHERE: their personal details, their job (title, grade, branch, department), and their address. This is the tab you land on when you open an employee. The next steps walk its fields.
Details — personal & employment
The Details tab holds the core fields:
- Account No. — read-only, generated on save; links the employee into the chart of accounts.
- Full Name (required) and ID Number.
- Job Title (required) — picking it auto-fills a default Grade AND the Department (from the title's job family).
- Grade (required) and Branch (required) — Branch is locked after create, so set it right.
- Email, Status (Active/Inactive), Birth Date, Entry Date.
- Manager — the employee's direct manager, picked from active staff.
Note — If you're editing your OWN row and you're not an admin, structural fields (title, grade, branch, salary…) are locked — you can still change your photo, address and email.
Details — Address
The Address section picks Country → Province → City (each cascades from the one above) plus a free-text street line.
Details — ID Card Photo
Separate from the profile photo in the header, this is a slot for a scan/photo of the employee's ID card — click or drop an image. Useful for HR records and verification.
Tab 2 — Compensation & Benefits
The second tab is HOW the employee is paid: basic salary, the pay schedule and tax/social-insurance rules, and their individual pay lines (allowances, perks, deductions). Everything here feeds the payslip generator on the Payroll page. The next steps walk it, and open the actual forms.
Compensation — Basic Salary, Currency, Rate
The Compensation tab starts with Basic Salary in the chosen Currency; Rate is the currency's exchange rate to your local currency and auto-fills. If your workspace has a Guideline Matrix for this title+grade, a range hint shows under the salary — and the field turns amber if the amount falls outside it (a soft warning, not a block).
Compensation — Pay Schedule & Jurisdiction
Pay Schedule sets how and how often this employee is paid (monthly, rotational, hourly…) — it drives the payslip generator. Jurisdiction sets which tax and social-insurance rules apply. Together they decide how each payslip is calculated.
Compensation — Tax Base & SI Base
These control WHAT the tax and social insurance are calculated on (e.g. basic-only vs net-of-components). Each starts INHERITED from the jurisdiction's default; change it and it becomes an OVERRIDE for this one employee, with a "Reset to default" link to snap it back. Most employees just inherit.
Compensation — the per-employee pay lines
This panel is the heart of the employee's pay. It has two sections:
- Earnings — this person's allowances and commissions on top of basic salary (housing, transport, a commission line…). Add as many as needed.
- Info Benefits / Deductions — non-cash perks (annual-leave days, a medical tier…) and any deductions.
- Statutory rows — Income Tax and Social Insurance (employee + employer) show here read-only, with the real rates resolved from the employee's Jurisdiction. You don't type these; they're computed at payslip time.
Note — Everything here feeds the payslip generator on the Payroll page. Editing a line opens a small editor; the sections total up per period.
Add Earning — the form
This is the "Add Earning" form (the tour opened it for you). An earning is an allowance or commission ON TOP of basic salary — it becomes a real line on the payslip. You set:
- Pay Component — WHICH earning this is (housing, transport, a commission line…) from your component catalogue. It locks once saved; to change it, delete and re-add.
- Calculation — a Fixed amount, or a Percentage of a basis (e.g. 10% of basic salary).
- Amount + Currency — the number and its currency (or the percentage, for a percentage component).
- Basis / Tier — for a percentage or tiered component: what it's a percentage OF, or which tier band applies.
- Notes — free text.
Note — "Save" adds it to the Earnings list. Earnings post to the ledger through the payslip.
Add Info / Benefit — the form
The "Add Info" form (the tour opened it) uses the same editor but for a different kind of line: an INFO benefit or deduction. These are reference values shown on the payslip that do NOT post to the ledger — things like annual-leave days, a medical tier, or a non-cash perk.
- Pay Component — pick an info component (annual leave, medical tier…).
- Value / Status — a count, an amount, or a yes/no status, depending on the component.
- Notes — free text.
Note — The difference in one line: an EARNING is money that hits the payslip and the books; an INFO line is a value shown for reference only. Deductions live here too.
Tab 3 — User Account (admins)
The third tab (admins only) is the employee's LOGIN — completely separate from the employee record itself. Not every employee needs one. If they have no account yet, a "Create Account" button sets up their username and password; if they do, you manage it here. The next steps walk the fields.
Note — The account's home branch always follows the employee's Branch on the Details tab — you don't set it here.
Account — Username
The username the employee signs in with. You can change it here.
Note — Changing a username signs that user out immediately — they sign back in with the new name.
Account — Status
Active or Inactive. Setting the login Inactive blocks this person from signing in without deleting their account or their employee record — the clean way to suspend access (someone on leave, or who has left).
Account — Password
Click "Change Password" to reveal a field and set a new one; leave it hidden to keep the current password. On the create form, the password is set alongside the username. You never see the existing password — only replace it.
Account — Allowed Branches
Which branches this login can work in. "All Branches" opens every one; otherwise tick specific branches. The employee's home branch is always included and can't be unticked. This is the login's reach — separate from the Branch on the Details tab (which is where the employee belongs).
Ledger, Opening Balance, and saving
At the bottom: Ledger (Finance users) opens the employee's account ledger; Opening Balance sets their go-live starting balance; Cancel discards; Save writes your changes. Nothing is saved until you click Save.
Import from a spreadsheet
Import CSV loads employees from a .csv file through a column-mapping dialog: match each column to a field, review the rows, then apply. Grade and Department stay editable per row during mapping (they depend on the title).
Export to a spreadsheet
Export CSV downloads every employee as an import-ready .csv — the same shape Import expects, so you can bulk-edit in a spreadsheet and load it back, or move staff into another workspace.
Report Center
Report Center opens the full print/export builder: choose columns, filter and group, then print or export to Excel / PDF — the polished way to produce a roster, headcount or salary listing, versus the raw Export file.
Time Management
The company's Time Management desk — leave AND attendance in one place, so HR and payroll never open profiles one by one. Three tabs share one top bar (search · From–To range · branch · jurisdiction · Save View): Balances (every person's entitlement, accrual and what's left), Requests (every leave request, with the levers to decide, approve or revoke), and Attendance Sheet (the continuous day-by-day time record that feeds pay). What each employee is ENTITLED to comes from their jurisdiction's leave policy (Settings → Jurisdictions), not from this page — here you read the result, manage requests, and record attendance. Viewing is open to PAY or HR VIEW; the leave levers need HR ADMIN, the attendance edits need PAY EDIT.
Search — filters every tab
The search box filters ALL three tabs at once by employee name, branch or jurisdiction; the live count beside it ("N of M") always reflects what's shown. A READ-ONLY chip appears here when you lack HR admin — you can view + print, but not act on requests.
Save View
Remembers your current filters + date range for next login (saved per-employee to "Leave Desk"). The saved From date rides over the default 90-day range; the To date always resets to today on load, so a stale "up to" never hides recent rows.
Report Center
Prints or exports the CURRENT tab (Balances, Requests or the Attendance Sheet) with your filters applied — the print title carries the filter context, so the document states exactly what it shows.
Refresh
Reloads the desk from the server and clears the filters back to defaults — the quick reset after you've been narrowing things down.
The three tabs
One page, three peer tabs sharing the top bar above — Balances (who has what leave left), Requests (every leave request + the levers), and Attendance Sheet (the continuous day-by-day time record that feeds pay). The tour walks each in turn.
Filters — chips + pickers
A row of filter chips (per tab) and picker filters below them. Both apply to BOTH tabs and the print. The chips show a live count and never lie — the number is what clicking will show:
- Balances chips: All · Entitled · No policy · Has pending · Overdrawn. 'No policy' finds everyone whose leave would approve all-unpaid because no entitlement is configured; 'Overdrawn' finds anyone below zero.
- Requests chips: All · Pending · Approved · Rejected · Cancelled.
- Pickers: a From–To date range (defaults to the last 90 days; a Saved View overrides the From date), then Branch and Jurisdiction (options come from your actual roster). A 'Clear filters' button appears when anything is set.
- The range drives the two tabs differently: Requests shows every request whose span overlaps From–To; Balances are evaluated AS OF the To date (shown in the count bar), since entitlement is per-year and point-in-time.
Balances tab
One row per active employee (as of the To date in the toolbar range): their annual allowance, what's accrued so far, taken, and the balance — plus the sick yearly cap and sick days taken, and a badge for any pending requests. The numbers come from the same engine the approval card and the employee's own profile use, so they can never disagree. Sort any column. An employee with no policy configured says so in the row (in red) instead of showing blanks — that's a real finding, not a gap.
Note — Click a row to EXPAND it in place — the employee's full leave detail opens right there (the per-year account ledger, their request history, and the levers). No jumping to a profile; the desk is where you work.
The per-year account ledger (in an expanded row)
For the chosen employee: one line per year with Carried in · Accrued · Taken · Adjustment · Balance. Balance is always derived (never a stored counter that could drift). Sick rows show '—' for balance because sick doesn't accrue — its remaining is caps minus taken, shown on the balance card above.
Decide / Re-decide, Revoke (in the expanded row)
The expanded row also carries the employee's request history AND the levers to act on them — the SAME verbs the assigned approver's Inbox carries, on the same Action Center rails, so nothing diverges:
- Decide (a PENDING request) — the Decide toggle opens the entitlement peek (the same card the approver sees) then the full verb bar: ✓ Approve · Approve · all unpaid · ✗ Reject (with a reason) · ↑ Escalate (re-assign to another approver) · Custom Reply. Approving runs the checkpoint (sets the paid/unpaid split + consumes the balance). Approving is REFUSED if any requested day is already punched / worked on the attendance sheet — leave can't sit on a worked day; clear those days or shorten the request first.
- Re-decide (an ALREADY-decided request) — the SAME panel and verbs: re-open the decision and choose a new one. The current decision is released first, so a re-approval sees today's true balance.
- Revoke (an APPROVED request) — the quick 'it isn't happening': releases the paid days, frees the dates, cancels the record.
- A decision (approve/reject) re-seeds the attendance sheet + slips and notifies the employee; an escalate hands the request to the new approver's inbox; and deciding a request assigned to someone else tells that approver it was done on their behalf. A posted/closed period is reported, never silently rewritten.
Note — Where entitlement itself is configured: Settings → Jurisdictions → a jurisdiction's Annual Leave (policy + allowance rules) and Sick Leave (caps + pay curve) cards. This page consumes those; it doesn't set them.
Requests tab — every request in one list
The second tab: every leave request overlapping the selected From–To range, newest first — employee, type, span, the decided paid/unpaid split (or the requested day count if undecided), status, and approver. Filter by status with the chips. Each row folds open to the SAME entitlement peek + verb bar you saw in the expanded balances row, so HR triages the whole company's requests here without profile-hopping. The tour opens one now and walks the panel button by button.
The decision panel (a request, expanded)
Clicking a request line folds it open into its decision panel — exactly the view the assigned approver gets. At the top sits the entitlement peek: the same balance card the approver's Inbox shows (carried in · accrued · taken · this request's cost), so you decide against the real remaining balance, not a guess. Below it is the verb bar — every action HR can take on this request. The tour spotlights each button next.
Note — A PENDING request shows the full verb bar; an already-decided one shows the same verbs to RE-decide (the old decision is released first, so a re-approval sees today's true balance).
✓ Approve
Approves the request as filed. This runs the leave checkpoint: it sets the paid/unpaid day split from the employee's entitlement, consumes the balance, re-seeds the attendance sheet + any affected payslips, and notifies the employee. Approving is REFUSED if any requested day is already punched / worked on the attendance sheet — leave can't sit on a worked day; clear those days or shorten the request first.
Approve · all unpaid
Approves the same span but forces EVERY day unpaid, bypassing the paid-entitlement draw. Use it when the balance shouldn't be touched — leave granted as a favour, an out-of-policy absence you're recording rather than paying, or an employee who asked to keep their paid days. Same downstream re-seed + notify as a normal approve; only the paid/unpaid split differs.
✗ Reject
Declines the request. It opens a reason box — the reason is REQUIRED and travels to the employee with the rejection notice, so there's always a recorded 'why'. Rejecting consumes no balance and books no days; the dates stay free on the attendance sheet.
↑ Escalate
Hands the decision to a DIFFERENT approver instead of deciding it yourself. It opens an approver picker (everyone eligible except the requester) plus an optional note; on send, the request lands in that person's inbox and they own the decision. Use it when the right sign-off is someone else's call — a manager, a department head, the employee's own line lead.
Custom Reply
Sends a free-text message back to the requester WITHOUT deciding — the request stays pending. For 'can you split this across two weeks?' or 'confirm you've cleared it with your team first' — a conversation turn, not a verdict. The reply text is required; the request keeps waiting for a real decision afterwards.
Revoke (on an approved row)
The one-click 'it isn't happening' that sits on the line of any already-APPROVED request — no need to open the panel. It cancels the approved leave entirely: releases the paid days back to the balance, frees the booked dates on the attendance sheet, re-seeds any affected payslips, and notifies the employee. The audit trail keeps the original approval and this revocation both.
🗑 Delete (a dead request)
Only a cancelled or rejected request — one that already books nothing — carries a Delete button inside its panel. It removes the line from the history for good (with a confirm first). This is housekeeping for dead records; it can never touch a request that still holds days, because those must be revoked (which releases the days) before there's anything safe to delete.
Attendance Sheet tab — the continuous record
The third tab is the whole company's attendance as ONE continuous record — every employee, every day in the range, independent of any pay period (a pay period is just a CLAIM over a slice of it). Each employee is a collapsed row — Worked / Unpaid / OT totals, a coloured day-strip, and their overtime-rule badge — that you click to expand into a day-by-day table. A day is either FREE (period-less, editable right here) or BOOKED by a period (shown with its #period — edit it on that period's sheet). The date range, branch and search all come from the shared top bar above.
Note — Unlike a fresh payroll sheet, this NEVER assumes anyone worked — a day stays blank until a punch, an import, an approved leave, or a period actually records something.
Export
Writes an import-ready CSV of the shown range — it round-trips straight back through Import, so you can pull the sheet out, edit it in a spreadsheet, and re-import cleanly.
Import — from the clock
Reads a CSV or biometric-clock export and lands the days period-less. AUTHORITATIVE per line: a punched line → Worked / OT; a blank line (the clock's un-ticked day) → Absent, or a holiday / approved-leave day if the calendar says so. A "Consider missing days as absent" checkbox in the preview decides days the file doesn't mention (ON = sweep to absent, the authoritative-clock default; OFF = leave untouched, so a manual edit survives). When the file has punch columns the preview skips the day-type / hours / OT columns (opt in per column to override); a punch-less file maps hours. Approved-leave days are protected.
Re-derive leave
Re-stamps approved leave across the shown range — use it after a working-days-mask or holiday-calendar change (leave otherwise auto-updates on each approval). It never touches punched / imported / manual rows; only period-less calendar-derived days.
Refresh / Cancel
Reloads the sheet for the date range. When you have unsaved edits it reads "Cancel (N)" — discarding those N pending edits and reloading — so it doubles as the undo for a mistaken change.
Save
Writes your edits. FREE days save period-less; a BOOKED-but-open day routes to its period and re-runs that period's payslip (no double-pay); posted / closed days are read-only and skipped. A punch on an approved-leave day is refused and reported back.
The day-type legend
The colour key for the day-strip and the table — worked, weekend / holiday (and their -worked variants), paid / unpaid leave, sick, absent, plus the booked-vs-free marker. Every coloured cell on the sheet maps back to one of these.
A day, expanded — Clocked → Worked + OT
The tour expanded an employee. Each day shows the raw punches (Clock in / out) then the DERIVED result: Clocked (total hours) → Worked + OT, plus a Status. Only the punches are an INPUT — Worked / OT / Status are read-only RESULTS you never type. The split follows the employee's OT-rule badge: DAILY (hours past the standard day → OT; a short day docks Absence) or WEEKLY (hours past the weekly threshold → OT over the whole ISO week, even across periods).
- Edit a FREE day's punches (+ a comment); Save recomputes the rest. You can't edit a result column — that would reverse-guess the hours.
- Approved leave refuses a punch (revoke via the leave desk to record work); a BOOKED day is editable only while its period is open.
- Each free row carries a checkbox — tick rows (or the header select-all) and "Delete selected" removes them in one pass behind a full-screen spinner; booked days have no checkbox, so a delete can't reach period data.
Payroll
Run payroll as a PERIOD: create it, generate a slip per employee, move the whole period through approval and posting, then pay. Every amount is in each employee's own salary currency.
New Period — Year & Month
New Period opens an inline panel. Start with WHEN: the Year and the Month. Everything else on the panel reacts to this plus the schedule you pick next.
New Period — Pay Schedule
The Pay Schedule is the key choice: it decides WHO gets a slip and HOW the period is cut. Only employees on this schedule are generated, and its frequency (Monthly / Bi-weekly / Weekly / rotational) sets the cycles. Each bi-weekly / weekly cohort runs as its own separate period.
New Period — the Cycles preview
This read-only box shows exactly what your Year + Month + Schedule resolved to: how many cycles will be created, each with its date range and its total / working days and scheduled hours. A monthly schedule is one cycle; a rotational or bi-weekly one can be several. If it says "No cycles eligible" (the cycle hasn't ended yet, or they already exist), Create is disabled and tells you why.
New Period — Assign to
HR admins can hand ownership of the period to another HR user (default is yourself). The approval + post notifications then route to the assignee, and the Branches list below follows the assignee's allowed branches, not yours.
New Period — Branches
Pick the branch scope: the All Branches chip, or specific branch chips (limited to the owner's allowed branches). Slips are generated only for employees in the chosen branches, and the scope is LOCKED at creation — generate, regenerate, submit and post-all all follow it.
New Period — Notes
Free-text notes for the period — anything the team should know about this run.
New Period — Create
Create makes the empty period(s). Its label tells you how many — "Create" for one, "Create N periods" when the schedule resolved several cycles, or "Nothing to create" when none are eligible (disabled). Nothing is calculated yet — you generate the slips from the period header next.
The periods grid
One row per pay period. Columns: Year · Month · Type (the pay schedule — Monthly / Bi-weekly / rotational) · From–To dates · Status · Payment (how many slips are fully paid) · Owner · Slips (active / total, plus excluded) · Branches. Click a row to open the period below.
The period lifecycle
Open a period and this dark header appears — it carries the period's place in the state machine: OPEN → SUBMITTED → APPROVED → POSTED → CLOSED. The status chip shows where it is; the buttons on the right change with the state. Approve / Reject are NOT here — they happen in the Action Center inbox, only for the configured approver.
The workflow buttons
Right of the header sit the buttons that move the period through its stages. They're state-dependent — you only see the ones valid for the current stage. The next steps open a period in each stage and point at its button in turn (so the demo period changes as we go).
Button — Generate Missing Slips
On an OPEN period. Adds a draft slip for every in-scope employee who doesn't have one yet — safe to click again (it only fills gaps, never touches existing slips). This is how the period gets populated after you create it. ("Regenerate All" beside it instead wipes and recomputes every slip — manual edits lost.)
Button — Submit Period
Also on an OPEN period. Sends the WHOLE period for approval — it moves from Open to Submitted. Approval itself happens in the Action Center inbox (only the configured approver can respond); if it's rejected, the reason shows on the header and the period drops back to Open.
Button — Post All
On an APPROVED period. Posts every non-excluded slip to the general ledger in one atomic action — each slip gets its TX number, the period becomes Posted, and the amounts are now real accounting entries. This is the commit.
Button — Close Period
On a POSTED period. Closes it permanently and LOCKS the calendar month — after this, no module (payments, journals, treasury, payroll edits) can write to that month. The "books are final for this month" action.
Button — Reopen
On a CLOSED period, FIN ADMIN only. Unlocks the month again so corrections can be made — and it's loudly audit-logged, because reopening a closed month is serious. Use it only to fix a genuine mistake.
Employee Advances
Expand this to see which employees have OUTSTANDING advance balances coming into the period — the amount, how much is already allocated, what remains, the recovery plan (how many lines), and the last slip that recovered from it. The slip generator's auto-recovery pulls deductions from these, so it's the operator's "who owes what" view before generating.
The Attendance Sheet
Expand this to record attendance for the whole period — one day-typed row per employee per day. It auto-seeds on first open and derives every day-type from your existing settings: the CONTRACT (the employee's pay schedule) gives the working-days mask and the standard day; the employee's JURISDICTION gives the public-holiday calendar; approved Vacation Requests give paid or unpaid leave; the hire date marks pre-hire days. A fresh sheet assumes everyone worked their full standard day — you only touch the exceptions.
Note — Base pay always stays the FULL salary. Attendance never rebuilds it — it only ADDS premiums (overtime · weekend · holiday) and SUBTRACTS absence. The colour legend above the rows names every day-type the sheet can hold.
One row per employee
Each employee is a summary row: their name and branch, then Worked / Unpaid / OT totals for the period, and a colour day-strip on the right — one tick per day of the period, coloured by day-type, so you can spot an odd week at a glance (hover a tick for its date and type). Click the row to expand that employee's days and edit them.
A day at a time
The expanded editor is one row per date: Date · Day · Type · In · Out · In 2 · Out 2 · In 3 · Out 3 · Worked h · Overtime · Comments · Approved by. The three In/Out pairs hold a SPLIT SHIFT — a day with a break (say 08:00–12:00 then 13:00–17:00) fills two pairs, and Worked h is the SUM of all pairs (the break is excluded), so a full split day reads 8h, not 4. Lateness is measured from the first punch, early leave from the last. Approved by is stamped by the system (the leave approver, the editor, or the importer); Comments is free text a leave day inherits from its request. Edited rows highlight in yellow until you Save.
- HOURS DRIVE THE DAY — you don't normally pick a Type. Enter (or import) a Clock in / Clock out and the engine derives the rest: hours past the standard day become Overtime; hours short of it become an Absence deduction; any hours on a weekend or a public holiday flip that day to Weekend worked / Holiday worked and earn its premium.
- Type is there for the cases a clock can't tell you: Sick, Paid or Unpaid leave, or a correction. Whatever you set by hand is respected — Re-seed and Import never overwrite a day you edited yourself.
- A worked rest-day earns its premium for the hours worked AND overtime for anything past a standard day — a part-day earns a part premium, so 6 hours of an 8-hour day is 6 hours of premium, not a whole one.
Note — The rates all come from the employee's pay schedule: the standard day, the OT threshold, an optional per-period cap, and one multiplier each for overtime / weekend / holiday.
Importing a clock file
The clock file is the AUTHORITATIVE record of who was present — unlike a fresh sheet, which assumes everyone worked. For every employee in the file, a working day with NO punch becomes Absent: that means a missing row AND a row whose punch columns are empty — both say the same thing, the clock recorded nothing. Off-days, public holidays, approved leave and your own manual edits are never touched.
- Map the columns (an employee/clock id and a date are required), fix any flagged cell inline, tick the rows, Import. Real clock exports map by pattern — an id column called AC-No / Emp Code / User ID, a Date, and Clock In / Clock Out all land automatically. Your file does NOT need a day-type or status column; the day-type is worked out for you.
- Employees are matched by Clock / Badge ID first (the biometric device's User ID on the employee record), then employee id, code, or name.
- Public holidays are honoured on import: a punch on a holiday becomes Holiday worked and earns the premium; a holiday with no punch stays a paid holiday — nobody is ever marked absent on a holiday.
- Approved leave is protected: if a day in the file is ticked/worked but is ALREADY approved leave in the system, the preview STOPS and lists those days. A punch never overwrites approved leave — resolve them (revoke the leave or drop those rows), or click Import again to proceed and keep those days as leave (they're skipped).
- Each import is read as the WHOLE period's attendance, so importing a partial file marks the days it doesn't cover as Absent — re-import the full file (or add the missing punches) to correct it. The result reports how many days it marked absent, plus unmatched employees, out-of-period dates, and any incomplete punch (only a clock-in or only a clock-out).
Note — Dates read as 2026-07-01 or 7/1/2026 (and the D/M variants); times as HH:MM, crossing midnight for an overnight shift. Worked hours are computed from the punches, and the punches themselves are kept — so an Export gives you the real in / out times back, not just the totals.
The sheet's buttons
Everything you do to the sheet lives in this one strip, left to right: Export · Import · Re-seed · Clear · Cancel · Save.
- Save writes your edited days and AUTO-RECALCULATES the affected slips in the same click — you don't go and press Recalculate. Slips you've hand-edited are skipped and named, so your manual work is never overwritten. It's disabled until there's something to save, and the count shows how many cells are pending.
- Cancel throws away your unsaved edits and reloads the sheet from the server. Also disabled until you have pending edits.
- Re-seed re-derives day-types from the CURRENT contract mask + holiday calendar + approved leave, then recalculates. Run it after you add a public holiday or approve a leave request — a calendar off-day wins over an imported guess (nobody stays 'absent' on a holiday), while your manual edits stay put.
- Clear deletes the whole sheet for the period and seeds a fresh one — the way out when a seed or an import went wrong and you want to start over.
- Export writes the sheet with the same columns the importer reads (punches included), so you can edit it outside and bring it straight back.
The slip sheet
Inside the period, one row per employee slip: Slip # · Employee · Branch · State (Draft / Posted / Excluded) · Owner · Date · TX (the GL transaction once posted) · Payment (links to the Payments page once paid). Excluded slips stay on the sheet but skip the GL post. Click a slip to open its detail.
Filtering the slip sheet
Narrow the sheet: All Slips, Active Only (hide excluded), or Excluded Only. The count on the right shows how many of the total are visible. Refresh reloads the slips, and Report Center prints / exports the filtered sheet.
Include closed periods
An admin-only toggle: normally slips whose date falls in a CLOSED (locked) calendar month are hidden. Turn it on to show them (dimmed) for audit or research — it doesn't unlock anything, it's read-only visibility, and the choice is remembered per user.
A pay slip
Opening a slip shows the whole payslip for that employee: the earnings and deductions that make up their pay, a read-only attendance summary, HR perks, and slip-level actions — all in this employee's salary currency. The next steps walk it.
Slip actions — the row
This row holds every action that applies to THIS one slip (draft slips show the most). Note what's NOT here: Submit / Approve / Post — those act on the whole period from the header, never per slip. The next steps take the buttons one at a time.
Recalculate from Settings
Wipes this slip's lines and re-pulls the defaults from current settings — the grade salary matrix, the tax brackets, and the social-insurance rates. Use it after changing settings, or to throw away manual edits and start clean. It only touches this slip (the period-header "Regenerate All" does it for every slip at once).
Edit Lines
Opens the line editor (a later step) to tweak amounts on top of the auto-computed defaults, or add one-off lines — a bonus, an advance, a manual deduction. This is the manual-override entry point for a single slip.
Exclude from post
Marks this slip to be SKIPPED when the period posts — the slip stays visible on the sheet (struck-through) but never hits the GL. Use it for a leaver, a disputed slip, or anyone who shouldn't be paid in this run. "Manage Exclusion" later edits the reason or re-includes them.
Print the payslip
The Report button (top-right of the slip) prints or exports THIS slip as a formatted payslip document via Report Center — the copy you hand to the employee. (The Delete button, on a draft, removes the slip entirely.)
The lines table
The heart of the slip: every individual earning and deduction line for this employee, each in their salary currency (with the local-currency conversion beside it). Once the slip is posted, each line links to its GL transaction. The three coloured totals at the bottom are what everyone reads — the next steps highlight each.
Gross Earnings
The green total: everything the employee EARNS this period added up — basic salary plus allowances, overtime, bonuses and any other earning lines. This is pay before anything is taken off.
Total Deductions
The red total: everything taken OFF the gross — income tax, the employee's social-insurance share, advances being repaid, and any manual deductions. Employer contributions are NOT in here (they're company-side; they show as a separate purple bucket when present, and never reduce the employee's pay).
Net Pay
The blue total: Gross Earnings − Total Deductions = what the employee actually takes home, and the amount the Payments page will pay. This is the number the whole slip exists to produce.
Attendance
A READ-ONLY summary of this employee's attendance for the period — paid vs unpaid days, premium days (weekend / holiday worked) and overtime hours: the day-types that produced this slip's premium earnings and its Unpaid-Days / Absence deductions. You edit attendance on the period's Attendance Sheet (above the slip sheet), not here. HR Perks (from the employee's grade) show below as read-only context.
The line editor
Edit Lines opens this editor — the manual override for one slip. It has two sides that matter to net pay (Earnings + Deductions) plus a company-side section (Employer Contributions). Each line carries its own currency + rate. There's a "Pull defaults" toolbar at the top to refresh the auto rows from settings before you save. The next steps walk each section.
Editor — Earnings
The green Earnings section: every earning line, editable. Change an amount, or add a one-off line (a bonus, an extra allowance) by picking the component and clicking Add. Anything you add here increases Gross Earnings — and therefore Net Pay.
Editor — Deductions
The red Deductions section: tax, social insurance, advance repayments, manual deductions — all editable, and you can add a one-off deduction the same way. Advance-repayment lines are aware of the remaining balance. More here means a lower Net Pay. (Below, the purple Employer Contributions section is company-side only — it never changes the employee's net.)
Editor — Save
Save Lines writes your changes and recomputes Gross / Deductions / Net. On a POSTED slip (FIN admin) the button reads "Reverse & Repost": only the lines you actually changed are reversed and re-posted to the GL — untouched lines keep their existing entries. Cancel discards everything.
Report Center
Report Center prints or exports the periods grid (Layer 1) or a period's slip sheet (Layer 2) to Excel or PDF with custom columns — the polished way to produce a payroll register. A single payslip prints from the slip's own Print button.
General Bills
General Bills are your CONTRACTOR overhead costs — rent, utilities, services, anything a contractor bills you for that ISN'T tied to a shipment. Each expense line posts straight to the ledger: debit the expense account, credit the contractor you owe (no shipment allocation — that's Shipping Bills). The page is a drill-down: one row per CONTRACTOR → their BILLS → each bill's expense LINES.
Search
Type to filter the loaded contractor list live; press Enter to run a wider SERVER search (across all bills, not just the current page), Escape to clear. Use it when the contractor you want isn't in view.
Branch filter
Narrow to one branch — limited to the branches you're allowed to see, applied server-side. General bills are branch-dimensioned (a bill can even span branches, one branch per line), so this scopes the whole list to a branch's costs.
Contractor filter
Filter to a single contractor. The + button beside it jumps to the Contractors page with the Add form ready (Back returns here) — add a new contractor without losing your place.
Currency filter
Show only contractors whose bills include a chosen currency. Bills are multi-currency — each line carries its own currency and the exchange rate locked at post time.
The contractor grid
One row per CONTRACTOR — name/account, how many bills, and the running balance (what you owe them). Sort by any column; a card view and a Report Center (print/export) are on the toolbar. Click a contractor row to open their bills below.
A contractor's bills — the drill
Opening a contractor drops down a brown panel with everything you owe them. It has two levels: the list of BILLS, and — when you expand a bill — that bill's expense LINES. The next steps walk it: the bills list, creating a bill, and the line editor + posting.
The bills list
One row per BILL for this contractor: bill # · Kind (Overhead / Logistics) · date · branch(es) · line counts (total / draft / posted) · the amount per currency + the local total · status (Draft or Posted, with a "Cust" badge for customer-distributed bills) · the customers it's split across · owner. Totals sit at the bottom. Click a bill to expand its lines.
Add Bill
The Add Bill button (Finance Edit) starts a new bill header for this contractor. A bill is just the header — you add its expense lines after creating it.
New Bill — Slip Photo
Optional: attach a photo or scan of the contractor's paper invoice / receipt so the source document travels with the bill. You can view it again later from the bill.
New Bill — Owner (admin)
Finance ADMINs only: create the bill on behalf of another employee (default is you). The assignee becomes the owner and gets a notification — used when one person enters bills for a team.
New Bill — Overhead vs Logistics
Overhead (default) draws its expense accounts from General Expenses. Logistics draws from Shipping Expenses — for a contractor invoice that's logistics-related but NOT tied to one shipment (e.g. a late combined bill). It only changes which account list the line picker offers, and it LOCKS after create.
New Bill — Customer-related
Tick this to make the bill CUSTOMER-DISTRIBUTED: every line must then be split across customers, and posting happens in two stages (debit each customer / credit the expense). Leave it off for a plain overhead cost. Also LOCKS after create — it changes how the whole bill posts.
New Bill — Create
Create saves the bill HEADER (Cancel discards it). Nothing is posted yet — you add the expense lines next and post them from the expanded bill. The kind and customer-related choices above are frozen from this point on.
The expanded bill
Expanding a bill shows its EXPENSE LINES — one row per expense, with the account, branch, amount + currency, rate, and notes. This is where you build the bill: add lines while they're draft, then post them. The next steps walk an existing line, deleting one, the customer split, posting, and adding/editing a line field by field.
An existing line
Each row in the table is one expense line: its account name, expense type, branch, amount + currency, rate, notes, and a Draft/Posted status. CLICK a line to open it in the editor and change it. Editing a line on a POSTED bill reverts just that line to draft and reverses only its transaction (Finance ADMIN); draft lines are editable by the bill's owner.
Delete a line
The trash icon removes a line. On a draft line it just deletes it; on a posted line it reverses that line's transaction first. (Deleting the whole bill, from the bills list, reverses every posted line at once.)
Customer Distribution
On a CUSTOMER-RELATED bill, this purple table lists every line's split across customers (read-only here — you set the splits inside each line's editor). It's how the two-stage post knows how much of each expense to debit each customer. On a normal overhead bill it doesn't appear.
Post the bill
Post turns this bill's DRAFT lines into real ledger entries in one action — debit each expense account, credit the contractor. Already-posted lines are left untouched; the button says how many drafts it will post. Afterwards, a Finance ADMIN who edits a posted line auto-reverses that line back to draft.
Add Line
Add Line opens the line editor to add one expense to this bill (owner or admin). The next steps walk every field in it.
Line — Expense (the account)
Pick the EXPENSE type; its debit account is set automatically. The Category dropdown beside it just narrows the expense list. On an Overhead bill these come from General Expenses; on a Logistics bill, from Shipping Expenses (the kind you chose when creating the bill).
Line — Branch
The branch this line posts to — the contractor leg AND every customer leg of the line land here. A Finance ADMIN may pick any branch the contractor operates in; a Finance Edit user is locked to their home branch (if the contractor isn't set up there it shows "Not in your branch"). This is why one bill can span branches — each line carries its own.
Line — Amount
The expense amount in the line's own currency (the raw amount). Together with the rate below it produces the local-currency amount, previewed under the fields.
Line — Currency
The currency this expense is billed in. Picking it auto-computes the exchange Rate from your currency settings. The Manage button jumps to Settings → Currencies (Back returns here).
Line — Rate
The exchange rate to your local currency, auto-filled from the currency but editable if this bill used a different one. Amount × Rate = the local amount that hits the books, and the rate LOCKS when the line posts.
Line — Notes
Optional free-text description for the line — what the expense was for.
Line — Customer distribution
Only on a CUSTOMER-RELATED bill: split this line's amount across the customers it's for (the shares must add up to the line amount). At post, the line then debits each customer instead of a plain expense. On a normal overhead bill this section doesn't appear.
Line — Save
Save Draft adds the line to the bill (Cancel discards it); on an existing line the button reads "Update Line". Enter saves, Escape cancels. The line joins the table above as a draft — repeat for each expense, then Post the bill.
Editing a line
The tour clicked an existing line to open it in the SAME editor, pre-filled with its values — every field above is editable and the button now reads "Update Line". On a POSTED bill a banner warns that saving reverts the bill to draft and re-posts only the line you changed. This is the safe way to correct a bill after posting: edit → save → it re-posts cleanly.
Shipping Bills
Shipping Bills are the CONTRACTOR costs of a SHIPMENT — freight, clearance, trucking, anything a contractor bills you for moving a specific shipped order. Unlike General Bills, every line is ALLOCATED across the shipment's customers (a per-customer distribution, computed when you post: debit each customer, credit the contractor). The page drills: one row per SHIPMENT → its BILLS → each bill's expense LINES → the customer distribution.
Search
Type to filter the loaded list live; press Enter to run a wider SERVER search across all bills, Escape to clear.
Branch filter
Filter shipments to one branch (server-side, within your allowed branches).
Contractor filter
Show only shipments that have at least one bill to the chosen contractor.
Customer filter
Show only shipments whose customer list includes the chosen customer — useful because a shipment's costs are distributed to its customers.
Currency filter
Show only shipments with at least one bill in the chosen currency.
Include closed periods
Admin-only: normally bills whose date is in a CLOSED (locked) period are hidden; turn this on to show them for audit (an "Audit mode" banner appears). Edits and posts against closed-period bills are refused until the period is reopened.
Post All Drafts
Bulk action: post every DRAFT line across every bill in the current view at once. A result dialog summarizes it, and a failure on one bill doesn't abort the others. The count shows how many bills have drafts to post.
Status chips
Quick filters by billing state: All · Not Billed (no bill yet) · Draft (has unposted lines) · Posted — each with a count. The fastest way to find shipments that still need billing.
The dashboard strip
At-a-glance totals for the current view: how many shipments are Not Billed / Draft / Posted, plus the total billed value with a per-currency breakdown.
The shipments grid
One row per SHIPMENT (shipped order) — its cargo, customers, billing status, and totals. Click a shipment row to open its bills below.
A shipment's bills — the drill
Opening a shipment drops down a blue panel: the BILLS raised against it, and — below — the Customer Distribution grid. Expand a bill to see its expense LINES. The next steps walk it: the bills list, creating a bill, the lines, the distribution, and posting.
The bills list
One row per BILL on this shipment: bill # · contractor · date · line counts (draft / posted) · amount per currency + local total · status (Draft / Posted). A shipment can carry bills from SEVERAL contractors. Click a bill to expand its lines.
Add Bill
Add Bill (Finance Edit) starts a new bill header on this shipment. A bill is just the header — you add its expense lines after creating it.
New Bill — Contractor
Pick WHICH contractor this bill is from — the one you owe for this leg (the shipping line, the clearing agent, the trucker…). The + button adds a new contractor without leaving (Back returns here with the form intact). Because a shipment can involve several contractors, each gets its own bill.
New Bill — Slip Photo
Optional: attach a photo or scan of the contractor's invoice so the source document travels with the bill.
New Bill — Owner (admin)
Finance ADMINs only: create the bill on behalf of another employee (default is you); the assignee becomes owner and gets a notification.
New Bill — Create
Create saves the bill HEADER (Cancel discards it). Nothing is posted yet — you add the expense lines next and post from the expanded bill.
The expanded bill
Expanding a bill shows its EXPENSE LINES — one row per cost, with the expense, amount + currency, rate, notes, and status. This is where you build the bill: add lines while draft, then post. The next steps walk an existing line, delete, the customer distribution, posting, and adding/editing a line.
An existing line
Each row is one expense on the bill: its expense type, amount + currency, rate, notes, and Draft/Posted status. A surcharge line shows a ⚡ marker (it's scoped to specific customers). CLICK a line to edit it; editing a posted line reverses just that line's transactions and re-posts on save (Finance ADMIN).
Delete a line
The trash icon removes a line — a draft line is just deleted; a posted line has its transactions reversed first.
Customer Distribution — the heart of Shipping Bills
This purple grid is what makes Shipping Bills different from General Bills: every line's cost is ALLOCATED across the shipment's customers. For a normal line the split is computed automatically from cargo × expense rules (each customer's share of the shipment); for a surcharge line it goes only to the customers you scoped it to. While lines are draft it shows a PREVIEW; at post it becomes real — debit each customer, credit the contractor. Report Center prints it.
Post the bill
Post turns this bill's DRAFT lines into real ledger entries in one action — following the distribution, it debits each customer their share and credits the contractor. Already-posted lines stay untouched; the button says how many drafts it will post. ("Post All Drafts" on the toolbar does this for every bill in the view at once.)
Add Line
Add Line opens the line editor to add one expense to this bill. The next steps walk every field.
Line — Expense
Pick the EXPENSE type (the Category dropdown narrows the list). Its debit account is set automatically. If you pick a SURCHARGE-type expense, a customer-scope picker appears (a later step) so you can target specific customers instead of the automatic split.
Line — Amount
The expense amount in the line's own currency. With the rate below it produces the local amount, previewed under the fields.
Line — Currency
The currency this expense is billed in; picking it auto-computes the exchange Rate. Manage jumps to Settings → Currencies.
Line — Rate
The exchange rate to your local currency, auto-filled but editable. Amount × Rate = the local amount, and it LOCKS when the line posts.
Line — Notes
Optional free-text description of the expense.
Line — Surcharge customer scope
Only when the expense type is a SURCHARGE: instead of the automatic cargo-share split, you choose WHICH customer(s) bear this cost (each shown with their % of the shipment). Use it for a cost that belongs to specific customers, not the whole shipment. Normal (non-surcharge) lines skip this and split automatically.
Line — Save
Save Draft adds the line (on an existing line it reads "Update Line"). Enter saves, Escape cancels. The line joins the table as a draft and its share flows into the distribution preview — repeat for each cost, then Post.
Editing a line
The tour clicked an existing line to open it in the SAME editor, pre-filled — every field is editable and the button reads "Update Line". On a posted line, saving reverses that line's transactions and re-posts the change (other posted lines untouched). The safe way to correct a shipping bill after posting.
Payments
Payments record MONEY moving in or out, and it's the richest page in Finance — it carries three distinct flows. (1) ORDINARY pay/receive with a customer, vendor, or contractor: each line is allocated against an outstanding document, with TWO levels of reconciliation — a quick allocation at entry, then a full Reconcile dialog that splits a line across many docs and shows the doc side. (2) EMPLOYEE ADVANCES: paying an employee outside payroll disburses an advance with a recovery PLAN that the pay slip claws back automatically. (3) PAYROLL RUNS: one payment built from a whole pay period, every line auto-allocated (auto-reconciled) to its slip. This topic walks all three.
New Payment — Direction
Receive (money coming IN — a customer pays you, an employee refunds an advance) or Pay (money going OUT — you pay a vendor, contractor, or salary). Direction flips which side of the cash account moves and which documents you can allocate against.
New Payment — Entity type
WHO the payment is with: Customer, Vendor, Contractor, or Employee. It sets which entity list the picker below offers and which outstanding documents the allocation can target. Employee is for advances — Pay disburses, Receive refunds, and the pay-slip's advance line recovers it automatically when the slip posts.
New Payment — Entity & Branch
Pick the specific entity, then its BRANCH (the arrow makes the flow explicit). The branch LIMITS the allocation below — only that branch's outstanding documents are offered — so a payment settles debts in the right branch. The +New button (customer / vendor / contractor) jumps to that page's Add form and returns here with the payment intact.
New Payment — the lines
One or more lines, each: Amount + Currency + Rate (raw × rate = local), Pay via (the cash / bank / wallet account this line moves through — different lines can use different accounts, a split-method payment), optional Notes, and a per-line Slip photo. Add Line adds more; the Total shows the local sum. Each line is allocated in the picker directly below it.
New Payment — Allocation (level 1)
This is what makes a payment settle the right debt — and it's the FIRST of two reconciliation levels. Pick a scope tab (the tabs differ by entity type: contractor → shipping / general bills; vendor → active order / archived SO#; customer → all of those plus service fee), then a document. Each option shows Total / Paid / Outstanding, sorted most-due first, and the amount auto-caps at the doc's outstanding; any residue floats. Leave a line Unallocated and its cash sits as entity credit. The SECOND level — splitting one line across several docs — is the Reconcile dialog, later in this tour.
New Payment — Save Draft vs Save & Post
Save Draft stores it with NO ledger impact yet — editable, postable later. Save & Post commits every line to the GL immediately (skips the preview). Cancel discards the form. Draft-first is the safe path when you're still gathering slips or allocations.
The metrics strip
Counts for the current view plus the NET money per currency (money in minus money out) — a quick read of how much has actually moved.
The payments list
Two views (toggle on the toolbar): a flat TABLE — one row per payment (number, entity, direction, amount, status Draft / Posted, date) — or entity CARDS that GROUP payments by who they're with (click a card to expand that entity's payments). Click a payment to open its detail below.
A payment — the drill
The tour opened the payment with the most lines. It shows the HEADER (entity, branch, direction, owner) and a LINES table — each line's cash account, raw / rate / local, its allocation, TX#, slip and status — plus the buttons that act on it. The next steps walk the lines, the allocation column, and Post / Reconcile / Add Line / Report.
The lines table
One row per line: Ser, Tx date, the cash account it moved through (Received in / Paid via), Raw + Cur + Rate + Local, its Allocation, the TX# (click to drill into the General Ledger row), notes, slip thumbnail, and a Draft/Posted status. Click any line to open it in the editor below; drafts get a trash icon to delete. Totals sit at the bottom.
The Allocation column
Per line, which document(s) the cash was applied to and each doc's live state — an OUT badge (still owed) or ✓ paid — plus a FLOAT chip when part of the line's cash is still unallocated (sitting as entity credit). A multi-doc line shows one tag per allocation. This column is the answer to "what did this money settle?"
Post
Turns this payment's DRAFT lines into real ledger entries in one action; the button says how many drafts it will post and opens a pre-post preview first. Already-posted lines are untouched. (Editing a posted line later atomically reverses its live transaction and re-posts the new values.)
Add Line
Adds another draft line to this payment using the SAME editor as the New Payment form — amount, currency, cash account, and the allocation picker. Use it to split one payment across several cash accounts or several documents, then post the new lines.
Report Center
Opens the Report Center for this payment — print or export a voucher / receipt for the entity, with its lines and allocations. (Post All and Reconcile All on the toolbar do the same across every payment in view.) The Reconcile button beside it is the whole next section.
Reconcile — the second level
The tour opened Reconcile on the posted payment with the most lines. Level 1 (in the form) put ONE doc on each line; Reconcile is level 2 — it edits the payment-allocation junction directly, so a single posted line's cash can be SPLIT across several outstanding docs, or shifted from one to another. It works only on POSTED lines (drafts have no cash in the ledger yet) and never touches the GL — allocation lives off to the side. It's hidden for payroll periods and employee advances (their allocations are slip-driven).
Reconcile — smart defaults
The green banner states the rules the dialog enforces: adding a row pre-fills the line's remaining float; picking a doc auto-caps the amount to min(doc outstanding, line remaining); every amount stays editable; a sum BELOW the line total leaves the rest as entity credit (float); a sum ABOVE it is refused at save. So you can't over-allocate a line or a doc.
Reconcile — a posted line
One card per posted line — its raw / currency / rate, a live STATE badge (entire amount floats · N floats · fully allocated · over-allocated), and the allocation rows beneath. Each row is a scope + document picker with its own editable amount, notes, a View button (doc side), and a remove ✕. This is where one line becomes many allocations.
Reconcile — split a line
Add allocation appends a row pre-filled with the line's remaining float — pick a second doc and the line's cash splits across both. The button only shows while the line still has float AND every existing row already has a doc, so you can't spawn empty rows. Each line saves on its OWN Save Line button (per-line atomic): a partial failure leaves the other lines saved.
Reconcile — the doc side (live)
Click View on any row and the dialog splits: the right pane shows that DOCUMENT and every payment allocated to it across the whole system — the doc-as-master perspective — updating live as you edit on the left. So you reconcile from both directions: line → docs on the left, doc → payments on the right. Report Center prints one row per allocation.
Employee advances
The tour opened an Employee + Pay payment — an ADVANCE. Paying an employee outside payroll (Pay) disburses an advance; Receive would refund one. An advance isn't an expense — it's money the employee owes back, recovered over time. Each posted advance line carries a green Recovery Plan panel, walked next.
Advance — the recovery plan
One green panel per advance line. It schedules how the advance is clawed back in installments, and tracks progress: the header shows Total advance vs Planned, and flags any gap (Δ) — the plan total must equal the advance before it can save.
Advance — the installments
One row per installment: planned date, planned amount, how much has been Recovered vs Unrecovered, and a State chip (⏳ Pending · ⚠ Due · ◐ Partial · ✓ Recovered). This is the running picture of what the employee still owes and when each slice is due.
Advance — edit & templates
Edit plan unlocks the rows; Apply template generates equal installments (monthly / quarterly / yearly) from a start date, or build them by hand with Add installment. Save commits (total must match the advance). Once an installment has been recovered it locks — its date can't move, it can't be dropped, and its amount can only grow above the recovered floor; templates only regenerate the not-yet-recovered portion.
Advance — how recovery happens
You don't post recoveries here. When the employee's PAY SLIP is posted, its deduction_advance line automatically writes a pay_slip allocation against this advance — that's what fills the Recovered column and flips installments to ✓. The plan is the schedule; the slip is the engine. (This is why the allocation picker is hidden for advances — the slip owns it.)
Payroll run — the form
The tour opened New Payroll Payment (the purple form). Instead of typing lines, it builds ONE payment from a whole PAY PERIOD: every payable slip line becomes a payment line whose debit is the liability the slip created (Wages / Tax / SI Payable) and whose credit is the cash account you pick — auto-allocated (auto-reconciled) to its slip, so there's no manual allocation. The next steps walk it.
Payroll run — pick the period
Choose an unpaid pay period (only approved/posted periods not already claimed by another Payment# are listed); the form then loads every payable slip line. Regenerate re-pulls those lines if the slips were edited after you opened the form. Date and Owner (admins can assign) sit beside it.
Payroll run — the employee table
Once a period is loaded, one row per EMPLOYEE appears (name · title · branch · slip# · line count · local total), each with a check box (checked = include in Post) and Select all / Unselect / Invert. Expand a row to see its component breakdown — every slip line with its kind badge (earning / tax / SI / advance), amount, the counter account it settles, and a per-line Pay-via cash picker — plus a "Post this slip" button that posts just that employee now.
Payroll run — one cash account for all
The typical case is "the whole run goes through Bank A" — this strip sets that one cash account across every line at once (each expanded row can still override per line). Every line needs a Pay-via account before the run can post.
Payroll run — Save Draft vs Save & Post
Save Draft persists every line as a draft (no GL). Save & Post persists them all but POSTS only the lines whose employee row is checked — unchecked employees stay as drafts on the SAME Payment# for a later post. So you can pay part of the run now and the rest when funds arrive, all under one payment number.
Payroll run — the posted detail
The tour opened a posted payroll-period payment. Its detail is different from an ordinary one: lines are GROUPED by employee, each group headed by a blue banner (name · title · branch · slip#). There's no per-line allocation picker — each line is already tied to its own slip. The next steps walk the group controls.
Payroll detail — the employee group
The blue header opens each employee's block of slip lines. When the group still has drafts, it carries its own "Post (N)" check box — check the employees you want to pay now; the rest stay as drafts on this same Payment#. It's the same selective-post idea as the create form, but on an already-saved run.
Payroll detail — Post selected
Posts only the checked employees' draft lines (with a pre-post preview), leaving everyone else as drafts on this Payment#. Select all / Unselect / Invert sit beside it. This is how a payroll run is paid in waves without splitting it across multiple payment numbers.
Payroll detail — Regenerate from slips
Rebuilds this payment's DRAFT lines from the period's CURRENT slip state — use it after a slip was edited. It preserves already-posted lines and your cash-account picks, and only refreshes the drafts, so the payment stays in step with the payroll without starting over.
Treasury
Treasury moves money between your OWN accounts — cash, bank, wallet — with three operations: CASH TRANSFER (same currency on both sides), FX EXCHANGE (different currencies per side, where the two legs must balance in local currency), and PETTY CASH (a transfer tagged for audit clarity). It is NOT for paying vendors or collecting from customers (that's Payments) — it's purely internal movement. Every entry is a draft you POST to the ledger (debit the destination account, credit the source); a posted entry can still be corrected by an atomic reverse + repost. Two views: a flat table, or cards grouped by operation type.
Table vs Cards
Toggle between a flat TABLE (one row per entry, every column) and type CARDS (three cards — Cash Transfer / FX / Petty Cash — pinned at the bottom, each with its counts and per-currency totals). Click a card to open just that type's table above it. The tour visits the cards near the end.
Include closed periods
Finance ADMINs only: closed-period entries are hidden by default (their period is locked). Toggle this on to bring them back into view for audit or research — they stay read-only.
Post All Drafts
Posts every draft you're allowed to post in one batch — it opens a pre-post preview first, and the commit is atomic per entry (one bad entry doesn't roll back the rest). The button shows how many drafts qualify; it's hidden when there are none.
The dashboard strip
Above the list: counts (Total · Drafts · Posted · Edited) and the posted local total, plus a per-currency raw→local breakdown of posted activity. It always reflects the CURRENT filters, so narrowing the list re-scopes the numbers.
New — the operation type
Cash Transfer (same currency both sides — the amount is entered once), FX Exchange (each side its own currency and rate; the form keeps the two legs equal in local), or Petty Cash (same shape as a transfer, tagged for audit). The type LOCKS once the entry is created — it changes how the whole entry balances and posts.
New — From & To accounts
Pick the source (From) and destination (To) cash GROUPS — the last-level parent (cash / bank / wallet). You don't pick the exact leaf: on post the system resolves the right currency-specific account under that group (and auto-creates it if missing). The arrow between them shows the direction; for FX it's a two-way arrow.
New — currency, rate & amount
Each side carries a Currency (rate auto-fills from settings), a Rate to local, and an Amount — raw × rate = the local value shown beneath. A Cash Transfer / Petty Cash shows ONE amount set (same currency both sides); an FX Exchange shows TWO blocks so each leg has its own currency, rate, and amount.
New — the balance check
The strip shows From local vs To local and a Balanced / Imbalanced verdict. For a same-currency transfer they always match. For FX, editing one side's amount or rate auto-syncs the other so the two legs stay EQUAL in local — because the posting must balance (the ledger rejects an imbalanced entry). Red "Imbalanced" means fix a rate or amount before posting.
New — Save Draft vs Post
Save Draft stores the entry with no GL impact — editable and postable later. Post... opens the pre-post preview (the only modal here); confirming there writes the ledger entry. Cancel discards the form.
The entries table
One row per entry: Entry# · TX# (click to drill into the General Ledger) · date · type · the From and To accounts with each leg's raw / cur / rate / local · branch · status · owner · slip. Sort any column; click a row to open its detail below.
An entry — the drill
The tour opened the fullest entry (an FX exchange if you have one — two legs, two currencies). It shows both legs (each account is a link into the ledger), the slip, notes, and the buttons that act on it. Editing happens right here in the panel. The next steps walk the legs, the slip, and the actions.
The two legs
The From and To leg summaries — each account (a link that opens its General Ledger, with Back returning here), the raw amount + currency + rate, and the local value. This is the money movement laid out both ways: what left the source and what landed in the destination.
The slip
Attach or view the voucher / bank slip for this entry. It AUTO-SAVES the moment you attach or remove it — there's no save button — so the source document always travels with the entry.
The entry actions
For a DRAFT (owner or admin): Edit in place, Post... (opens the preview), or Delete. For a POSTED entry, a Finance ADMIN gets Edit (posted) — an atomic REVERSE + REPOST: it reverses the original GL entry and posts the new values in one step (the entry keeps its number and bumps an edit count). Report Center prints/exports this entry.
The cards view
The tour switched to Cards. Instead of a flat table, the three operation types sit as cards — each showing its draft / posted counts and a per-currency raw→local breakdown. Click a card to open just that type's entries above it, then a row to drill in exactly as in table view. It's the same data, grouped by what kind of movement it is.
Chart of Accounts
The Chart of Accounts is the backbone of your books — the master, HIERARCHICAL list of every account money can post to, each typed (Asset · Liability · Equity · Revenue · Expense · Income · Cost · Opening-Balance) and colour-coded. Parent accounts roll up their children's balances; leaf accounts hold the actual postings. Customer / vendor / contractor / employee sub-accounts are created automatically by their modules (hidden until you show them). Click any account number to open its LEDGER — every transaction with a running balance, drilling to the counter-account and out to the source document. Finance VIEW to read, EDIT to add / rename, ADMIN to delete and rebuild balances.
Entity accounts
Every customer, vendor, contractor, and employee gets its OWN sub-account (that's how their balances live in the ledger) — created automatically by those modules, and marked "auto". They're hidden by default to keep the structural chart readable; tick this to fold them in.
Rebuild Balances (admin)
Finance ADMINs only: a maintenance action that repairs the chart (drops phantom transactions, orphan subtrees, out-of-sync payment rows) and RECOMPUTES every account's balance from the GL transactions. The same repair runs automatically on each deploy — this button is the between-deploy trigger. It doesn't change any real posting, only fixes bookkeeping drift.
Type & scope filters
The chips filter the tree by account TYPE (All · Asset · Liability · Equity · Revenue · Expense · Income · Cost · OB-Asset · OB-Liability), each in its type colour with a live count. Beside them, filter by branch (accounts can be branch-restricted) and by currency.
The account tree
One row per account, indented by depth with a chevron to fold/unfold a parent's children. Columns: Acc # (a link — click it to open the ledger), Account Name, the type badge, currency, branch restriction, and Balance. Parent (header) rows are bold and show the ROLLED-UP balance of everything beneath them; leaf rows are the accounts that actually get posted to.
Row actions
On each editable account (Finance Edit): + adds a CHILD account under it, the pencil renames it, and (admin, only on a childless leaf) the trash deletes it. Auto-created entity accounts show "auto" / "locked" instead — they're owned by their module, not edited here.
Add an account
The Add button opens the New Account modal (the same modal the row + button opens, but starting at the root). The tour opens it next.
New — Parent & number
Pick the PARENT (or Root for a top-level account) — that's where it sits in the hierarchy. The Account Number is then auto-generated from the parent's number (for a parent's first child you can choose zero-padded 0001/0002 vs plain 1/2). You don't type the number; on an existing account it can't change.
New — Account Name
The human name for the account, e.g. "Insurance Expense". This is what shows in the tree, on the ledger, and in every posting.
New — Account Type
Asset / Liability / Equity / Revenue / Expense / Income / Cost / Opening-Balance — it drives the account's colour and how its balance is read (debit-normal vs credit-normal). It auto-inherits from the parent, so children of an Expense parent default to Expense; override only when you're branching into a different type.
New — Branch Restriction
Optional: tick the branches this account is allowed under. Leave all unticked for an unrestricted (all-branches) account. Restricting an account keeps branch-scoped users and pickers from posting to accounts that aren't theirs.
New — Save
Save creates the account (Cancel discards). It appears in the tree immediately under its parent, ready to receive postings. Renames and re-typing an existing account use this same modal.
An account's ledger
The tour opened the ledger of the account with the most activity (clicking any Acc # does this). The whole page becomes that account's ledger — its running balance built transaction by transaction. Back returns to the tree; ↑ Parent climbs to the parent account. The next steps walk the totals and the transactions.
The ledger totals
Total Debit, total Credit, and the resulting Balance for this account across the shown period. Admins can also toggle "Include closed periods" to bring sealed fiscal-year rows into view for audit. Report Center prints/exports the ledger.
The transactions
One row per GL movement: TX# · date · description, the allocation refs (Order / Shipped-Order / Bill — each a link to its source document), the COUNTER account (click it to jump to the other side of the entry), the raw + currency + rate + Debit / Credit, and the running Balance. A PARENT account instead shows per-child buckets — drill into a child for its transaction detail.
Journal Entries
Journal Entries are MANUAL double-entry postings straight to the general ledger — the accountant's tool for anything the automated flows (orders, bills, payments) don't produce: accruals, corrections, write-offs, reclasses. Each LINE is a debit/credit PAIR — the same amount debits one account and credits another — so a journal is balanced by construction (DR = CR). You build a journal as a DRAFT, review it, then POST it to the GL (with a pre-post preview); editing a posted line atomically reverses and re-posts it. A second tab holds the go-live OPENING BALANCES. Finance VIEW to read, EDIT to create / post your own, ADMIN to touch others' journals and posted lines.
Journals vs Opening Balances
Two tabs. JOURNALS (here) is the day-to-day manual double-entry ledger. OPENING BALANCES is a separate one-time surface for the balances you carried in at go-live, reconciled against the Opening-Balance Control account — the tour visits it at the end.
Include closed periods
Finance ADMINs only: journals dated inside a closed accounting period are hidden by default (the period is locked). Toggle this to bring them into view for audit or research — they stay read-only.
Post All Drafts
Posts every journal that has at least one draft line you're allowed to post, in one batch — a pre-post preview opens first. The button shows the count and is hidden when nothing qualifies.
New Journal
Opens the New Journal Entry form (walked next). A journal is created as a DRAFT — nothing hits the ledger until you Post it from its row.
New — the debit/credit lines
Each row is ONE balanced pair: a DR account, a CR account, an Amount, its Currency (rate auto-fills from settings, and the account's own currency is enforced), and the local value. The same amount debits the DR account and credits the CR account — so every line, and the whole journal, is balanced by design. Enter on the last line's amount adds another line.
New — Add Line
Adds another debit/credit pair (it inherits the previous line's accounts + currency to speed up repetitive entries). A journal can carry as many line pairs as you need.
New — Save Draft
The summary shows the line count, the running local total, and the "DR = CR (balanced by design)" badge. Save Draft stores the journal with NO ledger impact — it lands in the list as a draft, where you review it and click Post (with the pre-post preview) to push it to the GL.
The totals strip
Counts of Draft / Mixed / Posted journals (mixed = some lines posted, some still draft), the total DR and CR in local currency for the current view (always equal on balanced journals), and a per-currency raw breakdown — with an OFF flag if any currency's DR and CR don't match.
The journals list
One row per journal: J# · date · description · line / draft / posted counts · the distinct DR and CR accounts (each a ledger link) · DR and CR totals · currencies · a balance check · branch · owner · status. Click a row to open its detail below.
A journal — the drill
The tour opened the journal with the most lines. It shows the header, the debit/credit lines, and the buttons that act on it (Post drafts / Report Center). Editing happens right here — click any line to open its editor. The next steps walk the lines and the actions.
The journal's lines
One row per line: the DR and CR accounts (each a link into its ledger), the raw amount + currency + rate, the local DR / CR, the TX# once posted, and a Draft/Posted status. CLICK a line to edit it (drafts edit in place; editing a POSTED line atomically reverses its transaction and re-posts the new values). Draft lines have a trash icon; totals sit at the bottom.
Post the draft lines
Posts this journal's DRAFT lines to the GL in one action — a pre-post preview opens first so you confirm the exact debits and credits. Already-posted lines are untouched; the button says how many drafts it will post.
Add a line
Adds another debit/credit pair to an existing journal using the inline line editor — pick the DR and CR accounts, amount, and currency, then save it as a draft. Use it to extend a journal after creating it, then post the new lines.
Report Center
Opens the Report Center for this journal — print or export its lines as a T-account view (DR/CR accounts, amounts, TX#s). The toolbar's Report Center does the same across the whole filtered list.
Opening Balances
The tour switched to the Opening Balances tab — where you enter the balances each account carried at go-live, posted against the Opening-Balance Control account (which nets to zero when the migration is complete). It's a one-time setup surface kept out of the day-to-day journals. It has its OWN help topic with a full walkthrough (the register, the entry form, and the guided go-live wizard) — open "Opening Balances" in the help menu for that tour.
Opening Balances
Opening Balances are the balances you carry in from your PRIOR books at go-live, so the ledger starts with the right financial position instead of from zero. For each account you record its opening figure and a side (Debit or Credit); you type ONE amount and the engine stamps it on BOTH legs — the real account and a single OPENING BALANCE CONTROL account — so every entry is balanced by construction. When EVERY account is entered correctly, the OB Control account nets to ZERO — that's the completeness meter. Entries are per (account · currency · branch), permanent (set to 0 to clear — there is no delete), and freeze once the account starts trading. Work account-by-account in the register, or run the guided go-live WIZARD. It lives as a tab on the Journal Entries page; Finance EDIT to set, ADMIN for the wizard and on-behalf ownership.
The OB Control meter
The heart of the page. Every opening balance posts its other leg against ONE Opening Balance Control account — so once every account is entered correctly, that account's net is ZERO. This card is the live meter: green ("complete & consistent") at zero, amber ("an account is missing or an amount is wrong") otherwise, with account counts, DR/CR totals, and a per-currency breakdown (each currency should also net to zero). It's not a gate — every single entry is balanced by design — it's the at-a-glance proof the whole opening trial balance is right.
Account · currency · side · amount
Branch (opening balances are per branch — the picker navigates the preset slices), the real Account, its Currency, the SIDE (Debit for assets, Credit for liabilities/equity), the Amount (0 clears it — records are permanent), and the exchange Rate for foreign-currency openings. You enter one amount and one side; that's the whole entry.
How it posts
The "POSTS AS" line shows the double entry your amount produces: Debit the real account / Credit the Opening Balance Control (or the reverse for a Credit-side opening). This is why a single amount is always balanced — one leg is your account, the other is always the OB Control. The local value is shown at the chosen rate.
Set / Update — and freezing
Save inserts the opening balance or updates the existing one in place (no duplicates, no reversal chain); 0 clears a leaf. Once an account has started trading — it has real postings, or its fiscal year is sealed — its opening FREEZES and can't be edited here; you correct it with a current-period journal entry instead. Admins can set an opening on another employee's behalf.
The register
A read-only row per opening balance — account, branch, currency, DR/CR amounts, local, the linked GL transaction, and a lock icon on frozen rows. It's cross-filtered live by the form's account/currency/branch, and clicking a row loads it back into the form. Zero (unfilled) rows render faintly so you can see what's still pending.
Filters & tools
Search by account or notes, filter by currency or date, and (admins) toggle Include-closed to see sealed-fiscal-year openings — past year one, this tab opens empty until closed periods are included, because go-live entries fall in a closed period once their year is sealed. Save View keeps your filters; Report Center prints / exports the register.
Guided go-live setup
For a first-time migration, this (admin) button opens a step-by-step WIZARD over the same data — a far faster way to enter a whole opening balance sheet than one account at a time. The tour opens it next.
The go-live wizard
The tour opened the guided wizard. It walks you through the opening balance sheet section by section, stages every figure without posting, and posts them all at once when you're ready — with the same OB Control meter at the top so you always see how close to complete you are.
Wizard — the sections
Five steps: Setup → Assets → Liabilities → Equity → Review. Each middle step is an editable grid of that section's accounts (Assets = what you own; Liabilities = what you owe; Equity = owners' stake — the one most often forgotten, which is what usually strands the control). Click a pill to jump; Back / Next move through them.
Wizard — import or type
On Setup you can Export the whole trial balance (a template with current values), fill it offline, and re-Import — matched rows STAGE into the section grids for review. Or just type each section's amounts directly. Either way nothing posts as you go: everything is staged first.
Wizard — stage, then Post all
As you enter figures they collect as "unposted changes staged" — Post all opens a preview that separates ready rows from blocked ones and requires a confirmation tick before it commits. The Review step shows whether the opening sheet balances; if it's off, it's almost always missing Equity. The year-end close stays blocked until the opening balances are complete.
General Ledger
The General Ledger is the single source of truth for your books — every POSTED transaction in full double-entry detail: a debit side (account · raw · currency · rate · local) AND a credit side, for each movement. It's READ-ONLY here: you never post to the GL directly, it's built automatically by every module — orders, bills, payments, treasury, payroll — plus your manual journal entries. This page is where you search, filter, group, and audit that history, and drill from any row out to the account's ledger or the source document. Finance VIEW to read; admins can fold in closed periods.
Transaction types
Every posting carries a TYPE, colour-coded, and the chips filter to one — Purchase / Shipped_Out (an order line, active vs archived) · Service_fee · Shipping_bill · General_bill · Payment · Treasury · Payroll · Journal_entry · Opening_Balance · plus Reversal / Reversed for corrections. Each chip shows a live count; "All" clears the type filter. The count beside the title is the total in the current view.
The filters
Narrow the ledger by branch, currency (matches either the DR or CR side), account (picks from the chart — matches every TX touching it on either side), and a date range (defaults to the last 90 days to keep the fetch cheap). The search box does a free-text match across description / accounts (Enter runs it server-side). Save View keeps your combo for next login; Clear resets to defaults.
Include closed periods
Finance ADMINs only: transactions dated inside a closed accounting period are hidden by default (to declutter day-to-day work). Toggle this to fold them back in for audit — they render dimmed and stay read-only.
The totals banner
Computed over the currently-visible rows: total Local Debit and Local Credit, their difference (Balance — zero for a well-balanced ledger once all branches and periods are in view), and the raw debit / credit per currency before FX conversion. It re-scopes live as you filter.
The ledger
One row per transaction, both sides side by side: TX# · date · type · description, the source refs (Order / Ser / Shipped-Order / Bill — links to the document that created it), then the DEBIT side (account · raw · cur · rate · local) and the CREDIT side. Account numbers are links — click one to open that account's full ledger in the Chart of Accounts (Back returns here). The TX# column stays pinned as you scroll the wide table.
Flat vs Tree
Flat lists every transaction as its own row. Tree GROUPS them by source (Order / Shipment / Manual …) into collapsible sections with per-group DR/CR subtotals — handy for seeing everything one order or bill posted, as a unit. The tour switches to Tree next.
The grouped (Tree) view
The tour switched to Tree. Transactions now nest under group and subgroup headers, each with its own debit/credit totals; Expand All / Collapse All (beside the toggle) open or fold every group at once. It's the same rows as Flat, reorganised so a whole source document's postings read together. Switch back with the Flat toggle.
Report Center
Opens the Report Center for the current (filtered) ledger — choose columns, then print or export to PDF / CSV. It's the standard way to hand the ledger to an auditor or pull it into a spreadsheet.
Financial Statements
Financial Statements are the standard accounting reports, generated LIVE from the general ledger — six tabs: PROFIT & LOSS (revenue − expenses over a period), BALANCE SHEET (assets / liabilities / equity at a point in time), TRIAL BALANCE (every account's debit vs credit movement — the proof the books balance), CASH FLOW (money in / out, classified Operating / Investing / Financing), plus the period-end schedules FX REVALUATION and YEAR-END CLOSING. Every statement shares one parameter strip — pick a period, a basis (accrual vs cash), branches, and an optional comparison, then Run; the result is a drill-down tree whose rows open straight into the GL. Finance VIEW gated — it's read-only reporting.
The six statements
Each tab is a different report over the same ledger: Profit & Loss · Balance Sheet · Trial Balance · Cash Flow · FX Revaluation · Year-End Closing. They all work the same way — set the parameters, Run, read the drill-down tree, click any figure to open the GL. The tour walks each one's FORM control-by-control, RUNS it, and explains the result columns (which change per statement). Your active tab is remembered across a drill-and-back.
P&L — Period
Pick a Period preset (This Month / This Quarter / This Year / FY-to-date / Last Month …) or type custom From / To dates — editing a date switches the preset to "custom" so it sticks on Run. The P&L is always measured OVER A SPAN, so this range is what every figure covers.
P&L — Basis (Accrual / Cash / Both)
The recognition rule. ACCRUAL counts revenue when earned and costs when incurred (matching), regardless of cash. CASH counts them only when money actually moves. BOTH runs the two side by side so you can see the recognition gap — e.g. billed-but-unpaid revenue that accrual shows and cash doesn't. This toggle is unique to the P&L; the other statements don't offer it.
P&L — Comparison
Tick Comparison and pick a baseline (Prior period · Same period last year · custom dates). When it's on, every amount column SPLITS into three sub-columns — Current · Prior · Δ — and the Δ cell shows the change in amount and % with an up/down arrow, so you read growth or shrinkage on every line at a glance.
P&L — Branches
"All Branches" aggregates everything; click branch chips to pick specific ones (clicking a second adds it, clicking a selected one removes it). Select more than one and the table adds a COLUMN per branch plus a Total — so you compare how each branch contributed to every line, side by side.
P&L — Run · Saved Configs · % of Revenue
Run builds the statement (a busy overlay while it aggregates the GL). Saved Configs let you NAME a parameter set — period + basis + comparison + branches — and reload it in one click (handy for a recurring board pack). The "% of Rev" toggle adds a vertical-analysis column expressing every line as a percentage of total revenue.
P&L — the statement tree
The tour ran it. The body is a collapsible ACCOUNT TREE — Revenue and Expense groups you expand down to individual accounts; each cell stacks the per-currency raw amounts (with the post-time rate) above the local total, and group rows are bold and roll up their children. This same tree renders every statement; what changes per report is the COLUMNS — next.
P&L — the columns
By default the P&L splits each column into REVENUE | EXPENSE sub-cells (a row fills only its own side), and a NET column shows each row's signed contribution to Net Income (revenue +, expense −) — sum it down and you get Net Income. Turn Comparison on and the columns become Current / Prior / Δ instead; turn % of Revenue on and a final % column is added; pick several branches and you get a column set per branch. The header always shows which mode is active.
P&L — the accounting subtotals
Below the tree the statement's real structure is spelled out as running subtotals, each labelled with what it means: TOTAL REVENUE → COST OF GOODS SOLD → GROSS PROFIT (core trading margin) → TOTAL OPERATING EXPENSES → OPERATING INCOME → OTHER INCOME → NON-OPERATING EXPENSES → NET INCOME. Gross Profit and Net Income are the bold anchors; the rows between show exactly how you get from one to the next.
P&L — drill & disclosure
Every account line is a link — click it to open that account's ledger filtered to the same period (Back returns to the report). A disclosure note under the table explains how year-end closing entries (dated fiscal-year-end, moving temporary balances into Retained Earnings) and unrealised FX gain/loss appear in the P&L, and how to set the date range to view a year BEFORE vs AFTER closing.
Balance Sheet — the statement
The tour ran it. The tree is the accounting equation: ASSETS = LIABILITIES + EQUITY. Assets roll up (cash / bank, receivables, stock, fixed assets), Liabilities (payables, loans, accruals), Equity (contributed capital + retained earnings). Current-period earnings roll into equity so the sheet balances as of the date. Rows expand to accounts and drill to the GL.
Balance Sheet — the columns
Each column splits three ways — ASSET | LIABILITY | EQUITY — and every row fills only its own side, so the whole statement lines up under the equation at a glance. With comparison on you instead see the as-of value against the compare-to value; with several branches, a set per branch plus a Total. There's no Net column — a balance sheet is a position, not a flow.
Trial Balance — the proof
The tour ran it. Every account appears with its movement, grouped into the chart hierarchy. The trial balance is the arithmetic PROOF the double-entry books are consistent: total debits must equal total credits. If the bottom line is off, something is wrong at the source — fix it before you trust the P&L or Balance Sheet built on top.
Trial Balance — the four columns
This is a WORKING trial balance: each account (per branch) splits into four sub-columns — OPENING | PERIOD Dr | PERIOD Cr | CLOSING. Opening and Closing show the signed balance with an explicit Dr / Cr label; Period Dr and Period Cr show the gross movement on each side (per-currency chips + local total). So one row tells you where an account started, what moved through it, and where it ended.
Cash Flow — the statement
The tour ran it. The direct-method cash flow classifies every movement into OPERATING (day-to-day trading), INVESTING (buying / selling assets), and FINANCING (capital, loans), reconciling opening cash to closing cash for the period. It answers the question the P&L can't: "we booked a profit — so where did the cash actually go?"
Cash Flow — the columns
Each column splits into INFLOW | OUTFLOW — money in (green) vs money out (red) — for every classified line, so you see the gross movement both ways, not just a net. Line items drill to the underlying transactions behind them (a filtered GL view).
FX Revaluation Schedule
A period-end working — its own From / To dates, auto-loaded, grouped by period-end date. Each group lists every FX-revaluation entry (transaction, the DR / CR accounts, amount, currency, and whether it's a Gain or a Loss) with per-period Gain / Loss / Net totals. It's the evidence behind the unrealised-FX journal posted at each close (auto-reversed the next day) — review it before the period is sealed.
Year-End Closing Journal
The year-end working — its own From-FY / To-FY range, auto-loaded, grouped by fiscal year. Each year lists the closing entries that zero the P&L (revenue and expense) accounts into Retained Earnings: the DR / CR accounts, amounts (with currency + rate), and the Net to Retained Earnings (positive = net income, negative = net loss). A transparent, line-by-line view of exactly what the annual close does to the books.
Settings
Settings — overview
Settings is a whole SECTION, not one page — around two dozen configuration PANELS grouped by module (System · Finance · Orders · HR · Logistics), each a page in its own right with its OWN help topic and tour (look for it in the help menu, e.g. "Settings · Currencies"). This overview covers how the section is navigated; the individual panels are documented separately. You only see panels for modules you can access, and you can VIEW a panel without ADMIN on its module (it shows read-only).
Finding a panel — the search box
The search box sits in the page header (top right) and works whether the sidebar is folded or expanded. Type what you're LOOKING FOR, not what the panel is called — everyday words like tax, logo, smtp, permissions, backup, shifts, holidays, commission all land on the right panel, because every panel carries a vocabulary of its real functions alongside its name, description, module and sub-tabs. A dropdown lists the matches with each panel's icon, description and module; click one or press Enter for the first; Esc, the ×, or clicking elsewhere closes it. Searching never moves you — the open panel stays put until you pick a result.
The panels & their modules
One button per panel. The coloured chip on the right is its MODULE — SYS (system) · FIN (finance) · ORD (orders) · HR · LOG (logistics), or MIX for a panel that spans several. Sort the list by Name or by Module (the two headers above it). You only see a panel if you have access to its module; hover any button for a one-line description of what it configures.
System & Finance panels
SYSTEM: Company Profile (branding on printouts) · Branches (offices that scope user access) · Countries · System / Dynamic Action Settings (notification + request workflows) · Access Rights (the permission matrix — assign module rights to job titles) · Retention & Prune · AI Assistant · Dashboard Metrics. FINANCE: Currencies & Rates · Cargo & Expenses (types + expense categories bills draw on) · Accounts Relations (maps business functions to GL accounts) · Service Fee Rules · Closed Periods (lock accounting months so nothing posts into them). Each has its own tour.
Orders, Logistics & HR panels
ORDERS / LOGISTICS: Lookup Values (the coloured classifications — Category / Sub-Category / Type — used across products, customers, vendors) · HS Codes (customs commodity codes) · Warehouses (storage locations tied to branches) · Shipment Documents (the B/L, EUR.1, C/O … catalog). HR (the payroll-setup backbone): Organization Structure · Pay Components (payslip line types) · Guideline Matrix (min/max pay bounds per title+grade) · Benefit Units Management · Jurisdictions (tax + SI per branch) · Pay Schedules. These drive slip generation on the Payroll page — and each has its own tour.
Settings · Accounts Relations
Accounts Relations (Settings → Finance) is the wiring between the business and the ledger: it maps each SYSTEM FUNCTION — Sales Revenue, COGS, Accounts Receivable, VAT, payroll cost and so on — to a specific chart-of-accounts entry. Those mappings are what let the app post journal entries AUTOMATICALLY: when an order is invoiced, a bill posted, or a payroll run committed, the engine looks up the right account here. It's SEED-CANONICAL — the function list is fixed and read-only at runtime — so this panel is a reference view of how your books are plumbed, not a place you edit day to day.
What this panel drives
Every automatic journal in the system resolves its accounts THROUGH this map. Sales, purchases, expenses, payroll — each posts to whichever account a function points at. Get the mapping right and the ledger self-maintains; that's why it's treated as canonical plumbing and changed only via a seed + migration, not a runtime button.
Mapping progress
The bar shows how many functions have an account assigned (e.g. 24 / 26). A fully-mapped set turns the bar green; any unmapped function is a gap where an automatic posting would have nowhere to land, so it doubles as an at-a-glance completeness check on your accounting setup.
The mapping table
One row per function: a status dot (green tick = mapped, amber ring = not yet), the function name, and the account number + name it resolves to. Unmapped rows are tinted so they stand out. The account number is a LINK — click it to jump straight to that account's own ledger (its running transactions), so you can see exactly what has posted through that mapping.
Settings · Closed Periods
Closed Periods (Settings → Finance) is where accounting months are LOCKED. Once a period is closed, none of the posting doc types — shipping bills, general bills, payments, treasury entries, journal entries, and payroll — will accept a new post or a reversal dated inside it, so your reported figures for that month can't shift after the fact. Finance EDIT can view; Finance ADMIN closes a period (through a guided wizard); reopening a closed period requires System ADMIN and is itself audit-logged.
The panel & the auditor print
The header counts how many periods are closed and offers Print Schedule — a clean auditor deliverable listing every locked period with its date range, who closed it, when, and the note. This is the record you hand an auditor to show which months are sealed.
What a lock actually does
A closed period is a hard gate on the ledger: bills, payments, treasury, journals and payroll all refuse to post — or revert — anything dated inside a locked range. It's the mechanism that makes a reported month final.
The Closing Schedule
Sets WHEN each period becomes eligible to close (Finance ADMIN). Frequency can be Standard (each calendar month-end), Monthly (a shifted day-N), Quarterly, or Mid-year — and for the shifted modes you pick the closing day (1–28) of the period's last month. It's a UNIVERSAL gate with no admin bypass: to close earlier, you change the schedule (itself audited). The preview line spells out when the current sample period becomes eligible.
The Fiscal Year boundary
System-ADMIN only: which month the fiscal year STARTS in. That decides where the year ends — and the close of the ending month becomes the YEAR-END close (it posts the year-end journals and seals the year). Changing it re-bases every "This Fiscal Year" report across the app (dashboard, financial statements, allocations) and refreshes all logged-in users automatically.
The Closing Period Wizard
The server decides which period is next due (the earliest elapsed month with activity) — the operator never picks. The wizard is a 5-step flow that revalues FX, runs the year-end close when the period is the fiscal year's last month, sweeps up drafts, and finally applies the lock. You can open it anytime to INSPECT exposure, drafts, and balances; only the final Lock step commits, and only when the period is actually due.
The closed-periods table
One row per locked period: the period label, year, month, the exact locked date range, when it was closed and by whom, and the audit note. For a System ADMIN each row also carries Reopen — a guarded, audited action that unlocks the month again (and, for a fiscal-year-end, un-posts its year-end journals and merges the sealed year back).
Settings · Currencies & Rates
The Currencies & Rates panel (Settings → Finance) is the master list of currencies every dropdown in the system pulls from — orders, products, bills, transactions all read their rate here. It's SEED-CANONICAL: the ~140 world currencies are fixed, so you don't add or remove them, but a Finance ADMIN edits each one's exchange rate, display colour, and active flag, and picks the ONE local currency. Rates can be pulled live from the internet.
Update rates from the internet
Fetches live exchange rates from an online source (Finance ADMIN). It doesn't apply them blindly — a preview panel lists every fetched rate showing what changed, and you click Apply All (or Dismiss) after reviewing. Every rate is expressed against your local currency.
The currency table
One row per currency: a colour swatch + the code in its own colour, then code · name · country · the exchange rate (the local currency shows 1.000000 in green) · the LOCAL marker or a Set-Local button · an Active tick · Edit. The colour is what tints that currency everywhere it appears in the app.
Local currency & per-row actions
Exactly ONE currency is LOCAL — the base every rate and every report is measured in. "Set Local" switches it (only while no transactions reference a currency yet). Edit opens the record; there is no delete — historic transactions reference currencies, so retiring one is a seed + migration job, not a button.
The edit form
The tour opened a currency's edit form. Code / country / name are LOCKED (seed-canonical) and greyed out; a Finance ADMIN edits the rest. The next steps walk each editable field.
Exchange Rate
How many of your LOCAL currency equal one of this currency. Everything foreign is measured against it, and it's what auto-fills when someone picks this currency on an order or bill. "Update Rates from Internet" on the toolbar sets these in bulk; here you fine-tune one.
Active & Local
Active decides whether the currency shows in dropdowns at all — your plan CAPS how many can be active, so you switch on just the ones you trade in. Local marks the ONE base currency (always active, rate 1); only one currency can hold it, and it can only change before transactions exist.
Display Colour
The colour this currency is tinted in EVERYWHERE it appears — amount chips, ledger, reports. Pick it with the swatch or type a hex; the live preview shows the badge. It's the single source of truth for the currency's colour across the app.
Save
Save writes the change and every currency dropdown, rate lookup, and colour badge across the app picks it up immediately. Cancel discards it.
Settings · Service Fee Rules
Service Fee Rules (Settings → Finance) are the tiers that drive your commission: when a new order is created, the app reads these rules to AUTO-CALCULATE its service fee. Rules are grouped by cargo type and applied in priority order, and each rule is a simple formula — a percentage of the order value with a minimum floor. Finance ADMIN adds and edits rules; delete is System-admin only.
Add a rule
Add Rule (Finance ADMIN) opens a blank fee-rule form. A new rule takes effect on the NEXT order created for its cargo type — the order module reads these tiers live, so there's nothing to publish.
How the tiers work
The rule that applies is chosen by cargo type, then by PRIORITY (lowest number checked first), then by the order value it kicks in at. Once a rule matches, the fee is the formula: Fee = max(order value × Fee %, Min Fee) — so the percentage applies, but never below the floor.
The tiers, grouped by cargo type
Each card is one cargo type; inside it the tiers are laid out in priority order. Every tier shows its priority badge, description, a bar marking the order-value threshold it starts at, the Fee %, and the Min Fee (in its currency). It's a visual read of the whole fee ladder. On each tier a Finance ADMIN gets Edit, and a System ADMIN also gets Delete.
The rule form
The tour opened a fee rule's form. It captures what the tier is, which cargo it applies to, when it's checked, and the fee maths. The next steps walk each field.
Description
A short label for the tier — e.g. "Small orders" or "Bulk freight". It's what you (and the report) read to tell tiers apart; it doesn't affect the calculation.
Cargo Type
Which cargo this tier applies to. Leave it "All Types" for a catch-all rule, or pick a specific cargo so this ladder only governs that kind of shipment — that's what groups the tiers into the cards you saw.
Priority
The order rules are checked in, LOWEST first. When several tiers could match an order, priority breaks the tie — so put your most specific / narrowest tiers first and your catch-all last.
The fee maths
Three fields together define the charge: Min Order Value (the threshold the tier starts applying at), Fee % (the percentage of order value taken), and Min Fee (the floor). The engine charges max(order value × Fee %, Min Fee) — the percentage, but never less than the floor.
Currency
The currency the Min Order Value and Min Fee are expressed in. It defaults to your local currency; set it to match how you quote the threshold and floor for this tier.
Effective window
Optional From / To dates that bound when the rule is live. Leave From blank for "always active" and To blank for "ongoing" — use them to schedule a rate change or retire a tier without deleting it.
Save
Save Rule writes the tier; Cancel discards it. The order module picks it up immediately, so the next order for that cargo type is priced by the updated ladder.
Settings · Access Rights
Access Rights (Settings → HR) is the authorization matrix — the single place that decides WHO CAN DO WHAT. Permissions are granted to JOB TITLES, not to individuals: an employee inherits whatever their title is allowed, so onboarding someone is really just giving them the right title. The panel has two views — the Authorization Matrix (grant / revoke per title) and the Permissions Catalog (the module + permission building blocks the matrix is made of). HR EDIT can view; HR ADMIN edits; delete is System-admin only.
The two views
A switcher toggles between the Authorization Matrix (the grant grid) and the Permissions Catalog (the master list of module + permission pairs). Report Center prints / exports whichever view you're on, and reload refetches. The tour walks both views in turn.
The Authorization Matrix
A cross-grid of every active job title (rows) against every permission (columns), grouped by module — Orders, Finance, HR, Logistics, System and the counterparty modules. A tick means that title holds that permission. The title column and the header stay pinned as you scroll, so you never lose your place in a wide grid; hover a module header for what it covers.
Editing & saving grants
Ticking or unticking a box doesn't hit the server immediately — edits collect as PENDING (a count and a row highlight show which titles changed), so you make a batch of changes and then click Save once. Save applies only the titles that genuinely changed, and the employees under those titles are notified via the Action Center. Discard throws the pending edits away.
The Permissions Catalog
The master list of module + permission pairs — the building blocks the matrix is made of (e.g. FIN · VIEW, ORD · EDIT). Each row shows how many titles currently use it; a permission that's in use can't be deleted until it's removed from those titles first. Hover a module chip for its meaning.
Add a permission
The add row (HR ADMIN) creates a new module + permission pair — type or pick a module code and a permission code. Once added, it becomes a new column available to grant in the Authorization Matrix.
Edit a permission
The tour opened a catalog entry's edit form — you can rename its module or permission code. Because grants reference this entry, editing it re-labels that column everywhere it's used across the matrix. Save writes it; Cancel discards.
Settings · Organization Structure
Organization Structure (Settings → HR) is the backbone the whole HR / payroll side is built on. It's four tightly-related catalogs under one panel, reached by the chips at the top: Job Families (the top-level groupings), Job Titles (positions, each inside a family), Grades (the seniority / pay levels), and Title ↔ Grade (which grades each title is allowed to hold). Together they define every employee's place in the hierarchy — and they feed Access Rights, the Guideline Matrix, and the Employee form's grade picker.
The four catalogs
The chips switch between Job Families, Job Titles, Grades, and Title ↔ Grade. They build on each other left-to-right: families contain titles, grades set the pay ladder, and the last chip maps the two together. The tour walks each in turn.
Job Families
The top-level groupings — e.g. Finance, Sales, Operations, HR. Each is just a code + name (and an active flag), and it's the PARENT of Job Titles, so it's the first thing you set up. Add / Edit / Delete from the toolbar; the code locks once created so references stay stable.
Job Titles
The actual positions (e.g. Finance Manager, Sales Rep), each belonging to one family. A title is what carries an employee's ACCESS RIGHTS (via the Authorization Matrix) and what the Title ↔ Grade chip pairs with grades. Add a title by picking its family, then a code + name.
Grades
The seniority / pay levels — G1 (entry) up through the senior grades — where the LEVEL number sets the ordering. Grades drive the Title ↔ Grade mapping and the Guideline Matrix bounds (the min / max for each pay component per title + grade), so they're the rung an employee's pay is anchored to.
Title ↔ Grade
The mapping that says which grades each title is allowed to hold (e.g. Finance Manager → grades 4–7), with ONE marked as the default. This is what constrains the Employee form's grade picker and scopes the Guideline Matrix. Tick the Default box to set a title's default grade; add a mapping from the row at the bottom.
Settings · Shipment Documents
Shipment Documents (Settings → Logistics) is the catalog of every shipping-document TYPE your shipments can carry — bills of lading, certificates of origin (EUR.1, Form A), SGS / inspection certificates, letters of credit, photos, customs declarations and more. It drives the document picker in the Shipments Docs drill on the Shipped Orders page: only ACTIVE types show up there. It ships pre-seeded with ~74 standard types across ten categories; a Logistics ADMIN activates the ones you use and can add custom types, and delete is System-admin only.
The category rail
Down the left: the ten document categories (Commercial, Transport, Origin, Inspection, Treatment, Customs, Financial, Photos, Logistics, Other), each showing an active / total count. "All" gives the overview; picking a category jumps to its list.
The overview
The default "All" view — one card per category with its active / total count and a few of its active types, so you can see at a glance where your document coverage is set up and where it's empty. Click a card (or a rail item) to manage that category.
A category's types
Picking a category lists its document types. Each has a one-click Active toggle (the most common action — turn a type on to make it available to uploaders), a star marking the recommended set, its short-label chip, and its name. Click a row to expand its code, display order, and required fields.
A document type
Each row is one type. The power button flips it Active / Inactive (active = it appears in the upload picker); the star flags whether it's in the recommended preset; expanding a row reveals its code, display order, and which fields (doc number, dates, issuer) it asks for. Edit opens the drawer; Delete (System ADMIN) is refused if any uploaded file already uses the type.
The add / edit drawer
The tour opened a type's drawer — it slides in from the right without dimming the list. It captures the code, short label, full name, category, description, display order, the required-field flags, and the active status. The next steps cover the two parts that matter most.
Required fields on upload
This block decides what the uploader is PROMPTED for when they attach a file of this type: a document number, an issue date, an expiry date (which drives the expiry badges in the drill), and an issuer. Tick only what this document genuinely carries, so uploaders aren't asked for fields that don't apply.
Save
Save writes the type (Cancel discards). A new or newly-activated type is immediately available in the Shipments Docs picker; the code is immutable once created, since uploaded files reference it.
Settings · Warehouses
Warehouses (Settings → Logistics) are your storage and distribution locations — every order that receives or ships goods moves them through a warehouse, and stock on hand is tracked per warehouse. Each warehouse belongs to a HOME branch and can be scoped to which branches' orders may use it, so a location only appears where it should. System / Logistics ADMIN adds and edits; delete is System-admin only.
The warehouse table
One row per warehouse: id, a colour swatch, name (in its own colour), its home branch, the allowed-branches scope, country / province / city, and contact details — plus Edit (and Delete for System-admins). Sort any column; search filters live.
The warehouse form
The tour opened a warehouse's form (Edit a row, or Add Warehouse for a new one). It captures the name, home branch, colour, location, contacts, and which branches may use it. The next steps walk each part.
Warehouse name
How the warehouse is labelled everywhere — the picker on receive / ship movements, stock reports, order stamps. Required.
Home branch
The branch the warehouse primarily belongs to (required). It's ALWAYS allowed to use this warehouse — even in the specific-scope mode below, the home branch is mandatory and can't be unticked.
Display colour
The warehouse's tag colour, used wherever it appears (badges, stock columns) so locations are easy to tell apart. Pick with the swatch or type a hex; the chip previews it live.
Location
The address as a cascade — country → province → city (each narrows the next) — plus a map location and free-text address. It's where the warehouse physically sits, used on documents and geographic grouping.
Allowed branches
Which branches' orders may draw on this warehouse. Tick "All Branches" for any branch, or pick a specific set — the home branch stays mandatory. In specific mode the warehouse only offers itself to orders whose branch is in the list.
Save
Save writes the warehouse (Cancel discards). It's picked up immediately by every warehouse picker and the stock views.
Settings · Benefit Units Management
Benefit Units Management (Settings → HR / Payroll / Finance) holds four supporting catalogs the Guideline Matrix and pay components draw on: Benefit Units, Percentage Bases, Fixed Amount Bases, and Tiers. The first three are seed-canonical (read-only — the slip generator depends on their codes); Tiers is editable.
The four catalogs
The chips switch between Benefit Units, Percentage Bases, Fixed Amount Bases, and Tiers. Together they define the UNITS a component's value is measured in and the BASES that percentage / fixed pay rules multiply against. The tour walks each.
Benefit Units
The unit catalog for info-kind pay components — days, money, percentage, text, bool. A component picks a unit so its value is interpreted correctly on a slip (annual leave in days, a medical plan in text). Seed-canonical — read-only.
Percentage Bases
The monetary values that PERCENTAGE rules in the Guideline Matrix multiply against — base salary, gross earnings, archived-orders value, service-fee revenue. "5% × orders value" gets its "orders value" from a basis here. Seed-canonical — read-only.
Fixed Amount Bases
The count-style values that FIXED-AMOUNT rules multiply against — order counts, per-employee or branch-scope. "$25 × own-orders count" gets its count from a basis here. Seed-canonical — read-only.
Tiers
Tier groups and their ranked tiers — the curated picker values for text info components (e.g. Medical Plan → Bronze / Silver / Gold / Executive). This is the editable catalog: add a group, then add its tiers, so admins control exactly what employees can be assigned.
Settings · Cargo & Expenses
Cargo & Expenses (Settings → Finance + Orders) holds the building blocks bills draw on: the Shipping and General expense catalogs (categories → expense types) and the Cargo Types with their cost-allocation weights. The expense tabs are Finance-only; Cargo Types is also reachable by Orders users.
The three tabs
Shipping Expenses, General Expenses, and Cargo Types. Shipping and General are Finance-only category → expense catalogs; Cargo Types (also open to Orders) defines the weights that split bill costs across a shipment. The tour walks Shipping, then Cargo Types.
Expense categories
The left panel lists the categories for this tab (e.g. freight, handling). Add / edit / delete them inline; click one to load its expenses on the right. Categories group the expense types so bills can pick from a tidy list.
Expenses in a category
The right panel lists the expense types inside the selected category — each with a name, description, active flag, and (for Shipping) a surcharge marker. These are exactly the lines a bill can add. Add and edit them inline; a category must be selected first.
Cargo Types
Each cargo type carries a colour and two allocation weights — CBM % (volume) and GW % (weight) — that MUST sum to 100%. When a bill's cost is distributed across a shipment's cargo, these weights decide the split. Finance ADMIN edits the weights; Orders ADMIN can add a name-only type (weights default to 50/50 for Finance to refine).
Settings · Dashboard Metrics
Dashboard Metrics (Settings → shared across modules) configures the alert cards on the Dashboard — their thresholds, colours, and optional per-branch overrides. The metrics themselves come from a fixed registry (their labels, severity, and data type are read-only); you tune WHEN and HOW they alert. Each metric is gated by its own module.
The metric tables
Metrics are grouped by module (Orders, Finance, HR, Logistics, System). Each row shows its colour, label, description, data type, and severity (info / warning / critical) — those last three are fixed by the registry. The columns you CAN edit are inline: the colour swatch + hex, the alert threshold (for alert-type metrics), and a per-branch override so one branch can trip at a different number than the rest. Changes save on the spot and propagate to the Dashboard.
Settings · Dynamic Action Settings
Dynamic Action Settings (Settings → shared) is where admins create custom REQUEST TYPES — the things users can raise from My Requests → New Request (expense requests, access requests, whatever your org needs). Each context defines who can submit it, who handles it, and whether it needs approval. System ADMIN creates and deletes contexts; a module ADMIN edits the workflow fields of their contexts.
What a dynamic context is
An admin-defined request type. You give it a code + display name and a backing table; the app materialises the table automatically. It then appears in the New Request picker. Once any user submits one, its structural fields lock so live data can't be corrupted.
The contexts table
One row per request type: code, display name, the notification channel it routes through, which modules can submit it, its assignee, whether it needs approval, active, and whether it's in use (locked). Click an editable row to open its drawer.
The context drawer
The tour opened a context. It captures identity (code / name / notification channel), who can submit it, who handles it, and its behaviour. The next steps cover the two workflow decisions.
Who can submit
The module gate. Leave it "All Modules" to let every authenticated user raise this request, or pick specific modules so only users holding one of those can submit — useful for keeping a finance-only or HR-only request type out of everyone else's picker.
Who handles this?
The assignee — the employee who receives the request in their Action Center inbox and by email. Filter by branch / department to find them. With no assignee it falls back to the channel's from-address; the toggles below add approval, manager CC, and requester visibility.
Save
Save writes the context (Create for a new one). It's live in the New Request picker for the modules you allowed. Cancel discards.
Settings · Guideline Matrix
The Guideline Matrix (Settings → HR / Payroll / Finance) sets the min / max BOUNDS for each pay component per Title + Grade pairing — the policy guidance the Employee form and pay-line editor use as defaults and sanity limits. It covers allowances, commissions, and info perks; base salary, tax, SI, overtime and advances are excluded by design (they're computed elsewhere). EDIT to view, ADMIN to edit.
What the matrix guides
For each (Title × Grade) pair it stores a from–to range per eligible component. The slip generator no longer reads it directly — instead the Employee form and pay-line editor use these as the defaults and the bounds they validate against, so pay stays within policy for a person's title and grade.
The three views
By Title-Grade (one row per pairing, click Configure to set all its components at once), Matrix (a grid of pairings × components), and Flat List (every mapping as a searchable table). They're three lenses on the same data — the tour uses the By Title-Grade view.
By Title-Grade
One row per Title + Grade pairing (drawn from the Title ↔ Grade tab), showing how many components are mapped and a chip per mapping with its range. Configure opens a single form to set every eligible component's bounds for that pairing in one go.
The Configure editor
The tour opened the bulk editor for a pairing. Tick a component to enable it, then set its range — a numeric from–to (with currency) for pay lines, or a tier from–to for text info perks. It's split into pay-line and info sections; Save writes all the enabled rows and removes any you unticked.
Settings · HS Codes
HS Codes (Settings → shared by Orders + Logistics) is the Harmonized System commodity catalog — the international codes that classify goods for customs and packing lists. It's a lazy hierarchical tree: 21 sections → chapters → the heading / sub-heading codes, loaded on demand so a multi-thousand-row catalog stays fast. ORD or LOG can view; a module ADMIN adds / edits; delete is System-admin only.
The section tree
Twenty-one sections; expand one to lazily fetch just its codes, then its chapters, then the heading / sub-heading codes underneath. Each row shows the dotted code, its description, and a level pill (chapter / heading / sub-heading). Click any code to edit it; a search of 2+ characters overlays a flat match list instead.
The guided Add builder
The tour opened the guided Add form. Rather than typing a raw code, you pick what you're adding and the parents, and the code is ASSEMBLED for you — chapter / section / level are auto-derived so you can't build a structurally invalid code.
Assemble the code
Pick the level (chapter / heading / sub-heading) and its parent(s), then type just the last two digits and a description. The preview shows the full dotted code it builds plus the section and level it lands in — all derived from your picks.
Add
Add writes the code into its section; if that section is expanded it refreshes in place. The code becomes available immediately in the HS-code pickers on products and packing lists.
Settings · Jurisdictions
A jurisdiction is the full payroll rulebook for a place: its currency, tax engine (progressive brackets, flat rate, or lookup table), social insurance, holiday calendar, AND — in the expandable row — its annual-leave and sick-leave entitlement, its attendance penalty scale, and whether overtime is daily or weekly. The slip generator and the leave-approval checkpoint both read these. EDIT to view, ADMIN to edit; the main jurisdiction's delete needs System ADMIN.
What a jurisdiction owns
Each row is a self-contained regime: currency, tax method + modifiers, SI, holidays, annual + sick leave entitlement, and the attendance penalty scale. The slip generator does the cross-currency dance — tax / SI numbers are in the jurisdiction's currency; the slip line lands in the employee's salary currency. Leave and penalties are in fractions of a day, so they carry no currency and scale with any salary.
The jurisdictions table
One row per jurisdiction: code, name, country, currency, tax method, and the slip-calc bases. Click the row's arrow to EXPAND its nested editors — tax, SI, holidays, Annual Leave, Sick Leave, and Attendance Penalties — which live inline. Click Edit to open the header drawer, or the printer icon for the dossier.
The jurisdiction drawer
The header form — identity, currency, tax method, and modifiers (the brackets / SI / leave / penalties themselves are edited in the expandable row sections). The next steps cover the header fields that changed recently.
Country & currency
Pick the country and the currency auto-fills from that country's primary currency (override allowed). Everything numeric denominated in tax/SI is in this currency; the slip generator converts through the local currency when it differs from the employee's salary currency.
Tax-free Threshold (was "Personal Allowance")
The first slice of income that is NOT taxed — subtracted from the taxable base before the tax method runs, in the jurisdiction's currency. It pays the employee NOTHING; it only reduces what's taxable. Renamed from "Personal Allowance" because everywhere else in this app an "allowance" is money paid TO the employee — the opposite direction.
Overtime Basis — Daily or Weekly
Daily (the default, Gulf/Egypt) = overtime is hours past the pay schedule's daily threshold. Weekly (US / FLSA) = overtime is hours past the WEEK's threshold, and that threshold DERIVES automatically as the schedule's working-days × its daily threshold (e.g. 5 × 8 = 40). You don't type a weekly number; switching this changes how every slip in the jurisdiction computes OT.
Annual Leave (expand the row)
Two parts. The POLICY (one per year) sets accrual — upfront (full allowance from Jan 1) or monthly (one twelfth per month) — plus the carry-over cap. The ALLOWANCE RULES decide HOW MANY days, as a condition table: each rule bounds experience / age / service (blank = any, upper bound exclusive) and grants a day count (blank = unlimited); several rules are alternative cases and the highest priority wins. An employee with no data on an axis counts as 0, so a junior floor band catches them. No rules = the leave-approval checkpoint has nothing to grant and approves all-unpaid.
Sick Leave (expand the row)
Also two parts. The CAPS (yearly + lifetime) decide how many sick days. The PAY CURVE decides how much of each day is paid: bands on the sick DAY NUMBER within the year (day 1–15 → 100%, 16–30 → 75%, …) → a paid percent; base stays full and the unpaid share is deducted. The day number is read from the attendance sheet, so it can't drift on a re-run. A day no band covers pays in full.
Attendance Penalties (expand the row)
Late arrival / early leave / absence, escalating by occurrence — and the occurrence counter resets each calendar MONTH. Two axes: which occurrence (1st, 2nd…) and how late in minutes; the outcome is a fraction of a day's pay. The shift the lateness is measured against, and its grace minutes, live on the Pay Schedule (an employee can override them). A 0-day penalty is a warning tier — it counts as an occurrence but costs nothing. No scale = nothing docked.
Print the rule set (the printer icon)
Each row's printer icon produces the complete jurisdiction as one document — profile, tax, SI, holidays, annual + sick leave, and penalties — from one read, so it's a consistent snapshot. An unconfigured section states its consequence (e.g. "no allowance rules → annual leave approves ALL-UNPAID") rather than printing blank. This is the auditor / labour-inspector view; it's visible even to read-only users.
Save
Save writes the jurisdiction header and refreshes it everywhere. You then expand its row to fill in the tax / SI / leave / penalty tables. Cancel discards.
Record retention floors
Inside the COMPANY jurisdiction's expanded row sits the Record retention grid — the legal floors, one row per record kind (Financial, Payroll, HR, Operations, Logs). A floor is the minimum number of years that class of records must exist before the platform's retention engine may destroy it; the Retention & Prune page inherits these numbers. Each row's source is yours: FOLLOW COUNTRY tracks the country's floor from Settings → Countries, SET HERE pins a custom figure — which may be SHORTER than the country's (against your own legal advice, and worth a note in the Notes field) but never LONGER: the statute is the ceiling, and the input refuses to exceed it. Edit any rows, watch them gain an edited chip, then save the whole grid with the ONE Save button (it names how many rows it will write and stops at the first refusal); Refresh discards unsaved edits. Only the company jurisdiction carries floors — other jurisdictions are tax scopes, not retention scopes, and show none by design.
Settings · Lookup Values
Lookup Values (Settings → Orders + the counterparty modules) are the coloured CLASSIFICATIONS used across the app — Category, Sub-Category, Type, Units, Area, Class — for products, customers, vendors, and contractors. Each value carries a colour, description, and sort order. Access is per-section: Products by Orders, Customers by CUS, Vendors by VEN, Contractors by CON.
What lookup values are
The dropdown values (with colours) that classify records everywhere — a product's category, a customer's area, a vendor's class. Editing one here re-colours and re-labels it across every page via a bootstrap refresh.
The four entity tabs
Products, Customers, Vendors, Contractors — you only see the tabs whose module you can view. Each entity uses its own set of fields (Products has the paired Category / Sub-Category plus Product Type and Units; the others are flat Area / Class / Type).
Category → Sub-Category
Products use a PAIRED layout: pick a Category on the left and its Sub-Categories filter in on the right. Add / edit either inline — value, colour, description, sort. It's the only entity with this parent-child pairing; the rest are flat lists.
A flat value list
The flat sections (Product Type, Units, Area, Class …) are simple tables: each row is a value with a colour swatch, description, and sort order, edited inline with Add / Edit / Delete. Sort order controls how the values appear in their dropdown.
Settings · Pay Components
Pay Components (Settings → HR / Payroll / Finance) is the master catalog of every payslip LINE TYPE — base salary, allowances, overtime, tax, social insurance, employer contributions — plus info-only perks. It's the single source of truth the slip generator routes by. HR / PAY / FIN can VIEW; only System ADMIN can add / edit / delete.
Pay lines vs info perks
Every component is one of two kinds. A PAY LINE is money on the slip that hits the general ledger (earning / deduction / employer). An INFO PERK is display-only — a leave balance, a medical tier — with no GL impact. This one catalog holds both; the per-grade amounts live on the Pay Matrix.
The components table
One row per component: code, name, kind group, its payroll kind or value type, the DR / CR GL functions, the taxable and SI flags, and active. Click a row to edit it. Seed-canonical components (the ones the slip generator routes by) can be renamed and toggled but not deleted.
The component form
The tour opened a pay-line component. It captures what the line is, how it's categorised, and how it posts to the ledger. The next steps cover the two decisions that matter.
Kind group & payroll kind
Kind Group picks pay-line (money, hits GL) vs info (display-only). For a pay line, the Payroll Kind sub-categorises it — earning (base / allowance / overtime / commission), deduction (tax / SI / advance), or employer contribution — which is exactly what the slip generator routes by.
Save
Save writes the component. Its DR / CR functions map to accounts at post time (via Accounts Relations), and the taxable / SI flags decide whether it feeds the tax and SI calculations. Cancel discards.
Settings · Pay Schedules
Pay Schedules (Settings → HR / Payroll / Finance) bundle how and when people are paid: frequency, working days, the daily-rate method, the SHIFT (start / end / grace), the daily overtime threshold + multipliers, and whether tax / SI are withheld. Each employee picks a schedule on their profile; each pay period belongs to one; the slip generator runs per-schedule and consumes these rules to turn attendance into pay lines. EDIT to view, ADMIN to edit.
What a schedule drives
A schedule is the rulebook the slip generator follows for the employees on it — it runs parallel cohorts (monthly, bi-weekly, …) and converts HR's attendance inputs into overtime earnings and deductions using the numbers you set here.
The Shift — and what it's for
Shift Start / Shift End / Grace are real clock times (the daily hours figure above is only a DURATION). They're what "late" and "early leave" are measured against for the attendance PENALTY scale (Settings → Jurisdictions → Attendance Penalties). Grace decides whether a lateness counts at all; the penalty band still sees the real minutes. Leave blank for no fixed shift — then lateness never fires (absence penalties still do). An employee can override the shift on their own record (morning vs evening staff on one contract).
Overtime — daily here, weekly is a jurisdiction rule
This schedule sets the DAILY overtime threshold (hours past it in a day are OT) and the multipliers. WEEKLY overtime is a jurisdiction choice (Settings → Jurisdictions → Overtime Basis): when a jurisdiction turns it on, the weekly threshold DERIVES from this schedule — its working-days × this daily threshold — so there's no separate weekly number to enter here.
Unpaid leave — follows the Base Method
There's no unpaid-leave-method setting: it's derived from the Base Method. An hourly-paid contract already excludes unworked hours from the base, so unpaid leave is NOT deducted again (no double-dock); a fixed or percentage salary doesn't react to absence, so unpaid-leave days are deducted per day. Absence and unpaid holidays always deduct regardless. (Unpaid-holiday treatment moved to each holiday's own paid/unpaid flag on the jurisdiction's Holidays panel.)
The schedules table
One row per schedule: code, name, frequency, and its daily-rate method, plus active. Click a row to open its full rule set in the drawer.
The schedule drawer
The tour opened a schedule. It's a long form grouped into frequency, base calculation, rate, overtime, unpaid leave, and statutory withholding. The next steps spotlight the parts that most change pay.
Frequency & cycle
How often a period runs — Monthly, Bi-weekly, Weekly, or Custom — and the cycle mode: Continuous (back-to-back periods) or Rotational (work N units on, rest M off, for offshore / FIFO rosters). Period boundaries themselves come from the company Closing Schedule, not a per-schedule anchor day.
Overtime multipliers
One multiplier per premium context — overtime, weekend, holiday — applied PER HOUR at the day's rate, plus the daily OT threshold and an optional per-period cap (leave the cap empty or 0 for no cap). The generator turns the attendance sheet's hours into earning_overtime lines with these: hours past the OT threshold pay at the overtime multiplier; hours worked on a rest day or a public holiday pay at the weekend / holiday multiplier (a part-day earns a part premium). Hours SHORT of the standard day are docked at the plain rate.
Statutory withholding
Apply Tax and Apply SI decide whether the generator runs the tax-bracket and SI-rate calculations for this schedule's employees. Turn them OFF for freelancer / contractor schedules where the org doesn't withhold through payroll — no tax or SI lines are emitted.
Save
Save writes the schedule; the next pay run for its employees follows the updated rules. Cancel discards.
Settings · System Action Settings
System Action Settings (Settings → shared) manages the built-in notification CHANNELS — the six canonical SMTP centres (HR, Payroll, Finance, Operations, System, No-reply) that every automatic email routes through — and the system workflows that ride each one. SMTP / channel config is System-ADMIN only; the per-context workflow fields are editable by the alias's module ADMIN.
The channels table
One row per channel: its alias, the from-name / from-email, the SMTP host, active / default, and the "Routes For" cell listing every system context that sends through it. A green Send button fires a test email; clicking the alias (System ADMIN) opens the SMTP drawer; clicking a context in Routes For opens that context's drawer.
The SMTP channel drawer
The tour opened a channel's SMTP settings (System ADMIN). The alias is locked (seed-canonical); you set the from-name / from-email, host, port, user, password (write-only — leave blank to keep), and the TLS / SSL / active / default flags. This is purely email delivery.
A system context ("Who Handles This?")
The tour then opened a context that routes through the channel. Its identity is locked, but you set who handles it — the assignee who receives it in Action Center + by email — plus approval, manager-CC, visibility, and active. This is the workflow half, decoupled from SMTP so module admins can own it without touching mail config.
Settings · AI Assistant
AI Assistant (Settings → System) configures the in-app assistant: whether it's on, which provider and model power it, the encrypted API credentials, the $/token conversion rates, and the budget TIERS you assign to users. System VIEW can see it; System ADMIN edits. Per-person tier assignment happens on the Employee → User Access tab, not here.
The master switch
The big toggle turns the assistant on or off for the whole workspace. Off, it's hidden for everyone regardless of their tier; on, users who've been assigned a budget tier see it. Remember to Save after flipping it.
Provider & model
Pick the LLM provider and model — choosing a model auto-fills its prices below. The credentials block underneath adapts to the provider (an API key, or AWS / Azure / Vertex fields); secret fields are write-only and stored encrypted. A Test-connection button makes a real 1-token call to prove the credentials authenticate.
Conversion rates
Three numbers turn tokens into money: the price per million input tokens, per million output tokens (both auto-filled from the model, override for negotiated rates), and your app's average tokens per message. Together they drive the $ / message estimate shown on every budget tier.
Budget tiers
Named monthly buckets, stored in TOKENS, with the $ and message equivalents derived live from the rates above. Create the tiers here (Light / Standard / Power, say); then assign one to each employee on the Employees page → User Access tab. An employee with no tier doesn't see the assistant.
A tier
The tour opened a budget tier. It's just a name, a monthly token budget (with the live $ / message estimate), a sort order, and active. Save writes it; it becomes available to assign on the Employee User Access tab.
Settings · Branches
Branches (Settings → System) are your company's offices / locations, and they're central to the whole app: every user's access is SCOPED to their allowed branches, orders / bills / payments / stock are stamped with a branch, and each branch carries its own colour used to tag it everywhere. System ADMIN adds and edits them; delete is System-admin only.
The branch table
One row per branch: ID · a colour swatch · name (shown in its own colour) · company · country / province / city · contact · phone · email, plus the row actions (Edit, and Delete for System-admins). Sort any column; the search box filters live.
Add a branch
Add Branch (System ADMIN) opens the form for a new location. A new branch immediately becomes available in every branch picker across the app, and can then be granted to users in the Access Rights panel.
The branch form
The tour opened a branch's form (Edit on a row, or Add Branch for a new one). It captures the name, colour, address, and contacts. The next steps walk each part.
Name & company
The Branch Name (required) is how the branch is labelled everywhere — pickers, stamps on orders / bills / stock, reports. Company Name is the legal entity it trades as, shown on that branch's printouts.
Display colour
The branch's tag COLOUR — used everywhere the branch appears (badges, columns, charts) so you can tell branches apart at a glance. Pick it with the swatch or type a hex; the chip previews it live.
Location
The geographic address as a CASCADE — country → province → city (each narrows the next), plus a map location and a free-text address line. It sets where the branch physically is, used on documents and for geographic grouping.
Save
Save writes the branch (Cancel discards). The change propagates through every branch picker and colour map in the app; a brand-new branch can then be granted to users in Access Rights.
Settings · Company Profile
Company Profile (Settings → System) is your company's branding and contact details — the logo, names, address, and header style that appear on EVERY module header and every printout. It's a single record; System ADMIN edits it and the change propagates everywhere immediately.
The logo
Drop or click to upload the company logo. It's shown in the app header and on printouts; you can change or remove it. It uses the same attachment store as employee photos.
Name & slogan
The company name (required — shown everywhere), an optional secondary name (e.g. Arabic / Chinese), and a slogan / tagline. These are the words that head every document.
Address
The company address as a cascade — country → province → city — plus postal code and address lines. The country here also drives the active data-retention floor (via Settings → Countries).
Save & letterhead
Save writes the profile and every module header + printout picks it up right away. Letterhead prints a sample so you can check the branding. Reset reverts unsaved edits.
Settings · Countries
Countries (Settings → System) is the master country list that feeds the geo cascade (country → province → city) in Branch, Warehouse, and Company forms. Each country also carries a data-RETENTION floor, and one country is marked as the company home. System ADMIN adds and edits.
The country table
One row per country: id, name (the home country carries a HOME badge), ISO code, phone code, and its retention floor in years. The page is VIEW AND PRINT ONLY — the list comes from the world seed, and nothing here is edited by the workspace. Use the toolbar to search, sort, refresh, and print the list.
Retention floor & home country
The floor is the legal minimum number of years this country's records must exist before the platform's retention engine may destroy them — it feeds every follow-country row in Settings → Jurisdictions → Retention. Only the platform can move a floor (contact support if the statute changed). The HOME country is stamped once, when the workspace is provisioned — it decides which country's law governs your books and it never moves; a wrong one is a support case, not a settings edit.
Settings · Retention & Prune
Retention & Prune (Settings → System) is the data-retention surface: the prune engine's state (set by the platform), its run history, the per-table policy (a SOFT floor — archive — and a HARD floor — destroy — in years), and the backup catalog with per-archive download. System EDIT can view; System ADMIN edits the policy, runs reports, and downloads archives.
The prune engine's state
Three states — OFF: nothing is archived or deleted. REPORT: the engine works out exactly what it WOULD archive or delete and records it, touching nothing. ACT: it archives partitions past their soft floor and deletes archives past the legal floor, for real and permanently. The state is SET BY THE PLATFORM — TheOrder operates the retention engine as storage policy, and the standard state is ACT: aged records are archived to cold storage (still downloadable below) rather than kept in the live database. Your page shows the current state read-only; any change the platform makes is written to your audit log. Contact support if your business needs a different setting.
The run history
Every ACT pass keeps its own row forever — those changed data, so they are evidence. The REPORT is a single always-current row, rewritten each time it runs, because a report is recomputable and only the latest one answers anything. Each row shows what the pass archived, destroyed, pinned and kept. The engine runs once per fiscal year, at your company's own year turn — and a run that stopped at its per-run limit or failed does NOT count as done; the next daily pass continues it, and the Outcome column says so. Click a row to open the run's full report: the engine REFUSES rather than filters, so every month it declined to touch is listed with its stated reason — a live request still in progress, an open pay period, the legal floor. The routine verdicts (not old enough, the live catch-all, the two sealed tables) are counted rather than listed, and the counts plus the listed rows add up to every partition examined.
Run a report by hand
Run report now works out exactly what the engine would archive or delete and records it in the history — touching nothing, whatever it finds. Safe to press any time, whatever the engine's state, and the way to see what the next scheduled run will do before it happens. Acting is not a button here: the engine is operated by the platform, and real archiving and deletion happen on its yearly schedule.
Soft vs hard floors
Two thresholds per table. SOFT = archive at the global floor: the partition is written to storage, read back and checksum-verified, recorded, and only then dropped from the database — the record survives, so a retention obligation is still met. HARD = destroy: at the destroy age the archive itself is deleted, which cannot be undone — for every row. Data that reaches the destroy age never having been archived (old records at first enablement) is archived on that pass and destroyed on a later one, so nothing is ever destroyed that was not archived at least once. The two ages are gated both ways: the destroy age can never be BELOW the legal floor for the record kind (inherited from Settings → Jurisdictions → Retention), and the archive age can never EXCEED the destroy age or that floor — records leave the live database no later than the law's minimum retention.
The policy table
One row per partitioned table (or account prefix): its kind, its UNIT, and the soft and hard ages. The Unit column answers WHEN a slice becomes prunable — the engine itself passes once per fiscal year for every row, but what it can drop differs: a FISCAL YEAR table is sealed by the FY-end close (closing a year carves that year out of the live data; an unclosed year cannot be pruned), while a MONTH table seals on its own as the calendar rolls, no close involved. Click a row to edit its floors — or use SET ALL TO FLOOR to make every destroy age exactly its legal floor in one click (including lowering rows scheduled to keep records longer; archive ages above a new destroy age come down with it): records are then destroyed at the earliest moment the law allows, which keeps the database smallest. Below this sit the read-only Backups and Restore-log catalogs the engine populates.
The policy drawer
The tour opened a policy row. It shows the table and its record kind, then the two ages — and only ONE is yours: the ARCHIVE age, gated both ways (never past the record kind's legal floor, never past the destroy age). The DESTROY age is shown read-only as platform policy — it is moved only by the platform's own levers: the seed, the self-repair on opening the page, and Set all to floor. And if a legal floor is CHANGED after rows were set, opening this page as System ADMIN self-repairs them: ages out of bounds are pulled back in, listed in an amber bar, and written to the audit log — the engine was never going to break the law, but the numbers shown must be the schedule that runs.
Save
Save writes the policy. Nothing is archived or destroyed by saving — this only defines the floors, and whether the engine acts on them at all is the mode switch at the top of the page. Cancel discards.
Downloading an archive
Every archived partition in the Backup catalog can be downloaded as xlsx or pdf. The archive itself is stored once, raw and exact; the server converts it on the way out, and in the spreadsheet every cell arrives as exact text — a code like 0031 stays 0031, long numbers keep every digit, dates are not reinterpreted by Excel's locale. The pdf is a fixed, paginated document for reading rather than working with. System ADMIN only — an archive is the ONLY remaining copy of pruned records — and every download is written to the audit log. An archive whose row says DELETED was destroyed at the legal floor and cannot be downloaded by anyone: that is the point of the hard floor, not a failure.