01The scan bar: how everything connects
Everyone▶
The input at the top of the screen is always ready for a scan. Every item in the building has a QR label with an ID like:
- F4T-00123S (S = Stock): a product we hold in bulk (cables, connectors, sellable boxed units). Counted by quantity per location.
- F4T-00124A (A = Asset): an individual tracked unit with its own serial number (loaners, tools, test kit). Tracked one by one.
Scan with the Bluetooth scanner (it types the ID and presses Enter for you) or paste/type an ID and press Enter. What happens depends on which tab you're on: on Search it opens the item's details; on the Stock Control tab it feeds whichever mode is active (check-in, check-out, count or print). On touch devices, tap the input and use the Go button.
Supplier barcodes
Products can store the supplier's box barcode (EAN/UPC); add it in the item editor (scan straight into the field). After that, scanning a box at the top bar finds the product instantly: goods-in without typing.
02Home tab
Everyone▶
Staff land on Home after signing in. It gathers everything needing attention:
- Reorder alerts and subscriptions about to renew
- POs awaiting delivery
- Expense claims waiting for approval, and your own open claims
- Warranties running out in the next 60 days
- Recent audit activity (super admins)
Click a card to jump to the owning tab. You only see the cards your permissions allow.
03Search tab
Everyone▶
Purpose: find anything, see everything about it.
- The tab opens with a browsable listing by category. Type in the search box to filter by name, SKU, serial number or ID.
- Scan or click an item to open its detail view: summary of name, category, supplier, location(s), quantity or serial, assignee, warranty, and its recent history.
- Stock items show a per-location breakdown (e.g. 9 in Stock Room, 2 in Van). Asset items show their current status, location and who they're assigned to.
04Stock Control tab
Everyone▶
Purpose: the daily hands-on-stock operations. Pick a mode from the rail on the left, then scan items into it. The scan box routes to whichever mode is active.
Check In
Returns an item to stock. Scan the item; confirm. Assets have their assignee cleared and location reset to the office; stock items have quantity added back at the chosen location. Use it when kit comes back from a job or a loan is returned.
Check Out
Takes an item out. Scan it, choose who/where it's going (engineer, customer, van) and confirm. Assets record the assignee and new location; stock items deduct the quantity you enter. Checking out to a customer records which company holds the unit, and that's what feeds the customer loan portal. Everything you check out is written to the audit log under your name: no paperwork.
Count
Rolling stock-take. Choose a location, then scan (or enter counts for) what's actually on the shelf. The screen shows expected vs counted and lets you correct the system to match reality. Discrepancies are logged with your name and the reason.
Prints QR labels on the Brother label printer.
- Pick the media size loaded in the printer: 62 mm (default, large labels) or 29 mm (small).
- Either scan/enter a single ID and print, or print a range (ID from → ID to) for freshly created batches.
- Labels come out with the QR code, the F4T logo and the ID text.
05Quote tab
Everyone▶
Purpose: build customer quotations, send them for acceptance (with optional e-signature), and follow them through to invoicing.
Creating and building a quote
- Click New quote, pick the customer.
- Add lines: search the catalogue and add products, set quantities. Prices pre-fill from the product's sell price (or the customer's special price where one is set) and can be overridden per line.
- Each line has a supply source: from stock (we ship from the shelf) or online (we'll buy it in specifically for this job). This matters on acceptance, see below.
- Pick the purchaser (the contact who'll approve it) and the delivery address. Both are required before sending.
- Attach extra PDFs (spec sheets, T&Cs) or apply a template pack if your team has set them up.
Totals and VAT calculate automatically. A quote stays editable while it's a draft.
Sending, with or without eSign
Click Send. Two things to know:
- Stock-sourced lines are deducted from inventory at send time (you'll be warned if there's a shortage, but it won't block you).
- If you tick Require e-signature, the customer receives the quote through our e-signing provider and can sign it online. When they sign, the quote moves itself to Accepted automatically. If e-signing isn't set up on the server yet, the tick is a harmless marker and you progress the quote manually.
If the purchaser has an approval limit and the quote exceeds it, you'll get a warning so you can check with the customer; it won't stop the send.
Quote lifecycle
…or Disputed; a quote can be cancelled from draft/sent/accepted. Move it forward with the transition buttons on the quote; every step is stamped and logged. The PDF regenerates at each stage so the document always matches the current state.
What happens on Accept
When a quote becomes accepted, the system automatically creates draft purchase orders for every online-supply line: one PO per supplier, pre-filled with our buy prices. Lines whose product has no supplier set are flagged so someone can fix the product and regenerate. Stock admins pick these drafts up in the Procurement tab.
Deleting: your own draft/cancelled quotes can be deleted by anyone with quote access; deleting anything else is super-admin only.
Unpaid invoices
The Quote tab rail has Unpaid invoices: everything invoiced but not settled, with the outstanding total and days-out aging (amber past 14 days, red past 30). Mark quotes Settled as payments land; the bank-import reconcile view suggests the matches.
06Procurement tab
Stock admins+▶
Purpose: everything we buy (restocking, buy-to-order for quotes, internal kit, and subscriptions), plus getting the paperwork straight.
The five views
| View | What it shows |
|---|---|
| All purchase orders | Full list, searchable and filterable. |
| Awaiting receipt | Sent POs where goods haven't all arrived. |
| Reconcile | The paperwork dashboard; see below. |
| Subscriptions | Recurring purchases (hosting, SaaS) with renewals due in the next 14 days and a Renew now button that drafts the next period's PO. Auto-renew subscriptions renew themselves overnight. |
| Reorder alerts | Stock lines at or below their reorder threshold, with Create PO to draft a restock order in one click. |
Creating and sending a PO
Create from scratch, from a reorder alert, or let an accepted quote create resale drafts for you. Set the intent (what kind of purchase this is): stock (restocking, where receipts will add to stock levels), resale (tied to a quote), internal (our own kit), or subscription (recurring; set the period and next renewal date). Add lines, check the totals, then Send it to the supplier; a PO PDF is generated for emailing.
Receiving deliveries
When goods arrive, open the PO → Receive, enter quantities delivered per line (part-deliveries are fine). For stock-intent lines the received quantity is added to stock automatically at the line's delivery location. The PO flips to partial then received on its own as lines complete.
Invoices and payment
When the supplier's invoice arrives: Mark invoice received (records the date, and the payment due date from the supplier's terms). When it's paid: Mark paid, recording how (invoice / card / direct debit) and a payment reference. Paying is always a deliberate button press; nothing marks a PO paid automatically.
Reconcile: keeping the paperwork honest
The Reconcile view has five buckets:
| Bucket | Meaning |
|---|---|
| Awaiting payment | Goods or invoice in hand, not yet paid. |
| Paid · no evidence | Paid POs with no document attached. Keep this list at zero: drag in the receipt/invoice. |
| Evidence mismatch | An attached document whose amount, reference or date disagrees with the PO. Open it and fix whichever is wrong. |
| Overdue payment | Invoice received, due date passed. |
| Evidence inbox | Uploaded documents nobody has linked to a PO yet (e.g. an emailed receipt uploaded before the PO existed). |
Evidence = a PDF/photo of the invoice, receipt or email. Upload it on the PO (or into the inbox) and enter the total/reference/date shown on the document; the system scores how well it matches the PO and flags discrepancies for you.
- Sundry purchases: small card purchases for internal use (under £100 by default) don't require evidence to count as settled. There's an override toggle per PO for edge cases.
- Waiving evidence Super admins: when a document genuinely can't be obtained, a super admin can waive the requirement with a written reason. It's audited.
Supplier invoices & the three-way match
Open any PO and scroll to 06 · Supplier invoices. Record each invoice the supplier sends (their invoice number, the total including VAT, dates); one PO can carry several part-invoices.
The banner above the list shows the three-way match: what we ordered (the PO total) ↔ the received value (what actually arrived, valued at cost) ↔ what we've been invoiced so far. Each invoice shows:
- Matched: the PO is fully received and the total billed agrees with both other legs (within 0.5%). Nothing to do.
- Variance: something disagrees; the notes say what (e.g. “Receipt leg open” means goods haven't all arrived yet, which is normal for part-billing; an amount note means we're being billed more or less than we ordered). Chase it, then Re-check.
Recording or deleting an invoice automatically re-checks every other invoice on the same PO.
Bank statement import
In Reconcile → Bank import: click Import statement CSV and pick an export from the bank (most UK bank formats work; it needs a date column and either one amount column or paid-in/paid-out columns). Re-importing an overlapping statement is safe; lines you've already imported are skipped automatically.
For each unmatched payment line:
- Find match: the system suggests POs whose total is within 2% of the payment, scored higher when the supplier's name appears in the statement description and the date sits near the PO's payment window. Expense payouts are suggested too, tagged Expense payout. Click Link PO-… to confirm.
- Ignore: for lines that aren't supplier payments (bank fees, transfers). They move to the Ignored filter and can be unmatched back later.
Overnight auto-renew
Overnight, subscription POs flagged auto-renew whose renewal date has arrived are cloned into a fresh draft for the next period, and the old PO stops alerting. You'll find the new drafts in Procurement → All, noted “Auto-renewed from PO-…”. Nothing is sent or paid automatically; drafts still need a human.
07Expenses tab
Everyone▶
Purpose: get paid back when you've bought something for the company on your own card or with cash, or driven your own vehicle for work.
Submitting a claim
- Click + New claim.
- Pick the type:
- Purchase: enter the amount (including VAT), how you paid (personal card / cash), where you bought it, and attach the receipt (photo or PDF). Claims without receipts are much more likely to be rejected.
- Mileage: enter the miles driven; the screen shows the calculation (e.g. 48.6 miles × 45p = £21.87) and the amount is worked out automatically at the company rate. The rate in force when you submit is locked to your claim, so later rate changes never affect it.
- Say clearly what it was for; the approver reads exactly what you write.
- Submit. Your claim gets a reference like EXP-2026-0007.
Tracking and cancelling
| Status | Meaning |
|---|---|
| Awaiting approval | Submitted, not yet looked at. You can still Cancel it at this stage. |
| Approved, awaiting payout | Accepted; finance will pay it. |
| Reimbursed | Paid, with the payment reference shown. |
| Rejected | Not accepted; the reason is shown on the claim. Fix the problem (e.g. attach the receipt) and submit a fresh claim. |
Approving and paying out Super admins
Approvers see an Approval queue below their own claims, listing everyone's submissions with the receipt a click away:
- Approve or Reject… (a written reason is required and the claimant sees it). You can never approve your own claim; another approver has to.
- Once approved, Mark reimbursed… records the actual payout with a payment reference (bank ref or payroll run).
Every step is written to the audit log under the claim's reference.
Where reimbursements meet the bank statement Stock admins+
When the payout appears on the bank statement, the Procurement → Reconcile → Bank import screen will suggest the matching expense claim alongside PO candidates (tagged Expense payout), so the statement line gets tied to the claim with one click.
08Admin tab
Stock admins+▶
Everything here is stock-admin level unless marked otherwise, switched by the rail on the left.
Items
The catalogue. Create and edit products (name, SKU, category, supplier, buy/sell prices, whether it appears in the customer catalogue, and how it can be supplied) and asset units (serial number, location, warranty). This is also where you set a product's reorder level and refill quantity per location, which drive the Procurement reorder alerts. + New item opens the creation dialog; new items get the next free F4T ID automatically. Print the label from the Stock Control tab afterwards.
Reference data
Locations (Stock Room, Van 1, …) and product categories. Add here before you need them elsewhere; deleting a location in use is blocked.
Customers
Companies we supply: name, their sites/delivery addresses. Customer sites feed the quote delivery-address picker. Per-customer special pricing for specific products is set from the item/customer screens.
Contacts
People at those companies: phone, email, job title, who they report to, and their approval limit (used to warn on quotes above their authority). This is also where portal sign-in is managed per contact: enable password login, Microsoft sign-in, and/or magic links (one-shot emailed sign-in links you can generate here). A contact with no methods enabled cannot sign in at all.
Suppliers
Who we buy from: contact details, payment terms in days (drives the “payment due” date when you record an invoice), default payment method and currency for new POs.
Stats
Read-only dashboard: stock value, counts by category/location, quote and PO activity.
Audit log
Every change the system has ever recorded: who did what, to which item, when, with free-text search, filters by user/action/date, and CSV export. If a count looks wrong or kit has vanished, this is where you look. Nothing in the audit log can be edited or deleted from the app.
Users Super admins
Staff accounts: create users, set display name, role (user / stock_admin / super_admin), reset passwords, deactivate leavers. Two Microsoft-related settings per user:
- Microsoft ID: links the account to a specific Microsoft identity (fills itself in on their first Microsoft sign-in).
- Require Microsoft: turn on to forbid password login for that account entirely (recommended once someone has signed in via Microsoft successfully).
Beyond roles, you can grant or deny individual permissions per user, e.g. give a user the Procurement tab without making them a stock admin.
Templates
Reusable PDF packs (brochures, T&Cs) that can be attached to quotes. Requires the manage templates permission (stock admins have it).
Data I/O
CSV export of any main table (products, assets, stock levels, customers, audit log, …) for spreadsheets or bulk editing. Passwords and security fields are never included in CSV exports; for real backups use the Backups tab.
Cyber Essentials asset register downloads a CSV shaped for a CE assessor: every tracked unit with serial, owner, location, OS name/version, support and warranty dates, plus one fleet row per product/location of bulk stock. Fill OS fields in the item editor as you touch devices; the export is honest about gaps.
Backups Super admins
Admin → Backups produces full application snapshots: one archive with every table (quotes, POs, expenses, users, everything) plus all uploaded documents. Archives are encrypted when the server has a backup key configured, a nightly cron keeps them coming, and configured deployments push a copy off-box to SharePoint/OneDrive. Restore supports a dry run, per-table selection, and a typed confirmation before anything is replaced. Every backup and restore is audited.
Outbound email & the kill-switches Super admins
The system can email: magic sign-in links straight to contacts, quote/invoice PDFs to customers, expense decisions to claimants, a daily needs-attention digest to admins, and portal return requests to staff. All of it is OFF by default. Admin → Settings has two switches (Customer emails and Internal notification emails) and a mail log showing every attempted send (sent / dry-run / suppressed / failed). Nothing emails a customer until you flip the customer switch, and the config's MAIL_DRY_RUN adds a second layer during setup.
SMTP & eSign settings Super admins
Admin → Settings also holds the runtime service configuration:
- SMTP server: switch the mail transport from Microsoft Graph to a plain SMTP server and set host, port, security (STARTTLS / SSL / none), username, password and from-address. Use the Send test button to prove the connection.
- eSign (OpenSign): enable e-signing and set the API base URL, API key and webhook secret without touching the server's config file. Values saved here override config.php.
Passwords and API keys are write-only: once saved, the panel only shows whether one is set, never the value. Every settings change lands in the audit log (secrets are logged as “updated”, not their value).
09Customer loan portal
Admins set up▶
Contacts with a portal login can visit /portal/ to see the equipment on loan to their company and press Request return; staff get an email (if enabled) and a return_requested entry appears in the audit log.
Check-out records which customer holds a unit (pick the customer as assignee as usual); check-in clears it. Portal sign-in methods are managed per contact under Admin → Contacts.
10Install it on your phone
Everyone▶
The app is installable:
- Android / Chrome: menu → “Add to home screen”.
- iOS Safari: Share → “Add to Home Screen”.
Live data is never cached; a flaky signal falls back to the last good screen layout, not stale stock numbers.
11Quick answers
Everyone▶
“I scanned a label and nothing happened.”
Check which tab you're on; the scan goes to the active tab. On Search it shows details; on the Stock Control tab it feeds the active mode.
“It says insufficient stock.”
The system won't let a stock count go below zero. Check the per-location quantities on the Search tab; the stock may be recorded at a different location.
“Something's wrong with a stock number.”
Don't guess-fix it with check-in/out; use Stock Control → Count for that location so the correction is properly logged, or check the Audit log first to see what happened.
12Report a bug or request a feature
Everyone▶
Spotted something broken, missing, or confusing? Submit it here and it goes straight into the system's request list. Pick the type that fits:
- Bug: something is broken or behaving wrongly.
- Feature request: something the system should do but doesn't.
- Query: a question about how something works.
You'll see your own requests below (super admins see everyone's). A request is closed, with or without a note, by a super admin or by whoever submitted it.