---
title: Human resources overview
order: 1
updated: 2026-07-12
---

# Human resources overview

The *Human Resources* section is where the firm runs its people work: who showed up, who took leave, who is owed a reimbursement, what everyone is paid, and the firm-wide rules behind all of it. It is split into three screens — *Attendance*, *Expenses*, and *HR Settings* — each organised into tabs so related work stays grouped.

This page is the map. It names every screen and every tab, tells you exactly which permission makes each one appear, and explains the two things the rest of the module reads from — the firm's attendance mode and the running ledger. The detailed how-to for each task lives on its own page, linked from here.

## Open Human Resources

1. Open *Human Resources* in the sidebar (the people icon). It expands into three entries:
   - *Attendance* — daily attendance, team views, bulk marking, leave, approvals, and salary.
   - *Expenses* — travel allowance, vouchers, the reimbursement ledger, and expense approvals.
   - *HR Settings* — firm-wide configuration for attendance, leave, holidays, expense categories, petrol rate, salary, and travel locations.
2. Click the screen you want. Each opens with a row of tabs across the top; the first tab you are allowed to see is selected automatically.

The *Human Resources* group has no permission of its own — it appears in the sidebar as soon as **any** of its three screens is visible to you. If you see none of them, you hold no HR permission at all.

## How permissions decide what you see

Everything in this section is gated. The app never trusts the screen — every tab you can reach and every action you take is re-checked on the server against your account, so a hidden tab is genuinely off-limits, not just visually removed.

Two things drive visibility:

- **Your permissions.** Each tab has a specific permission (or set of permissions) that reveals it. They are granted per user under *Settings → Users* — see [Users and permissions](/docs/settings/users-and-permissions).
- **Whether you have people under you.** Some tabs (team views and approval queues) only appear when at least one user reports to you in the firm's hierarchy. "How many users a person manages" is set on their profile when they are added.

A *Firm Administrator* (the `admin.isAdmin` permission, normally only the owner) bypasses every check and sees every tab everywhere. Throughout this page, "admin" means that role.

Permission names below are written as *Friendly name* followed by the internal key in backticks, e.g. *View Own Attendance* (`attendence.viewOwnAttendance`). Note the attendance keys are spelled `attendence` internally — that is the real key, not a typo in this doc.

## The Attendance screen

Header: *Attendance* — *Employee attendance, leaves, approvals, and salary reports.*

The whole screen appears in the sidebar for an admin, or for anyone holding at least one of *View Own Attendance*, *View Team Attendance*, *View All Attendance*, *Self Check-In* (`markOwnPresent`), *Mark Others Present*, *Apply for Leave*, or *Approve Junior Leave*.

Inside, the tabs are:

### My Attendance

Your own monthly attendance calendar with per-day status, summary tiles (*Days in Month*, *Working Days*, *Present*, *Absent*, *On Leave*, *Half Day*), a *View Analytics* breakdown, and — in manual mode — a *Mark Me Present* button. Click any day for its detail (status, who marked it, arrival/departure times, notes).

- **Appears when:** admin or *View Own Attendance* (`attendence.viewOwnAttendance`).
- **Status colours (legend):** `present` green, `absent` red, `on_leave` blue, `half_day` amber, `holiday`/`weekend` red. A faint dot on a cell marks an entry the system auto-generated (only shown when the firm is **not** in manual mode).
- Full guidance: [Marking attendance](/docs/human-resources/marking-attendance).

### Team

The attendance of the people who report to you, with a calendar action to open any one person's month.

- **Appears when:** you have subordinates **and** (admin or *View Team Attendance* / *View All Attendance*). With zero subordinates the tab is hidden even if you hold the permission.

### Mark

The bulk-marking screen HR or supervisors use to set attendance for many people on one date at once (*Present*, *Absent*, *Half (AM)*, *Half (PM)*, or *Skip*).

- **Appears when:** admin or *Bulk Mark Attendance* (`attendence.bulkMarkAttendance`).
- **Gotcha:** marking a **past** date additionally needs *Mark Attendance in Past Days* (`attendence.markAttendanceInPastDays`). Without it the server forces the date to today, so nobody can quietly back-fill a "present" for a day they skipped. Rows already *On Leave* or *Holiday* are locked and can't be overwritten here.
- Full guidance: [Marking attendance](/docs/human-resources/marking-attendance).

