Policies
Create expense policies that set claim limits, receipt rules, allowed categories, advance rules and a mileage rate.
What this is for
A policy is a set of spending rules: how much a person may claim, when a receipt is needed, which categories are allowed, how large an advance can be, and the mileage rate. Winlium picks the policy for each person automatically. People cannot choose their own.
Before you begin
Before you begin
- Set up Expense Settings Company-wide values. A policy overrides some of them.
- Create your categories Needed for Allowed Categories.
- Make sure roles, departments and branches exist Only if you want to fill the audience lists. See the warning above.
Open the screen
In the menu choose Expense, then Configuration, then Policies. The page title is Expense Policies.
Screenshot pending
Expense Policies list with columns Name, Applies To, Max Single Claim, Advance Allowed, Active and Action
- 1New Policy starts a new policy.
- 2Applies To shows roles, departments and branches.
The list
Columns
| Column | What it shows |
|---|---|
| Name | The policy name. Cannot be hidden. |
| Applies To | Three lines: "Roles: ...", "Depts: ..." and "Branches: ...". Each shows the names chosen, or "All roles", "All departments", "All branches" when blank. Long lines are cut short; hover to see all. |
| Max Single Claim | The limit in naira, or "—" if none. |
| Advance Allowed | Yes or No. |
| Active | A switch. Selecting it turns the policy on or off at once. |
| Action | A menu of actions for the row. |
Search, filters and sort
- Search (placeholder "Search Name...") finds text in the name and the description.
- Status (Active or Inactive) and More filters are offered but do not change the rows.
- Sort is offered, but choosing a column does not reorder the list. Only the direction reaches the server, and the list stays ordered by newest first.
- "Export", "Add columns", Rows per page (default 80) and the page buttons work as on Categories. With no rows you see "No results.". Double-click a row to open it.
Row actions
| Menu item | What it does |
|---|---|
| Edit policy | Opens the policy. |
| Deactivate policy or Activate policy | Turns it off or on. No confirmation. You see "<name> deactivated" or "<name> activated". |
| Delete policy | Asks "Are you sure you want to delete this expense policy? This action cannot be undone." with Delete and Cancel. It deletes the policy for good, even if it is in use. Expenses already created keep a copy of the rules they were made under. |
How a policy is matched to a person
Every time someone creates an expense or an advance, Winlium looks at all active policies and picks one.
- A policy fits a person when each of its three lists (Roles, Departments, Branches) is blank, or contains the person's role, department or branch.
- If more than one policy fits, the one with the most lists filled in wins. The more specific policy beats the general one. If two tie, which one is used is not defined.
- If none fits, there is no policy. The person is then limited only by Expense Settings. If Require Policy Assignment is on, creating the expense fails.
Today step 1 treats every policy as fitting every signed-in person (see the warning above). Public submissions from employees do pass a department, so department matching does work there.
A draft keeps the rules of the policy it was created under. Editing the policy later does not change drafts that already exist.
Example. "Standard Staff Policy" has no audience and a Max Single Claim of ₦50,000.00. "Sales Executives Policy" is limited to the Sales department with a Max Single Claim of ₦150,000.00. By the rule, Sales staff get the second policy because it is more specific. Because of today's limit, both staff in Sales and everyone else may be given the second one.
Create or edit
Open the form
On the list, select New Policy. To edit, double-click a row or choose Edit policy.Name it
Enter the Name in Policy Identity.Set the audience and limits
Fill the sections you need. Leave the rest blank.Save
Select the Save icon (hover text Save; Update when editing). You return to the list and see Policy created successfully! or Policy updated successfully!.
The page title is Create Expense Policy or Editing Expense Policy. The sections are Policy Identity, Who This Policy Applies To, Claim Limits, Advance Settings and Mileage.
Screenshot pending
Create Expense Policy form showing Policy Identity and Who This Policy Applies To sections
- 1Name is required.
- 2Roles, Departments and Branches. Blank means everyone.
- 3Claim Limits.
Field reference
Every number field accepts a blank. If you type something that is not a number, you see "Must be a number". A negative number gives "Cannot be negative". Numbers show thousands separators as you type.
Policy Identity
| Field | Type | Required | Details |
|---|---|---|---|
| Name | Text | Yes | Error if empty: "Policy name is required". Placeholder: e.g. Standard Staff Policy, Executive Travel Policy. Two policies may have the same name. |
| Description | Text area | No | Placeholder: Optional summary of who this policy is for and what it covers. Once saved with text, it cannot be cleared by editing. |
| Active | Yes/No switch | No | Only active policies are matched to people. Default: On |
Who This Policy Applies To
You can choose several values in each list. Up to three show as chips, then "+N more". A chosen role, department or branch that you later delete drops off silently when you save.
| Field | Type | Required | Details |
|---|---|---|---|
| Roles | Multi-select | No | Leave blank to apply to all roles. Placeholder: Select roles (Loading roles... while loading). Has no effect for ordinary users today. |
| Departments | Multi-select | No | Leave blank to apply to all departments. Placeholder: Select departments. Has no effect for ordinary users today. |
| Branches | Multi-select | No | Leave blank to apply to all branches. Placeholder: Select branches. Has no effect for ordinary users today. |
Claim Limits
| Field | Type | Required | Details |
|---|---|---|---|
| Max Single Claim Amount | Number | No | Maximum amount for any single expense line under this policy. Leave blank for no limit. Placeholder: 0.00. The line total, tax included, is compared. A line over the limit is refused: Line "<desc>" (<amount>) exceeds this policy's maximum single claim amount of <limit>. Default: Blank (no limit) |
| Max Monthly Claim Amount | Number | No | Maximum total claims per employee per month under this policy. Placeholder: 0.00. Checked when the expense is submitted. It adds up that person's approved and paid expenses for the month, by the month they were created, plus the one being submitted. Expenses still waiting for approval are not counted. The message reads: This submission would bring your total expense claims for <month> to ₦<total>, exceeding your policy limit of ₦<limit>. You have ₦<remaining> remaining for this month. Default: Blank (no limit) |
| Receipt Required Above | Number | No | Override company default for this policy. Placeholder: 0.00. Lines above this amount need a receipt, even where the category does not require one. If blank, Receipt Required Above in Expense Settings is used. The message reads: Receipt required for <category> line of ₦<amount>. Your policy requires receipts above ₦<limit>. Default: Blank (use the company value) |
| Allowed Categories | Multi-select | No | Leave blank to allow all categories. Placeholder: Select allowed categories. Options are shown as code, a dash and name, and include inactive categories. A line in another category is refused: Category "<name>" is not allowed under this policy. Default: None chosen (all categories) |
Advance Settings
These fields stay editable even when Allow Advance Requests is off.
| Field | Type | Required | Details |
|---|---|---|---|
| Allow Advance Requests | Yes/No switch | No | When off, people under this policy cannot request advances. They see: Advance requests are not permitted under your current expense policy. Contact your administrator. Default: On |
| Max Advance Amount | Number | No | Placeholder: 0.00. A larger request is refused: Requested amount exceeds the maximum advance amount of <n>. If blank, Maximum Advance Amount in Expense Settings is used. Default: Blank |
| Advance Clearance Days | Number | No | Days after disbursement to submit receipts before the advance is flagged overdue. Leave blank to use the company-wide default from Expense Settings. Placeholder: Company default. Default: Blank (company default) |
| Block New Advance if Previous Uncleared | Yes/No switch | No | Leave off to use the company-wide default from Expense Settings for employees under this policy. That is true only until you touch the switch. After that the policy always sends On or Off and overrides the company setting, and you cannot return it to 'not set' from the screen. Default: Off, and not set |
Mileage
| Field | Type | Required | Details |
|---|---|---|---|
| Mileage Rate Per Km | Number | No | Override company default rate for employees under this policy. Placeholder: 0.00. Used on mileage-based category lines. If blank, Standard Mileage Rate in Expense Settings is used. Default: Blank (company rate) |
Buttons and actions
| Button | Where | What it does |
|---|---|---|
| New Policy | List | Opens the new policy form. |
| Save / Update (icon) | Form | Validates and saves. Problems show under the field, as toasts, or as "Please fix the form errors before submitting.". |
| New (icon) | Form | Starts a blank form. With unsaved changes it asks "Discard Changes?" with Discard and Cancel. |
The form has no Cancel or Back button. While editing, an Activity Log at the bottom lists who changed the policy and when.
Statuses
A policy is active or inactive. Only active policies are matched.
Rules and error messages
Policy name is required
Appears: Save
- Why it happens
- Name is empty.
- How to fix it
- Enter a Name.
Cannot be negative
Appears: Any number field
- Why it happens
- You typed a number below zero.
- How to fix it
- Enter 0 or more, or leave it blank.
Must be a number
Appears: Any number field
- Why it happens
- The value is not a number.
- How to fix it
- Type digits only.
Expense policy not found
Appears: Opening a policy
- Why it happens
- The policy was deleted.
- How to fix it
- Go back to the list.
An expense policy is required — none matched this submitter
Appears: Creating an expense
- Why it happens
- Require Policy Assignment is on in Expense Settings and no active policy fits the person.
- How to fix it
- Create or activate a policy for them, or turn the setting off.
The messages for limits, receipts, categories and advances are in the field notes above. They appear to the employee, on their own expense or advance, not on this screen.
Who can do this
Administrator Needs expense:policies:read, expense:policies:create, expense:policies:update and expense:policies:delete. The pickers also need auth:roles:read, admin:departments:read, admin:branches:read and expense:categories:read. See Roles and permissions.
What this affects in other modules
- Expense: limits apply when people create and submit expenses and advances. See My Expenses and My Advances.
- Administration: roles, departments and branches come from there.