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

> ## Agent Instructions
> Omnivoo is an India-first Employer of Record (EOR) platform. EOR hiring is India only; contractors are supported in 220+ countries and territories.
> Never tell a user to log in with a password. Authentication is passwordless: email OTP, passkeys, Google, or SSO.
> Statutory figures (TDS slabs, PF, ESI, Professional Tax, gratuity) change by financial year. Always state the year the figure applies to.
> Never name a third-party payment provider as Omnivoo’s payment rail. Refer to "our payments partner".

# Bulk Import Adjustments

> Upload payroll adjustments for many employees at once using a CSV file.

When you need to apply adjustments to many employees at once - such as a company-wide festival bonus or a batch of monthly reimbursements - upload a CSV file instead of creating each adjustment by hand.

## When to Use Bulk Import

Bulk import works well when:

* You have many adjustments to create at once.
* They span multiple employees (for example, the whole team gets a bonus).
* You already have the data from another system that can export CSV.

For just a few adjustments, creating them one at a time is usually quicker. See [Adding Adjustments](/payroll/payroll-adjustments/adding-adjustments).

## CSV Format

Your CSV file should include a header row, then one row per adjustment. The importer reads these columns by name (column order does not matter, and headers are matched case-insensitively):

| Column           | Description                                                | Required | Example                        |
| ---------------- | ---------------------------------------------------------- | -------- | ------------------------------ |
| `employee_email` | The employee's registered email in Omnivoo                 | Yes      | `priya@company.com`            |
| `category`       | `addition` or `deduction`                                  | Yes      | `addition`                     |
| `type`           | A short type label for the adjustment                      | Yes      | `Performance Bonus`            |
| `name`           | A short label that appears on the adjustment               | Yes      | `Diwali Bonus 2026`            |
| `amount`         | A positive number, no currency symbols or commas           | Yes      | `15000`                        |
| `currency`       | ISO 4217 currency code; defaults to `INR` if blank         | No       | `INR`                          |
| `notes`          | Internal notes; leave blank if none                        | No       | `Approved by HR on 2026-03-15` |
| `effective_date` | The date the adjustment applies to, in `YYYY-MM-DD` format | No       | `2026-04-01`                   |

A single file can contain up to 1000 rows.

### Notes on values

* **`category`** must be exactly `addition` or `deduction`.
* **`type`** is a free-text label. For consistency, match the type names used in the app (such as "Performance Bonus" or "Advance Repayment"), but the importer accepts any non-empty text.
* **`amount`** must be a positive number greater than zero.
* **`currency`** defaults to `INR` when left blank.

## Sample CSV

```csv theme={"system"}
employee_email,category,type,name,amount,currency,notes,effective_date
priya@company.com,addition,Festival Bonus,Diwali Bonus 2026,15000,INR,Annual festival bonus,2026-04-01
rahul@company.com,addition,Festival Bonus,Diwali Bonus 2026,15000,INR,Annual festival bonus,2026-04-01
anita@company.com,addition,Festival Bonus,Diwali Bonus 2026,12000,INR,Prorated,2026-04-01
deepak@company.com,deduction,Advance Repayment,March Advance Repayment,5000,INR,Installment 3 of 6,2026-04-01
sneha@company.com,addition,Travel Reimbursement,Home Office Setup,8500,INR,Receipt #4521,2026-04-01
```

## Importing the File

<Steps>
  <Step title="Open the Payroll Adjustments page">
    Open the Payroll Adjustments page (`/employer/pay/adjustments`).
  </Step>

  <Step title="Click Import CSV">
    Click **Import CSV** in the top-right. The **Import Adjustments from CSV** dialog opens.
  </Step>

  <Step title="Choose your file">
    Choose your `.csv` file. The file is validated and processed as soon as it is selected.
  </Step>

  <Step title="Read the result">
    The dialog shows the result:

    * **Import Successful** - the number of adjustments created out of the total rows processed (for example, "5 adjustments created from 5 rows"). Because the import is all-or-nothing, this count equals the number of rows in the file.
    * **Import Failed** - a per-row error list (the row number followed by its messages) plus a summary line in the form "X valid, Y with errors out of Z total rows".
  </Step>

  <Step title="Close the dialog">
    Click **Close**.
  </Step>
</Steps>

Imported adjustments are created as drafts and appear in the Payroll Adjustments list, where you can review them and let them flow into a payroll run.

<Note>
  The import is all-or-nothing. If **any** row fails validation, **no** adjustments are created from that file - fix every listed row and upload again. The "X valid, Y with errors" summary on a failed import is only a diagnostic count of which rows passed and which did not. It does **not** mean the valid rows were saved.
</Note>

## Common Validation Errors

If the import fails, the dialog lists the problem rows. Common causes:

| Error                                   | Cause                                                    | Fix                                                     |
| --------------------------------------- | -------------------------------------------------------- | ------------------------------------------------------- |
| **Employee not found**                  | The email does not match any employee on your account    | Check the email and make sure the employee is onboarded |
| **Employee has no linked user account** | The matched employee is not yet linked to a user         | Complete the employee's onboarding, then re-import      |
| **`category` is required / invalid**    | The category is missing or not `addition`/`deduction`    | Use lowercase `addition` or `deduction`                 |
| **`type` is required**                  | The type cell is empty                                   | Add a type label                                        |
| **`name` is required**                  | The name cell is empty                                   | Add a short name                                        |
| **`amount` invalid**                    | The amount is missing, not a number, or zero or negative | Use a positive number with no symbols or commas         |
| **`effective_date` invalid**            | The date is not in `YYYY-MM-DD` format                   | Use the ISO format, for example `2026-04-01`            |

## Tips for a Clean Import

* **Test with a small file first** - upload two or three rows to confirm the format before a large batch.
* **Double-check email addresses** - "employee not found" is the most common error.
* **One adjustment per row** - do not combine multiple adjustments into one summed row.
* **Keep notes simple** - notes are stored as plain text; avoid extra commas or line breaks inside a cell.
