> ## 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.

# Job offers

> A job offer is the formal proposal you put to a chosen candidate — the role, the start date, the salary, the terms — wrapped up as a letter the candidate…

A job offer is the formal proposal you put to a chosen candidate — the role, the start date, the salary, the terms — wrapped up as a letter the candidate can read and respond to. In Hitaji 360 the offer is also the hinge between recruitment and employment: when the candidate **accepts**, the system automatically creates their **employee record and employment contract**, fires the onboarding process, and moves them out of recruitment and into your people directory. That makes the offer the single most consequential document in the recruitment funnel, so it has its own composer and a careful set of guard rails.

This page covers building an offer, the offer letter, sending it, the statuses an offer moves through, and what happens when it is accepted or declined.

**You'll find this at:** `/hr/recruitment/offers/new` (composer), `/hr/recruitment/offers/:id` (detail)

> 📷 *Screenshot: Prepare Offer composer with the live letter preview — to be added.*

***

## Before you start

* **Which business am I in?** Offers belong to the business selected in the switcher, and the offer carries the candidate's salary, so it stays isolated to that business. An offer cannot be raised against a candidate or opening that belongs to a different business.
* **Start from the candidate.** The cleanest path is **Prepare Offer** from the [applicant detail page](/hr/user/recruitment/job-applicants) — it carries the applicant and their opening through to the composer. You can also open the composer directly and pick the candidate.
* **One live offer per candidate.** A candidate can only have one non-cancelled offer at a time. If there's already an active offer (draft, sent, accepted, or declined), you must cancel it before raising another.
* **You can't offer to a rejected candidate.** If the applicant has been Rejected, the system refuses the offer.

***

## The offer lifecycle (statuses)

An offer carries both a workflow stage (drafted → sent) and a response **status**.

| Stage / Status               | Meaning                                                                  | What you can do                         |
| ---------------------------- | ------------------------------------------------------------------------ | --------------------------------------- |
| **Draft**                    | Composed but not sent. Nothing has been put to the candidate.            | Edit, send to candidate, cancel.        |
| **Awaiting Response** (sent) | Sent to the candidate; waiting on their answer.                          | Record Accept / Decline, cancel, print. |
| **Accepted**                 | The candidate accepted — **an employee and contract have been created**. | Open the new employee, print.           |
| **Rejected** (declined)      | The candidate declined. The applicant is marked Rejected.                | Print. (They can be re-offered later.)  |
| **Cancelled**                | The offer was withdrawn before a response.                               | Nothing further.                        |

Two things to hold onto:

* **Sending requires approval.** Composing and saving a draft is a `:write` action, but **sending** the offer to the candidate (and recording their **Accept/Decline**) needs `hr-recruitment:approve`.
* **An accepted offer can't be cancelled.** Once accepted, the employee exists — to undo it you terminate the employee, not cancel the offer.

***

## Building an offer (the composer)

The **Prepare Offer** page is a two-pane composer: the form on the left, a **live letter preview** on the right showing exactly what the candidate will receive (watermarked **DRAFT** until sent).

> 📷 *Screenshot: Prepare Offer — left form, right live preview — to be added.*

At the top, a **candidate banner** shows who the offer is for, the linked opening, and — if they've been interviewed — their **average interview score** and interview count, pulled straight from their [interviews](/hr/user/recruitment/interviews). If you opened the composer without a candidate, pick one from the **Candidate** selector first.

The form is organised in steps:

### 1 · Role & department

| Field          | Notes                                                 |
| -------------- | ----------------------------------------------------- |
| **Position**   | The org position. Pre-filled from the linked opening. |
| **Department** | The org unit. Pre-filled from the linked opening.     |

The employment type and place of work are shown for context, taken from the job opening.

### 2 · Compensation & timeline

| Field                        | Required | Notes                                                                                                  |
| ---------------------------- | -------- | ------------------------------------------------------------------------------------------------------ |
| **Currency**                 | No       | Defaults to the opening's currency or your business's base currency (e.g. UGX).                        |
| **Basic salary (per month)** | No       | The monthly base. Must be a positive number.                                                           |
| **Offer date**               | Yes      | The date the offer is dated.                                                                           |
| **Expected start**           | No       | The proposed start date. **Cannot be earlier than the offer date** — the system rejects the inversion. |
| **Offer valid until**        | No       | A "respond by" date printed on the letter.                                                             |

To help you pitch the right number, **compensation rails** appear when the data exists: the **opening's salary band**, the **candidate's salary expectation**, and a chip telling you whether your figure is *below*, *within*, or *above* the band — plus quick-fill buttons for the band minimum, midpoint, and the candidate's ask.

### 3 · Key terms

Pull a set of terms from an [offer term template](/hr/user/recruitment/offer-term-templates) (the dropdown lists your templates), then tailor each line, or add term lines by hand. Each line is a term and its value (e.g. "Annual leave" → "21 days"). These print as a list on the letter.