### Leaves

Your own leave applications (*My Leaves*) and, where allowed, your team's (*Team's Leaves*). Apply for leave, track status, and edit or cancel pending requests.

- **Appears when:** admin, or *Apply for Leave*, or *View All Leave Applications*, or *Approve Any User's Leave*, or (you have subordinates **and** *Approve Junior Leave*).
- Full guidance: [Applying for leave](/docs/human-resources/applying-leave).

### Approvals

The queue of pending leave applications waiting on your decision. The tab shows a live count badge of how many are pending. Approve or reject one at a time; a rejection captures a reason the applicant then sees.

- **Appears when:** admin, or *Approve Any User's Leave* (`attendence.approveAllUsersLeave`), or (you have subordinates **and** *Approve Junior Leave*).
- Full guidance: [Approvals](/docs/human-resources/approvals).

### Salary

Each employee's salary — current monthly pay, disbursement day, and a month-by-month report that computes gross payable from attendance and leave allowances. Users with the manage permission also get a *Quick Salary Action → Add Revision* button; the full revision history lives under *HR Settings → Salary Timeline*.

- **Appears when:** admin, or *View Own Salary* (`attendence.viewOwnSalary`), or *View Others' Salary Reports* (`attendence.viewSalaryReport`), or *Manage Salary Revisions* (`attendence.manageSalary`).
- The employee-picker sidebar only appears if you both hold *View Others' Salary Reports* **and** actually have subordinates; otherwise the tab just shows your own record. See [How salary is calculated](#how-salary-is-calculated) below.

## The Expenses screen

Header: *Expenses* — *Travel allowance, vouchers, and reimbursement ledger.*

The screen appears in the sidebar for an admin, or for anyone holding at least one of *Log Travel (TA)*, *Log Expense Voucher*, *View Own Expenses*, *View All Expenses*, *View Own Ledger*, *View All Ledgers*, or *Approve Expense*. The active tab is remembered in the page URL (`?tab=`), so deep links from the dashboard land on the right tab.

### Dashboard

A team-overview landing tab: KPI cards for total / voucher / travel spend for the selected financial year and the current month, a *Travel this month* table (distance and petrol per team member), and a *Vouchers by category* table. Every card and row deep-links into the *Ledger* tab pre-filtered. Clicking a team member opens their full travel analytics.

- **Appears when:** you have subordinates. This is the only tab gated purely on having a team — it needs no expense permission of its own (an admin sees it too, since admins are treated as having reports where relevant).

### Ledger

The running account between the firm and an employee: approved travel, paid vouchers, recorded payments, advances, and earned/disbursed salary, newest first, with a running balance. Filter by date range, entry type (`travel` / `voucher` / `payment`), category, or attachments-only.

