> ## Documentation Index
> Fetch the complete documentation index at: https://docs.hitaji360.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Staffing plans

> A staffing plan is your headcount plan for a period. Rather than reacting to vacancies one at a time, a staffing plan lets you set out, in advance, how…

A staffing plan is your *headcount plan* for a period. Rather than reacting to vacancies one at a time, a staffing plan lets you set out, in advance, how many people you want in each role over a date range — and what that will cost. It's the planning layer that sits alongside [job requisitions](/hr/user/recruitment/job-requisitions): the plan tells you where your gaps are, and requisitions and [openings](/hr/user/recruitment/job-openings) fill them.

This page covers building a plan, the per-role detail rows, how vacancies and budget are worked out, and submitting a plan.

**You'll find this at:** `/hr/recruitment/staffing-plans` (list), `/hr/recruitment/staffing-plans/:id` (detail)

> 📷 *Screenshot: Staffing Plans list with the "New Plan" button — to be added.*

***

## Before you start

* **Which business am I in?** Staffing plans belong to the business selected in the switcher and are only visible within it.
* **Each plan gets a reference number** automatically (a tenant-wide series). You don't type it.

***

## The plan lifecycle (statuses)

| Status        | Meaning         | What you can do                 |
| ------------- | --------------- | ------------------------------- |
| **Draft**     | Being prepared. | Edit freely, submit.            |
| **Submitted** | Locked in.      | View only — editing is blocked. |
| **Cancelled** | Withdrawn.      | Nothing further.                |

The rules are enforced on the server:

* Only a **Draft** plan can be **edited** — once Submitted or Cancelled, edits are refused with *"Cannot update a submitted or cancelled staffing plan."*
* Only a **Draft** plan can be **submitted**; submitting needs the `hr-recruitment:approve` permission.

***

## Building a plan

From the list, choose **New Plan** (needs `hr-recruitment:write`). A dialog opens.

> 📷 *Screenshot: New Staffing Plan dialog — dates and the designation-details rows — to be added.*

### Plan dates

| Field         | Required | Notes                                                    |
| ------------- | -------- | -------------------------------------------------------- |
| **From date** | Yes      | Start of the planning period.                            |
| **To date**   | Yes      | End of the planning period. Must be after the From date. |

### Designation details (the rows)

A plan is made of one row per role you want to plan for. Use **Add row** to add roles (up to 100 rows per plan). Each row has:

| Column            | Required | Notes                                                                                 |
| ----------------- | -------- | ------------------------------------------------------------------------------------- |
| **Designation**   | Yes      | The role / job title (up to 255 characters).                                          |
| **Vacancies**     | No       | How many of this role you plan to add. Defaults to 1 on the form; cannot be negative. |
| **Cost/position** | No       | Estimated cost for one of these positions. Defaults to 0.                             |

As you type, the dialog shows a running **Total estimated budget** — the sum of (vacancies × cost per position) across all rows. This same total is stored on the plan and recalculated whenever the rows change.

Create the plan with **Create Plan**. It is saved as a **Draft**.

> **Overlap guard:** When you create or submit a plan, Hitaji 360 checks each designation against any *Submitted* plan covering an overlapping period. If one already covers the same role for an overlapping range you'll be stopped with *"An active submitted staffing plan already covers designation '…' for an overlapping period (REF)."* Draft plans don't block — only submitted ones reserve a period.

***

## The plan detail page

Open a plan to see its summary (dates and total estimated budget) and the full designation table. The table is richer than the create dialog because it shows live context next to each planned role:

| Column               | Meaning                                                   |
| -------------------- | --------------------------------------------------------- |
| **Designation**      | The role.                                                 |
| **Vacancies**        | Planned new positions.                                    |
| **Cost/Position**    | Estimated cost per position.                              |
| **Total Cost**       | Vacancies × cost per position.                            |
| **Current Count**    | How many employees you currently have in this role.       |
| **Current Openings** | How many *Open* job openings already exist for this role. |
| **Total Positions**  | The total authorised positions for the role.              |

The **Current Count** and **Current Openings** figures are a point-in-time read from your live data (employees by position and open openings by job title) — they help you sanity-check whether the vacancies you're planning are realistic given who you already employ and what's already advertised.

If the plan is a **Draft** and you have `hr-recruitment:approve`, a **Submit Plan** button appears. Submitting locks the plan.

> ⚠️ **Current state:** *Current Count* and *Current Openings* are a snapshot taken at read time; they are not continuously recalculated as employees join or openings change. Re-open the plan to refresh them. There is also no in-app **cancel** action for a submitted plan today (the capability exists in the backend but isn't wired to a button). (Flagged for the team.)

***

## Permissions

| Action               | Permission               |
| -------------------- | ------------------------ |
| View plans           | `hr-recruitment:read`    |
| Create, edit, delete | `hr-recruitment:write`   |
| Submit a plan        | `hr-recruitment:approve` |

***

## Related

* [Recruitment overview & dashboard](/hr/user/recruitment/overview) — where planning sits in the funnel
* [Job requisitions](/hr/user/recruitment/job-requisitions) — raise the actual request to hire
* [Job openings](/hr/user/recruitment/job-openings) — advertise the planned roles
* [Org structure](/hr/user/getting-started/org-structure) — departments and positions
