---
title: "Fill in a Workday EIB configuration workbook"
description: "Fill in a Workday EIB configuration workbook"
canonical_url: "https://support.pave.com/articles/fill-in-a-workday-eib-configuration-workbook-Y0rQswUKFo"
md_url: "https://support.pave.com/articles/fill-in-a-workday-eib-configuration-workbook-Y0rQswUKFo.md"
---
# Fill in a Workday EIB configuration workbook

A configuration workbook tells Pave how to fill one Workday EIB from your merit cycle. For each Workday field, you choose where the value comes from: a cycle column, a fixed value, or rules that pick a Workday ID based on the employee. You can also choose which employees the EIB includes.

You fill in one workbook per EIB, and one per Change Job sub-process. For an overview, see the article on getting started with Workday EIBs. For downloading templates and uploading, see the article on uploading configurations and generating Workday EIBs.

## What's in a workbook

* **📋 Field Mappings**: one row per Workday field. This is where most of the work happens.
* **🔗 Reference IDs**: rules for fields that need a different Workday ID depending on the employee. Can be left empty.
* **🎯 Employee Filters** (optional): rules for which employees the EIB includes. Not in the Change Job workbook.
* **📖 Instructions** and **❓ FAQ**: guidance only. Pave doesn't read them.

Don't change the tab names, the column headers, cell A2 of **📋 Field Mappings** (Pave reads it to know which EIB the workbook is for), or the **Workday EIB Field** and **Column Grouping** values. Changing any of these gets the upload rejected.

## Find your column keys