- **Appears when:** admin, or *View Own Ledger* (`expense.viewOwnLedger`), or *View All Ledgers* (`expense.viewAllLedgers`).
- The employee selector (to view anyone's ledger, or *All Employees*) only shows with *View All Ledgers*. *Pay Balance* needs *Record Employee Payment* (`expense.recordPayment`); *Export CSV* needs *Export Expense Report* (`expense.exportExpenseReport`) and works for a single employee only. See [The reimbursement ledger](#the-reimbursement-ledger) below.

### Travel

Log a travel claim — a dated trip with stops, times, and inter-stop distances — that earns a per-kilometre allowance calculated from the firm's petrol rate.

- **Appears when:** admin, or *Log Travel (TA)* (`expense.logTravel`), or *View Own Expenses* (`expense.viewOwnExpenses`).
- Full guidance: [Logging expenses](/docs/human-resources/log-expense).

### Vouchers

Log a non-travel expense (food, stay, courier, supplies…) against a category, with an amount and an optional receipt.

- **Appears when:** admin, or *Log Expense Voucher* (`expense.logVoucher`), or *View Own Expenses* (`expense.viewOwnExpenses`).
- Full guidance: [Logging expenses](/docs/human-resources/log-expense).

### Approvals

Pending travel and voucher claims waiting on your decision, with a live count badge (travel + voucher combined). Approve or reject each with a reason.

- **Appears when:** you have subordinates **and** (admin or *Approve Expense* (`expense.approveExpense`)). Hidden entirely if nobody reports to you.
- Full guidance: [Approvals](/docs/human-resources/approvals).

## The HR Settings screen

Header: *HR Settings* — *Firm-wide configuration for attendance, leaves, holidays, expenses, and reimbursement rates.*

Everything here is firm-wide and takes effect immediately for everyone, so change things in agreement with the team — ideally not mid-month. The screen appears in the sidebar for an admin, or for anyone holding *Manage Attendance Settings*, *Manage Leave Types*, *Manage Firm Holidays*, *Manage Expense Categories*, or *Manage Petrol Rate*.

> Edge case: the *Salary Timeline* and *Travel Location* tabs are gated by their own permissions (below), but those permissions are **not** part of the rule that puts *HR Settings* in the sidebar. So a user who holds *only* *View Others' Salary Reports* or *only* *Configure Travel Locations* may not see the *HR Settings* entry at all. Pair those with one of the five permissions above, or grant admin, to make the screen reachable.

Full guidance for every tab: [HR settings](/docs/human-resources/hr-settings). The tabs are:

### General

Firm-wide attendance defaults. Contains the four settings that shape the whole module (detailed in [Firm-wide settings that change everything](#firm-wide-settings-that-change-everything)) plus a *View Archived Users* button to inspect HR records of soft-deleted employees.

- **Appears when:** admin or *Manage Attendance Settings* (`attendence.manageAttendanceSettings`).

### Leave Types

The list of leave types employees can apply for, each with a *Code*, a *Paid Leave* / *Unpaid Leave* setting, an optional *Allow Attachments* toggle, and an *Active* flag. Inactive types disappear from the *Apply for Leave* picker.

- **Appears when:** admin or *Manage Leave Types* (`attendence.leaveTypeCrud`).

### Holidays

Firm-wide public and company holidays. They show on every user's calendar and are excluded from working-day counts (so they don't dock salary).

- **Appears when:** admin or *Manage Firm Holidays* (`attendence.manageHolidays`).

### Expense Categories

The categories users pick from when raising a voucher.

- **Appears when:** admin or *Manage Expense Categories* (`expense.expenseCategoryCrud`).

### Petrol Rate

The per-kilometre rate (₹/km) used to value travel claims, kept as a dated timeline of revisions. A travel entry uses whichever rate was effective on its travel date, and that rate is frozen onto the entry.

- **Appears when:** admin or *Manage Petrol Rate* (`expense.managePetrolRate`).

### Salary Timeline

The full salary-cycle configuration and revision history the *Salary* tab reads from.

- **Appears when:** admin, or *View Others' Salary Reports* (`attendence.viewSalaryReport`), or *Manage Salary Revisions* (`attendence.manageSalary`).

### Travel Location

The firm-wide travel start/end location mode — either a fixed start location that pre-fills (and locks) the first stop of every trip, or free manual entry per trip.

- **Appears when:** admin or *Configure Travel Locations* (`expense.changeBeginningAndEndingLocation`).

## Firm-wide settings that change everything

These four live on *HR Settings → General* and affect every user immediately once saved.

### Manual attendance mode

A single checkbox, **off by default**.

- **Off (automatic):** past working days are auto-filled as *Present* unless someone marked them otherwise. Auto-filled days carry the faint "auto-marked" dot on the calendar.
- **On (manual):** nobody is auto-marked — each employee's attendance must be set every day, either by the person themselves via *Mark Me Present* (needs *Self Check-In*) or by a supervisor from the *Mark* tab.

The *Mark Me Present* button only shows in manual mode, only for today, and only on a working day that is not a holiday.

### Working days

Seven day toggles (Sun–Sat), **defaulting to Monday–Friday**. Days left off count as weekends: they don't affect salary or attendance. At least one day must stay selected — the screen refuses to save an empty set.

### Compensatory leave expiry (days)

How many days after a comp-off is earned before it expires. **Leave blank for no expiry** (the default).

### Expense edit window (days)

How many days back an employee may submit or edit a travel entry or voucher. **Leave blank for no limit** (the default). This is enforced on the server; a power user with *Edit Any Expense* (`expense.editAnyExpense`) bypasses the window entirely.

## How salary is calculated

There is no separate salary page — the *Salary* tab and *HR Settings → Salary Timeline* cover it, and here is the model behind them.

An employee's pay is defined by **salary revisions**. Each revision records:

- *Monthly Salary* — the gross monthly figure.
- *Disbursement Day* — the day of the month the salary row lands on the ledger.
- *Effective From* — the date the revision starts applying.
- *Leave Allowances* — per leave type, how many days per month are allowed before unpaid deductions begin.
- An optional *Reason* / note.

The newest revision effective on a given month is the one that applies. Adding or removing revisions needs *Manage Salary Revisions* (`attendence.manageSalary`).

The **monthly report** (shown for the previous month by default) computes, from that month's attendance and holidays:

- *Working Days* — calendar working days minus holidays that fall on them.
- *Present*, *Absent*, and *Half Days* counts.
- A per-leave-type breakdown of *Allowed* vs *Taken*, split into *Paid* and *Unpaid* days.
- *Gross Payable* — the amount owed for the month after unpaid leave and absence.

If no revision exists for the employee, the report shows a *Salary not configured* warning instead of numbers.

## The reimbursement ledger

The *Expenses → Ledger* tab is a running account per employee. The **Net Balance** headline reads as:

- `Dr` (green) — the firm owes this employee (unpaid reimbursements/salary).
- `Cr` (red) — the employee owes the firm (an advance is still outstanding).
- No side — fully settled.

Rows come from six source types, merged in date order: `travel`, `voucher`, `payment`, `advance`, `salary_earned` (the disbursement-day salary credit), and `salary_paid`. Each row's *View* action opens the underlying travel entry, voucher, payment, advance, or salary breakdown. The default date range is the current financial year (April–March); switch it with the date boxes or the financial-year picker on the *Dashboard*.

## A typical month

1. Attendance is recorded — automatically, or marked daily in manual mode — under [Marking attendance](/docs/human-resources/marking-attendance).
2. People apply for leave as needed under [Applying for leave](/docs/human-resources/applying-leave).
3. Travel and vouchers are logged as they happen under [Logging expenses](/docs/human-resources/log-expense).
4. Approvers clear the pending leave and expense queues under [Approvals](/docs/human-resources/approvals).
5. At month-end, HR reviews the *Salary* tab and settles balances from the *Ledger* with *Pay Balance*.

## Common questions

### Why are some tabs missing for me?

Each tab has its own permission (listed per tab above), and several also require that you have people reporting to you. If a tab is hidden, you either lack the permission or have no subordinates — ask your administrator to check your account under [Users and permissions](/docs/settings/users-and-permissions). Hiding is real: the server enforces the same rules, so a hidden tab can't be reached by other means.

### Why can't I see the whole *HR Settings* screen even though I can manage salary or travel locations?

The sidebar only shows *HR Settings* when you can manage attendance settings, leave types, holidays, expense categories, or petrol rate. *Manage Salary Revisions* / *View Others' Salary Reports* and *Configure Travel Locations* unlock their tabs but do **not**, on their own, put the screen in the sidebar. Ask for one of the five above (or admin) alongside them.

### Where do I assign who approves whose leave or expenses?

Nowhere under *HR Settings* — approval routing follows the reporting structure (who manages whom) plus the approval permissions on each account. Set both on the user under [Users and permissions](/docs/settings/users-and-permissions).

### Why is the petrol rate the same for everyone?

It is a firm-wide rate set once under *HR Settings → Petrol Rate*, kept as a dated timeline. Every travel claim is valued at the rate effective on its travel date, and that rate is frozen onto the claim — so a later revision never changes an old entry. See [HR settings](/docs/human-resources/hr-settings).

### Why did a "present" appear automatically on my calendar?

Because the firm is in **automatic** attendance mode — past working days are filled as present unless marked otherwise, and those carry the faint auto-marked dot. In manual mode nothing is auto-filled and every day must be marked. The mode lives on *HR Settings → General*.

### Can an employee back-fill attendance for a day they missed?

Not without permission. Marking any past date requires *Mark Attendance in Past Days*; without it the server forces the date to today. This is deliberate — it stops someone quietly recording a "present" for a day they skipped.

### Why is a salary tab visible but empty?

Either no salary revision has been added for that employee, or the salary timeline isn't set up. Add a revision from the *Salary* tab (*Add Revision*) or under *HR Settings → Salary Timeline*.

### What does `Dr` / `Cr` mean on the ledger?

`Dr` (green) means the firm owes the employee; `Cr` (red) means the employee owes the firm (an outstanding advance). No marker means the account is settled. Record a payment with *Pay Balance* if you have the *Record Employee Payment* permission.