### 4 · Letter content

A rich-text **opening paragraph** and a **terms & conditions** block. An **Insert standard clauses** button drops in a boilerplate conditions block (probation, confidentiality, contingencies) you can then edit.

### Saving & sending

* **Save draft** (needs `hr-recruitment:write`) — saves the offer as a draft and opens its detail page.
* **Save & send** (needs `hr-recruitment:approve`) — saves the draft *and* immediately sends it to the candidate.

You need a candidate and an offer date before either button will save.

***

## The offer detail page

The detail page renders the **finished letter** (the same document the candidate sees) alongside a status & actions rail.

> 📷 *Screenshot: Offer detail with the letter and the actions rail — to be added.*

* **Status tracker** — Drafted → Sent to candidate → Accepted / Declined / Awaiting response.
* **Candidate card** — name, email, phone, with a link to the applicant.
* **Summary** — position, offer date, expected start, basic salary.
* **Print / PDF** — print the letter (use your browser's "Save as PDF").

The action buttons depend on where the offer is:

* **Send to candidate** — on a draft (needs `:approve`).
* **Accept (create employee)** and **Mark declined** — while Awaiting Response (need `:approve`).
* **Cancel offer** — while Awaiting Response (needs `:write`).

***

## Accepting an offer (this creates the employee)

This is the load-bearing moment. Choosing **Accept (create employee)** and confirming will:

1. **Create a new employee** from the candidate's details (and invite/link a self-service account where the candidate has an email).
2. **Create an employment contract** for that employee, using the opening's employment type, the offer's start date, position, unit, and currency. This goes through the exact same path as manually [adding an employment record](/hr/user/employees/employment-and-contracts#adding-an-employment-record), so it **automatically fires off the employment-contract e-signature envelope** too — see [The e-signature envelope](/hr/user/employees/employment-and-contracts#the-e-signature-envelope). If the business hasn't configured a template/signatory yet, the contract is still created fine; the envelope just shows "Not sent" until someone sends it (manually, or via the settings-page backfill).
3. **Seed a salary assignment** from the offer's base salary and suggested structure where both are present, so the next payroll run can pick the new hire up.
4. **Mark the applicant Accepted** and link the offer to the new employee and contract.
5. **Fire the onboarding process** (see [Onboarding](/hr/user/lifecycle/onboarding)) and audit-log the conversion.

> This is the confirmation of employment itself; it's separate from the [job offer letter](#building-an-offer-the-composer) above, which is the pre-hire proposal. See [Appointment letters](/hr/user/recruitment/appointment-letters) for how post-acceptance confirmation has changed.

After accepting, the detail page shows an **"Employee & contract created"** card with an **Open new employee** button that deep-links to their new [employee profile](/hr/user/employees/employee-profile).

A few safeguards:

* You **cannot accept twice** — once an applicant is Accepted with a linked employee, a second accept is refused (it would create a duplicate person).
* If contract creation fails after the employee is created, the system rolls the employee back so you don't end up with an orphaned record.

> ⚠️ **Current state:** If the offer has **no salary structure suggestion or no positive base salary**, the accept still succeeds and the employee + contract are created, but **no salary assignment is seeded** — the new hire will be skipped by payroll until you assign a salary structure to them manually. Watch for this when accepting offers that were saved without a base salary.

***

## Declining an offer

**Mark declined** records that the candidate said no. The applicant is marked **Rejected**. This is reversible in spirit — they can be re-offered later if it was a mistake (cancel any leftover offer first, since one live offer per candidate is enforced).

***

## Permissions

| Action                                                                       | Permission               |
| ---------------------------------------------------------------------------- | ------------------------ |
| View offers                                                                  | `hr-recruitment:read`    |
| Compose / save a draft, edit a draft, apply a term template, cancel an offer | `hr-recruitment:write`   |
| Send the offer, record Accept / Decline                                      | `hr-recruitment:approve` |

> Note: the offer routes themselves load for anyone with `hr-recruitment:read`; the individual save/send/respond buttons are gated by the finer permissions above, so a read-only user sees the offer but no action buttons.

***

## Related

* [Job applicants](/hr/user/recruitment/job-applicants) — where you start an offer from
* [Offer term templates](/hr/user/recruitment/offer-term-templates) — reusable offer terms
* [Appointment letters](/hr/user/recruitment/appointment-letters) — how post-acceptance confirmation has changed
* [Employment records & contracts — the e-signature envelope](/hr/user/employees/employment-and-contracts#the-e-signature-envelope) — what actually gets sent when the contract is created
* [Onboarding](/hr/user/lifecycle/onboarding) — what fires when an offer is accepted
* [Employee profile & its tabs](/hr/user/employees/employee-profile) — the record an accepted offer creates
* [Recruitment overview & dashboard](/hr/user/recruitment/overview) — offer KPIs (offers out, acceptance rate)
