Skip to content
All guides

Compliance & Security · Updated September 2, 2026

Compliance Documents & Calendar

Licences and permits with expiry dates on one screen, statutory filing deadlines on the other, and a nightly sweep that reminds the right people in your own timezone.


Two screens, one module

Compliance Documents tracks the papers a venue must hold: the liquor licence, the single business permit, the health certificate, the fire inspection. Compliance Calendar tracks the things that fall due on a date: a licence renewal, the monthly VAT return, an annual audit.

Both belong to the Compliance module, which the Enterprise plan includes. Reading either screen needs view_compliance or manage_compliance; adding, editing, filing and deleting need manage_compliance. Out of the box only the Admin role holds either grant, so a compliance officer or an auditor needs it added to their role. See Roles & Permissions.

Documents belong to the company; calendar rows can belong to a premises. A liquor licence is issued to a building, and the calendar knows which. Documents have no outlet field, so put the branch in the name or the description there.

This page covers both screens at a glance. For licences, the per-premises rules, the hospitality defaults and the reminder schedules, see Licences & the Compliance Calendar.

Everything on both screens hard-deletes when you delete it. That's unlike the stock ledger, where nothing is ever removed, so treat Delete here as the last resort and prefer revoked or waived when you want the record kept.

Documents

Add Document is two steps. First the details: a name, a type from a fixed list (License, Certification, Policy, Insurance, Tax Form, Work Permit, NDA, Contract, Safety Certificate, Background Check, Health Certificate, Training Record or Other), a description, the issuing authority, a reference number, the issued and expiry dates, and Alert Days Before, which defaults to 30. Press Save & Continue and the second step asks for the file: a PDF, PNG, JPEG or WebP up to 10 MB, dropped or picked. Uploads save immediately. Skip for now is allowed; the file can be attached or replaced later from Edit.

A document is always in one of five states:

StatusMeaning
validIn force
expiring soonInside its alert window, counted back from the expiry date
expiredPast its expiry date
pending reviewWaiting for someone to confirm it
revokedWithdrawn; it stops appearing in alerts

A document with no expiry date shows "No expiry" and never alerts; the sweep only looks at dated rows. That's right for a contract or a policy, and wrong for a licence, so give anything renewable its real date.

A row in pending review shows a Mark reviewed action, which sets it valid and records who reviewed it and when. Edit lets you set any status directly, including revoked. Delete is permanent; the dialog says so, and unlike stock there is no ledger underneath to reverse.

The five cards at the top and the alert banner are computed live against today's date, so between nightly sweeps the counts and the list still agree. When something is expired or expiring, the banner says how many of each and offers Show Expired; otherwise it says All Clear. The chips below filter by status, and the search box matches name, type and authority in the loaded rows. Rows sort by expiry date, soonest first, with undated documents last.

Calendar

An obligation has a name, a description, a category (Statutory Filing, License Renewal, Audit or Other), a frequency (Monthly, Quarterly, Every 6 months, Annual or One-time), a Premises (or Company-wide), a Next Due Date, an optional Due Day of the month for recurring ones, a reminder schedule typed as a list of lead times (30, 7, 0 by default), a jurisdiction (KE unless you say otherwise) and a reference number. Its status is pending, filed, overdue or waived.

Five cards summarise the list: total, pending, due soon (within seven days), overdue and filed. The chips below filter by status, a Premises filter sits beside them, the search box matches name and reference, and a filed row links to its evidence from the Evidence column.

Provision Kenya defaults seeds the licences a Kenyan venue has to keep current for one premises, plus the monthly VAT return for the business. Run it once per premises; repeats are skipped. The details, including why a licence seeded without a renewal month is dated 31 December and has to be corrected, are in Licences & the Compliance Calendar. If you provisioned this calendar before September 2026 you may still see PAYE, SHIF, NSSF and Housing Levy rows: those were the earlier default set, they are no longer seeded, and you can delete them or keep them as you prefer.

When a filing is done, use Mark filed on the row. The dialog takes an optional reference (the iTax receipt number, say) and an optional evidence file, same types as a document. The row records who filed it and when.

Recurring obligations roll forward on their own, with one condition. Once a monthly, quarterly, six-monthly or annual obligation is filed or waived and its due date has passed, the nightly sweep advances the date to the next period (clamped to the month, so a 31st becomes the 30th where it has to), resets the status to pending, and clears the previous cycle's evidence, reference and reminders. A pending obligation whose date passes is not advanced; it becomes overdue and stays there until someone files or waives it, because auto-advancing would hide a missed filing. One-time obligations never roll.

Moving a due date by hand, or changing the reminder schedule, starts a fresh cycle, so a reminder already sent for the old date doesn't silence the new one.

Reminders, and whose "today" counts

Two background sweeps run every night, one for the calendar at 02:00 UTC and one for documents at 03:00 UTC. Each buckets companies by their own timezone and decides "expired" or "overdue" on that calendar day, not the server's. A company west of UTC is still on yesterday at 03:00 UTC, and a permit that expires today there is still valid. The same company-level "today" is used for the live counts on the documents page.

Document reminders go to everyone in the company holding manage_compliance. Calendar reminders go to the obligation's owner where one is named, and otherwise to the manage_compliance holders who can reach the premises that row belongs to; a company-wide row reaches all of them. Both arrive two ways:

  • An in-app notification, which also pushes to the phone where somebody has the app installed. A document alerts when it enters its window and again when it actually expires, at most twice in total. An obligation alerts once per lead time on its schedule, at most once each per cycle, and the record of what has been sent is cleared when it rolls forward.
  • An email, from the Compliance Document Expiring and Compliance Filing Due templates. Each names the record, says how many days remain or have passed, and links to the screen. Switching a template off on Company Settings > Email Templates stops that email; the in-app notification still arrives. See Company Settings.

A revoked document never alerts. A waived obligation doesn't either.

FAQ

I filed the VAT return last month. Why is it back to pending? Because it's monthly and the sweep rolled it forward to the next 20th once last month's date had passed. That's the intended behaviour: the same row tracks every cycle, and the evidence you attached for the old cycle was cleared with it. Attach this month's receipt when you mark it filed again.

An obligation is overdue but nobody was reminded. Why not? Check its reminder schedule in the Reminders column. A schedule of just 0 warns you on the day and not before. Then check its Premises, because a per-premises row only reaches managers who can reach that premises, and then check who holds manage_compliance at all, because that's the recipient list. If nobody holds it, nothing is sent.

Our licence says it's valid until today. Bohari says expiring soon, not expired. Right. Expiry is judged on your company's calendar day, and a document whose expiry date is today is still in force today. It turns expired on the next sweep after that date has passed.

Can I stop the emails without losing the alerts? Yes. Turn the relevant template off under Company Settings > Email Templates. The in-app notifications don't read the template and keep coming.

Why can't I record which branch a permit belongs to? On the calendar you can: every row has a Premises, and the seeded licences are created against one. Documents have no outlet field, so put the branch in the name or the description there ("Single Business Permit, Westlands") and the search will find it.