To point a field at a cycle column, enter the column's key, not its display name. For example, a column labeled "Merit increase" might have the key `salaryRaise`. To find a key, open the column in your cycle's column configuration and check the **Key** field. See [Configure cycle columns](https://support.pave.com/en-us/articles/configure-cycle-columns-6TRqRm2a1j).

Two more keys are always available: `currency` (the employee's local currency code) and `companyCurrency` (your company's currency code). Keys are case-sensitive.

## Fill in Field Mappings

:::info
**Important**: Pave only reads rows where **Used?** is set to `YES`. A row left blank is skipped, and that field comes out empty in the generated file. This includes the Spreadsheet Key and Row ID rows, which start with **Used?** blank.
:::

| Column                | What to enter                                                              |
| --------------------- | -------------------------------------------------------------------------- |
| **Used?**             | `YES` to fill this field                                                   |
| **Pave Column Key**   | The cycle column that fills this field, for example `salaryRaise`          |
| **OR Constant Value** | A fixed value for everyone, for example a reason code or an effective date |
| **Transformations**   | Optional formatting, for example `formatDate` or `precision`               |
| **Item Group**        | Leave blank unless an employee needs more than one item for this field     |

The other columns are for reference. **Required?** shows whether Workday requires the field, and **Notes** is for your own use.

If you fill in both a column key and a constant, the constant is used for employees with no value in that column. A value of `0` counts as a value.

**Spreadsheet Key and Row ID:** Workday uses Spreadsheet Key to group rows into one transaction, and Row ID to number repeating items within it. Pave fills both. Leave the template's auto-generated values in place and set **Used?** to `YES`. Each employee gets one Spreadsheet Key per file. On Change Job, the same key is used on every sub-process sheet for that employee.

**Amounts and currencies:** amounts use the employee's local currency. To use your company's currency, add `inCurrency:company` in **Transformations**, and fill the matching currency field with `companyCurrency` so the two agree.

## Fill in Reference IDs

Use **🔗 Reference IDs** when a field needs a different Workday ID depending on the employee. Rules go under a heading in the format `(Type: Workday ID type)`, which must match Workday's ID type exactly. A heading applies to every field of that ID type. Rules are checked from lowest **Priority** to highest, and the first match wins.

### Example: pick a one-time payment plan by currency

Say your Workday tenant has two one-time payment plans: `Spot_Bonus_US` for employees paid in USD, and `Spot_Bonus_Global` for everyone else.

**1. In 📋 Field Mappings**, set **Used?** to `YES` on the **One Time Payment Plan**\* row, and leave **Pave Column Key** and **OR Constant Value** blank. Leaving both blank tells Pave to use Reference ID rules.

| Workday EIB Field       | Used? | Pave Column Key | OR Constant Value |
| ----------------------- | ----- | --------------- | ----------------- |
| One Time Payment Plan\* | YES   |           |             |

**2. In 🔗 Reference IDs**, add the rules under a `(Type: One-Time_Payment_Plan_ID)` heading:

| Workday Reference ID | Condition Field | Operator | Condition Value | Priority |
| -------------------- | --------------- | -------- | --------------- | -------- |
| `Spot_Bonus_US`      | `currency`      | `eq`     | `USD`           | 1        |
| `Spot_Bonus_Global`  | `*any*`         | `*any*`  | `*any*`         | 2        |

**3. Result:**

| Employee's currency | One Time Payment Plan in the file |
| ------------------- | --------------------------------- |
| USD                 | `Spot_Bonus_US`                   |
| CAD                 | `Spot_Bonus_Global`               |

`*any*` in all three condition columns makes a catch-all, used only when no other rule matches. Without a catch-all, an employee who matches no rule gets a blank.

## Choose which employees are included

Each EIB has a default rule for who it includes:

| EIB                                  | Includes by default                                                                                                                      |
| ------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------- |
| Request Compensation Change          | Employees who aren't being promoted and have a merit increase, market adjustment, variable raise, or higher annual bonus target          |
| Request One Time Payment             | Employees who aren't being promoted and have a one-time bonus                                                                            |
| Add Stock Grant                      | Employees who aren't being promoted and have a refresher, promotion, or performance grant, plus anyone with a discretionary equity grant |
| Change Job                           | Every employee being promoted                                                                                                            |
| Change Job: Propose Compensation     | Promoted employees with a merit or promotion increase                                                                                    |
| Change Job: Request One Time Payment | Promoted employees with a one-time bonus                                                                                                 |
| Change Job: Request Stock Grant      | Promoted employees with a refresher, promotion, or performance grant                                                                     |
| Other Change Job sub-processes       | Every employee being promoted                                                                                                            |

Amounts count only when they're greater than zero. Promotions are read from the `isPromotion` column, so make sure your cycle has it. Employees marked as hidden in the cycle are never included.

### Fill in Employee Filters

On Request Compensation Change, Request One Time Payment, and Add Stock Grant, filters **replace** the default rule entirely. On Change Job sub-processes, filters choose which promoted employees to include. The main Change Job workbook doesn't accept filters.

An employee is included if they match **every** row in **at least one** group. Rows with the same **Group** label must all match. A row with a blank **Group** is its own group. Only rows with **Used?** set to `YES` apply.

For example, to send only market adjustments to Request Compensation Change, for employees who aren't being promoted:

| Group | Condition Field   | Operator | Condition Value | Used? |
| ----- | ----------------- | -------- | --------------- | ----- |
| A     | `marketCashRaise` | `gt`     | `0`             | YES   |
| A     | `isPromotion`     | `ne`     | `true`          | YES   |

Because filters replace the default, add an `isPromotion` `ne` `true` row to each group if promoted employees should still be left out.

## Operators

Reference IDs and Employee Filters use the same operators, in lowercase:

| Operator     | Meaning                                     | Example                   |
| ------------ | ------------------------------------------- | ------------------------- |
| `eq` / `ne`  | Equals / doesn't equal (not case-sensitive) | `currency` `eq` `USD`     |
| `gt` / `gte` | Greater than / or equal to                  | `salaryRaise` `gt` `0`    |
| `lt` / `lte` | Less than / or equal to                     | `salaryRaise` `lt` `5000` |

## Give one employee more than one item

Use **Item Group** when an employee needs more than one of the same thing, such as a refresher grant and a performance grant. Add a row per item on the same field, each with a different label:

| Workday EIB Field | Item Group  | Used? | Pave Column Key           |
| ----------------- | ----------- | ----- | ------------------------- |
| Grant Amount      | Refresher   | YES   | `equityRefresherShares`   |
| Grant Amount      | Performance | YES   | `equityPerformanceShares` |

Use the same labels, spelled the same way, on every other field that differs between items, such as the stock plan. An employee only gets an item if one of its tagged columns has a value.

On Request Compensation Change, Request One Time Payment, and Add Stock Grant, each item usually becomes its own transaction. In a repeating section (a section name ending in `+`), items become extra rows in the same transaction. Change Job always keeps an employee in one transaction.

## Format values with transformations

Add transformations in the **Transformations** column. Separate multiple steps with commas, for example `stripCurrency, precision`.

| Transformation                          | What it does                                                            | Example                              |
| --------------------------------------- | ----------------------------------------------------------------------- | ------------------------------------ |
| `formatDate`                            | Converts a date to `YYYY-MM-DD`                                         | `9/1/2026` → `2026-09-01`            |
| `precision`                             | Rounds to 2 decimal places (or `precision:0`, `precision:3`, and so on) | `187100` → `187100.00`               |
| `round`                                 | Rounds to a whole number                                                | `1234.56` → `1235`                   |
| `multiplyBy:12`                         | Multiplies the value                                                    | `5000` → `60000`                     |
| `divideBy:12`                           | Divides the value, to 2 decimal places                                  | `60000` → `5000.00`                  |
| `stripCurrency`                         | Removes currency symbols, commas, and spaces                            | `$1,000` → `1000`                    |
| `inCurrency:company`                    | Uses the amount in your company's currency                              |                                |
| `mapIf:isPaidHourly:true:newBaseHourly` | If the first column equals the value, uses the third column instead     | Hourly employees get `newBaseHourly` |
| `fallbackSource:equityPromotionShares`  | Uses another column when the value is blank                             |                                |
| `defaultIfEmpty:N`                      | Uses this text when the value is blank                                  | blank → `N`                          |

Also available: `prefix:`, `suffix:`, `trim`, `toUpperCase`, `toLowerCase`, `stripPercent`, `parseFloat`, and `toBoolean`. Column keys inside `mapIf` and `fallbackSource` aren't checked at upload, so double-check their spelling.

## Common errors

`unsupported Pave Column Keys`: A column key doesn't exist in the cycle. Check the spelling and use the key, not the display name.

`unrecognized Workday EIB Field`: A **Workday EIB Field** or **Column Grouping** value was changed. Restore it from a fresh template.

`used rows must include either Pave Column Key or a constant value`: A row has **Used?** set to `YES` but nothing to fill it with. Add a column key, a constant, or Reference ID rules.

`duplicate Workday EIB Field mappings`: Two used rows fill the same field. Remove one, or give each a different **Item Group**.

`Required field ... resolved to an empty value` (when generating): Workday requires this field, and it came out blank for some employees. Add a constant or `fallbackSource` to cover blanks, or a catch-all Reference ID rule.

**A field is empty in the generated file, with no error:** Check that **Used?** is set to `YES` on that row.
