
[space] ChartHop Docs

[title] Change your password
[path] ChartHop for Employees/Edit your User settings/

You can change your ChartHop password from the **User settings** page only when your organization does not have single sign-on enabled.&#x20;

If your organization has single sign-on enabled, that means you are using another set of existing credentials to sign in to ChartHop and you cannot change your password from this page. For more information, please reach out to your IT department.

To change your password:

1. From the top utility bar, select your profile image.
2. Select **User settings**.
3. Navigate to the **Password** tab.
4. Select **Change Password**.
5. Enter your old password.
6. Enter your new password.
   - Passwords must be at least 8 characters long.
   - Passwords are case-sensitive.
   - You can use a combination of letters, numbers, and symbols in your password.
7. Re-enter your new password. Both new passwords must match to continue.
8. Select **Change Password**.

:::hint{type="info"}
[Modules:](https://www.charthop.com/pricing/) <font color="#000000">**HRIS |** </font>**Engagement | Goals | Performance |&#x20;**<font color="#000000">**Compensation Reviews |** </font>**Headcount Planning**
:::


[title] Filtering data
[path] Getting around in ChartHop/Navigating ChartHop/

You can filters to refine your view of your organization. You can use basic filters or add expressions to fine-tune your filter.  Filtering is available on many of ChartHop's pages.



![Filter icon](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/VAS7i_GDDgX4pec3lM0es_filter-icon.png)

### Creating a filter

You can choose from a few popular fields when creating a basic filter. Basic filters allow you to filter by the following:

- Jobs
- Employment status&#x20;
- Role type&#x20;
- People changes

To build more complex filters, you can add expressions based on your organization's structure or rules based on field values. For example, you could build a filter that lists all people who are managers, who have more than three direct reports, and are in the sales department, as shown below.

![Filtering example](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/2SeXLgy3CDkAaa_G51lSO_filter-example.png)

To create a filter:

1. Select the filter icon at the top of a page to view the **Filters&#x20;**&#x64;ialog.
2. In the **Filters** dialog, select one or more of the check boxes shown to start building your filter. If you don't want to use any of the common fields, leave the check boxes blank.
3. Add an **Org structure** rule. Choose a filter from the **Choose** drop-down list, choose an operator, and then choose a value. For example, *Managed Persons is at least 3* will return all people who have at least three direct reports.
4. Add a field rule to include additional fields in your filter that are not included in the lists above. For example, you can select **Department** and then enter the name of the department that you want use to filter.
5. Optionally, you can select **Add rule** to use multiple rules for your filter. When you use multiple rules, you need to choose between using an AND operator which means both rules have to be met or an OR operator which means either rule can be met.
6. Select outside of the **Filters** dialog to save your changes and view your results.

:::hint{type="info"}
Use the Trash can icon to delete a rule you don't need.
:::

### Using Carrot queries to filter

You can build queries with Carrot, ChartHop's query language, to configure filters that are more complex than what you can do with the Filters dialog.&#x20;

You can enter queries in the Search box which available on most ChartHop pages. [Learn more.](https://docs.charthop.com/carrot-reference)

![Carrot query box](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/VCBWltmLU5SpJ2xpDU8-G_carrot-queries.png)






[title] ChartHop terminology
[path] Getting around in ChartHop/Navigating ChartHop/

ChartHop uses a common terminology to represent your organization and take actions within ChartHop itself. Below is a list of key terms that you'll need to understand.

### Person

A **person** is a current, future, or former member of an organization.

### Job

A **job** is a specific function within your ChartHop org that has a level, salary, and hierarchical position associated with it. There can only be one person in a given job at a time.

Jobs come in two states:

- A **filled job** is a job that currently has a person assigned to it.
- An **open job** is a job that exists in the org chart but does not have a person assigned to it — for example, a new role that is being recruited for, or a backfill after someone departs.

Jobs must have exactly one direct manager. They may also have one indirect manager. An indirect manager is represented by a dotted line on the org chart.

In most cases, there will always be exactly one head job in the organization. If your org has co-CEOs, email our support team ([support@charthop.com](mailto\:support@charthop.com)).

### User

**Users** are authorized individuals who can access ChartHop. A user often corresponds to a person in your organization, but not always. For example, you might want to invite an external consultant to your ChartHop instance. Although it's rare, users can have access to multiple instances simultaneously.

All access to ChartHop is tied to a user, even API-level access. For example, if you are building an API-based integration with ChartHop, an **app user** will be created in ChartHop that corresponds to the level of access required by the integration.

### Group

A **group** is a method of categorization that allows jobs to be segmented by a variety of important groupings. Jobs can belong to multiple groups, such as *departments*, *teams*, *locations*, and *bands*. For example you can create multiple overlapping teams to represent different cross-functional groups, sales territories, or areas of responsibility.

### Change

Any **change** that is made to a job is recorded in your organizational history. There are several types of changes listed below.

- **Create** - a job is created.
- **Update** - a change is made to a job, such as new manager, compensation, title, or other fields.
- **Data** - data is collected, such as a form being filled out.
- **Delete** - a job is removed from the org chart.
- **Hire** - a person is hired into a job.
- **Depart** - a person leaves the organization; departures can either be *voluntary* or *involuntary*.
- **Move** - a person moves from one job into another open job, such as an internal transfer.

At its core, ChartHop is a record of changes. You can hop to any moment in time and ChartHop will replay the changes for exactly that moment in organizational history, and you can always propose a new set of changes. Those with appropriate access can edit the history of changes, such as altering a start date or even cancelling a change retroactively.

### Scenario

A **scenario** is a proposal for a set of changes to the organization. For example, a hiring plan, or a proposal for a reorganization, is a scenario. Scenarios can be shared privately, and while anyone can create a scenario, a scenario is not live until it is "merged" by an approved user into the primary org chart.

### Field

Users with the right permissions can create any number of ***custom fields*** with different datatypes that can help you gather information about your organization. You can include these fields in forms such as an employee survey or another custom form. You can control access to the data collected by setting data sensitivity rules. Data collected can be used in reports.

### Form

You can also create **forms** that collect data. You can build a form with any number of custom fields that you create. Use forms to collect self-reported data, such as performance review, custom user profiles, or happiness surveys.

[title] ChartHop implementation overview
[path] Implementing ChartHop/

Before getting started, you will need to set up your ChartHop organization. To set up your organization, you can follow the list of sections below.

## Setting up your organization in ChartHop

With all ChartHop packages, the best way to get started is to integrate your data from your payroll system into ChartHop. This keeps your org chart up to date and quickly allows you to see a visual of your organization.

ChartHop allows you to integrate your payroll system in two ways. You can either use an app included with ChartHop or manually import data from your payroll system.

### Using a ChartHop payroll app

ChartHop payroll apps sync your payroll system data into ChartHop on a daily basis once you have configured them. This ensures that your ChartHop organization is always up to date and automates the setup process.

Payroll system data syncs are highly recommended, as they are very complete and provide additional benefits such as the ability to capture the historical data of your organization and track its growth over time. [Learn more](https://docs.charthop.com/payroll-system-apps).

:::hint{type="info"}
ChartHop Basic customers can sync from only one payroll system. If you don't see a synchronization app listed for your payroll system, you will need to manually import your payroll system data from a spreadsheet. [Learn more](https://docs.charthop.com/importing-spreadsheet-data).
:::

### Importing payroll system data from a spreadsheet

If your payroll system isn't supported by a ChartHop app, you'll need to export your data from your payroll system and import it into ChartHop. After you import your organization's data, you can either manually make changes in ChartHop and your payroll system to keep both up to date or perform a spreadsheet upload from your payroll system on a regular basis depending on how much your org is changing.

Spreadsheet data imports are a perfect substitute if you do not have an existing payroll system integration to sync, or if you are looking for a simpler data implementation. [Learn more](https://docs.charthop.com/importing-spreadsheet-data).

## Configuring Org settings

After importing your data, you can further customize your organization's settings such as establishing your urls, uploading logos, creating welcome emails, and more. [Learn more](https://docs.charthop.com/configuring-your-org-settings).

## Adding groups

If you did not already add groups in your initial data import, you can fully capture the structure of your organization by manually adding information in Groups. [Learn more](https://docs.charthop.com/creating-and-managing-groups).

With your departments, teams, locations, and other group data configured, you will be able to make full use of ChartHop's various visualization features including:

- **Org Chart**
- **Map**
- **Data Sheet**
- **Employee Profiles**

## Inviting users

After you establish your organization's initial data, settings, and groups, you may then want to begin inviting new users to join your organization either manually, or by using a custom template. [Learn more](https://docs.charthop.com/inviting-users).

## Setting up permissions and security

If you are an HR professional looking to prepare a rollout plan using ChartHop, you can assign roles to your users, manage user permissions, and protect your sensitive data. [Learn more](https://docs.charthop.com/user-roles-and-permissions).

## Integrating apps and bundles

ChartHop supports an entire marketplace of compatible apps and bundles with which you can integrate into your organization. [Learn more](https://docs.charthop.com/integrations-and-bundles).

## Common implementation challenges

Most implementations go smoothly, but there are a few common issues worth knowing about before you get started. Here's what to watch for and how to address them.

### Duplicate employee records

Duplicate records can appear when data is imported from multiple sources — for example, if the same person exists in both a payroll integration and a manual spreadsheet upload. To avoid this:

- Complete your payroll integration or spreadsheet import first before making manual edits in ChartHop.
- If duplicates do appear, use the Data Sheet to identify and remove the extra records before inviting users.

### Missing or inconsistent location data

Location data powers several ChartHop features, including the Map view, location-based compensation band multipliers, and geographic filtering in reports. If location data is missing or formatted inconsistently (for example, "New York" vs. "New York, NY" vs. "NYC"), these features won't work as expected.

- Ensure your payroll system exports a consistent location format before importing.
- After import, review your Groups > Locations list to confirm all locations resolved correctly.

### Role and permission misconfigurations

ChartHop's role system is flexible but can be easy to misconfigure — for example, giving too many users the Owner role, or not correctly restricting access to sensitive compensation data.

- We recommend starting with a small set of Owners (typically just your People Ops admins) and expanding access gradually.
- Review the [roles and permissions guide](https://docs.charthop.com/user-roles-and-permissions) carefully before your broader rollout to ensure sensitive fields are protected.

### Group structure not matching your org

If your department or team structure in ChartHop doesn't match how your organization actually operates, reports and filters will be unreliable. This often happens when group names from a payroll import don't align with how your team uses them day-to-day.

- After your initial import, walk through your Groups settings and rename or consolidate any groups that don't reflect your real structure.
- Consider mapping out your desired group structure before the import to make cleanup faster.

:::hint{type="info"}
[Modules:](https://www.charthop.com/pricing/) HRIS | Engagement | Goals | Performance | Compensation Reviews | Headcount Planning
:::

[title] Navigating ChartHop
[path] Getting around in ChartHop/

::embed[]{url="https://www.youtube.com/watch?v=ZnUftqrhNBw"}

![](https://api.archbee.com/api/optimize/CXAjUAezd9VEEVQBIYmdw/HW2jlIn3rIKEYbkcvNIsG_overview.png)

## Top Utility Bar

![](https://api.archbee.com/api/optimize/CXAjUAezd9VEEVQBIYmdw/AcbbiMdCDe0-2Ma0d9FwF_top-bar-left.png "Top Utility Bar")

- **Organization&#x20;**- the org you are currently viewing
- **Navigational Breadcrumbs** - Help you locate where you are in the app and go back to previous pages

![](https://api.archbee.com/api/optimize/CXAjUAezd9VEEVQBIYmdw/QHhW8PvpN1a6IAqdrVN2K_top-bar-right.png "Top Navigation")

![](https://api.archbee.com/api/optimize/CXAjUAezd9VEEVQBIYmdw/zs3Kx6hw6ws5lXXuOiiRd_top-bar-search.png "Search Bar")

- **Search** - Find people, jobs, groups, scenarios, reports, and pages (Ctrl/Cmd+K)
- **Help** - Search docs, watch videos, ask AI or contact support
- **Notifications** - Alerts about your account
- **Sensitive Data** - Hide or Show sensitive data. This can be useful when screen sharing or using ChartHop in a public setting.
- **Profile Menu&#x20;**- click the profile picture
  - **My Profile** - quickly go to your profile
  - [Edit your user settings](docId\:hmQnA59mgN3JQ1qfXPYtQ) - change your picture, password or other settings&#x20;
  - **Sign out**

## Left Sidebar

:::hint{type="info"}
Left and sub-nav options will not look the same for everyone and will depend on:
🔐 Access role and permissions
⚙️ Account configuration
💼 Modules your organization subscribes to
:::

![](https://api.archbee.com/api/optimize/CXAjUAezd9VEEVQBIYmdw/hUA-28QjqeXL5D8HwMT43_left-nav-1.png "Left Sidebar")

- **Collapse Menu&#x20;**- Toggle between showing and hiding the menu item names
- [Home page](docId\:FzRI4LZFCDA9zKRs3wHVV) - View announcements, tasks, and other relevant information&#x20;
- **My Profile** - Quickly go to your profile to complete forms or view profile tabs&#x20;
- [Org Chart](docId\:BepXEDmK2n5nOxoItxF7x) - Explore your organization's hierarchy&#x20;
- [Data Sheet](docId\:XTd4DG4I_4_nMwjfEsq0S) - View people and job data in a customizable table format&#x20;
- [Map](docId\:jFytgiDGyYwmYaY5p0LnB) - View people's work location on a map&#x20;
- [Dashboards](docId\:kA8-kvT0AUi_ekF7MECLD) - View aggregated charts (formerly known as Reports)&#x20;

![](https://api.archbee.com/api/optimize/CXAjUAezd9VEEVQBIYmdw/5Yx5yquwqQmMbQZQ0XudI_left-nav-2.png "Left Sidebar")

- [Planning](docId:9325SriEk8fJ8slFjO8VT) - Model scenarios and submit proposed org changes for approval (formerly known as Scenarios)&#x20;
- [Compensation reviews](docId:4ghls_QtEqdR6vEYTAJoy) - Participate in or set up a compensation review&#x20;
- [Performance reviews](docId\:pgai8TVrVYWmDcEAnerwg) - Configure and distribute performance reviews&#x20;
- [Engagement surveys](docId\:F_yJDEM_cM1J9XlNG2fZK) - Configure and distribute engagement surveys&#x20;
- **People Ops Tools** - Executing a variety of operational processes using these tools

![](https://api.archbee.com/api/optimize/CXAjUAezd9VEEVQBIYmdw/9mXDWgUmuKIWdcvZe6jtS_left-nav-3.png "Left Sidebar")

- [Apps & Integrations](docId\:Hlp6L7zXfpGhP5q-hF9gg) - Manage integrations and add or remove bundled templates&#x20;
- **Data Model** - Configure field, groups, and job architecture&#x20;
- [User access controls](docId\:puO-BB-nsw2cwlVm3_scy) - Configure and control who has access to what data&#x20;
- **Admin** - Configure your settings and other admin tools&#x20;

## Sub-Menu

### People Ops Tools

- Automated Actions
- Forms
- [New hire management](docId\:V9LqjoSFJqdR9Ymy1YwAY)&#x20;
- [Letter templates](docId\:PrTI425Guur8bJNFonivJ)
- [Managing tasks](docId\:AUgK05IqTO-acrgCmfF60)

![](https://api.archbee.com/api/optimize/CXAjUAezd9VEEVQBIYmdw/qycmrA2QsGnD0VH5CLVSy_sub-nav-people-ops-tools.png "People Ops Tools")

### Apps & Bundles

- [Apps & Integrations](docId:0o8jpnu2oZpCWLYaCB7QE)
- [Bundles](docId\:O7K0K249Lrkt97FF36-YS)

![](https://api.archbee.com/api/optimize/CXAjUAezd9VEEVQBIYmdw/DgJ2n3xbM7NFILpC0MSAF_sub-nav-apps-and-bundles.png "Apps & Bundles")

### Data Model

- **Fields**
  - [Creating custom fields](docId\:VMoQbEuAnP7Fz8E8HOZYq)
  - [Categories](docId\:TPKhVeXrOv1C9Jv2x6vDv)
- [Managing groups](docId:1B7KsAAQrS5bpcOg3CXc6)
  - [Departments](docId\:vExrUYx74ibzGiV94hEf_)
  - [Teams](docId\:WJcHInwCtjMABdIIBBYJD)
  - [Locations](docId\:inCBUlReEk95ecZqtoXq-)
- **Job Architecture**
  - [Compensation bands](docId\:rkgLzGtQtddyAsNrFlLtu)
  - [Job codes](docId\:QC8XFfoL2DTxQ6JOc8_ZN)

![](https://api.archbee.com/api/optimize/CXAjUAezd9VEEVQBIYmdw/p0rQQCF63hUJ9idhDOF_5_sub-nav-data-model.png "Data Model")

### Access

- [User management](docId\:KOXUdsgLe9S5QqAH9rADj)
- [Built-in Roles](docId:47kdSxXzVdMh8nqhSJ27I)
- [Defining a custom permission](docId:28QtVAA6cLTXbB2v1pFiZ)
- Access Settings

![](https://api.archbee.com/api/optimize/CXAjUAezd9VEEVQBIYmdw/iTIsk73wKIWQsPiin7UJy_sub-nav-access.png "Access")

### Admin

- **Admin**
  - [Configuring financial settings](docId\:RssjSzEdBFBm9yt4PNv-7)
  - Financial - [Set custom currency rates](docId\:HSUgyHIZN5IdTI-NtRcpD) and [Setting up Stock valuations](docId\:VDqWgS-2tjd9zJs4JcIC1)
  - [Enabling approvals](docId\:ervo1r8k_X5BNaq8mifaK)&#x20;
- **History**
  - [Org Changes History page](docId\:xtAS8QlmZJnc3oVkTKrPk)
  - [Sync history](docId\:wZ2sVQ7hs8ZSdBbv-gq6z)
- **Configuration**
  - [Configuring the Home page](docId\:im4TnQVoBtH7qvMY4EFFD)
  - [Add content to custom profile tabs](docId\:SQtgso_aSDtNvhLJI0j-q)
- Import Data
  - [Importing spreadsheet data](docId\:At7q7FJKYiorELBLfdowW)

![](https://api.archbee.com/api/optimize/CXAjUAezd9VEEVQBIYmdw/uc5_7sWg-AQOLyHn7yzlj_sub-nav-admin.png "Admin")

## Additional Navigation Options

- [View as another user](docId\:mRdUeWlIgRoVICOKEo0OF) - Allows you to preview ChartHop as another person sees it.&#x20;
  - Top Bar -> Profile Menu&#x20;
- **Org Switcher&#x20;**- If you have a sandbox or multiple organizations
  - Location: Top Bar -> Org Logo

### Global Search (⌘K / Ctrl+K)

Use global search to find almost anything in ChartHop and jump straight to it. Open it by clicking the search box in the top bar, or press **⌘ + K** on a Mac / **Ctrl + K** on a PC from anywhere in the app.

Start typing to search across:

- **People, jobs, and groups**
- **Dashboards, reports, and scenarios**
- **Goals, resources, and comp reviews**
- **Pages.** Type the name of a page (for example "Org Chart", "Data Sheet", "Data Model", or "Access") and jump directly there instead of clicking through the left navigation.

Select any result to go straight to it. You'll only see people, pages, and items you have permission to access, so results match your role and configuration.

![Global Search](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/497oyudGeuLQmaep0gVT6_global-search.png)


[title] Finch Integrations
[path] Implementing ChartHop/Apps & Integrations/Payroll systems/Installing payroll apps/

:::hint{type="warning"}
This app is currently in Beta.&#x20;

We're really excited about it and it's already being used by multiple organizations.&#x20;

Try it out and send feedback to the ChartHop team or directly to [product-feedback@charthop.com](mailto\:product-feedback@charthop.com). &#x20;

### How to setup a Beta Feature

1. From the left sidebar, select **Admin,&#x20;**&#x74;hen select **Apps & Bundles**.
2. Under "**Payroll and HCM Apps**", select "**Other Payroll & HCM's**"
3. Read below for additional setup instructions and context about what will be activated when you save settings.&#x20;
:::

## Overview

The Finch integration is a one way sync that allows for syncing data into ChartHop from many applications. Offering more integrations empowers our customers by expanding data access, reducing manual work, and improving overall efficiency.

## What integrations does Finch support?

Finch offers an integration with over 200 payroll and HR providers. You can see the full list [here](https://www.tryfinch.com/integrations?utm_content=sitelink\&utm_term=finch%20integration\&utm_campaign=brand_p1\&utm_source=google\&utm_medium=cpc\&hsa_acc=1500006298\&hsa_cam=21551594295\&hsa_grp=166539936660\&hsa_ad=721934076208\&hsa_src=g\&hsa_tgt=kwd-1313347514319\&hsa_kw=finch%20integration\&hsa_mt=e\&hsa_net=adwords\&hsa_ver=3\&gad_source=1\&gclid=CjwKCAiAn9a9BhBtEiwAbKg6fk-sco0iOwu_WDjI4Cnj03rbcGN6NZ-w5QHpg3Bq0jE_CJm1BzfZhBoC5lAQAvD_BwE).

## Assisted vs Automated Integrations

The difference between **automated** and **assisted** integrations comes down to how frequently data flows between systems:

- **Automated Integrations**: These are fully API-driven, meaning data moves seamlessly between applications without manual intervention. They sync data automatically every 24 hours and require no extra configuration once set up.&#x20;
- **Assisted Integrations**: These act as a workaround when an API is unavailable or restricted. Instead of direct API access, a third party (like Finch) is granted permission to pull and standardize data from a system. This data is refreshed every 7 days.&#x20;

Find out what integration type your application has [here](https://developer.tryfinch.com/integrations/providers).






[title] Control what people see on your profile
[path] ChartHop for Employees/Customize your employee profile/

You get to decide who in your organization can see specific personal information. For example, you can configure your settings so that only you can see your birthday.

:::hint{type="warning"}
Administrators at your organization with the following access roles can still view this information, even when you change the visibility settings:

- Sensitive data viewer
- Owner
- Org editor

Birthdays continue to display in the Calendar on the Home page for those with sensitive data access.
:::

### Visibility settings for your profile

Visibility settings control who can see the information on your profile. For example, if you want to hide your birthday so that nobody can see it, you can change the **Visibility** dropdown in the Birthday row to **Personal**. This indicates that only you will be able to see your birthday on your profile.

Depending on your organization's settings, you might not be able to control the visibility settings for all fields.

![Who can see this information? dialog](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/XFZGNXEethdYZWf9LGDW2_editwhocanseethisinfo.png)

The following visibility settings are available:

| **Visibility** | **Description**                                                                                          |
| -------------- | -------------------------------------------------------------------------------------------------------- |
| Personal       | Only you can see this information.                                                                       |
| Manager-shared | Only you and your manager (and managers above you through your reporting line) can see this information. |
| Org shared     | Everyone in your organization can see this information.                                                  |

:::hint{type="warning"}
You always have access to your own sensitive personal data and it displays on your employee profile to you when you don't have sensitive data hidden.&#x20;



To hide your sensitive data, for example, when screen-sharing your profile with someone else, toggle the eye icon to hidden. [Learn more.](https://docs.charthop.com/hiding-sensitive-data)
:::

### Hide information on my profile

Other people in your organization can't see any of your sensitive data (such as your home address or full birthdate) unless they specifically have access to it (such as an HR coordinator).&#x20;

However, you can still hide certain public information from your profile, depending on your organization's configuration.



![Who can see this information? link](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/IK0V1fmYCv5rzFGojGi4v_profilewhocanseethisinfo.png)

To hide information on your employee profile:

1. From the left sidebar, select **My Profile**.
2. In the **About** employee profile tab, select the **Who can see this information?** link. 
3. In the **Who can see this information?** dialog, edit the visibility settings of the information you want to hide.
   - You can choose from the following options:
     - **Personal&#x20;**- Only you can see this information.
     - **Manager-shared** - Only your manager (and managers above you through your reporting line) can see this information.
     - **Org public** - Everyone in your organization can see this information.
4. Once you’re done editing, select **Save settings**.

:::hint{type="info"}
[Modules:](https://www.charthop.com/pricing/) <font color="#000000">**HRIS |** </font>**Engagement | Goals | Performance |&#x20;**<font color="#000000">**Compensation Reviews |** </font>**Headcount Planning**
:::




[title] Configuring payroll apps
[path] Implementing ChartHop/Apps & Integrations/Payroll systems/

After you've installed your payroll app, you can adjust your payroll app settings if needed. This includes configuring settings or adjusting when it syncs.

You can also add custom field mappings that allow you to sync additional data from your payroll system to ChartHop. The number of custom field mappings that you have will depend on your plan.&#x20;

## Manage app settings

You can update your payroll app settings and change the way that the payroll app synchronizes data and what data it includes.

1. From the left sidebar, select **Apps & Bundles**.
2. From the sub-menu, select **Apps**.
3. Select the **Installed Apps** tab.
4. Find your payroll system app and select the gear icon.
5. Select **edit** in any of the sections to view the settings and make changes.

## Configure sync settings

You can change when the payroll app syncs data. You can turn the automated sync on or off or run an on-demand sync.

:::hint{type="info"}
If you turn off the payroll sync, your data in ChartHop remains unchanged.
:::

### Run a one-time sync

You can run a one-time sync from your payroll app. You can do this even when you have configured an automated sync. An on-demand sync runs as soon as you select the option. When you run a one-time sync, you have the flexibility of syncing your current payroll data to a ChartHop scenario.



::Image[]{alt="One-time sync" src="https://lh3.googleusercontent.com/ymPjfNSTEPTJg_hH4WDiUKV-FkwHPAepiABCps--Us-L4wGiMK8QGghDa6HdOp0wavPhEUcrlqM46ocs33mjUm6rsTs18piv2mb1_T4671tObhAdxy6uOfQcMV4nqzqSFkDDCp4ZW79JKho0rskmBmE" size="54" width="648" height="551" position="flex-start" showCaption="false"}

1. From the left sidebar, select **Apps & Bundles**.
2. From the sub-menu, select **Apps**.
3. Select the **Installed Apps** tab.
4. Find your payroll system app and select the gear icon.
5. Select **Run a one-time sync** at the top right of the page.
6. Select whether you want sync to:
   - your primary org
   - to an existing scenario
   - to a new scenario that will be created when you sync
7. Choose if you want to exclude any employee IDs from your import.
8. Select **Run sync**.
9. Once completed, a message indicates that the sync has been completed.

### Run an automated sync

ChartHop recommends configuring your payroll app to do a daily sync to Charthop.



1. From the left sidebar, select **Apps & Bundles**.
2. From the sub-menu, select **Apps**.
3. Select the **Installed Apps** tab.
4. Find your payroll system app and select the gear icon to view the Manage app page.
5. In the **App status & sync settings** section, select **Edit.**
6. Select **Autosync** to turn the automated sync on or off.
7. Select **Save**.

### Disable a payroll automated sync

You can disable your payroll app's automated sync at any time from the settings section in your payroll app.

1. From the left sidebar, select **Apps & Bundles**.
2. From the sub-menu, select **Apps**.
3. Select the **Installed Apps** tab.
4. Find your payroll system app and select the gear icon to view the Manage app page.
5. In the **App status & sync settings** section, select **Edit**.
6. Set **Auto sync&#x20;**&#x74;o off.
7. Select **Save**.

### Exclude employees from payroll syncs

In some cases you may wish to omit one or more employees from your syncs.

1. From the left sidebar, select **Apps & Bundles**.
2. From the sub-menu, select **Apps**.
3. Select the **Installed Apps** tab.
4. Find your payroll system app and select the gear icon to view the Manage app page.
5. In the **Advanced Settings** section, select **Edit**.
6. In the **Exclude \[Your payroll system] IDs** section, add the IDs of the employee(s) you wish to exclude from the sync.
   - All employee's who's IDs have been added to the list will no longer have their information updated during the sync.
7. Select **Save**.

## Configure email notifications

You can add or change the list of people that get notified when a synchronization happens.

1. From the left sidebar, select **Apps & Bundles**.
2. From the sub-menu, select **Apps**.
3. Select the **Installed Apps** tab.
4. Find your payroll system app and select the gear icon to view the Manage app page.
5. If no email notifications are configured:
   1. Select **Add user.**
   2. Type a name to select someone from your organization.
   3. Continue entering names if needed.
   4. Select **Save**.
6. To add or delete someone from the list:
   1. Select **Edit**.
   2. Select the Trash icon next to a name to delete it.
   3. Type a name to select someone from your organization.
   4. Select **Save.**

## Configure advanced settings

You can customize advance settings your payroll app data syncs to ChartHop. For example, you can exclude some data and set up notifications so that people in your org are notified when data is synchronized.&#x20;

Advanced settings are automatically configured, so you can review these settings and update them if necessary.&#x20;

After you've installed a payroll app, you can update these settings if you need to change them.

| **Field**                     | **Description**                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               | **Default setting**                                                                |
| ----------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------- |
| Exclude IDs                   | If you want to exclude specific individuals from the sync, enter their unique IDs here, separated by commas. IDs can typically be found on employees' profile pages that were created via a payroll sync.                                                                                                                                                                                                                                                                                                                                                                                     | The list of IDs is blank.                                                          |
| Sync historical data          | Include historical changes in your sync. You can configure how many days of data to include.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  | Historical data is included.                                                       |
| Job change history            | Configure the number of days of history you want to include in your synchronized information.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 |                                                                                    |
| Sync all changes made         | Select the changes you want to include in your sync. You can include some or all of the following:<br />* Job titles
* Managers
* Groups&#x20;
* Compensation
* Hire dates                                                                                                                                                                                                                                                                                                                                                                                                                    | All changes are included.                                                          |
| Default location when not set | Define whether or not you want to set the location to Remote or leave it empty if it is not set in your payroll system.                                                                                                                                                                                                                                                                                                                                                                                                                                                                       | Location is set to remote if it is not set in your payroll system.                 |
| Overwrite person fields       | When you choose this option, your payroll system remains the source of truth for the following fields in ChartHop: birthdate, gender, home address and so on. This means any edits you or an employee makes to this data in ChartHop is overwritten when the synchronization takes place. This can pose an issue when someone uses ChartHop to  updates employee fields in ChartHop, without requesting an update in the source system. ChartHop recommends to set this to yes to avoid needing to update both ChartHop and your payroll system when a change is made to one of these fields. | Set to yes. Payroll system data overwrites any changes to person data in ChartHop. |






[title] Acting as a delegate
[path] ChartHop for Employees/Edit your User settings/Untitled/

When someone sets you as their approval delegate, you will receive an in-app notification and email confirming the assignment.

When a delegated approval lands in your queue, it appears in your **My Tasks** list on the ChartHop home screen alongside your own tasks. Each delegated task shows **Delegated by \[Name]** so you always know whose behalf you are acting on. The **Assigned for** column shows the original approver's name.

For time-off approvals, you will also receive the same Slack notification the original approver would get, including interactive Approve and Reject buttons.

## Taking action

From My Tasks, click through to the approval to review it and take action. As a delegate you can:

- **Approve** the request
- **Reject** the request (you can include a reason)
- **Comment** on the request

For scenario approvals, you can also edit the scenario's changes while the approval is pending, the same way the original approver can.

If you are both a direct approver and a delegate for one or more co-approvers in the same stage, a single Approve action resolves all of those slots at once. If you reject, it applies to the first actionable slot and terminates the stage per normal rejection behavior.

## How attribution works

All actions you take as a delegate are attributed to you in the approval history, and recorded as acting on behalf of the original approver. For example, the approval timeline will show: Jane Smith approved on behalf of John Doe.

The original approver receives an in-app notification and email when you approve or reject on their behalf. If you reject with a reason, that reason is included in the notification.

## When the approval completes

Once an approval is fully resolved (approved or rejected), the task is removed from both your queue and the original approver's queue.

[title] Synced data from SuccessFactors
[path] Implementing ChartHop/Apps & Integrations/Payroll systems/Installing payroll apps/SuccessFactors/

The table below lists the default data set that is synced from SuccessFactors to ChartHop.&#x20;

&#x20;

| **ChartField field label**               | **Charthop field code**                                  | **SuccessFactors field code**                                                                                                       |
| ---------------------------------------- | -------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------- |
| Birth Date                               | birthdate                                                | User.dateOfBirth                                                                                                                    |
| City - Home Address                      | address.city                                             | PerAddressDEFLT.city                                                                                                                |
| Country - Home Address                   | address.country                                          | PerAddressDEFLT.country                                                                                                             |
| Currency (Deprecated)                    | currency                                                 | EmpPayCompRecurring.currencyCode                                                                                                    |
| Date                                     | date                                                     | EmpJob.startDate                                                                                                                    |
| Date                                     | date                                                     | EmpPayCompRecurring.startDate, EmployeeTime.createdDateTime                                                                         |
| Depart                                   | depart                                                   | EmpJob.eventReason                                                                                                                  |
| Department                               | department                                               | EmpJob.department                                                                                                                   |
| Employment                               | employment                                               | EmpJob.eventReason                                                                                                                  |
| Ethnicity                                | ethnicity                                                | User.ethnicity                                                                                                                      |
| Fax                                      | contact.workfax                                          | User.fax                                                                                                                            |
| First Name                               | name.last                                                | User.lastName                                                                                                                       |
| Gender                                   | gender                                                   | PerPersonal.gender                                                                                                                  |
| Home Phone                               | contact.homephone                                        | User.homePhone                                                                                                                      |
| Last Name                                | name.first                                               | User.firstName                                                                                                                      |
| Location                                 | location                                                 | EmpJob.location                                                                                                                     |
| Manager                                  | manager                                                  | EmpJob.managerId                                                                                                                    |
| Middle Name                              | name.middle                                              | User.mi                                                                                                                             |
| Mobile                                   | contact.mobilephone                                      | User.cellPhone                                                                                                                      |
| Preferred First Name                     | name.pref                                                | User.nickname                                                                                                                       |
| Promotion                                | promotion                                                | EmpJob.eventReason                                                                                                                  |
| State - Home Address                     | address.state                                            | PerAddressDEFLT.externalCode                                                                                                        |
| Street 1 - Home Address                  | address.street1                                          | PerAddressDEFLT.address1                                                                                                            |
| Street 2 - Home Address                  | address.street2                                          | PerAddressDEFLT.address2                                                                                                            |
| Street 3 - Home Address                  | address.street3                                          | PerAddressDEFLT.address3                                                                                                            |
| Team                                     | team                                                     | User.division                                                                                                                       |
| Title                                    | title                                                    | EmpJob.jobTitle                                                                                                                     |
| Work email                               | contact.workemail                                        | User.email                                                                                                                          |
| Work phone                               | contact.workphone                                        | User.businessPhone                                                                                                                  |
| Zip/Postal - Home Address                | address.postal                                           | PerAddressDEFLT.zipCode                                                                                                             |
| *Used to store compensation information* | type                                                     | EmpJob.eventReason                                                                                                                  |
| *Used to store compensation information* | base, hours, hourly, variable, variabletype, variablepct | EmpPayCompRecurring.payComponent, EmpPayCompRecurring.paycompvalue, EmpPayCompRecurring.frequency, EmpJob.standardHours, EmpJob.fte |
| *Used to store profile photos*           | imageurl                                                 | Photo.id                                                                                                                            |
| *Used to store time off information*     | timeoff.id                                               | EmployeeTime.externalCode                                                                                                           |
| *Used to store time off information*     | timeoff.type                                             | EmployeeTime.timeType                                                                                                               |
| *Used to store time off information*     | timeoff.startdate                                        | EmployeeTime.startDate                                                                                                              |
| *Used to store time off information*     | timeoff.enddate                                          | EmployeeTime.endDate                                                                                                                |
| *Used to store time off information*     | timeoff.approval                                         | EmployeeTime.approvalStatus                                                                                                         |
| *Used to store time off information*     | timeoff.hours                                            | EmployeeTime.quantityInHours                                                                                                        |
| *Used to store time off information*     | timeoff.days                                             | EmployeeTime.quantityInDays                                                                                                         |
| *Used to store time off information*     | timeoff.note                                             | EmployeeTime.comment                                                                                                                |


[title] Employee Profiles
[path] Getting around in ChartHop/

With employee profiles you can complete tasks, submit forms, update personal information, conduct performance reviews, conduct 1:1s, and many other activities.

::embed[]{url="https://youtu.be/dZHUaxOVasU"}

## Employee profile page

The employee profile page has tabs which contain information about the employee's goals, tasks, performance, and more. By default, the page displays an overview of information about an employee in the **About** tab.

### Profile panel

The profile panel contains a list of basic information about an employee, for example: start date, gender, and work email. It also includes other fields like personal accounts from LinkedIn, Twitter, and Github.

### Reports to panel

The **Reports to&#x20;**&#x70;anel shows which manager an employee reports to, and also contains a list of the employee's direct and indirect reports. To view profiles for an employee's direct and indirect reports, select their profile image.

### Job Description

The **Job Description** panel displays a general description of the employee's job. If no information has been entered, employees with edit permission are prompted to add information. If the tab is empty and the employee cannot edit it, the Job Description tab is not shown.

Employees with the correct permissions can also update the job description by editing the job. [Learn more](https://docs.charthop.com/editing-employee-profiles).&#x20;

### Employee Details

The **Employee Details** panel contains a list of miscellaneous information about an employee. The information available in the panel is based on the results of questionnaires and surveys filled out by the employee.


[title] View your profile information
[path] ChartHop for Employees/Customize your employee profile/

You can view basic information about yourself in your profile, including your home address, preferred name, and email address. When your organization has custom fields set up, those fields include additional information about yourself.

:::hint{type="warning"}
Please note that some of these fields may be managed by your HR team and should not be edited. To prevent losing any of your information, please reach out to your HR team before making changes and to understand which fields should not be edited.
:::

![Edit person](https://api.archbee.com/api/optimize/CXAjUAezd9VEEVQBIYmdw/Lo7jNs5gCuzcU-qQzgINa_editmyinfo.png)

To view your basic information:

1. From the left sidebar, select **My Profile**.
2. In the upper right, find the **View on Org Chart** ▼ dropdown menu. From the list of options select **Edit my info**.
3. View your information in the **Edit person** dialog.
   - **Basic info** - Includes general information such as your name, birthdate, emails, phone numbers, addresses, gender, ethnicity, and more. For descriptions of basic info fields, see the table below.
   - **Custom fields** - Includes additional information collected by your organization. The fields on this tab can vary depending on your organization.
4. Select **Save** when you're finished.

### Basic info fields

This table describes the Basic info fields on the **Edit Person** dialog:

:::hint{type="warning"}
Please note that some of these fields may be managed by your HR team and should not be edited. To prevent losing any of your information, please reach out to your HR team before making changes.
:::

| **Field**           | **Description**                                                                                             |
| ------------------- | ----------------------------------------------------------------------------------------------------------- |
| First name          | Your first name<br />(Required)                                                                             |
| Preferred name      | Your preferred first name.<br />This overwrites your first name throughout ChartHop.                        |
| Last name           | Your last name<br />(Required)                                                                              |
| Preferred last name | Your preferred last name.<br />This overwrites your last name throughout ChartHop.                          |
| Middle name         | Your middle name                                                                                            |
| Work email          | Your work email                                                                                             |
| Home email          | Your personal email                                                                                         |
| Mobile              | Your mobile phone number.<br />For international numbers, add the plus (**+**) symbol and the country code. |
| Work phone          | Your work phone number.<br />For international numbers, add the plus (**+**) symbol and the country code.   |
| LinkedIn            | The url to your LinkedIn page                                                                               |
| X (Twitter)         | The url to your X (Twitter) handle                                                                          |
| Github              | The url to your Github profile                                                                              |
| GitLab              | The url to your GitLab profile                                                                              |
| Home Address        | Your personal home address                                                                                  |
| Image               | The image that is used as your org profile image                                                            |
| Birth date          | Your date of birth                                                                                          |
| Pronouns            | Your pronouns.<br />These display to the rest of your organization on your profile next to your name.       |
| Gender              | Your gender                                                                                                 |
| Ethnicity           | Your ethnicity                                                                                              |

:::hint{type="info"}
[Modules:](https://www.charthop.com/pricing/) <font color="#000000">HRIS | </font>**Engagement | Goals | Performance |&#x20;**<font color="#000000">Compensation Reviews | </font>**Headcount Planning**
:::

[title] Synced data from Namely
[path] Implementing ChartHop/Apps & Integrations/Payroll systems/Installing payroll apps/Untitled/

The following table lists the default data set that is synced from Namely to ChartHop.

ChartHop customers can work with ChartHop implementation services to customize what is synced.

:::hint{type="info"}
You must include the country code as a part of any international number for it to be recognized as such within ChartHop. When you are syncing phone numbers from an external system, such as a payroll system or ATS, be sure the country code is included in the phone number that is listed in the external system. This also applies when updating data through a spreadsheet.
:::

| **ChartHop field label**       | **ChartHop field code** | **Namely field code**                                |
| ------------------------------ | ----------------------- | ---------------------------------------------------- |
| Base                           | base                    | members.pay, members.payBasis, members.nonUsEmployee |
| Birth Date                     | birthdate               | members.dateOfBirth                                  |
| City- Home Address             | address.city            | members.address.city                                 |
| Country - Home Address         | address.country         | members.address.country                              |
| Currency                       | currency                | members.pay, members.payBasis, members.nonUsEmployee |
| Department                     | department              | members.department                                   |
| Employment                     | employment              | members.memberType                                   |
| End Date                       | enddate                 | members.terminatedDate                               |
| Ethnicity                      | ethnicity               | members.eeo1Race.value                               |
| First Name                     | name.last               | members.name, members.firstName                      |
| Gender                         | gender                  | members.eeo1Gender.value                             |
| Home Email                     | contact.homeemail       | members.emailAddresses.home                          |
| Home Phone                     | contact.homephone       | members.phoneNumbers.home                            |
| Hourly                         | hourly                  | members.pay, members.payBasis, members.nonUsEmployee |
| Location                       | location                | members.office                                       |
| Manager                        | manager                 | members.manager.uuid                                 |
| Mobile                         | contact.mobilephone     | members.phoneNumbers.cell                            |
| Start Date                     | startdate               | members.startDate                                    |
| State - Home Address           | address.state           | members.address.state                                |
| Street 1 - Home Address        | address.street1         | members.address.street1                              |
| Street 2 - Home Address        | address.street2         | members.address.street2                              |
| Title                          | title                   | members.title                                        |
| Work Email                     | contact.workemail       | members.emailAddresses.work                          |
| Work Phone                     | contact.workphone       | members.phoneNumbers.office                          |
| Zip/Postal - Home Address      | address.postal          | members.address.postal\_code                         |
| *Used to store profile photos* | imageurl                | members.photoUrl                                     |


[title] Installing the Rippling app
[path] Implementing ChartHop/Apps & Integrations/Payroll systems/Installing payroll apps/Rippling (licensed API only)/

This section covers setting up the Rippling integration app, which allows you to sync your employee roster to ChartHop. 

## Review your payroll system data

Your ChartHop payroll app syncs your employee data from your payroll system and builds your org chart in ChartHop. Once your Org Chart is created, you can start using ChartHop.

ChartHop recommends reviewing the data in your payroll system to ensure it is what you expect before you sync it to ChartHop. For example, if an employee has multiple system IDs in your payroll system, that employee’s data won’t sync properly. You should also be sure that your payroll system reflects an accurate view of your organization, including reporting structures, employee locations, and compensation. 

## Setting up the Rippling payroll app

If your Rippling account includes API access and you'd like to use ChartHop's Rippling app to connect your Rippling data to ChartHop, please contact your ChartHop implementation specialist for assistance at [implementation@charthop.com](#).

## Install the Rippling app

After you have Rippling account API access, you can install the Workday integration app in ChartHop.

1. From the left sidebar, select **Apps & Bundles**.
2. From the sub-menu, select **Apps,&#x20;**&#x69;f not already pre-selected.
3. Select the **Availible Apps** tab.
4. Scroll to your payroll app and select **Install&#x20;**&#x6F;n the far right of the respective app's row.

### Configure data sync settings for Rippling

Data sync settings control how and what data is synced to ChartHop from your payroll system. For example, you can choose whether or not to create a backfill position in ChartHop when you have a departure in your payroll system. Other advanced settings allow you to exclude certain employees.

**Automatically create backfills** - This option creates a backfill position in ChartHop (open job) when an employee is marked as departed in your payroll system.

### Configure advanced settings

Advanced settings allow you to better control how your payroll data syncs to ChartHop.

ChartHop recommends accepting the default values for these settings. Please get in touch with ChartHop Support or your Customer Success Manager for assistance if needed.

1. Expand the **Advanced settings** section. 
2. Use the following table to guide you through advanced settings decisions. 
3. When finished, select **Next step**.

| **Setting**                              | **Description&#xA0;**                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               |
| ---------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Missing location information<br /><br /> | Select one of the two options for what should happen if location information is set for an employee.<br />* **Set Remote as the default location in ChartHop** - When selected, any open role that does not have a location set will be set to have a Remote location in ChartHop.
* **Leave location blank in ChartHop&#x20;**- When selected, any open role that does not have a location set in your payroll app will not have a location set in ChartHop.                                                                                                                                                       |
| Advanced sync options                    | Select the data changes you want to include in your sync. You can include some or all of the following employee data: <br />* Job titles 
* Managers 
* Groups 
* Compensation 
* Hire dates                                                                                                                                                                                                                                                                                                                                                                                                                        |
| Overwrite person fields <br /><br />     | ChartHop recommends using this setting to avoid needing to update both ChartHop and your payroll system when a change is made to any field value that is synced from your payroll system.<br /><br />When you choose this option, your payroll system remains the source of truth for the following fields in ChartHop: birthdate, gender, home address, and so on. Any edits you or an employee make to this data in ChartHop are overwritten during synchronization. This can pose an issue when someone uses ChartHop to update employee fields in ChartHop, without requesting an update in the source system.  |
| Historical data                          | Choose whether or not you want to sync historical data. You can turn this off if you want to exclude any historical changes before the date of your initial sync.                                                                                                                                                                                                                                                                                                                                                                                                                                                   |
| Exclude IDs                              | To exclude specific individuals from the sync, enter their unique payroll system IDs here, separated by commas. <br /><br />Generally, the company ID should be left blank unless otherwise informed by your ChartHop Customer Success team.                                                                                                                                                                                                                                                                                                                                                                        |

### Run an initial one-time sync of your payroll data

When you first configure your payroll app, you should run a one-time sync to verify that the sync is operating as you expect it to and that your data is what you expect.

To run a one-time sync:

1. In the setup wizard, select the **Run one-time sync** option.
2. Select **Finish setup**.

## Verify your data in ChartHop

After running your first sync, you can use the Data Sheet and Org Chart pages to spot-check your data. You can use the Sync History page to verify when the sync was run and if it encountered any issues. 

You should spot-check your ChartHop org for the following:

- Correct management reporting lines
- Compensation data
- Employee information on profiles (names, addresses, and so on)
- Job titles
- Departments
- Locations

:::hint{type="info"}
Remember that most issues with your synced data originate in your payroll system. ChartHop allows you to visualize your employee data to make finding these discrepancies easier. Still, you’ll need to fix any data discrepancies in your payroll system and rerun the sync to view the fixes in ChartHop.
:::

## Configure your payroll app sync to run daily

After you’ve synced your data for the first time and verified your Org Chart, you should configure a daily sync. The value of syncing your payroll data to ChartHop is that it ensures that your employee data is always up to date. 

1. From the left sidebar, select **Apps & Bundles**.
2. From the sub-menu, select **Apps,&#x20;**&#x69;f not already pre-selected.
3. Select the **Installed Apps** tab.
4. Scroll to your payroll app and select the gear (settings) icon on the far right of the row to view app settings.
5. Within the **App status & sync** settings section, select the **Edit** (pencil) icon.
6. Toggle the auto-sync option to on.
7. Select **Save**.


[title] ChartHop Help Center
[path] /

![](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/JML-0qznTWyz_DdFNDUUZ_help-centerbanner.png "Search for answers by pressing Ctrl+K (PC) or Command-K (Mac).")

::::LinkArray{contentSource="CUSTOM"}
:::LinkArrayItem{headerType="IMAGE" headerImage="https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/PqMC7zod0iNai1eXBNszT_for-employees.jpg"}
[Getting around in ChartHop](docId\:mrDescu82COnMxRDkxhCX)&#x20;
:::

:::LinkArrayItem{headerType="IMAGE" headerImage="https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/2avHZ0rJgl-k5kdEqDgXI_istock-1388719795edit-small-2.png"}
[ChartHop for Employees](docId\:fvtIhwCqWDCiAkuW5eGpX)
:::

:::LinkArrayItem{headerType="IMAGE" headerImage="https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/hP17bnwjAMiht02T-ZrrN_1hj1zxxb29c5ybwovay6charthop-for-administrators.jpg"}
[ChartHop for Administrators](docId\:rU8bqY2J1GIbPL1TD6vUm)
:::

:::LinkArrayItem{headerType="IMAGE" headerImage="https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/0TvnC3jOoIvmiG-qWJ5eW_charthop-video-library.png"}
[ChartHop Video Library](docId\:Kt_y40YueYU4QSxLBQEcc)
:::

:::LinkArrayItem{headerType="IMAGE" headerImage="https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/5w8HBES2D5N7pHohztJkP_carrot-queries-and-filter.jpg"}
[Carrot filters and queries](docId\:fL-eMyhB9F8NzL2Vza9fq)
:::

:::LinkArrayItem{headerType="IMAGE" headerImage="https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/5MpLS6Y5hrYK67X5uiEE5_charthop-for-developers.jpg"}
[ChartHop for Developers](docId\:J5KXvii0fIMKYynM6bzb0)
:::

:::LinkArrayItem{headerType="IMAGE" headerImage="https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/H3kyprblxEP-CpbAbJsVL_implementing-charthop.jpg"}
[Implementing ChartHop](docId:4t7K1Q4abrRcE6oSz-FLf)
:::
::::


[title] Home page
[path] Getting around in ChartHop/

When you sign in to ChartHop, the **Home** page displays. What you see here is [configurable by your ChartHop administrator.](docId\:k8dapW8Nr_NvVbMS7uWAb)

::embed[]{url="https://youtube.com/watch?v=_ybPLv8r_0E&si=EnSIkaIECMiOmarE"}

The upper area on the ChartHop **Home** page contains the following sections:&#x20;

- In the upper right corner, the total number of **People** and **Active Open Jobs&#x20;**&#x66;or your organization.
- If you have any [tasks](docId\:rAwZRnOMOSRb1Gnm6Hcvk), such as forms to complete, the list of items appears here.
- The next section is a customizable message from your organization.

![Home page](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/BVCvboswBMnj1ivPG7LqS_screenshot-2024-01-19-at-11950-pm.png)

### Org Summary on the Home page

On the lower area of the **Home** page for all ChartHop packages, three panels show the following information:

- **People Moves&#x20;**- Recent title changes, transfers, promotions, or departures.
- **Open Jobs&#x20;**- Open positions in your org.
- **Anniversaries and Birthdays&#x20;**- Current work anniversaries and birthdays.

:::hint{type="info"}
People moves are Org public unless you set their announce date to the future. [Learn more](https://docs.charthop.com/announcing-org-changes).



Open job visibility is determined by ChartHop's roles and permissions. For example, you can set a job's Sensitivity to **Highly sensitive** so that only users with access to that level can view it. [Learn more](https://docs.charthop.com/sensitive-data).&#x20;
:::


[title] TriNet
[path] Implementing ChartHop/Apps & Integrations/Payroll systems/Installing payroll apps/

With the TriNet app, you can sync your payroll data to ChartHop, which automatically builds your org chart and keeps it up to date. Synced data includes contact information, demographics, compensation, managers, departments, and locations. 

### TriNet at a glance

The following table summarizes ChartHop’s TriNet app. 

| **Supported ChartHop packages**      | - <font color="#000000">Standard </font>
- <font color="#000000">Premium</font>                                                                                                                                                                                                                                                                    |
| ------------------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Prerequisites**                    | A ChartHop account with the Owner role and a Trinet API key.                                                                                                                                                                                                                                                                                       |
| **API key permissions**              | As a TriNet Integration Administrator, create an API key using the steps provided in the Integration Center.                                                                                                                                                                                                                                       |
| **Data direction**                   | Inbound from Trinet to ChartHop                                                                                                                                                                                                                                                                                                                    |
| **Sync cadence**                     | Daily or as needed                                                                                                                                                                                                                                                                                                                                 |
| **Effective dating support**         | No                                                                                                                                                                                                                                                                                                                                                 |
| **Additional field mapping support** | For Premium customers, additional field mapping is available for the following Trinet field categories: <br />- [Employees](https://developers.trinet.com/trinet-apis-employee)
- [Time off calendar](https://developers.trinet.com/trinet-apis-time-off)<br />Please direct all custom mapping requests to ChartHop’s Professional Services team. |
| **Payroll app overview**             | Read an [overview](https://docs.charthop.com/payroll-system-apps) of how how payroll apps work in ChartHop.                                                                                                                                                                                                                                        |
| **Synced Data**                      | The default [synced data](https://docs.charthop.com/synced-data-from-trinet) from TriNet to ChartHop.                                                                                                                                                                                                                                              |


[title] Installing the Humaans app
[path] Implementing ChartHop/Apps & Integrations/Payroll systems/Installing payroll apps/Untitled/

This section covers setting up the Humaans integration app, which allows you to sync your employee roster to ChartHop. 

## Review your payroll system data

Your ChartHop payroll app syncs your employee data from your payroll system and builds your org chart in ChartHop. Once your Org Chart is created, you can start using ChartHop.

ChartHop recommends reviewing the data in your payroll system to ensure it is what you expect before you sync it to ChartHop. For example, if an employee has multiple system IDs in your payroll system, that employee’s data won’t sync properly. You should also be sure that your payroll system reflects an accurate view of your organization, including reporting structures, employee locations, and compensation. 

## Create a Humaans API key

For ChartHop to access your organization's Humaan's payroll data, you need to create an API key to use when configuring the app.

You use Humaans to create this API Key. 

1. In Humaans, select your profile icon at the top-right corner.
2. Select **API Access Tokens**.
3. Select **Generate New Token**, and create an API token named "ChartHop."

## Install the Humaans app

After you have your Humaans API key, you can install the Humaans integration app in ChartHop.

1. From the left sidebar, select **Apps & Bundles**.
2. From the sub-menu, select **Apps,&#x20;**&#x69;f not already pre-selected.
3. Select the **Availible Apps** tab.
4. Scroll to your payroll app and select **Install&#x20;**&#x6F;n the far right of the respective app's row.

### Connect the Humaans app

When you select install, you'll be prompted to walk through configuring your payroll app.

1. &#x20;the provided field.
2. Select **Next step**.

### Configure data sync settings for Humaans

Data sync settings control how and what data is synced to ChartHop from your payroll system. For example, you can choose whether or not to create a backfill position in ChartHop when you have a departure in your payroll system. Other advanced settings allow you to exclude certain employees.

- Select one of the two options:
  - **Automatically create backfills** - This option creates a backfill position in ChartHop (open job) when an employee is marked as departed in your payroll system.
  - **Sync departures only** - This option removes the departed employee from ChartHop. The employee's job history remains in ChartHop.

### Configure advanced settings

Advanced settings allow you to better control how your payroll data syncs to ChartHop.

ChartHop recommends accepting the default values for these settings. Please get in touch with ChartHop Support or your Customer Success Manager for assistance if needed.

1. Expand the **Advanced settings** section. 
2. Use the following table to guide you through advanced settings decisions. 
3. When finished, select **Next step**.

| **Setting**                              | **Description&#xA0;**                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               |
| ---------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Missing location information<br /><br /> | Select one of the two options for what should happen if location information is set for an employee.<br />* **Set Remote as the default location in ChartHop** - When selected, any open role that does not have a location set will be set to have a Remote location in ChartHop.
* **Leave location blank in ChartHop&#x20;**- When selected, any open role that does not have a location set in your payroll app will not have a location set in ChartHop.                                                                                                                                                       |
| Advanced sync options                    | Select the data changes you want to include in your sync. You can include some or all of the following employee data: <br />* Job titles 
* Managers 
* Groups 
* Compensation 
* Hire dates                                                                                                                                                                                                                                                                                                                                                                                                                        |
| Overwrite person fields <br /><br />     | ChartHop recommends using this setting to avoid needing to update both ChartHop and your payroll system when a change is made to any field value that is synced from your payroll system.<br /><br />When you choose this option, your payroll system remains the source of truth for the following fields in ChartHop: birthdate, gender, home address, and so on. Any edits you or an employee make to this data in ChartHop are overwritten during synchronization. This can pose an issue when someone uses ChartHop to update employee fields in ChartHop, without requesting an update in the source system.  |
| Historical data                          | Choose whether or not you want to sync historical data. You can turn this off if you want to exclude any historical changes before the date of your initial sync.                                                                                                                                                                                                                                                                                                                                                                                                                                                   |
| Exclude IDs                              | To exclude specific individuals from the sync, enter their unique payroll system IDs here, separated by commas.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     |
| Job change history<br />                 | When importing job data into ChartHop, include changes within the specified period.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 |

### Run an initial one-time sync of your payroll data

When you first configure your payroll app, you should run a one-time sync to verify that the sync is operating as you expect it to and that your data is what you expect.

To run a one-time sync:

1. In the setup wizard, select the **Run one-time sync** option.
2. Select **Finish setup**.

## Verify your data in ChartHop

After running your first sync, you can use the Data Sheet and Org Chart pages to spot-check your data. You can use the Sync History page to verify when the sync was run and if it encountered any issues. 

You should spot-check your ChartHop org for the following:

- Correct management reporting lines
- Compensation data
- Employee information on profiles (names, addresses, and so on)
- Job titles
- Departments
- Locations

:::hint{type="info"}
Remember that most issues with your synced data originate in your payroll system. ChartHop allows you to visualize your employee data to make finding these discrepancies easier. Still, you’ll need to fix any data discrepancies in your payroll system and rerun the sync to view the fixes in ChartHop.
:::

## Configure your payroll app sync to run daily

After you’ve synced your data for the first time and verified your Org Chart, you should configure a daily sync. The value of syncing your payroll data to ChartHop is that it ensures that your employee data is always up to date. 

1. From the left sidebar, select **Apps & Bundles**.
2. From the sub-menu, select **Apps,&#x20;**&#x69;f not already pre-selected.
3. Select the **Installed Apps** tab.
4. Scroll to your payroll app and select the gear (settings) icon on the far right of the row to view app settings.
5. Within the **App status & sync** settings section, select the **Edit** (pencil) icon.
6. Toggle the auto-sync option to on.
7. Select **Save**.


[title] How payroll apps connect
[path] Implementing ChartHop/Apps & Integrations/Payroll systems/

When you set up your payroll app, you'll need to consider the following aspects of installation and configuration:

- Authentication
- Configuration
- Field Mapping

### Authentication

You'll need to create a secure connection between ChartHop and your payroll system. In some cases, you need to enlist the help of a representative from ChartHop or your payroll system or both to ensure you have the correct credentials to connect your payroll system with CharHop. Typically, authentication will be established by one of the three methods:

- API Keys
- Administrative usernames/passwords
- Oauth flow

### Configuration

After authenticating your payroll app integration, the next step is to configure it. You’ll be able to fine tune the relationship between ChartHop and your payroll system by defining the integration’s behaviors for:

- Data sync frequency
- Data sync inclusions/exclusions
- Email notifications

### Mapping additional data

Once you have set up your payroll app, you can optionally map additional payroll fields to ChartHop or change how the default fields are mapped. Some of these are established already by default. You can add more or change how they are mapped to ChartHop fields.

ChartHop's payroll apps each support a different subset of ChartHop fields. This determines what data you can sync from your payroll provider to ChartHop. For example, if a payroll system referred to a data field type as a “termination”, ChartHop would need to register it as a “departure” in order to be understood correctly.

Download the following PDF for a quick view of which ChartHop fields are supported by which payroll app.&#x20;

::File{src="https://archbee-doc-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/Javr_XyLghod_gt6lgRCW_charthop-fields-by-payroll-app.pdf" label="ChartHop fields by payroll app.pdf"}


[title] Installing the ADP (Legacy) app
[path] Implementing ChartHop/Apps & Integrations/Payroll systems/Installing payroll apps/ADP/

This section covers setting up the ADP (Legacy) app, which allows you to sync your employee roster to ChartHop. 

**Please note:&#x20;**&#x54;his app is considered legacy. For the best experience, we recommend our newer [Installing the ADP Data Connector](docId\:Hij0yqV02zXpb29MuH-kK) app.&#x20;

# Install Instructions

## Review your payroll system data

Your ChartHop payroll app syncs your employee data from your payroll system and builds your org chart in ChartHop. Once your Org Chart is created, you can start using ChartHop.

ChartHop recommends reviewing the data in your payroll system to ensure it is what you expect before you sync it to ChartHop. For example, if an employee has multiple system IDs in your payroll system, that employee’s data won’t sync properly. You should also be sure that your payroll system reflects an accurate view of your organization, including reporting structures, employee locations, and compensation. 

## Obtain API Credentials for ADP

For ChartHop to access your organization's ADP payroll data, you need to obtain an API client ID and secret from your ADP representative. This information allows ChartHop to connect to ADP to receive your employee data.

You can obtain an API key by emailing your ADP representative. When you do so, include [support@charthop.com](#) so that a ChartHop representative can help you. 

## Install the ADP app

After you have your ADP API key, you can install the ADP integration app in ChartHop.

1. From the left sidebar, select **Apps & Bundles**.
2. From the sub-menu, select **Apps,&#x20;**&#x69;f not already pre-selected.
3. Select the **Availible Apps** tab.
4. Scroll to your payroll app and select **Install&#x20;**&#x6F;n the far right of the respective app's row.

### Connect the ADP app

You'll be prompted to configure your payroll app when you select to install.

1. In the **Enter your API credentials** step, enter the following information that you received from your ADP representative in the following order:
   - Client ID
   - Secret
2. Select **Next step**.

### Configure data sync settings for ADP

Data sync settings control how and what data is synced to ChartHop from your payroll system. For example, you can choose whether or not to create a backfill position in ChartHop when you have a departure in your payroll system. Other advanced settings allow you to exclude certain employees.

- Select one of the two options:
  - **Automatically create backfills** - This option creates a backfill position in ChartHop (open job) when an employee is marked as departed in your payroll system.
  - **Sync departures only** - This option removes the departed employee from ChartHop. The employee's job history remains in ChartHop.

### Configure advanced settings

Advanced settings allow you to better control how your payroll data syncs to ChartHop.

ChartHop recommends accepting the default values for these settings. Please get in touch with ChartHop Support or your Customer Success Manager for assistance if needed.

1. Expand the **Advanced settings** section. 
2. Use the following table to guide you through advanced settings decisions. 

| **Setting**                               | **Description&#xA0;**                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               |
| ----------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Missing location information <br /><br /> | Select one of the two options for what should happen if location information is set for an open role:<br />* **Set Remote as the default location in ChartHop** - When selected, any open role that does not have a location set will be set to have a Remote location in ChartHop.
* **Leave location blank in ChartHop&#x20;**- When selected, any open role that does not have a location set in your payroll app will not have a location set in ChartHop.                                                                                                                                                      |
| Advanced sync options                     | Select the data changes you want to include in your sync. You can include some or all of the following employee data: <br />* Job titles 
* Managers 
* Groups 
* Compensation 
* Hire dates                                                                                                                                                                                                                                                                                                                                                                                                                        |
| Overwrite person fields <br /><br />      | ChartHop recommends using this setting to avoid needing to update both ChartHop and your payroll system when a change is made to any field value that is synced from your payroll system.<br /><br />When you choose this option, your payroll system remains the source of truth for the following fields in ChartHop: birthdate, gender, home address, and so on. Any edits you or an employee make to this data in ChartHop are overwritten during synchronization. This can pose an issue when someone uses ChartHop to update employee fields in ChartHop, without requesting an update in the source system.  |
| Historical data                           | Choose whether or not you want to sync historical data. You can turn this off if you want to exclude any historical changes before the date of your initial sync.                                                                                                                                                                                                                                                                                                                                                                                                                                                   |
| Exclude IDs                               | To exclude specific individuals from the sync, enter their unique payroll system IDs here, separated by commas.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     |
| Include ADP companies<br />               | Indicate the ADP companies you want to include in your sync. You should set this only if you track multiple companies in your ADP instance.                                                                                                                                                                                                                                                                                                                                                                                                                                                                         |

### Run an initial one-time sync of your payroll data

When you first configure your payroll app, you should run a one-time sync to verify that the sync is operating as you expect it to and that your data is what you expect.

To run a one-time sync:

1. In the setup wizard, select the **Run one-time sync** option.
2. Select **Finish setup**.

## Verify your data in ChartHop

After running your first sync, you can use the Data Sheet and Org Chart pages to spot-check your data. You can use the Sync History page to verify when the sync was run and if it encountered any issues. 

You should spot-check your ChartHop org for the following:

- Correct management reporting lines
- Compensation data
- Employee information on profiles (names, addresses, and so on)
- Job titles
- Departments
- Locations

:::hint{type="info"}
Remember that most issues with your synced data originate in your payroll system. ChartHop allows you to visualize your employee data to make finding these discrepancies easier. Still, you’ll need to fix any data discrepancies in your payroll system and rerun the sync to view the fixes in ChartHop.
:::

## Configure your payroll app sync to run daily

After you’ve synced your data for the first time and verified your Org Chart, you should configure a daily sync. The value of syncing your payroll data to ChartHop is that it ensures that your employee data is always up to date. 

1. From the left sidebar, select **Apps & Bundles**.
2. From the sub-menu, select **Apps,&#x20;**&#x69;f not already pre-selected.
3. Select the **Installed Apps** tab.
4. Scroll to your payroll app and select the gear (settings) icon on the far right of the row to view app settings.
5. Within the **App status & sync** settings section, select the **Edit** (pencil) icon.
6. Toggle the auto-sync option to on.
7. Select **Save**.


[title] Installing the ADP Data Connector
[path] Implementing ChartHop/Apps & Integrations/Payroll systems/Installing payroll apps/ADP/

This section covers setting up the ADP (Legacy) app, which allows you to sync your employee roster to ChartHop. 

For a full list of data fields included in the integration, see [Synced data from ADP](docId\:zYhki5mXRUjs_RQrGL4Iu).

# Install Instructions

## Review your payroll system data

Your ChartHop payroll app syncs your employee data from your payroll system and builds your org chart in ChartHop. Once your Org Chart is created, you can start using ChartHop.

ChartHop recommends reviewing the data in your payroll system to ensure it is what you expect before you sync it to ChartHop. For example, if an employee has multiple system IDs in your payroll system, that employee’s data won’t sync properly. You should also be sure that your payroll system reflects an accurate view of your organization, including reporting structures, employee locations, and compensation. 

## Purchase ChartHop Connector for ADP Workforce Now

The Data Connector is installed through the ADP Marketplace.&#x20;

:::hint{type="info"}
The Data Connector requires a $360/yr fee paid to ADP.
:::

1. The purchasing/installing user will need to have admin privileges in ADP WFN.
2. Navigate to the ADP Data Connector:
   - **Existing** ChartHop customers: navigate to the *ChartHop Data Connector marketplace listing*
   - **New** ChartHop customers: purchase *ChartHop with the Data Connector here.*
3. Click **Buy Now**
4. During checkout, you will be asked for your **Authorization Code**.&#x20;
   1. To find your **Authorization Code,&#x20;**&#x66;rom the left sidebar, select **Apps & Bundles**.
   2. From the sub-menu, select **Authorization Codes.**

![ADP checkout flow](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/JVUbzVuIjbFUpBdvLR3fk_screen-shot-2023-09-05-at-41214-pm.png "ADP checkout flow")

![Enter authorization code](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/Mgl2dP2A5-o21msMT54Cp_screen-shot-2023-09-05-at-41229-pm.png "Enter ChartHop authorization code")

![Find your authorization code on ChartHop](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/hUeeFEjnKouUWQStODtiF_screenshot-2024-01-24-at-41022-pm.png "Find your ChartHop authorization code")

&#x20;   5\. Once purchased, the ADP Data Connector app will be installed in your ChartHop org automatically.
&#x20;   6\. After checkout, you will need to give ChartHop consent to [access your ADP data](https://docs.charthop.com/synced-data-from-adp). Check your email for the consent link, generally titled **"Connection Request"**. This email will be sent from an ADP email address. Follow the instructions in the link to grant ChartHop access to your ADP data.

### Configure data sync settings for ADP

Data sync settings control how and what data is synced to ChartHop from your payroll system. For example, you can choose whether or not to create a backfill position in ChartHop when you have a departure in your payroll system. Other advanced settings allow you to exclude certain employees.

- Select one of the two options:
  - **Automatically create backfills** - This option creates a backfill position in ChartHop (open job) when an employee is marked as departed in your payroll system.
  - **Sync departures only** - This option removes the departed employee from ChartHop. The employee's job history remains in ChartHop.

### Configure advanced settings

Advanced settings allow you to better control how your payroll data syncs to ChartHop.

ChartHop recommends accepting the default values for these settings. Please get in touch with ChartHop Support or your Customer Success Manager for assistance if needed.

1. Expand the **Advanced settings** section. 
2. Use the following table to guide you through advanced settings decisions. 

| **Setting**                               | **Description&#xA0;**                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               |
| ----------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Missing location information <br /><br /> | Select one of the two options for what should happen if location information is set for an open role:<br />* **Set Remote as the default location in ChartHop** - When selected, any open role that does not have a location set will be set to have a Remote location in ChartHop.
* **Leave location blank in ChartHop&#x20;**- When selected, any open role that does not have a location set in your payroll app will not have a location set in ChartHop.                                                                                                                                                      |
| Advanced sync options                     | Select the data changes you want to include in your sync. You can include some or all of the following employee data: <br />* Job titles 
* Managers 
* Groups 
* Compensation 
* Hire dates                                                                                                                                                                                                                                                                                                                                                                                                                        |
| Overwrite person fields <br /><br />      | ChartHop recommends using this setting to avoid needing to update both ChartHop and your payroll system when a change is made to any field value that is synced from your payroll system.<br /><br />When you choose this option, your payroll system remains the source of truth for the following fields in ChartHop: birthdate, gender, home address, and so on. Any edits you or an employee make to this data in ChartHop are overwritten during synchronization. This can pose an issue when someone uses ChartHop to update employee fields in ChartHop, without requesting an update in the source system.  |
| Historical data                           | Choose whether or not you want to sync historical data. You can turn this off if you want to exclude any historical changes before the date of your initial sync.                                                                                                                                                                                                                                                                                                                                                                                                                                                   |
| Exclude IDs                               | To exclude specific individuals from the sync, enter their unique payroll system IDs here, separated by commas.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     |
| Include ADP companies<br />               | Indicate the ADP companies you want to include in your sync. You should set this only if you track multiple companies in your ADP instance.                                                                                                                                                                                                                                                                                                                                                                                                                                                                         |

### Run an initial one-time sync of your payroll data

When you first configure your payroll app, you should run a one-time sync to verify that the sync is operating as you expect it to and that your data is what you expect.

To run a one-time sync:

1. In the setup wizard, select the **Run one-time sync** option.
2. Select **Finish setup**.

## Verify your data in ChartHop

After running your first sync, you can use the Data Sheet and Org Chart pages to spot-check your data. You can use the Sync History page to verify when the sync was run and if it encountered any issues. 

You should spot-check your ChartHop org for the following:

- Correct management reporting lines
- Compensation data
- Employee information on profiles (names, addresses, and so on)
- Job titles
- Departments
- Locations

:::hint{type="info"}
Remember that most issues with your synced data originate in your payroll system. ChartHop allows you to visualize your employee data to make finding these discrepancies easier. Still, you’ll need to fix any data discrepancies in your payroll system and rerun the sync to view the fixes in ChartHop.
:::

## Configure your payroll app sync to run daily

After you’ve synced your data for the first time and verified your Org Chart, you should configure a daily sync. The value of syncing your payroll data to ChartHop is that it ensures that your employee data is always up to date. 

1. From the left sidebar, select **Apps & Bundles**.
2. From the sub-menu, select **Apps,&#x20;**&#x69;f not already pre-selected.
3. Select the **Installed Apps** tab.
4. Scroll to your payroll app and select the gear (settings) icon on the far right of the row to view app settings.
5. Within the **App status & sync** settings section, select the **Edit** (pencil) icon.
6. Toggle the auto-sync option to on.
7. Select **Save**.


[title] Synced data from Sequoia One
[path] Implementing ChartHop/Apps & Integrations/Payroll systems/Installing payroll apps/Sequoia One/

Once the Sequoia One payroll app has been properly set up, ChartHop will be able to pull Sequoia One data into your ChartHop account.&#x20;

The table below lists all fields that are synced from Sequoia One to ChartHop during a sync. In the first column, we list the name of the field in ChartHop, and in the second column, we list the name of the field in Sequoia One.&#x20;

| **ChartHop field**                                              | **Sequoia One field**       |
| --------------------------------------------------------------- | --------------------------- |
| `address.street1, address.city, address.state, address.country` | `employee.home_address`     |
| `birthdate`                                                     | `employee.birth_date`       |
| `contact.homeemail`                                             | `employee.email`            |
| `contact.homephone, contact.mobilephone`                        | `employee.contact_info`     |
| `contact.workemail`                                             | `employee.work_email`       |
| `department`                                                    | `employee.home_department`  |
| `employment`                                                    | `employee.employment_type`  |
| `ethnicity`                                                     | `employee.ethnicity`        |
| `ethnicity`                                                     | `employee.ethnicity`        |
| `gender`                                                        | `employee.gender`           |
| `hourly, base`                                                  | `employee.compensation`     |
| `location`                                                      | `employee.home_location`    |
| `manager`                                                       | `employee.reports_to`       |
| `name.first, name.middle, name.last, name.pref`                 | `employee.full_name`        |
| `startdate`                                                     | `employee.hire_date`        |
| `title`                                                         | `employee.employee_title`   |
| `type, enddate`                                                 | `employee.termination_date` |


[title] Workflows
[path] Implementing ChartHop/Apps & Integrations/

# Workflows

## Overview

ChartHop connects to a wide range of HRIS, payroll, and ATS systems — but most organizations run more than one of these tools at a time. Workflows documentation covers how to configure and manage ChartHop when multiple integrations are active simultaneously.

Each integration syncs data into ChartHop independently. When two systems touch overlapping data — employee records, headcount, org structure, compensation — the order of operations, source-of-truth configuration, and sync timing all matter. Getting this right prevents duplicate records, incorrect headcount, and org chart inconsistencies.

This section is organized by integration combination. Each guide covers how the two systems interact inside ChartHop, recommended configuration, and how to troubleshoot issues that only surface when both integrations are running.

## When to Use This Section

Use these guides if you are:

- Setting up ChartHop with more than one integration active at the same time
- Troubleshooting data issues that may stem from sync conflicts between two systems
- Onboarding a new integration alongside an existing one and need to understand how they will interact
- Configuring a source of truth for employee records when multiple systems could claim ownership

If you are setting up a single integration in isolation, refer to that integration's standalone documentation instead.

## How Workflows Are Structured

Each workflow guide covers:

- **How the integrations interact** — where they share data, where conflicts can arise, and which system should own what
- **Recommended configuration** — sync order, timing, and setup sequence
- **Common issues and troubleshooting** — problems that only occur when both integrations are active

## Available Workflow Guides

### HRIS + ATS

These guides cover running a payroll or HRIS system alongside an applicant tracking system. The HRIS is typically the source of truth for active employee records; the ATS manages open roles and hire events.

- [HiBob + Lever](#)

### HRIS + Payroll

These guides cover organizations that use a separate HRIS and payroll system, where compensation data may originate from either source.

- [HiBob + ADP](#)
- [Workday + ADP](#)

### Other Combinations



***

:::BlockQuote
📝 **Don't see your combination?** If you're running two integrations that aren't covered here and experiencing data conflicts, contact [support@charthop.com](mailto\:support@charthop.com). We can help identify the correct source-of-truth configuration for your setup.
:::


[title] Syncing data via an SFTP server
[path] Implementing ChartHop/Creating your ChartHop org/

ChartHop provides an SFTP sync app that connects to your SFTP server, retrieves a CSV file, and uploads the data to ChartHop.

When you set up the app, you configure the address and credentials for your SFTP server so that ChartHop can connect to it. It runs daily at 9 a.m. Eastern Time, similar to ChartHop's payroll apps.

You can only have one CSV in your upload path at one time. To upload additional data, you need to replace the file on your SFTP server with one of the same name. If the same CSV file exists on the server, it will be uploaded a second time. When this happens, it overwrites any data you've changed in ChartHop that was included in your CSV via the SFTP.

You can configure the SFTP app to ignore files older than the time period you set. For example, you can set it to ignore any files older than two days.

:::hint{type="info"}
ChartHop supports:&#x20;

- Servers using best-practice encryption algorithms. Known insecure algorithms including SHA1 or MD5 are NOT supported.
- Key algorithms, including: `ssh-ed25519,` `ecdsa-sha2-nistp256`, `ecdsa-sha2-nistp384,` `ecdsa-sha2-nistp521`, `rsa-sha2-512`, and` rsa-sha2-256`.
- &#x20;SFTP protocol versions up to and including 3.  &#x20;
:::

### Formatting your CSV

The CSV format is the same as when manually uploading a spreadsheet with the spreadsheet importer.[ Learn more.](https://docs.charthop.com/importing-spreadsheet-data)

:::hint{type="info"}
You can use a CSV file or an XLSX file.
:::

The column headings in your spreadsheet should match the ChartHop field names to which you are importing. You’ll need to ensure that your column headers use the appropriate ChartHop field names to ensure a proper upload.

[Learn more](https://docs.charthop.com/fields) about built-in fields.

### Mapping column names to ChartHop fields

If you are automating this process and need to keep the header names from the system you are exporting; you can add a one-to-one field mapping of your exported headers to the appropriate ChartHop field.

For example, if your system exports titles to a spreadsheet column named Employee Title instead of Title, you can map that header name to the appropriate ChartHop field instead of changing the name in your spreadsheet.

When mapping column names to ChartHop fields, you need to use the ChartHop code name and preface your spreadsheet column name with the “column.” The below example maps data in the spreadsheet column **Employee Title** to the **Title** field in ChartHop.

![Mapping custom column headers to ChartHop fields](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/FHTUis1XWhDcPGkXA-c9R_stfp-example-column-mapping.png)

The code name for the ChartHop field is title, while the name of the column in the spreadsheet is prefaced with *column.* Use camel case to indicate spaces in your column names. For example, *column.employeeTitle* represents a column header called “Employee Title”.

### Install the SFTP sync app

To install the SFTP app:

1. From the left sidebar, select **Apps & Bundles**.
2. From the sub-menu, select **Apps&#x20;**&#x69;f not already pre-selected.
3. Select the second tab **Available apps**
4. Find the **SFTP Sync** app in the list of available apps.
5. Click **Install** on the far right-hand side of the table.
6. Configure your SFTP sync settings:
   - **Remote Hostname** - Enter the hostname of your SFTP server.
   - **Port** - Enter the port of your SFTP server.
   - **Username&#x20;**- Enter the username that ChartHop will use to log in to your SFTP server.
   - **Password&#x20;**- Enter the password associated with the username you entered.&#x20;
   - **Remote File Path** - Enter the complete path, including filename, of the CSV file you want to upload to ChartHop.
7. Mark the **Run Daily** check box. Remember that the upload syncs daily at 9 a.m. EST.
8. Mark whether or not you want the upload to skip errors. If you mark this option, the upload continues but rows with errors aren't uploaded.
9. Mark **Upsert**. ChartHop recommends enabling this check box so that new people and jobs can be added. When unmarked, the upload can only make changes to existing data.
10. Add an email to which to send notification emails when the upload occurs. If you want to add multiple emails, you must separate them with a comma.
11. &#x20;Optionally, you can work with your ChartHop representative to add custom fields you want to upload. You can only upload data to fields that already exist in ChartHop.
12. Select **Save Settings**.

### Run a one-time sync

You can run a one-time sync from the SFTP app. You can do this even when you have configured an automated sync. An on-demand sync runs as soon as you select the option. When you run a one-time sync, you have the flexibility of syncing your data to a ChartHop scenario or to your primary org.

1. From the left sidebar, select **Apps & Bundles**.
2. From the sub-menu, select **Apps&#x20;**&#x69;f not already pre-selected.
3. From the Installed apps tab, find the SFTP app and select the gear icon ⚙️.
4. Scroll to the bottom of the screen to view the **Sync to primary** an&#x64;**&#x20;Sync to Scenario** buttons.
5. Choose one of the following
   - Select **Sync to primary** to sync the current data on your SFTP server to your primary org.
   - Select **Sync to scenario** to sync the current data on your SFTP server to a scenario. You can choose from a list of existing scenarios or choose to create a new scenario when you sync.
6. Selec&#x74;**&#x20;Sync**. Once completed, a message indicates that the sync has been completed.

:::hint{type="info"}
[Packages](https://www.charthop.com/pricing/)**:&#x20;**<font color="#a9a9a9">Basic</font> <font color="#000000">|</font> <font color="#000000">**Headcount Planning** | </font><font color="#000000">**Compensation Reviews** | </font><font color="#000000">**Performance** | </font><font color="#000000">**Engagement** </font>
:::

:::hint{type="info"}
****[Roles](https://docs.charthop.com/user-roles-and-permissions): Owner | Technical owner 
:::







[title] BambooHR
[path] Implementing ChartHop/Apps & Integrations/Payroll systems/Installing payroll apps/

With the BambooHR app, you can sync your payroll data to ChartHop, which automatically builds your org chart and keeps it up to date. Synced data includes titles, managers, departments, location, hires and departures, contact information, demographics, compensation changes, and time off.

### BambooHR at a glance

The following table summarizes ChartHop’s BambooHR app. 

| **Supported ChartHop packages**      | - <font color="#000000">Basic</font>&#x20;
- <font color="#000000">Standard </font>
- <font color="#000000">Premium</font>                                                                                                                                                                                                                                                                                                                           |
| ------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Supported Bamboo package**         | Advantage                                                                                                                                                                                                                                                                                                                                                                                                                                            |
| **Prerequisites**                    | A BambooHR administrator account with access to BambooHR API keys.                                                                                                                                                                                                                                                                                                                                                                                   |
| **API key permissions**              | As a BambooHR administrator, add a new API key from BambooHR and save the key information for use in ChartHop.                                                                                                                                                                                                                                                                                                                                       |
| **Data direction**                   | Inbound from BambooHR to ChartHop                                                                                                                                                                                                                                                                                                                                                                                                                    |
| **Sync cadence**                     | Daily or as needed                                                                                                                                                                                                                                                                                                                                                                                                                                   |
| **Effective dating support**         | Yes                                                                                                                                                                                                                                                                                                                                                                                                                                                  |
| **Additional field mapping support** | Yes, for ChartHop Premium customers, from the following field categories: <br />- List Metadata
- Tables Metadata
- TimeOff Types Metadata
- Field Metadata
- EmploymentStatus
- JobInfo
- Compensation
- TimeOff
- Photo
- Custom Report<br />For more information, see the [BambooHR documentation](https://documentation.bamboohr.com/reference). <br /><br />Please direct all custom mapping requests to ChartHop’s Professional Services team. |
| **Payroll app overview**             | Read an [overview](https://docs.charthop.com/payroll-system-apps) of how how payroll apps work in ChartHop.                                                                                                                                                                                                                                                                                                                                          |
| **Synced Data**                      | The default [synced data](https://docs.charthop.com/synced-data-from-bamboohr) from Bamboo HR to ChartHop.                                                                                                                                                                                                                                                                                                                                           |


[title] Rippling (licensed API only)
[path] Implementing ChartHop/Apps & Integrations/Payroll systems/Installing payroll apps/

This app syncs your organizational roster from Rippling on a daily basis. The following information is included:

- Title, manager, department, location
- Hires and departures
- Personal contact and demographic information
- Compensation changes

## Rippling at a glance

The following table summarizes ChartHop’s Ripping app. 

| **Supported ChartHop packages**      | - <font color="#000000">Standard</font>
- <font color="#000000">Premium</font>                                                                                                                                                                                                                                                                                                                             |
| ------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Prerequisites**                    | A ChartHop account with the Technical Owner role and a Rippling account with Administrator permissions. Your Rippling account must include API access and the ability to create an API key.                                                                                                                                                                                                                |
| **API key permissions**              | Compensation data                                                                                                                                                                                                                                                                                                                                                                                          |
| **Data direction**                   | Inbound from Ripping to ChartHop                                                                                                                                                                                                                                                                                                                                                                           |
| **Sync cadence**                     | Daily or as needed                                                                                                                                                                                                                                                                                                                                                                                         |
| **Effective dating support**         | Only for the base comp field. Effective dating is not supported for other fields.                                                                                                                                                                                                                                                                                                                          |
| **Additional field mapping support** | For Premium customers, additional field mapping is available for the following Rippling field categories: <br /><br />-  [Companies](https://developer.rippling.com/docs/rippling-api/a310f900b0f84-api-reference)
- [Employeees](https://developer.rippling.com/docs/rippling-api/a310f900b0f84-api-reference)<br />Please direct any custom mapping requests to your ChartHop implementation specialist. |
| **Payroll app overview**             | Read an [overview](https://docs.charthop.com/payroll-system-apps) of how how payroll apps work in ChartHop.                                                                                                                                                                                                                                                                                                |
| **Synced Data**                      | The default [synced data](https://docs.charthop.com/synced-data-from-rippling) from Rippling to ChartHop.                                                                                                                                                                                                                                                                                                  |

### Rippling customers who purchased API access

Rippling limits third-party access to their systems and may require some customers to pay for API access to connect their Rippling data to ChartHop. In addition, Rippling API keys may or may not include compensation data. 

If your Rippling account includes API access with compensation data, contact your ChartHop implementation specialist to connect your Rippling data.

### Rippling customers without API access

At ChartHop we’re committed to fostering open data systems and choosing partners who are equally committed to maintaining an open, secure data ecosystem. 

We regret that Rippling does not support an open data system; however, you can experience everything ChartHop has to offer by importing your Rippling data via a spreadsheet. [Learn more.](https://docs.charthop.com/add-new-people-to-charthop)


[title] Embed your Org Chart on a webpage
[path] Getting around in ChartHop/Org Chart/

You can use the **Embeddable Org Chart** app to create a public, searchable version of your ChartHop org chart that you embed on any webpage that supports inline frames. For example, you can add your org chart to your company intranet.&#x20;

Users don't need a ChartHop account to view and interact with an embedded org chart.

:::hint{type="warning"}
The embeddable org chart displays all people, jobs, and groups in your org, but it doesn’t contain a change history, personal contact information, or any sensitive data.
:::

![](https://archbee-image-uploads.s3.amazonaws.com/zxjhb7-DqnuzAP-lru1l3-4EQqbHQQotS_WdhDuf-Qq-20241008-133024.png "Embedded Org Chat Example")

# Embedded Org Chart Setup

:::hint{type="warning"}
This feature is currently in Alpha. Be one of the first customers to try it! Please share any feedback with the ChartHop team.&#x20;

### How to setup a Alpha Feature

1. Contact [ChartHop support](mailto\:support@charthop.com) or your CSM if you have one. They can activate the feature for you.&#x20;
2. Read below for setup instructions and context on how the feature will work.
:::

To use the embedded org chart:

1. Toggle the feature on withing **Admin > Labs**.&#x20;
2. Select **Admin** from the left sidebar.
3. On the **Admin** menu, select th&#x65;**&#x20;Core Views** page.  
4. Navigate to the **Embedded Org Chart&#x20;**&#x68;eader.
5. Press the **Activate** button to generate an embed code
6. Select **Configure&#x20;**&#x74;o setup and preview&#x20;
7. Use the **Copy** button to copy the embed code and add it to your website.&#x20;
8. If you have any issues, press "Rotate token" to refresh the embed code.&#x20;

![](https://archbee-image-uploads.s3.amazonaws.com/zxjhb7-DqnuzAP-lru1l3-DLw1TYfVga7oewzOwxUWE-20241008-131558.png)

### Configuring the Embedded Org Chart

To configure the embedded org chart, click the **Configure&#x20;**&#x62;utton.&#x20;

You can configure the:

- Size of the embed: **Width** and **Height** in pixels
- Default **zoom** level
- What data to **highlight**
- A default **filter** — Useful if you want to start with a highlight of one department or a subgroup of people.
- A person or job to focus the org chart on initially. (Optional)

Press **Preview&#x20;**&#x74;o see how the configuration would look.&#x20;

![](https://archbee-image-uploads.s3.amazonaws.com/zxjhb7-DqnuzAP-lru1l3-H9SvU4iKo3de5u0VeQ9b2-20241008-132020.png)

# Legacy Org Chart

### Install the Embeddable Org Chart

Before you can embed your org chart on a webpage, you need to install the **Embeddable Org Chart** app from ChartHop to generate your embeddable org chart. 

To install the **Embeddable Org Chart** app: 

1. Select **Apps & Bundles** from the left sidebar.
2. On the **Apps** page, select th&#x65;**&#x20;Availible apps** tab.  
3. Navigate to the **Embeddable Org Chart** app in the list.
4. Select **Install**.
5. On the **App details** page, select **Install**.
6. Select **Install App** to configure the app (see below). &#x20;

### Configure your Embeddable Org Chart

You can configure the settings of your embeddable org chart to determine how and what information it displays when it is embedded. For example, you can determine the display size as well as specific information (such as department or team) to highlight within the embeddable org chart.

Once you’re done configuring, you can then paste the generated HTML onto your webpage to embed it.

To configure your embeddable org chart:

1. Select **Apps & Bundles** from the left sidebar.
2. On the **Apps** page, navigate to the **Embeddable Org Chart** app in the **Installed apps** tab.
3. Select **Configure** (gear icon).
4. Configure the following settings: 
   - **Width** - Width of the embeddable org chart (in pixels). Defaults to 800 pixels.
   - **Height** - Height of the embeddable org chart (in pixels). Defaults to 500 pixels.
   - **Zoom** - The default zoom level of the embeddable org chart.  Defaults to 0.8.
   - **Highlight Data** - Whether to display your ChartHop organization by [Department](https://docs.charthop.com/departments) or [Team](https://docs.charthop.com/teams).
   - **Filter** - Enter a custom filter to further specify the groups of people that display in the embeddable org chart. [Learn more.](https://docs.charthop.com/filtering)
5. Copy the generated HTML in the **HTML Source** box. 
6. Paste the HTML onto your webpage to finish embedding your org chart.

### Use the Embeddable Org Chart&#x20;

The embeddable org chart is a public-facing version of your ChartHop **Org Chart** with much of the same functionality.

You have the ability to search by person, job, department, team, or location. You can also zoom, change the orientation of the org chart, and click and expand on different employee nodes to explore and move throughout your organization.

Depending on how the embeddable org chart is configured, each employee node will highlight either the employee’s department or team.

![Embeddable org chart preview](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/SQ-Nwb4RYmg5bMUUdnZvh_embedorgchart.png)

:::hint{type="info"}
[Packages](https://www.charthop.com/pricing/)**:&#x20;**<font color="#a9a9a9">Basic</font> <font color="#000000">|</font> <font color="#000000">**Headcount Planning** | </font><font color="#000000">**Compensation Reviews** | </font><font color="#000000">**Performance** | </font><font color="#000000">**Engagement** </font>
:::

:::hint{type="info"}
****[﻿﻿Roles:](https://docs.charthop.com/user-roles-and-permissions) Owner | Technical owner
:::


[title] Getting around in ChartHop
[path] /

::::LinkArray{contentSource="CUSTOM"}
:::LinkArrayItem{headerType="IMAGE" headerImage="https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/QN4UIau6P38kClUiqif4M_left-nav-1.png"}
[Navigating ChartHop](docId\:atzc5ZGKWBK9g0GIWukz8)&#x20;


Get an overview of how you navigate around ChartHop.
:::

:::LinkArrayItem{headerType="IMAGE" headerImage="https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/uNp9NTmpfNJhVIbDU7sAO_screenshot-2024-01-19-at-11950-pm.png"}
[Home page](docId\:FzRI4LZFCDA9zKRs3wHVV)&#x20;



Gain an understanding of how to use ChartHop's home page.
:::

:::LinkArrayItem{headerType="IMAGE" headerImage="https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/gtlEgmPRyJuTO0P6Ggwos_screenshot-2024-01-19-at-13435-pm.png"}
[Org Chart](docId\:BepXEDmK2n5nOxoItxF7x)&#x20;



Review the many features of ChartHop's Org Chart.
:::

:::LinkArrayItem{headerType="IMAGE" headerImage="https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/l5EKvj4MP9es9TgYOfnuY_screenshot-2024-01-19-at-14420-pm.png"}
[Map](docId\:m6AZYOZ4lWXAKt0KpIInS)&#x20;



Learn how to use a location-based view of your organization.
:::

:::LinkArrayItem{headerType="IMAGE" headerImage="https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/Ii4O5Zl22hqmM6M_4zD97_screenshot-2024-01-19-at-20414-pm.png"}
[Employee Profiles](docId\:p1YCVjPv07ENNcLccNNFu)&#x20;



Understand how to work with and view employee profiles.&#x20;
:::

:::LinkArrayItem{headerType="IMAGE" headerImage="https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/YFiexuoZJimkPlpzVd49z_screenshot-2024-01-19-at-15138-pm.png"}
[Data Sheet](docId\:XTd4DG4I_4_nMwjfEsq0S)&#x20;



Unleash the power of your employee data by learning about the Data Sheet.
:::

:::LinkArrayItem{headerType="IMAGE" headerImage="https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/Pm7JSHkXH2MzeLoxcQYK6_screenshot-2024-01-19-at-22035-pm.png"}
[Dashboards](docId\:kA8-kvT0AUi_ekF7MECLD)&#x20;



Create and view visualizations of your organization's data.
:::

:::LinkArrayItem{headerType="IMAGE" headerImage="https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/yIRZut_ghRW4ufkVMuD2A_screenshot-2024-01-19-at-22021-pm.png"}
&#x20;[Planning](docId:9325SriEk8fJ8slFjO8VT)



Understand how to propose org changes with scenarios.
:::

:::LinkArrayItem{headerType="IMAGE" headerImage="https://archbee-image-uploads.s3.amazonaws.com/MvNW9WWlxJ7hj51bjCyQa-LD0S3RD_V_sDpFabo2AxY-20250121-215809.png"}
[Mobile App](docId\:tCRB-vPbsJ99CMlsxV8N3)&#x20;



Access a company wide employee directory on the go.
:::

:::LinkArrayItem{headerType="IMAGE" headerImage="https://archbee-image-uploads.s3.amazonaws.com/MvNW9WWlxJ7hj51bjCyQa-2X284UCCW-bgctJpy69uG-20250226-201245.png"}
*Resources (HRIS Only)*

Access a library of organized content.
:::
::::






[title] Namely
[path] Implementing ChartHop/Apps & Integrations/Payroll systems/Installing payroll apps/

With the Namely app, you can sync your payroll data to ChartHop, which automatically builds your org chart and keeps it up to date. Synced data includes titles, contact information, demographics, compensation, managers, departments, and locations.

### Namely at a glance

The following table summarizes ChartHop’s Namely app. 

| **Supported ChartHop package**       | - <font color="#000000">Basic</font>&#x20;
- <font color="#000000">Standard </font>
- <font color="#000000">Premium</font>                                                                                                                            |
| ------------------------------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Supported Namely package**         | HR Fundamentals                                                                                                                                                                                                                                       |
| **Prerequisites**                    | A ChartHop account with the Owner role and a Namely account with administrator privileges.                                                                                                                                                            |
| **API key permissions**              | As a Namely administrator, create a Personal Access Token and save it in ChartHop.                                                                                                                                                                    |
| **Data direction**                   | Inbound from Namely to ChartHop                                                                                                                                                                                                                       |
| **Sync cadence**                     | Daily or as needed                                                                                                                                                                                                                                    |
| **Effective dating support**         | No                                                                                                                                                                                                                                                    |
| **Additional field mapping support** | Yes, for ChartHop Premium customers, via the [profiles](https://developers.namely.com/docs/namely-api/f3cb460079577-get-all-profiles) field category. <br /><br />Please direct all custom mapping requests to ChartHop’s Professional Services team. |
| **Payroll app overview**             | Read an [overview](https://docs.charthop.com/payroll-system-apps) of how how payroll apps work in ChartHop.                                                                                                                                           |
| **Synced Data**                      | The default [synced data](https://docs.charthop.com/synced-data-from-namely) from Namely to ChartHop.                                                                                                                                                 |


[title] Synced data from ADP
[path] Implementing ChartHop/Apps & Integrations/Payroll systems/Installing payroll apps/ADP/Installing the ADP Data Connector/

:::hint{type="info"}
[Packages](https://www.charthop.com/pricing/)**:&#x20;**<font color="#a9a9a9">Basic</font> <font color="#000000">|</font> <font color="#000000">**Headcount Planning** | </font><font color="#000000">**Compensation Reviews** | </font><font color="#000000">**Performance** | </font><font color="#000000">**Engagement** </font>
:::

The following table lists the default data set synced from ADP to ChartHop.&#x20;

ChartHop customers can work with ChartHop implementation services to customize what is synced.

:::hint{type="info"}
You must include the country code as a part of any international number for it to be recognized as such within ChartHop. When you are syncing phone numbers from an external system, such as a payroll system or ATS, be sure the country code is included in the phone number that is listed in the external system. This also applies when updating data through a spreadsheet.
:::

| **ChartHop field label**       | **ChartHop field code** | **ADP field code**                                                                                                                                                                                                                                                                                                                            |
| ------------------------------ | ----------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Base                           | base                    | workers.workAssignment.baseRemuneration.payPeriodRateAmount.amountValue, workers.workAssignment.baseRemuneration.payPeriodRateAmount.currencyCode, workers.workAssignment.baseRemuneration.hourlyRateAmount.amountValue, workers.workAssignment.baseRemuneration.hourlyRateAmount.currencyCode, workers.workAssignment.payCycleCode.codeValue |
| Birth Date                     | birthdate               | workers.person.birthDate                                                                                                                                                                                                                                                                                                                      |
| City - Home Address            | address.city            | workers.person.legalAddress.cityName                                                                                                                                                                                                                                                                                                          |
| Company                        | company                 | workers.workAssignment                                                                                                                                                                                                                                                                                                                        |
| Country - Home Address         | address.country         | workers.person.legalAddress.countryCode                                                                                                                                                                                                                                                                                                       |
| Currency                       | currency                | workers.workAssignment.baseRemuneration.payPeriodRateAmount.amountValue, workers.workAssignment.baseRemuneration.payPeriodRateAmount.currencyCode, workers.workAssignment.baseRemuneration.hourlyRateAmount.amountValue, workers.workAssignment.baseRemuneration.hourlyRateAmount.currencyCode, workers.workAssignment.payCycleCode.codeValue |
| Date                           | date                    | workers.workAssignment.actualStartDate, workers.workAssignment.terminationDate, workers.workAssignment.baseRemuneration.effectiveDate                                                                                                                                                                                                         |
| Depart                         | depart                  | workers.workAssignment.terminationDate, workers.workAssignment.assignmentStatus.reasonCode.codeValue, workers.workAssignment.voluntaryIndicator                                                                                                                                                                                               |
| Department                     | department              | workers.workAssignment                                                                                                                                                                                                                                                                                                                        |
| Employment                     | employment              | workers.workAssignment.workerTypeCode.codeValue                                                                                                                                                                                                                                                                                               |
| Ethnicity                      | ethnicity               | workers.person.raceCode.codeValue                                                                                                                                                                                                                                                                                                             |
| First Name                     | name.first              | workers.person.legalName.givenName                                                                                                                                                                                                                                                                                                            |
| Gender                         | gender                  | workers.person.genderCode.codeValue                                                                                                                                                                                                                                                                                                           |
| Home Email                     | contact.homeemail       | workers.person.communication.emails\[0].emailUri                                                                                                                                                                                                                                                                                              |
| Home Phone                     | contact.homephone       | workers.person.communication.landlines\[0].formattedNumber                                                                                                                                                                                                                                                                                    |
| Hourly                         | hourly                  | workers.workAssignment.baseRemuneration.payPeriodRateAmount.amountValue, workers.workAssignment.baseRemuneration.payPeriodRateAmount.currencyCode, workers.workAssignment.baseRemuneration.hourlyRateAmount.amountValue, workers.workAssignment.baseRemuneration.hourlyRateAmount.currencyCode, workers.workAssignment.payCycleCode.codeValue |
| Last Name                      | name.last               | workers.person.legalName.familyName1                                                                                                                                                                                                                                                                                                          |
| Location                       | location                | workers.workAssignment.homeWorkLocation.nameCode.shortName                                                                                                                                                                                                                                                                                    |
| Manager                        | manager                 | workers.workAssignment.reportsTo\[0].workerID.idValue                                                                                                                                                                                                                                                                                         |
| Middle Name                    | name.middle             | workers.person.legalName.middleName                                                                                                                                                                                                                                                                                                           |
| Mobile                         | contact.mobilephone     | workers.businessCommunication.mobiles\[0].formattedNumber, workers.person.communication.mobiles\[0].formattedNumber                                                                                                                                                                                                                           |
| Preferred First Name           | name.pref               | workers.person.legalName.nickName                                                                                                                                                                                                                                                                                                             |
| Start Date                     | startdate               | workers.workerDates.rehireDate, workers.workerDates.originalHireDate                                                                                                                                                                                                                                                                          |
| State - Home Address           | address.state           | workers.person.legalAddress.countrySubdivisionLevel1.codeValue                                                                                                                                                                                                                                                                                |
| Street 1 - Home Address        | address.street1         | workers.person.legalAddress.lineOne                                                                                                                                                                                                                                                                                                           |
| Street 2 - Home Address        | address.street2         | workers.person.legalAddress.lineTwo                                                                                                                                                                                                                                                                                                           |
| Street 3 - Home Address        | address.street3         | workers.person.legalAddress.lineThree                                                                                                                                                                                                                                                                                                         |
| Title                          | title                   | workers.workAssignment.jobCode.longName, workers.workAssignment.jobCode.shortName                                                                                                                                                                                                                                                             |
| Work Email                     | contact.workemail       | workers.businessCommunication.emails\[0].emailUri                                                                                                                                                                                                                                                                                             |
| Work Fax                       | contact.workfax         | workers.businessCommunication.faxes\[0].formattedNumber                                                                                                                                                                                                                                                                                       |
| Work Phone                     | contact.workphone       | workers.businessCommunication.landlines\[0].formattedNumber                                                                                                                                                                                                                                                                                   |
| Zip/Postal - Home Address      | address.postal          | workers.person.legalAddress.postalCode                                                                                                                                                                                                                                                                                                        |
| *Used to store profile photos* | imageurl                | workers.photos\[0].links\[0].href                                                                                                                                                                                                                                                                                                             |

### Hourly compensation rate calculations

To calculate hourly compensation, the following fields are used from ADP and are translated to ChartHop codenames:

| **ChartHop codename** | **ADP field code**                                                       |
| --------------------- | ------------------------------------------------------------------------ |
| baseAmount            | workers.workAssignment.baseRemuneration.payPeriodRateAmount.amountValue  |
| baseCurrency          | workers.workAssignment.baseRemuneration.payPeriodRateAmount.currencyCode |
| hourlyAmount          | workers.workAssignment.baseRemuneration.hourlyRateAmount.amountValue     |
| hourlyCurrency        | workers.workAssignment.baseRemuneration.hourlyRateAmount.currencyCode    |
| (As in ADP)           | workers.workAssignment.payCycleCode.codeValue                            |

ChartHop uses a multiplier to correspond to the number of pay periods for a given employee.  Below are the codes ChartHop receives from ADP and the multipliers it maps to them:

- **M** - 12 (monthly)
- **S** - 24 (semi-monthly)
- **B** - 26 (bi-weekly)

ChartHop first checks if `baseAmount` is provided.  If so, it takes that value and times it by the given multiplier to determine a given employee’s salary. &#x20;

If `baseAmount` isn’t provided, ChartHop checks `hourlyAmount` and sets it to its hourly field. &#x20;

ChartHop also grabs either `baseCurrency` or `hourlyCurrency` depending on whether `baseAmount` or `hourlyAmount` is provided and uses that value to set its currency field.



[title] Justworks
[path] Implementing ChartHop/Apps & Integrations/Payroll systems/Installing payroll apps/

With the Justworks app, you can sync your payroll data to ChartHop, which automatically builds your org chart and keeps it up to date. Synced data includes titles, contact information, demographics, compensation, managers, departments, and locations.

### Justworks at a glance

The following table summarizes ChartHop’s Justworks app. 

| **Supported ChartHop packages**      | - <font color="#000000">Standard </font>
- <font color="#000000">Premium</font>                                                                                                                                                                                                                                                                                                         |
| ------------------------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Supported JustWorks packages**     | * Plus
* Basic                                                                                                                                                                                                                                                                                                                                                                          |
| **Prerequisites**                    | A ChartHop account with the Owner role and a JustWorks account with administrator privileges.                                                                                                                                                                                                                                                                                           |
| **API key permissions**              | ChartHop communicates with JustWorks through their API. You’ll need to create a JustWorks API key to use with ChartHop and grant the key the following user permissions:<br />* A Worker type of 3rd Party Accountant/Admin
* View invoices & reporting permissions
* Manage employees permissions<br />API key credentials will be added to the JustWorks application within ChartHop. |
| **Data direction**                   | Inbound from Justworks to ChartHop                                                                                                                                                                                                                                                                                                                                                      |
| **Sync cadence**                     | Daily or as needed                                                                                                                                                                                                                                                                                                                                                                      |
| **Effective dating support**         | No                                                                                                                                                                                                                                                                                                                                                                                      |
| **Additional field mapping support** | For ChartHop Premium customers, custom mapping is available for the following Justworks field categories: <br />* members
* custom<br />Please direct all custom mapping requests to ChartHop’s Professional Services team.                                                                                                                                                             |
| **Payroll app overview**             | Read an [overview](https://docs.charthop.com/payroll-system-apps) of how how payroll apps work in ChartHop.                                                                                                                                                                                                                                                                             |
| **Synced Data**                      | The default [synced data](https://docs.charthop.com/synced-data-from-justworks) from Justworks to ChartHop.                                                                                                                                                                                                                                                                             |


[title] Installing the Namely app
[path] Implementing ChartHop/Apps & Integrations/Payroll systems/Installing payroll apps/Untitled/

This section covers setting up the Namely integration app, which allows you to sync your employee roster to ChartHop. 

## Review your payroll system data

Your ChartHop payroll app syncs your employee data from your payroll system and builds your org chart in ChartHop. Once your Org Chart is created, you can start using ChartHop.

ChartHop recommends reviewing the data in your payroll system to ensure it is what you expect before you sync it to ChartHop. For example, if an employee has multiple system IDs in your payroll system, that employee’s data won’t sync properly. You should also be sure that your payroll system reflects an accurate view of your organization, including reporting structures, employee locations, and compensation. 

## Obtain API Credentials for Namely

For ChartHop to access your organization's Namely payroll data, you need to create a Personal Access Token in Namely that you can use in ChartHop. This information allows ChartHop to connect to Namely to receive your employee data.

1. Log into Namely as an administrator who has permission to create API keys.&#x20;
2. Navigate to API settings by selecting the Profile drop-down​ list and selecting **API**.
3. Select the **Personal Access Tokens** tab.
4. Create a personal access token and name it "ChartHop."
5. Copy the token to a safe place.
6. When accessing Namely, take note of the Namely subdomain name. In this URL example, acme.namely.com, **acme** is the subdomain.

## Install the Namely app

After you have your Namely Personal Access Token and the Namely subdomain name, you can install the Namely integration app in ChartHop.

1. From the left sidebar, select **Apps & Bundles**.
2. From the sub-menu, select **Apps,&#x20;**&#x69;f not already pre-selected.
3. Select the **Availible Apps** tab.
4. Scroll to your payroll app and select **Install&#x20;**&#x6F;n the far right of the respective app's row.

### Connect the Namely app

You'll be prompted to configure your payroll app when you select **Install**.

1. Enter your Namely subdomain in the field provided. In this URL example, acme.bamboohr.com, **acme** is the subdomain.
2. In the **Create your a personal access token&#x20;**&#x73;tep, copy the personal access token you created to the provided field.
3. Select **Next step**.

### Configure data sync settings for BambooHR

Data sync settings control how and what data is synced to ChartHop from your payroll system. For example, you can choose whether or not to create a backfill position in ChartHop when you have a departure in your payroll system. Other advanced settings allow you to exclude certain employees.

- Select one of the two options:
  - **Automatically create backfills** - This option creates a backfill position in ChartHop (open job) when an employee is marked as departed in your payroll system.
  - **Sync departures only** - This option removes the departed employee from ChartHop. The employee's job history remains in ChartHop.

### Configure advanced settings

Advanced settings allow you to better control how your payroll data syncs to ChartHop.

ChartHop recommends accepting the default values for these settings. Please get in touch with ChartHop Support or your Customer Success Manager for assistance if needed.

1. Expand the **Advanced settings** section. 
2. Use the following table to guide you through advanced settings decisions. 

| **Setting**                               | **Description&#xA0;**                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               |
| ----------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Missing location information <br /><br /> | Select one of the two options for what should happen if location information is set for an open role:<br />* **Set Remote as the default location in ChartHop** - When selected, any open role that does not have a location set will be set to have a Remote location in ChartHop.
* **Leave location blank in ChartHop&#x20;**- When selected, any open role that does not have a location set in your payroll app will not have a location set in ChartHop.                                                                                                                                                      |
| Advanced sync options                     | Select the data changes you want to include in your sync. You can include some or all of the following employee data: <br />* Job titles 
* Managers 
* Groups 
* Compensation 
* Hire dates                                                                                                                                                                                                                                                                                                                                                                                                                        |
| Overwrite person fields <br /><br />      | ChartHop recommends using this setting to avoid needing to update both ChartHop and your payroll system when a change is made to any field value that is synced from your payroll system.<br /><br />When you choose this option, your payroll system remains the source of truth for the following fields in ChartHop: birthdate, gender, home address, and so on. Any edits you or an employee make to this data in ChartHop are overwritten during synchronization. This can pose an issue when someone uses ChartHop to update employee fields in ChartHop, without requesting an update in the source system.  |
| Historical data                           | Choose whether or not you want to sync historical data. You can turn this off if you want to exclude any historical changes before the date of your initial sync.                                                                                                                                                                                                                                                                                                                                                                                                                                                   |
| Exclude IDs                               | To exclude specific individuals from the sync, enter their unique payroll system IDs here, separated by commas.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     |

### Run an initial one-time sync of your payroll data

When you first configure your payroll app, you should run a one-time sync to verify that the sync is operating as you expect it to and that your data is what you expect.

To run a one-time sync:

1. In the setup wizard, select the **Run one-time sync** option.
2. Select **Finish setup**.

## Verify your data in ChartHop

After running your first sync, you can use the Data Sheet and Org Chart pages to spot-check your data. You can use the Sync History page to verify when the sync was run and if it encountered any issues. 

You should spot-check your ChartHop org for the following:

- Correct management reporting lines
- Compensation data
- Employee information on profiles (names, addresses, and so on)
- Job titles
- Departments
- Locations

:::hint{type="info"}
Remember that most issues with your synced data originate in your payroll system. ChartHop allows you to visualize your employee data to make finding these discrepancies easier. Still, you’ll need to fix any data discrepancies in your payroll system and rerun the sync to view the fixes in ChartHop.
:::

## Configure your payroll app sync to run daily

After you’ve synced your data for the first time and verified your Org Chart, you should configure a daily sync. The value of syncing your payroll data to ChartHop is that it ensures that your employee data is always up to date. 

1. From the left sidebar, select **Apps & Bundles**.
2. From the sub-menu, select **Apps,&#x20;**&#x69;f not already pre-selected.
3. Select the **Installed Apps** tab.
4. Scroll to your payroll app and select the gear (settings) icon on the far right of the row to view app settings.
5. Within the **App status & sync** settings section, select the **Edit** (pencil) icon.
6. Toggle the auto-sync option to on.
7. Select **Save**.


[title] Payroll systems
[path] Implementing ChartHop/Apps & Integrations/

The quickest way to add your organization to ChartHop is to create a sync with your payroll system through a ChartHop payroll app. This imports all your employees into a ChartHop org chart and keeps them up to date on a cadence of your choice: either on demand or once per day.

:::hint{type="info"}
﻿﻿[Roles](https://docs.charthop.com/user-roles-and-permissions): Technical owner | Owner&#x20;
:::

## How data migrates between ChartHop and a payroll system

ChartHop's payroll apps sync *inbound&#x20;*&#x66;rom the payroll provider to ChartHop, so the payroll provider remains the source of truth on compensation and reporting structure while ChartHop always contains your latest employee roster. 

Since the sync is one way, if you make changes to ChartHop data that originates from your payroll system, those changes are overwritten on the next sync.

Data typically synced from your payroll system includes:

- Demographics
- Contact information
- Title changes
- Reporting structure
- Compensation
- Group memberships (departments, teams, and locations)
- Hires and departures

Download the following PDF for a quick view of which ChartHop fields are supported by which payroll app.&#x20;

::File{src="https://archbee-doc-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/Javr_XyLghod_gt6lgRCW_charthop-fields-by-payroll-app.pdf" label="ChartHop fields by payroll app.pdf"}

:::hint{type="info"}
If you track open roles in an applicant tracking system (ATS), ChartHop recommends also using an ATS app. Syncing ChartHop to both systems provides a clearer picture of your organization. [Learn more.](https://docs.charthop.com/applicant-tracking-system-apps)
:::

## Historical data syncs

Some payroll apps can sync historical data to ChartHop going back to a specified period. When a payroll app syncs historical data for the first time, all available past and present data is imported into ChartHop. On subsequent syncs, the app only imports data that has been changed during a specified window that you can configure.

When looking to import your company's historical data into ChartHop via a payroll sync, it's important to note that only certain payroll apps have the ability to provide their data to ChartHop. This is because ChartHop relies on the ability to query historical data by using the payroll system's API.

The following Payroll apps do not support historical data syncs:

- Rippling
- Sapling Onboarding from Kallidu

For the remaining apps where ChartHop is unable to import historical data via an API, ChartHop can still import their history, but the information must be provided through a spreadsheet import. This only needs to happen once.

## ChartHop scenarios and payroll apps

When working with scenarios, keep in mind that when you are using a payroll app as your source of truth for employee data, your scenario data will be overwritten by any payroll system sync scheduled after you merge the scenario.

After a scenario is approved, you should make the changes in your payroll system before merging your scenario to your primary org to prevent your changes from being overwritten by your payroll system. 

When using payroll apps with scenarios, syncing data between your payroll system and ChartHop will result in ChartHop's primary data being overwritten.


[title] Map
[path] Getting around in ChartHop/

The map is a visualization tool built on top of ChartHop's powerful people analytics platform.&#x20;

By default, all employees can access the map and view everyone’s work locations. Users who have access to sensitive data have an additional option to view employees either by their home or work addres&#x73;*.*

:::hint{type="warning"}
To protect employee privacy, exact addresses and locations are concealed and map pinpoints are randomized based on zip code. Only employees with Owner role or a role that gives them access to sensitive information can see exact locations. [Learn more.](https://docs.charthop.com/user-roles-and-permissions)&#x20;
:::

::embed[]{url="https://www.youtube.com/watch?v=DjK5zApeho0&t=20s"}

As you create and assign locations to employees in your Groups, they display on the map.&#x20;

A summary of the number of employees and open roles displays at the top left corner of the map. When employees do not have a defined location, they are indicated as missing locations. You can click on the number of missing locations to open up the **Data Sheet** with a pre-populated list of those employees.

![Map](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/SKXdqaX9rQFvCEUqg_a5f_screenshot-2024-01-19-at-14420-pm.png)

## Filtering the Map view

You can use filters to highlight specific teams, departments, and functions on the map.

![Map Filters](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/0MzKz66tTuUh7_TF51U3O_screenshot-2024-01-19-at-14501-pm.png)

### Visualize map data

For a quick visual, you can apply highlights to employees on your map using the **Visualization** tool. Select a visualization category from the **Visualization** dropdown menu.

Other helpful categories to visualize include:

- Location
- Band
- Team
- Department

## Setting work locations

The map displays any office or remote locations for employees who have a work location address set up. You can set addresses for office and remote locations in the **Locations** tab of the **Groups** page. [Learn more](https://docs.charthop.com/creating-locations).

:::hint{type="info"}
If you do not see your work locations appear on the map, check to make sure that they've been assigned both a city and a country.
:::

### Set a work location for an employee

As an administrator, you can set a work location for an employee using the **Set work location** option on the employee profile.

![Set work location](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/PwsKQ9A09tNFflIYKCQjz_worklocationadmin.png)

To set a work location:

1. Navigate to the employee profile for the person whose work location you want to set.
2. On the employee profile, select the **View on Org Chart** ▼ dropdown. 
3. Select **Set work location**.
4. Select from one of the three options:
   - **Office** - Select **Office&#x20;**&#x77;hen the employee is working out of the office defined for the job in the **Locations** field. This can be an office or remote location that you’ve defined as a Location group. Learn more.
   - **Home** - Select **Home&#x20;**&#x77;hen the employee is working from their home address location, defined for the employee in the **Home address** fields of their basic info.
   - **Other** **Location** - Select **Other Location** and enter an address when the employee is working from another work location.
5. Select **Save location** when you're done.

:::hint{type="info"}
[Modules:](https://www.charthop.com/pricing/) <font color="#000000">**HRIS |** </font>**Engagement | Goals | Performance |&#x20;**<font color="#000000">**Compensation Reviews |** </font>**Headcount Planning**
:::


[title] ChartHop Application Sitemap
[path] Getting around in ChartHop/

Use this page as a quick-reference guide to navigate ChartHop. Every major area of the application is listed below, organized by section.

:::BlockQuote
**Note:** URLs follow the pattern `https://app.charthop.com/[your-org]/...` — replace `[your-org]` with your organization's slug (visible in your browser's address bar). Not all pages are visible to all users; what you see depends on your access role and your organization's active modules.
:::

***

## 🏠 Home

| Page | URL     | Description                                                     |
| ---- | ------- | --------------------------------------------------------------- |
| Home | `/home` | Your personal dashboard — tasks, announcements, and quick links |

***

## 👤 My Profile / Profile

Profile URLs follow the pattern:
`/person/[personId]/[name-slug]/[tab]`

The tab at the end of the URL determines which subpage is shown. Replace `[personId]` with the person's ID and `[name-slug]` with their name in lowercase-hyphenated form (e.g. `jane-smith`).

### Profile Subpages

The tabs available on a profile depend on which modules are enabled and what your admin has configured under **Profile Content**.

| Tab                   | URL                         | Description                                                                                                                                  | Requires                              |
| --------------------- | --------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------- |
| About                 | `.../about`                 | Main profile view — fields, contact info, and org details                                                                                    | Always shown                          |
| Shoutouts             | `.../shoutouts`             | Shoutouts given to and received by this person                                                                                               | Configured in Profile Content         |
| 1:1s                  | `.../1:1s`                  | One-on-one notes and history with this person                                                                                                | Configured in Profile Content         |
| Goals                 | `.../goals`                 | Goals and OKRs for this person                                                                                                               | Goals module                          |
| Tasks                 | `.../tasks`                 | Tasks assigned to or about this person                                                                                                       | Always shown                          |
| Personal History      | `.../personal-history`      | Audit log of changes to personal (person-level) fields                                                                                       | Always shown                          |
| Job History           | `.../job-history`           | Audit log of changes to job-level fields                                                                                                     | Always shown                          |
| Form Response History | `.../form-response-history` | All form submissions about this person                                                                                                       | Configured in Profile Content         |
| Compensation          | `.../compensation`          | Compensation history and current pay details                                                                                                 | Sensitive data access required        |
| Equity                | `.../equity`                | Equity grant details and vesting schedule                                                                                                    | Equity module + sensitive data access |
| Time Off              | `.../time-off`              | Time off balances, history, and upcoming leave                                                                                               | Time Off module                       |
| Files                 | `.../files`                 | Files attached to this person's profile                                                                                                      | Always shown                          |
| *Custom pages*        | `.../[custom-slug]`         | Admins can add additional custom tabs to the profile — for example, to surface specific form responses or other content relevant to your org | Configured in Profile Content         |

### Performance Subpages

Performance-related tabs are added dynamically based on your active **Performance** assessments and **Profile Content** configuration. Their URL slugs are derived from the tab label — for example, a tab labeled "Performance Review" becomes `.../performance-review`.

Common performance tab examples:

| Tab Label          | URL                      |
| ------------------ | ------------------------ |
| Performance Review | `.../performance-review` |
| Self Review        | `.../self-review`        |
| 360 Feedback       | `.../360-feedback`       |
| Values             | `.../values`             |
| Calibration        | `.../calibration`        |

:::BlockQuote
The exact tabs shown depend on your org's performance review configuration. Admins can add, remove, and rename performance tabs under **Admin → Profile Content**.
:::

### User Settings

| Page             | URL              | Description                                                                 |
| ---------------- | ---------------- | --------------------------------------------------------------------------- |
| My User Settings | `/user-settings` | Update your photo, password, notification preferences, and display settings |

***

## 🏢 Org Exploration

| Page       | URL          | Description                                         |
| ---------- | ------------ | --------------------------------------------------- |
| Org Chart  | `/org`       | Visual hierarchy of your organization               |
| Data Sheet | `/data`      | Tabular spreadsheet view of all people and job data |
| Map        | `/map`       | Geographic view of your workforce                   |
| Dashboards | `/reports`   | Charts and visualizations of org data               |
| Goals      | `/goals`     | View and manage OKRs and goals                      |
| Resources  | `/resources` | Internal resource library (HRIS module)             |

***

## 📋 People Ops Tools

Accessed from the left sidebar under **People Ops Tools**.

| Page                | URL                    | Description                                                      |
| ------------------- | ---------------------- | ---------------------------------------------------------------- |
| Automated Actions   | `/actions`             | Create and manage automated workflows triggered by org events    |
| Custom Calendars    | `/custom-calendars`    | Manage custom org calendars (e.g. company holidays)              |
| Files               | `/files`               | Upload and manage files attached to people and jobs              |
| Forms               | `/forms`               | Build and manage forms for collecting information from employees |
| New Hire Management | `/new-hire-management` | Track and manage onboarding checklists for new hires             |
| Letter Templates    | `/templates`           | Create and manage offer letters and other letter templates       |
| Tasks               | `/tasks`               | View and manage tasks assigned to users                          |
| Time Off Policies   | `/time-off-policies`   | Configure time off accrual policies (Time Off module)            |

***

## 📊 Planning

| Page                 | URL          | Description                                          |
| -------------------- | ------------ | ---------------------------------------------------- |
| Planning (Scenarios) | `/scenarios` | Model headcount changes, reorgs, and other scenarios |

***

## 💰 Comp Reviews

| Page         | URL             | Description                                      |
| ------------ | --------------- | ------------------------------------------------ |
| Comp Reviews | `/comp-reviews` | View or manage active compensation review cycles |

***

## 🎯 Performance

| Page                | URL            | Description                                  |
| ------------------- | -------------- | -------------------------------------------- |
| Performance Reviews | `/performance` | View and configure performance review cycles |

***

## 💬 Engagement

| Page               | URL           | Description                                    |
| ------------------ | ------------- | ---------------------------------------------- |
| Engagement Surveys | `/engagement` | View and configure employee engagement surveys |

***

## 🔌 Apps, Agents & Bundles

Accessed from the left sidebar under **Apps, Agents & Bundles**.

| Page                | URL                    | Description                                     |
| ------------------- | ---------------------- | ----------------------------------------------- |
| Apps                | `/apps`                | Connect and manage third-party integrations     |
| Bundles             | `/bundles`             | Install pre-built template bundles              |
| Agents              | `/agents`              | Create and manage AI agents (AI Pro module)     |
| Authorization Codes | `/authorization-codes` | Manage OAuth authorization codes for API access |

***

## 🧱 Data Model

Accessed from the left sidebar under **Data Model**.

### Fields

| Page       | URL           | Description                                             |
| ---------- | ------------- | ------------------------------------------------------- |
| Fields     | `/fields`     | Create and manage custom and system fields              |
| Categories | `/categories` | Organize fields into categories for display on profiles |

### Groups

| Page        | URL            | Description                                                         |
| ----------- | -------------- | ------------------------------------------------------------------- |
| Group Types | `/group-types` | Create and manage custom group types (requires Group Types feature) |
| Department  | `/department`  | View and manage department groups                                   |
| Location    | `/location`    | View and manage location groups                                     |
| Team        | `/team`        | View and manage team groups                                         |

### Job Architecture

| Page               | URL           | Description                                          |
| ------------------ | ------------- | ---------------------------------------------------- |
| Compensation Bands | `/comp-bands` | Define salary ranges by level and role               |
| Job Codes          | `/job-codes`  | Configure job code families used in job architecture |

### Tables

| Page   | URL       | Description                         |
| ------ | --------- | ----------------------------------- |
| Tables | `/tables` | Create and query custom data tables |

***

## 🔐 Access

Accessed from the left sidebar under **Access**.

| Page            | URL                | Description                                                        |
| --------------- | ------------------ | ------------------------------------------------------------------ |
| Users           | `/users`           | Manage who has access to ChartHop                                  |
| Roles           | `/roles`           | Create and manage access roles                                     |
| Permissions     | `/permissions`     | Define field- and entity-level permissions                         |
| Access Settings | `/access-settings` | Configure global access policies (SSO, invitations, email domains) |

***

## ⚙️ Admin

Accessed from the left sidebar under **Admin**.

### Admin

| Page      | URL                   | Description                                                             |
| --------- | --------------------- | ----------------------------------------------------------------------- |
| General   | `/org-settings`       | Org name, logo, fiscal year, and other global settings                  |
| Financial | `/financial-settings` | Currency, stock valuations, and cost settings                           |
| Approvals | `/approval-settings`  | Set up approval workflows for org changes (requires Approval Workflows) |

### History

| Page                  | URL                | Description                                    |
| --------------------- | ------------------ | ---------------------------------------------- |
| Org Changes History   | `/history`         | Audit log of all org changes                   |
| Sync & Import History | `/sync-history`    | Log of all data imports and integration syncs  |
| Live Queries          | `/live-queries`    | View and run live CQL queries against org data |
| AI Usage              | `/ai-usage`        | View AI feature usage across your org          |
| AI Credit Usage       | `/ai-credit-usage` | View AI credit consumption across your org     |

### Configuration

| Page            | URL                        | Description                                                              |
| --------------- | -------------------------- | ------------------------------------------------------------------------ |
| AI              | `/ai-settings`             | Configure AI features for your org                                       |
| Core Views      | `/core-views`              | Configure org chart and data sheet default views                         |
| Goal Types      | `/goal-types`              | Define goal types and measurement methods                                |
| Home Content    | `/home-content`            | Customize what appears on users' Home pages                              |
| Modules         | `/module-settings`         | View and configure active product modules                                |
| QES Signatures  | `/qes-signatures-settings` | Configure Qualified Electronic Signature settings (requires QES feature) |
| Profile Content | `/profile-content`         | Configure what appears on employee profile pages                         |

### Import Data

| Page                    | URL       | Description                                    |
| ----------------------- | --------- | ---------------------------------------------- |
| Import Spreadsheet Data | `/import` | Upload a CSV or spreadsheet to update org data |

### Account

| Page | URL     | Description                              |
| ---- | ------- | ---------------------------------------- |
| Labs | `/labs` | Preview and enable experimental features |

***

## 🔍 Search

Press **⌘K** (Mac) or **Ctrl+K** (PC) from anywhere in ChartHop to open the universal search bar. You can search for people, jobs, departments, locations, scenarios, and reports by name.

***

## 👁️ Additional Tools

| Feature               | Where to Find It                     | Description                                                      |
| --------------------- | ------------------------------------ | ---------------------------------------------------------------- |
| View As another user  | Top bar → Profile Menu → **View As** | Preview ChartHop exactly as another user sees it                 |
| Org Switcher          | Top bar → Org Logo                   | Switch between your live org, sandbox, or other organizations    |
| Sensitive Data Toggle | Top bar (lock icon)                  | Show or hide sensitive data fields — useful during screen shares |
| Notifications         | Top bar (bell icon)                  | View alerts about tasks, approvals, and other activity           |


[title] Viewing employee profiles
[path] Getting around in ChartHop/Employee Profiles/

From the Employee Profile page, you can view information such as your manager, direct reports, job description, goals, and more.&#x20;

![An employee profile](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/AkdhKwXq76iipse-qikCG_screenshot-2024-01-19-at-20414-pm.png)

### View your profile

To view your Employee Profile, select **My profile&#x20;**&#x66;rom the left sidebar.

In the **About** tab, the information on the right side is divided into three areas based on who can view it. Hover over the icons in each section for details.&#x20;

- **About Me** - Publicly available information that everyone in your org can view. If no information has been entered, employees with edit permission are prompted to add information. If the panel is empty and the employee cannot edit it, the About Me panel is not shown.
- **Personal Data** - Sensitive data that only you and people with Sensitive data access can view.&#x20;
- **Manager-Shared Data** - Data that you, your manager, and people with Sensitive data access can view. &#x20;

### View another employee's profile

You can view the profiles of other employees in your organization.

1. From the top utility bar, select the **Search Bar** and type in the person's name. You can also find them using the **Org Chart&#x20;**&#x69;n the left sidebar.
2. Select the employee whose profile you want to view.
3. In the employee's profile summary, select **View profile**.

##


[title] ChartHop Mobile App
[path] Getting around in ChartHop/

The ChartHop mobile app for iPhone and Android is a convenient way to have access to top ChartHop capabilities on the go, including organizational directory, contact information for colleagues, complete form based tasks, request time off (HRIS only), access Ask ChartHop (HRIS only), and produce digital business cards for your phone's wallet.&#x20;

###

::Image[]{src="https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/Q1l6HtSdHHyTWJZLtdx0V_db972778-227e-438b-92b3-ec58501cc9e1-1-105-c.jpeg" size="36" width="620" height="1268" position="center" caption="ChartHop Mobile Directory App" darkWidth="620" darkHeight="1268" showCaption="true"}

### Downloading and Installing the app

To download and install the ChartHop Director mobile app:&#x20;

- **iPhone/iOS** - Search for "ChartHop" in the Apple App Store or go directly to this link: [https://apps.apple.com/us/app/charthop-directory/id6717590153](https://apps.apple.com/us/app/charthop-directory/id6717590153)
- **Android** - Search for "ChartHop" in the Google Play Store or go directly to this link: [https://play.google.com/store/apps/details?id=com.charthop.mobile](https://play.google.com/store/apps/details?id=com.charthop.mobile\&pcampaignid=web_share)

### Sign In to the app

Once the app is downloaded, open it and proceed to sign in with your user credentials:&#x20;

- **Email** - Start by entering in the email your account is associated with for your organization and tap **Continue**
- **Authenticate** - The app will redirect to authentication options associated with your email and organization. Choose the option that is the primary way you authenticate your account on the web.&#x20;
- **Directory** - The app will then redirect on successful authentication back into the app with the alphabetized directory of your organization's people as the primary view. Note: if you have more than one account associated with your email, you will be dropped into the primary account associated with your email



###

::Image[]{src="https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/A3HWA_Tag1TBpiX00Pnuz_640c2b51-fc8f-4918-b246-19402089adc5-1-105-c.jpeg" size="36" width="620" height="1268" position="center" caption="List View" darkWidth="620" darkHeight="1268" showCaption="true"}

### Features of the Mobile Directory

Within the app, you can:

- **Scroll throught the list of People in your Organization** - People in your organization or sorted alphabetically. You may scroll through them by:&#x20;
  - Tap and dragging on the list of people
  - Tap and dragging on the letters on the right of the list
  - Tap and press on a letter on the right of the list
- **Search and Filter** - To find a specific person in the list, you can:
  - Search for them by name in the search field
  - Tap on a Department, Location, or Team tag that the individual is a part of
    - Within each grouping of Department, Location, or Team, the tags work as OR filters, meaning the employee could be part of one or more of the tags you select
    - Across multiple groupings, the results work as AND filters, meaning the employee meets at least one of every set of selected tags in each section
  - To clear out the filters
    - You can either tap on all selected tags and/or clear out the search name
    - Top the reset icon in the upper right of the filters
- **View Profiles and contact colleagues** - Once you tap on a person in the list, you will view that person's profile. The profile contains:&#x20;
  - Name
  - Title
  - Contact options with links to each available format
    - Mobile Phone - will provide options to text or call
    - Work Phone - will provide options to text or call
    - Email - will open your default mail application with an email initiated directed to this person
    - Slack - will open the DM channel in Slack to this person
  - Tenure, or how long they have been at the organization
  - Birthday
  - Tags for Department, Location, and Teams the person is on
  - Who the person reports to
  - Who reports to this person
  - Job Description for their role
- **View Another Profile&#x20;**- from the profile, you may view a different profile by:&#x20;
  - Tapping directly on a person listed as their manager or one of the people that reports to them
  - Or you may view a list of profiles by:
    - Tapping one of the tags of Department, Location, and Team
    - Tapping the back arrow on the top left
    - Swiping left to right on the profile view
  - Once you have viewed a profile, it will be featured in the Recent section at the top of the Directory list
- Change Organizations - If you have access to more than one organization, you can switch organizations by clicking on the logo of the current organization and then selecting a different one from the list
- **Controlling What is Visibile to Other Employees in the Mobile App**
  - Depending on Company Policies and how they are set up in ChartHop, some information can be shared that you may want to keep private like Mobile Phone. You can change the settings to some infomation by editing your profile in ChartHop web app.&#x20;
  - Follow these instructions to make your information visibile (**Public**) or not-visible (**Private**). [Control what people see on your profile](docId\:DcBuXvrGajcz2Z5iOH9kX)&#x20;

::Image[]{src="https://lh7-rt.googleusercontent.com/slidesz/AGV_vUekptP867MOn23AkxQs4JdZlVUHYKIJ3wdxxCKJACtXyM-n8LIKuXY1KnytuiymgOBFU69ucSpPrhFnIVFZ4U9zzMReWQK7x8L-vy9G7OUjp8CH-DIx3EOeKt4O8lzb6UmC8T1kJw=nw?key=azQocqgX7plPMetJn-bxxQ" size="36" width="783" height="1600" position="center" caption="My Tasks and Time Off" showCaption="true"}

### Task Based Forms

Within the app, you can:

- **Notice in-app alert indicators to understand how many Tasks are due** - Overlaid on the user's profile avatar in the upper right, if there are tasks due, a numeric indicator will show how many are outstanding.&#x20;
- **View the list of pending Tasks in My Tasks** - Any new or outstanding Tasks will be listed in the My Tasks list.&#x20;
  - Selecting one of the tasks will navigate to the associated form
    - User can complete the form in the mobile app
    - User can start the form in the mobile app and finish on the web version of ChartHop
    - User can start in the web version of ChartHop and then finish in the mobile app
  - Once all the tasks are complete, the My Tasks list will no longer appear

### Time Off&#x20;

If Time Off is enabled in ChartHop (HRIS only), the user will be able to request and approve Time Off in the mobile app.&#x20;

- **Pending Time Off requests** - Selecting the avatar in the upper right of the app, will bring you to the My Tasks / Time Off view. In the lower half of the view, all current requests and approved future Time Off events are listed.&#x20;
  - Pending Time Off requests show an orange clock to indicate it is still waiting for approval
  - Approved Time Off requests show a green check to indicate request was approved
  - Denied Time Off requests show a red X to indicate request was denied
- **To Request Time Off** - Select the Request Time Off button on the My Tasks / Time Off view. Select the dates, policy, and add notes.&#x20;
- **To Approve Time Off** - Approvals will appear in the My Tasks / Time Off view. Select the request, review the information, and approve or deny the request
-

###

::Image[]{src="https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/zS9CvhDO9LKODmh-vHKfX_iframescreenshot-7-22-25-3-42-pm.png" size="36" width="1350" height="2760" position="center" caption="Ask ChartHop" showCaption="true"}

### Ask ChartHop

If Ask ChartHop is enabled in ChartHop (HRIS only), the user will be able to access the mobile version of Ask ChartHop in the mobile app

- **Start a New Chat with ChartHop AI&#x20;**&#x20;- Select the Ask ChartHop icon (bunny hopping over stars) next to your avatar in the main view. Type in any question or request you may have.&#x20;
- **Ask ChartHop will answer the question or request&#x20;**&#x20;- Even if the request requires access to data not avialable in the mobile app, as long as the information is in the web app, Ask ChartHop can retrieve the needed data and synthesize a response.&#x20;
  -

### Digital Business Cards

::Image[]{src="https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/nhlpeyMSNNsQ49AiBxgz7_iframescreenshot-4-7-25-3-45-pm-1.png" size="36" width="1350" height="2760" position="center" caption="Digital Business Card in ChartHop Mobile App" showCaption="true"}

::Image[]{src="https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/PyL-xTVZ-PY5tFPRbUgGh_iframescreenshot-4-7-25-3-45-pm.png" size="36" width="1350" height="2760" position="center" caption="Digital Business Card in phone's Wallet" showCaption="true"}

- **Share Your Business Card&#x20;**-  take digital business cards with you where you are
  - Business Cards are created with:
    - Your organization's logo and brand colors
    - Your avatar
    - Your name, title, org shared contact info
  - You may access your business card by:&#x20;
    - Within the ChartHop Mobile App, tapping on the QR symbol in your profile view
    - If you have already added it to your Apple or Google Wallet, it will be included as one of your cards
      - To add your Business Card to your Apple or Google Wallet, navigate to your business card and then tap the gear icon below your profile photo.&#x20;
      - Now select which information you would like to be included in your Wallet version of your business card and tap "Add to Wallet"
      - If you have already added your Business Card to your Wallet, you will need to remove it before adding an updated version
  - You may share your business card by:&#x20;
    - From within the ChartHop Mobile app, view the business card and tap the share icon
    - From within your Apple or Google Wallet, view the business card and tap the share icon




[title] Complete tasks and forms
[path] ChartHop for Employees/

From your profile page, you can complete tasks that are assigned to you. This can include anything from a recurring 1:1 form or a one-time engagement survey.

:::hint{type="info"}
Employee tasks display differently in ChartHop Basic.
:::

![Complete tasks](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/t1yq1eTxWmTGaQr5kON2A_completetasks.png)

## Complete tasks

As an employee, when viewing your own profile, you can see all of your assigned forms listed under the **Complete tasks** dropdown. Forms listed under **Complete tasks** can be either recurring or one-time tasks.

To complete a task:

1. From the left sidebar, select **My Profile**.
2. From your profile page, in the upper right select the **Complete tasks ▼&#x20;**&#x64;ropdown.
3. Select a form or task to complete.

:::hint{type="info"}
[Modules:](https://www.charthop.com/pricing/) <font color="#000000">**HRIS |** </font>**Engagement | Goals | Performance |&#x20;**<font color="#000000">**Compensation Reviews |** </font>**Headcount Planning**
:::


[title] Installing the Sapling Onboarding from Kallidus app
[path] Implementing ChartHop/Apps & Integrations/Payroll systems/Installing payroll apps/Sapling Onboarding from Kallidus/

This section covers setting up the Sapling Onboarding from Kallidus integration app, which allows you to sync your employee roster to ChartHop. 

## Review your payroll system data

Your ChartHop payroll app syncs your employee data from your payroll system and builds your org chart in ChartHop. Once your Org Chart is created, you can start using ChartHop.

ChartHop recommends reviewing the data in your payroll system to ensure it is what you expect before you sync it to ChartHop. For example, if an employee has multiple system IDs in your payroll system, that employee’s data won’t sync properly. You should also be sure that your payroll system reflects an accurate view of your organization, including reporting structures, employee locations, and compensation. 

## Obtain API Credentials for Sapling Onboarding from Kallidus

For ChartHop to access your organization's Sapling payroll data, you need to create an API key in Sapling that you can use in ChartHop. This information allows ChartHop to connect to Sapling to receive your employee data.

1. Log onto Sapling as a user with administrator permissions.
2. In Sapling, go to the Integrations page.&#x20;
3. From there, go to **API keys**.
4. Choose **Create New Key**.
5. Name the API key "**ChartHop**".
6. Copy the API key to a safe place.
7. When accessing Sapling, take note of the Sapling subdomain name. In this URL example, acme.sapling.com, **acme** is the subdomain.

## Install the Sapling app

After you have your Sapling API key, you can install the Sapling integration app in ChartHop.

1. From the left sidebar, select **Apps & Bundles**.
2. From the sub-menu, select **Apps,&#x20;**&#x69;f not already pre-selected.
3. Select the **Availible Apps** tab.
4. Scroll to your payroll app and select **Install&#x20;**&#x6F;n the far right of the respective app's row.

### Connect the Sapling app

You'll be prompted to configure your payroll app when you select **Install**.

1. Enter your Sapling subdomain in the field provided. In this URL example, acme.sapling.com, **acme** is the subdomain.
2. In the **Create your API key&#x20;**&#x73;tep, copy the API key you created to the provided field.
3. Select **Next step**.

### Configure data sync settings for Sapling

Data sync settings control how and what data is synced to ChartHop from your payroll system. For example, you can choose whether or not to create a backfill position in ChartHop when you have a departure in your payroll system. Other advanced settings allow you to exclude certain employees.

- Select one of the two options:
  - **Automatically create backfills** - This option creates a backfill position in ChartHop (open job) when an employee is marked as departed in your payroll system.
  - **Sync departures only** - This option removes the departed employee from ChartHop. The employee's job history remains in ChartHop.

### Configure advanced settings

Advanced settings allow you to better control how your payroll data syncs to ChartHop.

ChartHop recommends accepting the default values for these settings. Please get in touch with ChartHop Support or your Customer Success Manager for assistance if needed.

1. Expand the **Advanced settings** section. 
2. Use the following table to guide you through advanced settings decisions. 

| **Setting**                               | **Description&#xA0;**                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               |
| ----------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Missing location information <br /><br /> | Select one of the two options for what should happen if location information is set for an open role:<br />* **Set Remote as the default location in ChartHop** - When selected, any open role that does not have a location set will be set to have a Remote location in ChartHop.
* **Leave location blank in ChartHop&#x20;**- When selected, any open role that does not have a location set in your payroll app will not have a location set in ChartHop.                                                                                                                                                      |
| Advanced sync options                     | Select the data changes you want to include in your sync. You can include some or all of the following employee data: <br />* Job titles 
* Managers 
* Groups 
* Compensation 
* Hire dates                                                                                                                                                                                                                                                                                                                                                                                                                        |
| Overwrite person fields <br /><br />      | ChartHop recommends using this setting to avoid needing to update both ChartHop and your payroll system when a change is made to any field value that is synced from your payroll system.<br /><br />When you choose this option, your payroll system remains the source of truth for the following fields in ChartHop: birthdate, gender, home address, and so on. Any edits you or an employee make to this data in ChartHop are overwritten during synchronization. This can pose an issue when someone uses ChartHop to update employee fields in ChartHop, without requesting an update in the source system.  |
| Historical data                           | Choose whether or not you want to sync historical data. You can turn this off if you want to exclude any historical changes before the date of your initial sync.                                                                                                                                                                                                                                                                                                                                                                                                                                                   |
| Exclude IDs                               | To exclude specific individuals from the sync, enter their unique payroll system IDs here, separated by commas.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     |

### Run an initial one-time sync of your payroll data

When you first configure your payroll app, you should run a one-time sync to verify that the sync is operating as you expect it to and that your data is what you expect.

To run a one-time sync:

1. In the setup wizard, select the **Run one-time sync** option.
2. Select **Finish setup**.

## Verify your data in ChartHop

After running your first sync, you can use the Data Sheet and Org Chart pages to spot-check your data. You can use the Sync History page to verify when the sync was run and if it encountered any issues. 

You should spot-check your ChartHop org for the following:

- Correct management reporting lines
- Compensation data
- Employee information on profiles (names, addresses, and so on)
- Job titles
- Departments
- Locations

:::hint{type="info"}
Remember that most issues with your synced data originate in your payroll system. ChartHop allows you to visualize your employee data to make finding these discrepancies easier. Still, you’ll need to fix any data discrepancies in your payroll system and rerun the sync to view the fixes in ChartHop.
:::

## Configure your payroll app sync to run daily

After you’ve synced your data for the first time and verified your Org Chart, you should configure a daily sync. The value of syncing your payroll data to ChartHop is that it ensures that your employee data is always up to date. 

1. From the left sidebar, select **Apps & Bundles**.
2. From the sub-menu, select **Apps,&#x20;**&#x69;f not already pre-selected.
3. Select the **Installed Apps** tab.
4. Scroll to your payroll app and select the gear (settings) icon on the far right of the row to view app settings.
5. Within the **App status & sync** settings section, select the **Edit** (pencil) icon.
6. Toggle the auto-sync option to on.
7. Select **Save**.


[title] Managing Apps
[path] Implementing ChartHop/Apps & Integrations/

Once an app is installed in ChartHop, you can manage its configuration, control who has access to it, and review its sync history. The articles in this section cover how to manage apps after installation.

[title] Syncing your payroll system
[path] Implementing ChartHop/Creating your ChartHop org/

The easiest way to get started with ChartHop is to sync your employee payroll data with an app. We use this data to build your current org structure, along with a historical one through former employees and their start and end dates.

Once you've installed an app, ChartHop syncs with your payroll system daily and keeps your ChartHop organization data current.

ChartHop's apps make it easier to keep your data up to date across platforms by automating payroll data retrieval from your chosen provider. [Learn more.](https://docs.charthop.com/payroll-system-apps)

## Supported payroll system integrations

The following payroll apps are available to ChartHop Basic, ChartHop Headcount Planning, ChartHop Compensation Reviews, ChartHop Performance, and ChartHop Engagement customers:

- [BambooHR](https://docs.charthop.com/bamboohr)
- [Gusto](https://docs.charthop.com/gusto)
- [Justworks](https://docs.charthop.com/justworks)
- [Namely](https://docs.charthop.com/namely)
- [Sapling Onboarding from Kallidus](https://docs.charthop.com/sapling-onboarding-from-kallidus)
- [Zenefits](https://docs.charthop.com/zenefits)

The following payroll apps are only available to ChartHop Headcount Planning, ChartHop Compensation Reviews, ChartHop Performance, and ChartHop Engagement customers:

- [ADP](https://docs.charthop.com/adp)
- [Humaans](https://docs.charthop.com/humaans)
- [Paylocity](https://docs.charthop.com/paylocity)
- [Rippling](https://docs.charthop.com/rippling-licensed-api-only)
- [Sequoia One](https://docs.charthop.com/sequoia-one)
- [SuccessFactors](https://docs.charthop.com/successfactors)
- [TriNet](https://docs.charthop.com/trinet)
- [Ultipro](https://docs.charthop.com/ultipro)
- [Workday](https://docs.charthop.com/workday)



:::hint{type="info"}
If your payroll system is not listed above (or, if you are a ChartHop Basic customer with a different system than those supported by Basic), you must manually import your payroll from a spreadsheet.[ Learn more.](https://docs.charthop.com/importing-spreadsheet-data)
:::

## How payroll integration apps work

Payroll apps run *one way* from the payroll provider to ChartHop, so the payroll provider remains the source of truth on compensation and reporting structure while ChartHop remains updated with the latest payroll data.

ChartHop is designed to bring together multiple systems of record in one location. When you connect your payroll system with ChartHop, only employees in your payroll system are affected. If you have added other employees directly to ChartHop, the sync from the payroll system ignores those employees and does not update them.

You can sync data from multiple payroll providers and also add employees or contractors directly to ChartHop. Start by installing the payroll app for your primary payroll provider and fill in additional data as appropriate.

:::hint{type="info"}
[Modules:](https://www.charthop.com/pricing/) <font color="#000000">**HRIS |** </font>**Engagement | Goals | Performance |&#x20;**<font color="#000000">**Compensation Reviews |** </font>**Headcount Planning**
:::

:::hint{type="info"}
****[Roles](https://docs.charthop.com/user-roles-and-permissions): Owner | Technical owner 
:::





[title] Sequoia One
[path] Implementing ChartHop/Apps & Integrations/Payroll systems/Installing payroll apps/

With the Sequoia One app, you can sync your payroll data to ChartHop, which automatically builds your org chart and keeps it up to date. Synced data includes job title, manager, department, location, hires and departures, contact information and demographics, compensation changes, and time off.

### Sequoia One at a glance

The following table summarizes ChartHop’s Sequoia One app. 

| **Supported ChartHop packages**      | - <font color="#000000">Standard </font>
- <font color="#000000">Premium</font>                                                                                |
| ------------------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Prerequisites**                    | A Sequoia One account that has access to the Admin Center and a ChartHop account with the Owner role.                                                          |
| **API key permissions**              | Contact your HRBP to turn on this integration in HRX.                                                                                                          |
| **Data direction**                   | Inbound from Sequoia One to ChartHop                                                                                                                           |
| **Sync cadence**                     | Daily or as needed                                                                                                                                             |
| **Effective dating support**         | No                                                                                                                                                             |
| **Additional field mapping support** | Please direct all custom mapping requests to ChartHop’s Professional Services team.                                                                            |
| **How to install**                   | See ChartHop's[ install guidelines](https://docs.charthop.com/installing-the-sequoia-one-app) or view detailed instructions on the ChartHop app install page.  |
| **Payroll app overview**             | Read an [overview](https://docs.charthop.com/payroll-system-apps) of how how payroll apps work in ChartHop.                                                    |
| **Supported products**               | Sequioia One                                                                                                                                                   |
| **Synced Data**                      | The default [synced data](https://docs.charthop.com/synced-data-from-sequoia-one) from Sequoia One to ChartHop.                                                |




[title] Installing the Paylocity app
[path] Implementing ChartHop/Apps & Integrations/Payroll systems/Installing payroll apps/Paylocity/

This section covers setting up the Paylocity integration app, which allows you to sync your employee roster to ChartHop. 

## Review your payroll data

Your ChartHop payroll app syncs your employee data from your payroll system and builds your org chart in ChartHop. Once your Org Chart is created, you can start using ChartHop.

ChartHop recommends reviewing the data in your payroll system to ensure it is what you expect before you sync it to ChartHop. For example, if an employee has multiple system IDs in your payroll system, that employee’s data won’t sync properly. You should also be sure that your payroll system reflects an accurate view of your organization, including reporting structures, employee locations, and compensation. 

## Obtain API Credentials for Paylocity

For ChartHop to access your organization's Paylocity payroll data, you need API credentials from your Paylocity representative. This information allows ChartHop to connect to Paylocity to receive your employee data.

Please work with your ChartHop representative to get your API credentials from Paylocity. 

## Gather additional Paylocity information

When you configure the Paylocity app, you'll be prompted for additional information from Paylocity. Be sure to have the following information handy.

- Determine which Paylocity cost centers align with the teams and departments you want to sync to ChartHop. You’ll need to enter both a Department and Team cost center.
- If any of your team names in Paylocity are in custom fields (fields that are unique for your company), you’ll need to enter those.

## Install the Paylocity app

After you have your Paylocity API credentials, you can install the Paylocity integration app in ChartHop.

1. From the left sidebar, select **Apps & Bundles**.
2. From the sub-menu, select **Apps,&#x20;**&#x69;f not already pre-selected.
3. Select the **Availible Apps** tab.
4. Scroll to your payroll app and select **Install&#x20;**&#x6F;n the far right of the respective app's row.

### Connect the Paylocity app

When you select install, you'll be prompted to walk through configuring your payroll app.

1. In the **Enter your API credentials** step, enter the following information that you received from your representative in the following order:
   - Client ID
   - Secret
   - Company ID
   - Public key XML
2. Select **Next step**.

### Configure data sync settings for Paylocity

Before configuring app settings, you’ll need to have the following settings from Paylocity to help determine how the Paylocity data will sync to ChartHop:

- Determine which Paylocity cost centers align with the teams and departments you want to sync to ChartHop. You’ll need to enter both a Department and Team cost center.
- If any of your team names in Paylocity are in custom fields (fields that are unique for your company), you’ll need to enter those.

Data sync settings control how and what data is synced to ChartHop from your payroll system. For example, you can choose whether or not to create a backfill position in ChartHop when you have a departure in your payroll system. Other advanced settings allow you to exclude certain employees.

1. For the **Backfill departures** step, select one of the two options:
   - **Automatically create backfills** - This option creates a backfill position in ChartHop (open job) when an employee is marked as departed in your payroll system.
   - **Sync departures only** -  This option removes the departed employee from ChartHop. The employee's job history remains in ChartHop.
2. For **Department cost center**, indicate what cost center to assign to ChartHop departments. 
3. For **Team cost center**, indicate what cost center to assign to ChartHop teams. 

### Configure advanced settings

Advanced settings allow you to better control how your payroll data syncs to ChartHop.

ChartHop recommends accepting the default values for these settings. Please get in touch with ChartHop Support or your Customer Success Manager for assistance if needed.

1. Expand the **Advanced settings** section. 
2. Use the following table to guide you through advanced settings decisions. 
3. When finished, select **Next step**.

| **Setting**                              | **Description&#xA0;**                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         |
| ---------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Include Company ID in cost center codes. | Choose to include your company ID in your cost center codes if you want the company ID to be part of the cost center code for reporting.                                                                                                                                                                                                                                                                                                                                                                                                                                                                      |
| Currency                                 | If you have set up currency overrides for employees in Paylocity, you can use those same settings in ChartHop and override your ChartHop currency settings. Select from the following:<br />* **Use ChartHop settings for currency** to use ChartHop org settings to manage currencies for your organization. 
* **Use Paylocity pay rate note for currency**  Select this option if you have set up currency overrides for employees in Paylocity.                                                                                                                                                           |
| Sync all changes made.                   | Select the data changes you want to include in your sync. You can include some or all of the following employee data: <br />* Job titles 
* Managers 
* Groups 
* Compensation 
* Hire dates                                                                                                                                                                                                                                                                                                                                                                                                                  |
| Default location when not set            | Define whether or not you want to set the location to Remote or leave it empty if it is not set in your payroll system.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       |
| Overwrite person fields <br /><br />     | ChartHop recommends using this setting to avoid updating both ChartHop and your payroll system when a change is made to any field value synced from your payroll system.<br /><br />When you choose this option, your payroll system remains the source of truth for the following fields in ChartHop: birthdate, gender, home address, and so on. This means any edits you or an employee make to this data in ChartHop are overwritten during synchronization. This can pose an issue when someone uses ChartHop to update employee fields in ChartHop, without requesting an update in the source system.  |
| Include custom team fields.              | List each custom team field separated by commas if you have customized your Paylocity team names.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             |
| Exclude IDs                              | To exclude specific individuals from the sync, enter their unique payroll system IDs here, separated by commas.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               |

### Run an initial one-time sync of your payroll data

When you first configure your payroll app, you should run a one-time sync to verify that the sync is operating as you expect it to and that your data is what you expect.

To run a one-time sync:

1. In the setup wizard, select the **Run one-time sync** option.
2. Select **Finish setup**.

## Verify your data in ChartHop

After running your first sync, you can use the Data Sheet and Org Chart pages to spot-check your data. You can use the Sync History page to verify when the sync was run and if it encountered any issues. 

You should spot-check your ChartHop org for the following:

- Correct management reporting lines
- Compensation data
- Employee information on profiles (names, addresses, and so on)
- Job titles
- Departments
- Locations

:::hint{type="info"}
Remember that most issues with your synced data originate in your payroll system. ChartHop allows you to visualize your employee data to make finding these discrepancies easier. Still, you’ll need to fix any data discrepancies in your payroll system and rerun the sync to view the fixes in ChartHop.
:::

## Configure your payroll app sync to run daily

After you’ve synced your data for the first time and verified your Org Chart, you should configure a daily sync. The value of syncing your payroll data to ChartHop is that it ensures that your employee data is always up to date. 

1. From the left sidebar, select **Apps & Bundles**.
2. From the sub-menu, select **Apps,&#x20;**&#x69;f not already pre-selected.
3. Select the **Installed Apps** tab.
4. Scroll to your payroll app and select the gear (settings) icon on the far right of the row to view app settings.
5. Within the **App status & sync** settings section, select the **Edit** (pencil) icon.
6. Toggle the auto-sync option to on.
7. Select **Save**.


[title] Give a Shoutout
[path] ChartHop for Employees/

You can use *Shoutouts* to recognize teammates across your organization when they go above and beyond. Giving a shoutout is a great way to show recognition and appreciation to the people that you work with.

## Give someone a shoutout

When you submit a shoutout, you write up a quick paragraph and post it to your teammate's employee profile. The shoutout displays on their employee profile and is visible to anyone who views their profile.&#x20;

:::hint{type="info"}
When your organization is integrated with Slack, shoutouts are also automatically posted in a public channel for your entire organization to see.
:::

![Shoutout](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/Np75U3_BeUJBCrnxNu0Tq_shoutout.png)

To give someone a shoutout:

1. From the left sidebar, select **Org Chart**.
2. In the **Org Chart**, select the employee whose profile you want to view.
3. In the employee's profile summary, select **View profile**.
4. Choose **Shoutout** from the **Complete tasks** dropdown.
5. Use the **Shoutout** dialog to enter the text you’d like to share with the employee.
6. Select **Submit**. The shoutout displays on the Shoutout tab of the employee’s profile.

## View your shoutouts

You can view your shoutouts from the employee profile page.

To view shoutouts:

1. From the left sidebar, select **Org Chart**.
2. In the **Org Chart**, select the employee whose profile you want to view.
3. In the employee's profile summary, select **View profile**.
4. Select the **Shoutout** tab to view the shoutouts others have given to you.

:::hint{type="info"}
[Packages](https://www.charthop.com/pricing/)**:&#x20;**<font color="#a9a9a9">Basic</font> <font color="#000000">|</font> <font color="#000000">**Headcount Planning** | </font><font color="#000000">**Compensation Reviews** | </font><font color="#000000">**Performance** | </font><font color="#000000">**Engagement** </font>
:::


[title] Approval delegates
[path] ChartHop for Employees/Edit your User settings/

Approval Delegates lets you designate a trusted person to review and act on approval requests on your behalf. Delegates see delegated tasks in their My Tasks list and can approve, reject, or comment, with all actions recorded as on behalf of you in the approval history.

This is useful for:

- **Assistants and chiefs of staff** who manage approval workloads for executives on an ongoing basis.
- **Vacation coverage** to keep approvals moving when you are out for an extended period.
- **High-volume approvals** where distributing approval work helps things stay unblocked.

Approval Delegates supports **scenario approvals** and **time-off approvals**.

## Accessing the Approval Delegates tab

Go to **Settings > User Settings** and select the **Approval Delegates** tab.

You will see two sections: one for Scenarios and one for Time Off. Each section lets you independently assign a delegate for that approval type.

Your delegate will receive the same access you have for the approval type, so they can review and act on requests on your behalf.

## Setting a delegate

In either the Scenarios or Time Off section, search for the person you would like to designate as your delegate and select them. Only active users with a filled job can be selected.

You can only have one delegate per approval type at a time. If you set a new delegate, they replace the previous one.

### Always on vs. time-scoped delegation

By default, the **Always on** checkbox is selected, meaning your delegate is active indefinitely until you manually remove them. This is useful for assistants or chiefs of staff who manage your approvals on an ongoing basis.

If you uncheck **Always on**, you can set a start date and end date for the delegation. This is useful for planned absences like an extended vacation or leave, where you only need coverage for a specific window of time.

When a time-scoped delegation expires, it is automatically deactivated. The expired delegation remains visible in your settings (greyed out), so you can easily update the dates or turn **Always on** back on without having to re-select the person.

[title] Paylocity
[path] Implementing ChartHop/Apps & Integrations/Payroll systems/Installing payroll apps/

With the Paylocity app, you can sync your payroll data to ChartHop, which automatically builds your org chart and keeps it up to date. Synced data includes titles, contact information, demographics, compensation, managers, departments, and locations.

### Paylocity at a glance

The following table summarizes ChartHop’s Paylocity app. 

| **Supported ChartHop packages**      | - <font color="#000000">Standard </font>
- <font color="#000000">Premium</font>                                                                                                                                                                                                                                                                |
| ------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Prerequisites**                    | A ChartHop account with the Owner role and a Paylocity API key.                                                                                                                                                                                                                                                                                |
| **API key permissions**              | API key is required.ChartHop assistance is required for this app. Paylocity requires certain request forms to acquire API keys. Work with ChartHop’s Professional Services team to request an API key from your Paylocity representative.                                                                                                      |
| **Data direction**                   | Inbound from Paylocity to ChartHop                                                                                                                                                                                                                                                                                                             |
| **Sync cadence**                     | Daily or as needed                                                                                                                                                                                                                                                                                                                             |
| **Effective dating support**         | No                                                                                                                                                                                                                                                                                                                                             |
| **Additional field mapping support** | For Premium customers, additional field mapping is available for the [Employees](https://prod.cdn.paylocity.com/developer/index.html#tag/Employee-Staging) field category. Note that you cannot map Paylocity custom fields to ChartHop fields.<br /><br />Please direct all custom mapping requests to ChartHop’s Professional Services team. |
| **Payroll app overview**             | Read an [overview](https://docs.charthop.com/payroll-system-apps) of how payroll apps work in ChartHop.                                                                                                                                                                                                                                        |
| **Synced Data**                      | The default [synced data](https://docs.charthop.com/synced-data-from-paylocity) from Paylocity to ChartHop.                                                                                                                                                                                                                                    |


[title] HiBob
[path] Implementing ChartHop/Apps & Integrations/Payroll systems/Installing payroll apps/

# HiBob Integration Workflow Guide

## Overview

This guide covers best practices for running HiBob as your HRIS with ChartHop. HiBob serves as the source of truth for employee records, organizational structure, and compensation. Understanding how the sync works is critical to avoiding incorrect headcount, org chart issues, and data mapping problems.

***

## How the Integration Works

### What Data Syncs from HiBob

- **People:** Name, email, image, birth date, gender, ethnicity
- **Jobs:** Title, department, location, manager, start date, employment type
- **Compensation:** Base salary, pay period, currency, variable compensation
- **Change History:** Work changes, employment changes, salary changes, lifecycle events (hires and departures)

### How Matching Works

The sync uses the HiBob employee ID (`hibobid`) as the unique identifier for matching records between systems. Each sync cycle fetches current worker data and historical changes, exports them to CSV, and imports them into ChartHop with upsert enabled.

### Sync Modes

- **Initial sync:** Pulls all workers and full change history. Automatically detects the head of the organization and builds the org chart from scratch.
- **Incremental sync:** Pulls changes from a configurable lookback window (default: 30 days) plus all current worker data to keep records up to date.

### Lifecycle Status Handling

HiBob lifecycle statuses map to ChartHop as follows:

- `"employed"` → Creates a HIRE change in ChartHop
- `"hired"` (offer accepted, not yet started) → Ignored — does not create a HIRE change
- `"terminated"` → Creates a DEPART change with reason type (voluntary/involuntary) and regret tracking

***

## Employment Type Mapping

HiBob's `employment.type` field is mapped to ChartHop's employment type as follows:

| HiBob `employment.type`                                  | HiBob `employment.contract` | ChartHop Employment Type |
| -------------------------------------------------------- | --------------------------- | ------------------------ |
| Starts with "Perm" (e.g., "Permanent", "Permanent (UK)") | "Full time"                 | `FULL`                   |
| Starts with "Perm"                                       | "Part time"                 | `PART`                   |
| Starts with "Contract" (e.g., "Contract", "Contractor")  | Any                         | `CONTRACT`               |
| Starts with "Fixed" (e.g., "Fixed-term")                 | Any                         | `TEMP`                   |
| "Apprentice" or "Intern"                                 | Any                         | `INTERN`                 |
| Any other value                                          | Any                         | Passed through unmapped  |

:::BlockQuote
⚠️ **Important:** If your organization uses non-standard employment type values for contractors (e.g., "Independent Contractor", "Consultant", "External", "Contingent Worker"), these will not be recognized as `CONTRACT` type. They will pass through unmapped and may be treated as standard employees in headcount calculations.**Action required:** Ensure all contractor employment types in HiBob begin with "Contract" or "Fixed". If this is not possible, contact support to discuss custom mapping options.
:::

### Excluding Employment Types from Sync

If certain employment types should not sync to ChartHop at all, use the `excludeEmployment` app option. For example, setting `excludeEmployment: ["Intern", "Apprentice"]` will skip those workers entirely during sync.

***

## Initial Setup Checklist

- [ ] **Understand the&#x20;**`daysBack`**&#x20;setting.** The default is 30 days. This setting only applies to incremental syncs — it controls how far back the sync looks for changes. Initial sync is not affected and pulls all available history. If you need an incremental sync to pick up historical changes older than 30 days (e.g., a missed hire event or a retroactive correction in HiBob), temporarily increase this value before running the sync.
- [ ] Enable `logUnmappedFields` during initial setup to identify HiBob custom fields that need mapping.
- [ ] Verify employment type values in HiBob match the expected patterns (see Employment Type Mapping above).
- [ ] Verify all custom field mappings point to the correct HiBob fields before running the first sync.
- [ ] Review the org chart after initial sync to identify any orphaned employees (missing manager or missing hire change).
- [ ] Confirm that any department or location filters applied to the sync do not exclude managers of employees who are included in the sync.

***

## Common Issues and Troubleshooting

### Employee Not Appearing in Org Chart

**Symptom:** An employee exists in HiBob but doesn't appear in ChartHop's org chart.

**Common causes:**

1. **Missing manager:** The org chart is built from manager relationships. If the employee's manager field in HiBob is empty or references an unknown ID, the employee will exist in ChartHop but won't be connected to the org tree.
2. **Missing HIRE change:** ChartHop requires a HIRE change to place a person into a job. HiBob's lifecycle status must be `"employed"` — a status of `"hired"` (offer accepted but not started) is intentionally excluded from sync. Verify the employee's lifecycle status in HiBob.
3. **Manager in excluded department:** If you're using sync filters to exclude certain departments, any employee whose manager is in an excluded department will have an incorrect or missing manager assignment. The sync cannot look up managers that don't exist in ChartHop.
4. **HIRE event missing manager data:** If HiBob's lifecycle/work history doesn't include a manager on the hire date, ChartHop may fail to create the hire. Check if the employee's earliest work history entry includes a `reportsTo` value.
5. **Hire date older than history lookback:** If the employee's hire date was missed during initial sync and the `daysBack` lookback window on subsequent incremental syncs doesn't reach back far enough, their HIRE change will not be imported. Temporarily increase `daysBack` and run a sync, or contact support.
6. **Future start date:** Employees with a future start date appear as "starting" (`is:starting`) and may be excluded from default org chart views. They will appear once their start date arrives.

**Diagnostic steps:**

- Search for the person in ChartHop by name or email
- Check if they have a HIRE change with a valid date
- Check if their job has a manager relationship
- Search for duplicate person records
- Verify the employee's lifecycle status and manager in HiBob

***

### Contractors Consuming Permanent Headcount

**Symptom:** A contractor synced from HiBob is placed into an open permanent role, consuming planned headcount in the wrong department.

**Cause:** When HiBob syncs a new hire, ChartHop's matching logic looks for an open job with the same title and manager. This matching does not currently distinguish between permanent and contractor roles. If a contractor has the same title as an open permanent requisition, they may be placed into that slot.

**Current workarounds:**

- Use distinct job titles for contractors vs. permanent roles (e.g., "Software Engineer - Contractor" vs. "Software Engineer")
- Use the `excludeEmployment` option to exclude contractors from the HiBob sync entirely, and manage contractor records manually in ChartHop
- After sync, review contractor placements and manually move any that were incorrectly assigned

:::BlockQuote
🚧 **Known limitation:** ChartHop does not currently filter open job matching by employment type. Contact your CSM for the latest status.
:::

***

### Custom Field Mapping Issues

**Symptom:** A HiBob custom field is not appearing in ChartHop, or is mapped to the wrong ChartHop field.

**Cause:** HiBob custom fields are only synced if they are explicitly included in the field mapper configuration. Unmapped fields are discarded during sync.

**Troubleshooting:**

- Enable the `logUnmappedFields` app option to see which HiBob fields are available but not mapped
- Verify that the field mapper points to the correct HiBob field path — HiBob uses a lookup table system where field values can be keys into "lists", and the displayed value may differ from the API value
- If a ChartHop field is mapped to the wrong HiBob column (e.g., "Team" mapped to a column that returns "Team Type" values), update the field mapper to reference the correct source field

:::BlockQuote
📝 **Note:** Changes to field mapper configuration take effect on the next sync cycle. After remapping, run a manual sync to verify the correction.
:::

***

### Custom Group Fields Appending Instead of Overwriting

**Symptom:** An employee shows multiple values for a custom group field (e.g., multiple locations or sub-teams) after each sync, rather than having the old value replaced.

**Cause:** Custom group fields in ChartHop currently append new values by default. Single-value overwrite mode for custom groups is not yet supported.

:::BlockQuote
🚧 **Known limitation:** There is no configuration workaround at this time. Contact your CSM for the latest status on this feature request.
:::

***

### Incorrect Manager After Department Filter Exclusion

**Symptom:** An employee shows the wrong manager (often the head of the organization) after sync.

**Cause:** A sync filter is excluding the department that contains the employee's actual manager. When ChartHop can't find the referenced manager in the synced data, it falls back to assigning the head job as the manager.

**Resolution:** Either include the manager's department in the sync filter, or manually maintain the manager relationship for affected employees. Note that all employees managed by someone in the excluded department will be affected, not just one.

***

### Preferred Name Not Syncing

**Symptom:** An employee's preferred name in HiBob is not reflected in ChartHop.

**Cause:** The default field mapper maps `employee.firstName` and `employee.surname` to ChartHop's name fields. HiBob preferred name fields may not be included in the default mapping.

**Resolution:** Verify that the preferred name field from HiBob is mapped to ChartHop's `name.pref` field in the field mapper configuration. If not present, add the mapping.

***

## Default Field Mappings

The following fields are mapped by default from HiBob to ChartHop:

| ChartHop Field        | HiBob Source (Current State)              | HiBob Source (Change History)             |
| --------------------- | ----------------------------------------- | ----------------------------------------- |
| First Name            | `employee.firstName`                      | —                                         |
| Last Name             | `employee.surname`                        | —                                         |
| Work Email            | `employee.email`                          | —                                         |
| Title                 | `employee.work.title`                     | `work.title`                              |
| Manager               | `employee.work.manager`                   | `work.reportsTo.id`                       |
| Department            | `employee.work.department`                | `work.department`                         |
| Location              | `employee.work.site`                      | `work.site`                               |
| Start Date            | `employee.work.startDate`                 | —                                         |
| Employment Type       | `employment.type` + `employment.contract` | `employment.type` + `employment.contract` |
| Base Compensation     | Salary amount + pay period + currency     | Salary history                            |
| Variable Compensation | Variable type + amount + currency         | Variable history                          |
| Lifecycle Events      | —                                         | `lifecycle.status` (employed/terminated)  |

Any HiBob field not listed above requires explicit addition to the field mapper configuration.

***

## Best Practices

1. **HiBob is the source of truth for employee data.** Configure it as the primary sync and let it maintain all records.
2. **Standardize employment types in HiBob.** Contractors must use values starting with "Contract" or "Fixed" to be correctly classified.
3. **Avoid excluding departments from sync** if those departments contain managers of included employees.
4. **Verify custom field mappings during setup** using `logUnmappedFields`.
5. **Use distinct titles for contractor vs. permanent roles** to prevent incorrect job matching.
6. **Monitor the first few sync cycles after setup** — check for orphaned employees, incorrect managers, and unexpected headcount assignments.
7. **Verify lifecycle statuses in HiBob** — only `"employed"` creates a HIRE in ChartHop. Employees with `"hired"` status will not sync until their status changes.

[title] HiBob + Lever (Outbound)
[path] Implementing ChartHop/Apps & Integrations/Untitled/

# HiBob + Lever in ChartHop: Integration Guide

*How the two systems interact, where they hand off data, and how to avoid conflicts*

HiBob and Lever sync into ChartHop independently, but their data intersects at two critical moments: when a new hire is made, and when a contractor fills (or shouldn't fill) an open headcount slot. Understanding these handoff points is the core of running both integrations correctly.

## How the Two Systems Connect

HiBob and Lever don't communicate with each other directly. ChartHop is the connective tissue. Each system writes data into ChartHop on its own schedule, and ChartHop's matching logic determines how records from both systems relate to each other.

There are two join points that matter:

| Join Point          | HiBob Side                                      | Lever Side                                                            | How ChartHop Links Them                                                                                               |
| ------------------- | ----------------------------------------------- | --------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------- |
| **Person matching** | Employee record, identified by hibobid          | Candidate record, identified by email                                 | ChartHop matches the Lever candidate to the HiBob-created person by email address (home email first, then work email) |
| **Job matching**    | HIRE change synced from HiBob lifecycle history | Open requisition, identified by leverReqId stored on the ChartHop job | When Lever fires a hire webhook, ChartHop looks for an open job with a matching leverReqId and links the hire to it   |

Everything else each system does (HiBob building the org chart, Lever managing candidate stages) is independent. Conflicts only arise at these two join points.

## The New Hire Workflow

When a new hire is confirmed, both HiBob and Lever will create data in ChartHop independently. ChartHop has multi-step matching logic designed to prevent duplicates regardless of which system syncs first.

### How ChartHop matches people

When the HiBob sync brings in an employee, ChartHop uses the following matching process:

1. **HiBob ID match:** Looks for an existing person with a matching hibobid contact. This is the primary and most reliable match.
2. **Contact match (unassigned people only):** If no hibobid match is found, it searches people who don't yet have a hibobid contact and compares their existing contacts (email, phone) against the incoming person's contacts.

Both fallback steps only search unassigned people — people who don't have a hibobid contact yet. If a person was already created by another system (e.g., Lever) and is assigned to a job, they will still be found by the contact fallback as long as the email address matches.

When Lever fires a hire webhook, it matches candidates by email address (home email, then work email) before creating a new person.

In most cases, this means the order doesn't matter — whichever system syncs second will find the person created by the first system via email matching.

### When duplicates can still occur

Duplicates are rare but can happen when all of the following are true:

- The person created by the first system is already assigned to a job (which removes them from the unassigned matching pool)
- The email addresses differ between Lever and HiBob (e.g., personal email in Lever vs. work email in HiBob)

The most common scenario: Lever hires a candidate using their personal email, assigns them to a job immediately, and then HiBob syncs with their work email. The hibobid match fails (doesn't exist yet), the contact fallback fails (emails don't match), and a duplicate is created.

### How to prevent duplicates

- **Use consistent email addresses across systems.** If Lever and HiBob both have the same email for the candidate, matching will succeed regardless of sync order.

### If duplicates occur

- Monitor for duplicate person records after hiring events. A duplicate will typically appear as two people with the same name or email — one with a hibobid contact and one with a Lever contact.
- Merge the duplicate promptly. The merged record must retain both contacts — the hibobid contact and the Lever contact — so future syncs from both systems match correctly.
- Do not delete either record before merging. Deleting removes the associated contact, which can break future sync matching.

### A note on "hired" vs. "employed" status in HiBob

HiBob distinguishes between two pre-start statuses: **"hired"** (offer accepted, not yet started) and **"employed"** (active in HiBob). ChartHop intentionally does not sync workers with a "hired" status — only "employed." This is by design, since a pending hire in HiBob is not yet a ChartHop employee record.

The consequence: ChartHop won't create a person record from HiBob until the employee's status is "employed." Employees with a future start date will appear in ChartHop as "starting" and may be excluded from default org chart views until their start date arrives.

## Contractor Headcount Conflicts

When HiBob syncs a new hire, ChartHop tries to place that person into an existing open job by matching on job title and reporting manager. This matching does not currently filter by employment type. A contractor synced from HiBob can inadvertently fill an open permanent headcount slot if the titles match.

### Why this happens

Lever manages open requisitions. HiBob manages all workers, including contractors. If a contractor is hired with the title "Software Engineer" and there's an open req for "Software Engineer" under the same manager, ChartHop's job matching may link them — removing the req from the open headcount pool.

### Mitigations

| Option                                  | How it works                                                                                                                                            | Tradeoff                                                                                                       |
| --------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------- |
| **Distinct contractor titles**          | Use a consistent suffix in HiBob for contractors (e.g., "Software Engineer - Contract"). This prevents title matching against permanent reqs.           | Requires discipline in HiBob data entry. Title mismatch is permanent unless you rename the contractor record.  |
| **Exclude contractors from HiBob sync** | Use the excludeEmployment option on the HiBob integration to skip contractor employment types entirely. Manage contractor records manually in ChartHop. | Contractors won't appear in org charts or headcount data unless entered manually. Higher maintenance overhead. |
| **Post-sync review**                    | After each HiBob sync, review contractor placements and manually correct any that filled the wrong slot.                                                | Reactive, not preventive. Works for low contractor volumes but doesn't scale.                                  |

## What Happens When a Lever Hire Webhook Fails

If the Lever hire webhook fires but ChartHop can't complete the hire, check the ChartHop process log for details. The most common causes specific to the HiBob/Lever interaction:

- **Person not found by email:** The candidate's email in Lever doesn't match any person's home or work email in ChartHop. Usually means HiBob hasn't synced the employee yet (see sequencing above), or the emails differ between systems.
- **Candidate has no email address:** A Lever candidate must have an email address for ChartHop to attempt a match at all. Candidates without an email will always fail.
- **No matching open job:** The leverReqId on the Lever req doesn't match any open job in ChartHop, or the job already has recruit status "Pending." Verify the req ID is correctly set on both sides.
- **No signed offer in Lever:** The hire webhook requires a signed offer. A verbal accept or offer-in-progress won't trigger it.

## Setup Checklist: Running Both Integrations Together

Before going live with both integrations simultaneously:

- \[ ] Confirm the candidate email used in Lever matches the work email entered in HiBob for all current employees. Consistent emails across both systems are the most reliable way to prevent duplicate person records.
- \[ ] Verify that leverReqId values are correctly populated on all open ChartHop jobs before enabling the Lever sync.
- \[ ] Confirm your HiBob contractor employment types (e.g., "Contract," "Fixed-term") are standardized. Non-standard values (e.g., "Consultant," "External") won't be classified correctly by ChartHop and may cause contractors to be treated as standard employees in headcount calculations.
- \[ ] After the first hiring event under the combined integration, verify the resulting ChartHop record has both a hibobid contact and a Lever contact attached.

[title] Getting Data into ChartHop
[path] Implementing ChartHop/

## What Are My Options? 

**One of ChartHop’s greatest strengths? Bringing all your people data into one clear, unified view, no matter where it lives today.**
But the question we hear all the time is: ***how*?**

Well, we’re here to help! There are multiple ways to get your data into ChartHop, whether you’re looking for a fully automated sync or a quick one-time upload.

**Not sure where to begin?**
This guide will walk you through your options (and yes, you can use more than one!).

**Still feeling stuck?&#x20;**&#xA;Don’t worry, we’ll help you choose the best setup for your needs.

:::Heading{depth="2" indent="1"}
**Out-of-the-Box Integrations**
:::

**Best for:** Teams using popular systems like BambooHR, Workday, ADP, or Paylocity. For our full list of OOTB integrations, *click here*.
**How it works:** ChartHop connects directly to many well-known HR systems and pulls in your data every day, automatically. No coding needed, just an API key.
**Why customers like it:** It’s easy to set up and keeps your data fresh without any manual work.

✅ Fully automated (daily sync)
✅ No intensive technical work required
✅ Keeps your data up-to-date

⚠️ Your sync may not pull over historical data, and may require an additional upload



:::Heading{depth="2" indent="1"}
**Custom API Integration**
:::

**Best for:** Companies with teams who can help set up a custom sync to send data to ChartHop
**How it works:** Your developers can build a custom connection that sends your data to ChartHop automatically. You control what’s sent and how often.
**Why customers like it:** Great for teams with custom tools or special data needs.

✅ Total flexibility
✅ Works with any system
⚠️ Requires developer help



:::Heading{depth="2" indent="1"}
**SFTP File Transfer**
:::

**Best for:** Companies that regularly export data into files or don’t have the option for a custom app but still want a more automated sync. 

**How it works:** You send data files (like spreadsheets) to a secure folder. This folder can be hosted by ChartHop or by your team. ChartHop then reads the file and updates your data.
**Why customers like it:** It’s automated and secure, and doesn’t require building a tech integration.

✅ Secure and reliable
✅ ChartHop or your team can host the folder
⚠️ You need to generate and send updated files



:::Heading{depth="2" indent="1"}
**Google Sheets Integration 🆕**
:::

**Best for:** Teams that manage HR data in Google Sheets or want to sync in custom data.
**How it works:** ChartHop connects to a shared Google Sheet and pulls in data regularly.
**Why customers like it:** It’s easy to use and update, without needing any technical setup by your team. Our team will work with you to ensure all fields are mapped over correctly.

✅ Easy data transfer from one familiar interface to another (aka ChartHop!)
✅ Easy to update in a familiar format
⚠️ Best for smaller, less complex data sets



:::Heading{depth="2" indent="1"}
**Manual CSV Upload**
:::

**Best for:** Initial Org Uploads, historical uploads, one-time uploads or quick updates
**How it works:** You can upload your data using a spreadsheet (CSV format) right inside ChartHop. We provide templates to make it easy.
**Why customers like it:** Simple and fast, especially if you just want to get started.

✅ Quick setup
✅ No technical skills needed
⚠️ You’ll need to upload again if the data changes



:::Heading{depth="2" indent="1"}
**Third-Party API Connectivity**
:::

**Best for:** Companies using supported payroll, benefits, or HR systems (200+ apps supported)
**How it works:** ChartHop connects to third-party tools that already integrate with a wide range of platforms. What data comes in (and how often) depends on the app you connect.
**Why customers like it:** Easy to get started and access multiple systems in one place to get that data into ChartHop.

✅ Connect to 200+ systems
✅ No need to build anything
⚠️ Sync timing and data fields vary depending on the app



## How to Choose

| **If you...**                                                                                          | **Try this option:**       |
| ------------------------------------------------------------------------------------------------------ | -------------------------- |
| Use a well-known HR system we connect to                                                               | Out-of-the-box integration |
| Have developers and custom systems<br />                                                               | Custom API integration     |
| Export files regularly, want automation and there is no OOTB sync                                      | SFTP file transfer         |
| Manage your data in Google Sheets or want to stack additional data on top of your existing people data | Google Sheets integration  |
| Want to get started quickly or need a speedy one-time upload/update                                    | Manual CSV upload          |
| Use a supported payroll or HR system that is not an OOTB option                                        | Third-party integration    |



## Glossary

🔹 **CSV** – A spreadsheet file (like Excel) used to upload data
🔹 **SFTP** – A secure way to send files from one system to another
🔹 **API** – A way for two systems to talk to each other and share data automatically
🔹 **Integration** – A connection between systems that lets data flow from one system to another

[title] Gusto
[path] Implementing ChartHop/Apps & Integrations/Payroll systems/Installing payroll apps/

With the Gusto app, you can sync your payroll data to ChartHop, which automatically builds your org chart and keeps it up to date. Synced data includes titles, managers, departments, location, hires and departures, contact information, demographics, compensation changes, and time off.

### Gusto at a glance

The following table summarizes ChartHop’s Gusto app. 

| **Supported ChartHop packages**      | - <font color="#000000">Basic</font>&#x20;
- <font color="#000000">Standard </font>
- <font color="#000000">Premium</font>                                                                                                                              |
| ------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Supported Gusto packages**         | * Simple
* Plus
* Premium                                                                                                                                                                                                                               |
| **Prerequisites**                    | A Gusto account with administrator privileges and a ChartHop account with the Owner role.                                                                                                                                                               |
| **API key permissions**              | None needed. Follow the installation process from within ChartHop.                                                                                                                                                                                      |
| **Data direction**                   | Inbound from Gusto to ChartHop                                                                                                                                                                                                                          |
| **Sync cadence**                     | Daily or as needed                                                                                                                                                                                                                                      |
| **Effective dating support**         | No                                                                                                                                                                                                                                                      |
| **Additional field mapping support** | For ChartHop Premium customers, custom mapping is available for the [employees](https://docs.gusto.com/app-integrations/reference/get-v1-employees) field category. Please direct all custom mapping requests to ChartHop’s Professional Services team. |
| **Payroll app overview**             | Read an [overview](https://docs.charthop.com/payroll-system-apps) of how how payroll apps work in ChartHop.                                                                                                                                             |
| **Synced Data**                      | The default [synced data](https://docs.charthop.com/synced-data-from-gusto) from Gusto to ChartHop.                                                                                                                                                     |




[title] Export your Org Chart to slides
[path] Getting around in ChartHop/Org Chart/

ChartHop enables you to export your **Org Chart** to a Microsoft PowerPoint file and provides several options so that you can customize that export.

You can choose to include only specific departments, teams, or locations in the export. In addition, you have the ability to choose different aspects of your **Org Chart** to be highlighted in your export based on ChartHop fields (for example, comp band). You also have the option to export each team or department to separate slides. Custom filters give you even more flexibility about the information that is included in your export.&#x20;

For example, you can export an **Org Chart&#x20;**&#x76;iew of your organization that includes only the Finance and Marketing departments, highlights the comp band for each employee, and excludes open jobs.&#x20;

:::hint{type="info"}
Org Chart exports only include data you can access. Depending on your user access role and the sensitivity of certain data, some jobs may not be included in your export. For example, open jobs marked as **Manager shared** or **Highly sensitive** may not be exported if you don't have access to that data. You can control whether sensitive data is included in the export. [Learn more.](https://docs.charthop.com/export-your-org-chart-to-slides#0k-mq)
:::

To export your Org Chart:

1. Select **Org Chart** from the left sidebar.
2. Select **Export Icon** in the upper right corner.
3. Use the options in the **Export Powerpoint** dialog to determine how your slides are structured and the data that is included.&#x20;
   - Any dates, filters, and **Visualize** settings you've applied to the **Org Chart** are automatically reflected in the **Export Powerpoint** dialog. For example, if you've filtered the **Org Chart** to only show the Accounting department, the **Filter** field in the **Export Powerpoint** dialog will automatically have the `department="Accounting"` filter pre-populated.
   - See below for a description of all export settings.&#x20;
4. Select **Export**. Depending on the size of your organization, the export may take some time.&#x20;

![Export Powerpoint dialog](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/CBV7Uc91PYDYALa6KCTAt_exportpptdialog.png)

### Export settings

Below is a description of available export settings:

| **Export Setting**                    | **Description**                                                                                                                                                                                                                                                                                                                                             |
| ------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Date                                  | Set the date in your organization's history that you want to export. Defaults to current date.                                                                                                                                                                                                                                                              |
| Theme                                 | Determines the theme that is used for the export. If your organization has a custom theme available, you can select it here. Defaults to **ChartHop Default**.                                                                                                                                                                                              |
| Highlight boxes                       | Determines what aspect of your organization is included on your employee cards. Defaults to **Departments and Teams**.                                                                                                                                                                                                                                      |
| Include profile photos                | Choose whether or not you want profile photos included in your export.                                                                                                                                                                                                                                                                                      |
| Include employee names                | Include employee names in the export. When this option is not selected, only job titles display in employee cards.                                                                                                                                                                                                                                          |
| Include headcount summaries           | Include a headcount summary on each slide.                                                                                                                                                                                                                                                                                                                  |
| Include open jobs                     | Include open jobs in your exported slides.                                                                                                                                                                                                                                                                                                                  |
| Export departments as separate slides | Export each department to a separate slide. Larger departments may still be split into multiple slides for readability.                                                                                                                                                                                                                                     |
| Export teams as separate slides       | Export each team to a separate slide.  Larger teams may still be split to multiple slides for readability.                                                                                                                                                                                                                                                  |
| Include sensitive data                | Include sensitive data (for example, certain open jobs) in the export.<br /><br />This option is selected by default when the sensitive data eye icon is toggled to visible. When sensitive data is toggled to hidden, you must select this option to include sensitive data in the export. [Learn more.](https://docs.charthop.com/hiding-sensitive-data)  |
| Slide format                          | Select how your **Org Chart** displays on your slides:<br />* **Detailed view** - Exports large teams and departments using separate slides to ensure legibility. This slide format displays up to 10 employees per slide.
* **Overview** - Exports large teams and departments on the same slide. This slide format displays up to 40 employees per slide. |
| Export groups                         | Select specific groups (departments, teams, locations) to include in your export.                                                                                                                                                                                                                                                                           |
| Filter                                | Enter a custom filter to more specifically determine the employees and jobs that are exported.                                                                                                                                                                                                                                                              |

### Export a specific department to a single slide

To export a specific department (for example, Accounting) on to a single slide, you can configure the following settings:

- In the **Export groups** field, enter the `Accounting` department.
- Uncheck the **Export teams as separate slides** setting.
- Select the **Overview&#x20;**&#x73;lide format when you have more than 10 employees in the department.

To display a specific piece of data (for example, comp band) as highlighted in the employee nodes:

- In the **Highlight boxes** field, enter and select `Comp band`.

![Export Powerpoint example](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/uH8uqyUc9rWjuAxlnvpX2_exportpptexample.png)

Once you have these settings configured, select **Export**. Your export should look like the example below.&#x20;

All employees in the Accounting department are on the same slide and any employees who are not part of that group display are not highlighted. Each node highlights the specific comp band for that employee.&#x20;

![Export slide example](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/59IodRouPEorYUMt9rTUy_exportpptexampleslide.png)

### Export your entire org chart to a single slide

To export your entire **Org Chart** to a single slide, you can configure the following settings:

- Uncheck the **Export departments as separate slides** setting.
- Uncheck the **Export teams as separate slides** setting.
- Select the **Overview&#x20;**&#x73;lide format.

:::hint{type="info"}
Depending on the size of your **Org Chart**, all employee nodes may not display legibly. For larger organizations, exporting to a single slide may not be possible and multiple slides must be used instead.
:::

### Export your org chart without employee names

You can export your **Org Chart** so that it displays without any employee names. This is helpful for presenting the structure of your organization in slides while maintaining employee privacy. 

To export your Org Chart without employee names:

1. Select **Org Chart** from the left sidebar.
2. Select **Export** in the upper right corner.
3. In the **Export Powerpoint** dialog, uncheck the **Include employee names** option.
   - Unchecking the **Include profile photos** option is also recommended to remove all personal identifiers.&#x20;
4. Select **Export**.

Depending on the size of your organization, the export may take some time. Nodes display in the exported **Org Chart** without any employee names.

### Export your org chart without sensitive data

You can export your **Org Chart** so that it displays without any sensitive data (for example, open jobs marked as **Manager shared** or **Highly sensitive**).

To export your Org Chart without sensitive data:

1. Select **Org Chart** from the left sidebar.
2. Select **Export** in the upper right corner.
3. In the **Export Powerpoint** dialog, uncheck the **Include sensitive data** option.
   - This option is selected by default when the sensitive data eye icon is toggled to visible. [Learn more.](https://docs.charthop.com/hiding-sensitive-data)
   - When the sensitive data eye icon is toggled to hidden, this option is automatically unselected.
4. Select **Export**.

Depending on the size of your organization, the export may take some time. The **Org Chart** is exported without any data marked as **Manager shared** or **Highly sensitive**.


[title] Data Sheet
[path] Getting around in ChartHop/

The **Data Sheet** provides a list view of your organization, which is helpful when you need to customize how you see your organization's data or edit the data for multiple employees at once.

You can use the **Data Sheet** as a source of truth for all the job and people data within your organization. This page gives you the ability to create a customized view of your data for all of your planning needs. You can control what data displays on the page by customizing the columns you need and sorting by a particular column. You can also use filters to refine which employees and jobs are included in the list.

![](https://api.archbee.com/api/optimize/CXAjUAezd9VEEVQBIYmdw/9rxIdJiSvS9K06Xa2kLD__image.png)

# Navigating the Data Sheet

When you start viewing the data sheet you are in the unsaved **"Data Sheet"&#x20;**&#x76;iew. As you [Add Columns](./#adding--removing-columns) , [Data Sheet](docId\:XTd4DG4I_4_nMwjfEsq0S), [Data Sheet](docId\:XTd4DG4I_4_nMwjfEsq0S), you will create the exact view of the data that you need. You&#x20;

Data is protected at the field (column) level by the [Controlling sensitive data](docId:9Se1T9BgI6p5Cg3ixVSX8) assigned to the field, the viewer's positition in the organization and by their specific [Key Concepts: Role-based Access](docId\:zernFu32JBQjFBn67l_fE).

Most data in ChartHop time tracked. So you will see a **time selection and slider&#x20;**&#x61;t the top of the data sheet. This will show you what date you are viewing the data as of.&#x20;

### Actions

Above the Data Sheet on the right side, you will see a row of icons. These options are:

1. [Restore / Reset](./#restore-the-data-sheet) (Circular arrow icon)
2. Edit Mode (Pencil Icon) - *Only shown if you can edit data.*
3. Select & Manage Columns (Column Icon)
4. Add Open Job (Plus Icon) - *Only shown if you have access to do this.&#x20;*
5. Export and Sync (Download Icon)
   1. Copy all data & headers
   2. Export to CSV
   3. Sync to Excel/Sheets

![](https://app.archbee.com/api/optimize/CXAjUAezd9VEEVQBIYmdw/Cw4QG6_1sh9lMVmrgVS73_image.png)

### Filtering data &#x20;

Refine what Jobs or people are displayed by applying a **filter** to the data.&#x20;

More information about filtering can be found in [Filtering data](docId\:QI3YzuY_2ldfbgTP4TlJ5).&#x20;

## Columns

### Adding & Removing Columns

You can quickly add a new column by clicking the ➕ in the last column header or any column header.&#x20;

Click the column header to and click "Hide column" to remove it from the data sheet view.&#x20;

You can also use the **Select Columns** button located above the data sheet and dialog to add, remove and reorder columns as well.&#x20;

To retain the columns that you added to to the data sheet, [Data Sheet](docId\:XTd4DG4I_4_nMwjfEsq0S) - give it a name and share it with others.&#x20;

![](https://api.archbee.com/api/optimize/CXAjUAezd9VEEVQBIYmdw/2Gxqn9dBkNIBiRkrjsSE6_image.png)

### Calculated columns

Calculated columns are like a Formula in a spreadsheet that is applied to the whole column. You can add any calculation to your sheet by:

1. Click the "+" Column
2. Click Add calcualted column&#x20;
3. Add the formula and a column label.&#x20;

This column can be saved as a [Field data types & smart fields](docId\:XNd9irlWsHFCeXmwwkSbA) field or can just exist within the context of the sheet.&#x20;

![](https://api.archbee.com/api/optimize/CXAjUAezd9VEEVQBIYmdw/RWoeykWLoo0PLGSbnQIBj_image.png)

### Sorting Columns

Click the column header then select "Sort ascending" or "Sort descending" to sort a column.&#x20;

![Sorting Columns](https://app.archbee.com/api/optimize/CXAjUAezd9VEEVQBIYmdw/mb_y_ntOInysPt3My0piB_image.png "Sorting Columns")

### Column Details

Hover over a header to view information about the field in the colum including:

- Type (icon)
- Name
- Field code
- Sensitivity
- Description
- Summary with a breakdown of percentages for certain types of fields.&#x20;

![](https://api.archbee.com/api/optimize/CXAjUAezd9VEEVQBIYmdw/v3laDRasTG0t543zgc-_H_image.png)

## Data Views

![Save and Restore](https://app.archbee.com/api/optimize/CXAjUAezd9VEEVQBIYmdw/EKBpCIEe0PHSZalSbnaxk_image.png "Save and Restore")

### Saving a Data Sheet View

To save a Data Sheet view (Columns, filters and time selection):

1. Rollover the "**Data Sheet"** tab at the top of the Data Sheet&#x20;
2. Select **Save as new view**
3. Give the view a **name&#x20;**
4. **Share** the view with others. &#x20;

### Using Relative Dates in Saved Views

When you save a Data Sheet view, the **filter is saved as written** — not as a snapshot of the evaluated date. This means filters that use relative date expressions will stay dynamic and automatically recalculate each time the view is opened.

For example, to create a saved view that always shows people who started in the last 30 days:

```javascript
startDateOrg >= date('-30d') and is:person
```

Or to find people approaching a 90-day milestone (started between 85 and 95 days ago):

```javascript
startDateOrg >= date('-95d') and startDateOrg <= date('-85d') and is:person
```

Because the filter stores `date('-30d')` rather than a hardcoded date like `2026-04-15`, each time someone opens the saved view, the date range is recalculated from the current date.

**The date slider is also saved.** If you want the view to always reflect today's data (not a historical snapshot), set the date slider to **Today** before saving the view.

### Restore the Data Sheet

The home "Data sheet" can be reset to clear all columns, filters, and dates back to the default. Normally they are retained from session to session across time.&#x20;

# Taking action on a Person or Job

There are various ways to edit data on the data sheet. You can use the [Action Menu](./#action-menu), copy & paste within the data sheet, copy & paste from a spreadsheet, bulk edit

![](https://api.archbee.com/api/optimize/CXAjUAezd9VEEVQBIYmdw/sOs5pBKqgMs7PgyX-7oUK_image.png)

### Action Menu

&#x20;To access the actions like Edit job, Edit person or Terminate, you can either:

1. Click on the **action button** (button with three dots)
2. **Right click** on the row
3. Click on the **expand** button (button with diagnal opposing arrows) and select actions from the buttons on the side panel

&#x20;The [Editing employee profiles](docId\:xoULLp5oNvwTloGOI9seS) or [Edit jobs](docId\:UKwIkyHMleMAqod7QlpPC) will allow you to pull up a dialog for you to edit from.&#x20;

### Edit a cell

To edit a cell in the Data Sheet, either:

1. **Double Click** on a Cell you wish to Edit
2. Click the **Edit** Button (Pencil Icon) in the top right

Once you are done making Edits, Click **Save** and Review Changes.&#x20;

![](https://api.archbee.com/api/optimize/CXAjUAezd9VEEVQBIYmdw/zcXUJzOVZ50b5bztYD5Hl_image.png)

### Copy + Paste

**Copy & Paste within ChartHop&#x20;**— Select then copy any cell or cells, paste it onto other data that you have access to edit and the changes will be staged.&#x20;

**Paste into ChartHop** — Copy data from another spreadsheet then paste it into the data sheet. If the cells are editable for you and the values are valid, it will paste in. Then you can adjust or save the changes.&#x20;

**Copy from ChartHop&#x20;**— Select then copy any content, paste it onto a spreadsheet like Excel or Google Sheets. ✨ Magic.&#x20;

**Copy entire data sheet &#x20;**— To copy all of the data and headers, use the **Export** menu at the top right of the data sheet and select **Copy all data & headers**

### Bulk Edit

To edit more than One Person or Job at a time, select multiple rows and Right Click on the selected rows and select Bulk Edit.&#x20;

![](https://api.archbee.com/api/optimize/CXAjUAezd9VEEVQBIYmdw/93wlK0KYutDeDhOKYsbWK_image.png)

## Exporting&#x20;

Select the **Download Icon** in the top right corner of the data sheet to bring up the export options:

### Copy all data & headers

This option will copy the entire data sheet to clipboard including headers.&#x20;

This data can then be pasted into a spreadsheet or another system.&#x20;

Note: this is not recommended for very large data sets.&#x20;

### Export to CSV

Download a CSV of the data. You will be presented with a few options for what format the data can come in.&#x20;

### Syncing Data

ChartHop data sheets can be live synced to a spreadsheet or excel file. See more at [Managing data sheet and calendar syncs](docId\:tQp_4Z9cxQDAqswirLkGI)&#x20;

###

:::hint{type="info"}
[Modules:](https://www.charthop.com/pricing/) <font color="#000000">HRIS | </font>**Engagement | Goals | Performance |&#x20;**<font color="#000000">Compensation Reviews | </font>**Headcount Planning**
:::


[title] Calendar
[path] Getting around in ChartHop/

The Calendar view is a page on the main navigation of ChartHop that displays key employee dates like Anniversaries,Start Dates and Time Off in a calendar format.

The calendar can be filtered to display events applicable to:

- Everyone
- My department
- My Teams
- My direct reports
- Me
- Custom

![](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/vr2n3sgBi9RQBbw60bZLX_image.png)

# "This week" calendar preview on home page

On the home page, a preview of the calendar will display the current week and what events are happening during that week. You can configure this view in [Home Content](https://docs.charthop.com/customizing-home-page-content).

::Image[]{src="https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/gpux8Bv4OTP9JlZPtOvQI_image.png" size="76" width="1590" height="556" position="center" showCaption="false"}

# Calendar configuration

## Built-In Calendars

### Adding or removing calendars for employee visibility

To add or remove a built-in calendar for employee visibility:

1. Can be done by users with Owner, Org Editor, or People Ops Admin access
2. From the left sidebar, select **Calendars**
3. Check the box of the calendar you want to edit, and update the status to “**Active**” or “**Inactive**”

To add or remove other calendars for employee visibility:

1. Can be done by users with Owner, Org Editor, or People Ops Admin access
2. Select the calendar name
3. Click **“Edit Calendar”&#x20;**&#x6F;n the top right of the page 
4. Update the status to “**Active**” or “**Inactive**”

### Where the dates come from for each calendar

- [Start Date](https://docs.charthop.com/start-date) and[ End Date](https://docs.charthop.com/end-date-at-org) → These are date fields that are entered within ChartHop. 
- [Anniversary](https://docs.charthop.com/anniversary) → This is a calculated field in ChartHop. 
- [Birthday](https://docs.charthop.com/nextanniversary) → This is a calculated field containing the month and day from[ birth date](https://docs.charthop.com/birth-date). Employees can modify visibility for this field themselves. More information [here](https://docs.charthop.com/control-what-people-see-on-your-profile).
- [Tasks](https://docs.charthop.com/managing-tasks) → if a task is assigned with a deadline, the due date is displayed.
- Performance Reviews and Engagement Surveys: When you create a performance review or engagement survey, you can choose whether you want the dates to display on the calendar: 

::Image[]{src="https://lh7-rt.googleusercontent.com/docsz/AD_4nXeWxaRIh1_P0673jb_SmxiovQQ77IkgqIWU_OdB9D5pNyt1jWdOZ36ahiCL9SdclEFHmyse06-Ibfta5kQWCBFXWlZfSEkpnpucUySNfaeT8XI7tanQ4ek4huGhFPP_s01_3CUssA?key=vRueA6EofzEseyNU1fYqJVcW" size="78" width="804" height="416" position="center" showCaption="false"}

- [Compensation Reviews](https://docs.charthop.com/set-up-key-dates) → When a compensation review is launched, the “Review starts” and “Final approval due” dates will display on the calendar. Once the review is closed, those dates will continue to display historically in the calendar. 

## Calendar Visibility

### Survey and task dates

| **Calendar**             | **Visibility**                     |
| ------------------------ | ---------------------------------- |
| Performance Reviews      | Org public                         |
| Engagement Surveys Dates | Org public                         |
| Comp Reviews             | Visible to participants in cycle   |
| Tasks                    | Visible to person assigned to task |

### Employee Dates

Each calendar below respects field or job visibility. The default settings for these fields are below.[ Follow these steps](https://docs.charthop.com/XYrL-fields) if you’d like to change the visibility of these dates. 

| **Calendar** | **Visibility**                                                              |
| ------------ | --------------------------------------------------------------------------- |
| Anniversary  | Org Public                                                                  |
| Birthday     | Org public                                                                  |
| Start Date   | Org public once the job exists and announced                                |
| End Date     | Org public on[ announce date](https://docs.charthop.com/terminate-a-person) |

## Holiday Calendars

To create a holiday calendar:

1. Can be done by users with Owner, Org Editor, or People Ops Admin access
2. From the left sidebar, select **Calendars**
3. Click “Create Calendar” button on the top right corner of the page
4. Configure your calendar. See the configuration table below for descriptions. 

Once you create a calendar, you can add as many events as needed. Once a holiday calendar is created and made "active", it will be visible to all employees. 

A Holiday calendar is by default org public. Holiday calendars can be referenced by a time off policy. If a holiday calendar is attached to an active time off policy, it can not be deleted. 

### Recommended setup for Holiday Calendars

- Most organizations create a Holiday calendar for each country (ie. 🇺🇸US Holidays, 🇬🇧UK Holidays)
- Holiday calendars should span across years. (ie. You should use the same “🇺🇸US Holidays” calendar for Holidays in 2025, 2026 and beyond.)



:::hint{type="info"}
[Packages](https://www.charthop.com/pricing/)**:&#x20;**<font color="#a9a9a9">Basic</font><font color="#a9a9a9">   </font><font color="#a9a9a9">Headcount Planning | </font><font color="#a9a9a9">Compensation Reviews | </font><font color="#a9a9a9">Performance | </font><font color="#a9a9a9">Engagement </font>
:::

### Using Holiday Calendars with Time Off

Any "Holiday Type" Calendar can be used in a time off policy.&#x20;

1. Create a holiday calendar&#x20;
2. Navigate to people ops tools&#x20;
3. Select "Time Off Policies"&#x20;
4. Click "Create policy" in the top corner
5. Your holiday calendars will display in the dropdown menu

::Image[]{src="https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/cW0F6QCR0JvMQCCOGYl88_image.png" size="62" width="1014" height="518" position="center" showCaption="false"}

## Custom Calendars

Customers using ChartHop’s HRIS module can also make custom calendars to display dates their teams need. Custom calendars are guided by the same [share access.](https://docs.charthop.com/sharing-a-dashboard)

To create a custom calendar:

1. Can be done by users with Owner, Org Editor, or People Ops Admin access
2. From the left sidebar, select **Calendars**
3. Click “Create Calendar” button on the top right corner of the page
4. Configure your calendar. See the configuration table below for descriptions.&#x20;



## Importing Calendar Events

::Image[]{src="https://api.archbee.com/api/optimize/CXAjUAezd9VEEVQBIYmdw/XR6HClNk4Thk6bWLfufFc-20260107-212612.png" size="64" width="728" height="332" position="center" showCaption="false"}

1. Create a calendar
2. Click the **import** button&#x20;
3. **Download example template** and fill in your events in a CSV
   - You should be able to make over events from Google calendar or Outlook CSV imports&#x20;
4. Add in the file and import your events


[title] Resources
[path] Getting around in ChartHop/

Resource pages allow you to make ChartHop your one source of truth for all your people operations information.&#x20;

Share your handbook, policies, benefits information and other resources with all or a subset of people.

## Accessing Resource Pages

Activating resource pages will add a new item to the navigation called **Resources**.

![](https://api.archbee.com/api/optimize/CXAjUAezd9VEEVQBIYmdw/-83TNOhnMUsW92gBb1uYK_screenshot-2024-04-04-at-50445-pm.png)

Resource pages can also be accessed via the global search, so that employees can easily find the resources they need.

::Image[]{src="https://api.archbee.com/api/optimize/CXAjUAezd9VEEVQBIYmdw/xlOd9PpFS57VlRj7CbWZQ_screenshot-2024-04-04-at-50647-pm.png" size="62" width="828" height="670" position="center" caption="Resources in search" showCaption="true" darkWidth="828" darkHeight="670"}

![](https://api.archbee.com/api/optimize/CXAjUAezd9VEEVQBIYmdw/v4ee60GoOI57oP4jIGpHx_screenshot-2024-04-04-at-50313-pm.png "Resource Page")

## Creating a Resource page

1. Click **Create Resource**
2. Add a Title, Emoji Icon and the content for your resource.

:::hint{type="info"}
When created, Resource pages are Private, so you are able to draft and review them then publish when you are ready.&#x20;
:::

![](https://api.archbee.com/api/optimize/CXAjUAezd9VEEVQBIYmdw/Zwf38sE77bG9mGpvKECz7_screenshot-2024-04-04-at-50814-pm.png "A new resource page")

## Sharing a Resource page

Resources have 2 levels of sharing: Share access and Content sharing.&#x20;

### Share Access

Share access allows people to be an: Owner, Editor, or Viewer. This access is very similar to that of a Google Doc.&#x20;

For example, if I wanted to share details about a new Sales incentive program with the Sales team only, I could:

1. Share the resource page with our **VP, Total Rewards as an Editor** so that they could create the documentation they wanted.&#x20;
2. Then share it with the **Sales department as a Viewer**
3. Because Content Sharing is set to Private, this resource would only be visible to the VP of Total Rewards or anyone who is in the Sales Department. As people are added or removed from the Sales department, they will automatically gain or lose access to the Resource.&#x20;

![](https://api.archbee.com/api/optimize/CXAjUAezd9VEEVQBIYmdw/K8CjyvfWi48s87v-1py7i_screenshot-2024-04-04-at-51210-pm.png)

### Content Sharing

You can think of content sharing like publishing. It will be most commonly used to toggle between Private and Org Public.&#x20;

When set to Org Public it will be visible to everyone in the organization.&#x20;

![](https://api.archbee.com/api/optimize/CXAjUAezd9VEEVQBIYmdw/-RijjPcSPNqh6t6otAnnd_screenshot-2024-04-04-at-51809-pm.png "Content Sharing.")

## Linking to sections within a Resource page

Every heading in a Resource page is automatically an anchor, meaning you can link directly to any section and build a Table of Contents at the top of a long page.

### How anchor links work

When you hover over any heading on a Resource page, a **#** icon appears to its right. Clicking it does two things:

- Updates the browser URL to point directly to that section (e.g. `https://app.charthop.com/...#section-heading`)
- Lets you copy and share that URL so recipients land exactly at the right place

You can share these deep links with colleagues just like any other URL.

### Building a Table of Contents

For longer Resource pages, a Table of Contents at the top helps readers jump to what they need. You build one using standard Markdown links that point to heading anchors.

The easiest way to get the correct anchor for any heading is to hover over it, click the **#** icon, and copy the resulting URL from your browser. The fragment at the end (everything after `#`) is the anchor to use in your TOC link.

**Example:**

If your Resource page has these sections:

```javascript
## Overview
## Getting Started
## FAQ
## Contact Us
```

You would add this Table of Contents at the top of the page:

```javascript
## Contents
- [Overview](#overview)
- [Getting Started](#getting-started)
- [FAQ](#faq)
- [Contact Us](#contact-us)
```

When readers view the page, each item in the list becomes a clickable link that jumps to the corresponding section.

[title] Syncing Data Sheet views to a spreadsheet
[path] Getting around in ChartHop/Data Sheet/

You can sync a Data Sheet view directly to a Google Sheets or a Microsoft Excel file. This creates a "live query" that is kept up to date in your spreadsheet.

Changes you make to the spreadsheet are not synchronized to ChartHop. However, you can refresh the data for the spreadsheet periodically or when you expect that the ChartHop data may have changed.

For example, you can create a live query to sync the current hiring plan into a spreadsheet that you can use for financial modeling, and refresh the data straight from ChartHop as needed.

Live queries are automatically tied to the credentials of the user who generated them, so if that person's access is removed from the organization, the live query will automatically invalidate.

Query URLs expire automatically if they have not been used in 30 days. If a query URL expires, you need to re-create the query URL and link it again to a new spreadsheet.

Once you sync a live query to a spreadsheet outside of ChartHop, anyone with access to the spreadsheet can see the data included in it, regardless of sensitive data settings within ChartHop. When you are finished using your spreadsheet, delete the file to ensure access to the query is secured until it expires.

**Warning:** Query URLs are randomly generated and impossible to guess, but they are "public" because of how Microsoft Excel and Google Sheets retrieve data. Use caution when generating or pasting live queries. Do not share them outside of your organization. Remember that when unused, the query URL expires after 30 days.

## Create your query in ChartHop

Within ChartHop, create a query (based on a Data Sheet view) to use in either a Microsoft Excel file or a Google Sheet. You can then use the query in the respective spreadsheet type.

1. Go to the Data Sheet page and either select an existing Data Sheet view or create a new Data Sheet view to sync.
2. Select the **Export and Sync** (download) icon above the Data Sheet, then select **Sync to Excel/Sheets**.
3. Select **Create Query**.
4. In the **Sync to the spreadsheet** dialog box, either download the linked query file for Microsoft Excel or copy the query URL for Google Sheets.
5. Select **Close**.

After a live query link is displayed, it can't be displayed again. Copy or download it before you close the dialog. If you lose it, create a new query.

## Syncing to Google Sheets

You'll need to install the ChartHop Sheets extension before you can use your query URL from ChartHop. You may have to ask your IT team for approval.

### Install the ChartHop Sheets extension

1. Go to the [ChartHop Sheets page](https://workspace.google.com/marketplace/app/charthop_sheet/397657075455) in the Google Workspace Marketplace.
2. Select **Install**.

### Add your query to your Google sheet

1. Go to your Google sheet.
2. Select **Extensions > ChartHop Sheets > Insert Data**.
3. Paste the query URL and select **OK**.

### Refresh the data in your Google sheet

You can refresh the data in your Google sheet when you want to ensure your spreadsheet is up to date with ChartHop data. Remember that queries automatically expire after 30 days without use.

1. Go to your Google sheet.
2. Select **Extensions > ChartHop Sheets > Refresh Data**.

### Required disclosures

ChartHop Sheets use and transfer of information received from Google APIs to any other app will adhere to the [Google API Services User Data Policy](https://developers.google.com/terms/api-services-user-data-olicy#additional_requirements_for_specific_api_scopes), including the Limited Use requirements.

As ChartHop Sheets only exports data from ChartHop into your Google Sheet, it does not make any data from Google APIs available to any other app.

## Syncing to a Microsoft Excel spreadsheet

You can sync a ChartHop query to an Excel spreadsheet. Syncing is only supported in the Excel desktop app. Excel for the web is not supported.

### Add your query to your Excel spreadsheet

Be sure you have already downloaded the query (.iqy) file you created in ChartHop.

1. Open the Microsoft Excel desktop app.
2. On Windows, select **Data > Existing Connections > Browse**. On Mac, select **Data > Get External Data > Run Web Query**.
3. Browse to the .iqy file you downloaded and select **Get Data**.
4. Select **New Sheet** or choose an existing spreadsheet, then select **OK**.

### Refresh the data in your Excel spreadsheet

When you refresh, the spreadsheet syncs again to all current query data in ChartHop.

1. Open your spreadsheet in the Microsoft Excel desktop app.
2. Select **Data > Refresh**.

## Managing Data Sheet syncs

ChartHop Owners can view all of the live queries in your organization and revoke access to them from **Settings > Live Queries**. See [Managing data sheet and calendar syncs](https://docs.charthop.com/managing-data-sheet-and-calendar-yncs).

[Packages:](https://www.charthop.com/pricing/) Basic | Headcount Planning | Compensation Reviews | Performance | Engagement | HRIS

[title] Time off for employees
[path] ChartHop for Employees/

## Time Off Policies

ChartHop current supports **unlimited&#x20;**&#x61;nd **upfront balances** for time off.

![Time off page](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/tG-d9n9-c92IPGk7AlIce_screenshot-2024-02-09-at-14826-pm.png)

## Request time off

You are able to add request time off via your ChartHop profile. The ChartHop administrators at your company have configured the policies that apply to you. Your request will be sent to to the proper person for approval usually it will be your manager.&#x20;

::Image[]{src="https://archbee-image-uploads.s3.amazonaws.com/zxjhb7-DqnuzAP-lru1l3-ithyUbUyiU1jnBJKl9C5Q-20250819-131631.png" size="56" width="1184" height="1710" position="center" darkWidth="1184" darkHeight="1710" showCaption="false"}

**To request time off:**

1. From the left sidebar, select **My Profile**.
2. Go to the **Time off** tab.&#x20;
3. Click **Request time off.**
4. Complete the time off request form
   1. Select the **Time off policy** to request from
   2. Set the **Start Date** and **End Date.&#x20;**
      1. If allowed by the policies, you may select a half or partial day.&#x20;
   3. Add a **Note**
5. Your request will be sent to the listed approver and you will receive a notification when the request has been approved.&#x20;

If allowed in your policy, you may request a partial day off.&#x20;

::Image[]{src="https://app.archbee.com/api/optimize/CXAjUAezd9VEEVQBIYmdw/fPigtzivWSvAQFYt4pfsa-20250924-010903.png" size="80" width="585" height="523" position="center" caption="Partial days request example" darkWidth="585" darkHeight="523" showCaption="true"}

**To request a partial day:&#x20;**

1. Click the > icon to view the **Detailed Schedule**&#x20;
2. Use the **"Full day" dropdown** to select the amount of time that you would like to take off. The availible options have been selected bt your administartor.&#x20;
3. You will se the days off reflected in the total to the left.&#x20;

ChartHop Time Off does have details on your working schedule, so you cannot set that in the request. Please use the **Note** and other work calendar tools to communicate that with you manager.&#x20;



::Image[]{src="https://archbee-image-uploads.s3.amazonaws.com/zxjhb7-DqnuzAP-lru1l3-wjqNngF1xPyycL2F8XWqz-20250819-133247.png" size="90" width="1172" height="366" position="center" darkWidth="1172" darkHeight="366" showCaption="false"}

## Edit future time off requests

If you need to make an update to a time off request that is in the future, you may do so. After you edit the request, the request will be sent for re-approval. You are not able to edit time off that is in the past.&#x20;

To edit a future time off request from the profile:

1. From the left sidebar, select **My Profile**.
2. Navigate to the **Time off&#x20;**&#x74;ab
3. Locate the **Upcoming Time Off** and select the request that you would like to edit.
4. Update the policy, start date, end date or note. Then click, **save**.&#x20;
5. Your request will be sent for re-approval.

## Approve or reject a time off request

As a manager, you will receive time off requests to approve or reject for your direct reports.

You can approve or reject via the ChartHop Slack app or from the time off profile tab.&#x20;

To approve or reject a time off request from the profile:

1. From the left sidebar, select **My Profile**.
2. Go to the **Time off** tab
3. Select the request that you would like to approve or reject using the checkbox on the left of the table.&#x20;
4. Click **Approve&#x20;**&#x69;n the actions buttons at the top of the table
5. Add an approval note and click **Approve** or **Reject** to submit the approval.&#x20;



## Approve or reject a time off from Slack

If your organization has the [ChartHop Slack App](docId\:QSduVgxe4FMcnAHbrlXen) installed, you will receive PTO approval requests over Slack.&#x20;

When an employee submits a request, as an approver, you will receive a message that looks like this:&#x20;

![Time off Request](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/MALKQiOcHkHmr2bpm-rWZ_pto-slack-message-1.png)

Click the **Approve** button to approve the request.&#x20;

You will then see a confirmation message:

![Approval confirmation - Approver](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/aY-xADroUFF20J0zS9bGw_pto-slack-message-2.png)

The person who requested the time off will also receive a confirmation of the approval in Slack.&#x20;

![Approval confirmation - requester](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/09vgOyvLkfkUg1MgVnQBx_pto-slack-message-3.png)



## Cancel or delete a time off request

To delete a time off request:

1. Go to your profile
2. Select the **Time off** tab
3. Select the request that you would like to delete using the checkbox on the left of the table.&#x20;
4. Click **Delete&#x20;**&#x69;n the actions buttons at the top of the table
5. Type DELETE and confirm the deletion of the time off request.&#x20;






[title] Sync your calendar with ChartHop
[path] ChartHop for Employees/

You can create a live calendar that you can then sync to your own Google or Microsoft Outlook calendar.&#x20;

You can also download the calendar as an .ics file for other calendars. Please note that your calendar will not update automatically as an .ics file.

:::hint{type="info"}
Calendars visible to employees are customized by your ChartHop administrator.&#x20;

Depending on how your calendar is customized, some calendars may be unavailable or display under a different name. The **Export** button may also be unavailable. For questions, please contact your ChartHop administrator.
:::

Generating calendar link



You can sync any filtered view of your calendar to external platforms. For example, you might sync a calendar showing only your direct reports' PTO or new hires in your department. 

To sync a calendar view: 

1. Adjust filters and select the visible calendars you want to include
2. Once ready, click the download button and select “sync calendar”
3. Confirm the calendars listed are the ones you want synced 
4. Click “create sync” a live query link for syncing with Google or Outlook calendars, or create an ICS file for Apple and other calendar applications.

::Image[]{src="https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/l2HeoHEM2OV_G4YbLfgwE_image.png" size="68" width="1278" height="458" position="center" showCaption="false"}

### Add calendars with URL

[Google Calendar](https://support.google.com/calendar/answer/37100?hl=en\&co=GENIE.Platform%3DDesktop)

[Outlook Calendar ](https://support.microsoft.com/en-us/office/import-or-subscribe-to-a-calendar-in-outlook-com-or-outlook-on-the-web-cff1429c-5af6-41ec-a5b4-74f2c278e98c#:~\:text=the%20Calendar%20icon.-,On%20the%20toolbar%2C%20click%20Add%20calendar.,Click%20Save.)

[Apple Calendar](https://support.apple.com/guide/iphone/set-up-mail-contacts-and-calendar-accounts-ipha0d932e96/ios)

### Update synced calendars

You can delete synced calendars directly from your Google, Outlook, or Apple account. Once a link is generated and synced with a calendar, it can no longer be accessed or modified in ChartHop. Re-syncing calendars from ChartHop will add new data without replacing existing syncs. 



:::hint{type="info"}
[Modules:](https://www.charthop.com/pricing/) <font color="#000000">**HRIS |** </font>**Engagement | Goals | Performance |&#x20;**<font color="#000000">**Compensation Reviews |** </font>**Headcount Planning**
:::


[title] Tenure Milestones
[path] ChartHop for Employees/Untitled/

# What is a tenure milestone?

A tenure milestone is an increase to an employee's time off entitlement based on how long they've worked at your company. For example, you might give employees 15 days of PTO in their first five years, then bump that to 20 days once they hit their ten-year anniversary.

Once an employee reaches a milestone, that new entitlement becomes their baseline going forward. It stays in place until they reach the next milestone.

## When milestones get awarded

You choose when an employee's new entitlement kicks in. There are two options:

**On the employee's anniversary date**

The new entitlement starts the day the employee actually hits the milestone. If someone's three-year anniversary falls on June 15, their higher balance starts June 15, no matter where that falls in your plan year. These can be prorated or allocate the full amount.

**At the start of the plan year**

The new entitlement starts on the first day of your next entitlement year, even if the employee's actual anniversary falls somewhere in the middle of it. This keeps every employee's balance change lined up with the same reset date.

## Full award or prorated

You also choose how much of the new entitlement an employee gets in the year the milestone happens:

- **Full award:** The employee gets the entire new entitlement right away, even if their milestone lands partway through the year.
- **Prorated:** The employee gets a partial amount for the rest of that year, based on how much of the year is left. The following year, they move to the full new entitlement.

## Example

| **Policy**        | **Before 5 years** | **After 5 years** |
| ----------------- | ------------------ | ----------------- |
| PTO days per year | 15                 | 20                |

Sarah joins on April 1, 2023. She hits her three-year milestone on April 1, 2026. Your plan year runs January to December.

**Example 1: Full award**

Milestone set to **anniversary date** + **full award**.

Sarah's balance jumps straight from 15 to 20 days on April 1, 2026, the exact day she hits three years. She gets the entire 5-day increase at once, with no partial amount and no waiting for the next plan year.

**Example 2: Prorated award**

Milestone set to **start of plan year** + **prorated**.

Sarah's milestone falls on April 1, 2026, which is 9 months before the next plan year starts (January 1, 2027). Instead of waiting the full 9 months for her increase, she gets a prorated slice of it added to her existing balance for the rest of 2026:

- Extra days available: 20 minus 15 = 5 days
- Months left in the plan year after her milestone: 9 of 12
- Prorated amount: 5 days times (9 divided by 12) = 3.75 days
- Sarah's balance for the rest of 2026: 15 plus 3.75 = 18.75 days

On January 1, 2027, when the new plan year starts, Sarah moves to the full 20 days.

**Note:** Once a milestone takes effect, it becomes the new baseline. Employees don't drop back to their old entitlement. Each new milestone builds on top of the last one.

## Within a group vs. across groups

### You can add multiple milestones inside one group, and you can create multiple groups. The two behave differently:

- **Within the same group, milestones replace each other.** Only the highest milestone an employee currently qualifies for applies. It doesn't add to the milestones below it.
- **Across different groups, awards stack.** If an employee qualifies for milestones in more than one group at the same time, each group's award adds together on top of the base entitlement.

### Example

Say your Tenure group awards 5 extra days at the 5-year mark, and a separate custom group awards 3 extra days to employees with 10 years worked in Greece.

An employee with 5 years of tenure and 10 years worked in Greece qualifies for both groups at once. Because the awards come from two different groups, they stack: 5 days plus 3 days equals 8 extra days added to the base entitlement.

##

![](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/ZzSt1g_78wcq-Sc05KQzt_upload.png)

## Setting up milestones

You set up milestones inside your time off policy. For each milestone, you'll define:

- The length of service that triggers it (for example, 5 years, 10 years)
- The new entitlement amount
- Whether it starts on the anniversary date or the start of the plan year
- Whether the first year is a full award or prorated

You can set up as many milestones as your policy needs, so an employee's entitlement can keep growing at 3 years, 5 years, 10 years, or whatever schedule fits your company.

### Step 1: Turn on milestones

Inside your policy, check the box to grant additional days on milestones.

![](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/R5UPY484RCt4QIrSIpvYg_upload.png)



![](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/x0WOdYgtxYQ66v5NotEO2_upload.png)

### Step 2: Choose your timing and add your first milestone

Pick whether awards happen at the start of the policy year or on the event date (the employee's actual anniversary), then add a milestone group. In this example, employees get 1 extra day at their 1-year mark, bringing their total to 16 days.

![](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/jy6c_ybzsqtxZFiCTpFMt_upload.png)

### Step 3: Stack additional milestones&#x20;

Add as many tenure milestones as your policy needs. Here, employees also get 2 extra days at 5 years (17 total) and 5 more at 10 years (20 total). Each milestone **REPLACES** on the one before it.

![](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/SjXzwLMTSjNEfKihQ8Ibk_upload.png)

### Step 4: Add custom triggers, like employee-specific balances if you need them

&#x20;Beyond standard tenure milestones, you can create a separate group for one-off or criteria-based adjustments, like a named employee or a custom field such as years worked in a specific country. These **STACK** on top of the tenure awards.

![](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/-ieW3HmF5ve17AiVfQMf6_upload.png)


[title] Installing the Sequoia One app
[path] Implementing ChartHop/Apps & Integrations/Payroll systems/Installing payroll apps/Sequoia One/

The Sequoia One app will sync your organizational roster from Sequoia One automatically on a daily basis.

### Connecting ChartHop to Sequoia One

To get started, you will need to work closely with your Sequoia One HRBP. Contact your HRBP to turn on this integration in HRX.

Please do not change any of the settings on this sync. Reach out to your Sequoia HRBP or COM for help.

Once this integration has been enabled in HRX, follow the steps below.

1. Sign into the Sequoia One customer portal (HRX)
2. Locate and click on the ChartHop widget
3. ChartHop will open in a new tab
4. You will be automatically signed into ChartHop

Please don't hesitate to contact [implementation@charthop.com](#) if you need assistance.

### Running a single, on-demand sync from Sequoia One

Any ChartHop user with sufficient permissions can trigger an on-demand sync from Sequoia One at any time. To sync your data for the first time, or subsequently on-demand at any time, follow the steps below.

1. Open [ChartHop](https://charthop.com).
2. Select the gear icon.
3. Select [Apps and Integrations](https://charthop.com/settings/apps).
4. Find and select Sequoia One.
5. Scroll down to the bottom of the page, and click on **Sync To Primary**.

Upon clicking Sync to Primary, ChartHop will pull all of your org's historic and current employee data from Sequoia One. Once completed, you will see a message indicating that the sync has been completed.

:::hint{type="warning"}
## Permissions

To sync your Sequoia One data into ChartHop, your ChartHop user must have an access level of at least a Technical Owner. If you are not a Technical Owner and believe you should be, please contact support\@charthop.com.
:::

### Running a daily, automated sync from Sequoia One

Any ChartHop user with sufficient permissions can set up an automated sync from Sequoia One at any time. To set up an automated sync, follow the steps below.

1. Open [ChartHop](https://charthop.com).
2. Select the gear icon.
3. Select [Apps and Integrations](https://charthop.com/settings/apps).
4. Find and select Sequoia One.
5. Scroll down to the bottom of the page, and click on **Run Daily**.
6. Click **Save Settings&#x20;**&#x77;hen you are done.


[title] Importing files & documents
[path] Implementing ChartHop/Creating your ChartHop org/

:::hint{type="info"}
[Modules](https://www.charthop.com/pricing/)**:&#x20;**<font color="#000000">**HRIS** | </font>Engagement | Goals | Performance | <font color="#000000">Compensation Reviews | </font>Headcount Planning
:::

HRIS customer can work with the ChartHop team to bulk import files and documents during an HRIS migration. Contact the ChartHop team to initate this process. Use this guide to help you prepare and plan for a file document migration.&#x20;

# Understanding File Organization in ChartHop

Most HRIS systems or File management systems (Google Drive, Dropbox, Box) uses a file directory system to store files. A file directory system is where files are stored within folders. Sometimes those folders are standardized across employees and sometimes they can be created on a one off basis.&#x20;

ChartHop does **not** use a file directory system to store files. Instead files are stored in two ways:

1. [Fields](docId\:XYrLLTZxiE-BV4ZKzEs_g) organized by [Categories](docId\:XYrLLTZxiE-BV4ZKzEs_g) (preferred)
2. A File directly linked to a person with a specified [Sensitivity level.](docId:9Se1T9BgI6p5Cg3ixVSX8)&#x20;

There are several advantages to using [Fields](docId\:XYrLLTZxiE-BV4ZKzEs_g) instead of a file directory. Here are a few examples to demonstrate how:&#x20;

|                                                                                                                                  | **Field-based (ChartHop)**                                                                                                                                                                                                                            | **Folder-based (Other Systems)**                                                          |
| -------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------- |
| **Data Auditing&#x20;**- "Which current employees are missing an offer letter in their file?"                                    | Can quickly add the I-9 Field to the [Data Sheet](docId\:XTd4DG4I_4_nMwjfEsq0S) with a filter: <br />Has the file: `fileName:*`<br />Does not have the file:`!fileName:*` or just [Ask ChartHop](docId\:Ey_nPQlPouWcmB1LsvUF7) to create it for you.  | Need to check every folder individually or rely on file naming.                           |
| **Data Access&#x20;**- "We want to hide all promotion letters from employees until after reviews and them make them accessible"  | Can update the [Sensitivity level](docId:9Se1T9BgI6p5Cg3ixVSX8) of the "Promotion Letter 2024 field" from Manager Only to Manager Shared when ready                                                                                                   | Unable to change file access across org.                                                  |
| **Organization &#x20;**- "We want to reorganize our files to be organized by file type rather than by year."                     | Can update [Categories](docId\:XYrLLTZxiE-BV4ZKzEs_g) and [Field](docId\:XYrLLTZxiE-BV4ZKzEs_g) names at will                                                                                                                                         | Stuck in an organization strucutre that can't be changed without a ton of manual effort.  |



# Preparing for a file migration

In order to import files into ChartHop in bulk, you will need the following:

1. A way to extract your files from your existing system. This may be via a download or where available an API.&#x20;
   1. If using folders - Ensure that you can have a unique identifier like email, employee ID or HRIS ID in the folder name that can be used to match the folder to a person in ChartHop.
2. Understand how your files are organized and how you would like to translate that structure to [ChartHop's Document and File Organization Structure](docId\:Ld5_HWqQ3f5xRbWlk1l5t)&#x20;
3. Understand how is access currently managed for your existing files and how you would like to translate that to access within ChartHop.&#x20;



/vide

## Organization Best Practice

1. **Create a fields for every “File type” or “Document type”**&#x20;
   1. Previously these may have been represented in folders or in the file name.
   2. Use a single field for the general file type then upload multiple files to that field over time
      1. ✅ Commission Agreement
      2. ❌ Commission Agreement Q1 FY25
   3. Consider any you will need to setup. At the end of the workflow such as a signature request, the file will be stored in a field, so plan accordingly.
2. **Place all files in Field** [Categories](docId\:XYrLLTZxiE-BV4ZKzEs_g)&#x20;
   1. You may be used to a file structure, so Field Categories help you recreate that organization
   2. Examples include:&#x20;
      1. Onboarding documents
      2. Policy Acknowledgements
      3. Work Authorization
      4. Performance
      5. Promotion letters
      6. *Note that the file category will be visible to all viewers of the file*
3. **Use “Miscellaneous” as a fallback**&#x20;
   1. Files that are not linked to a field but only liked to a person are listed as “Miscellaneous”
   2. These should be used only as needed



## File Workflows

If you are generating or storing files with any automations or integrations with you current system, consider how you will transfer those over to ChartHop. The tools available to you are:&#x20;

1. [Signatures](docId:-APezeKDHAACHAZcCuAem)&#x20;
2. [Send documents for signatures via Actions](docId:6k2uHP22MlgnhaOvzQ0yX) &#x20;
3. [Form responses workflows](docId:_QUlJLsN6BsALsltpaOoX) - Create PDF from a submitted folders



## File Security

All customer data including files are stored at rest using AES 256-bit encryption and in transit using TLS 1.2+.




[title] SuccessFactors
[path] Implementing ChartHop/Apps & Integrations/Payroll systems/Installing payroll apps/

With the SuccessFactors app, you can sync your payroll data to ChartHop, which automatically builds your org chart and keeps it up to date. Synced data includes contact information, demographics, compensation, managers, departments, and locations. 

### SuccessFactors at a glance

The following table summarizes ChartHop’s SuccessFactors app. 

| **Supported ChartHop packages**      | - <font color="#000000">Standard </font>
- <font color="#000000">Premium</font>                                                                                                                                                                                                                                                                                                                                           |
| ------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Prerequisites**                    | A SuccessFactors Sync account that has access to the Admin Center and a ChartHop account with the Owner role.                                                                                                                                                                                                                                                                                                             |
| **API key permissions**              | As a SucessFactors administrator, create a new user and then do the following:<br />- Assign Employee Central API permissions
- Create a permission group for the API user
- Grant the Permissions role to the permission group
- Set a password expiration for the user                                                                                                                                                  |
| **Data direction**                   | Inbound from SuccessFactors to ChartHop                                                                                                                                                                                                                                                                                                                                                                                   |
| **Sync cadence**                     | Daily or as needed                                                                                                                                                                                                                                                                                                                                                                                                        |
| **Effective dating support**         | No                                                                                                                                                                                                                                                                                                                                                                                                                        |
| **Additional field mapping support** | Yes, for ChartHop Premium customers, through the following field categories:<br />- User
- PerAddress
- PerPersonal
- EmpJob
- EmpPayCompRecurring
- EmployeeTime
- EmpCompensation<br />For more information, see the [SuccessFactors documentation](https://api.sap.com/package/SuccessFactorsEmployeeCentral/overview).<br /><br />Please direct all custom mapping requests to ChartHop’s Professional Services team. |
| **How to install**                   | See ChartHop's[ install guidelines](https://docs.charthop.com/installing-a-payroll-app) or view detailed instructions on the ChartHop app install page.                                                                                                                                                                                                                                                                   |
| **Payroll app overview**             | Read an [overview](https://docs.charthop.com/payroll-systems) of how how payroll apps work in ChartHop.                                                                                                                                                                                                                                                                                                                   |
| **Supported products**               | SucessFactors                                                                                                                                                                                                                                                                                                                                                                                                             |
| **Synced Data**                      | The default [synced data](https://docs.charthop.com/synced-data-from-successfactors) from SuccessFactors to ChartHop.                                                                                                                                                                                                                                                                                                     |


[title] Ultipro (UKG Pro)
[path] Implementing ChartHop/Apps & Integrations/Payroll systems/Installing payroll apps/

With the Ultipro app, you can sync your payroll data to ChartHop, which automatically builds your org chart and keeps it up to date. Synced data includes contact information, demographics, compensation, managers, departments, and locations. 

### Ultipro at a glance

The following table summarizes ChartHop’s Ultipro app. 

| **Supported ChartHop packages**      | - <font color="#000000">Standard </font>
- <font color="#000000">Premium</font>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             |
| ------------------------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Supported Ultipro package**        | UKG Pro                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     |
| **Prerequisites**                    | A ChartHop account with the Owner role and an Ultipro Service Account.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      |
| **API key permissions**              | Grant your Ultipro Service Account the following view options:<br />- Personnel integration
- Employee Job History Details
- Employee Person Details
- Employee Compensation Details
- Company Configuration Integration                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    |
| **Data direction**                   | Inbound from Ultipro to ChartHop                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            |
| **Sync cadence**                     | Daily or as needed                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          |
| **Effective dating support**         | Yes                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         |
| **Additional field mapping support** | Yes, for ChartHop Premium customers, from the following field categories: <br />- [person-details](https://connect.ultipro.com/documentation#/api/811)
- [pfcEmployment](https://connect.ultipro.com/documentation#/api/2395/v1%20PlatformConfigurationCustomFieldsData/get__personnel_v1_platform-configuration-fields_class-name_%7BclassName%7D)
- [user-defined-fields](https://connect.ultipro.com/documentation#/api/1165)
- [employee-job-history-details](https://connect.ultipro.com/documentation#/api/1468/EmployeeJobHistoryDetail/get__personnel_v1_employee-job-history-details)
- [employment-details](https://connect.ultipro.com/documentation#/api/817)
- [compensation-details](https://connect.ultipro.com/documentation#/api/823/CompensationDetails/get__personnel_v1_compensation-details_%7BemployeeId%7D)<br />Please direct all custom mapping requests to ChartHop’s Professional Services team. |
| **How to install**                   | See ChartHop's [install guidelines](https://docs.charthop.com/installing-a-payroll-app) or view detailed instructions on the ChartHop app install page.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     |
| **Payroll app overview**             | Read an [overview](https://docs.charthop.com/payroll-system-apps) of how how payroll apps work in ChartHop.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 |
| **Synced Data**                      | The default [synced data](https://docs.charthop.com/ultipro-ukg-pro) from Ultipro to ChartHop.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              |

###


[title] Paycom
[path] Implementing ChartHop/Apps & Integrations/Payroll systems/Installing payroll apps/Finch Integrations/

# Overview

With the Paycom app, you can sync employee data to ChartHop, which automatically builds your org chart and keeps it up to date. Synced data includes names, contact information, department, employment type, compensation, manager relationships, work location, and start/end dates.

**Finch-powered integration.** ChartHop connects to Paycom through Finch, a third-party HRIS connectivity layer. Fields not listed in Synced data from Paycom are not available through this integration. There may be additional costs to access an API from Paycom, reach out to your contact to learn more.

## Paycom at a glance

| Supported ChartHop packages  | Standard                                                                              |
| ---------------------------- | ------------------------------------------------------------------------------------- |
| Prerequisites                | A ChartHop account with the Owner role and a Paycom account with admin credentials    |
| ChartHop assistance required | Yes - contact your ChartHop implementation or support team to set up this integration |
| Data direction               | Inbound (Paycom → ChartHop)                                                           |
| Sync cadence                 | Daily or as needed                                                                    |
| Effective dating support     | No                                                                                    |
| Additional field mapping     | Available for Premium customers                                                       |

## Recommended: use SFTP for complete data

The Paycom API, as accessed through Finch, has a limited field set. Many company-level fields - ethnicity, gender, and custom fields - are not available via the API.&#x20;

For customers who need complete data coverage, ChartHop recommends connecting Paycom via SFTP export. Your Paycom administrator can configure a scheduled file export, which ChartHop ingests through the Turbo Importer.

Contact your ChartHop implementation team to discuss whether the API integration covers your needs or whether SFTP is the right fit.

[title] Syncing your hiring plan 
[path] Implementing ChartHop/Creating your ChartHop org/

ChartHop keeps track of both open roles and people. Use ChartHop as a single, org-wide source of truth for your hiring plan.

With ChartHop apps, you can sync your hiring plan from one of the following applicant tracking systems (ATS):

- [Greenhouse](https://docs.charthop.com/greenhouse)
- [Lever](https://docs.charthop.com/lever-requisitions)
- [Jobvite](https://docs.charthop.com/jobvite)

:::hint{type="info"}
If you haven't set up an integration with your ATS or are not using one, you can import your hiring plan via a spreadsheet. [Learn more.](https://docs.charthop.com/add-or-update-a-hiring-plan)
:::



:::hint{type="info"}
[Packages](https://www.charthop.com/pricing/)**:&#x20;**<font color="#a9a9a9">Basic</font> <font color="#000000">|</font> <font color="#000000">**Headcount Planning** | </font><font color="#000000">**Compensation Reviews** | </font><font color="#000000">**Performance** | </font><font color="#000000">**Engagement** </font>
:::

:::hint{type="info"}
****[Roles](https://docs.charthop.com/user-roles-and-permissions): Owner | Technical owner 
:::


[title] App Sharing
[path] Implementing ChartHop/Apps & Integrations/Untitled/

When an app is installed in ChartHop, it is owned by the person who installed it. App Sharing lets you extend access to an installed app to other members of your team — so they can configure, use, or view the app depending on their role.

Sharing is managed from the app's settings page. Each person or group you share with is assigned one of five access levels.

***

## Access Levels

### Admin

Full control over the app. In addition to everything in Full Read/Write, an Admin can share the app, change or revoke others' access levels, and delete the app.

**Use when:** Granting someone ownership-level control, including managing who else can access the app.

### Full Read/Write

For people **configuring and maintaining** the app. Allows someone to view and edit all settings, read and write data, and trigger manual syncs. This level bypasses standard ChartHop data access controls.

**Use when:** A team member (such as another HR or IT admin) needs to manage or maintain the app's configuration.

### Full Read

Read-only access to all app data and configuration, without standard ChartHop access control restrictions. Cannot make changes or trigger syncs.

**Use when:** Someone needs full visibility into app configuration and data, but shouldn't be able to make changes.

### Standard Read/Write

For people **using** the app — not configuring it. Respects ChartHop's normal data access controls. Can take actions through the app within their permissions, but cannot view or change app configuration.

For users at this level, ChartHop AI agents are often the primary way they interact with the app — the agent handles actions in the connected system on their behalf.

**Use when:** A team member needs to use the app day-to-day, such as a manager taking action in a connected system.

### Standard Read

Read-only access within the user's normal ChartHop permissions. Cannot take actions or change configuration.

**Use when:** Someone needs to see data from a connected app but shouldn't be able to make any changes.

[title] Installing the BambooHR app
[path] Implementing ChartHop/Apps & Integrations/Payroll systems/Installing payroll apps/Untitled/

This section covers setting up the BambooHR integration app, which allows you to sync your employee roster to ChartHop. 

## Review your payroll system data

Your ChartHop payroll app syncs your employee data from your payroll system and builds your org chart in ChartHop. Once your Org Chart is created, you can start using ChartHop.

ChartHop recommends reviewing the data in your payroll system to ensure it is what you expect before you sync it to ChartHop. For example, if an employee has multiple system IDs in your payroll system, that employee’s data won’t sync properly. You should also be sure that your payroll system reflects an accurate view of your organization, including reporting structures, employee locations, and compensation. 

## Obtain API Credentials for BambooHR

For ChartHop to access your organization's BambooHR payroll data, you need to create an API key in BambooHR that you can use in ChartHop.  This information allows ChartHop to connect to BambooHR to receive your employee data.

1. Log into BambooHR as an administrator who has permission to create API keys.&#x20;
2. Click your name in upper right-hand corner of any page to get to the **User Context Menu&#x20;**&#x61;nd select the **API Keys&#x20;**&#x6F;ptio&#x6E;**.&#x20;**
3. Select **Add New API Key.**
4. Name the new key "ChartHop".
5. Copy the API key to a safe place.
6. When accessing BambooHR, take note of the BambooHR subdomain name. In this URL example, acme.BambooHR.com, **acme** is the subdomain.

## Install the BambooHR app

After you have your BambooHR API key, you can install the BambooHR integration app in ChartHop.

1. From the left sidebar, select **Apps & Bundles**.
2. From the sub-menu, select **Apps,&#x20;**&#x69;f not already pre-selected.
3. Select the **Availible Apps** tab.
4. Scroll to your payroll app and select **Install&#x20;**&#x6F;n the far right of the respective app's row.

### Connect the BambooHR app

You'll be prompted to configure your payroll app when you select **Install**.

1. Enter your BambooHR subdomain in the field provided. In this URL example, acme.bamboohr.com, **acme** is the subdomain.
2. In the **Create your API key&#x20;**&#x73;tep, copy the API key you created to the provided field.
3. Select **Next step**.

### Configure data sync settings for BambooHR

Data sync settings control how and what data is synced to ChartHop from your payroll system. For example, you can choose whether or not to create a backfill position in ChartHop when you have a departure in your payroll system. Other advanced settings allow you to exclude certain employees.

- Select one of the two options:
  - **Automatically create backfills** - This option creates a backfill position in ChartHop (open job) when an employee is marked as departed in your payroll system.
  - **Sync departures only** - This option removes the departed employee from ChartHop. The employee's job history remains in ChartHop.

### Configure advanced settings

Advanced settings allow you to better control how your payroll data syncs to ChartHop.

ChartHop recommends accepting the default values for these settings. Please get in touch with ChartHop Support or your Customer Success Manager for assistance if needed.

1. Expand the **Advanced settings** section. 
2. Use the following table to guide you through advanced settings decisions. 

| **Setting**                               | **Description&#xA0;**                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               |
| ----------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Missing location information <br /><br /> | Select one of the two options for what should happen if location information is set for an open role:<br />* **Set Remote as the default location in ChartHop** - When selected, any open role that does not have a location set will be set to have a Remote location in ChartHop.
* **Leave location blank in ChartHop&#x20;**- When selected, any open role that does not have a location set in your payroll app will not have a location set in ChartHop.                                                                                                                                                      |
| Advanced sync options                     | Select the data changes you want to include in your sync. You can include some or all of the following employee data: <br />* Job titles 
* Managers 
* Groups 
* Compensation 
* Hire dates                                                                                                                                                                                                                                                                                                                                                                                                                        |
| Overwrite person fields <br /><br />      | ChartHop recommends using this setting to avoid needing to update both ChartHop and your payroll system when a change is made to any field value that is synced from your payroll system.<br /><br />When you choose this option, your payroll system remains the source of truth for the following fields in ChartHop: birthdate, gender, home address, and so on. Any edits you or an employee make to this data in ChartHop are overwritten during synchronization. This can pose an issue when someone uses ChartHop to update employee fields in ChartHop, without requesting an update in the source system.  |
| Historical data                           | Choose whether or not you want to sync historical data. You can turn this off if you want to exclude any historical changes before the date of your initial sync.                                                                                                                                                                                                                                                                                                                                                                                                                                                   |
| Exclude IDs                               | To exclude specific individuals from the sync, enter their unique payroll system IDs here, separated by commas.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     |
| Job change history                        | When importing job data into ChartHop, include changes within the specified period.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 |

### Run an initial one-time sync of your payroll data

When you first configure your payroll app, you should run a one-time sync to verify that the sync is operating as you expect it to and that your data is what you expect.

To run a one-time sync:

1. In the setup wizard, select the **Run one-time sync** option.
2. Select **Finish setup**.

## Verify your data in ChartHop

After running your first sync, you can use the Data Sheet and Org Chart pages to spot-check your data. You can use the Sync History page to verify when the sync was run and if it encountered any issues. 

You should spot-check your ChartHop org for the following:

- Correct management reporting lines
- Compensation data
- Employee information on profiles (names, addresses, and so on)
- Job titles
- Departments
- Locations

:::hint{type="info"}
Remember that most issues with your synced data originate in your payroll system. ChartHop allows you to visualize your employee data to make finding these discrepancies easier. Still, you’ll need to fix any data discrepancies in your payroll system and rerun the sync to view the fixes in ChartHop.
:::

## Configure your payroll app sync to run daily

After you’ve synced your data for the first time and verified your Org Chart, you should configure a daily sync. The value of syncing your payroll data to ChartHop is that it ensures that your employee data is always up to date. 

1. From the left sidebar, select **Apps & Bundles**.
2. From the sub-menu, select **Apps,&#x20;**&#x69;f not already pre-selected.
3. Select the **Installed Apps** tab.
4. Scroll to your payroll app and select the gear (settings) icon on the far right of the row to view app settings.
5. Within the **App status & sync** settings section, select the **Edit** (pencil) icon.
6. Toggle the auto-sync option to on.
7. Select **Save**.


[title] Org Chart
[path] Getting around in ChartHop/

After you have uploaded your employee roster and historical data to ChartHop, you can use the **Org Chart** to navigate parts of your organization that include its departments, teams, and employee profiles.&#x20;

::embed[]{url="https://youtu.be/avPeQOxtrKs"}

The top left corner also displays the total number of people and open jobs in your org. Open jobs are included in the total regardless of their recruiting status.

![](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/e8AHhQpwlJZgMCrKGQCwA_image.png)

## Adjusting the view

From the lower left corner, you can zoom in and out or change the orientation of the **Org Chart**. You can also adjust the view with your mouse or trackpad.

| **Control** | **Description**                                                                                                                                                                                                                                                             |
| ----------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Orientation | Change the orientation from vertical to horizontal by selecting the corresponding icon.                                                                                                                                                                                     |
| Zoom        | Select the **Plus** (**+**) or **Minus** (**-**)  icons to zoom in or out. You can also enter a specific zoom percentage.<br /><br />When you zoom in on the Org Chart, people cards are dynamically shown or hidden based on where you are in the organization structure.  |
| Reset view  | Select **Reset view** to return to the default view.                                                                                                                                                                                                                        |

:::hint{type="info"}
ChartHop intelligently abbreviates job titles in the Org Chart when you zoom in or resize your browser window. For example, "Senior Vice President" becomes "SVP".
:::

### Using the expansion arrows

Depending on the size of your org, you may not be able to fit all employees on the screen at once. When this happens, you can use the *expansion arrows* to navigate. Select an expansion arrow to view the department or team below an employee (for example, a reporting line under a manager).

Hover your cursor over an expansion arrow to preview the employees and jobs underneath it.

![Hover on the Org Chart](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/Hl1tJUx267I0HtkK9hqcq_screenshot-2024-01-19-at-13556-pm.png)

### Searching the Org Chart

Use the search box in the upper right corner to search for jobs, people, or groups. To view an open role or a person's profile, enter the job title, and the results appear as you type. To locate a person, enter their name and click it to load their profile. &#x20;

### Viewing departments or employees

Select a manager to view only their team and its direct reports.

Double-click any card in the **Org Chart&#x20;**&#x74;o view the employee profile information for that employee. The data you see depends on your permissions.

### Viewing the Org Chart over time

You can use the date slider at the top of the page to view the **Org Chart** as it was in the past, or as it will appear in the future when new hires join your organization. Select the date and then select **Today** to return to today's date. Bookmark this view to save an always-current snapshot of your ChartHop org.&#x20;

### Using the Visualize menu

With the **Visualize** menu, you can highlight specific fields within your Org Chart.&#x20;

Based on the attribute you choose, employee cards display color-coded labels. For example, if you select **Department**, each employee's department is displayed.&#x20;

![Visualize departments](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/K4EQD-4BqQ6XuiactQjzl_screenshot-2024-01-19-at-13803-pm.png)

### Using Screenshot Mode

You can Export the org chart by clicking the Download/Export button. If you'd rather take screenshots of the Org Chart, there is also a Screenshot Mode button. Clicking this will turn the background of the Org Chart white and remove any PTO information from the People cards.&#x20;

[title] Markdown formatting
[path] Getting around in ChartHop/Navigating ChartHop/

ChartHop uses a standardized text format called Markdown.&#x20;

You can use Markdown across the application for styling content such as job descriptions, department / team pages, creating custom forms, or the *dashboard bulletin*. If you need to **bold,** *italicize, underline*, or style content in any other way, Markdown is the best way to do it in ChartHop.

Here are some of the most commonly used Markdown format rules.

| **Style**       | **Syntax**                                            |
| --------------- | ----------------------------------------------------- |
| Bold            | \*\*Bold\*\*                                          |
| Italic          | \*Italic\*                                            |
| Hyperlink       | \[link text]\(https\://www\.example)                  |
| Image           | !\[alt image text]\(https\://www\.example.png)        |
| Image with link | !\[https\://www\.example]\(https\://www\.example.png) |
| Header 1        | # H1                                                  |
| Header 2        | ## H2                                                 |
| Header 3        | ### H3                                                |
| Header 4        | #### H4                                               |
| Ordered List    | 1. First item<br />2. Second item<br />3. Third item  |
| Unordered List  | - First item<br />- Second item<br />- Third item     |
| Blockquote      | > blockquote                                          |
| Horizontal Rule | ---                                                   |

For more advanced Markdown tips, [here](https://commonmark.org/help/) is an external resource.


[title] Hiding sensitive data
[path] Getting around in ChartHop/Navigating ChartHop/

To hide sensitive data within ChartHop, click the eye icon on the top utility bar to tooggle it to **hidden**. 

When you toggle the eye icon to **hidden&#x20;**(slash through eye icon), sensitive data does not display on screen. You can use this toggle to help protect sensitive data (for example, when sharing your screen with others).

![](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/wmqyWGEDNgfBHVhwnNOMf_top-bar-right.png)

Please consult our [Privacy policy ](docId\:aZK7iwpts_3Yiqt5s2lWA) for more information about how we protect your sensitive data and how it is used.

[title] ChartHop Video Library
[path] Getting around in ChartHop/

Use the following videos to quickly learn how to use some of ChartHop's main pages:

- [Navigating Your ChartHop Org Chart](https://youtu.be/avPeQOxtrKs) (4 min)
- [How to Use Your ChartHop Map](https://youtu.be/DjK5zApeho0)  (5 min)
- [Understanding Employee Profiles](https://youtu.be/dZHUaxOVasU)  (3 min)
- [How to Use ChartHop's Global Search](https://youtu.be/7GaZWlPo-s0) (2 min)&#x20;
- [Creating and Sharing Data Sheet Views](https://www.youtube.com/watch?v=b38TVq6SJYI)  (4 min)
- [Customizing Your Data Sheet](https://youtu.be/rsDKL_r6JiA)  (4 min)
- [How To Use ChartHop's Homepage](https://youtu.be/_ybPLv8r_0E) (2 min)
- [From Planning to Recruiting in ChartHop](https://www.youtube.com/watch?v=y33IU1oG-vo) (6 min)




[title] Edit your user settings
[path] ChartHop for Employees/

On the **User settings** page, you can complete specific tasks, such as updating your user profile image and changing your password.

To access user settings:

1. Select your profile picture from the top utility bar.
2. Select **User settings**.

![User settings](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/2DU3OdfdObQlkmOjYbxou_generaltab.png)

### Update your user profile image

Your user profile image is used whenever you make changes in ChartHop as a user (for example, when entering comments or changes in a scenario or review). The user profile image always displays in the top utility bar.

:::hint{type="danger"}
It is not recommended to change the user profile image unless you are a super-user with access to multiple ChartHop accounts. If you do not change this image, your user profile image will be the same as your main org profile image.&#x20;
:::

To update your user profile picture:

1. From the top utility bar, select your profile image.
2. Select **User settings**.
3. On the **General** tab, navigate to the **Profile image** field.
4. Select **Browse&#x20;**&#x61;nd select an image file to upload.
   - You can upload an image in PNG or JPG format.&#x20;
   - We recommend an image size of 200x200 or 100x100 pixels.
5. Once you’re done uploading your new profile picture, select **Save**.

:::hint{type="info"}
The user profile image is different from the org profile image that displays on your employee profile and throughout ChartHop. [Learn more.](https://docs.charthop.com/update-your-org-profile-image)
:::

:::hint{type="info"}
[Modules:](https://www.charthop.com/pricing/) <font color="#000000">**HRIS |** </font>**Engagement | Goals | Performance |&#x20;**<font color="#000000">**Compensation Reviews |** </font>**Headcount Planning**
:::


[title] Set your work location
[path] ChartHop for Employees/Customize your employee profile/

You can update your current work location and home address directly from your employee profile.

Your work location is what displays to your organization on the Map. Other people in your organization are not able to see exact street addresses. Instead, they only see your city, state, and postal code on your employee profile. Your location on the map is randomized by zip code so others can’t see your exact location. [Learn more.](https://docs.charthop.com/map)

![Set work location](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/PwsKQ9A09tNFflIYKCQjz_worklocationadmin.png)

When you work in an office location or are permanently remote, your work location defaults to that office or remote location defined for you by your organization. If you move to a different office, your ChartHop administrator can update your default office location.

### Add or change a remote work address

When you have a temporary address dedicated to remote work that is different from your home address, you can set up another remote work location. 

To set up another remote work location:

1. From the left sidebar, select **My Profile**.
2. In the upper right, find the **View on Org Chart** ▼ dropdown menu. From the list of options select **Set work location**.
3. Select **Other Location**.
4. Enter the address for your remote location. 
   - Make sure to enter a city, country, and zip code so that your location displays correctly on the map.
5. Select **Save location** when you're done.

When you return to the office, you can return to the **Set work location** option and select **Office** to update your work location.


:::hint{type="info"}
[Modules:](https://www.charthop.com/pricing/) <font color="#000000">**HRIS |** </font>**Engagement | Goals | Performance |&#x20;**<font color="#000000">**Compensation Reviews |** </font>**Headcount Planning**
:::


[title] Update your org profile image
[path] ChartHop for Employees/Customize your employee profile/

Your org profile image displays to the rest of your organization whenever your organization is visualized (for example, in your employee profile, in the **Org Chart**, **Data Sheet**, and **Map**).&#x20;

### Update your org profile image

You can edit your org profile image from your employee profile.

:::hint{type="info"}
When your organization is integrated with Slack, your Slack profile image is automatically imported and used as your default org profile image. You can update that default image from your employee profile.
:::



![Edit my info](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/xBgPRQDhABed_nAdHcogM_editmyinfo.png)

To update your org profile image:

1. From the left sidebar, select **My Profile**.
2. In the upper right, find the **View on Org Chart** ▼ dropdown menu. From the list of options select **Edit my info**.
3. In the **Edit person** dialog, navigate to the **Image** field.
4. Select **Browse&#x20;**&#x61;nd select an image file to upload.
   - You can upload an image in PNG or JPG format.&#x20;
5. Select **Save** when you're finished.

:::hint{type="info"}
Users who have access to multiple ChartHop accounts can also choose a different user profile image. It is not recommended to change your user profile image unless you meet this criteria.&#x20;

Your user profile image is used whenever you make changes in ChartHop as a user (for example, when entering comments or changes in a scenario or review). The user profile image always displays in the top utility bar.

You can update your user profile image from the **User Settings** page. [Learn more.](https://docs.charthop.com/edit-your-user-settings)
:::

:::hint{type="info"}
[Modules:](https://www.charthop.com/pricing/) <font color="#000000">**HRIS |** </font>**Engagement | Goals | Performance |&#x20;**<font color="#000000">**Compensation Reviews |** </font>**Headcount Planning**
:::


[title] ChartHop for Employees
[path] /




[title] Managing and removing your delegate
[path] ChartHop for Employees/Edit your User settings/Untitled/

Below your own delegate settings, the Approval Delegates tab shows a read-only list of any approvers who have designated you as their delegate, along with the approval type(s). This gives you a consolidated view of whose approvals you are responsible for.

## Removing a delegate

To remove your delegate, click the remove option next to their name in the relevant section. Once removed, they will no longer receive your delegated approval tasks.

## What happens when a delegate leaves

If your delegate departs from the organization, their delegation is automatically removed. You will receive an in-app notification and email letting you know, with a direct link back to the Approval Delegates tab so you can assign a replacement.

Similarly, if your delegate moves to a different job, the delegation is removed, since delegation is tied to the job seat rather than the person.

## Email notifications

In-app notifications for approval delegate activity are always delivered. To turn off email notifications, go to **Settings > User Settings > Email Notifications** and uncheck **Approval delegate emails**.

| Event                                       | Who receives it | Channels       |
| ------------------------------------------- | --------------- | -------------- |
| You are set as someone's delegate           | Delegate        | In-app + email |
| Your delegate approved on your behalf       | Approver        | In-app + email |
| Your delegate rejected on your behalf       | Approver        | In-app + email |
| Your delegate departs or moves to a new job | Approver        | In-app + email |

[title] Customize your employee profile
[path] ChartHop for Employees/

In your Employee profile, you can view and edit general information about yourself. You can also decide who can see specific information (such as your birthday), as well as use this space as a launching point for completing tasks in ChartHop.

You can check out your employee profile by selecting your profile icon on the left sidebar and selecting **My profile**.&#x20;

In the **Complete tasks** ▼ dropdown, you can fill out any forms your organization has set up for you, such as the **About Me&#x20;**&#x66;orm. In the **About Me&#x20;**&#x73;ection, you can let everyone in the organization know all about you: when and how to best contact you, your working style, and random fun facts about you. 

:::hint{type="info"}
The forms that are available for you to fill out depend on your organization and may be different from the ones described here.
:::

![About Me](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/dPmEkZjHFJ4nhLD7FSrIh_aboutme.png)

:::hint{type="info"}
[Modules:](https://www.charthop.com/pricing/) <font color="#000000">**HRIS |** </font>**Engagement | Goals | Performance |&#x20;**<font color="#000000">**Compensation Reviews |** </font>**Headcount Planning**
:::


[title] Signing in to ChartHop for the first time
[path] ChartHop for Employees/

Welcome to ChartHop! 🥕

You can use ChartHop to get context on the structure and people of your organization, see open roles, review your compensation, submit 1:1s to your manager, submit proposals, and stay clear and up to date on the changes going on in your organization.

Your ChartHop administrator has sent you a welcome email inviting you to join ChartHop. Please sign in using the required single sign-on (SSO) option. If you have any issues, please reach out to your ChartHop administrator.

:::hint{type="warning"}
To prevent any errors when signing in to ChartHop for the first time, make sure any pop-up blockers are disabled in your browser and that you’re not signing in using an Incognito or Private Browsing mode.
:::

![Welcome email](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/KJINlHpXmJsG0Cmlw-m3C_welcomeemailexample.png)

:::hint{type="info"}
[Modules:](https://www.charthop.com/pricing/) <font color="#000000">**HRIS |** </font>**Engagement | Goals | Performance |&#x20;**<font color="#000000">**Compensation Reviews |** </font>**Headcount Planning**
:::


[title] Clear data in ChartHop Basic
[path] Implementing ChartHop/Creating your ChartHop org/Import payroll data for ChartHop Basic/

When starting out with ChartHop Basic, you can import sample data to help you experiment with ChartHop's features.&#x20;

Importing sample data allows you to practice the process and ensure you are importing the data as you need it and including all of the information you need to build your org chart and initial employee roster.

:::hint{type="danger"}
You should not clear data unless you intend to start your initial import over or want to delete all of the data from your initial import.  If you wish to change your data, you can do so manually within ChartHop or import a spreadsheet to update your current data. [Learn more.](https://docs.charthop.com/update-your-current-organization)
:::

You can clear this sample data or any initial import and choose to start over. &#x20;

When you clear data, the following happens:

- All data associated with employees is deleted.
- You do not need to re-invite users to your organization or re-assign roles. All user information remains in ChartHop.
- The initial import tile is once again available on your Home page.

To clear initial import data:

1. From the left sidebar, select **Admin**.
2. From the sub-menu, select **Clear Data**.
3. Select **Clear data.**



:::hint{type="info"}
****<font color="#000000">**Basic**</font> <font color="#000000">|</font> <font color="#000000">HRIS | </font>Engagement | Goals | Performance | <font color="#000000">Compensation Reviews | </font>Headcount Planning
:::

:::hint{type="info"}
[Roles](https://docs.charthop.com/user-roles-and-permissions): Owner
:::


[title] Synced data from Sapling Onboarding from Kallidus
[path] Implementing ChartHop/Apps & Integrations/Payroll systems/Installing payroll apps/Sapling Onboarding from Kallidus/

The following table lists the default data set that is synced from Sapling to ChartHop.&#x20;

ChartHop customers can work with ChartHop implementation services to customize what is synced.

:::hint{type="info"}
You must include the country code as a part of any international number for it to be recognized as such within ChartHop. When you are syncing phone numbers from an external system, such as a payroll system or ATS, be sure the country code is included in the phone number that is listed in the external system. This also applies when updating data through a spreadsheet.
:::

| **ChartHop field label**       | **ChartHop field code** | **Sapling source field**                                                                                                                                                |
| ------------------------------ | ----------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Base                           | base                    | profiles.base\_salary.currency\_value, profiles.base\_salary.currency\_type, profiles.pay\_rate.currency\_value, profiles.pay\_rate.currency\_type, profiles.rate\_type |
| Birth Date                     | birthdate               | profiles.date\_of\_birth                                                                                                                                                |
| City - Home Address            | address.city            | profiles.home\_address.city                                                                                                                                             |
| Country - Home Address         | address.country         | profiles.home\_address.country                                                                                                                                          |
| Currency                       | currency                | profiles.base\_salary.currency\_value, profiles.base\_salary.currency\_type, profiles.pay\_rate.currency\_value, profiles.pay\_rate.currency\_type, profiles.rate\_type |
| Depart                         | depart                  | profiles.termination\_type                                                                                                                                              |
| Department                     | department              | profiles.department                                                                                                                                                     |
| Employement                    | employment              | profiles.employment\_status                                                                                                                                             |
| End Date                       | enddate                 | profiles.termination\_date                                                                                                                                              |
| Ethnicity                      | ethnicity               | profiles.race\_ethnicity, profiles.race\_ethnicity\_please\_select\_all\_that\_apply                                                                                    |
| First Name                     | name.first              | profiles.first\_name                                                                                                                                                    |
| Gender                         | gender                  | profiles.gender, profiles.gender\_identity                                                                                                                              |
| Home Email                     | contact.homeemail       | profiles.personal\_email                                                                                                                                                |
| Home Phone                     | contact.homephone       | profiles.home\_phone\_number.country, profiles.home\_phone\_number.area\_code, profiles.home\_phone\_number.phone                                                       |
| Hourly                         | hourly                  | profiles.base\_salary.currency\_value, profiles.base\_salary.currency\_type, profiles.pay\_rate.currency\_value, profiles.pay\_rate.currency\_type, profiles.rate\_type |
| Last Name                      | name.last               | profiles.last\_name                                                                                                                                                     |
| Location                       | location                | profiles.location                                                                                                                                                       |
| Manager                        | manager                 | profiles.manager                                                                                                                                                        |
| Middle Name                    | name.middle             | profiles.middle\_name                                                                                                                                                   |
| Mobile                         | contact.mobilephone     | profiles.mobile\_phone\_number.country, profiles.mobile\_phone\_number.area\_code, profiles.mobile\_phone\_number.phone                                                 |
| Preferred First Name           | name.pref               | profiles.preferred\_name                                                                                                                                                |
| Start Date                     | startdate               | profiles.start\_date                                                                                                                                                    |
| State - Home Address           | address.state           | profiles.home\_address.state                                                                                                                                            |
| Street 1 - Home Address        | address.street1         | profiles.home\_address.line1                                                                                                                                            |
| Street 2 - Home Address        | address.street2         | profiles.home\_address.line2                                                                                                                                            |
| Title                          | title                   | profiles.job\_title                                                                                                                                                     |
| Work Email                     | contact.workemail       | profiles.company\_email                                                                                                                                                 |
| Zip/Postal - Home Address      | address.postal          | profiles.home\_address.zip                                                                                                                                              |
| *Used to store profile photos* | imageurl                | profiles.profile\_photo                                                                                                                                                 |

##


[title] Installing the Justworks app
[path] Implementing ChartHop/Apps & Integrations/Payroll systems/Installing payroll apps/Untitled/



This section covers setting up the Justworks integration app, which allows you to sync your employee roster to ChartHop. 

## Review your payroll system data

Your ChartHop payroll app syncs your employee data from your payroll system and builds your org chart in ChartHop. Once your Org Chart is created, you can start using ChartHop.

ChartHop recommends reviewing the data in your payroll system to ensure it is what you expect before you sync it to ChartHop. For example, if an employee has multiple system IDs in your payroll system, that employee’s data won’t sync properly. You should also be sure that your payroll system reflects an accurate view of your organization, including reporting structures, employee locations, and compensation. 

## Create a Justworks user for ChartHop

For ChartHop to access your organization's Justworks payroll data, you need to create a **3rd party admin** user in Justworks that you can use in ChartHop.&#x20;

Follow the [instructions](https://help.justworks.com/hc/en-us/articles/360015582992-Adding-3rd-Party-Admins-Accountants) in the Justworks documentation to create a 3rd party admin user. This admin user must have the following Justworks permissions:

1. View invoices and reporting
2. Manage Employees

After you create your Justworks user, you can prepare to configure Google multi-factor authentication.

## Configure Google multi-factor authentication

To improve the quality and speed of the Justworks data sync, you need to configure Google's multi-factor authentication in Justworks. This generates a bar code ChartHop needs in order to complete your Justworks app installation.

1. Log into JustWorks using the account you created for ChartHop.
   - The username of this account can be found in the Justworks app settings in ChartHop.
   - When you log in, you may need to enter your 2-factor authentication code sent to the phone number you previously registered with the account.
2. After you log in, set up your Google Authenticator using a 2-factor authentication method. This generates a bar code ChartHop needs in order to access your Justworks data:
   - Select **Account Settings** in the navigation menu.
   - In **Account Settings**, select **Security/Log in**.
   - Select **Verify to** **edit** on the **Multi-factor Authentication** box.
   - Select **Set up** on the **Google Authenticator** option.
   - When viewing the QR code, select **Can’t scan the QR code?** beneath the QR code.
   - Copy the displayed code by copy/pasting it into a safe place.

## Install the Justworks app

After you have your Justworks user and google authentication code, you can install the Justworks integration app in ChartHop.

1. From the left sidebar, select **Apps & Bundles**.
2. From the sub-menu, select **Apps,&#x20;**&#x69;f not already pre-selected.
3. Select the **Availible Apps** tab.
4. Scroll to your payroll app and select **Install&#x20;**&#x6F;n the far right of the respective app's row.

### Connect the Justworks app

You'll be prompted to configure your payroll app when you select **Install**.

1. Enter the username and password of the user you created in Justworks.
2. Copy the Google multi-factor authentication code you saved from Justworks.
3. Select **Next step**.

### Configure data sync settings for Justworks

Data sync settings control how and what data is synced to ChartHop from your payroll system. For example, you can choose whether or not to create a backfill position in ChartHop when you have a departure in your payroll system. Other advanced settings allow you to exclude certain employees.

- Select one of the two options:
  - **Automatically create backfills** - This option creates a backfill position in ChartHop (open job) when an employee is marked as departed in your payroll system.
  - **Sync departures only** - This option removes the departed employee from ChartHop. The employee's job history remains in ChartHop.

### Configure advanced settings

Advanced settings allow you to better control how your payroll data syncs to ChartHop.

ChartHop recommends accepting the default values for these settings. Please get in touch with ChartHop Support or your Customer Success Manager for assistance if needed.

1. Expand the **Advanced settings** section. 
2. Use the following table to guide you through advanced settings decisions. 

| **Setting**                               | **Description&#xA0;**                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               |
| ----------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Missing location information <br /><br /> | Select one of the two options for what should happen if location information is set for an open role:<br />* **Set Remote as the default location in ChartHop** - When selected, any open role that does not have a location set will be set to have a Remote location in ChartHop.
* **Leave location blank in ChartHop&#x20;**- When selected, any open role that does not have a location set in your payroll app will not have a location set in ChartHop.                                                                                                                                                      |
| Advanced sync options                     | Select the data changes you want to include in your sync. You can include some or all of the following employee data: <br />* Job titles 
* Managers 
* Groups 
* Compensation 
* Hire dates                                                                                                                                                                                                                                                                                                                                                                                                                        |
| Overwrite person fields <br /><br />      | ChartHop recommends using this setting to avoid needing to update both ChartHop and your payroll system when a change is made to any field value that is synced from your payroll system.<br /><br />When you choose this option, your payroll system remains the source of truth for the following fields in ChartHop: birthdate, gender, home address, and so on. Any edits you or an employee make to this data in ChartHop are overwritten during synchronization. This can pose an issue when someone uses ChartHop to update employee fields in ChartHop, without requesting an update in the source system.  |
| Historical data                           | Choose whether or not you want to sync historical data. You can turn this off if you want to exclude any historical changes before the date of your initial sync.                                                                                                                                                                                                                                                                                                                                                                                                                                                   |
| Exclude IDs                               | To exclude specific individuals from the sync, enter their unique payroll system IDs here, separated by commas.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     |

### Run an initial one-time sync of your payroll data

When you first configure your payroll app, you should run a one-time sync to verify that the sync is operating as you expect it to and that your data is what you expect.

To run a one-time sync:

1. In the setup wizard, select the **Run one-time sync** option.
2. Select **Finish setup**.

## Verify your data in ChartHop

After running your first sync, you can use the Data Sheet and Org Chart pages to spot-check your data. You can use the Sync History page to verify when the sync was run and if it encountered any issues. 

You should spot-check your ChartHop org for the following:

- Correct management reporting lines
- Compensation data
- Employee information on profiles (names, addresses, and so on)
- Job titles
- Departments
- Locations

:::hint{type="info"}
Remember that most issues with your synced data originate in your payroll system. ChartHop allows you to visualize your employee data to make finding these discrepancies easier. Still, you’ll need to fix any data discrepancies in your payroll system and rerun the sync to view the fixes in ChartHop.
:::

## Configure your payroll app sync to run daily

After you’ve synced your data for the first time and verified your Org Chart, you should configure a daily sync. The value of syncing your payroll data to ChartHop is that it ensures that your employee data is always up to date. 

1. From the left sidebar, select **Apps & Bundles**.
2. From the sub-menu, select **Apps,&#x20;**&#x69;f not already pre-selected.
3. Select the **Installed Apps** tab.
4. Scroll to your payroll app and select the gear (settings) icon on the far right of the row to view app settings.
5. Within the **App status & sync** settings section, select the **Edit** (pencil) icon.
6. Toggle the auto-sync option to on.
7. Select **Save**.


[title] Synced data from Rippling
[path] Implementing ChartHop/Apps & Integrations/Payroll systems/Installing payroll apps/Rippling (licensed API only)/

The following table lists the default data set that is synced from Rippling to ChartHop.&#x20;

ChartHop customers can work with ChartHop implementation services to customize what is synced.

:::hint{type="info"}
You must include the country code as a part of any international number for it to be recognized as such within ChartHop. When you are syncing phone numbers from an external system, such as a payroll system or ATS, be sure the country code is included in the phone number that is listed in the external system. This also applies when updating data through a spreadsheet.
:::



| **ChartHop field label**  | **ChartHop field code** | **Rippling field code**                                            |
| ------------------------- | ----------------------- | ------------------------------------------------------------------ |
| Base                      | base                    | employee.income.Unitemployee.income.amountemployee.income.currency |
| Birth Date                | birthdate               | individual.dob                                                     |
| City - Home Address       | address.city            | individual.residence.city                                          |
| Country - Home Address    | address.country         | individual.residence.country                                       |
| Currency                  | currency                | employee.income.Unitemployee.income.amountemployee.income.currency |
| Department                | department              | employee.department.name                                           |
| Employment                | employment              | employee.employment.subType                                        |
| End Date                  | enddate                 | employee.end\_Date, employee.is\_active, employee.start\_date      |
| First Name                | name.first              | individual.first\_name                                             |
| Home Email                | contact.homeemail       | individual.emails                                                  |
| Home Phone                | contact.homephone       | individual.phone\_numbers                                          |
| Hourly                    | hourly                  | employee.income.Unitemployee.income.amountemployee.income.currency |
| Last Name                 | name.last               | individual.last\_name                                              |
| Location                  | location                | employee.location\_city                                            |
| Manager                   | manager                 | employee.manager.id                                                |
| Mobile                    | contact.mobilephone     | individual.phone\_numbers                                          |
| Start Date                | startdate               | employee.start\_date                                               |
| State - Home Address      | address.state           | individual.residence.state                                         |
| Street 1 - Home Address   | address.street1         | individual.residence.line1                                         |
| Street 2 - Home Address   | address.street2         | individual.residence.line2                                         |
| Title                     | title                   | employee.title                                                     |
| Work Email                | contact.workemail       | individual.emails                                                  |
| Work phone                | contact.workphone       | individual.phone\_numbers                                          |
| Zip/Postal - Home Address | address.postal          | individual.residence.postal\_code                                  |


[title] Synced data from Ultipro
[path] Implementing ChartHop/Apps & Integrations/Payroll systems/Installing payroll apps/Ultipro (UKG Pro)/

The table below lists the default data set that is synced from Ultipro to ChartHop.&#x20;

ChartHop customers can work with ChartHop implementation services to customize what is synced.

:::hint{type="info"}
You must include the country code as a part of any international number for it to be recognized as such within ChartHop. When you are syncing phone numbers from an external system, such as a payroll system or ATS, be sure the country code is included in the phone number that is listed in the external system. This also applies when updating data through a spreadsheet.
:::

### Fields list

| **ChartHop field label**                                             | **ChartHop field code** | **Ultipro field code**                                                                                                                                                        |
| -------------------------------------------------------------------- | ----------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Birth Date                                                           | birthdate               | person-details.dateOfBirth                                                                                                                                                    |
| City - Home Address                                                  | address.city            | person-details.addressCity                                                                                                                                                    |
| Country - Home Address                                               | address.country         | person-details.addressCountry                                                                                                                                                 |
| Date                                                                 | date                    | employee-job-history-details.jobEffectiveDate                                                                                                                                 |
| Department                                                           | department              | employment-details.orgLevel1Code, employee-job-history-details.orgLevel1Code, employment-details.fullTimeOrPartTimeCode, employee-job-history-details.fullTimeOrPartTime      |
| End Date                                                             | enddate                 | employment-details.dateOfTermination                                                                                                                                          |
| Ethnicity                                                            | ethnicity               | person-details.ethnicDescription                                                                                                                                              |
| First Name                                                           | name.first              | person-details.firstName                                                                                                                                                      |
| Gender                                                               | gender                  | person-details.gender                                                                                                                                                         |
| Home email                                                           | contact.homeemail       | person-details.emailAddressAlternate                                                                                                                                          |
| Home Phone                                                           | contact.homephone       | person-details.homePhone                                                                                                                                                      |
| Last Name                                                            | name.last               | person-details.lastName                                                                                                                                                       |
| Location                                                             | location                | employment-details.primaryWorkLocationCode, employee-job-history-details.locationCode                                                                                         |
| Manager                                                              | manager                 | employment-details.supervisorID, employee-job-history-details.supervisorId                                                                                                    |
| Middle Name                                                          | name.middle             | person-details.middleName                                                                                                                                                     |
| Preferred First Name                                                 | name.pref               | person-details.preferredName                                                                                                                                                  |
| Promotion                                                            | promotion               | employee-job-history-details.isPromotion                                                                                                                                      |
| Start Date                                                           | startdate               | employment-details.lastHireDate                                                                                                                                               |
| State - Home Address                                                 | address.state           | person-details.addressState                                                                                                                                                   |
| Street 1 - Home Address                                              | address.street1         | person-details.addressLine1                                                                                                                                                   |
| Street 2 - Home Address                                              | address.street2         | person-details.addressLine2                                                                                                                                                   |
| Street 3 - Home Address                                              | address.street3         | person-details.addressLine3                                                                                                                                                   |
| Title                                                                | title                   | employment-details.jobDescription, employee-job-history-details.jobDescription, employee-job-history-details.hourlyPayRate                                                    |
| Work email                                                           | contact.workemail       | person-details.emailAddress                                                                                                                                                   |
| Zip/Postal - Home Address                                            | address.postal          | person-details.addressZipCode                                                                                                                                                 |
| *See Hourly compensation rate calculations and Comp Transform below* | hours                   | employee-job-history-details.salaryOrHourly, employee-job-history-details.annualSalary                                                                                        |
| *Used to store compensation information*                             | type                    | employment-details.employeeStatusCode, employee-job-history-details.jobChangeReasonCode, employee-job-history-details.employeeStatus, employee-job-history-details.reasonCode |

### Hourly compensation rate calculations

The ​hourly field defaults to 40.0 (hours) but is derived in the following ways:

- `weeks = annualSalary / weeklyPayRate`
- `hours = annualSalary / hourlyPayRate / weeks`

This assumes hours are derived per week from a base salary and a scaled hours per day and weeks per year figure against the defaults of 52 weeks per year and 40 hours per week.

Hourly workers, from UKG get an annualized salary, an amount paid weekly, and an amount paid hourly. For example, if an employee has `annualSalary=50,000`, `weeklyPayRate=1000 `and `hourlyPayRate=20` , the calculations become:

- `weeks = 50000 / 1000 = 50`
- `hours = 50000 / 20 / 50 = 50`

Using the example above, the employee makes $50,000 a year by working 50, 50-hour weeks at $20 an hour.  Said another way, they make $1000 a week for each of the 50 weeks they work, because they work 50 hours per week and 50 \* 20 = 1000.

[title] Installing the Gusto app
[path] Implementing ChartHop/Apps & Integrations/Payroll systems/Installing payroll apps/Untitled/

This section covers setting up the Gusto integration app, which allows you to sync your employee roster to ChartHop. 

## Review your payroll system data

Your ChartHop payroll app syncs your employee data from your payroll system and builds your org chart in ChartHop. Once your Org Chart is created, you can start using ChartHop.

ChartHop recommends reviewing the data in your payroll system to ensure it is what you expect before you sync it to ChartHop. For example, if an employee has multiple system IDs in your payroll system, that employee’s data won’t sync properly. You should also be sure that your payroll system reflects an accurate view of your organization, including reporting structures, employee locations, and compensation. 

## Install the Gusto app

After you have your Gusto Access Token and the Gusto subdomain name, you can install the Gusto integration app in ChartHop.

1. From the left sidebar, select **Apps & Bundles**.
2. From the sub-menu, select **Apps,&#x20;**&#x69;f not already pre-selected.
3. Select the **Availible Apps** tab.
4. Scroll to your payroll app and select **Install&#x20;**&#x6F;n the far right of the respective app's row.

### Connect the Gusto app

You'll be prompted to configure your payroll app when you select **Install**.

1. Select the **Go to Gusto** button and log in to Gusto.
2. You'll be prompted to authorize ChartHop to connect to Gusto in Gusto.
3. Select the **Authorize** button in Gusto.
4. Select **Next step**.

### Configure data sync settings for Gusto

Data sync settings control how and what data is synced to ChartHop from your payroll system. For example, you can choose whether or not to create a backfill position in ChartHop when you have a departure in your payroll system. Other advanced settings allow you to exclude certain employees.

1. Choose how you want to handle employee departures:
   - **Automatically create backfills** - This option creates a backfill position in ChartHop (open job) when an employee is marked as departed in your payroll system.
   - **Sync departures only** - This option removes the departed employee from ChartHop. The employee's job history remains in ChartHop.
2. Choose if you want to include contractor data in your sync.

### Configure advanced settings

Advanced settings allow you to better control how your payroll data syncs to ChartHop.

ChartHop recommends accepting the default values for these settings. Please get in touch with ChartHop Support or your Customer Success Manager for assistance if needed.

1. Expand the **Advanced settings** section. 
2. Use the following table to guide you through advanced settings decisions. 

| **Setting**                               | **Description&#xA0;**                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               |
| ----------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Missing location information <br /><br /> | Select one of the two options for what should happen if location information is set for an open role:<br />* **Set Remote as the default location in ChartHop** - When selected, any open role that does not have a location set will be set to have a Remote location in ChartHop.
* **Leave location blank in ChartHop&#x20;**- When selected, any open role that does not have a location set in your payroll app will not have a location set in ChartHop.                                                                                                                                                      |
| Advanced sync options                     | Select the data changes you want to include in your sync. You can include some or all of the following employee data: <br />* Job titles 
* Managers 
* Groups 
* Compensation 
* Hire dates                                                                                                                                                                                                                                                                                                                                                                                                                        |
| Overwrite person fields <br /><br />      | ChartHop recommends using this setting to avoid needing to update both ChartHop and your payroll system when a change is made to any field value that is synced from your payroll system.<br /><br />When you choose this option, your payroll system remains the source of truth for the following fields in ChartHop: birthdate, gender, home address, and so on. Any edits you or an employee make to this data in ChartHop are overwritten during synchronization. This can pose an issue when someone uses ChartHop to update employee fields in ChartHop, without requesting an update in the source system.  |
| Historical data                           | Choose whether or not you want to sync historical data. You can turn this off if you want to exclude any historical changes before the date of your initial sync.                                                                                                                                                                                                                                                                                                                                                                                                                                                   |
| Exclude IDs                               | To exclude specific individuals from the sync, enter their unique payroll system IDs here, separated by commas.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     |

### Run an initial one-time sync of your payroll data

When you first configure your payroll app, you should run a one-time sync to verify that the sync is operating as you expect it to and that your data is what you expect.

To run a one-time sync:

1. In the setup wizard, select the **Run one-time sync** option.
2. Select **Finish setup**.

## Verify your data in ChartHop

After running your first sync, you can use the Data Sheet and Org Chart pages to spot-check your data. You can use the Sync History page to verify when the sync was run and if it encountered any issues. 

You should spot-check your ChartHop org for the following:

- Correct management reporting lines
- Compensation data
- Employee information on profiles (names, addresses, and so on)
- Job titles
- Departments
- Locations

:::hint{type="info"}
Remember that most issues with your synced data originate in your payroll system. ChartHop allows you to visualize your employee data to make finding these discrepancies easier. Still, you’ll need to fix any data discrepancies in your payroll system and rerun the sync to view the fixes in ChartHop.
:::

## Configure your payroll app sync to run daily

After you’ve synced your data for the first time and verified your Org Chart, you should configure a daily sync. The value of syncing your payroll data to ChartHop is that it ensures that your employee data is always up to date. 

1. From the left sidebar, select **Apps & Bundles**.
2. From the sub-menu, select **Apps,&#x20;**&#x69;f not already pre-selected.
3. Select the **Installed Apps** tab.
4. Scroll to your payroll app and select the gear (settings) icon on the far right of the row to view app settings.
5. Within the **App status & sync** settings section, select the **Edit** (pencil) icon.
6. Toggle the auto-sync option to on.
7. Select **Save**.


[title] Sapling Onboarding from Kallidus
[path] Implementing ChartHop/Apps & Integrations/Payroll systems/Installing payroll apps/

With the Sapling Onboarding from Kallidus app, you can sync your payroll data to ChartHop, which automatically builds your org chart and keeps it up to date. Synced data includes job title, manager, department, location, hires and departures, contact information and demographics, compensation changes, and time off.

### Sapling at a glance

The following table summarizes ChartHop’s Sapling Onboarding from Kallidus app. 

| **Supported ChartHop packages**      | - <font color="#000000">Basic</font>&#x20;
- <font color="#000000">Standard </font>
- <font color="#000000">Premium</font>                                                                                                           |
| ------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| **Supported Sapling packages**       | * Onboarding
* People Ops Platform&#x20;
* Learning and Performance                                                                                                                                                                  |
| **Prerequisites**                    | A Sapling account with administrator privileges and a ChartHop account with the Owner role.                                                                                                                                          |
| **API key permissions**              | As a Sapling administrator, create an API key and save it in ChartHop.                                                                                                                                                               |
| **Data direction**                   | Inbound from Sapling to ChartHop                                                                                                                                                                                                     |
| **Sync cadence**                     | Daily or as needed                                                                                                                                                                                                                   |
| **Effective dating support**         | No                                                                                                                                                                                                                                   |
| **Additional field mapping support** | Yes, for ChartHop Premium customers, through the profiles field category. See [Sapling’s documentation](https://api.saplinghr.com/). <br /><br />Please direct all custom mapping requests to ChartHop’s Professional Services team. |
| **Payroll app overview**             | Read an [overview](https://docs.charthop.com/payroll-system-apps) of how how payroll apps work in ChartHop.                                                                                                                          |
| **Synced Data**                      | The default [synced data](https://docs.charthop.com/synced-data-from-sapling-onboarding-from-kallidus) from Sapling Onboarding from Kallidus to ChartHop.                                                                            |


[title] Synced data from Justworks
[path] Implementing ChartHop/Apps & Integrations/Payroll systems/Installing payroll apps/Untitled/

The following table lists the default data set that is synced from Justworks to ChartHop.

ChartHop customers can work with ChartHop implementation services to customize what is synced.

:::hint{type="info"}
You must include the country code as a part of any international number for it to be recognized as such within ChartHop. When you are syncing phone numbers from an external system, such as a payroll system or ATS, be sure the country code is included in the phone number that is listed in the external system. This also applies when updating data through a spreadsheet.
:::

| **ChartHop field label**       | **Charthop field code** | **Justworks field code**                             |
| ------------------------------ | ----------------------- | ---------------------------------------------------- |
| Base                           | base                    | members.pay, members.payBasis, members.nonUsEmployee |
| Birth Date                     | birthdate               | members.dateOfBirth                                  |
| City - Home Address            | address.city            | members.address.city                                 |
| Country - Home Address         | address.country         | members.address.country                              |
| Currency                       | currency                | members.pay, members.payBasis, members.nonUsEmployee |
| Department                     | department              | members.department                                   |
| Employment                     | employment              | members.memberType                                   |
| End Date                       | enddate                 | members.terminatedDate                               |
| Ethnicity                      | ethnicity               | members.eeo1Race.value                               |
| First Name                     | name.first              | members.firstName                                    |
| Gender                         | gender                  | members.eeo1Gender.value                             |
| Home Email                     | contact.homeemail       | members.emailAddresses.home                          |
| Home Phone                     | contact.homephone       | members.phoneNumbers.home                            |
| Hourly                         | hourly                  | members.pay, members.payBasis, members.nonUsEmployee |
| Last Name                      | name.last               | members.name, members.firstName                      |
| Location                       | location                | members.office                                       |
| Manager                        | manager                 | members.manager.uuid                                 |
| Mobile                         | contact.mobilephone     | members.phoneNumbers.cell                            |
| Start Date                     | startdate               | members.startDate                                    |
| State - Home Address           | address.state           | members.address.state                                |
| Street 1 - Home Address        | address.street1         | members.address.street1                              |
| Street 2 - Home Address        | address.street2         | members.address.street2                              |
| Title                          | title                   | members.title                                        |
| Work Email                     | contact.workemail       | members.emailAddresses.work                          |
| Work Phone                     | contact.workphone       | members.phoneNumbers.office                          |
| Zip/Postal - Home Address      | address.postal          | members.address.postal\_code                         |
| *Used to store profile photos* | imageurl                | members.photoUrl                                     |


[title] Humaans
[path] Implementing ChartHop/Apps & Integrations/Payroll systems/Installing payroll apps/

The Humaans app allows you to sync your payroll data to ChartHop, automatically building your org chart and keeping it up to date. Synced data includes title, manager, department, location, hires and departures, personal contact and demographic information, compensation changes, and time off.

:::hint{type="info"}
[Packages](https://www.charthop.com/pricing/)**:&#x20;**<font color="#a9a9a9">Basic</font> <font color="#000000">|</font> <font color="#000000">**Headcount Planning** | </font><font color="#000000">**Compensation Reviews** | </font><font color="#000000">**Performance** | </font><font color="#000000">**Engagement** </font>
:::

### Humaans at a glance

The following table summarizes ChartHop’s Humaans app. 

| **Supported Humaans packages**       | - Growth
- Enterprise                                                                                                                                                                                                                                                                                                                                                                                                              |
| ------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Prerequisites**                    | A ChartHop account with the Technical Owner role and a Humaans account with Administrator permissions.                                                                                                                                                                                                                                                                                                                             |
| **API key permissions**              | Same as Humaans administrator                                                                                                                                                                                                                                                                                                                                                                                                      |
| **Data direction**                   | Inbound from Humaans to ChartHop                                                                                                                                                                                                                                                                                                                                                                                                   |
| **Sync cadence**                     | Daily or as needed                                                                                                                                                                                                                                                                                                                                                                                                                 |
| **Effective dating support**         | Yes                                                                                                                                                                                                                                                                                                                                                                                                                                |
| **Additional field mapping support** | Additional field mapping is available for the following Humaans field categories: <br /> <br />- [Employees](https://docs.humaans.io/api/#people) &#x20;
- [Compensation](https://docs.humaans.io/api/#compensations) &#x20;
- [Jobs](https://docs.humaans.io/api/#job-roles)&#x20;
- [Time off ](https://docs.humaans.io/api/#time-away)<br />Please direct all custom mapping requests to ChartHop’s Professional Services team. |
| **Payroll app overview**             | Read an [overview](https://docs.charthop.com/payroll-system-apps) of how payroll apps work in ChartHop.                                                                                                                                                                                                                                                                                                                            |
| **Synced Data**                      | The default [synced data](https://docs.charthop.com/synced-data-from-humaans) from Humaans to ChartHop.                                                                                                                                                                                                                                                                                                                            |


[title] Synced data from Humaans
[path] Implementing ChartHop/Apps & Integrations/Payroll systems/Installing payroll apps/Untitled/

The table below lists the default dataset that is synced from Humaans to ChartHop.&#x20;

ChartHop customers can work with ChartHop implementation services to customize what is synced.

:::hint{type="info"}
You must include the country code as a part of any international number for it to be recognized as such within ChartHop. When you are syncing phone numbers from an external system, such as a payroll system or ATS, be sure the country code is included in the phone number that is listed in the external system. This also applies when updating data through a spreadsheet.
:::

| **ChartHop field label**                 | **ChartHop field code**        | **Humaans field code**                                      |
| ---------------------------------------- | ------------------------------ | ----------------------------------------------------------- |
| Base                                     | base                           | compensation.amount, compensation.period, compensation.type |
| Birth Date                               | birthdate                      | employee.birthday                                           |
| City - Home Address                      | address.city                   | employee.city                                               |
| Country - Home Address                   | address.country                | employee.country                                            |
| Currency                                 | currency                       | compensation.currency                                       |
| Date                                     | type, date, startdate, enddate | employee.employmentStartDate, employee.employmentEndDate    |
| Date                                     | date                           | timeOff.id                                                  |
| Depart                                   | depart                         | employee.teams                                              |
| Department                               | department                     | jobRoles.department                                         |
| Employment                               | employment                     | employee.contractType                                       |
| First Name                               | name.first                     | employee.firstName                                          |
| Gender                                   | gender                         | employee.gender                                             |
| Home Email                               | contact.homeemail              | employee.personalEmail                                      |
| Hourly                                   | hourly                         | compensation.amount, compensation.period, compensation.type |
| Last Name                                | name.last                      | employee.lastName                                           |
| LInkedIn                                 | contact.linkedin               | employee.linkedIn                                           |
| Location                                 | location                       | employee.locationId, locations.ids                          |
| Manager                                  | manager                        | jobRoles.reportingTo                                        |
| Middle Name                              | name.middle                    | employee.middleName                                         |
| Mobile                                   | contact.mobilephone            | employee.personalPhoneNumber                                |
| Preferred First Name                     | name.pref                      | employee.preferredName                                      |
| Promotion                                | promotion                      | compensation.note                                           |
| Slack                                    | contact.slack                  | employee.slack                                              |
| State - Home Address                     | address.state                  | employee.state                                              |
| Street 1 - Home Address                  | address.street1                | employee.address                                            |
| Team                                     | team                           | employee.teams                                              |
| Title                                    | title                          | jobRoles.jobTitle                                           |
| Twitter                                  | contact.twitter                | employee.twitter                                            |
| Variable                                 | variable                       | compensation.amount, compensation.period, compensation.type |
| Work Email                               | contact.workemail              | employee.email                                              |
| Work Phone                               | contact.workphone              | employee.phoneNumber                                        |
| Zip/Postal - Home Address                | address.postal                 | employee.postcode                                           |
| *Used to store compensation information* | variabletype                   | compensation.type                                           |
| *Used to store profile photos*           | imageurl                       | employee.profilePhoto.variants.320                          |
| *Used to store time off information*     | timeoff.approval               | timeOff.type                                                |
| *Used to store time off information*     | timeoff.days, timeoff.hours    | timeOff.days                                                |
| *Used to store time off information*     | timeoff.enddate                | timeOff.endDate                                             |
| *Used to store time off information*     | timeoff.note                   | timeOff.note                                                |
| *Used to store time off information*     | timeoff.startdate              | timeOff.startDate                                           |


[title] ADP
[path] Implementing ChartHop/Apps & Integrations/Payroll systems/Installing payroll apps/

With the ADP app, you can sync your payroll data to ChartHop, which automatically builds your org chart and keeps it up to date. Synced data includes contact information, demographics, compensation, managers, departments, teams, and locations.&#x20;

Jump to [Installing the ADP Data Connector](docId\:Hij0yqV02zXpb29MuH-kK)

Jump to [Installing the ADP (Legacy) app](docId:60lIBl0sTrzmKiovBhuMX)

### ADP at a glance

The following table summarizes ChartHop’s ADP app.

| **Supported ChartHop packages**      | - <font color="#000000">Standard </font>
- <font color="#000000">Premium</font>                                                                                                                                                                                 |
| ------------------------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Supported ADP package**            | WorkForce Now                                                                                                                                                                                                                                                   |
| **Prerequisites**                    | ChartHop supports integrating with ADP Workforce Now and does not support other ADP integrations at this time.                                                                                                                                                  |
| **Data direction**                   | Inbound from ADP to ChartHop                                                                                                                                                                                                                                    |
| **Sync cadence**                     | Daily or as needed                                                                                                                                                                                                                                              |
| **Effective dating support**         | No                                                                                                                                                                                                                                                              |
| **Additional field mapping support** | Yes, through the [Workers API](https://developers.adp.com/articles/api/hcm-offrg-wfn/hcm-offrg-wfn-hr-workers-v2-workers/apiexplorer). For ChartHop Premium customers only. Please direct all custom mapping requests to ChartHop’s Professional Services team. |
| **Payroll app overview**             | Read an [overview](https://docs.charthop.com/payroll-system-apps) of how payroll apps work in ChartHop.                                                                                                                                                         |
| **Synced Data**                      | The default [synced data](https://docs.charthop.com/synced-data-from-adp) from ADP to ChartHop.                                                                                                                                                                 |


[title] Implementing ChartHop
[path] /

::::LinkArray{contentSource="CUSTOM"}
:::LinkArrayItem{headerType="IMAGE" headerImage="https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/Y3da8HPVUs9yglcXWBfvX_org-chart.jpg"}
[ChartHop implementation overview](docId:4t7K1Q4abrRcE6oSz-FLf)&#x20;



Get an overview of the tasks you'll do to set up ChartHop.
:::

:::LinkArrayItem{headerType="IMAGE" headerImage="https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/SB8WuLZ9WCemfmqxOckvj_data-sheet.jpg"}
[Creating your ChartHop org](docId\:wss9qf258lHzOxWpwFirl)&#x20;



Learn how to create your organization in ChartHop.
:::

:::LinkArrayItem{headerType="IMAGE" headerImage="https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/rKy-wNN5d37lUB2njQb2T_configuring-your-org-settings.jpeg"}
[Configuring your Org settings](docId\:VLOa8kfeFccVHKZVhzN_d)&#x20;



Customize the ChartHop settings for your organization.
:::

:::LinkArrayItem{headerType="IMAGE" headerImage="https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/x-zmnCSWbJ0wPsySjzpgW_inviting-users-and-setting-permissions.jpeg"}
[Inviting users and setting permissions](docId\:KOXUdsgLe9S5QqAH9rADj)&#x20;



Assign access roles and invite employees to use ChartHop.
:::

:::LinkArrayItem{headerType="IMAGE" headerImage="https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/6j2BgteLgegV7EG7F2ZKg_roles.jpg"}
[Permissions and security](docId\:nCxjpxI0kLTxRoUyIcxsx)&#x20;



Review the different access roles you can grant to users.
:::

:::LinkArrayItem{headerType="IMAGE" headerImage="https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/LMtSdfazjn89J76a5jKHL_creating-and-managing-groups.jpeg"}
[Creating and managing groups](docId:1B7KsAAQrS5bpcOg3CXc6)&#x20;



Add department, team, and location information.
:::

:::LinkArrayItem{headerType="IMAGE" headerImage="https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/D7IlvxMR4CDLFrbBffsUv_apps.jpg"}
[Integrations and bundles](docId\:Hlp6L7zXfpGhP5q-hF9gg)&#x20;



View our list of integration apps and bundle quickstarts.
:::
::::


[title] Synced Fields
[path] Implementing ChartHop/Apps & Integrations/Payroll systems/Installing payroll apps/Finch Integrations/Paycom/

# Synced data from Paycom

The following table lists the default data synced from Paycom to ChartHop. ChartHop's implementation team can customize what is synced for your organization.

**Phone number format.** You must include the country code as part of any international number for it to be recognized in ChartHop. When syncing phone numbers from Paycom, make sure the country code is included in the number stored there. This applies when updating data through a spreadsheet as well.

| ChartHop field label      | ChartHop field code          | Paycom (Finch) field                                                                                                                                                                                     |
| ------------------------- | ---------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| First name                | name.first                   | employment.first\_name, individual.first\_name                                                                                                                                                           |
| Last name                 | name.last                    | employment.last\_name, individual.last\_name                                                                                                                                                             |
| Middle name               | name.middle                  | employment.middle\_name, individual.middle\_name                                                                                                                                                         |
| Preferred name            | name.pref                    | individual.preferred\_name                                                                                                                                                                               |
| Title                     | title                        | employment.title                                                                                                                                                                                         |
| Department                | department                   | employment.department.name, directory.individuals.department                                                                                                                                             |
| Manager                   | manager                      | employment.manager, directory.individuals.manager.id                                                                                                                                                     |
| Employment type           | employment                   | employment.employment.type, employment.employment.subtype                                                                                                                                                |
| Active status             | isActive                     | employment.is\_active, directory.individuals.is\_active                                                                                                                                                  |
| Start date                | startDate                    | employment.start\_date                                                                                                                                                                                   |
| End date                  | endDate                      | employment.end\_date                                                                                                                                                                                     |
| Latest rehire date        | latestRehireDate             | employment.latest\_rehire\_date                                                                                                                                                                          |
| Base pay                  | base                         | employment.income.amount, employment.income.unit                                                                                                                                                         |
| Currency                  | currency                     | employment.income.currency                                                                                                                                                                               |
| Work location             | location                     | employment.location.line1, employment.location.line2, employment.location.city, employment.location.state, employment.location.postal\_code, employment.location.country, employment.location.source\_id |
| Birth date                | birthdate                    | individual.dob                                                                                                                                                                                           |
| SSN                       | ssn                          | individual.ssn                                                                                                                                                                                           |
| Work email                | contact.workemail            | individual.emails.data (type: work)                                                                                                                                                                      |
| Personal email            | contact.homeemail            | individual.emails.data (type: personal)                                                                                                                                                                  |
| Mobile phone              | contact.mobilephone          | individual.phone\_numbers.data (type: mobile)                                                                                                                                                            |
| Home phone                | contact.homephone            | individual.phone\_numbers.data (type: home)                                                                                                                                                              |
| Home address street 1     | home address.address.street1 | individual.residence.line1                                                                                                                                                                               |
| Home address street 2     | home address.address.street2 | individual.residence.line2                                                                                                                                                                               |
| City (home address)       | home address.address.city    | individual.residence.city                                                                                                                                                                                |
| State (home address)      | home address.address.state   | individual.residence.state                                                                                                                                                                               |
| ZIP/postal (home address) | home address.address.postal  | individual.residence.postal\_code                                                                                                                                                                        |
| Country (home address)    | home address.address.country | individual.residence.country                                                                                                                                                                             |

**Fields not listed here are not available via the Paycom API integration.** This includes ethnicity, gender, and custom fields. Contact ChartHop's implementation team if you need access to these fields via SFTP


[title] Installing payroll apps
[path] Implementing ChartHop/Apps & Integrations/Payroll systems/

ChartHop provides payroll apps for multiple payroll systems. The apps available to you depend on the ChartHop package you are using.

### Payroll app list

Select a link for your payroll system below and follow the instructions to install and configure its integration app.

Download the following PDF for a quick view of which ChartHop fields are supported by which payroll app.&#x20;

::File{src="https://archbee-doc-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/Javr_XyLghod_gt6lgRCW_charthop-fields-by-payroll-app.pdf" label="ChartHop fields by payroll app.pdf"}

| **Payroll app**                                                  | **ChartHop Basic** | **All other ChartHop Plans&#x20;** |
| ---------------------------------------------------------------- | ------------------ | ---------------------------------- |
| [ADP](docId:0T7ASn1GmQHd0taeUDrj8)                               |                    | ✅                                  |
| [BambooHR](docId\:DoQ-VQkYT5hq98UA8G67y)                         | ✅                  | ✅                                  |
| [Gusto](docId:5Tp0yK84ASWwA-tB2Dzx1)                             | ✅                  | ✅                                  |
| [Humaans](docId\:BGe_w1X3c5hL3YJORtkW5)                          |                    | ✅                                  |
| [Justworks](docId\:RnEeRwma9t9OUl4yNMe3o)                        | ✅                  | ✅                                  |
| [Namely](docId\:VXqan-bVLN_s9D60seAJZ)                           | ✅                  | ✅                                  |
| [Paylocity](docId\:giM4YRNP8_Q9Nc6GnEuBi)                        |                    | ✅                                  |
| [Rippling (licensed API only)](docId\:MDbJW0ckCmTJAUw1Yv5r2)     |                    | ✅                                  |
| [Sapling Onboarding From Kallidus](docId:0Iw69HNpNgFju4VemikGF)  | ✅                  | ✅                                  |
| [Sequoia One](docId:7AJ5Wt5h2qARKInHRHUok)                       |                    | ✅                                  |
| [SuccessFactors](docId\:u2owuFgdWtpuUX1xKdd5l)                   |                    | ✅                                  |
| [TriNet](docId\:qp1kXAatxY6In4ee1m125)                           |                    | ✅                                  |
| [Ultipro (UKG Pro)](docId\:f1hEF9a60r3byhipulADy)                |                    | ✅                                  |
| [Workday](docId:_C3n81w9x6AASc0uaOQWb)                           |                    | ✅                                  |
| [Zenefits](docId\:dHP8pWIgL-SQWGF8S8AVg)                         | ✅                  | ✅                                  |


[title] Creating your ChartHop org
[path] Implementing ChartHop/

Your first step to using ChartHop is to create your ChartHop organization using your existing employee data. You can bring in existing employee data as well as any open reqs from your hiring plan.&#x20;

You can do this in two ways:

- Use a ChartHop app to sync data from your payroll system or applicant tracking system to ChartHop. [Learn more.](https://docs.charthop.com/sync-payroll-system)
- Import a spreadsheet of your employee data. [Learn more.](https://docs.charthop.com/importing-spreadsheet-data)



:::hint{type="info"}
ChartHop Basic customers have limited access to ChartHop integrations. If your payroll system isn't supported by ChartHop Basic, you can import your employee data from a spreadsheet. [Learn more.](https://docs.charthop.com/import-payroll-data-for-charthop-basic)
:::

:::hint{type="info"}
****[Roles](https://docs.charthop.com/user-roles-and-permissions): Owner | Technical owner 
:::





[title] Apps & Integrations
[path] Implementing ChartHop/

:::hint{type="info"}
[Packages](https://www.charthop.com/pricing/)**:&#x20;**<font color="#a9a9a9">Basic</font> <font color="#000000">|</font> <font color="#000000">**Headcount Planning** | </font><font color="#000000">**Compensation Reviews** | </font><font color="#000000">**Performance** | </font><font color="#000000">**Engagement** </font>
:::

:::hint{type="info"}
﻿﻿[Roles](https://docs.charthop.com/user-roles-and-permissions): Technical owner | Owner&#x20;
:::

ChartHop apps let you connect ChartHop to your existing systems so that your data can flow between them. This helps you obtain a full picture of your people data and dynamically visualize your organization in one place. 

To access ChartHop apps:&#x20;

1. From the left sidebar, select **Apps & Bundles**.
2. From the sub-menu, select **Apps,&#x20;**&#x69;f not already pre-selected.

The following types of ChartHop apps are available:

- Payroll system apps
- Applicant tracking system (ATS) apps
- Equity management system apps
- Financial planning and analysis (FP\&A) apps
- Single sign-on (SSO) apps
- Slack integration app

:::hint{type="info"}
You can perform custom mapping to ensure your data shows up in the right place. For more information, reach out to ChartHop Support.
:::

### Payroll system apps

You can set up your organization in ChartHop through our payroll system apps. After you connect ChartHop to your payroll system or HRIS, changes you make in your payroll system to employee data, such as addresses, job titles, and more, are automatically reflected in ChartHop.

You can use payroll system apps to import employee data such as demographics, contact info, titles, reporting structures, compensation, group membership (departments, teams, locations), and even information like new hires and departures. ChartHop uses all this information to build your org chart and maintain employee data.

ChartHop treats your payroll system as the source of truth for all employee data - if you change anything in ChartHop, it is overwritten during the next data retrieval. [Learn more.](https://docs.charthop.com/payroll-system-apps)

### Applicant tracking system apps

ATS apps let you integrate your hiring plan so you can perform headcount planning within ChartHop and put those plans into practice within your ATS.

Depending on what works best for you and your organization, you can configure how and in which direction your data flows between your ATS and ChartHop.&#x20;

For example, you can set up ChartHop as the source of truth and database of record. This lets you leverage ChartHop to enter and maintain hiring data so that you can view open roles within the context of your org chart and perform headcount planning and create hiring scenarios. Any information that is changed or updated within ChartHop is sent out to the ATS using event-based syncs so that your ATS is updated immediately.

Or you can select to have your ATS be the source of truth and data is brought over from your ATS into ChartHop in cases where you’d prefer your recruiters stay within your ATS.  [Learn more.](https://docs.charthop.com/applicant-tracking-system-apps)

### Equity management system apps

Equity management system apps let you bring equity information into ChartHop so that you can have a complete picture of compensation information available when you need it. 

Bringing equity data into ChartHop lets you keep track of employee stock grants when evaluating total compensation during compensation planning and reviews in ChartHop. [Learn more.](https://docs.charthop.com/equity-sync-apps)

### Financial planning and analysis (FP\&A) apps

These apps help you make your ChartHop data available in FP\&A systems for further analysis and forecasting.  [Learn more.](https://docs.charthop.com/financial-planning-and-analysis-apps)

### Identity apps

Single sign-on apps allow you to leverage your ChartHop employee data for creating SSO profiles or workspaces. [Learn more.](https://docs.charthop.com/identity-apps)

### Slack integration app

Our Slack integration app allows you to personalize your employee experience within ChartHop. 

You have the ability to import employee photos, contact info, and time zone information from Slack into ChartHop as well as DM slack users from their employee profile in ChartHop. These apps help improve communication and make it easier to connect within your organization. [Learn more.](https://docs.charthop.com/slack)


[title] Synced data from BambooHR
[path] Implementing ChartHop/Apps & Integrations/Payroll systems/Installing payroll apps/Untitled/

The table below lists the default data set that is synced from BambooHR to ChartHop.

ChartHop customers can work with ChartHop implementation services to customize what is synced.

:::hint{type="info"}
You must include the country code as a part of any international number for it to be recognized as such within ChartHop. When you are syncing phone numbers from an external system, such as a payroll system or ATS, be sure the country code is included in the phone number that is listed in the external system. This also applies when updating data through a spreadsheet.
:::

## Fields list

| **ChartHop field label**                 | **ChartHop field code**     | **BambooHR field code**                                                               |
| ---------------------------------------- | --------------------------- | ------------------------------------------------------------------------------------- |
| Base                                     | base                        | compensation.rate.value, compensation.type, compensation.paidPer, compensation.payPer |
| Birth Date                               | birthdate                   | customReport.dateOfBirth                                                              |
| City - Home Address                      | address.city                | customReport.city                                                                     |
| Country - Home Address                   | address.country             | customReport.country                                                                  |
| Currency                                 | currency                    | compensation.rate.currency                                                            |
| Date                                     | date                        | employmentStatus.date, jobInfo.date, compensation.startDate, timeOff.start            |
| Depart                                   | depart                      | employmentStatus.terminationTypeId                                                    |
| Department                               | department                  | jobInfo.department                                                                    |
| Employment                               | employment                  | employmentStatus.employmentStatus                                                     |
| Ethnicity                                | ethnicity                   | customReport.ethnicity                                                                |
| First Name                               | name.first                  | customReport.firstName                                                                |
| Gender                                   | gender                      | customReport.gender                                                                   |
| Home Email                               | contact.homeemail           | customReport.homeEmail                                                                |
| Home Phone                               | contact.homephone           | customReport.homePhone                                                                |
| Hourly                                   | hourly                      | compensation.rate.value, compensation.type, compensation.paidPer, compensation.payPer |
| Last Name                                | name.last                   | customReport.lastName                                                                 |
| Location                                 | location                    | jobInfo.location                                                                      |
| Manager                                  | manager                     | customReport.supervisorEId, jobInfo.reportsTo                                         |
| Middle Name                              | name.middle                 | customReport.middleName                                                               |
| Mobile                                   | contact.mobilephone         | customReport.mobilePhone                                                              |
| Preferred First Name                     | name.pref                   | customReport.preferredName                                                            |
| Promotion                                | promotion                   | compensation.reason                                                                   |
| State - Home Address                     | address.state               | customReport.stateCode, customReport.state                                            |
| Street 1 - Home Address                  | address.street1             | customReport.address1                                                                 |
| Street 2 - Home Address                  | address.street2             | customReport.address2                                                                 |
| Title                                    | title                       | customReport.jobTitle, jobInfo.jobTitle                                               |
| Work Email                               | contact.workemail           | customReport.workEmail                                                                |
| Work Phone                               | contact.workphone           | customReport.workPhone                                                                |
| Zip/Postal - Home Address                | address.postal              | customReport.zipcode                                                                  |
| *Used to store compensation information* | type                        | employmentStatus.employmentStatus                                                     |
| *Used to store profile photos*           | imageurl                    | customReport.id, customReport.isPhotoUploaded                                         |
| *Used to store time off information*     | timeoff.approval            | timeOff.status.status                                                                 |
| *Used to store time off information*     | timeoff.days, timeoff.hours | timeOff.amount.unit, timeOff.amount.amount                                            |
| *Used to store time off information*     | timeoff.enddate             | timeOff.end                                                                           |
| *Used to store time off information*     | timeoff.id                  | timeOff.id                                                                            |
| *Used to store time off information*     | timeoff.note                | timeOff.notes.employee                                                                |
| *Used to store time off information*     | timeoff.startdate           | timeOff.start                                                                         |
| *Used to store time off information*     | timeoff.type                | timeOff.type.name                                                                     |

## Hourly compensation rate calculations

When calculating hourly compensation for Bamboo, ChartHop uses the following fields:

| Field                   | Detail                                                 |
| ----------------------- | ------------------------------------------------------ |
| compensation.rate.value | The amount paid.                                       |
| Compensation.type       | The compensation type. Can either be hourly or salary. |
| compensation.paidPer    | Where paidPer can be hourly, monthly, or yearly.       |
| compensation.payPer     | Where payPer can be hourly, monthly, or yearly.        |

The value of `compensation.rate.value` is calculated depending on the `Compensation.type`, and whether `compensation.paidPer` or `compensation.payPer` are calcuated hourly, monthly, or yearly.

### Hourly calculation

In the case where the following fields are set to hourly:

- `compensation.paidPer`
- `compensation.payPer`

Hourly compensation is defined as `compensation.rate.value`  where `compensation.rate.value` is the hourly rate.

### Monthly calculation

In the case where the following fields are set to monthly:

- `compensation.paidPer`
- `compensation.payPer`

Hourly compensation is defined as `compensation.rate.value * 12 / 2080`, meaning that the value provided to in  `compensation.rate.value` is the monthly pay for an employee and that employee is assumed to work 52 weeks a year at 40 hours a week.

### Yearly salary calculation

In the case where the `Compensation.type` is salary and following are yearly:

- `compensation.paidPer`
- `compensation.payPer`

Salary is defined as `compensation.rate.value`where `compensation.rate.value` is the yearly salary.



[title] Synced data from Gusto
[path] Implementing ChartHop/Apps & Integrations/Payroll systems/Installing payroll apps/Untitled/

The table below lists the default data set that is synced from Gusto to ChartHop.&#x20;

ChartHop customers can work with ChartHop implementation services to customize what is synced.

:::hint{type="info"}
You must include the country code as a part of any international number for it to be recognized as such within ChartHop. When you are syncing phone numbers from an external system, such as a payroll system or ATS, be sure the country code is included in the phone number that is listed in the external system. This also applies when updating data through a spreadsheet.
:::

| **ChartHop field label**  | **ChartHop field code** | **Gusto field code**                                                                        |
| ------------------------- | ----------------------- | ------------------------------------------------------------------------------------------- |
| Base                      | base                    | employee.jobs\[0].compensations\[0].rate, employee.jobs\[0].compensations\[0].payment\_unit |
| Birth Date                | birthdate               | employee.date\_of\_birth                                                                    |
| City - Home Address       | address.city            | employee.home\_address.city                                                                 |
| Country - Home Address    | address.country         | employee.home\_address.country                                                              |
| Depart                    | depart                  | employee.terminationTypeId                                                                  |
| Department                | department              | employee.department                                                                         |
| End Date                  | type, enddate           | employee.terminations                                                                       |
| First Name                | name.first              | employee.first\_name                                                                        |
| Home Email                | contact.homeemail       | employee.email, employee.work\_email                                                        |
| Hourly                    | hourly                  | employee.jobs\[0].compensations\[0].rate, employee.jobs\[0].compensations\[0].payment\_unit |
| Last Name                 | name.last               | employee.last\_name                                                                         |
| Location                  | location                | employee.jobs\[0].location.city                                                             |
| Manager                   | manager                 | employee.manager\_id                                                                        |
| Middle Name               | name.middle             | employee.middle\_initial                                                                    |
| Mobile                    | contact.mobilephone     | employee.mobilePhone                                                                        |
| Preferred First Name      | name.pref               | employee.preferred\_first\_name                                                             |
| Start Date                | startdate               | employee.jobs\[0].hire\_date                                                                |
| State - Home Address      | address.state           | employee.home\_address.state                                                                |
| Street 1 - Home Address   | address.street1         | employee.home\_address.street\_1                                                            |
| Street 2 - Home Address   | address.street2         | employee.home\_address.street\_2                                                            |
| Title                     | title                   | employee.jobs\[0].title                                                                     |
| Work Email                | contact.workemail       | employee.work\_email, employee.email                                                        |
| Work Phone                | contact.workphone       | employee.workPhone                                                                          |
| Zip/Postal - Home Address | address.postal          | employee.home\_address.zip                                                                  |

### Employment status

The table below displays how ChartHop's and Gusto's employment statuses map to one another:

| Gusto Status                     | Direction | ChartHop status |
| -------------------------------- | --------- | --------------- |
| full\_time                       | ➡️        | FULL            |
| part\_time\_under\_twenty\_hours | ➡️        | PART            |
| part\_time\_twenty\_plus\_hours  | ➡️        | PART            |
| variable                         | ➡️        | PART            |
| seasonal                         | ➡️        | TEMP            |


[title] Synced data from Paylocity
[path] Implementing ChartHop/Apps & Integrations/Payroll systems/Installing payroll apps/Paylocity/

The following table lists the default data set that is synced from Paylocity to ChartHop.

ChartHop customers can work with ChartHop implementation services to customize what is synced.

:::hint{type="info"}
You must include the country code as a part of any international number for it to be recognized as such within ChartHop. When you are syncing phone numbers from an external system, such as a payroll system or ATS, be sure the country code is included in the phone number that is listed in the external system. This also applies when updating data through a spreadsheet.
:::

| **ChartHop field label**                 | **ChartHop field code** | **Paylocity field code**                                                                                                                                                                                                                         |
| ---------------------------------------- | ----------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| Base                                     | base                    | profiles.primaryPayRate.payType, profiles.primaryPayRate.annualSalary, profiles.primaryPayRate.baseRate, profiles.currency, profiles.primaryPayRate.payRateNote, profiles.primaryPayRate.effectiveDate, profiles.\_\_enablePayRateNoteAsCurrency |
| Birth Date                               | birthdate               | profiles.birthDate                                                                                                                                                                                                                               |
| City - Home Address                      | address.city            | profiles.homeAddress.city                                                                                                                                                                                                                        |
| Country - Home Address                   | address.country         | profiles.homeAddress.country                                                                                                                                                                                                                     |
| Currency                                 | currency                | profiles.primaryPayRate.payType, profiles.primaryPayRate.annualSalary, profiles.primaryPayRate.baseRate, profiles.currency, profiles.primaryPayRate.payRateNote, profiles.primaryPayRate.effectiveDate, profiles.\_\_enablePayRateNoteAsCurrency |
| Depart                                   | depart                  | profiles.status.employeeStatus, profiles.status.changeReason                                                                                                                                                                                     |
| Department                               | contact.workphone       | profiles.workAddress.phone                                                                                                                                                                                                                       |
| Department                               | department              | profiles.departmentPosition, profiles.\_\_enableCompanyPrefix, profiles.\_\_deptCostCenter, profiles.companyId                                                                                                                                   |
| Employment                               | employment              | profiles.departmentPosition.employeeType                                                                                                                                                                                                         |
| End Date                                 | enddate                 | profiles.status.effectiveDate, profiles.status.employeeStatus                                                                                                                                                                                    |
| Ethnicity                                | ethnicity               | profiles.ethnicity                                                                                                                                                                                                                               |
| First Name                               | name.first              | profiles.firstName                                                                                                                                                                                                                               |
| Gender                                   | gender                  | profiles.gender                                                                                                                                                                                                                                  |
| Home Email                               | contact.homeemail       | profiles.homeAddress.emailAddress                                                                                                                                                                                                                |
| Home Phone                               | contact.homephone       | profiles.homeAddress.phone                                                                                                                                                                                                                       |
| Hourly                                   | hourly                  | profiles.primaryPayRate.payType, profiles.primaryPayRate.annualSalary, profiles.primaryPayRate.baseRate, profiles.currency, profiles.primaryPayRate.payRateNote, profiles.primaryPayRate.effectiveDate, profiles.\_\_enablePayRateNoteAsCurrency |
| Last Name                                | name.last               | profiles.lastName                                                                                                                                                                                                                                |
| Location                                 | location                | profiles.workAddress.location, profiles.\_\_enableEmptyRemote                                                                                                                                                                                    |
| Manager                                  | manager                 | profiles.departmentPosition.supervisorEmployeeId, profiles.departmentPosition.supervisorCompanyNumber, profiles.companyId                                                                                                                        |
| Middle Name                              | name.middle             | profiles.middleName                                                                                                                                                                                                                              |
| Mobile                                   | contact.mobilephone     | profiles.homeAddress.mobilePhone                                                                                                                                                                                                                 |
| Preferred First Name                     | name.pref               | profiles.preferredName                                                                                                                                                                                                                           |
| Start Date                               | startdate               | profiles.status.hireDate, profiles.status.reHireDate, profiles.\_\_isTransfer                                                                                                                                                                    |
| State - Home Address                     | address.state           | profiles.homeAddress.state                                                                                                                                                                                                                       |
| Street 1 - Home Address                  | address.street1         | profiles.homeAddress.address1                                                                                                                                                                                                                    |
| Street 2 - Home Address                  | address.street2         | profiles.homeAddress.address2                                                                                                                                                                                                                    |
| Team                                     | team                    | profiles.departmentPosition, profiles.\_\_enableCompanyPrefix, profiles.\_\_deptCostCenter, profiles.companyId, profiles.\_\_customTeamList, profiles.customDropDownFields, profiles.\_\_teamCostCenter                                          |
| Title                                    | title                   | profiles.departmentPosition.jobTitle                                                                                                                                                                                                             |
| Work Email                               | contact.workemail       | profiles.workAddress.emailAddress                                                                                                                                                                                                                |
| Zip/Postal - Home Address                | address.postal          | profiles.homeAddress.postalCode                                                                                                                                                                                                                  |
| *Used to store compensation information* | compdate                | profiles.primaryPayRate.payType, profiles.primaryPayRate.annualSalary, profiles.primaryPayRate.baseRate, profiles.currency, profiles.primaryPayRate.payRateNote, profiles.primaryPayRate.effectiveDate, profiles.\_\_enablePayRateNoteAsCurrency |
| *Used to store profile photos*           | imageURL                | profiles.profile\_photo                                                                                                                                                                                                                          |

****


[title] Synced data from TriNet
[path] Implementing ChartHop/Apps & Integrations/Payroll systems/Installing payroll apps/TriNet/

The table below lists the default data set that is synced from TriNet to ChartHop.&#x20;

ChartHop customers can work with ChartHop implementation services to customize what is synced.

:::hint{type="info"}
You must include the country code as a part of any international number for it to be recognized as such within ChartHop. When you are syncing phone numbers from an external system, such as a payroll system or ATS, be sure the country code is included in the phone number that is listed in the external system. This also applies when updating data through a spreadsheet.
:::

| **ChartHop field label**             | **ChartHop field code** | **Trinet field code**                                       |
| ------------------------------------ | ----------------------- | ----------------------------------------------------------- |
| Base                                 | base                    | employees.payInfo.compFrequency, employees.payInfo.compRate |
| Birth Date                           | birthdate               | employees.bioInfo.birthdate                                 |
| City - Home Address                  | address.city            | employees.homeAddress.city                                  |
| Country - Home Address               | address.country         | employees.homeAddress.country                               |
| Date                                 | date                    | employees.employmentInfo.serviceDate                        |
| Department                           | department              | employees.employmentInfo.department.deptName                |
| Employment                           | employment              | employees.employmentInfo.employeeType                       |
| End Date                             | enddate                 | employees.employmentInfo.terminationDate                    |
| Ethnicity                            | ethnicity               | employees.bioInfo.ethnicity                                 |
| First Name                           | name.first              | employees.names\[?(@.nameType == 'PRI')].firstName.first()  |
| Gender                               | gender                  | employees.bioInfo.gender                                    |
| Hourly                               | hourly                  | employees.payInfo.compFrequency, employees.payInfo.compRate |
| Last Name                            | name.last               | employees.names\[?(@.nameType == 'PRI')].lastName.first()   |
| Location                             | location                | employees.employmentInfo.location.locationName              |
| Manager                              | manager                 | employees.employmentInfo.supervisor.supervisorId            |
| Middle Name                          | name.middle             | employees.names\[?(@.nameType == 'PRI')].middleName.first() |
| Preferred First Name                 | name.pref               | employees.names\[?(@.nameType == 'PRF')].firstName.first()  |
| Start Date                           | startdate               | employees.employmentInfo.serviceDate                        |
| State - Home Address                 | address.state           | employees.homeAddress.state                                 |
| Street 1 - Home Address              | address.street1         | employees.homeAddress.address1                              |
| Street 2 - Home Address              | address.street2         | employees.homeAddress.address2                              |
| Title                                | title                   | employees.employmentInfo.businessTitle                      |
| Work Email                           | contact.workemail       | employees.employmentInfo.workEmail                          |
| Work Phone                           | contact.workphone       | employees.employmentInfo.workPhone                          |
| Zip/Postal - Home Address            | address.postal          | employees.homeAddress.postalCode                            |
| *Used to store time off information* | timeoff.approval        | timeoffCalendar.status                                      |
| *Used to store time off information* | timeoff.days            | timeoffCalendar.date                                        |
| *Used to store time off information* | timeoff.enddate         | timeoffCalendar.date                                        |
| *Used to store time off information* | timeoff.hours           | timeoffCalendar.hours                                       |
| *Used to store time off information* | timeoff.id              | timeoffCalendar.employeeId, timeoffCalendar.date            |
| *Used to store time off information* | timeoff.startdate       | timeoffCalendar.date                                        |
| *Used to store time off information* | timeoff.type            | timeoffCalendar.type                                        |


[title] Signing a document
[path] ChartHop for Employees/Complete tasks and forms/

If you need to sign a document in ChartHop, your will receive a notification via email or Slack and you will see a task in your ChartHop dashboard. Click the **Review and Sign&#x20;**&#x62;utton to be taken to the signing page.&#x20;

::Image[]{src="https://archbee-image-uploads.s3.amazonaws.com/zxjhb7-DqnuzAP-lru1l3-ljkbTyAxq0PGCZODVrXwv-20250226-161905.png" size="88" width="3020" height="1882" position="center" showCaption="false"}

# Signing a document

When you receive your document, please review it carefully and understand what you are signing in full, as it is a legally binding e-signature.&#x20;

To sign a document:

1. Click the **Review and Sign&#x20;**&#x62;utton to view the document.
2. Review the document.
3. Type your name into the box labeled **Sign here.&#x20;**
   1. You can sign with any case sensitive combination of your `First Name` or `Preferred First Name` and  `Last Name` or `Preferred Last Name`.&#x20;
4. Click **Sign document.&#x20;**
5. You have now signed the document.&#x20;

You can now:

- View your signature at the bottom of the document.&#x20;
- Check your email for a confirmation and signed copy. &#x20;
- Download the signed document via the download button in the top right corner of the page.&#x20;



### Signing a document with QES

If you company is using [Qualified Electronic Signatures (QES)](docId\:joXqrftT0VsO2uZU1Vtxx), for your signature, then you will be redirected to a page hosted by BoldSign to sign the document. Once you have signed you will be redirected back to ChartHop.&#x20;



# Declining to sign

If there is something incorrect about the document, like a misspelling of a name or incorrect details, you have the option to **Decline to sign** the document.&#x20;

Declining to sign will cancel the signature request and notify the person who requested the signature from you with the reason that you provide.&#x20;

To decline to sign a document:

1. Click the **Review and Sign&#x20;**&#x62;utton to view the document.
2. Review the document.
3. Click the 🔽 next to **Sign Document**, then select **Decline to sign.**
4. In the confirmation dialog, add a reason for declining to sign the document then select **Decline to sign**.&#x20;
5. The person who requested your signature will then be notified.&#x20;

::Image[]{src="https://archbee-image-uploads.s3.amazonaws.com/zxjhb7-DqnuzAP-lru1l3-DVVBmB8IDAEwMn3NYVedv-20250226-163802.png" size="80" width="1620" height="1352" position="center" showCaption="false"}

# Viewing your signed document

There are several ways that you can view your signed document:&#x20;

1. **Email —** A copy is emailed to you immediately after you sign a document.&#x20;
   If you need to search your inbox, use the following details:
   1. Subject: **Signature Completed: \{Document Name}**
   2. Sender: **ChartHop** `<no-reply@charthop.com>`
2. **ChartHop Profile —** If you signed a document about yourself, you can find it under **My Profile > Files** tab of your ChartHop profile. If you signed a document about someone else, you can navigate to the Files tab on their profile to see the document.&#x20;

&#x20;



To view more information about signatures, you can read: [About ChartHop Signatures](docId\:gg7ahONgesh1glgoPqj5v)&#x20;


[title] Import payroll data for ChartHop Basic
[path] Implementing ChartHop/Creating your ChartHop org/

If you have ChartHop Basic and need to import payroll data from a system that is not supported by a ChartHop Basic app, you can export your payroll to a spreadsheet and then import the spreadsheet to ChartHop. Ensure that the data in your file conforms to ChartHop's [formatting requirements](https://docs.charthop.com/importing-spreadsheet-data#nx3C6).&#x20;

## Exporting data from a payroll system

When you export payroll data from your system, the spreadsheet file should:&#x20;

- Be in CSV or XLSX format.
- Be UTF-8 encoded.
- Have fewer than 1000 records.

At a minimum, the file should contain the following columns:

- **Work email** (As the first column)
- **First name**
- **Last name**
- **Job title**
- **Manager**
- **Start date**

[View and download an example spreadsheet.](https://docs.google.com/spreadsheets/d/1i-nl6PowdpD9ocTbCjp5MGkiS6gzW08d_NdrGl3Qt3Q/edit#gid=818787148)

:::hint{type="warning"}
Typically, we recommend you use work email addresses to identify employees when you import. However, you can use **System ID** as your first column and then list payroll system identifiers such as `ADP ID`, `Bamboo ID`, or `Job ID` in that column. If you do so, ensure that you provide a corresponding identifier for the person's manager (for example, if the first column is `ADP ID`, provide the manager's `ADP ID` in the **Manager** column).
:::

## Import your data to ChartHop

To import your data to ChartHop, complete the following steps:

1. On ChartHop's main screen, under **Upload a spreadsheet**, select **Excel** or **CSV**.&#x20;
   1. OR if you have already implemented some data
      1. On the left sidebar, select **Admin**.
      2. From the sub-menu, select **Import Spreadsheet Data**.
2. Under **Upload your spreadsheet**, drag and drop the file to import.
3. Select **Next step**.&#x20;
   ChartHop attempts to match each column with a ChartHop field. For example, a column titled `fname` is identified as `first name`.&#x20;
4. If necessary, under **Column in your spreadsheet**, match any unmatched columns (highlighted in red) with the appropriate ChartHop field. Note that selecting **None of these** for a required field will generate an error.&#x20;
5. Under **Date format**, select the date format for dates in the file.&#x20;
6. Select **Looks good!** to proceed to the next section.&#x20;
7. Under **Add required info and tidy up your data**, fix any errors (highlighted in red), such as improperly formatted dates or email addresses. See the following section for a reference of common errors. &#x20;
8. Select **Looks good!** to proceed to the next section.&#x20;
9. Under **Help us understand your org structure**, select the head(s) of your organization.&#x20;
10. If necessary, under **Identify managers**, select any missing managers (highlighted in red).&#x20;
11. Click **Looks good!** to start creating your ChartHop organization.&#x20;
    A progress bar is displayed, but you can close the window without interrupting org creation. You receive an email when your ChartHop organization is created.&#x20;

![Org Chart](https://api.archbee.com/api/optimize/CXAjUAezd9VEEVQBIYmdw/SxMD30yYMNs7oZVNJ-HXW_org-chart.jpg)

### Importing Images

We recommend connecting the [Slack](docId\:QSduVgxe4FMcnAHbrlXen) app or your payroll/HRIS to import images, but if needed, you may upload them via a spreadsheet:

You can add profile pictures for your employees by uploading image links to the picture you want to associate with the employee. Add these links to the **Image** column. ChartHop will resize images and add them to individual's profiles. When uploading images, note the following:&#x20;

- You should host images on a publicly available server with no login required.
- You can upload images with the .jpeg, .jpg, .png, and .gif file types.&#x20;

### Common column errors

The following table contains column errors you may encounter while setting up your ChartHop organization:

| **Error**                      | **How to resolve...**                                                                                     |
| ------------------------------ | --------------------------------------------------------------------------------------------------------- |
| Invalid email format           | Use a valid email format for **Work email** and **Manager**, such as `steven.jones@charthop.com`.         |
| Invalid date format            | Use a valid date format for **Start date** that matches the one you selected, such as `m/d/yyyy`.         |
| Email addresses are not unique | Ensure that each person has a unique email address.                                                       |
| Missing required field         | Include **Work email**, **First name**, **Last name**, **Job title**, and **Start date** for each person. |

:::hint{type="info"}
Basic | HRIS | Engagement | Goals | Performance | Compensation Reviews | Headcount Planning
:::

:::hint{type="info"}
[Roles](https://docs.charthop.com/user-roles-and-permissions): Owner
:::

##

[title] Installing the TriNet app
[path] Implementing ChartHop/Apps & Integrations/Payroll systems/Installing payroll apps/TriNet/

This section covers setting up the TriNet integration app, which allows you to sync your employee roster to ChartHop. 

## Review your payroll system data

Your ChartHop payroll app syncs your employee data from your payroll system and builds your org chart in ChartHop. Once your Org Chart is created, you can start using ChartHop.

ChartHop recommends reviewing the data in your payroll system to ensure it is what you expect before you sync it to ChartHop. For example, if an employee has multiple system IDs in your payroll system, that employee’s data won’t sync properly. You should also be sure that your payroll system reflects an accurate view of your organization, including reporting structures, employee locations, and compensation. 

## Obtain API Credentials for TriNet

For ChartHop to access your organization's TriNet payroll data, you need to obtain an API Client ID, Client Secret, and Company ID as an Integration Administrator. This information allows ChartHop to connect to TriNet to receive your employee data.

1. Sign in to TriNet
2. Navigate to the TriNet Integration Center
3. Select **Get Started** from the **TriNet API** section.
4. Select the applicable integration name from the **Select an Integration** drop-down menu and review the level of access being granted to the API Key before selecting **Accept**.
5. Copy the **Company ID**, **Client ID**, and **Client Secret**.
   - Be sure to copy these IDs in a safe place before navigating off this page as it will not be accessible again.
6. Select **Ok** when you've copied your API IDs and secret.

Note that you can revoke access at anytime by selecting **Disconnect** from within **My Connected Apps**. You can also generate a new API key and secret by disconnecting and repeating steps 1-5.

## Install the TriNet app

After you have your TriNet API credentials, you can install the TriNet integration app in ChartHop.

1. From the left sidebar, select **Apps & Bundles**.
2. From the sub-menu, select **Apps,&#x20;**&#x69;f not already pre-selected.
3. Select the **Availible Apps** tab.
4. Scroll to your payroll app and select **Install&#x20;**&#x6F;n the far right of the respective app's row.

### Connect the TriNet app

You'll be prompted to configure your payroll app when you select **Install**.

1. In the **Enter your API credentials** step, enter the following information that you received from your TriNet representative in the following order:
   - Client ID
   - Client Secret
   - Company ID
2. Select **Next step**.

### Configure data sync settings for TriNet

Data sync settings control how and what data is synced to ChartHop from your payroll system. For example, you can choose whether or not to create a backfill position in ChartHop when you have a departure in your payroll system. Other advanced settings allow you to exclude certain employees.

- Select one of the two options:
  - **Automatically create backfills** - This option creates a backfill position in ChartHop (open job) when an employee is marked as departed in your payroll system.
  - **Sync departures only** - This option removes the departed employee from ChartHop. The employee's job history remains in ChartHop.

### Configure advanced settings

Advanced settings allow you to better control how your payroll data syncs to ChartHop.

ChartHop recommends accepting the default values for these settings. Please get in touch with ChartHop Support or your Customer Success Manager for assistance if needed.

1. Expand the **Advanced settings** section. 
2. Use the following table to guide you through advanced settings decisions. 

| **Setting**                               | **Description&#xA0;**                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               |
| ----------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Missing location information <br /><br /> | Select one of the two options for what should happen if location information is set for an open role:<br />* **Set Remote as the default location in ChartHop** - When selected, any open role that does not have a location set will be set to have a Remote location in ChartHop.
* **Leave location blank in ChartHop&#x20;**- When selected, any open role that does not have a location set in your payroll app will not have a location set in ChartHop.                                                                                                                                                      |
| Advanced sync options                     | Select the data changes you want to include in your sync. You can include some or all of the following employee data: <br />* Job titles 
* Managers 
* Groups 
* Compensation 
* Hire dates                                                                                                                                                                                                                                                                                                                                                                                                                        |
| Overwrite person fields <br /><br />      | ChartHop recommends using this setting to avoid needing to update both ChartHop and your payroll system when a change is made to any field value that is synced from your payroll system.<br /><br />When you choose this option, your payroll system remains the source of truth for the following fields in ChartHop: birthdate, gender, home address, and so on. Any edits you or an employee make to this data in ChartHop are overwritten during synchronization. This can pose an issue when someone uses ChartHop to update employee fields in ChartHop, without requesting an update in the source system.  |
| Historical data                           | Choose whether or not you want to sync historical data. You can turn this off if you want to exclude any historical changes before the date of your initial sync.                                                                                                                                                                                                                                                                                                                                                                                                                                                   |
| Exclude IDs                               | To exclude specific individuals from the sync, enter their unique payroll system IDs here, separated by commas.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     |

### Run an initial one-time sync of your payroll data

When you first configure your payroll app, you should run a one-time sync to verify that the sync is operating as you expect it to and that your data is what you expect.

To run a one-time sync:

1. In the setup wizard, select the **Run one-time sync** option.
2. Select **Finish setup**.

## Verify your data in ChartHop

After running your first sync, you can use the Data Sheet and Org Chart pages to spot-check your data. You can use the Sync History page to verify when the sync was run and if it encountered any issues. 

You should spot-check your ChartHop org for the following:

- Correct management reporting lines
- Compensation data
- Employee information on profiles (names, addresses, and so on)
- Job titles
- Departments
- Locations

:::hint{type="info"}
Remember that most issues with your synced data originate in your payroll system. ChartHop allows you to visualize your employee data to make finding these discrepancies easier. Still, you’ll need to fix any data discrepancies in your payroll system and rerun the sync to view the fixes in ChartHop.
:::

## Configure your payroll app sync to run daily

After you’ve synced your data for the first time and verified your Org Chart, you should configure a daily sync. The value of syncing your payroll data to ChartHop is that it ensures that your employee data is always up to date. 

1. From the left sidebar, select **Apps & Bundles**.
2. From the sub-menu, select **Apps,&#x20;**&#x69;f not already pre-selected.
3. Select the **Installed Apps** tab.
4. Scroll to your payroll app and select the gear (settings) icon on the far right of the row to view app settings.
5. Within the **App status & sync** settings section, select the **Edit** (pencil) icon.
6. Toggle the auto-sync option to on.
7. Select **Save**.


[title] Coming soon- Greenhouse-V3
[path] Implementing ChartHop/Apps & Integrations/Applicant tracking systems/Greenhouse/

# ChartHop \<> Greenhouse

ChartHop is a people intelligence platform. Your headcount plan, org chart, and employee data all live together in one place, so HR, Finance, and leadership work from the same numbers. Teams use ChartHop to model next fiscal year, plan a reorganization, and approve roles before recruiting starts, then keep employee data current across the rest of their HR stack.

**ChartHop's integration with Greenhouse Recruiting** allows users to keep open roles and new hires in sync between the two systems. You choose which system owns open jobs: ChartHop can push approved headcount to Greenhouse as requisitions and openings, or Greenhouse can send its open jobs into ChartHop. In both directions, ChartHop pulls recruiting metrics onto the role, and when a candidate is marked as hired in Greenhouse, ChartHop creates the new hire and updates the org chart. Your recruiting and HR teams stop keeping two lists of open roles, and nobody retypes a new hire's details.

**In this article**, you can find information on how to use OAuth to update your Greenhouse integration, how to install a new Greenhouse app in chartHop, and how to choose the workflow you want.

## Before you start

| **Requirement**         | **Details**                                                                                                                                                                                                                                          |
| ----------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Greenhouse permissions  | A user who can manage ALL organization's API credentials. This is a developer permission rather than a role, so it can be granted to a Basic user and above. To authorize with a service account, the user completing the flow must be a Site Admin. |
| Greenhouse product tier | Harvest v3 partner integrations are available for new subscription tiers: Core, Plus, and Pro. Check with your Greenhouse account team if you are on an earlier tier.                                                                                |
| ChartHop permissions    | A ChartHop role with permission to install and configure apps.                                                                                                                                                                                       |
| ChartHop plan           | The Greenhouse integration is included with ChartHop plans that support applicant tracking integrations. Your ChartHop implementation specialist confirms this during setup.                                                                         |

**ChartHop recommends setting this integration up with help from your ChartHop implementation specialist.** Job data can flow in from Greenhouse, or a bidirectional sync with webhook, and the direction you pick determines which system owns your open roles. Talk through that choice before you connect.

## Configure the ChartHop integration

Setting up the integration takes four steps:

1. Install the ChartHop Greenhouse app in ChartHop.
2. Authorize the connection to Greenhouse using OAuth.
3. Choose your job data direction and sync settings.
4. Turn on the new hire webhook in Greenhouse.

### Step 1: Install the Greenhouse app in ChartHop

1. In ChartHop, select **Apps & Bundles** from the left sidebar.
2. Select **Apps** from the sub-menu.
3. Select the **Available apps** tab.
4. Find the **Greenhouse** app and select **Install**.
5. Select **Install** again on the app install page to confirm.



![](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/xNAagWxuOMj3nL5FWsch5_upload.png)

![]()

**Step 2: Authorize the connection to Greenhouse**

ChartHop connects to Greenhouse with Harvest v3 and OAuth 2.0. You will not enter an API key or a subdomain.

1. On the ChartHop Greenhouse app page, open the **Settings** tab.
2. In the **Connection** section, select **Connect with Greenhouse**. ChartHop opens the Greenhouse authorization screen.
3. Review the permissions ChartHop requests, then log in to Greenhouse.
4. You must authorize via OAuth for this integration. Select **Authorize using a service account**, which is available to Site Admins. A service account keeps the connection alive when the person who set it up changes roles or leaves, and it labels integration activity in Greenhouse as the service account rather than a named user.
5. Complete the authorization. Greenhouse returns you to ChartHop, and the Connection section shows the connected account.

**Per-user authorization and reconnecting**

Each ChartHop user who works with the integration can authorize with their own Greenhouse account. ChartHop then acts with that person's Greenhouse permissions, and Greenhouse attributes their activity to them rather than to a shared connection. Use **Reconnect** in the Connection section to authorize, or to reauthorize after a password change, a permission change, or a revoked connection.

The organization-level connection is what runs scheduled syncs. Keep that one on a service account, and use per-user authorization for people taking action in the app.

**Permissions ChartHop requests**

ChartHop requests the Harvest v3 scopes below. Read scopes cover the data ChartHop pulls into the org chart and onto the role. Write scopes are used only when your job data direction is outbound, ChartHop to Greenhouse.

| **Area**                    | **Read**                                              | **Write**                                                                   |
| --------------------------- | ----------------------------------------------------- | --------------------------------------------------------------------------- |
| Jobs                        | List and read jobs                                    | Create and update jobs                                                      |
| Openings                    | List openings                                         | Create, update, and delete openings                                         |
| Departments and offices     | List departments and offices                          | None                                                                        |
| Hiring team                 | List job hiring managers and job owners               | Create and remove job hiring managers, job owners, and user job permissions |
| Users                       | List users and user roles                             | None                                                                        |
| Candidates and applications | List candidates, applications, and application stages | None                                                                        |
| Offers                      | List offers                                           | None                                                                        |
| Custom fields               | List custom fields                                    | None                                                                        |
| Webhooks                    | List webhooks                                         | Create and update webhooks                                                  |

### Step 3: Choose your job data direction and sync settings

On the ChartHop Greenhouse app settings page, scroll to **Basic settings** and pick one direction.

| **Direction**                              | **What it does**                                                                                                                                      |
| ------------------------------------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Outbound: ChartHop as source of truth**  | Active open jobs in ChartHop are pushed to Greenhouse as jobs and openings. Use this when headcount is approved in ChartHop before recruiting starts. |
| **Inbound: Greenhouse as source of truth** | Active jobs in Greenhouse are imported into ChartHop. Use this when recruiting opens roles first.                                                     |

New hire data always flows inbound, from Greenhouse to ChartHop, whichever direction you choose for jobs.

The settings below control sync timing and how ChartHop matches a role in one system to a role in the other.

![](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/g8Z1UA3KQbButZ26dMC4k_upload.png)

| **Setting**                      | **What it does**                                                                                                                                                                                                                                                                                             | **Availability** |
| -------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ---------------- |
| Run daily                        | Runs a sync each morning and pulls candidate metrics onto the role. The scheduled run time for your organization is shown on the app page. Recommended for most setups.                                                                                                                                      | Both directions  |
| Sync on change                   | Sends the job to Greenhouse as soon as any change to an active linked job is merged in ChartHop, or a job becomes active. No waiting for the next daily run.                                                                                                                                                 | Outbound only    |
| Reconciliation                   | Checks each day that Greenhouse matches your ChartHop data and corrects Greenhouse where it drifted. This catches a sync that did not run, and values that failed to write because a field was not set correctly. If an open job exists in ChartHop but not in Greenhouse, ChartHop creates the requisition. | Outbound only    |
| Default location if not provided | Assigns a fallback location, for example Remote, to records that sync without one.                                                                                                                                                                                                                           | Both directions  |
| Match by job codes first         | Matches a ChartHop job to a Greenhouse job when the ChartHop job code equals the Greenhouse requisition ID. If no match is found, ChartHop falls back to the Group job openings setting. Use this if your organization has standardized titles and job codes.                                                | Both directions  |
| Group job openings               | Sets the fallback match method: Title, Title and location, or None. With Title or Title and location, several ChartHop jobs can share one Greenhouse job, each as its own opening.                                                                                                                           | Both directions  |
| Title matching advanced settings | Ignores text after a hyphen or inside parentheses when matching on title. Most organizations need this, because an open job often carries an internal title and an external title, for example "Senior Engineer - Platform (Backfill)".                                                                      | Both directions  |
| If it matches to a closed job    | Chooses what happens on a match to a closed Greenhouse job: reopen the job and create a new opening, or create a new job and opening.                                                                                                                                                                        | Both directions  |
| Announced date                   | Sets when a person hired through the integration becomes visible to other employees in the ChartHop org chart. Use this to hold a hire private until the team is told.                                                                                                                                       | Inbound hires    |



![]()

### Step 4: Turn on the new hire webhook in Greenhouse

The new hire webhook is what updates your org chart the moment a candidate is hired. Set it up in Greenhouse using values ChartHop gives you.

1. In ChartHop, open the Greenhouse app settings page and copy the **secret key** under **New hire webhook**. Copy the endpoint URL shown alongside it.
2. In Greenhouse, follow *Enable a web hook* and create a web hook with the values in the table below.
3. Save the web hook.

| **Field**             | **Value**                                                           |
| --------------------- | ------------------------------------------------------------------- |
| Name this webhook     | ChartHop hire                                                       |
| When                  | Candidate has been hired                                            |
| Endpoint URL          | The endpoint URL shown on the ChartHop Greenhouse app settings page |
| Secret key            | The secret key copied from ChartHop in step 1                       |
| Error recipient email | support\@charthop.com                                               |
| Disabled              | No                                                                  |

### Fields ChartHop reads and writes

Two tabs on the ChartHop Greenhouse app page show your exact field list, so you never have to guess what moves:

![](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/lZf93P6DvncvnASOavVj1_upload.png)

●  **Inbound field mappers** lists everything that moves from Greenhouse to ChartHop.

●  **Outbound field mappers** lists everything ChartHop writes to Greenhouse.

Both tabs work the same way. ChartHop ships a set of default mappers, already enabled. Toggle off any default you do not want, for example to stop a Greenhouse value from overwriting a field you maintain in ChartHop. Add custom mappers for your own Greenhouse custom fields. Your ChartHop implementation specialist configures custom mapping with you; send requests to support\@charthop.com.



![]()

The table below lists the standard mapping. On an outbound setup, ChartHop writes the fields in the Greenhouse column. On an inbound setup, ChartHop reads them.

![](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/SI2gy5CFeiDuJuW-zZUts_upload.png)

| **ChartHop field**                                          | **Greenhouse field**                    | **Direction** |
| ----------------------------------------------------------- | --------------------------------------- | ------------- |
| Job title                                                   | Job name                                | Both          |
| Job code                                                    | Requisition ID                          | Both          |
| Department                                                  | Department                              | Both          |
| Location                                                    | Office                                  | Both          |
| Job (individual open seat)                                  | Opening, tracked by opening ID          | Both          |
| Recruit status                                              | Job and opening status                  | Both          |
| Date opened                                                 | Opened at                               | Both          |
| Hiring manager                                              | Job hiring managers                     | Both          |
| Recruiter or job owner                                      | Job owners                              | Both          |
| Employment type                                             | Employment type                         | Both          |
| Confidential job flag                                       | Confidential                            | Both          |
| Job closed or filled                                        | Opening closed, with a close reason     | Outbound      |
| Recruiting metrics: candidates, screens, interviews, offers | Applications and application stages     | Inbound       |
| New hire name and email                                     | Candidate on the hire webhook           | Inbound       |
| New hire phone and address                                  | Candidate on the hire webhook           | Inbound       |
| Start date                                                  | Offer start date on the hire webhook    | Inbound       |
| Compensation fields such as salary, bonus, and stock        | Offer custom fields on the hire webhook | Inbound       |

Custom fields are supported on both the Greenhouse job and the Greenhouse opening, and on offer fields delivered in the hire webhook. Because several ChartHop jobs can share one Greenhouse job when Group job openings is set to Title or Title and location, ChartHop writes per-role custom values to the opening rather than the job. Custom field mapping is configured by ChartHop's professional services team. Send mapping requests to your ChartHop implementation specialist or support\@charthop.com.

![](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/AZEhNGooC5JRjLCpMeonH_upload.png)

### Set up Greenhouse job templates

Greenhouse job templates control what a newly created requisition looks like: its stages, scorecards, and approvals. ChartHop lets you pick which template each role gets.

●  	Set a **default template** to use for every job ChartHop creates.

![](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/sk5kLhvGGE3v4tFZFrW1H_upload.png)

●  	Add as many additional templates as you need, each with a ChartHop filter. When a job meets the filter, ChartHop creates it in Greenhouse from that template. Use this to give engineering roles an engineering interview plan and sales roles a sales one, with no manual step in Greenhouse.



![]()

### Test operations before you map fields

The **API operations** tab lists everything the integration can do in Greenhouse, and lets you run an operation as a test. Run a read against a real Greenhouse job to see the exact values it returns, then build your field mappers against what you saw rather than what you expected. This is the fastest way to get custom field mapping right the first time.



![]()

### Review webhook activity

The **webhook activity** view records every webhook the integration sends or receives, with the headers and full body of each. When you want to confirm a hire arrived, or see exactly what Greenhouse sent, check here first. It is also the quickest way to answer a question about a specific candidate's data before contacting support.



![]()

## Migrate an existing ChartHop connection to Harvest v3

Greenhouse retires Harvest v1 and v2 on **August 31, 2026**. If you connected ChartHop to Greenhouse with a Harvest API key, move to the OAuth connection before that date or your syncs stop.

Your ChartHop team runs this migration with you. The steps are:

1. In ChartHop, open the Greenhouse app and go to the **Settings** tab. A banner at the top shows that the install still uses the legacy Greenhouse API, along with the August 31, 2026 date.
2. Select **Upgrade** and confirm. ChartHop converts your existing field mappings to the Harvest v3 equivalents and keeps your sync direction and settings.
3. Review the confirmation message. If any field mapping has no direct v3 equivalent, ChartHop names the count so your ChartHop team can reconfigure those fields. Until they do, those fields stop syncing.
4. Select **Connect with Greenhouse** and complete the OAuth authorization in step 2 above. The upgrade does not carry over your API key, so the connection is not live until you authorize.
5. Run a one-time sync on a single job and confirm the result in **Sync history**.



![]()

Your existing new hire webhook keeps working after the upgrade. The endpoint URL does not change, so there is nothing to reconfigure in Greenhouse. If you need to roll back, you can revert the install to the legacy API until August 31, 2026.

## Use the ChartHop integration

### Send an approved role from ChartHop to Greenhouse

On an outbound setup, ChartHop is where a role is created and approved, and Greenhouse is where it gets filled. The sequence most customers follow: headcount plan in ChartHop, generate the open roles, get them approved, merge them into the org, and let the integration carry them to Greenhouse.

![](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/Xii_-ihaFskZQo2Hqppel_upload.png)

1. In ChartHop, build the open roles in a headcount plan or scenario. Once they are approved and merged into your organization and the role is active, ChartHop triggers the send to Greenhouse.
2. With **Sync on change** turned on, ChartHop pushes the job to Greenhouse as soon as the change merges. Otherwise the job goes out on the next daily sync, or when you run a one-time sync from the app page.
3. ChartHop creates the Greenhouse job and one opening per ChartHop job, writes the mapped fields, and adds the hiring manager and job owner to the hiring team.
4. Confirm the result in **Sync history** in ChartHop. Each sync run lists the jobs it touched and the exact values written.
5. In Greenhouse, the requisition is ready. Your talent acquisition team adds the job post, runs interviews, and updates the role as normal, all in Greenhouse.
6. As candidates enter the pipeline, ChartHop pulls the counts onto the role. Open the job's data sheet in ChartHop to see the candidates on that role.



![]()

 

### Keep a role in sync after changes

![](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/5rWm2PrCNDWKr5oUBrdmQ_upload.png)

When you change a linked role in ChartHop, for example a retitle, a department move, or a hiring manager change, ChartHop updates the matching Greenhouse job and opening on the next sync. Closing or filling the role in ChartHop closes the Greenhouse opening and supplies a close reason. Turn on **Reconciliation** to have ChartHop check the full set of open roles against Greenhouse on a schedule and correct any drift.



![]()

### Import open jobs from Greenhouse into ChartHop

On an inbound setup, Greenhouse owns open roles.

1. Open the role in Greenhouse as usual, including department, office, and requisition ID.
2. ChartHop imports active Greenhouse jobs on the daily sync, or immediately when you run a one-time sync from the app page.
3. Each Greenhouse opening becomes an open job in the ChartHop org chart, positioned under the hiring manager, so headcount and planning views reflect what recruiting is working on.
4. ChartHop pulls candidate, screen, interview, and offer counts onto the role each morning, so leaders see pipeline progress next to the org chart.
5. Because the role and its new hire now live in ChartHop, your HRIS and other connected systems pick them up from there. Greenhouse stays your recruiting system of record without becoming an integration hub.

### Add a new hire to the org chart when a candidate is hired

1. In Greenhouse, extend the offer and mark the candidate as hired on the job.
2. Greenhouse sends the hire webhook to ChartHop with the candidate, application, and offer details.
3. ChartHop matches the hire to the ChartHop job linked to that Greenhouse opening and creates the person with their name, contact details, address, start date, and any mapped offer fields such as salary and bonus.
4. The role moves to a recruit status of **Pending** in ChartHop. This is the last recruit status update Greenhouse sends for that role, because the position is filled.
5. Open the run in **Sync history** to see the webhook detail: the new hire, the job they are starting in, and every change ChartHop made.



![]()

## Limits on the new hire webhook

●  	The hire must map to a job that exists in ChartHop. If the job is missing, the hire is not processed.

●  	A hire is not processed when the person already exists in ChartHop, even when they hold no active role. Internal transfers and rehires are handled in ChartHop rather than through the webhook.

●  	Only the first hire webhook for a ChartHop job is processed. If you update an offer packet and rehire the candidate in Greenhouse, remove the new hire in ChartHop before the updated details are accepted.

##  

## Troubleshooting

| **What you see**                                           | **What to do**                                                                                                                                                                                                                   |
| ---------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Sync history shows a job that could not be matched         | Check that the ChartHop job code matches the Greenhouse requisition ID, or that your Group job openings setting matches how your titles are written. Department and office values must match one to one between the two systems. |
| A hire webhook arrived but ChartHop could not find the job | Confirm the Greenhouse opening is the one linked to the ChartHop job. The Greenhouse ID on the ChartHop job appears on the job's data sheet. Open the entry in webhook activity to see exactly what Greenhouse sent.             |
| Syncs stopped and ChartHop asks you to reconnect           | The Greenhouse authorization was revoked or expired. Reconnect from the Connection section on the app settings page. Anyone who can manage all organization API credentials can reauthorize.                                     |
| A field stopped syncing after the v3 migration             | The field mapping had no direct v3 equivalent. Contact ChartHop support to reconfigure it.                                                                                                                                       |
| You need to revoke ChartHop's access                       | In Greenhouse, go to sync settings, and uncheck sync. You can also uninstall the app. Syncs stop immediately.                                                                                                                    |

## Additional resources

For additional information not covered here, reach out to **support\@charthop.com**.

●  ChartHop Greenhouse integration documentation: *https\://docs.charthop.com/coming-soon-greenhouse-v3*

[title] Troubleshooting app syncs
[path] ChartHop for Administrators/Managing data/Sync history/

If your sync fails and you receive errors or warnings, you can refer to the resources below to resolve common occurring issues.&#x20;

# Troubleshooting ATS apps

&#x20;Below is a list of troubleshooting information for each supported ATS app:

| **App**    | **Resource**                                                                                                       |
| ---------- | ------------------------------------------------------------------------------------------------------------------ |
| Greenhouse | [Troubleshooting the Greenhouse integration](https://docs.charthop.com/troubleshooting-the-greenhouse-integration) |
| Lever      | [Troubleshooting the Lever integration](https://docs.charthop.com/troubleshooting-the-lever-integration)           |
| Jobvite    | [Troubleshooting the Jobvite integration](https://docs.charthop.com/troubleshooting-the-jobvite-integration)       |

:::hint{type="info"}
[Modules:](https://www.charthop.com/pricing/) <font color="#000000">**HRIS |** </font>**Engagement | Goals | Performance |&#x20;**<font color="#000000">**Compensation Reviews |** </font>**Headcount Planning**
:::

:::hint{type="info"}
<font color="#000000">: Technical Owner | Owner | Org Editor | Recruiting Editor | Recruiter</font>
:::


[title] Applies to
[path] ChartHop for Administrators/Managing data/Fields/

When you create a custom field, the first thing you'll configure is **Applies to**. This determines whether the field is attached to a person record or a job record, and that distinction shapes how data behaves across your org.

**People** — The field is tied to the individual employee. Data follows the person regardless of what role they're in. Use this for information that's fundamentally about a person, not a position.

:::BlockQuote
Examples: T-shirt size, emergency contact, preferred name, dietary restrictions, personal certifications
:::

**Jobs** — The field is tied to the position itself. If a person moves into a different role, the data stays with the job. Use this for information that describes a seat in the org, not an individual.

:::BlockQuote
Examples: Job level, cost center, headcount type, requisition ID
:::

**Not sure which to pick?** Ask yourself: would this information still apply to the person if they changed roles? If yes, it's a People field. If it describes the role or position itself, it's a Jobs field.

### Track changes over time

When **Applies to** is set to **People**, you'll see a **Track changes over time** checkbox. When enabled, every change to the field is stored with an effective date. You can view the full history of changes on a person's profile under **Personal History**.

Turn this on when you need a record of what the value was at any point in time — not just what it is today.

**Turn it on for:** Performance rating, job level, employment type, work location, visa status

**Leave it off for:** T-shirt size, dietary preference, emergency contact — data where only the current value matters

:::BlockQuote
**A note on legacy "People in jobs" fields:** If your org was set up before mid-2024, you may see fields labeled **People in jobs** in your field list. This was an older field type that is no longer available for new field creation. It has been replaced by People fields with **Track changes over time** enabled. Existing People in jobs fields continue to work, so you may see them in your custom field list, but no new fields of this type can be created.
:::


[title] Nine box ratings
[path] Implementing ChartHop/ChartHop bundles/

Nine box ratings allow managers to give employees ratings that are used to create nine box groups for employees automatically. Managers can only enter and view ratings and generate nine box groups for employees that report to them. Depending on their access level, other ChartHop users, such as HR leaders, have access to this information.

### Assign a nine box rating to an employee

Managers can assign nine box ratings to their employees from the respective employee's profile page.

1. From the left sidebar, select **Org Chart**.
2. In the **Org Chart**, double-click the employee whose profile page you want to view.
3. Choose **Nine-Box Rating** from the **Complete tasks** menu.
4. Choose both a **Potential rating** and a **Performance rating** for the respective employee.
5. Select **Submit**.

### View Nine Box Ratings in the Data Sheet

Use the Data Sheet to view employees' nine-box ratings to get a holistic view across your organization or team.

1. From the left sidebar, select **Data Sheet**.
2. On the **Data Sheet** page, choose **Select columns**.
3. Select the following columns to display: **Performance Rating**, **Potential Rating**, and **Nine Box Group**.
4. Optionally, you can just filter the **Data Sheet** to show only your team or department. [Learn more.](https://docs.charthop.com/filtering)

# Installing the Nine box bundle

:::hint{type="info"}
﻿﻿﻿[﻿](https://www.charthop.com/pricing/)[Packages](https://www.charthop.com/pricing/)**:&#x20;**<font color="#a9a9a9">Basic</font> | <font color="#a9a9a9">Standard</font> | **Premium**

[﻿﻿Roles:](https://docs.charthop.com/user-roles-and-permissions)  Technical Owner | Owner
:::

The below information is for ChartHop users with permission to modify fields and forms and install ChartHop bundles.

## Install the Nine box bundle

1. From the left sidebar, select **Apps & Bundles**.
2. From the sub-menu, select **Bundles**.
3. Select the **Availible Bundles** tab to see the list of bundles.
4. Within the Available bundles tab, select a bundle to see an overview of your selected bundle and what it contains.
5. Within the Bundle dialog box, select **Install** to install the bundle.

## Customize the Nine box bundle

You can customize the values of nine box fields to match the language your organization wants to use to define nine box ratings. It would be best if you made any edits to fields before you start using them to maintain the integrity of the data collected. [Learn more.](#)

1. From the left sidebar, select **Data Model**.
2. From the sub-menu, select **Fields**.
3. From the row menu (⋮) next to the field to edit, select **Edit**.
4. In the **Edit custom field** dialog, edit the description of the field and/or the labels used for the fields.

   ::Image[]{alt="Editing fields" src="https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/XolZIYdq9J_pNZjstGls1_edit-nine-box-example.png" size="50" width="3292" height="2446" position="flex-start" showCaption="false"}
5. Select **Save** when finished making changes.

### Nine box form

| **Form**        | **Data Sensitivity** |
| --------------- | -------------------- |
| Nine Box Rating | Manager-only         |

### Nine box fields

| **Field name**                                                       | **Values**                                                                                                                                        | **Data Sensitivity** |
| -------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------- |
| Potential Rating                                                     | - Low
- Medium
- High                                                                                                                             | Manager-only         |
| Performance Rating                                                   | * Under
* Expected
* Outstanding                                                                                                                  | Manager-only         |
| Nine box (smart calculation field; cannot be directly edited)        | 1-9                                                                                                                                               | Manager-only         |
| Nine box group (smart calculation field); cannot be directly edited) | - Future Leader
- Growth Employee
- High-Impact Performer
- Trusted Professional
- Enigma
- Core employee
- Effective
- Dilemma
- Under Performer | Manager-only<br />   |

:::hint{type="info"}
[Packages](https://www.charthop.com/pricing/)**:&#x20;**<font color="#a9a9a9">Basic</font> <font color="#000000">|</font> <font color="#000000">**Headcount Planning** | </font><font color="#000000">**Compensation Reviews** | </font><font color="#000000">**Performance** | </font><font color="#000000">**Engagement** </font>
:::

###






[title] Fields
[path] ChartHop for Administrators/Managing data/

Fields store information about your org, your people, and your jobs. Using ChartHop's built in fields and custom fields that you import or create, you can create an accurate data picture of your employee base. In ChartHop, you can customize any property of both custom and [built-in fields.](docId\:XYrLLTZxiE-BV4ZKzEs_g)

Fields have the following properties:

- **Field** **label&#x20;**- the name of the field; the primary way it's identified in the app. 
- **Field code&#x20;**- a unique identifier for the field; used for refrencing the field in ChartHop’s [Carrot Query Language (CQL)](https://docs.charthop.com/carrot-reference).
- **Description** - communicates the purpose of the field. Helpful as you create more fields.&#x20;
- **Applies to&#x20;**- aligns a field to your foundational data models: person, a job, an open job or a person in a job. [Learn more.](https://docs.charthop.com/working-with-applies-to) 
- **Data type&#x20;**- The structure of information stored in a field, such as text, single select, date, or percentage. [See full list.](docId\:XNd9irlWsHFCeXmwwkSbA)
- **Category** - A customizable grouping to organize your fields; [Learn more.](docId\:TPKhVeXrOv1C9Jv2x6vDv)
- **Sensitivity&#x20;**- The level of data access a ChartHop user must have to view this field's data. [Learn more.](https://docs.charthop.com/user-roles-and-permissions) 
- **Source** - Built-in, Custom or Built-in (edited).&#x20;
- **Hidden** - If a field is hidden it will not show up in your acccount outside of the fields page. This is useful for hiding unused built-in fields. Information stored on a hidden field will be retained.&#x20;
- **Last modified by** - Who edited the field last, if a field was added by a bundle, you will see the name of the bundle here.&#x20;
- **Last modified at&#x20;**- the date when the field configuration was last editied.&#x20;

# Fields Page

View and manage fields from the **Fields** page. From the **Fields** page, you can:

- Filter fields by status, type or category
- Search for fields or field codes
- Export a list of fields
- Create custom fields
- Add fields to categories
- Show or hide fields
- Delete a custom field

![Fields page screenshot](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/cHttKCxNSDQrSFH3cIkxX_fields-page.png)

### View fields

You can view the list of fields available in your ChartHop organization from the **Fields** page.&#x20;

You can customize the list to show only the fields you are interested in. See *Hide a Field* below.

To view and manage fields:

1. From the left sidebar, select **Data Model.**
2. From the sub-menu, select **Fields**
3. Find a Field by:
   1. Selecting a column header to sort the list in ascending or descending order.
   2. Use the filters at the top of the page to customize which fields are displayed.
      - **Status** – Select **All, Active** or **Hidden** fields.
      - **Type&#x20;**- Select the kind of field that you are looking for
      - **Category** – Select a category. The default view includes all categories.
   3. Searching for the field by it's **Name** o&#x72;**&#x20;Field code**.&#x20;

:::hint{type="info"}
If you want to find out more about how to create filters and calculations using fields, see the Carrot reference which include a list of supported fields. [Learn more.](https://docs.charthop.com/carrot-reference)
:::

### Override a built-in field

ChartHop supports renaming and overriding built-in fields to tailor them to your organization. For example, maybe your org calls *Departments*, “*Divisions*,” or maybe you’d like personal phone numbers to be visible to the entire organization.&#x20;

To override a ChartHop built-in field, simply click on the field and edit the attributes you wish to override.&#x20;

To remove an override, simply click the *"Restore original settings"* button at the bottom of the Edit Field modal.&#x20;

### Export fields

You can export a list of fields as a CSV file when you need to review and audit your custom fields or select fields for a spreadsheet you’re importing to ChartHop ([learn more](https://docs.charthop.com/importing-spreadsheet-data)). Field exports contain information including label, code, type, formula, who the fields apply to, their date, and their sensitivity.  

To export a list of fields:

1. From the left sidebar, select **Data Model.**
2. From the sub-menu, select **Fields.**
3. Select **Export**. 
4. Select **Download** to download a CSV file containing your fields list.

:::hint{type="info"}
Exporting fields allows you to see any **formulas** for calculated fields. They will look like this:

- Smart calculations: `Formula`
- Smart buckets: `Label 1: Formula 1; Label 2: Formula 2;`
- Built in Calculated Fields: `Built-in Calculation (FIELD)` these built in formulas are more complex and therefor can not be displayed in the export at this time.&#x20;
:::



## Managing Fields

### Edit a field

You can edit custom or built in fields if you need to change its settings. You can only edit custom fields that you have created, not built-in fields that come with ChartHop.&#x20;

To edit a custom or built in field:

1. From the left sidebar, select **Data Model.**
2. From the sub-menu, select **Fields.**
3. Find the field and click on the field
4. In the **Edit field** dialog, make any needed changes.
5. Select **Save** to finish editing the field. 

:::hint{type="warning"}
Use caution when editing the **field code** of a fields that are in use. If field codes are using in existing calculations or reports, they will not update. This does not apply to built in fields.&#x20;
:::



### Duplicate a field

To duplicate a field:

1. From the left sidebar, select **Data Model.**
2. From the sub-menu, select **Fields.**
3. Select the checkbox next to the field, then select **Duplicate&#x20;**&#x66;rom the action bar.&#x20;
4. Configure the new field and **Save**.&#x20;

### Add a field to a category

To add a field to a category:

1. From the left sidebar, select **Data Model.**
2. From the sub-menu, select **Fields.**
3. Select the checkbox next to the field, then select **Add to Category&#x20;**&#x66;rom the action bar.&#x20;
4. Select or search for the category, click **Add**.&#x20;

Alternatively, you can manage fields and categories on the [Categories](docId\:TPKhVeXrOv1C9Jv2x6vDv) page.&#x20;

![Field actions](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/QYvG0XHSX7J4Dw3_qI8U5_fields-page-actions.png)

:::hint{type="info"}
### Field Management Best Practice

- **Built in Fields**
  - If you are not using the field ➡️ **Hide** the field
- **Custom Fields**
  - If you want to keep data stored to the field ➡️ **Hide** the field
  - If you don’t want to keep data to the field ➡️ **Delete** the field
:::

### Hide a field

You can hide fields so that your users won’t see them. When a field is hidden, it is hidden from everyone, regardless of any data sensitivity rules you’ve set. This includes forms, associated Carrot queries, and the **Data Sheet**. Hiding a field doesn’t remove it from ChartHop, it only removes it from view.

You cannot delete, modify, recategorize built-in fields. However, you can hide them on the **Fields** page.

For example, if you have a time-sensitive employee survey that was sent out for a specific event, you can hide the fields after the event has passed and they are no longer needed.&#x20;

:::hint{type="warning"}
When you hide a field that was previously added and saved as a column in a **Data Sheet** view, the hidden field continues to display in the **Data Sheet** view. To fully hide the field, you must remove the column from the **Data Sheet&#x20;**&#x76;iew. [Learn more.](https://docs.charthop.com/creating-data-sheet-views)
:::

To hide a field:

1. From the left sidebar, select **Data Model.**
2. From the sub-menu, select **Fields.**
3. Select the checkbox next to the field, then select **Hide&#x20;**&#x66;rom the action bar.

To view hidden fields, select **Hidden&#x20;**&#x69;n the **Status** dropdown.

### Unhide a field

If you want to unhide a field that you have previously hidden or view a list of all fields that are hidden, you can do so from the **Fields** page. 

To unhide a field:

1. From the left sidebar, select **Data Model.**
2. From the sub-menu, select **Fields.**
3. From the **Status** menu, selec&#x74;**&#x20;Hidden&#x20;**&#x6F;r All to show all hidden field&#x73;**.&#xA0;**
4. Select the checkbox next to the field, then select **Hide&#x20;**&#x66;rom the action bar.

### Delete a field

You are able to delete custom fields. You are only able to [hide](docId\:XYrLLTZxiE-BV4ZKzEs_g) built-in fields.&#x20;

To delete a field:

1. From the left sidebar, select **Data Model.**
2. From the sub-menu, select **Fields.**
3. Select the checkbox next to the field, then select **Delete&#x20;**&#x66;rom the action bar.&#x20;
4. Confirm that you would like to delete the field.&#x20;

:::hint{type="danger"}
Deleting a field will also delete all underlying data tied to the field.&#x20;
:::



:::hint{type="info"}
[Packages](https://www.charthop.com/pricing/): Basic | **Standard** | **Premium**

****[﻿﻿Roles:](https://docs.charthop.com/user-roles-and-permissions) Owner | Technical owner
:::







[title] Field data types & smart fields
[path] ChartHop for Administrators/Managing data/Fields/

When creating custom fields, you can choose from a wide range of data types to define what kind of information each field will contain. The following table describes the available data types in ChartHop.&#x20;

| **Data type**     | **Description**                                                                                                                                                                              |
| ----------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Single select     | Records a single response from a list of options. See [Enum](https://docs.charthop.com/enum).                                                                                                |
| Multiple select   | Records multiple responses from a list of options.  See [Enum](https://docs.charthop.com/enum).  <br />Note that each item in the list should be separated with a semi-colon when importing. |
| Numeric scale     | Records a single response from a list of numbered options. See [Enum](https://docs.charthop.com/enum).                                                                                       |
| Yes/No            | Stores true/false values. See [Boolean](https://docs.charthop.com/kdvw-boolean).                                                                                                             |
| Short text        | Stores short strings, such as a person’s preferred name. See [String](https://docs.charthop.com/string).                                                                                     |
| Long text         | Stores longer strings, such as a paragraph of text in a form response. See [String](https://docs.charthop.com/string).                                                                       |
| Integer number    | Stores whole numbers. See [Number](https://docs.charthop.com/ucI5-number).                                                                                                                   |
| Decimal number    | Stores both decimals and whole numbers. See [Number](https://docs.charthop.com/ucI5-number).                                                                                                 |
| Money             | Stores currency values, such as `10 USD`. See [Money](https://docs.charthop.com/_kS5-money).                                                                                                 |
| Percentage        | Stores percent values. See [Percent](https://docs.charthop.com/percent).                                                                                                                     |
| Date              | Stores dates. See [Date](https://docs.charthop.com/xTAQ-date).                                                                                                                               |
| Smart calculation | Calculates a numeric value using Carrot Query Language (CQL). See [Smart calculations.](docId\:XNd9irlWsHFCeXmwwkSbA)                                                                        |
| Smart bucket      | Records a single response from a list of options.  Each option contains a smart calculation. See [Smart buckets.](docId\:XNd9irlWsHFCeXmwwkSbA)                                              |
| Person            | Stores individual people. See [Person](https://docs.charthop.com/person).                                                                                                                    |
| Persons           | Stores multiple people, such as a group of peer reviewers on a form. See [PersonList](https://docs.charthop.com/personlist).                                                                 |
| File              | Stores uploaded files, such as an offer letter. See [File](#).                                                                                                                               |
| Address           | Includes Address line 1, Address line 2, City, State, Posta                                                                                                                                  |

:::hint{type="info"}
The data type you select determines what kind of value a field can store. For example, a [number](https://docs.charthop.com/ucI5-number) field can only store a value like `56`. If you expect to receive responses containing either a [string](https://docs.charthop.com/string) value (`fifty-six`) or a number value (`56`), use the string data type to capture them, since numbers will automatically be converted to strings (for example, `56` to `"56"`). If you need to store the responses as numbers for reporting purposes, you can create a second custom field that converts the value to a number. [Learn more](https://docs.charthop.com/number).
:::



## Smart Fields

You can create *smart fields* that automatically make calculations for you. You can use these fields in reporting and can control the expressions used to calculate the data. There are two kinds of smart fields: *smart calculations* and *smart buckets*. Each serves a different purpose and can help you build out simple or complex formulas to manage data.

Smart fields use [Carrot Query Language (CQL)](docId\:fL-eMyhB9F8NzL2Vza9fq), ChartHop’s custom query language.

![](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/F93saJKQlN-BLelxwM1xu_screenshot-2024-01-19-at-30051-pm.png)

### Smart calculations

Smart calculations contain a single Carrot expression, although that expression can be lengthy depending on the data being calculated. Smart calculations use algebra and basic math to return a single numeric value such as a dollar amount, a date, or a number.

For example, you can use a smart calculation to calculate a prorated salary or the number of jobs that have been open for more than 90 days (`is:open daysOpen>90`)

![](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/CuNEC9uN2o5LVAhN5ZDaz_screenshot-2024-01-19-at-30127-pm.png)

### Smart buckets

Smart buckets are single select fields that contain multiple Carrot expressions, one for each color-coded option. Smart buckets return data in a range of numerical values instead of a single number. 

You can use smart calculations to tag or group employees with multiple options; for example, a set of salary guidelines or a group of functional areas. 

In the following example, functional areas for an org are defined by these Carrot expressions:

- **Technical and Product&#x20;**– `(department.func='Design' or department.func='Engineering' or department.func='Product' or department.func='Security') and placement:normal`
- **Sales and Marketing** – `(department.func='BD' or department.func='CS' or department.func='Marketing' or department.func='Sales'  or department.func='Support') and placement:normal`
- **Operations and Finance** – `(department.func='Executive' or department.func='Finance' or department.func='General' or department.func='IT'  or department.func='Legal'   or department.func='Operations'   or department.func='People'   or department.func='Recruiting') and placement:normal`
- **Administrative/Other&#x20;**– `placement:assistant`

![](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/L77X_lZ3tgOcjkfhfpN4H_screenshot-2024-01-19-at-30227-pm.png)


[title] Adding Lever Requisitions
[path] Implementing ChartHop/Apps & Integrations/Applicant tracking systems/Lever Requisitions/Setting up the Lever integration/

:::hint{type="info"}
[Packages](https://www.charthop.com/pricing/)**:&#x20;**<font color="#a9a9a9">Basic</font> <font color="#000000">|</font> <font color="#000000">**Standard*** | **Premium**</font>****

\* Available as an add-on
:::

When you configure ChartHop to be the source of truth (outbound data flow), you can choose to import any previously existing Lever requisitions into ChartHop.&#x20;

This is a two-step process. First, you'll use ChartHop's  Lever Requisitions application to export your existing jobs and then use ChartHop to import your exported jobs to ChartHop using a CSV file.

:::hint{type="info"}
Exporting Lever requisitions are only for outbound data flows.
:::

You can choose add all jobs, including those that are not active, or just import your active jobs from Lever Requisitions.&#x20;

![Export your Lever data by selecting the Export Active Lever Res button](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/EMqYs1wtgUJm9aLR3pieG_group-7.png "Export your Lever data by selecting the Export Active Lever Res button")

### Use the app to export existing Lever requisitions to a CSV

To export Lever requisitions follow these steps:

1. From the left sidebar, select **Apps & Bundles**.
2. From the sub-menu, select **Apps**.
3. Select the **Installed Apps** tab.
4. Scroll the list down to the **Lever Requisitions&#x20;**&#x61;pp.
5. Select the **Lever Requisitions&#x20;**&#x61;pp.
6. From the ChartHop **Lever Requisitions&#x20;**&#x61;pp settings page, select either:&#x20;
   - **Export Active Lever Reqs**, to include only **Open&#x20;**&#x4C;ever requisitions.
   - **Export All Lever Reqs**, to include all Lever requisitions including **Closed**, **On Hold**, and **Hired**.
7. Save the .csv file.

### Verify your exported roles

Before you import Lever requisitions into ChartHop, follow these steps to clean the .csv:

1. Open the .csv in Excel or Google Sheets.
2. Remove any roles that aren't on your hiring plan, for example test jobs and inactive roles.
3. Ensure that every role has a value for Manager. You should also set target comp (Base and Variable) for the roles if possible.
4. Ensure that the list of roles is correct and up to date, and reflects what you want imported into ChartHop as the new source of truth for your hiring plan 

### Import your Lever requisitions to ChartHop

Save the edited file as a .csv or .xlsx and upload it on the [Import Spreadsheet](https://app.charthop.com/import/csvdata) page in ChartHop.

Once the upload is complete, the hiring plan of open jobs in ChartHop should mirror the hiring plan of open reqs in Lever. From this point forward, you can use ChartHop as the system of record for open roles.


[title] Using a job matching field
[path] ChartHop for Administrators/Managing data/Fields/Job matching for payroll syncs/

Once you have a job matching field configured and mapped in ChartHop, you can match jobs from your payroll system to the jobs you create in ChartHop. Just apply your payroll system's job code value to a custom job matching field when creating and editing jobs in ChartHop. When you have associated ChartHop open jobs with matching job codes from your payroll system, those open jobs are updated with any new hire information during your payroll sync.

:::hint{type="warning"}
To prevent data sync errors, ensure you associate each ChartHop job with the related job code value.
:::

To match a ChartHop job to a new hire from your payroll system data:

1. From the left sidebar, select **Org Chart.**
2. In the **Org Chart**, create a new job by either:
   - Adding a direct report by selecting **Add a direct report** under a pre-existing person or role.
   - Creating a new job by selecting **New hire** under a pre-existing person or role.
3. In the **Create job** dialog, under the **Custom fields** tab, enter your job matching code.
4. Select **Save**

:::hint{type="info"}
You can also set multiple job matching field code values on new jobs via a job data import by adding a column for the field in your CSV and setting the values.
:::

## Related articles

- [Job matching for payroll syncs](https://docs.charthop.com/job-matching-for-payroll-syncs) - Background on how job code matching works and setup requirements.
- [Creating job codes](https://docs.charthop.com/creating-job-codes) - Set up the job code catalog in Settings.

[title] Setting up your Workday Report
[path] Implementing ChartHop/Apps & Integrations/Payroll systems/Installing payroll apps/Workday Reports/

ChartHop's Workday Reports integration works by looking for specific field names within the report. To ensure ChartHop can read all fields in your report, refer to the following **Column Header Overrides&#x20;**&#x77;hen setting up your report, as ChartHop is configured to look for this specific naming convention when syncing default fields.

For custom fields not covered below, work with your Integration Specialist to decide on a common field name for the corresponding ChartHop field, then ensure that field's **Column Header Override&#x20;**&#x69;s set to the same name in the report.

:::hint{type="info"}
Column Header names in the report are case sensitive, and cannot contain periods.

For ChartHop fields that include a period, we recommend camalCase-ing (removing spaces and capitalizing the first letter of each word starting from the second word) instead.
:::

### Minimum necessary fields

| **ChartHop Field** | **Report Column Header Override** |
| ------------------ | --------------------------------- |
| contact.workday    | WORKDAYid                         |
| name.first         | firstName                         |
| name.last          | lastName                          |
| title              | title                             |
| manager            | manager                           |
| startDate          | startDate                         |
| endDate            | endDate                           |
| contact.workEmail  | workEmail                         |
| department         | department                        |

### Recommended fields

| **ChartHop Field**      | **Report Column Header Override** |
| ----------------------- | --------------------------------- |
| address.city            | homeAddressCity                   |
| address.country         | homeAddressCountry                |
| address.postal          | homeAddressPostal                 |
| address.state           | homeAddressState                  |
| address.street1         | homeAddressStreet1                |
| address.street2         | homeAddressStreet2                |
| address.street3         | homeAddressStreet3                |
| baseComp.amount         | baseCompAmount                    |
| baseComp.currency       | baseCompCurrency                  |
| baseComp.hoursPerWeek   | baseCompHoursPerWeek              |
| baseComp.interval       | baseCompFrequency                 |
| birthdate               | birthdate                         |
| compDate                | compDate                          |
| contact.homeEmail       | contactHomeEmail                  |
| contact.homePhone       | homePhone                         |
| contact.mobilePhone     | contactMobilePhone                |
| contact.workPhone       | contactWorkPhone                  |
| ethnicity               | ethnicity                         |
| gender                  | gender                            |
| hourly                  | hourly                            |
| location                | location                          |
| name.middle             | middleName                        |
| name.pref               | namePref                          |
| name.preflast           | namePrefLast                      |
| team                    | team                              |
| variableTarget.amount   | variableAmount                    |
| variableTarget.currency | variableCurrency                  |
| variableTarget.percent  | variablePercent                   |
| variableTarget.type     | variableType                      |


[title] Hiring candidates
[path] Implementing ChartHop/Apps & Integrations/Applicant tracking systems/Lever Requisitions/

:::hint{type="info"}
[Packages](https://www.charthop.com/pricing/)**:&#x20;**<font color="#a9a9a9">Basic</font> <font color="#000000">|</font> <font color="#000000">**Standard*** | **Premium**</font>****

\* Available as an add-on
:::

Once you hire a candidate in Lever, a new hire is automatically created in ChartHop to fill the mapped job in Lever. 

### New hire triggers

The new hire data flow triggers whenever an individual is marked as **Hired** in Lever. The action fires a webhook to ChartHop, which provides ChartHop with the necessary information to pull in the pending hire. [Learn more](https://docs.charthop.com/setting-up-the-lever-integration#2ZEFU).

The Lever Requisition ID is used to map the Lever Requisition to the corresponding job in ChartHop.

If a job in ChartHop has not switched to **Pending** after the mapped Lever Requisition is hired into, you can manually add the new hire into ChartHop. Once the new hire is added to the HRIS system, the new hire information coming from the payroll system matches with and updates the pending new hire that is created in ChartHop from the new hire data flow. 

### New job hires

To finalize a job hire, before being moved into the Hired stage in Lever, a candidate must first go through the Offer stage in Lever (with the offer either being created or signed in Lever before being moved into the Hired stage).

While a candidate must go through the Offer stage in Lever, the option to send outside of Lever may be selected when creating the offer in Lever.

Note that even if the offer is sent outside of Lever, either the signed offer letter must be attached/uploaded into Lever or the "Mark offer as signed" option must be selected.

:::hint{type="info"}
We recommend that you select “Mark offer as signed”, as this way, a signed offer file does not need to be uploaded.
:::

## Set new hire announce dates

When candidates are hired and they are created in ChartHop, you have a choice about when you want them to show up publically to your organization

Under the option **New Hire Webhook Announce Date&#x20;**&#x73;elect one of the following:

- **Start date** - The new hire will not be org public until their start date.&#x20;
- **Today** - The new hire will be displayed immediately on the day of the sync
- **Earlier of start date and today (Default)**


[title] Troubleshooting Slack announcements
[path] Implementing ChartHop/Apps & Integrations/Untitled/

You can send notifications to Slack users according to Actions you set. For example, you can send reminders to fill out surveys or 1:1 forms, as well as work anniversary announcements.

Users can also send Slack messages to each other directly through a respective employee's profile.

If a Slack message doesn't reach the user as expected, it could be because the person’s profile in Slack isn’t connected to their profile in ChartHop. 

### Verify an employee's Slack ID in ChartHop

To see whose accounts are or are not connected, verify that the person has a Slack ID in ChartHop:

1. From the left sidebar, select **Data Sheet.**
2. On the **Data Sheet** page, choose **Select Columns**.
3. In the **Select Columns** dialog, type Slack in the search bar.
4. Select the check box for the **Slack ID** field to display this column in the Data Sheet.
5. View which employees do not have a Slack ID or use the Filter (`!contact.slack`) to filter to only people without a Slack ID.

### Troubleshoot Slack IDs

If you don’t see a Slack ID for an employee, there are several things you can do to troubleshoot:

- Verify that the person’s email in Slack is exactly the same as it is in ChartHop
- Verify that the person’s name in Slack is exactly the same as it is in ChartHop
- Re-sync Slack with ChartHop by clicking “Run one-time sync” on the Slack app Page

If all of this information aligns and you are still experiencing issues, we recommend you uninstall and reinstall the Slack app to ensure that ChartHop’s permissions are up to date.&#x20;


[title] Okta lifecycle states and provisioning behavior
[path] Implementing ChartHop/Apps & Integrations/Identity & SSO/Okta/

This page explains how Okta models account states and how ChartHop settings determine which state a person lands in. Use it as a reference when troubleshooting why an account was created in a different state than expected.

:::hint{type="info"}
This applies to our Okta 2-way sync, available for HRIS customers.
:::

## Okta lifecycle states

Okta has its own state model, separate from ChartHop. Here's what each state means, whether the person can sign in, and how it appears in Okta.

| Okta state  | What it means                                                                                                         | Can the person sign in via SSO? | How it appears in Okta |
| ----------- | --------------------------------------------------------------------------------------------------------------------- | ------------------------------- | ---------------------- |
| STAGED      | Account created, but activation was never started. No email sent, no password set up.                                 | No                              | INACTIVE               |
| PROVISIONED | Activation started. Okta sent an activation link to the person. Waiting for them to finish setting up their password. | Not yet                         | ACTIVE                 |
| ACTIVE      | Fully set up, activation complete.                                                                                    | Yes                             | ACTIVE                 |
| INACTIVE    | Deactivated, e.g., after a departure or before a rehire is reactivated.                                               | No                              | INACTIVE               |

**Note:** PROVISIONED maps to ACTIVE in ChartHop. ChartHop treats "activation started" the same as "active." The distinction between PROVISIONED and ACTIVE lives in Okta, not in ChartHop.

## Provisioning behavior by scenario

The table below shows what Okta state results from each combination of person type and app settings. All scenarios are gated by the Sync new hires before start date setting — nothing runs until a person crosses that threshold.

| Person type                           | Settings                                                                                     | Resulting Okta state                                                    | Email sent?                                                                         |
| ------------------------------------- | -------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------- | ----------------------------------------------------------------------------------- |
| New hire                              | Create Okta profiles for new hires = on<br />Send email and activate upon creation = on      | PROVISIONED → becomes ACTIVE once the person completes setup            | Yes                                                                                 |
| New hire                              | Create Okta profiles for new hires = on<br />Send email and activate upon creation = off     | STAGED — account sits here until manually activated                     | No                                                                                  |
| New hire                              | Create Okta profiles for new hires = off                                                     | No account created                                                      | —                                                                                   |
| Rehire (existing account is INACTIVE) |                                                                                              |                                                                         |                                                                                     |
| Rehire                                | Re-activate Okta profiles for re-hires = on<br />Send email and activate upon creation = on  | INACTIVE → ACTIVE (or PROVISIONED if setup wasn't previously completed) | Yes — only if the person is assigned to Okta. **Known limitation for preboarding.** |
| Rehire                                | Re-activate Okta profiles for re-hires = on<br />Send email and activate upon creation = off | INACTIVE → ACTIVE, silently                                             | No                                                                                  |
| Rehire                                | Re-activate Okta profiles for re-hires = off                                                 | Stays INACTIVE                                                          | No                                                                                  |
| Departure                             |                                                                                              |                                                                         |                                                                                     |
| Departure                             | De-activate Okta profiles on departures = on                                                 | ACTIVE → INACTIVE                                                       | No                                                                                  |

**Timing gate:** Every scenario above only runs once the person crosses the Sync new hires before start date threshold. If an account isn't being created when expected, confirm the person is within that window.

[title] Setting up a job matching field
[path] ChartHop for Administrators/Managing data/Fields/Job matching for payroll syncs/

This section covers the process of setting up ChartHop fields to match open jobs and new hire data between ChartHop and your payroll system during payroll syncs.

Setting up job matching fields require the following steps:

1. Create a job matching field
2. Enable a job matching field
3. Map a job matching field

### Create a job matching field

You can either create a custom field, or select an existing ChartHop field to have linked to your payroll system. [Learn more](https://docs.charthop.com/create-a-custom-field).&#x20;

The field you create or use must meet the following requirements:

- Must be used only for mapping to the payroll field you choose.
- Must apply to jobs.
- Must be short text.

When creating a custom ChartHop field, be sure to check the **Enable edit dialog** option to ensure that the field will appear in the **Custom tab**, section of your job's profile page.

### Enable a job matching field

After creating your matching field in ChartHop, it can be enabled with the assistance of a ChartHop implementation specialist.

:::hint{type="info"}
Contact [ChartHop support](#) to activate your custom field and enable it for use in your organization.
:::

### Map a job matching field

After selecting a valid field in ChartHop, you now need to link it to a field in your payroll system. To link the two fields, you must set up a field mapper connection in your ChartHop payroll integration app's configuration settings.

To map your job matching field between ChartHop and your payroll system, do the following:

1. From the left sidebar, select **App & Bundles.**
2. From the sub-menu, select **Apps.**
3. On the **Apps** page, Select the **Installed Apps** tab.
4. Scroll down the list and select your payroll's integration app.
5. Install and apply the app's basic needed configurations if not yet installed.
6. Select the **Field mappers** tab.
7. Select **Add Field Mapper**
8. In the **ChartHop Field**, enter your custom or built-in job matching field.
9. In the **Remote Field**, add your payroll system's remote job field.
10. Select **Save**.


[title] Spreadsheet import examples
[path] ChartHop for Administrators/Managing data/Importing spreadsheet data/

This topic provides examples and tips to help you use the ChartHop spreadsheet uploader. These include adding a job that reports to an open job, working with PTO updates, adding terminations, and more.&#x20;

## Uploading a person or job that reports to an open job

You can upload a person or job that reports to an open job. To do so, add a column for **Manager\:req**, and in it, enter the requisition code for the open job. By doing this, you tell ChartHop that the manager for the job or person corresponds to a requisition code for an open job.&#x20;

The example in the following table creates two jobs: a Customer Success Manager and a Director of Customer Success, both starting on the same day. The Customer Success Manager reports to the Director of Customer Success.&#x20;

| **Job title**                | **req**   | **Start date** | **Manager**             | **Manager\:req** | **Date**         |
| ---------------------------- | --------- | -------------- | ----------------------- | ---------------- | ---------------- |
| `Customer Success Manager`   | `job-123` | `8/1/2022`     |                         | `job-234`        | `6/1/2022`       |
| `Director, Customer Success` | `job-234` | `8/1/2022`     | `jane.doe@charthop.com` | <br />           | `6/1/2022`<br /> |

## Uploading PTO changes

You can update paid time off for your people by uploading a spreadsheet to ChartHop. In the following example, two people have requested time off and one request is still pending:

| **Work Email**              | **timeOffStartDate** | **timeOffEndDate** | **timeOffDays** | **timeOffApproval** | **timeOffID** |
| --------------------------- | -------------------- | ------------------ | --------------- | ------------------- | ------------- |
| `jane.smith@charthop.com`   | `6/1/2022`           | `6/6/2022`         | `5`             | `APPROVED`          | `734`         |
| `john.johnson@charthop.com` | `6/15/2022`          | `6/19/2022`        | `5`             | `PENDING`           | `543`         |

### Required and optional columns

&#x20;The following table describes required and optional columns for PTO uploads:

| **Column**       | **Description**                                                                                                                                                                                                                                | **Example**                            |
| ---------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------- |
| Work email       | Left-most column; identifies the person whose time off is being entered.                                                                                                                                                                       | `john@charthop.com`                    |
| timeOffStartDate | Start date for the time off; required.                                                                                                                                                                                                         | `6/1/2022`                             |
| timeOffEndDate   | End date for the time off; required.                                                                                                                                                                                                           | `6/15/2022`                            |
| timeOffApproval  | Whether the time off was approved; optional. Has the following options: <br />* APPROVED - Time off was approved. Default option. 
* PENDING - Time off is pending.
* CANCELLED - Time off was cancelled.
* REJECTED - Time off was rejected.  | `APPROVED`                             |
| timeOffDays      | Number of days requested; required.                                                                                                                                                                                                            | `5`                                    |
| timeOffHours     | Number of hours requested; optional.                                                                                                                                                                                                           | `40`                                   |
| timeOffId        | Unique identifier for each time off request. ChartHop recommends including this field since any subsequent PTO updates should include it as the left-most identifying column.                                                                  | `734`                                  |
| timeOffType      | Type of time off; optional.                                                                                                                                                                                                                    | `PTO`                                  |
| timeOffNote      | Alphanumeric note about the time off; optional.                                                                                                                                                                                                | `I need to take my son to the doctor ` |

## Uploading a person who is no longer employed

You can create a picture of your historical org by uploading people who are no longer employed. To do so, add an **End Date** column to the person’s information. 

If you want to avoid creating an automatic backfill, also add a **backfillJob** column with a value of `No`. &#x20;

:::hint{type="warning"}
Use the **Backfill** column with departures for which you don't want to create a backfill, but not for hiring plans and new positions.&#x20;
:::

To change the departure type, add a **Depart** column with a value of `Involuntary`. This value defaults to `Voluntary` if not provided. 

The following table contains an example:

| **Work email**            | **First name** | **Last name** | **Job title** | **Manager**               | **Start date** | **End date** | **backfillJob** | **Depart**    |
| ------------------------- | -------------- | ------------- | ------------- | ------------------------- | -------------- | ------------ | --------------- | ------------- |
| `john.smith@charthop.com` | `John`         | `Smith`       | `Engineer`    | `fred.jones@charthop.com` | `1/1/2022`     | `6/1/2022`   | `No`            | `Involuntary` |

## Uploading a person’s job history

You can upload a person’s job history via spreadsheet. As long as the person has already been created in ChartHop, you only need to include columns for information that has changed. 

In the following example, a person has been promoted. Note that the **Date** column reflects the start date of each position:

| **Work email**            | **Job title**          | **Manager**              | **Base**   | **Variable Percent** | **Band** | **Date**   |
| ------------------------- | ---------------------- | ------------------------ | ---------- | -------------------- | -------- | ---------- |
| `john.smith@charthop.com` | `Senior Engineer`      | `john.doe@charthop.com`  | `$120,000` | `20%`                | `L3`     | `1/1/2022` |
| `john.smith@charthop.com` | `Manager, Engineering` | `fred.smith@example.com` | `$150,000` | `30%`                | `L4`     | `6/1/2022` |

## Uploading departures or terminations

When you want to update ChartHop to reflect a termination or departure, you can upload a spreadsheet that contains the change. Note that ending a job will automatically create a backfill unless you add a **backfillJob** column with a value of `No`.

See the following table for an example of an involuntary departure with no backfill:

| **Work Email**         | **End Date** | **depart**    | **reason**    | **backfillJob** |
| ---------------------- | ------------ | ------------- | ------------- | --------------- |
| `example@charthop.com` | `5/1/2022`   | `Involuntary` | `Performance` | `No`            |

## Uploading promotion title or compensation change

When you want ChartHop to reflect a promotion for an employee, you can upload a spreadsheet that contains the change. Note that a promotion must be associated with either a **title** change or **base&#x20;**&#x63;hange. The value in the **Date** column will be the effective date of the change and will be reflected in the **Last promotion** field. To note a title or base change as a promotion, include the **Promotion** column in your CSV with the word **“Promotion”** as the value for that column.

In the following example, a person has been promoted and given a title and salary change, effective January 1st, 2024:

| **Work Email**            | **Date** | **Title**         | **Base Comp** | **Promotion** |
| ------------------------- | -------- | ----------------- | ------------- | ------------- |
| `John.Smith@charthop.com` | `1/1/24` | `Senior Engineer` | $150,000      | `Promotion`   |

## Using a custom first column for a people upload

ChartHop prefers **Work Email&#x20;**&#x61;s the first column in a people upload. However, you can use another unique identifier such as *payroll system ID*. When using payroll system ID as the first column, rename the **Manager** column to **manager\:workEmail&#x20;**&#x61;nd then add email addresses as normal.&#x20;

In the following example, the first column is a Paylocity ID and the manager's work email appears in the **manager\:workEmail** column:&#x20;

| **paylocityID** | **First Name** | **Last Name** | **Job Title**              | **Start Date** | **manager\:workEmail**    |
| --------------- | -------------- | ------------- | -------------------------- | -------------- | ------------------------- |
| `12345`         | `John`         | `Doe`         | `Customer Success Manager` | `1/5/2022`     | `fred.smith@charthop.com` |

## Uploading org changes with different dates

To upload multiple org changes with different dates, add them on separate lines of your spreadsheet with different values in the **Date** column. 

In the following example, John Smith received a title change on one date, but a salary adjustment on a different date.&#x20;

| **Work email**            | **Date**    | **Title**                         | **Base**   |
| ------------------------- | ----------- | --------------------------------- | ---------- |
| `john.smith@charthop.com` | `3/15/2022` | `Senior Customer Success Manager` | <br />     |
| `john.smith@charthop.com` | `6/15/2022` | <br />                            | `$100,000` |

## Updating name fields

When you update name fields, take note of the following guidelines:&#x20;

- To update a person's preferred name, add columns for **First Name&#x20;**&#x61;nd **Last Name&#x20;**&#x69;n addition to **Pref Name** and **Pref Last**.&#x20;
- To update a person's middle name, add columns for **First Name&#x20;**&#x61;nd **Last Name&#x20;**&#x69;n addition to **Middle Name**.&#x20;

The following table contains an example.&#x20;

| **Work Email**              | **First Name** | **Last Name** | **Pref Name** | **Middle Name** |
| --------------------------- | -------------- | ------------- | ------------- | --------------- |
| `jane.smith@charthop.com`   | `Jane`         | `Smith`       | `Joan`        |                 |
| `john.johnson@charthop.com` | `John`         | `Johnson`     |               | `Jeremy`        |

## Updating phone numbers

When you update phone numbers, take note of the following guidelines: 

- **Phone** defaults to mobile number.
- Use **contact.homePhone** to update a home number.
- Use **contact.workPhone** to update a work number.

## Importing multi-select fields

When you import fields with multiple selection options, take note of the following guidelines: 

- The ChartHop field you are uploading to must support multi-selection.
- The values in the spreadsheet must be contained within the same cell, and separated by semi-colons.

See the following table for examples on importing multi-select fields:

| **Engineering Skillset**  | **Badges**                      | **Owned Pets**                 |
| ------------------------- | ------------------------------- | ------------------------------ |
| `Backend;Frontend;Mobile` | `Diversity;Learning;Awareness;` | `Cat;Dog;Bird;Rabbit;Multiple` |

## Deleting imported jobs

You can delete jobs both individually and in bulk. To do this, you can upload a spreadsheet containing jobs that should be deleted using their Job IDs.  ChartHop prefers Job IDs as the first column.  Note that deleting a job will automatically create a backfill unless you add a **backfillJob** column with a value of `No`.

See the following table for an example of deleting a job and with no backfill:

| **Job ID** | **Change** | **backfillJob** |
| ---------- | ---------- | --------------- |
| `ACT1015`  | `Delete`   | `No`            |



:::hint{type="info"}
[Modules:](https://www.charthop.com/pricing/) <font color="#000000">**HRIS |** </font>**Engagement | Goals | Performance |&#x20;**<font color="#000000">**Compensation Reviews |** </font>**Headcount Planning**
:::


[title] Workday ATS
[path] Implementing ChartHop/Apps & Integrations/Payroll systems/Installing payroll apps/Workday/

:::hint{type="info"}
[Packages](https://www.charthop.com/pricing/)**:&#x20;**<font color="#a9a9a9">Basic</font> <font color="#000000">|</font> <font color="#000000">**Standard*** | **Premium**</font>****

\* Available as an add-on
:::

Along with payroll data, the Workday app also features its own ATS that syncs open jobs data between ChartHop and Workday.

## Workday ATS default field mappings

The Workday ATS app supports the following default field mappings listed in the table below:

| **ChartHop field label**   | **Workday field code**                                                      |
| -------------------------- | --------------------------------------------------------------------------- |
| Workday Req ID and Req     | wd\:Position\_Data.wd\:Position\_Definition\_Data.wd\:Position\_ID          |
| Title                      | wd\:Position\_Data.wd\:Position\_Definition\_Data.wd\:Job\_Posting\_Title   |
| Department                 | wd\:Organization\_Data.wd\:Name                                             |
| Location                   | wd\:Organization\_Data.wd\:Supervisory\_Data.wd\:Location\_Reference.wd\:ID |
| Manager and Hiring Manager | wd\:Organization\_Data.wd\:Manager\_Reference.wd\:ID                        |

## Workday ATS additional field mappings

The Workday ATS app supports additional field mappings for the following fields, which are known as *Operations* in Workday:

| **Operation name**                                                                                                                                                         | **Description**                                                                                                                                                                                                                                     |
| -------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| [Staffing/Get\_Position](https://community.workday.com/sites/default/files/file-hosting/productionapi/Staffing/v33.2/Get_Positions.html#Position_RestrictionType)          | Returns information for position management positions. If a position is filled, it identifies the worker filling the position. This operation is specified via `wd:Position_Data` in the field mappers.                                             |
| [Staffing/Get\_Organizations](https://community.workday.com/sites/default/files/file-hosting/productionapi/Staffing/v33.2/Get_Organizations.html#Supervisory_Org_DataType) | Returns organization information for a type of organization. If the request does not specify an organization, the operation returns information for all organizations. This operation is specified via `wd:Organization_Data` in the field mappers. |

## Requirements for additional field mapping

When mapping additional Workday fields, you need to consider the type of field you are mapping. Most Workday fields are stored as objects and need additional formatting when creating the mappings. To reference the path for additional mappings, for each parameter that is an object type, you need to specify the nested end parameter within the object:

Example path - `wd:Position_Data.wd:Position_Definition_Data.wd:Job_Posting_Title`

Using the above example, to pull *Title*, you would start with *Position\_Data* (as this is under the Staffing/Get\_Position operation), followed by *Position\_Definition\_Data* and ending with *Job\_Posting\_Title*. This final parameter (Job\_Posting\_Title) is a string and is pulled in as the field value.

:::hint{type="info"}
Note that when creating a nested path, you must add `wd` before the first parameter in the path, followed by a `.wd` for each additional parameter in the nested path.
:::


[title] Troubleshooting job matching fields
[path] ChartHop for Administrators/Managing data/Fields/Job matching for payroll syncs/

This section covers a series of potential issues you may run into when setting up or using fields in ChartHop to match payroll app requisition code, as well as their recommended solutions.

### Creating ChartHop fields to match requisition codes

**Does my job matching code have to use a custom field?**

No, you can use a custom or built-in fields as long as the field type is a *short text*. We recommend using a custom field so that you can customize the name of your job matching field.

***

**Can I have multiple open jobs with the same job matching code?**

Yes. If you have multiple open jobs with the same job matching code, ChartHop will match the job with the req code set on it the earliest (note this may be different from which job was \*created \*earliest).

***

**Does my custom field have a specific name like “req code”?**

No. No, you can use any phrase to name your job matching code.

### Using ChartHop fields to match requisition codes

**Why can’t I find the job matching code value on a person?**

The requirements for the job matching code are that the field belongs to a job. When you set up the mapper from the remote system → \[job matching code field], ChartHop works behind-the-scenes and uses the job matching code to find an open job for a new hire, then discards the value.

If you want to see the job matching code value saved on a person, you can create a separate field and mapper to track that.

***

**Do I need to delete the job matching code value from the person on the HRIS once the matching is complete?**

No. The job matching code is only used on new hires and won’t impact any employees who are already in ChartHop.

:::hint{type="warning"}
Note that changing the value in the HRIS will still update the value on the underlying job in ChartHop.
:::

**Why didn’t a(n) (existing) person transfer jobs when I changed their requisition code?**

Code matching only applies to new hires and open jobs, not existing employees or internal transfers.


[title] Hiring candidates
[path] Implementing ChartHop/Apps & Integrations/Applicant tracking systems/Jobvite/

:::hint{type="info"}
[Packages](https://www.charthop.com/pricing/)**:&#x20;**<font color="#a9a9a9">Basic</font> <font color="#000000">|</font> <font color="#000000">**Standard*** | **Premium**</font>****

\* Available as an add-on
:::

Once you hire a candidate in Jobvite, a new hire is automatically created in ChartHop to fill the mapped job in Jobvite. 

### New hire triggers

Whenever you mark a job as **Filled&#x20;**&#x69;n Jobvite, a webhook is fired providing ChartHop with the necessary information to pull in the pending hire. [Learn more](https://docs.charthop.com/setting-up-the-jobvite-integration#DaxDx).

:::hint{type="info"}
The webhook must be set up in Jobvite first. If you need help setting up the webhook, please contact your ChartHop implementation specialist. 
:::

Once the new hire is added to the HRIS system, the new hire information coming from the payroll system matches with and updates the pending new hire that is created in ChartHop from the new hire data flow.

## Set new hire announce dates

When candidates are hired and they are created in ChartHop, you have a choice about when you want them to show up publically to your organization

Under the option **New Hire Webhook Announce Date&#x20;**&#x73;elect one of the following:

- **Start date** - The new hire will not be org public until their start date.&#x20;
- **Today** - The new hire will be displayed immediately on the day of the sync
- **Earlier of start date and today (Default)**


[title] Workday
[path] Implementing ChartHop/Apps & Integrations/Payroll systems/Installing payroll apps/

With the Workday app, you can sync your payroll data to ChartHop, which automatically builds your org chart and keeps it up to date. Synced data includes contact information, demographics, compensation, managers, departments, and locations. 

ChartHop can also import information via [Workday Reports](docId\:TPYravwc9ljf2RB6ltrbt).&#x20;

### Workday at a glance

The following table summarizes ChartHop’s Workday app. 

| **Supported ChartHop packages**      | - <font color="#000000">Standard </font>
- <font color="#000000">Premium</font>                                                                                                                                                                                                                      |
| ------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Supported Workday package**        | HCM                                                                                                                                                                                                                                                                                                  |
| **Prerequisites**                    | A ChartHop account with the Owner role and a Workday account with administrator privileges.                                                                                                                                                                                                          |
| **API key permissions**              | In Workday, create an Integration System User (ISU) and ensure that the new user has read access to all Human\_Resources SOAP APIs.                                                                                                                                                                  |
| **Data direction**                   | Inbound from Workday to ChartHop                                                                                                                                                                                                                                                                     |
| **Sync cadence**                     | Daily or as needed                                                                                                                                                                                                                                                                                   |
| **Effective dating support**         | No                                                                                                                                                                                                                                                                                                   |
| **Additional field mapping support** | Yes, for ChartHop Premium customers, through the [profile](https://community.workday.com/sites/default/files/file-hosting/productionapi/Human_Resources/v33.2/Human_Resources.html) field category.  <br /><br />Please direct all custom mapping requests to ChartHop’s Professional Services team. |
| **How to install**                   | See ChartHop's [install guidelines](https://docs.charthop.com/installing-a-payroll-app) or view detailed instructions on the ChartHop app install page.                                                                                                                                              |
| **Payroll app overview**             | Read an [overview](https://docs.charthop.com/payroll-system-apps) of how how payroll apps work in ChartHop.                                                                                                                                                                                          |
| **Synced Data**                      | The default [synced data](https://docs.charthop.com/synced-data-from-workday) from Workday to ChartHop.                                                                                                                                                                                              |

### Workday ATS

Along with payroll, the Workday app also features its own built in ATS that syncs open jobs data between ChartHop and Workday.

[title] Categories
[path] ChartHop for Administrators/Managing data/Fields/

Use categories to organize your [Fields](docId\:XYrLLTZxiE-BV4ZKzEs_g) and [Automated Actions](docId:6k2uHP22MlgnhaOvzQ0yX). &#x20;

The categories you create are used in several places:

- [Fields](docId\:XYrLLTZxiE-BV4ZKzEs_g) page
- **Select columns** dialog on the [Data Sheet](https://docs.charthop.com/data-sheet)&#x20;
- Inside of [Automated Actions](docId:6k2uHP22MlgnhaOvzQ0yX)&#x20;
- [Tasks](docId\:AUgK05IqTO-acrgCmfF60) created by [Automated Actions](docId:6k2uHP22MlgnhaOvzQ0yX) with a [Category](docId\:TPKhVeXrOv1C9Jv2x6vDv)&#x20;
- [Files & Document management](docId\:xlW77DVhXGtkgh6WYiIcf)&#x20;
- [User access controls](docId\:puO-BB-nsw2cwlVm3_scy) and [Defining a custom role](docId:-WqkyL-Bv1QG2J9obE7uF)&#x20;

### Built in Categories

ChartHop comes with a set of built in categories that can be hidden but not deleted. Those categories are:&#x20;

- Basic
- Compensation: Bands
- Compensation: Base
- Compensation: Cash
- Compensation: Total
- Compensation: Variable
- Compensation: Equity
- Personal
- Recruiting
- Structure
- Time Off
- Onboarding&#x20;
- Offboarding



## Best practice for using Categories

It is a best practice to add all fields to a category. Create categories for logical grouping such as "Performance" for your performance related fields.&#x20;

Use built in groups when possible. Built in groups like Onboarding and Offboarding are used elsewhere in the app as default behavior

Keeping your fields organized can make things easier when using filters, creating Data Sheet views (adding columns), and using the Field list.&#x20;



### Create a field category

Create a field category when you want to categorize your custom fields. For example, you can create a new category to hold fields used in a custom form and then view the fields from that form on the **Data Sheet** in your new category.  

![](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/JRpG3UHN83ai473D66TWh_screenshot-2024-01-19-at-30619-pm.png "Create a category")

To create a field category: 

1. From the left sidebar, select **Data Model.**
2. From the sub-menu, select **Fields.**
3. On the **Field Categories** page, select **Create category**.
4. In the **Create category** dialog, add the following:
   - **Label** – Enter a category name for the **Select columns** dialog on the **Data Sheet**. 
   - **Fields** – Select the custom fields to add to the category. 
5. Select **Create category**.&#x20;

### Edit a field category

You can edit a field category that you’ve created when you need to rename it or add or remove fields from it. Although you can't edit the name of a built-in category, you can use it to categorize custom fields.&#x20;

:::hint{type="warning"}
You can’t recategorize built-in fields.&#x20;
:::

To edit a field category:

1. From the left sidebar, select **Data Model.**
2. From the sub-menu, select **Field Categories.**
3. On the left side of the **Field Categories** page, select the category to edit. Make changes as follows: 
   - **Label** – Rename the category.
   - **Custom fields contained** – Search for fields to add to the category or click the **X&#x20;**&#x74;o remove them. 
4. Select **Apply** to finish editing the category.&#x20;

### Reorder a field category

On the **Field Categories** page, categories appear in the same order as in the **Select columns** dialog on the **Data Sheet**. You can use the **Field Categories** page to reorder categories as they appear there. These changes are made for all ChartHop users.

To reorder field categories: 

1. From the left sidebar, select **Data Model.**
2. From the sub-menu, select **Field Categories.**
3. On the left side of the **Field Categories** page, drag categories into the desired order.&#x20;

![Reordering categories](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/4dw-r2EA5JHr7rJ-8dkol_screenshot-2024-01-19-at-30908-pm.png)

### Delete a field category

You can delete a custom category from the **Field Categories** page. Deleting a custom category doesn’t delete the fields within it. Rather, those fields become **Uncategorized**.

 To delete a field category: 

1. From the left sidebar, select **Data Model.**
2. From the sub-menu, select **Field Categories.**
3. On the left side of the **Field Categories** page, select the category to delete.
4. Select the Action menu (⋮) on the right side and choose **Delete**. 
5. In the **Delete category** dialog, enter the category name.
6. Select **Delete**. 

### Preview the column chooser

After creating and managing categories, you can preview them to see what they’ll look like in the **Select columns** dialog on the **Data Sheet**. 

To preview categories: 

1. From the left sidebar, select **Data Model.**
2. From the sub-menu, select **Field Categories.**
3. Select the down arrow next to **New Category** and choose **Preview column chooser**.

### Hide fields in a custom category

You can hide all fields in a custom category with a single action when you want to hide them from ChartHop. You can also hide individual fields. [Learn more](https://docs.charthop.com/working-with-the-fields-page#9Yqem).

Hiding all fields in a category is a powerful action. Hidden fields are no longer visible in:

- Forms
- Data Sheet
- Scenarios
- History page

:::hint{type="info"}
To restore all hidden fields in a category, from the menu (⋮) on the right side, select **Restore contained fields**.
:::

To hide fields in a custom category: 

1. From the left sidebar, select **Data Model.**
2. From the sub-menu, select **Field Categories.**
3. On the left side of the **Categories** page, select a category.
4. Select the Action menu (⋮) on the right side and choose **Hide contained fields**. 
5. In the **Hide field** dialog that appears if your fields are in use, select **Hide**.&#x20;



[title] ChartHop as the source of truth
[path] Implementing ChartHop/Apps & Integrations/Applicant tracking systems/Greenhouse/

With an outbound job data flow, ChartHop is the source of truth and the database of record.

Hiring data is entered and updated in ChartHop, and is then sent from ChartHop to the ATS using event-based trigger flows which update the information in the ATS immediately.

![](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/RJ-ZtbeWqSIF03PKkqGdd_screen-shot-2022-09-13-at-20549-pm.png "Open reqs data flows Outbound, while new hires data flows inbound.")

In an Outbound job data flow, open job and req data flow *outbound* from hiring plans in ChartHop to the ATS. This helps recruiting teams using ChartHop for headcount planning to move data seamlessly from the approved headcount plan into their recruiting system. However, once a hire is made in the ATS, that new hire data flows *inbound* from the ATS into ChartHop.

When a hire is made in the ATS, ChartHop creates a pending new hire which starts an open job according to its assigned start date. Then, once the pending new hire’s information is also entered into the HRIS/payroll system, ChartHop will merge the payroll profile with the existing pending new hire using the pending new hire’s personal or work email as a unique identifier.

### Advantages of Outbound job data flows

Outbound job data flows offer several advantages over inbound job data flows including:

- The immediate and real-time syncing of information.
- Allowing headcount planning and execution (for example, hiring against the headcount plan) to all take place within ChartHop.
- Allowing hiring managers (or recruiters, or even other stakeholders such as finance) to collaboratively propose and make changes to open jobs automatically without needing to access the ATS.

Outbound job data flows are recommended if:

- You utilize ChartHop for headcount planning and/or being the source of truth for the hiring plan.
- You have simple to standard ATS workflows where ChartHop can fulfill most of the data needs.
- You are looking for real-time visualization across both systems.
- You need more collaboration when managing new jobs.




[title] Importing backfills and internal transfers
[path] ChartHop for Administrators/Managing data/Importing spreadsheet data/Untitled/

When importing people and jobs via spreadsheet, ChartHop gives you control over how backfills are created and linked. This page covers the two backfill import columns, ChartHop's data model for overlapping roles, and the recommended workflow.

## ChartHop's data model for overlapping roles

ChartHop does not support two people in the same job simultaneously. When an employee is leaving and a replacement is onboarding, these are always **two separate jobs** — they may share a title, but they are distinct records.

If your source system uses a position ID, two jobs may temporarily share the same ID during an overlap. ChartHop cannot resolve which person belongs where based on position ID alone — use **work email** as the unique matching identifier instead.

## The two backfill columns

### `backfillJob` — suppress automatic backfill creation

Uploading a departure or termination automatically creates a backfill job by default. To prevent this, set `backfillJob` to `No`.

### `backfill` — link a person as the backfill for a departing employee

Set `backfill` to the **work email of the departing employee** to link the incoming person's job as their backfill. This carries over work history and connects the two jobs.

**The job must already exist** before you assign someone to it. Create it first — manually or in a prior import row — then set `backfill` on the incoming person's row.

## Recommended workflow

1. **Ensure the open job exists.** Omit `backfillJob` (or set it to `Yes`) when uploading the departure to auto-create the backfill job.
2. **Import the incoming person** with `backfill` set to the departing employee's work email.

| workEmail                                  | firstName | lastName | title           | startDate | backfill                                       |
| ------------------------------------------ | --------- | -------- | --------------- | --------- | ---------------------------------------------- |
| [jane.new@co.com](mailto\:jane.new@co.com) | Jane      | New      | Senior Engineer | 7/1/2025  | [john.smith@co.com](mailto\:john.smith@co.com) |

## Position ID matching

- Position ID alone cannot resolve job assignment during an overlap period.
- Work email is unique per person and is the recommended matching field.
- If both employees are already placed in their jobs, work email matching routes data correctly with no manual intervention.
- If neither is placed yet, manual setup will be needed.

*Modules: HRIS | Engagement | Goals | Performance | Compensation Reviews | Headcount Planning*

[title] Managing groups
[path] ChartHop for Administrators/

You can use the Groups feature to categorize employees into their respective departments, teams, locations, and more. Groups can either be created individually from the Groups page, or created in bulk via spreadsheet import. [Learn more](https://docs.charthop.com/importing-spreadsheet-data#ye-importing-groups-with-your-data).

Once you've created your groups such as departments and teams, you can filter ChartHop pages by these groups and use them in advanced queries to refine dashboards, permissions and so on.

Built-in Groups can be broken down in the following categories:

- Departments
- Teams
- Locations

In addition, you can create Custom group types (currently in Alpha).

:::hint{type="info"}
[Modules:](https://www.charthop.com/pricing/) <font color="#000000">**HRIS |** </font>**Engagement | Goals | Performance |&#x20;**<font color="#000000">**Compensation Reviews |** </font>**Headcount Planning**
:::

:::hint{type="info"}
﻿﻿[Roles](https://docs.charthop.com/user-roles-and-permissions): Technical owner | Owner | Org editor
:::


[title] Applicant tracking systems
[path] Implementing ChartHop/Apps & Integrations/

ATS integration apps allow you to configure and manage the flow of hiring data between ChartHop and your preferred application tracking system (ATS).

::embed[]{url="https://www.youtube.com/watch?v=y33IU1oG-vo"}

# How data migrates between ChartHop and an ATS

Before configuring an ATS integration app in ChartHop, you need to consider which type of data flow best serves your organization's needs. Depending on your needs, all ATS integration apps offer two types of data flows which offer distinct advantages.

## Inbound job data flows

An inbound job data flow brings open jobs from the ATS to ChartHop where the ATS is the source of truth. Inbound data flows support both on-demand syncs and scheduled daily syncs. In most cases, you can rely on daily syncs to pull updated hiring data from your ATS.

Data remains in and is updated within the ATS system. A daily sync pulls information from the ATS to ChartHop. You can also stream data ad-hoc through an on-demand **Sync Jobs** button that can be accessed within the ATS application configuration page in ChartHop.

![Open reqs and new hire data flow Inbound. ](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/Ki8433pvYjy5-dgPdgL50_screen-shot-2022-09-13-at-21013-pm.png "   ")

When a hire is made in the ATS, ChartHop creates a pending new hire which starts an open job according to its assigned start date. Once the pending new hire’s information is also entered into the HRIS/payroll system, ChartHop will merge the payroll profile with the existing pending new hire using the pending new hire’s personal or work email as a unique identifier.

### Advantages of inbound job data flows

Inbound job data flows offer a few advantages over outbound job data flows which include:

- Recruiting teams only having to work out of the ATS.
- No changes are required to your standard hiring workflow.
- The process is often easier to start with and implement for first-time users.

Inbound job data flows are recommended if:

- You don't plan on using ChartHop as the source of truth for your hiring plan.
- You work with a team that is very comfortable with their current ATS workflow.
- You have specific data needs with your ATS that ChartHop can’t fulfill such as highly unique systems and data types.
- You do not plan to give recruiters access to ChartHop.

## Outbound job data flows

With an outbound job data flow, ChartHop is the source of truth and the database of record.

Hiring data is entered and updated in ChartHop, and is then sent from ChartHop to the ATS using event-based trigger flows which update the information in the ATS immediately.

![Open reqs data flows Outbound, while new hires data flows inbound.](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/RJ-ZtbeWqSIF03PKkqGdd_screen-shot-2022-09-13-at-20549-pm.png "   ")

In an Outbound job data flow, open job and req data flow *outbound* from hiring plans in ChartHop to the ATS. This helps recruiting teams using ChartHop for headcount planning to move data seamlessly from the approved headcount plan into their recruiting system. However, once a hire is made in the ATS, that new hire data flows *inbound* from the ATS into ChartHop.

When a hire is made in the ATS, ChartHop creates a pending new hire which starts an open job according to its assigned start date. Then, once the pending new hire’s information is also entered into the HRIS/payroll system, ChartHop will merge the payroll profile with the existing pending new hire using the pending new hire’s personal or work email as a unique identifier.

### Advantages of Outbound job data flows

Outbound job data flows offer several advantages over inbound job data flows including:

- The immediate and real-time syncing of information.
- Allowing headcount planning and execution (for example, hiring against the headcount plan) to all take place within ChartHop.
- Allowing hiring managers (or recruiters, or even other stakeholders such as finance) to collaboratively propose and make changes to open jobs automatically without needing to access the ATS.

Outbound job data flows are recommended if:

- You utilize ChartHop for headcount planning and/or being the source of truth for the hiring plan.
- You have simple to standard ATS workflows where ChartHop can fulfill most of the data needs.
- You are looking for real-time visualization across both systems.
- You need more collaboration when managing new jobs.

:::hint{type="info"}
[Packages](https://www.charthop.com/pricing/)**:&#x20;**<font color="#a9a9a9">Basic</font> <font color="#000000">|</font> <font color="#000000">**Headcount Planning** | </font><font color="#000000">**Compensation Reviews** | </font><font color="#000000">**Performance** | </font><font color="#000000">**Engagement** </font>
:::

:::hint{type="info"}
﻿﻿[Roles](https://docs.charthop.com/user-roles-and-permissions): Technical owner | Owner&#x20;
:::


[title] Troubleshooting payroll data
[path] Implementing ChartHop/Apps & Integrations/Payroll systems/

:::hint{type="info"}
[Modules:](https://www.charthop.com/pricing/) <font color="#000000">**HRIS |** </font>**Engagement | Goals | Performance |&#x20;**<font color="#000000">**Compensation Reviews |** </font>**Headcount Planning**
:::

This section covers a series of topics regarding how payroll apps sync data.

## Employee data

If an employee has multiple profile IDs in your payroll system, the sync may fail due to the conflicting data. To fix this, we recommend validating that all employees have only a single profile instance coming from the payroll system prior to syncing.

### Syncing empty fields

If any field in your employee data is empty, the payroll app skips the field during both initial and subsequent syncs.

### Syncing location data

When you sync location data between your payroll system and ChartHop, make sure you use the exact same location names in both systems. Also, if your HRIS uses numbers or codes for locations, you can add these to ChartHop using **Aliases** so they match. [Learn more](https://docs.charthop.com/group-names-and-aliases#t1LA4).

:::hint{type="warning"}
Contact ChartHop support to assist you if you notice any duplicate or missing location data after performing a sync.
:::

## Job data

When a payroll app runs, it compares the data in ChartHop against the data in the payroll system. When you have jobs or employees in ChartHop that are not included in your payroll system, those jobs and people are skipped during the sync and are not touched or removed from ChartHop.

It is safe to create jobs and people in ChartHop without updating your payroll system, although we recommend keeping both systems up-to-date.

This can happen when the payroll system doesn't cover the whole organization. For example, if you have contractors or international employees that are not in the payroll system. or even when multiple payroll systems are in use.

### Reporting to open jobs

If a position is vacated before a replacement can be hired or a new level may be created in an organization as it grows, an employee may report to an *open job* on ChartHop.

There probably won't be a record of this open role on the payroll system's side since there is no payroll data associated with it yet. Within your payroll system, you should set the employee's manager to be the first actual person above the open role.

For example, if Bob reports to an open VP of Marketing job in ChartHop, which, in turn, reports to Alice, Bob's manager should be set to Alice in the payroll system. Meanwhile, the entire manager chain remains accurate in ChartHop and will not be disrupted during a sync.

### Title changes and promotions

When you change someone's title in your payroll system, the title change syncs to ChartHop as a neutral change, not a promotion or a demotion. If the title change is a promotion, you should mark it as such on the History page in ChartHop, immediately following the sync.

### New hires

When you add an employee to your payroll system, the sync will first try to match the new hire with a person in ChartHop who has the same email, name, or contact ID.

If the sync cannot find such a person, it will look for open roles with the exact title and manager and hire the person into that role, dated to the hire date in the payroll provider. If the sync cannot find any open positions that are a match, it will create a new job and hire the person into that.

If a new job gets created erroneously due to a mismatched title or manager, the best way to fix it is to:

1. Manually undo both the hire and the new job creation in ChartHop.
2. Ensure that an open role exists in ChartHop with the correct title and manager.
3. Re-run the sync.

### Correcting data

Keeping in mind that ChartHop reflects the current data in your payroll system, if you see data that looks wrong or needs to be updated, you should make that data change in the payroll system.

Making changes in ChartHop without updating the source system will result in that change being overwritten by the next scheduled or manual sync. 

Additionally, employee records still remaining in ChartHop despite having been deleted in your payroll after a sync is expected behavior. Since the record was deleted and not terminated in the payroll system, ChartHop cannot update a profile it has no reference to.


[title] Create a spreadsheet template
[path] ChartHop for Administrators/Managing data/Importing spreadsheet data/

You can use the **Data Sheet** to design a spreadsheet that you can use to upload data. On the **Data Sheet**, you can select the columns you want to use in your spreadsheet and then download a .csv that can serve as a template for your import. 

You need to include any required fields as columns. Required fields vary according to the type of data you are uploading. For example, when uploading data associated with an employee, you need to include the name of the employee and their manager. 

:::hint{type="info"}
Uploading images via a spreadsheet is not supported. Be sure to deselect that column before downloading your .csv.
:::

1. Select **Data Sheet&#x20;**&#x66;rom the left sidebar.
2. Select **Select Columns**.
3. Select the columns you want to include in your spreadsheet template in the Select Columns dialog.  Be sure to unselect the image column.
4. Select **Export CSV&#x20;**&#x6F;r select the **Edit ▼** dropdown and select **Export CSV**. The **Export CSV&#x20;**&#x64;ialog displays.
5. In the **Export type** dropdown, select the **Data Sheet** export type.
6. Select **Export**.
7. Select **Download**. The spreadsheet opens in your default spreadsheet application.
8. Delete all of the rows in the spreadsheet except for the header row. 
9. Complete the new spreadsheet and upload it to ChartHop.&#x20;

### Open a Data Sheet CSV download in Excel

When you open a **Data Sheet** .csv download in Excel, you’re prompted with a Text Wizard to ensure the data displays correctly.

1. Open the file you downloaded in Excel.
2. In the Excel Text Wizard, select **Delimited** and select **Next**.
3. Select **Comma** and deselect **Tab**, and then select **Next**.
4. Select **Finish**.


[title] Sync history
[path] ChartHop for Administrators/Managing data/

On the **App sync history** page, you can view and manage data syncs between ChartHop and your Applicant Tracking Systems (ATS), Payroll, and Equity systems, along with spreadsheet imports.

![App sync history page](https://lh3.googleusercontent.com/fCAZi2vMUGRUYiaMZoXK_WbAD4fFQ03AgG2McpXVjLgLwcymbVzOoWUM5asim5qq0-Gs4kdJHeql5uA0lHB1nlpAUYtpjtPCL6WvnS2nqCB_p_grBC7k0RxLqBx08NhGpHOXRZn7GPUnxvs5_tCjJSE3yfXwnEWUNJ7SPt_vjt9URl6acRBfaEtLVw "   ")

## Sync history access by role

Depending on your org role, there are restrictions on data and categories you can view in a particular sync. As a general principle, only users who have access and may need to manage the data being synced are able to see the relevant app sync. See the table below for a general list of sync details that each role has access to view:

| **Role**          | **Access**                                                                                                                                                                                                                                 |
| ----------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| Owner             | Unrestricted access                                                                                                                                                                                                                        |
| Org Editor        | Unrestricted access                                                                                                                                                                                                                        |
| Technical Owner   | - Able to view all sync categories
- Restricted view of sync details
  - ATS  
    - Cannot see open job titles
    - Cannot see the data being synced
  - Payroll
    - Cannot see errors or warnings
    - Cannot download imported data |
| Recruiting Editor | May only view inbound or outbound ATS job data syncs.                                                                                                                                                                                      |
| Recruiters        | May only view inbound or outbound ATS job data syncs.                                                                                                                                                                                      |
| Other roles       | No access.                                                                                                                                                                                                                                 |

## Understanding sync history information

On the **App sync history** page, you can view a list of information about your syncs including, their status, direction, cause, and summaries. The **App sync history** page contains a list view that lays out a summary of your sync history. By default, the list view displays the sync history of all ATS, payroll, and equity apps that you have installed in ChartHop.

### Sync completed

The **Sync completed** column lists the completion time for a sync. You can select the link under the **Sync completed** column to access that particular sync's details page. [Learn more](https://docs.charthop.com/viewing-sync-details).

### App name

The **App name** column contains information about the specific app that had a sync (e.g., the name and the logo) 

### Status

The **Status** column tracks the result of a sync. Sync statuses are as follows:

| **Status**           | **Description**                                                                                                                                                                        |
| -------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Complete             | The sync was successfully completed without errors.                                                                                                                                    |
| Complete with Errors | The sync was completed, but experienced partial errors.                                                                                                                                |
| In progress          | The sync is currently in progress. Note: ATS syncs will not show up on the sync history page until the entire sync is completed, and therefore, will not have an “In-Progress” status. |
| Failed               | The sync did not complete successfully due to error(s).                                                                                                                                |

### Direction

The **Direction** column tracks a sync's data flow type. Directional sync types are as follows:

| **Type** | **Description**                                                                                          |
| -------- | -------------------------------------------------------------------------------------------------------- |
| Inbound  | Data is pulled  from an external system to ChartHop, with the external system being the source of truth. |
| Outbound | Data is pushed from ChartHop to an external system, with ChartHop being the source of truth.             |

### Cause

The **Cause** column tracks the reason a sync was triggered. Cause types are as follows:

| **Type**    | **Description**                                                                                                                   |
| ----------- | --------------------------------------------------------------------------------------------------------------------------------- |
| Scheduled   | Triggered automatically, based on the configurations set in an apps’ settings page Typically occurs when “Run Daily” is selected. |
| Manual      | Triggered manually,                                                                                                               |
| Event-based | For ATS apps only. Triggered by a specific criteria or condition (e.g., candidate is hired in the ATS),                           |
| Web Service | For FP\&A apps only. ChartHop data is made available for FP\&A apps to pull from.                                                 |

### Summary

A sync's summary provides a high-level overview of the sync results.

To view more information about specific errors and/or warnings related to a sync, visit the sync's [App sync details](https://docs.charthop.com/viewing-sync-details) page by selecting the link found under the **Sync completed** column.

### Requested by

The person responsible for initiating the sync. If the **Cause** of the sync triggered by a **Manual** or **Event-Based** action in ChartHop, then the column will display the name of the employee that triggered it. Otherwise, if the **Cause** of the sync is **Scheduled&#x20;**&#x6F;r otherwise was triggered by an action in a remote system, then the column will display the name of the app.

:::hint{type="info"}
[Packages](https://www.charthop.com/pricing/)**:&#x20;**<font color="#a9a9a9">Basic</font> <font color="#000000">|</font> <font color="#000000">**Standard*** | **Premium**</font>****

\* Available as an add-on
:::

:::hint{type="info"}
<font color="#000000">: Technical Owner | Owner | Org Editor | Recruiting Editor | Recruiter</font>
:::


[title] Installing the Carta app
[path] Implementing ChartHop/Apps & Integrations/Equity syncs/Carta/

This section covers setting up the Carta integration app, which allows you to sync your employee stock grants to ChartHop. 

## Review your equity system data

ChartHop recommends reviewing the data in your equity system to ensure it is what you expect before you sync it to ChartHop.&#x20;

Before installing this app, ensure that the employee email addresses in Carta match those in ChartHop. User matching is based on the employee's email address (work email or home email) or employee name. If a user exists in Carta but not in ChartHop, that user is ignored during sync.

### Install the Carta app

After you have reviewed your equity system data, you can install the Carta integration app in ChartHop.

1. From the left sidebar, select **Apps & Bundles**.
2. From the sub-menu, select **Apps**.
3. Select the **Availible Apps** tab.
4. Scroll to your equity app and select **Install&#x20;**&#x6F;n the far right of the respective app's row.


### Connect the Carta app

When you select **Install**, you are prompted to authorize a connection between ChartHop and Carta. To do this, select **Go to Carta API**.&#x20;

If not already, log in to Carta using your credentials. Carta shows you some details about the data ChartHop will be accessing. Select the issuer account in Carta to connect to ChartHop, then select **Authorize**.

Your Carta account must have either a [Company Viewer, Company Editor, or HR Admin role](https://support.carta.com/s/article/corporate-permissions#permissions) role. [This guide from Carta](https://support.carta.com/s/article/corporate-permissions) explains how to check a user's role.

:::hint{type="warning"}
You can only connect one Carta issuer account to a ChartHop organization account.
:::

You should be redirected back to ChartHop when the authorization is complete.

### Configure data sync settings for Carta

Data sync settings control when data is synced between ChartHop and Carta. By default, data can be synced on a weekly basis. Otherwise, you can save your settings and configure the sync to occur at another time.

- Select one of the two options:
  - **Enable auto sync** - This option syncs your organizational roster from Carta's API weekly.
  - **Save settings** - This option skips the sync setup for now and saves your settings up to this point so that you can set up your sync details later.
- Select **Finish setup** when you're done.

### Run an initial one-time sync of your equity data

After you first configure your equity data for Carta, you should run a one-time sync for **All Grants** to populate your grant data and verify that the sync is operating as you expect.

To run a one-time sync for all grants:

1. Under Carta's **Manage app** settings page, select the **Run one-time sync** button.
2. You'll be given three options to sync:
   - Sync Recent Grants
   - Sync All Grants
   - Sync Valuations Only
3. Select **Sync All Grants**.

### Configure your equity app sync to run weekly

After you’ve synced your data for the first time and verified your vesting schedules, you should configure a weekly sync. The value of syncing your equity data to ChartHop is that it ensures that your equity grant data is always up to date. 

1. From the left sidebar, select **Apps & Bundles**.
2. From the sub-menu, select **Apps**.
3. Select the **Installed Apps** tab.
4. Scroll to your equity app and select the gear (settings) icon on the far right of the row to view app settings.
5. Within the **App status & sync settings** section, select the **Edit&#x20;**(pencil) icon.
6. Toggle the auto-sync option to on.
7. Select **Save**.

### Set up valuations

To show the dollar values of grants in ChartHop, you will need to first enter the valuation for your shares. ChartHop only pulls 409A valuations from Carta. Note that the authenticated users must have a Carta account with [Full Access or Company Editor ](https://support.carta.com/s/article/corporate-permissions#permissions)access roles. See [this guide to set up stock valuations](https://docs.charthop.com/setting-up-stock-valuations).


[title] Job matching for payroll syncs
[path] ChartHop for Administrators/Managing data/Fields/

ChartHop provides *Job code matching* which allows you to connect your open jobs and new hires between ChartHop and your payroll systems.

With job code matching you can create custom fields that map data between ChartHop and your preferred payroll system allowing you to:

- Match jobs between ChartHop and your payroll system without needing to rely on an ATS.
- Prevent the creation of duplicate jobs.

To use requisition code matching, your setup must do the following:

1. Your new roles must be opened directly in ChartHop.
2. New hire information must only come in from payroll syncs and **not** from an ATS.
3. Your payroll system must have some type of system where unique codes are assigned to jobs such as a job, requisition, or budget code, and those codes must be API accessible.

:::hint{type="success"}
### Use case: Syncing new hire information automatically into open ChartHop jobs

Anya's organization hires several new software engineers and captures the information in their payroll system, including a req code for each job. Anya wishes to sync the new hire data like salaries, addresses, phone numbers, emails, and other information from her payroll system into ChartHop. Anya's company does not integrate ChartHop with an ATS system.

- Within her payroll system, Anya uses a field called "**Req code**" to associate an alphanumeric code with new jobs.
- Anya creates a custom field in ChartHop called "**Req code**".
- Within ChartHop, Anya creates a new job of a **Software Engineer** and assigns the same req code as is associated with the open job in her payroll system such as **ENG-110.**

When Anya runs a new payroll sync, the jobs created in ChartHop with the matching **ENG-110** are updated with all the mapped information from the payroll system.
:::

## Set up job code matching

:::hint{type="warning"}
**Each job code value must be unique across your open jobs.**

If more than one open job in ChartHop has the same job matching code value, ChartHop will match the payroll record to whichever job had that code value set first. The other jobs with the same code will not receive the new hire data. To avoid missed syncs, make sure each open job has a distinct code value that corresponds to a single record in your payroll system.
:::

To configure your ChartHop organization for job code matching, you must:

1. Decide whether to use an existing ChartHop field or create a new field to be used for the matching job code.
2. Work with ChartHop implementation to have the new field mapped and the option turned on for your org.
3. After implementation, ensure that each time you open a job, you complete the ChartHop field. The value for the ChartHop field must match the expected value from your payroll system in order for new jobs to be synced.

:::hint{type="info"}
Configuring job code matching in your ChartHop organization requires the help of a ChartHop implementation specialist.
:::

## Related articles

- [Using a job matching field](https://docs.charthop.com/using-a-job-matching-field) - Step-by-step instructions for assigning a job matching code to an open job.
- [Creating job codes](https://docs.charthop.com/creating-job-codes) - Set up the job code catalog in Settings.

[title] Add or update a hiring plan
[path] ChartHop for Administrators/Managing data/Importing spreadsheet data/

You can import a CSV or spreadsheet file to make changes to open roles. Ensure that the data in your file conforms to ChartHop's formatting requirements.&#x20;

To upload a hiring plan to ChartHop, complete the following steps:&#x20;

1. From the Settings menu (gear icon) in the left sidebar, select **Import Spreadsheet data**.
2. On the right side of the page, select **Add or update hiring plan**.&#x20;
3. Select **Download template**. A CSV template downloads to your computer.
4. Add your data to the CSV template, including any optional columns.&#x20;
5. Save the template under a new name.
6. On the **Upload your spreadsheet** page, drag the template to the target area.
7. (Optional) To create new [groups](https://docs.charthop.com/creating-and-managing-groups) in your ChartHop org, select **Allow spreadsheet to create new groups**. Note that this does not include [Job Codes](https://docs.charthop.com/job-codes), or [Bands](https://docs.charthop.com/compensation-bands), which must be created manually.
8. Select **Upload to org**.
9. For any fields in your spreadsheet that weren’t automatically matched to a ChartHop field, select a ChartHop field to match to your spreadsheet column. You may need to scroll to see all unmatched fields, which are highlighted in red.&#x20;
10. Once all columns are matched, select **Continue with import** to finish importing data.&#x20;
11. (Optional) When upload is complete, select **View Details** to see a summary.&#x20;

:::hint{type="warning"}
When matching spreadsheet columns with ChartHop fields, select **None of these** to skip a column. Skipped columns are not imported. &#x20;
:::

### Required columns

The following columns are required:&#x20;

| **Column** | **Description**                                     | **Example**                |
| ---------- | --------------------------------------------------- | -------------------------- |
| Job title  | The job title.                                      | `Customer Service Manager` |
| Start date | The job's start date in m/d/yyyy format.            | `6/1/2022`                 |
| Manager    | The email address for the job’s direct manager.     | `example@charthop.com`     |
| Date       | Effective date of job creation, in m/d/yyyy format. | `5/1/2022`                 |

### Optional columns

The following columns are optional:

| **Column**        | **Description**                                                                                                                                                                                                                                                                                       | **Example**            |
| ----------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------- |
| Location          | The job’s geographic locations; separate multiple locations with semicolons.                                                                                                                                                                                                                          | `Los Angeles`          |
| Department        | The job's department.                                                                                                                                                                                                                                                                                 | `Enterprise`           |
| Recruit           | Recruitment status, as follows: <br />* active - Job is being recruited.
* passive - Inbound candidates are being reviewed, but no active search is in progress.
* inactive - Job is not being recruited. 
* offer - Offer has been made, but not yet accepted.
* pending - Hire has been made.&#x20; | `active`               |
| Sensitive         | Whether the job is a sensitive or confidential role: <br />* org - Can view information that is public to the org.
* sensitive - Can view information only available to managers in the job’s reporting line. 
* high - Can view all highly sensitive information.&#x20;                              | `org`                  |
| Priority          | The job’s priority, as follows: <br />* -2 - Lowest priority.
* -1 - Low priority.
* 0 - Medium priority.
* 1 - High priority.
* 2 - Highest priority.                                                                                                                                                | `-1`                   |
| Team              | The team or teams the job will belong to; separate multiple teams with semicolons.                                                                                                                                                                                                                    | `Engineering`          |
| Recruiter         | The email address of the recruiter responsible for the job.                                                                                                                                                                                                                                           | `example@charthop.com` |
| Employment Status | The job’s employment status, as follows:<br />* full - Full time job.
* part - Part time job. 
* temp - Temporary job. 
* intern - Intern.
* contract - Contract job. 
* expat - Overseas job with special tax status.&#x20;                                                                          | `full`                 |
| Base              | The job’s annual base income.                                                                                                                                                                                                                                                                         | `$130,000`             |
| Variable          | The job’s annual bonus or on-target earnings (OTE).                                                                                                                                                                                                                                                   | `$25,000`              |
| variableType      | The type of variable compensation for the job: bonus or commission.                                                                                                                                                                                                                                   | `bonus`                |
| Hourly Comp       | The job’s compensation if paid hourly.                                                                                                                                                                                                                                                                | `$50.00`               |
| Currency          | Three-letter currency code, if non-USD, for the currency the job will be paid in.                                                                                                                                                                                                                     | `GBP`                  |
| Band              | Name of the compensation band the job belongs to.                                                                                                                                                                                                                                                     | `L3`                   |
| Planned Grant     | Target stock compensation planned but not yet issued.                                                                                                                                                                                                                                                 | `$30,000`              |
| placement         | Where to place a job on the org chart: either normally or immediately below and beside the manager.                                                                                                                                                                                                   | `normal`               |
| jobDescription    | Job description. While formatting is not maintained during CSV upload, you can edit descriptions in ChartHop.                                                                                                                                                                                         | Long-form text         |
| indirect          | Email address for the job’s dotted line manager.                                                                                                                                                                                                                                                      | `example@charthop.com` |
| Lever Req ID      | Identifying number for the open job in the Lever applicant tracking system.                                                                                                                                                                                                                           | 81c64d2a-0c80-479d     |
| Greenhouse Job ID | Identifying number for the open job in the Greenhouse applicant tracking system.                                                                                                                                                                                                                      | 4656564003/538709703   |
| Jobvite Req ID    | Identifying number for the open job in the Jobvite applicant tracking system.                                                                                                                                                                                                                         | 44415553003124643      |



:::hint{type="info"}
[Modules:](https://www.charthop.com/pricing/) <font color="#000000">**HRIS |** </font>**Engagement | Goals | Performance |&#x20;**<font color="#000000">**Compensation Reviews |** </font>**Headcount Planning**
:::

:::hint{type="info"}
[Roles](https://docs.charthop.com/user-roles-and-permissions): Owner | Org editor
:::


[title] Synced data from Carta
[path] Implementing ChartHop/Apps & Integrations/Equity syncs/Carta/

:::hint{type="info"}
[Packages](https://www.charthop.com/pricing/)**:&#x20;**<font color="#a9a9a9">Basic</font> <font color="#000000">|</font> <font color="#000000">**Headcount Planning** | </font><font color="#000000">**Compensation Reviews** | </font><font color="#000000">**Performance** | </font><font color="#000000">**Engagement** </font>
:::

The following table lists the default data set synced from Carta to ChartHop.&#x20;

| **ChartHop field label**     | **ChartHop field code** | **Carta field code**         |
| ---------------------------- | ----------------------- | ---------------------------- |
| Name                         | name                    | stakeholder.fullName         |
| Planned grant                | grant                   | optiongrant.id               |
| Date                         | date                    | optiongrant.issueDate        |
| Grant Cancel Date (optional) | grantCancelDate         | optiongrant.canceledDate     |
| Grant Vest                   | grantVest               | optiongrant.grantVest        |
| Grant Vest Date              | grantVestDate           | optiongrant.vestingStartDate |
| Planned grant (type)         | grantType               | optiongrant.stockOptionType  |
| Planned grant (shares)       | grantShares             | optiongrant.quantity         |
| Grant Price                  | grantPrice              | optiongrant.exercisePrice    |





[title] Installing the Ultipro app
[path] Implementing ChartHop/Apps & Integrations/Payroll systems/Installing payroll apps/Ultipro (UKG Pro)/

This section covers setting up the Ultipro integration app, which allows you to sync your employee roster to ChartHop. 

## Review your payroll system data

Your ChartHop payroll app syncs your employee data from your payroll system and builds your org chart in ChartHop. Once your Org Chart is created, you can start using ChartHop.

ChartHop recommends reviewing the data in your payroll system to ensure it is what you expect before you sync it to ChartHop. For example, if an employee has multiple system IDs in your payroll system, that employee’s data won’t sync properly. You should also be sure that your payroll system reflects an accurate view of your organization, including reporting structures, employee locations, and compensation. 

## Create an Ultipro User account

Before you can install the Ultipro app, you need to create an Ultipro user account and enable some specific permissions.  Link your Ultipro user account to the Ultipro app in ChartHop using your created login credentials when you install the app.

To create an Ultipro user account:

1. Login to Ultipro, and navigate to **System Configuration**.
2. Select **Service Account Administration**.
3. Select **Add**.
4. Enter a Username, Password, and Email for for the account
5. &#x20;Select the Web Service permissions and enable view permissions for the following options:
   - compensation-details
   - person-details
   - employee-job-history-details
   - Employee/User-defined fields
   - Personnel Integration
6. Select **Save**.

## Copy an Ultipro Customer API key

For ChartHop to access your organization's Ultipro payroll data, you need to use your Ultipro **Customer API key**. The key is automatically created when you create your Ultipro user account and configure your **Service Account Administration** settings.

To access your Ultipro API key: 

1. In Ultipro, navigate to **Service Account Administration**.
2. Copy the **Customer API key**.

## Create an Ultipro domain/service host name

You need the domain/service host name when you install the Ultipro app in ChartHop.

To access your Ultipro domain/server host name:

1. In Ultipro, select **Menu**.
2. Select **System Configuration**.
3. Select **Security**.
4. From the **Web Services** page, copy the **Domain/Service Host Name&#x20;**&#x69;n the following format:
   - &#x20;`service$.ultipro.com` (where $ is a numeric value).

## Install the Ultipro app

After you have your Ultipro Customer API key and service account administration credentials, you can install the Ultipro integration app in ChartHop.

1. From the left sidebar, select **Apps & Bundles**.
2. From the sub-menu, select **Apps,&#x20;**&#x69;f not already pre-selected.
3. Select the **Availible Apps** tab.
4. Scroll to your payroll app and select **Install&#x20;**&#x6F;n the far right of the respective app's row.

### Connect the Ultipro app

When you select **Install**, you'll be prompted to walk through configuring your payroll app.

1. Enter your **Service Account Username&#x20;**&#x61;nd **Service Account Password&#x20;**&#x69;n the provided fields.
2. Paste your Ultipro **Customer API key** to the provided field.
3. Paste your **Domain/Service Host Name&#x20;**&#x74;o the provided field.
4. Select **Next step**.

### Configure data sync settings for Ultipro

Data sync settings control how and what data is synced to ChartHop from your payroll system. For example, you can choose whether or not to create a backfill position in ChartHop when you have a departure in your payroll system. Other advanced settings allow you to exclude certain employees.

- Select one of the two options:
  - **Automatically create backfills** - This option creates a backfill position in ChartHop (open job) when an employee is marked as departed in your payroll system.
  - **Sync departures only** - This option removes the departed employee from ChartHop. The employee's job history remains in ChartHop.

### Configure advanced settings

Advanced settings allow you to better control how your payroll data syncs to ChartHop.

ChartHop recommends accepting the default values for these settings. Please get in touch with ChartHop Support or your Customer Success Manager for assistance if needed.

1. Expand the **Advanced settings** section. 
2. Use the following table to guide you through advanced settings decisions. 
3. When finished, select **Next step**.

| **Setting**                              | **Description&#xA0;**                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               |
| ---------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Missing location information<br /><br /> | Select one of the two options for what should happen if location information is set for an employee.<br />* **Set Remote as the default location in ChartHop** - When selected, any open role that does not have a location set will be set to have a Remote location in ChartHop.
* **Leave location blank in ChartHop&#x20;**- When selected, any open role that does not have a location set in your payroll app will not have a location set in ChartHop.                                                                                                                                                       |
| Advanced sync options                    | Select the data changes you want to include in your sync. You can include some or all of the following employee data: <br />* Job titles 
* Managers 
* Groups 
* Compensation 
* Hire dates                                                                                                                                                                                                                                                                                                                                                                                                                        |
| Overwrite person fields <br /><br />     | ChartHop recommends using this setting to avoid needing to update both ChartHop and your payroll system when a change is made to any field value that is synced from your payroll system.<br /><br />When you choose this option, your payroll system remains the source of truth for the following fields in ChartHop: birthdate, gender, home address, and so on. Any edits you or an employee make to this data in ChartHop are overwritten during synchronization. This can pose an issue when someone uses ChartHop to update employee fields in ChartHop, without requesting an update in the source system.  |
| Historical data                          | Choose whether or not you want to sync historical data. You can turn this off if you want to exclude any historical changes before the date of your initial sync.                                                                                                                                                                                                                                                                                                                                                                                                                                                   |
| Exclude IDs                              | To exclude specific individuals from the sync, enter their unique payroll system IDs here, separated by commas. <br /><br />Generally, the company ID should be left blank unless otherwise informed by your ChartHop Customer Success team.                                                                                                                                                                                                                                                                                                                                                                        |
| Job change history<br />                 | When importing job data into ChartHop, include changes within the specified period.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 |

### Run an initial one-time sync of your payroll data

When you first configure your payroll app, you should run a one-time sync to verify that the sync is operating as you expect it to and that your data is what you expect.

To run a one-time sync:

1. In the setup wizard, select the **Run one-time sync** option.
2. Select **Finish setup**.

## Verify your data in ChartHop

After running your first sync, you can use the Data Sheet and Org Chart pages to spot-check your data. You can use the Sync History page to verify when the sync was run and if it encountered any issues. 

You should spot-check your ChartHop org for the following:

- Correct management reporting lines
- Compensation data
- Employee information on profiles (names, addresses, and so on)
- Job titles
- Departments
- Locations

:::hint{type="info"}
Remember that most issues with your synced data originate in your payroll system. ChartHop allows you to visualize your employee data to make finding these discrepancies easier. Still, you’ll need to fix any data discrepancies in your payroll system and rerun the sync to view the fixes in ChartHop.
:::

## Configure your payroll app sync to run daily

After you’ve synced your data for the first time and verified your Org Chart, you should configure a daily sync. The value of syncing your payroll data to ChartHop is that it ensures that your employee data is always up to date. 

1. From the left sidebar, select **Apps & Bundles**.
2. From the sub-menu, select **Apps,&#x20;**&#x69;f not already pre-selected.
3. Select the **Installed Apps** tab.
4. Scroll to your payroll app and select the gear (settings) icon on the far right of the row to view app settings.
5. Within the **App status & sync** settings section, select the **Edit** (pencil) icon.
6. Toggle the auto-sync option to on.
7. Select **Save**.



[title] Using Jobvite to open jobs
[path] Implementing ChartHop/Apps & Integrations/Applicant tracking systems/Jobvite/Jobvite as the source of truth/

:::hint{type="info"}
[Packages](https://www.charthop.com/pricing/)**:&#x20;**<font color="#a9a9a9">Basic</font> <font color="#000000">|</font> <font color="#000000">**Standard*** | **Premium**</font>****

\* Available as an add-on
:::

When you configure your Jobvite app to have an inbound flow, Jobvite serves as the primary source of truth for open jobs. Depending on the status of a job in Jobvite, it translates to a specific status for the same job in ChartHop.

﻿﻿When you open a job in Jobvite, that job is also created and opened in ChartHop. As a result, any changes you make to open roles in ChartHop are not reflected in Jobvite.

### Inbound job status mappings

Jobvite job statuses map to ChartHop's job statuses in the following ways:

| Jobvite status | Direction | ChartHop status                |
| -------------- | --------- | ------------------------------ |
| Open           | ﻿⬅️﻿      | Active                         |
| On hold        | ﻿⬅️﻿      | Passive                        |
| On hold        | ﻿⬅️﻿      | Inactive                       |
| Filled         | ➡️        | Pending (via new hire webhook) |
| Open           | ﻿⬅️﻿      | Offer                          |
| Closed         | ﻿⬅️﻿      | Closed                         |


[title] Required fields list
[path] ChartHop for Administrators/Managing data/Fields/Requiring fields when opening jobs/

You can configure both built-in fields and custom fields to be required. While you can set any custom field as a required field, only certain built-in fields are eligible to be set as required fields.

### Built-in fields that can be made required

Some built-in fields support being set as required while other built-in fields are automatically required by default.

The following built-in fields can be made required:

| **Field name**         | **Required** | **Additional notes**                                                                                                                                 |
| ---------------------- | ------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------- |
| Job title              | By default   |                                                                                                                                                      |
| Manager                | By default   |                                                                                                                                                      |
| Placement              | Configurable |                                                                                                                                                      |
| Department             | Configurable |                                                                                                                                                      |
| Job code               | Configurable |                                                                                                                                                      |
| Locations              | Configurable |                                                                                                                                                      |
| Team                   | Configurable |                                                                                                                                                      |
| Employment             | Configurable |                                                                                                                                                      |
| Comp band              | Configurable |                                                                                                                                                      |
| Base                   | Configurable |                                                                                                                                                      |
| Planned grant (shares) | Configurable | Either this or Planned grant (value) may be marked as required at a time. Selecting one automatically deselects the other.                           |
| Planned grant (value)  | Configurable | Either this or Planned grant (shares) may be marked as required at a time. Selecting one automatically deselects the other.                          |
| Recruiting             | Configurable |                                                                                                                                                      |
| Priority (Recruiting)  | Configurable |                                                                                                                                                      |
| Hiring manager         | Configurable |                                                                                                                                                      |
| Recruiter              | Configurable |                                                                                                                                                      |
| Sensitive              | Configurable |                                                                                                                                                      |
| Planned start date     | Configurable | If marked as required, you will need to manually set the date under **Planned Start Date** in the **Recruiting** tab when you create or modify jobs. |
| Req code               | Configurable |                                                                                                                                                      |
| Job description        | Configurable |                                                                                                                                                      |



[title] Lever Requisitions
[path] Implementing ChartHop/Apps & Integrations/Applicant tracking systems/

The Lever Requisitions app supports a seamless transition from planning to recruiting and hiring by flowing open jobs and new hire data between ChartHop and Lever.

The Lever Requisitions app allows you to leverage the strengths of both the Lever and ChartHop platforms in the following collaborative ways:

- Ensures talent and leadership teams:
  - Align on hiring goals. 
  - Keep job data up to date. 
  - Keep new hire data up to date.
- Automatically updates the org chart in ChartHop with every new hire. As soon as a candidate is hired in Lever, ChartHop’s org chart updates to reflect the new hire with no manual steps or delays.

:::hint{type="info"}
In compliment to the ATS integration, ChartHop provides a bundle of pre-made **Recruiting Reports** available in th&#x65;**&#x20;Bundles** page .&#x20;
:::

:::hint{type="info"}
The Lever Requisitions app only interacts with Lever requisitions and not with Lever job postings.
:::

# Lever ATS integration app summary

The following table summarizes ChartHop’s Lever Requisitions integration app:

| **Features**                  | **Summary**                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          |
| ----------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| ChartHop packages             | <font color="#000000">**Standard*** | **Premium**</font>****<br />\* Available as an add-on                                                                                                                                                                                                                                                                                                                                                                                                                                                          |
| Installation requirements     | Syncing data between Lever and ChartHop requires:<br />* Access to Lever Requisition Management
* Lever API Credentials
* Candidate Hired Webhook in Lever<br />Your Lever software must include the Requisition Management add-on. This add-on is included in LeverTRM for Enterprise or in LeverTRM with the AdvancedHR add-on.                                                                                                                                                                                                                    |
| Data direction                | [Inbound or Outbound](https://docs.charthop.com/applicant-tracking-system-apps)<br /><br />You can choose one of two ways to configure your Lever Requisitions integration:<br />1) **Outbound, ChartHop to Lever**: ChartHop is the source of truth for open requisitions.
2) **Inbound, Lever to ChartHop**: Lever is the source of truth for open requisitions.<br />In all cases, candidate information for new hires flows inbound, from Lever to ChartHop.                                                                                     |
| Sync cadence                  | **Varied**<br />****<br />Sync cadence of the Job Data Flow differs by configuration:<br />1) **Outbound, ChartHop to Lever**: 
   1. Trigger-based (default) syncs when a requisition creation or update is merged to your primary organization with an **Active&#x20;**&#x72;ecruiting status.
   2. Daily syncs.
   3. Ad-hoc syncs.
2) **Inbound, Lever to ChartHop**: 
   1. Daily syncs.
   2. Ad-hoc syncs.<br />Sync cadence of candidate information for new hires happens on a trigger-basis when candidates are marked as Hired in Lever. |
| Synced data                   | - Created open roles
- Updates to roles
  - Closed roles
  - Changes to role details and statuses
- Hired candidates
- Recruiting metrics
  - Candidates
  - Screens 
  - Interviews
- Metrics fields:
  - Screens as defined as any stage in Lever that contains the words “screen” or “phone interview”.
  - Interviews as defined as any stage in Lever that contains the word “interview”.
  - Offers as defined as any stage in Lever that contains the word “offer”.
  - Hires as defined as any stage in Lever that contains the word “hire”. |
| Effective dating support?     | No                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   |
| Custom field mapping support? | Support for custom field mapping to jobs fields is available. <br /><br />For assistance, please direct all custom mapping requests to ChartHop’s Professional Services team.                                                                                                                                                                                                                                                                                                                                                                        |


[title] Setting up the Lever integration
[path] Implementing ChartHop/Apps & Integrations/Applicant tracking systems/Lever Requisitions/

:::hint{type="info"}
[Packages](https://www.charthop.com/pricing/)**:&#x20;**<font color="#a9a9a9">Basic</font> <font color="#000000">|</font> <font color="#000000">**Standard*** | **Premium**</font>****

\* Available as an add-on
:::

This section covers the process for setting up your Lever Requisitions integration app to begin migrating requisition data between Lever and ChartHop.

Setting up the Lever Requisitions integration app requires the following steps:

1. Create a Lever API key
2. Install the Lever integration app
3. Set up the API connection
4. Set up the flow of requisition data
5. Set up the flow of new hire data

:::hint{type="info"}
ATS integrations are typically done with help from ChartHop's professional services. Contact your implementation specialist before beginning these steps.
:::

## Create a Lever API key

In order for ChartHop to access your organization's Lever recruiting data, you need to create a Lever API key that you can use with ChartHop. You can work with your **Lever Requisitions** administrator if you have questions. 

To create your API key, follow the steps outlined in the [Generating API Credentials in Lever](https://help.lever.co/hc/en-us/articles/360042364412-Generating-and-using-API-credentials). Use the instructions in the Lever documentation to create your API key and use the following values when doing so.

| **Field**       | **Value**        |
| --------------- | ---------------- |
| Key name        | ChartHop         |
| Select a preset | Select all read  |
| Description     | Leave this blank |

After you name your key and enable all of its read permissions, you need to configure the key’s write permissions.

Enable the following write permissions:

- Create requisitions
- Delete requisitions
- Update posting
- Update requisition fields

## Install the Lever Integration App

Once you've created your API key in Lever, you can install the Lever integration app in ChartHop.

 To install the Lever Requisitions integration app:

1. From the left sidebar, select **Apps & Bundles**.
2. From the sub-menu, select **Apps**.
3. Select the **Availible Apps** tab.
4. Scroll the list down to the **Lever Requisitions** app.
5. Select **Install**.
6. Select **Install** from the app install page.

## Set up the API connection

In order to allow ChartHop to access your Lever data, enter your Lever API credential in the **Lever Requisitions API Key** field in the **Settings&#x20;**&#x73;ection of the app. Then, select **Save Settings**.

## Set up the flow of requisition data

Once you establish your API connection, you can configure the type of requisition data flow that the integration runs. 

### Select your source of truth

When setting up your integration, you can choose the primary source of truth when referencing new requisition data. Selecting ChartHop results in an outbound job data flow where ChartHop is the source of truth, whereas, selecting Remote System (Lever Requisitions) results in an inbound job data flow where the ATS is the source of truth.

To select your **Lever Requisitions** integration’s source of truth:

1. From the left sidebar, select **Apps & Bundles**.
2. From the sub-menu, select **Apps**.
3. Select the **Installed Apps** tab.
4. Scroll the list down to the **Lever Requisitions** app.
5. Select the **Lever Requisitions** app.
6. From the ChartHop **Lever Requisitions** app settings page, scroll down to the **Source of Truth** section.
7. Select one of the two options:
   1. **ChartHop** - ChartHop is the source of truth and the integration is configured to run an outbound job data flow.
   2. **Remote System (Lever Requisitions)** -  Lever is the source of truth and the integration is configured to run an inbound job data flow.

### Configure the Lever Requisitions integration

You can configure the Lever Requisitions integration app to handle two types of data migrations (job data flows) between ChartHop and Lever Requisitions. Depending on the type of job data flow you choose, you may enable specific configurations that may either be required or optional and yet, recommended.

These are the required and recommended configurations for each job data flow:

| **Job data flow type**      | **Configurations**                                                                                   |
| --------------------------- | ---------------------------------------------------------------------------------------------------- |
| Outbound, ChartHop to Lever | **Required**<br />* Sync On Change<br />**Recommended**<br />* Run Daily                             |
| Inbound, Lever to ChartHop  | **Required** <br />* Reverse Sync<br />**Recommended**<br />* Run Daily
* Remote Location As Default |

To and change the configuration options for your Lever Requisitions integration:

1. From the left sidebar, select **Apps & Bundles**.
2. From the sub-menu, select **Apps**.
3. Select the **Installed Apps** tab.
4. Scroll the list down to the **Lever Requisitions** app.
5. Select the **Lever Requisitions** app.
6. From the ChartHop **Lever Requisitions** app settings page, scroll down to the **Other Options&#x20;**&#x73;ection.
7. Select from the following configuration options described in the table below.

After you select your integration’s source of truth, you can select additional options to further customize and configure it:

| **Field**                  | **Description**                                                                                                                                                                                                                                                                                                                                                                                               |
| -------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Run Daily                  | With this option enabled, the ATS app runs automatically every day. When enabled, regardless of data direction, job-related candidate metrics are pulled on a daily basis every morning. For customers on the inbound job data flow direction, this also causes the inbound job data flow to run on a daily basis every morning.                                                                              |
| Sync On Change             | Enables the outbound job data data flow direction. When enabled, changes to open jobs are automatically pushed to Lever as soon as they are made in ChartHop. <br /><br />This option cannot be selected when **Reverse Sync** is enabled.                                                                                                                                                                    |
| Reverse Sync               | When enabled, Lever becomes the system of record, and ChartHop is updated with new open roles from Lever when the inbound job data flow runs.<br /><br />This option cannot be selected when **Sync On Change** is enabled.                                                                                                                                                                                   |
| Reconciliation             | When enabled, reconciles Lever role and field data with ChartHop, treating ChartHop as the source of truth. For example, if an open job exists in ChartHop but not in Lever, a matching req is created in Lever. Reconciliations can either happen on an ad-hoc basis or on a daily basis if the **Run daily** option is enabled.<br /><br />This option cannot be selected when **Reverse Sync** is enabled. |
| Remote Location As Default | When enabled, newly synced records that are not assigned a location are assigned the value Remote Location.                                                                                                                                                                                                                                                                                                   |



## Set up the flow of new hire data

You can use the new hire webhook job data flow to automatically bring new hires from Lever to ChartHop when the candidate is marked as “Hired” in Lever, along with their relevant personal information, such as address, phone number, and email.

New hire webhooks will not be processed if the person being hired already exists in ChartHop, even if they aren’t actively in a role. As a result, the integration cannot support:

- Internal transfers
- Re-hires

Only the first new hire webhook for a ChartHop job is supported. For example, if they you update an offer packet and re-hire the candidate in Lever, the updated information will not be processed in ChartHop unless the new hire in ChartHop is removed first.

A new hire webhook will not be processed if the job does not exist in ChartHop.

:::hint{type="info"}
All new hire webhook job data flows are inbound (Lever to ChartHop).
:::

![Copy your created API key to enable your web hook in Lever.](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/Q85u1zBkGM1prymWNh_WZ_group-6.png "Copy your created API key to enable your web hook in Lever.")

To configure the new hire webhook job data flow, follow the steps below.

**In ChartHop**:

1. From the left sidebar, select **Apps & Bundles**.
2. From the sub-menu, select **Apps**.
3. Select the **Installed Apps** tab.
4. Scroll the list down to the **Lever Requisitions** app.
5. Select the **Lever Requisitions**  app.
6. From the ChartHop **Lever Requisitions**  app settings page, copy the secret key value under **Webhook Setup**.

**In Lever**:

1. Navigate to **Integrations and API&#x20;**&#x75;nder Settings.
2. Select **Webhooks**.
3. Enable **Candidate Hire** to on.
4. Add the webhook.
5. Select **Verify Connection**.

With the webhook enabled, accepted offers in Lever are pulled into ChartHop, alongside the new hire's start date, and contact information.﻿


[title] Using ChartHop to open jobs
[path] Implementing ChartHop/Apps & Integrations/Applicant tracking systems/Jobvite/ChartHop as the source of truth/

:::hint{type="info"}
[Packages](https://www.charthop.com/pricing/)**:&#x20;**<font color="#a9a9a9">Basic</font> <font color="#000000">|</font> <font color="#000000">**Standard*** | **Premium**</font>****

\* Available as an add-on
:::

When you configure your Jobvite app to have an outbound flow, ChartHop serves as the primary source of truth for open jobs. Depending on the status of a job in ChartHop, it translates to a specific status for the same job in Jobvite.

### Outbound job status mappings

ChartHop job statuses map to Jobvite job statuses by default in the following ways:

| **ChartHop status**            | **Direction** | **Jobvite status** |
| ------------------------------ | ------------- | ------------------ |
| Active                         | ➡️            | Open               |
| Passive                        | ➡️            | On hold            |
| Inactive                       | ➡️            | On hold            |
| Pending (via new hire webhook) | ﻿⬅️﻿          | Filled             |
| Offer                          | ➡️            | Open               |
| Closed                         | ➡️            | Closed             |

:::hint{type="info"}
ChartHop supports custom field mappers if you’ve made any changes to the default Jobvite job statuses in your Jobvite instance or otherwise want to change the default field mappers. Please contact support for assistance.
:::

### Create a job

With the Jobvite app enabled, ChartHop's open jobs list becomes the system of record for open jobs. Recruiters, hiring managers, financial planners, and team leads can all look at ChartHop for a real-time view of which roles are open and how recruiting is going without needing access to Jobvite.

With the Jobvite app enabled, ChartHop's open jobs list becomes the system of record for open jobs. Recruiters, hiring managers, financial planners, and team leads can all look at ChartHop for a real-time view of which roles are open and how recruiting is going without needing access to Jobvite.

:::hint{type="warning"}
To ensure that all proposed hiring changes are approved, we recommended that you create new jobs via scenarios as opposed to directly in Primary.
:::

When an open job in ChartHop is set to **Active** recruiting status (either when someone creates or updates a new job), a req code is automatically created in Jobvite if not provided in ChartHop manually. The mapped Jobvite requisition is changed to **On Hold** in Jobvite if the open job is set back to an inactive status. Similarly, when the job is removed from ChartHop, it is deleted in Jobvite.

:::hint{type="info"}
If you create a new job in ChartHop with a recruiting status set to **Active** without a req code, a new req code is automatically generated by looking through the most recent req codes for that department, and incrementing the number (for example, from ENG-8 to ENG-9).
:::

![Setting a job as Active in ChartHop opens a new job in Jobvite.](https://lh6.googleusercontent.com/qPmykLBudHktTHOiDEndcTlQsCms0Swm8OEy_lAu7KfhGdFS7X6uWHpvlNyhdCOpRGShSkSp43ihHzpRgZBzh-6_1G9MdoqZjUcLAmTyjJAH2CfRDwSNXZdEOYfqxAoeMstcU2CZe-N5JBDnDRBH7lJJOVCSQ5-t3O24QEK9AYehuqj7cgyjVZU0d8h8ow "Setting a job as Active in ChartHop opens a new job in Jobvite.")

To create a new job in ChartHop, follow these steps:

1. From the left sidebar, select **Org Chart.**
2. In the **Org Chart**, create a new job by either: 
   - Adding a direct report by selectin&#x67;**&#x20;Add a** **direct report&#x20;**&#x75;nder a pre-existing person or role.
   - Creating a new job by selecting **New hire** under a pre-existing person or role.
3. In the **Create job** dialog enter your information for the new role using your custom fields and ChartHop’s recommended fields beneath the following tabs:
   - **Structure** - General information about the role, including title, department, and location.
   - **Compensation** - Compensation information about the role, including salary and bonuses.
   - **Recruiting** - Recruiting information about the role, including hiring status and start date.
   - **Description** - A general description about the role.

:::hint{type="info"}
The ChartHop Job must include a Description in order to sync properly to Jobvite, as Jobvite requires a description in order to create a requisition. If desired, a placeholder value can be used for the ChartHop Job description, but it can not be left blank.
:::

Once a candidate is hired in Jobvite, the job in ChartHop is set to **pending status**, and the hired candidate is announced in ChartHop, with their start date being the specified start date in the Jobvite offer.

### Job hiring status

Any open roles with a **Recruiting status** set to **Active** in ChartHop flow from ChartHop to Jobvite. Mapped Jobvite requisitions are placed **On Hold** in Jobvite if the mapped ChartHop job is changed to an **Inactive** or **Passive&#x20;**&#x73;tatus in ChartHop. The mapped Jobvite requisition is deleted if the ChartHop job is removed.

| **ChartHop job status** | **Result in Jobvite**                                                                                                                                                                                                                                   |
| ----------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Active or Offer         | A new **Open** Jobvite requisition is automatically created. If the ChartHop Job was already mapped to an existing Jobvite requisition, the Jobvite requisition is set to **Open.**                                                                     |
| Inactive or Passive     | The Jobvite requisition is set to **On Hold**.                                                                                                                                                                                                          |
| Removed job             | The Jobvite requisition is deleted.                                                                                                                                                                                                                     |
| Pending                 | The Jobvite requisition is set to **Closed.**﻿We do not recommend changing the ChartHop job status to Pending manually. Rather, when a candidate is hired in Jobvite, the ChartHop Job status automatically changes to **Pending** to reflect the hire. |


[title] Zenefits
[path] Implementing ChartHop/Apps & Integrations/Payroll systems/Installing payroll apps/

With the Zenefits app, you can sync your payroll data to ChartHop, which automatically builds your org chart and keeps it up to date. Synced data includes contact information, demographics, compensation, managers, departments, and locations. 

### Zenefits at a glance

The following table summarizes ChartHop’s Zenefits app. 

| Supported ChartHop packages          | - <font color="#000000">Basic</font>&#x20;
- <font color="#000000">Standard </font>
- <font color="#000000">Premium</font>                                                                                                                                                                                                    |
| ------------------------------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Supported Zenefits package**       | * Essentials
* Growth Zen                                                                                                                                                                                                                                                                                                     |
| **Prerequisites**                    | A ChartHop account with the Owner role and a Zenefits account with Admin privileges.                                                                                                                                                                                                                                          |
| **API key permissions**              | From Zenefits, in Custom integrations, add a token and grant it the following scopes: <br />* employment
* personal data                                                                                                                                                                                                      |
| **Data direction**                   | Inbound from Zenefits to ChartHop                                                                                                                                                                                                                                                                                             |
| **Sync cadence**                     | Daily or as needed                                                                                                                                                                                                                                                                                                            |
| **Effective dating support**         | Yes                                                                                                                                                                                                                                                                                                                           |
| **Additional field mapping support** | Yes, for ChartHop Premium customers, through the following field categories:<br />* profiles
* custom<br />For more information, see the [Zenefits documentation](https://developers.zenefits.com/reference/getting-started). <br /><br />Please direct all custom mapping requests to ChartHop’s Professional Services team. |
| **Payroll app overview**             | Read an [overview](https://docs.charthop.com/payroll-system-apps) of how how payroll apps work in ChartHop.                                                                                                                                                                                                                   |
| **Synced Data**                      | The default [synced data](https://docs.charthop.com/synced-data-from-zenefits) from Zenefits to ChartHop.                                                                                                                                                                                                                     |


[title] Customizing the Jobvite app
[path] Implementing ChartHop/Apps & Integrations/Applicant tracking systems/Jobvite/Setting up the Jobvite integration/

:::hint{type="info"}
[Packages](https://www.charthop.com/pricing/)**:&#x20;**<font color="#a9a9a9">Basic</font> <font color="#000000">|</font> <font color="#000000">**Standard*** | **Premium**</font>****

\* Available as an add-on
:::

With custom field mappers, you can configure your integration to better match your job data between ChartHop and Jobvite.

## Create custom field mappers

You can map additional Jobvite fields to add or change what data is given to ChartHop.

Keep in mind that there are some exceptions, so for more information about managing custom field mappings, please contact your ChartHop implementation specialist.

You can use custom field mappers to override the default field mappings. For example, you can pull a custom field into a ChartHop default field, or vice versa (to push a ChartHop custom field into a default field on Jobvite). Similarly, you can disable default field mappers.

:::hint{type="info"}
Group fields like Department, Team, and Location cannot be custom mapped.
:::

![You can use custom field mappers to override the default field mappings.](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/dJZutIIx4bgsbm0bE206n_group-8-1.png "You can use custom field mappers to override the default field mappings.")

To create a custom field mapper, follow these steps:

1. From the left sidebar, select **Apps & Bundles**.
2. From the sub-menu, select **Apps**.
3. Select the **Installed Apps** tab.
4. Scroll the list down to the **Jobvite&#x20;**&#x61;pp.
5. Select the **Jobvite&#x20;**&#x61;pp.
6. From the ChartHop **Jobvite&#x20;**&#x61;pp settings page, scroll down and select the **Add Field Mapper&#x20;**&#x62;utton.
7. Enter your Jobvite custom field **Code name** under **Remote Field**, appended with the correct endpoint.
   - To ensure that your Jobvite field parses correctly, your **Remote Fields** must be preceded by the correct endpoint (job., offer., etc.), and structured as follows:
     - The endpoint (such as job) + custom\_fields. + your Jobvite Immutable Field.
     - For example, `job.custom_fields.targetBase`.
8. In the **ChartHop Field**, enter the field or Carrot expression you wish to map to the previously entered Jobvite custom field.

As an example, if you wanted to map a ChartHop custom field like *targetSalary* to the Jobvite custom field *targetBase*, then you’d want to set up your field mapper like in the image below:

You can map multiple ChartHop fields to a single Jobvite field.

![The custom ChartHop Field: targetSalary is mapped to the custom Remote Field: targetBase.](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/R-9jpQU7Ciy2g37MuRTL4_group-9-1.png "The custom ChartHop Field: targetSalary is mapped to the custom Remote Field: targetBase.")

Ensure you are using the correct name of the field(s) you want to map. Incorrect names will cause the mapping to fail.

## Set new hire announce dates

When candidates are hired and they are created in ChartHop, you have a choice about when you want them to show up publically to your organization

Under the option **New Hire Webhook Announce Date&#x20;**&#x73;elect one of the following:

- **Start date** - The new hire will not be org public until their start date.&#x20;
- **Today** - The new hire will be displayed immediately on the day of the sync
- **Earlier of start date and today (Default)**


[title] Customizing the integration
[path] Implementing ChartHop/Apps & Integrations/Applicant tracking systems/Lever Requisitions/Setting up the Lever integration/

:::hint{type="info"}
[Packages](https://www.charthop.com/pricing/)**:&#x20;**<font color="#a9a9a9">Basic</font> <font color="#000000">|</font> <font color="#000000">**Standard*** | **Premium**</font>****

\* Available as an add-on
:::

With custom field mappers, you can configure your integration to better match your job data between ChartHop and Lever.

## Create custom field mappers

You can map additional Lever fields to add or change what data is given to ChartHop.&#x20;

Keep in mind that there are some exceptions, so for more information about managing custom field mappings, please contact your ChartHop implementation specialist.

You can use custom field mappers to override the default field mappings. For example, you can pull a custom field into a ChartHop default field, or vice versa (to push a ChartHop custom field into a default field on Lever). Similarly, you can disable default field mappers. 

:::hint{type="info"}
Group fields like Department, Team, and Location cannot be custom mapped.
:::



![You can use custom field mappers to override the default field mappings.](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/6OJLR889wrnciy16s907j_group-8.png "You can use custom field mappers to override the default field mappings.")

To create a custom field mapper, follow these steps:

1. From the left sidebar, select **Apps & Bundles**.
2. From the sub-menu, select **Apps**.
3. Select the **Installed Apps** tab.
4. Scroll the list down to the **Lever Requisitions&#x20;**&#x61;pp.
5. Select the **Lever Requisitions&#x20;**&#x61;pp.
6. From the ChartHop **Lever Requisitions&#x20;**&#x61;pp settings page, scroll down and select the **Add Field Mapper&#x20;**&#x62;utton.
7. Enter your Lever custom field **Code name** under **Remote Field**, appended with the correct endpoint.
   - To ensure that your Lever field parses correctly, your **Remote Fields** must be preceded by the correct endpoint (job., offer., etc.), and structured as follows:
     - The endpoint (such as job) + custom\_fields. + your Lever Immutable Field.
8. In the **ChartHop Field**, enter the field or Carrot expression you wish to map to the previously entered Lever custom field.

As an example, if you wanted to map a ChartHop custom field like *targetSalary* to the Lever custom field *targetBase*, then you’d want to set up your field mapper like in the image below:

:::hint{type="info"}
You can map multiple ChartHop fields to a single Lever field.
:::

![The custom ChartHop Field: targetSalary is mapped to the custom Remote Field: targetBase.](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/Lpg3ZxB9CCNp38l2nBMjx_group-9.png "The custom ChartHop Field: targetSalary is mapped to the custom Remote Field: targetBase.")

Ensure you are using the correct name of the field(s) you want to map. Incorrect names will cause the mapping to fail.

## Set new hire announce dates

When candidates are hired and they are created in ChartHop, you have a choice about when you want them to show up publically to your organization

Under the option **New Hire Webhook Announce Date&#x20;**&#x73;elect one of the following:

- **Start date** - The new hire will not be org public until their start date.&#x20;
- **Today** - The new hire will be displayed immediately on the day of the sync
- **Earlier of start date and today (Default)**


[title] Jobvite as the source of truth
[path] Implementing ChartHop/Apps & Integrations/Applicant tracking systems/Jobvite/

An inbound job data flow brings open jobs from the ATS to ChartHop where the ATS is the source of truth. Inbound data flows support both on-demand syncs and scheduled daily syncs. In most cases, you can rely on daily syncs to pull updated hiring data from your ATS.

Data remains in and is updated within the ATS system. A daily sync pulls information from the ATS to ChartHop. You can also stream data ad-hoc through an on-demand **Sync Jobs** button that can be accessed within the ATS application configuration page in ChartHop.

![](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/Ki8433pvYjy5-dgPdgL50_screen-shot-2022-09-13-at-21013-pm.png "Open reqs and new hire data flow Inbound. ")

When a hire is made in the ATS, ChartHop creates a pending new hire which starts an open job according to its assigned start date. Once the pending new hire’s information is also entered into the HRIS/payroll system, ChartHop will merge the payroll profile with the existing pending new hire using the pending new hire’s personal or work email as a unique identifier.

### Advantages of inbound job data flows

Inbound job data flows offer a few advantages over outbound job data flows which include:

- Recruiting teams only having to work out of the ATS.
- No changes are required to your standard hiring workflow.
- The process is often easier to start with and implement for first-time users.

Inbound job data flows are recommended if:

- You don't plan on using ChartHop as the source of truth for your hiring plan.
- You work with a team that is very comfortable with their current ATS workflow.
- You have specific data needs with your ATS that ChartHop can’t fulfill such as highly unique systems and data types.
- You do not plan to give recruiters access to ChartHop.




[title] Synced data from Zenefits
[path] Implementing ChartHop/Apps & Integrations/Payroll systems/Installing payroll apps/Zenefits/

The following table lists the default data set that is synced from Zenefits to ChartHop.

ChartHop customers can work with ChartHop implementation services to customize what is synced.

:::hint{type="info"}
You must include the country code as a part of any international number for it to be recognized as such within ChartHop. When you are syncing phone numbers from an external system, such as a payroll system or ATS, be sure the country code is included in the phone number that is listed in the external system. This also applies when updating data through a spreadsheet.
:::

| **ChartHop field label**                     | **ChartHop field code**        | **Zenefits field code**                                                                                                                                                     |
| -------------------------------------------- | ------------------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| City - Home Address                          | address.city                   | profiles.city                                                                                                                                                               |
| Country - Home Address                       | address.country                | profiles.country                                                                                                                                                            |
| Zip/Postal - Home Address                    | address.postal                 | profiles.postal\_code                                                                                                                                                       |
| State - Home Address                         | address.state                  | profiles.state                                                                                                                                                              |
| Street 1 - Home Address                      | address.street1                | profiles.street1                                                                                                                                                            |
| Street 2 - Home Address                      | address.street2                | profiles.street2                                                                                                                                                            |
| Birth Date                                   | birthdate                      | profiles.date\_of\_birth                                                                                                                                                    |
| Home email                                   | contact.homeemail              | profiles.personal\_email                                                                                                                                                    |
| Mobile                                       | contact.mobilephone            | profiles.personal\_phone                                                                                                                                                    |
| Work email                                   | contact.workemail              | profiles.work\_email                                                                                                                                                        |
| Work phone                                   | contact.workphone              | profiles.work\_phone                                                                                                                                                        |
| Date                                         | date                           | timeOff.created\_date                                                                                                                                                       |
| Depart                                       | depart                         | profiles.employments.data\[0].termination\_type                                                                                                                             |
| Department                                   | department                     | profiles.department.url, departments.ids                                                                                                                                    |
| Employment                                   | employment                     | profiles.employments.data\[0].employment\_type                                                                                                                              |
| Gender                                       | gender                         | profiles.gender                                                                                                                                                             |
|                                              | imageurl                       | profiles.photo\_url                                                                                                                                                         |
| Location                                     | location                       | profiles.location.url, locations.ids                                                                                                                                        |
| Manager                                      | manager                        | profiles.manager.url                                                                                                                                                        |
| First Name                                   | name.first                     | profiles.first\_name                                                                                                                                                        |
| Last Name                                    | name.last                      | profiles.last\_name                                                                                                                                                         |
| Middle Name                                  | name.middle                    | profiles.middle\_name                                                                                                                                                       |
| Preferred First Name                         | name.pref                      | profiles.preferred\_name                                                                                                                                                    |
| Title                                        | title                          | profiles.title                                                                                                                                                              |
| *Used to calculate compensation information* | currency, base, hourly         | profiles.employments.data\[0].amount\_type, profiles.employments.data\[0].comp\_type, profiles.employments.data\[0].annual\_salary, profiles.employments.data\[0].pay\_rate |
| *Used to store job history information*      | type, date, startdate, enddate | profiles.employments.data\[0].hire\_date, profiles.employments.data\[0].termination\_date                                                                                   |
| *Used to store time off information*         | timeoff.approval               | timeOff.status                                                                                                                                                              |
| *Used to store time off information*         | timeoff.days, timeoff.hours    | timeOff.hours                                                                                                                                                               |
| *Used to store time off information*         | timeoff.enddate                | timeOff.end\_date                                                                                                                                                           |
| *Used to store time off information*         | timeoff.id                     | timeOff.id                                                                                                                                                                  |
| *Used to store time off information*         | timeoff.note                   | timeOff.reason                                                                                                                                                              |
| *Used to store time off information*         | timeoff.startdate              | timeOff.start\_date                                                                                                                                                         |
| *Used to store time off information*         | timeoff.type                   | timeOff.vacation\_type.url, vacations.ids                                                                                                                                   |


[title] ChartHop for Administrators
[path] /

::::LinkArray{contentSource="CUSTOM"}
:::LinkArrayItem{headerType="IMAGE" headerImage="https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/q8tU5bSPuhFaqWYy5YdP__screenshot-2024-01-19-at-22021-pm.png"}
[Planning](docId:9325SriEk8fJ8slFjO8VT)&#x20;



Use ChartHop for headcount and compensation planning.
:::

:::LinkArrayItem{headerType="IMAGE" headerImage="https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/YMd8QFFUl2UFwwtOggWsL_screenshot-2024-01-19-at-22320-pm.png"}
[Managing employee data](docId:1d-ynMxrEehr4PEMCL96E)&#x20;



Monitor data syncs and learn how to import data changes.
:::

:::LinkArrayItem{headerType="IMAGE" headerImage="https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/QUVPfshR9pQkoEDv1MOPn_screenshot-2024-01-19-at-22035-pm.png"}
[Dashboards](docId\:X6GSY5cr7MiSKqY3avC5p)

Create and view visualizations of your organization's data.
:::

:::LinkArrayItem{headerType="IMAGE" headerImage="https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/ah-ja0zUvJltb7TOeU3Lj_screenshot-2024-01-19-at-22338-pm.png"}
[Managing people and jobs](docId\:eIl5kTl1zO8ekraCXzRwH)&#x20;



Learn how to hire, transfer, terminate, and create jobs.
:::

:::LinkArrayItem{headerType="IMAGE" headerImage="https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/Ors5uejE6BNq3t9xgIulS_screenshot-2024-01-19-at-22718-pm.png"}
[Performance reviews](docId\:pgai8TVrVYWmDcEAnerwg)



Manage employee reviews.
:::

:::LinkArrayItem{headerType="IMAGE" headerImage="https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/6b2XqASuK9ROpFoWs9xPA_screenshot-2024-01-19-at-22802-pm.png"}
[Engagement surveys](docId\:F_yJDEM_cM1J9XlNG2fZK)&#x20;



Develop custom forms for engagement surveys.
:::

:::LinkArrayItem{headerType="IMAGE" headerImage="https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/8CrqWza3wSMT1iAPi1Jhp_screenshot-2024-01-19-at-22802-pm.png"}
[Letter templates](docId\:PrTI425Guur8bJNFonivJ)&#x20;



Create PDF documents for reviews, offer letters, and more
:::

:::LinkArrayItem


[The Goals page](docId\:bAw91gzIG8IPFRPqPia4c)

Set, track, and cascade goals across your organization.
:::
::::






[title] Viewing sync history
[path] ChartHop for Administrators/Managing data/Sync history/

You can view the data sync history of all payroll, equity, and ATS apps installed in your ChartHop organization on the **Sync & Import History** page or the **Sync History&#x20;**&#x54;ab on the Manager App page. The page contains a list of details for each sync, including the date and time of its completion, status, direction, and the cause of the sync.

## View sync status&#x20;

### On the Sync & Import History page

You can view the data sync history of all installed apps in your ChartHop organization from the **Sync & Import History** page.

To view your sync status, complete the following steps:

1. From the Admin menu (gear icon) in the left sidebar, select **Sync & Import History.**
2. View the **Status** column in the table, which shows one of the following status messages:
   - **Complete** - The sync was successfully completed without errors or warnings.
   - **Complete with Errors** - The sync was successfully completed along with minor errors or warnings.
   - **In progress** - The sync is currently in progress.
   - **Failed** - The sync was unsuccessfully completed along with major errors or warnings.

### From the Manage App Page

You can view the data sync history of a specific app from the **Sync History Tab** within the App.

To view your sync status, complete the following steps:

1. Select **Apps & Bundles** from the left sidebar, then select the **Apps&#x20;**&#x70;ag&#x65;**.**
2. Select the app, such as [ADP](docId:0T7ASn1GmQHd0taeUDrj8), that you want to view the sync history for.
3. Select the **Sync History** tab.&#x20;
   - &#x20;This tab will not show up for every app. It will only show up if the app already displays sync history on the Sync & Import History page and the app has been synced at least one time.&#x20;
   - If you do not see the tab, check the Sync & Import History page.&#x20;
4. View the **Status** column in the table and filter the results

## Sync history filters

By default, the **Sync & Import History** page displays all syncs across all supported apps installed in your ChartHop organization.

![](https://lh6.googleusercontent.com/u-KUGMqBZqxTkSzl7mM6aVJiUG4WULseDjIZlAXgazHWsFTQt_tCNuULperquwxwlp2rLE3ph6jZz05rJxQaTIuJ9ur-K6T_gRJO-_1W3ofurELmWWqzfjD1YytSkOfm9pYSzju-mcdHSS3JPNJpUpnMQRi2JHZUMwPRRJt8SHGfdG9I5xI27wRKtA "Filter the sync history using various dimensions")

You can filter the sync history results by the following parameters listed below:

- **App filter&#x20;**- Filters syncs based on the app.
- **Status&#x20;**- Filters syncs based on the sync status.
- **Direction&#x20;**- Filters syncs based on the sync direction.
- **Start Date&#x20;**- Filters syncs that were completed after the selected date.
- **End Date&#x20;**- Filters syncs that were completed after the selected date.

You can also search the page using specific keywords in the **Summary** column (e.g., searching for a specific job title).

:::hint{type="info"}
[Modules:](https://www.charthop.com/pricing/) <font color="#000000">**HRIS |** </font>**Engagement | Goals | Performance |&#x20;**<font color="#000000">**Compensation Reviews |** </font>**Headcount Planning**
:::

:::hint{type="info"}
<font color="#000000">: Technical Owner | Owner | Org Editor | Recruiting Editor | Recruiter</font>
:::


[title] Birthday announcements
[path] Implementing ChartHop/ChartHop bundles/

You can install the Birthday announcements bundle to have birthday announcements automatically sent to the email address or Slack channel you configure.

Birthday and anniversary announcements are automatically included on the ChartHop home page.

:::hint{type="info"}
To enable sending announcements to Slack, you must install the Slack app. [Learn more.](https://docs.charthop.com/slack)



ChartHop Basic customers can enable/disable birthday and anniversary announcements but cannot edit their configuration. [Learn more.](https://docs.charthop.com/birthday-announcements#1CUQW)
:::

### Install the Birthday announcements bundle

Bundles are packages of additional features with pre-made forms, additional fields, and ChartHop notifications (depending on the bundle).

To install the Birthday announcements bundle:

1. From the left sidebar, select **Apps & Bundles**.
2. From the sub-menu, select **Bundles**.
3. Select the **Availible Bundles** tab.&#x20;
4. Scroll to the **Birthday announcements** bundle.
5. Select **Install** on the far right-hand side of the table.

### Configure Birthday announcements

You can set up birthday announcements by configuring the ChartHop action installed when you installed the Birthday announcements bundle.

You can customize when the announcement is sent and which Slack channel to use when sending announcements. You can also choose to send the announcement to a specific email or DM the person or person's manager with the birthday announcement.

For example, you can configure the app to send an email to a person's manager three days before their birthday by creating a custom filter (`birthday=today-3`) and selecting **Person's manager** in the **Send message to** dropdown list.

You can use ChartHop's Carrot language in custom filters. [Learn more.](https://docs.charthop.com/carrot-reference)

![Action](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/uOKsa2ZSEcguYAGd6vR2P_action.png)

Separate announcements are sent for each employee's birthday according to the parameters you set..&#x20;

To configure birthday announcements:

1. From the left sidebar, select **People Ops Tools**.
2. From the sub-menu, select **Automated actions**.
3. Select **Edit&#x20;**&#x66;rom the row menu (⋮) on the left side of the Birthday announcements row.
4. In the **Edit** dialog, use the **Text** field to customize the information included in the announcement.&#x20;
   - Below is an example of how the default announcement displays in Slack:

::Image[]{alt="Default announcement format in Slack" src="https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/_oxPXAvr4Hg18k3TJ4uWO_birthdayannounce.png" size="100" width="1320" height="348" position="flex-start" showCaption="false" indent="3"}

5. Choose from the following options to customize how you want the announcements sent:
   - To use Slack, select **Chat Channel** and then enter the name of the Slack channel where you want to send the announcements. Be sure that the channel name starts with #. By default, it is set to send to the #general channel
   - To send to a particular email address, select **Email address** and enter the email address where you want to send the announcement.
   - To send to the person, select **Person**. The announcement is sent in a direct Slack message to the employee. If they are not connected to Slack, it sends an email.
   - To send to the person's manager, select **Person's manager**. The announcement is sent in a direct Slack message to the person's manager. If they are not connected to Slack, it sends an email.
6. Select **Save**.

### Testing Birthday announcements

You can test how your birthday announcements look and where they are sent.

1. From the left sidebar, select **People Ops Tools**.
2. From the sub-menu, select **Automated** **Actions**.
3. Find the action for the Birthday announcements action.&#x20;
4. Select Run… from the row menu (⋮) on the left side of the Birthday announcements row.
5. In the Run action dialog, select a person to send an announcement to. This person can verify if they receive the announcement as expected.
6. Select **Run**. The announcement is sent immediately to the person you selected.

### Disable announcements

You can disable announcements at any time.&#x20;

1. From the left sidebar, select **People Ops Tools**.
2. From the sub-menu, select **Automated** **Actions**.
3. Move the slider in the **Active** column to the grayed out position.&#x20;

::Image[]{alt="Disable an announcement action" src="https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/44h8230JyC4b6uza3iRv__anniversary-disable.png" size="50" width="736" height="342" position="flex-start" showCaption="false"}

:::hint{type="info"}
[Packages](https://www.charthop.com/pricing/)**:&#x20;**<font color="#a9a9a9">Basic</font> <font color="#000000">|</font> <font color="#000000">**Headcount Planning** | </font><font color="#000000">**Compensation Reviews** | </font><font color="#000000">**Performance** | </font><font color="#000000">**Engagement** </font>
:::

:::hint{type="info"}
﻿﻿[Roles](https://docs.charthop.com/user-roles-and-permissions): Technical owner | Owner&#x20;
:::


[title] Troubleshooting and FAQ
[path] Implementing ChartHop/Apps & Integrations/Applicant tracking systems/Lever Requisitions/

:::hint{type="info"}
[Packages](https://www.charthop.com/pricing/)**:&#x20;**<font color="#a9a9a9">Basic</font> <font color="#000000">|</font> <font color="#000000">**Standard*** | **Premium**</font>****

\* Available as an add-on
:::

This section covers a series of potential issues you may run into when setting up or configuring your Lever Requisitions App in ChartHop, as well as their recommended solutions.

### Permissions 

**Which ChartHop roles are required for creating and viewing open jobs?**

There are two access levels in ChartHop specifically designed for Recruiters: 

1. **Recruiting Editor&#x20;**- These users are allowed to view and make changes to open jobs, including target compensation levels and sensitive jobs. They are not allowed to make changes to, or access sensitive data about current employees, other than those they manage. This permission is generally intended for Recruiting roles or those managing the ATS.
2. ********Recruiters&#x20;**- These users are allowed to view sensitive information about open jobs only, including target compensation levels and viewing all sensitive jobs. They are not allowed to make changes to the primary timeline, or access sensitive information about current employees other than those they manage.

Other access levels with the ability to open roles: 

- **Org** **Editor&#x20;**- These users are allowed to view all information, and make official, permanent changes to the primary timeline. This access should be restricted tightly and limited to a few authorized individuals in HR, Finance, or similar roles.
- **Owner***&#x20;-&#x20;*&#x54;hese users are allowed full access to everything, including the ability to change user permissions, configure integrations, and alter organization-wide settings. Because of the scope involved, this access should be tightly restricted.

### Metrics

**Where are metrics coming from?**

ChartHop, once daily, pulls a list of candidates in Lever, and updates metrics based on the stages that the candidates are in.

### Job Data

**Why did the job fail?**

In case a jobs fails to be properly created, you can check for the following:

1. Confirm that your API and Webhook credentials are correct.
2. Confirm that your Hiring Manager and Recruiter have accounts in both ChartHop and Lever with the same email address.
3. Ensure that your teams match between ChartHop and Lever.
4. Ensure that there are no teams with the same name across different departments in Lever. Please contact [support@charthop.com](#) should this occur.

***

**Why did a hiring fail?**

In the case a hiring fails, you can check the following:

1. Confirm that an email has been provided for the candidate
2. Ensure that the Lever Req ID field is mapped to the correct job. You can contact [support@charthop.com](#) if you need assistance with this.
3. Be aware that we do not support internal transfers.

### Data sync updates

**When do updates for ChartHop to Lever job data flows push over?**

Updates for ChartHop to Lever job data flows push over in the following cases:

- If a ChartHop Job has not already been mapped to a Lever Requisition (e.g., no value in ChartHop's Lever Req ID field), the initial sync will occur when the ChartHop Job is turned to Active recruiting status in Primary.
- If a ChartHop Job has already been mapped to a Lever Requisition (e.g., there IS a value in ChartHop Lever Req ID field), updates will sync over to Lever regardless of recruiting status (e.g., even if marked to Inactive, updates will sync over to Lever).

***

**When do ChartHop jobs get created for Lever to ChartHop job data syncs?**

ChartHop jobs are created for Lever to ChartHop job data syncs in the following cases:

- If a Lever Requisition has not been mapped to a ChartHop Job, a new ChartHop Job will only be created if the Lever Requisition is Open.
- If a Lever Requisition has already been mapped to a ChartHop Job, updates will sync over to ChartHop regardless of status until the ChartHop Job is filled (after which no updates are synced).

**How do I safely clean up roles that were accidentally duplicated during the sync?**

Contact [support@charthop.com](#) to fix this.

### ATS Setup

**How should I support the setup for my ATS when there are different Departments or Teams between my ATS and payroll system?**

The best practice is to leverage aliases. When aliases are present, if the Department or Team name doesn’t work, ChartHop attempts with aliases, next.

For example, if the Team in Lever is Contractor but the Team in ChartHop is Contract, if there is an alias attached to the ChartHop Team called Contractor, we’ll be able to sync into Lever’s Contractor team.

### Job status

**Why was Recruit status changed to Pending?**

Recruit status can change to Pending for one of three reasons:

1. Manually changing the status
2. Receiving a new hire webhook (pending new hire) for the job
3. Changing the Offer Accept Date will effective date Recruit status changing to Pending on the date selected for the offer acceptance date


[title] Greenhouse
[path] Implementing ChartHop/Apps & Integrations/Applicant tracking systems/

The Greenhouse integration app supports a seamless transition from planning to recruiting and hiring by migrating open jobs and new hire data between ChartHop and Greenhouse.

The Greenhouse integration app allows you to leverage the strengths of both the Greenhouse and ChartHop platforms in the following collaborative ways:

- Ensures that talent and leadership teams are aligned on hiring goals by tagging each role with its hiring priority. Once a role becomes active, a change made in ChartHop can automatically feed into Greenhouse, so your requisitions are always up-to-date.
- Automatically updates the org chart in ChartHop with every new hire. As soon as a candidate is hired in Greenhouse, ChartHop’s org chart updates to reflect the new hire with no manual steps or delays.

:::hint{type="info"}
In complement to the ATS integration, ChartHop provides a bundle of pre-made **Recruiting Reports** available on the [Bundles](docId\:O7K0K249Lrkt97FF36-YS) page.&#x20;
:::

# Greenhouse ATS integration app summary

The table below contains a list of available features offered by the Greenhouse integration app:

| **Features**                  | **Summary**                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         |
| ----------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Data direction                | ****[Inbound or Outbound](https://docs.charthop.com/applicant-tracking-system-apps)****<br />The Job Data Flow within the app can be configured in one of two ways:<br /><br />1) **Outbound, ChartHop to Greenhouse**: ChartHop is the source of truth for open jobs.
2) **Inbound, Greenhouse to ChartHop**: Greenhouse is the source of truth for open jobs.<br />In all cases, candidate information for new hires flows inbound, from Greenhouse to ChartHop.                                                                                                                                                                                                                                                                                                                                                  |
| Sync cadence                  | **Varied**<br />****<br />Sync cadence of the Job Data Flow differs by configuration:<br /><br />* **Outbound, ChartHop to Greenhouse**: 
  - Trigger-based (default) syncs when a job creation or update is merged to your primary organization with an **Active&#x20;**&#x72;ecruiting status.
  - Daily syncs.
  - Ad-hoc syncs.
* **Inbound, Greenhouse to ChartHop**: 
  - Daily syncs.
  - Ad-hoc syncs.<br />Sync cadence of candidate information for new hires happens on a trigger-basis when candidates are marked as Hired in Greenhouse.                                                                                                                                                                                                                                                               |
| Synced data                   | The following data can be synced given the type of integration:<br /><br />* **Inbound and Outbound data flows**:
  - Created open roles
  - Updates to roles
    - Closed roles.
    - Changes to role details and statuses.
  - Recruiting metrics
    - Candidates.
    - Screens.
    - Interviews.
* **Hired data flow (inbound webhook):**
  - Hired candidates.<br />If there are multiple ChartHop Jobs mapped to different Openings underneath the same Greenhouse Job, metrics such as number of interviews will be duplicated.<br />* Screens are defined as any stage in Greenhouse that contains the word “screen”.
* Interviews are defined as any stage in Greenhouse that contains the word “interview”.
* Offers are defined as any stage in Greenhouse that contains the words “offer” or “hire”. |
| Effective dating support?     | No                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  |
| Custom field mapping support? | Support for custom field mapping to jobs fields is available, in addition to offer-related fields in the new hire webhook.<br /><br />Please direct all custom mapping requests to ChartHop’s Professional Services team.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           |
| Installation Prerequisites    | Syncing data between Greenhouse and ChartHop requires:<br /><br />* Greenhouse API Credentials (”Harvest API key”).
* The Candidate Hired Webhook in Greenhouse.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    |


[title] Installing the Workday Reports app
[path] Implementing ChartHop/Apps & Integrations/Payroll systems/Installing payroll apps/Workday Reports/

This section covers setting up the Workday Reports integration app, which allows you to sync your employee roster to ChartHop. 

## Review your payroll system data

Your ChartHop payroll app syncs your employee data from your payroll system and builds your org chart in ChartHop. Once your Org Chart is created, you can start using ChartHop.

ChartHop recommends reviewing the data in your payroll system to ensure it is what you expect before you sync it to ChartHop. For example, if an employee has multiple system IDs in your payroll system, that employee’s data won’t sync properly. You should also be sure that your payroll system reflects an accurate view of your organization, including reporting structures, employee locations, and compensation. 

## Create your report

Create or identify the report that contains the information you want to sync to ChartHop. For details on the structure of this report, see [Setting up your Workday Report](https://docs.charthop.com/setting-up-your-workday-report).

Once the report is ready, obtain its link:

1. Enable the **Webservice URL&#x20;**&#x66;or the report
2. Copy the corresponding URL for the **JSON&#x20;**&#x66;ormat

## Create an Integration System User

After you obtain your Workday instance URL and name, you need to create an **Integration System User** and enable specific permissions. This will allow ChartHop to read the contents of your report.

To create a Workday **Integration System User**:

1. Login to Workday, and create an **Integration System User (ISU)**.
2. Ensure that the user has **read access** all fields contained in the report. If the report contains calculated / compound fields, make sure the ISU also has access to the upstream fields used in the calculations.



## Install the Workday Reports app

After you have your report URL and have created your Integration System User, you can install the Workday Reports app in ChartHop.

1. From the left sidebar, select **Apps & Bundles**.
2. From the sub-menu, select **Apps,&#x20;**&#x69;f not already pre-selected.
3. Select the **Availible Apps** tab.
4. Scroll to your payroll app and select **Install&#x20;**&#x6F;n the far right of the respective app's row.

### Connect the Workday Reports app

When you select **Install**, you'll be prompted to walk through configuring the payroll app.

1. Enter your **Workday Reports URL**
2. Enter your **Instance System User** name and password in the provided fields.

### Configure data sync settings for Workday Reports

Data sync settings control how and what data is synced to ChartHop from your payroll system. For example, you can choose whether or not to create a backfill position in ChartHop when you have a departure in your payroll system. Other advanced settings allow you to exclude certain employees.

- Select one of the two options:
  - **Automatically create backfills** - This option creates a backfill position in ChartHop (open job) when an employee is marked as departed in your payroll system.
  - **Sync departures only** - This option removes the departed employee from ChartHop. The employee's job history remains in ChartHop.

### Configure advanced settings

Advanced settings allow you to better control how your payroll data syncs to ChartHop.

ChartHop recommends accepting the default values for these settings. Please get in touch with ChartHop Support or your Customer Success Manager for assistance if needed.

1. Expand the **Advanced settings** section. 
2. Use the following table to guide you through advanced settings decisions. 
3. When finished, select **Next step**.

| **Setting**                              | **Description&#xA0;**                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               |
| ---------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Missing location information<br /><br /> | Select one of the two options for what should happen if location information is set for an employee.<br />* **Set Remote as the default location in ChartHop** - When selected, any open role that does not have a location set will be set to have a Remote location in ChartHop.
* **Leave location blank in ChartHop&#x20;**- When selected, any open role that does not have a location set in your payroll app will not have a location set in ChartHop.                                                                                                                                                       |
| Advanced sync options                    | Select the data changes you want to include in your sync. You can include some or all of the following employee data: <br />* Job titles 
* Managers 
* Groups 
* Compensation 
* Hire dates                                                                                                                                                                                                                                                                                                                                                                                                                        |
| Overwrite person fields <br /><br />     | ChartHop recommends using this setting to avoid needing to update both ChartHop and your payroll system when a change is made to any field value that is synced from your payroll system.<br /><br />When you choose this option, your payroll system remains the source of truth for the following fields in ChartHop: birthdate, gender, home address, and so on. Any edits you or an employee make to this data in ChartHop are overwritten during synchronization. This can pose an issue when someone uses ChartHop to update employee fields in ChartHop, without requesting an update in the source system.  |
| Exclude IDs                              | To exclude specific individuals from the sync, enter their unique payroll system IDs here, separated by commas.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     |

### Run an initial one-time sync of your payroll data

When you first configure your payroll app, you should run a one-time sync to verify that the sync is operating as you expect it to and that your data is what you expect.

To run a one-time sync:

1. In the setup wizard, select the **Run one-time sync** option.
2. Select **Finish setup**.

## Verify your data in ChartHop

After running your first sync, you can use the Data Sheet and Org Chart pages to spot-check your data. You can use the Sync History page to verify when the sync was run and if it encountered any issues. 

You should spot-check your ChartHop org for the following:

- Correct management reporting lines
- Compensation data
- Employee information on profiles (names, addresses, and so on)
- Job titles
- Departments
- Locations

:::hint{type="info"}
Remember that most issues with your synced data originate in your payroll system. ChartHop allows you to visualize your employee data to make finding these discrepancies easier. Still, you’ll need to fix any data discrepancies in your payroll system and rerun the sync to view the fixes in ChartHop.
:::

## Configure your payroll app sync to run daily

After you’ve synced your data for the first time and verified your Org Chart, you should configure a daily sync. The value of syncing your payroll data to ChartHop is that it ensures that your employee data is always up to date. 

1. From the left sidebar, select **Apps & Bundles**.
2. From the sub-menu, select **Apps,&#x20;**&#x69;f not already pre-selected.
3. Select the **Installed Apps** tab.
4. Scroll to your payroll app and select the gear (settings) icon on the far right of the row to view app settings.
5. Within the **App status & sync** settings section, select the **Edit** (pencil) icon.
6. Toggle the auto-sync option to on.
7. Select **Save**.


[title] Job and new hire data fields
[path] Implementing ChartHop/Apps & Integrations/Applicant tracking systems/Lever Requisitions/

:::hint{type="info"}
[Packages](https://www.charthop.com/pricing/)**:&#x20;**<font color="#a9a9a9">Basic</font> <font color="#000000">|</font> <font color="#000000">**Standard*** | **Premium**</font>****

\* Available as an add-on
:::

The Lever Requisitions integration app flows job data between ChartHop and Lever according to specific field mappings.

:::hint{type="info"}
If you need help with mapping additional data, contact ChartHop’s Professional Services team.
:::

# Mapped job data between ChartHop and Lever

The following fields are used during an inbound or outbound data flow:

| **ChartHop field** | **Lever field**                                                                           |
| ------------------ | ----------------------------------------------------------------------------------------- |
| req                | jobs.requisitionCode                                                                      |
| sensitive          | jobs.confidentiality                                                                      |
| title              | jobs.name                                                                                 |
| employment         | jobs.employmentStatus                                                                     |
| department         | jobs.department                                                                           |
| team               | jobs.team                                                                                 |
| location           | jobs.location                                                                             |
| hiremgr            | jobs.hiringManager                                                                        |
| recruiter          | jobs.owner                                                                                |
| currency, base     | jobs.compensationBand.max, jobs.compensationBand.currency, jobs.compensationBand.interval |
| recruit            | jobs.status                                                                               |

# Mapped new hire data

The following fields are used during a new hire webhook data flow:

| **ChartHop field** | **Lever field**                |
| ------------------ | ------------------------------ |
| name               | candidate.name                 |
| homeEmail          | candidate.emails               |
| mobilePhone        | candidate.phones               |
| startDate          | offer.anticipated\_start\_date |
| base               | offer.salary\_amount           |
| currency           | offer.compensation\_currency   |
| grantShares        | offer.offered\_equity          |


[title] Job and new hire data fields
[path] Implementing ChartHop/Apps & Integrations/Applicant tracking systems/Jobvite/

:::hint{type="info"}
[Packages](https://www.charthop.com/pricing/)**:&#x20;**<font color="#a9a9a9">Basic</font> <font color="#000000">|</font> <font color="#000000">**Standard*** | **Premium**</font>****

\* Available as an add-on
:::

The Jobvite integration app syncs job data between ChartHop and Jobvite according to specific field mappings.

:::hint{type="info"}
If you need help with mapping additional data, contact ChartHop’s Professional Services team.
:::

### Mapped job data between ChartHop and Jobvite

The following fields are used during an inbound or outbound data flow:

| **ChartHop field** | **Jobvite field**             |
| ------------------ | ----------------------------- |
| req                | job.requisitionId             |
| title              | job.title                     |
| description        | job.description               |
| description        | job.briefDescription          |
| employment         | job.jobType                   |
| department         | job.department                |
| location           | job.location                  |
| hiremgr            | job.primaryHiringManagerEmail |
| recruiter          | job.primaryRecruiterEmail     |
| recruit            | job.jobState                  |

### Mapped new hire data from Jobvite

The following fields are used during a new hire webhook data flow:

| **ChartHop field** | **Jobvite field**   |
| ------------------ | ------------------- |
| firstName          | candidate.firstName |
| lastName           | candidate.lastName  |
| homeEmail          | candidate.email     |
| homePhone          | candidate.homePhone |
| mobilePhone        | candidate.mobile    |
| startDate          | offer.startDate     |


[title] Installing the Zenefits app
[path] Implementing ChartHop/Apps & Integrations/Payroll systems/Installing payroll apps/Zenefits/

This section covers setting up the Zenefits integration app, which allows you to sync your employee roster to ChartHop. 

## Review your payroll system data

Your ChartHop payroll app syncs your employee data from your payroll system and builds your org chart in ChartHop. Once your Org Chart is created, you can start using ChartHop.

ChartHop recommends reviewing the data in your payroll system to ensure it is what you expect before you sync it to ChartHop. For example, if an employee has multiple system IDs in your payroll system, that employee’s data won’t sync properly. You should also be sure that your payroll system reflects an accurate view of your organization, including reporting structures, employee locations, and compensation. 

## Obtain API Credentials for Zenefits

For ChartHop to access your organization's Zenefits payroll data, you need to create an API token in Zenefits that you can use in ChartHop.  This information allows ChartHop to connect to Zenefits to receive your employee data.

1. From Zenefits, go to the Custom Integrations option from the Company Profile.
2. Select Add Token.
3. Select the scopes that include employment and personal data.
4. Click **Save**.
5. Click the eye icon to unmask the token and copy the API key.

## Install the Zenefits app

After you have your Zenefits API token, you can install the Zenefits integration app in ChartHop.

1. From the left sidebar, select **Apps & Bundles**.
2. From the sub-menu, select **Apps,&#x20;**&#x69;f not already pre-selected.
3. Select the **Availible Apps** tab.
4. Scroll to your payroll app and select **Install&#x20;**&#x6F;n the far right of the respective app's row.

### Connect the Zenefits app

You'll be prompted to configure your payroll app when you select **Install.**

1. In the **Create your API token** step, copy the API token you created to the provided field.
2. Select **Next step**.

### Configure data sync settings for Zenefits

Data sync settings control how and what data is synced to ChartHop from your payroll system. For example, you can choose whether or not to create a backfill position in ChartHop when you have a departure in your payroll system. Other advanced settings allow you to exclude certain employees.

- Select one of the two options:
  - **Automatically create backfills** - This option creates a backfill position in ChartHop (open job) when an employee is marked as departed in your payroll system.
  - **Sync departures only** - This option removes the departed employee from ChartHop. The employee's job history remains in ChartHop.

### Configure advanced settings

Advanced settings allow you to better control how your payroll data syncs to ChartHop.

ChartHop recommends accepting the default values for these settings. Please get in touch with ChartHop Support or your Customer Success Manager for assistance if needed.

1. Expand the **Advanced settings** section. 
2. Use the following table to guide you through advanced settings decisions. 

| **Setting**                               | **Description&#xA0;**                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               |
| ----------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Missing location information <br /><br /> | Select one of the two options for what should happen if location information is set for an open role:<br />* **Set Remote as the default location in ChartHop** - When selected, any open role that does not have a location set will be set to have a Remote location in ChartHop.
* **Leave location blank in ChartHop&#x20;**- When selected, any open role that does not have a location set in your payroll app will not have a location set in ChartHop.                                                                                                                                                      |
| Advanced sync options                     | Select the data changes you want to include in your sync. You can include some or all of the following employee data: <br />* Job titles 
* Managers 
* Groups 
* Compensation 
* Hire dates                                                                                                                                                                                                                                                                                                                                                                                                                        |
| Overwrite person fields <br /><br />      | ChartHop recommends using this setting to avoid needing to update both ChartHop and your payroll system when a change is made to any field value that is synced from your payroll system.<br /><br />When you choose this option, your payroll system remains the source of truth for the following fields in ChartHop: birthdate, gender, home address, and so on. Any edits you or an employee make to this data in ChartHop are overwritten during synchronization. This can pose an issue when someone uses ChartHop to update employee fields in ChartHop, without requesting an update in the source system.  |
| Historical data                           | Choose whether or not you want to sync historical data. You can turn this off if you want to exclude any historical changes before the date of your initial sync.                                                                                                                                                                                                                                                                                                                                                                                                                                                   |
| Exclude IDs                               | To exclude specific individuals from the sync, enter their unique payroll system IDs here, separated by commas.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     |

### Run an initial one-time sync of your payroll data

When you first configure your payroll app, you should run a one-time sync to verify that the sync is operating as you expect it to and that your data is what you expect.

To run a one-time sync:

1. In the setup wizard, select the **Run one-time sync** option.
2. Select **Finish setup**.

## Verify your data in ChartHop

After running your first sync, you can use the Data Sheet and Org Chart pages to spot-check your data. You can use the Sync History page to verify when the sync was run and if it encountered any issues. 

You should spot-check your ChartHop org for the following:

- Correct management reporting lines
- Compensation data
- Employee information on profiles (names, addresses, and so on)
- Job titles
- Departments
- Locations

:::hint{type="info"}
Remember that most issues with your synced data originate in your payroll system. ChartHop allows you to visualize your employee data to make finding these discrepancies easier. Still, you’ll need to fix any data discrepancies in your payroll system and rerun the sync to view the fixes in ChartHop.
:::

## Configure your payroll app sync to run daily

After you’ve synced your data for the first time and verified your Org Chart, you should configure a daily sync. The value of syncing your payroll data to ChartHop is that it ensures that your employee data is always up to date. 

1. From the left sidebar, select **Apps & Bundles**.
2. From the sub-menu, select **Apps,&#x20;**&#x69;f not already pre-selected.
3. Select the **Installed Apps** tab.
4. Scroll to your payroll app and select the gear (settings) icon on the far right of the row to view app settings.
5. Within the **App status & sync** settings section, select the **Edit** (pencil) icon.
6. Toggle the auto-sync option to on.
7. Select **Save**.


[title] Troubleshooting and FAQ
[path] Implementing ChartHop/Apps & Integrations/Applicant tracking systems/Greenhouse/

This section covers a series of potential issues you may run into when setting up or configuring the Greenhouse integration app, as well as provides answers to commonly asked questions.

### Harvest API key

**Why is my Harvest API key not working?**

If you're having trouble with your Harvest API key, it's may most likely be due to your setup permissions. Please refer to the table below for a complete list of the necessary permissions.

| **Type**     | **Permissions**                                                                                                                                                           |
| ------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Applications | - GET: Retrieve Application
- GET: List Applications                                                                                                                      |
| Candidates   | * GET: Retrieve Candidate
* GET: List Candidates                                                                                                                          |
| Users        | - GET: Retrieve User
- GET: List Users
- GET: List User Future Job Permissions
- GET: List User Job Permissions
- GET: List Pending Approvals
- PUT: Add a job permission |
| Offers       | * GET: List Application's Offers
* GET: Retrieve Application's Current Offer
* GET: Retrieve Offer
* GET: List Offers                                                     |
| Departments  | - GET: Retrieve Department
- GET: List Departments
- POST: Create a new department
- PATCH: Update a department                                                           |
| Jobs         | * GET: Retrieve Job
* GET: List Jobs
* PATCH: Update Job
* POST: Create a new job
* PUT: Replace hiring team                                                              |
| Job posts    | - GET: List Job Posts
- GET: Retrieve Job Post for Job
- GET: List Job Posts for Job
- PATCH: Update job posts                                                            |
| Job stages   | * GET: Retrieve Job Stage
* GET: List Job Stages
* GET: List Job Stages for Job                                                                                           |
| Job openings | - GET: List Openings For a Job
- POST: Create openings
- DELETE: Delete openings
- PATCH: Edit openings                                                                   |
| Offices      | * GET: Retrieve Office
* GET: List Offices
* POST: Create a new office
* PATCH: Update an office                                                                          |
| User roles   | - GET: List user roles                                                                                                                                                    |

If you are still unable to complete this step after attempting the troubleshooting options above, reach out to [support@charthop.com](#).

### Permissions

**Which roles are able to use the Greenhouse integration?**

There are two OOTB access levels in ChartHop specifically designed for Recruiter&#x73;**:&#xA0;**

1. **Recruiting Editor:&#x20;**&#x54;hese users are allowed to view and make changes to open jobs, including target compensation levels and sensitive jobs. They are not allowed to make changes to, or access sensitive data about current employees, other than those they manage. **This permission is generally intended for Recruiting roles or those managing the ATS.**
2. **Recruiting View:** These users are allowed to view sensitive information about open jobs only, including target compensation levels and viewing all sensitive jobs. They are not allowed to make changes to the primary timeline, or access sensitive information about current employees other than those they manage.

Other access levels with the ability to open roles: 

- **Primary Editor:&#x20;**&#x54;hese users are allowed to view all information, and make official, permanent changes to the primary timeline. This access should be restricted tightly and limited to a few authorized individuals in HR, Finance, or similar roles.
- **Owner:&#x20;**&#x54;hese users are allowed full access to everything, including the ability to change user permissions, configure integrations, and alter organization-wide settings. Because of the scope involved, this access should be tightly restricted

### Metrics

**Where do metrics come from?**

ChartHop, once daily, pulls a list of candidates in the ATS, and updates metrics based on the stages that the candidates are in.

For more information about metrics data, reach out to ChartHop’s Professional Services team.

### Data sync updates

**When do updates for ChartHop to Greenhouse job data flows push over?**

Updates for ChartHop to Greenhouse job data flows push over under the following cases:&#x20;

- If a job in ChartHop has not already been mapped to a Greenhouse Job/Opening, the initial sync occurs when the job is set to **Active** recruiting status in Primary.
- If a job in ChartHop has already been mapped to a Greenhouse Job/Opening, updates sync over to Greenhouse regardless of recruiting status.

***

**When do ChartHop jobs get created for Greenhouse to ChartHop job data syncs?**

ChartHop jobs are created for Greenhouse to ChartHop job data syncs during the following:

- If a Greenhouse Job/Opening has not been mapped to a job in ChartHop, a new job is created in ChartHop if the Greenhouse Opening is Open and Greenhouse Job status is either Open or Draft.
- If a Greenhouse Job/Opening has already been mapped to a job in ChartHop, then updates sync over to ChartHop regardless of status until the job is filled. After that, no updates are synced.

**How do I safely clean up roles that were accidentally duplicated during the sync?**

Contact [support@charthop.com](#) to fix this.

### Job data

**Why did the job data flow fail?**

In case a job fails to be properly created, you can check for the following:

1. Confirm that your API and Webhook credentials are correct.
2. Confirm that your **Hiring Manager&#x20;**&#x61;nd **Recruiter** have accounts in both ChartHop and Greenhouse with the **same** email address.
3. **Private** and **Standard** Job Admin levels are supported by default. Custom levels are also supported, however, not by default. (we attempt to give Hiring Managers and Recruiters Job Admin levels to their assigned Greenhouse Jobs).
   - Ensure that the default **Job Admin: Standard&#x20;**&#x61;nd **Job Admin: Private** levels have not been removed or renamed.
   - If the customer has a custom **Job Admin** role level instead in Greenhouse (thereby the default Job Admin levels above do not exist):
     - Ensure that the **Job Admin** role level they want to give to Hiring Managers includes the word "Hiring Manager" (e.g., could be called "ChartHop Hiring Manager").
     - Ensure that the **Job Admin** role level they want to give to Recruiters includes the word "Recruiter" (e.g., could be called "ChartHop Recruiter").
4. Ensure that your departments and teams match between ChartHop and Greenhouse. When matching departments and teams between ChartHop and Greenhouse, the integration attempts to match on both the name, but also any aliases that exist in ChartHop.
5. Confirm that your **Job Templates** names are an **exact** match between ChartHop and Greenhouse.
6. Check whether you have changed the standard required fields in Greenhouse (e.g., if you have set a non-standard default or custom field to be required for job creation)
   - If you have changed the required fields, contact your ChartHop implementation specialist so that they may ensure that your fields get mapped and passed in correctly.
7. Confirm you&#x72;**&#x20;Greenhouse ID** matches the greenhouse Job Id/opening ID combination. To find the opening ID, you can export Greenhouse Jobs from the apps page, or reach out to [support@charthop.com](mailto\:support@charthop.com). Manually editing the GreenhouseID in ChartHop will change what job it is connected to.

Greenhouse comes with a set of default options for Employment types. If you change the Employment type options in your Greenhouse instance, please contact [support@charthop.com](#) in order to configure them appropriately.

***

**Why did the new hire data flow fail?**

In the case a hiring fails, you can check the following:

1. Confirm that an email has been provided for the candidate (either personal or work email).
2. Ensure that the Greenhouse Job ID field is mapped to the correct job. You can contact [support@charthop.com](#) if you need assistance with this (we do not recommend changing this field manually).
3. Be aware that we do not support internal transfers. If a marked new hire in Greenhouse already fills another job in ChartHop, we recommend instead manually transferring the internal transfer in ChartHop directly.

### Job codes

**How does job code matching work by default?**

Job code matching works in the following ways:

1. If a job in ChartHop has a job code attached to it, then when syncing to Greenhouse, the integration attempts to match the jobCode.code to the Greenhouse Job’s Requisition ID.
2. If a match is found, an opening is created underneath that Greenhouse Job, and the \[jobCode.name]\(\<http\://jobCode.name>) syncs over to the Greenhouse Job name INSTEAD of the ChartHop Job title
3. If no match is found, the integration continues to use the default fallback logic (e.g., matching under Title, Title and location, or None).

For example, let’s say there’s a Greenhouse Job with Requisition ID of ENG-SR and title of Sr. Engineer. We create a job code in ChartHop, with the jobCode.code being ENG-SR and \[jobCode.name]\(\<http\://jobCode.name>) of Senior Engineer:

- If we attach the job code to a ChartHop Job that has the job title of Engineer II , when syncing over to Greenhouse, the integration creates an opening to match underneath the existing Greenhouse Sr. Engineer job due to a match on the Requisition ID (ENG-SR):
  - Then, the job title in Greenhouse changes to Senior Engineer to match the ChartHop jobCode.name.
  - For this reason, we generally expect users to keep job codes consistent with existing Greenhouse Jobs.

***

**Can I match by job code and still map a ChartHop Job Title to a Greenhouse Job Title?**

Yes you can! This can be done by disabling the `jobcode_name` to `job.requisition_name` field mapper in Greenhouse. For additional help with field mappings, please contact support at [support@charthop.com](#)

By doing so, the expected behavior is the same as the above, however, ChartHop won’t utilize the job code name and instead uses ChartHop Job Title.

For example, if you have an Operations Associate job in ChartHop with a job code attached that has a job code name of Operations Roles:

- If ChartHop matches using the jobcode to a Greenhouse Job, then we’ll utilize the ChartHop Job Title Operations associate instead of the job code name of Operations Roles.
- If ChartHop doesn’t find any matches, it creates a new Greenhouse Job, passing in:
  - The jobcode.code as the Greenhouse Requisition ID
  - The ChartHop Job Title as the Greenhouse Job Title

### Job status

**Why was the Recruit status for a ChartHop job changed to Pending?**

**Recruit status** can change to **Pending&#x20;**&#x66;or one of three reasons:

1. The status was manually changed.
2. The integration received a new hire webhook (pending new hire) for the job.
3. Changing the Offer Accept Date effectively dates Recruit status changing to Pending on the date selected for the offer acceptance date.

### ATS Setup

**How should I support the setup for my ATS when there are different Departments or Teams between my ATS and payroll system?**

The best practice is to leverage aliases. When aliases are present, if the Department or Team name doesn’t work, ChartHop attempts with aliases, next.

For example, if the Department in Greenhouse is Contractor but the Department in ChartHop is Contract, if there is an alias attached to the ChartHop Department called Contractor, ChartHop will be able to sync into Greenhouse’s Contractor department.

### New hire data

**What does the new hire data webhook pull in? Can I pull in custom fields?**

This can be referenced in the field mappers table, with anything from the candidate or offer endpoints

![Webhook field mappers](https://lh6.googleusercontent.com/cxq8FaEU6GzRJkmJI68ljYsFudmmNiPiSWoywuL968mR-oDS5oVw_NtP-Wl78QmoqR5pl_zpuirirPpV7A52bRxoyE9Hes0xajKr8w51XAU40phwIo51TDqEOChU9Wf0rTL9TMGI0eq3U-m05TO8DraoSdx0IsJJnXbhJ53v0c9YQ9fMyIATsg-BIg "Webhook field mappers")

We also support additional custom field mapping to custom fields in Greenhouse that are tied to the offer object in Greenhouse.


[title] Synced data from Workday
[path] Implementing ChartHop/Apps & Integrations/Payroll systems/Installing payroll apps/Workday/

The following table lists the default data set that is synced from Workday to ChartHop.&#x20;

ChartHop customers can work with ChartHop implementation services to customize what is synced.

:::hint{type="info"}
You must include the country code as a part of any international number for it to be recognized as such within ChartHop. When you are syncing phone numbers from an external system, such as a payroll system or ATS, be sure the country code is included in the phone number that is listed in the external system. This also applies when updating data through a spreadsheet.
:::

| **ChartHop field code**                  | **ChartHop field code** | **Workday field code**                                                                                                             |
| ---------------------------------------- | ----------------------- | ---------------------------------------------------------------------------------------------------------------------------------- |
| Band                                     | band                    | profiles.wd\:Worker\_Data                                                                                                          |
| Base (Deprecated)                        | base                    | profiles.wd\:Worker\_Data                                                                                                          |
| Birth Date                               | birthdate               | profiles.wd\:Worker\_Data.wd\:Personal\_Data.wd\:Birth\_Date                                                                       |
| City - Home Address                      | address.city            | profiles.wd\:Worker\_Data                                                                                                          |
| Country - Home Address                   | address.country         | profiles.wd\:Worker\_Data                                                                                                          |
| Currency (Deprecated)                    | currency                | profiles.wd\:Worker\_Data                                                                                                          |
| Depart                                   | depart                  | profiles.wd\:Worker\_Data                                                                                                          |
| Department                               | department              | profiles.wd\:Worker\_Data                                                                                                          |
| Employment                               | employment              | profiles.wd\:Worker\_Data                                                                                                          |
| End Date                                 | enddate                 | profiles.wd\:Worker\_Data.wd\:Employment\_Data.wd\:Worker\_Job\_Data.wd\:Position\_Data.wd\:End\_Date                              |
| Ethnicity                                | ethnicity               | profiles.wd\:Worker\_Data                                                                                                          |
| Fax                                      | contact.workfax         | profiles.wd\:Worker\_Data                                                                                                          |
| First Name                               | name.first              | profiles.wd\:Worker\_Data.wd\:Personal\_Data.wd\:Name\_Data.wd\:Legal\_Name\_Data.wd\:Name\_Detail\_Data.wd\:First\_Name           |
| Gender                                   | gender                  | profiles.wd\:Worker\_Data                                                                                                          |
| Home email                               | contact.homeemail       | profiles.wd\:Worker\_Data                                                                                                          |
| Home Phone                               | contact.homephone       | profiles.wd\:Worker\_Data                                                                                                          |
| Hourly compensation (Deprecated)         | hourly                  | profiles.wd\:Worker\_Data                                                                                                          |
| Last Name                                | name.last               | profiles.wd\:Worker\_Data.wd\:Personal\_Data.wd\:Name\_Data.wd\:Legal\_Name\_Data.wd\:Name\_Detail\_Data.wd\:Last\_Name            |
| Location                                 | location                | profiles.wd\:Worker\_Data.wd\:Employment\_Data.wd\:Worker\_Job\_Data.wd\:Position\_Data.wd\:Business\_Site\_Summary\_Data.wd\:Name |
| Manager                                  | manager                 | profiles.wd\:Worker\_Data                                                                                                          |
| Mobile                                   | contact.mobilephone     | profiles.wd\:Worker\_Data                                                                                                          |
| Preferred First Name                     | name.pref               | profiles.wd\:Worker\_Data.wd\:Personal\_Data.wd\:Name\_Data.wd\:Preferred\_Name\_Data.wd\:Name\_Detail\_Data.wd\:First\_Name       |
| Start Date                               | startdate               | profiles.wd\:Worker\_Data.wd\:Employment\_Data.wd\:Worker\_Job\_Data.wd\:Position\_Data.wd\:Start\_Date                            |
| State - Home Address                     | address.state           | profiles.wd\:Worker\_Data                                                                                                          |
| Street 1 - Home Address                  | address.street1         | profiles.wd\:Worker\_Data                                                                                                          |
| Street 2 - Home Address                  | address.street2         | profiles.wd\:Worker\_Data                                                                                                          |
| Street 3 - Home Address                  | address.street3         | profiles.wd\:Worker\_Data                                                                                                          |
| Title                                    | title                   | profiles.wd\:Worker\_Data.wd\:Employment\_Data.wd\:Worker\_Job\_Data.wd\:Position\_Data.wd\:Business\_Title                        |
| Variable                                 | variable                | profiles.wd\:Worker\_Data                                                                                                          |
| Variable Type (Deprecated)               | variabletype            | profiles.wd\:Worker\_Data                                                                                                          |
| Work email                               | contact.workemail       | profiles.wd\:Worker\_Data                                                                                                          |
| Work phone                               | contact.workphone       | profiles.wd\:Worker\_Data                                                                                                          |
| Zip/Postal - Home Address                | address.postal          | profiles.wd\:Worker\_Data                                                                                                          |
| *Used to store compensation information* | variablepct             | profiles.wd\:Worker\_Data                                                                                                          |
| *Used to store compensation information* | compdate                | profiles.wd\:Worker\_Data                                                                                                          |

| **ChartHop field code**                  | **ChartHop field code** | **Workday field code**                                                                                                             |
| ---------------------------------------- | ----------------------- | ---------------------------------------------------------------------------------------------------------------------------------- |
| Band                                     | band                    | profiles.wd\:Worker\_Data                                                                                                          |
| Base (Deprecated)                        | base                    | profiles.wd\:Worker\_Data                                                                                                          |
| Birth Date                               | birthdate               | profiles.wd\:Worker\_Data.wd\:Personal\_Data.wd\:Birth\_Date                                                                       |
| City - Home Address                      | address.city            | profiles.wd\:Worker\_Data                                                                                                          |
| Country - Home Address                   | address.country         | profiles.wd\:Worker\_Data                                                                                                          |
| Currency (Deprecated)                    | currency                | profiles.wd\:Worker\_Data                                                                                                          |
| Depart                                   | depart                  | profiles.wd\:Worker\_Data                                                                                                          |
| Department                               | department              | profiles.wd\:Worker\_Data                                                                                                          |
| Employment                               | employment              | profiles.wd\:Worker\_Data                                                                                                          |
| End Date                                 | enddate                 | profiles.wd\:Worker\_Data.wd\:Employment\_Data.wd\:Worker\_Job\_Data.wd\:Position\_Data.wd\:End\_Date                              |
| Ethnicity                                | ethnicity               | profiles.wd\:Worker\_Data                                                                                                          |
| Fax                                      | contact.workfax         | profiles.wd\:Worker\_Data                                                                                                          |
| First Name                               | name.first              | profiles.wd\:Worker\_Data.wd\:Personal\_Data.wd\:Name\_Data.wd\:Legal\_Name\_Data.wd\:Name\_Detail\_Data.wd\:First\_Name           |
| Gender                                   | gender                  | profiles.wd\:Worker\_Data                                                                                                          |
| Home email                               | contact.homeemail       | profiles.wd\:Worker\_Data                                                                                                          |
| Home Phone                               | contact.homephone       | profiles.wd\:Worker\_Data                                                                                                          |
| Hourly compensation (Deprecated)         | hourly                  | profiles.wd\:Worker\_Data                                                                                                          |
| Last Name                                | name.last               | profiles.wd\:Worker\_Data.wd\:Personal\_Data.wd\:Name\_Data.wd\:Legal\_Name\_Data.wd\:Name\_Detail\_Data.wd\:Last\_Name            |
| Location                                 | location                | profiles.wd\:Worker\_Data.wd\:Employment\_Data.wd\:Worker\_Job\_Data.wd\:Position\_Data.wd\:Business\_Site\_Summary\_Data.wd\:Name |
| Manager                                  | manager                 | profiles.wd\:Worker\_Data                                                                                                          |
| Mobile                                   | contact.mobilephone     | profiles.wd\:Worker\_Data                                                                                                          |
| Preferred First Name                     | name.pref               | profiles.wd\:Worker\_Data.wd\:Personal\_Data.wd\:Name\_Data.wd\:Preferred\_Name\_Data.wd\:Name\_Detail\_Data.wd\:First\_Name       |
| Start Date                               | startdate               | profiles.wd\:Worker\_Data.wd\:Employment\_Data.wd\:Worker\_Job\_Data.wd\:Position\_Data.wd\:Start\_Date                            |
| State - Home Address                     | address.state           | profiles.wd\:Worker\_Data                                                                                                          |
| Street 1 - Home Address                  | address.street1         | profiles.wd\:Worker\_Data                                                                                                          |
| Street 2 - Home Address                  | address.street2         | profiles.wd\:Worker\_Data                                                                                                          |
| Street 3 - Home Address                  | address.street3         | profiles.wd\:Worker\_Data                                                                                                          |
| Title                                    | title                   | profiles.wd\:Worker\_Data.wd\:Employment\_Data.wd\:Worker\_Job\_Data.wd\:Position\_Data.wd\:Business\_Title                        |
| Variable                                 | variable                | profiles.wd\:Worker\_Data                                                                                                          |
| Variable Type (Deprecated)               | variabletype            | profiles.wd\:Worker\_Data                                                                                                          |
| Work email                               | contact.workemail       | profiles.wd\:Worker\_Data                                                                                                          |
| Work phone                               | contact.workphone       | profiles.wd\:Worker\_Data                                                                                                          |
| Zip/Postal - Home Address                | address.postal          | profiles.wd\:Worker\_Data                                                                                                          |
| *Used to store compensation information* | variablepct             | profiles.wd\:Worker\_Data                                                                                                          |
| *Used to store compensation information* | compdate                | profiles.wd\:Worker\_Data                                                                                                          |


[title] Okta
[path] Implementing ChartHop/Apps & Integrations/Identity & SSO/

The **Okta** app automatically updates your Okta profiles with ChartHop source data. You can configure both Okta profile fields and group memberships. Optionally, you can set the app to create Okta profiles when people are added to ChartHop.

When you install Okta, you'll need to make decisions about how you want to handle Okta profiles, whether you set a default location, and what fields you want to include in your sync.

| **Field**                        | **Description**                                                                                                                       |
| -------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------- |
| Okta profiles                    | - Automatically create new Okta profiles from ChartHop on sync
- Don’t create new profiles only update existing Okta profiles on sync |
| Sync new hires before start date | The number of days before a start date to begin syncing new hires                                                                     |

## Obtain Okta API credentials

You will need to obtain API access from Okta before you can install the app. To obtain an Okta API key, follow the steps outlined in their help document [here](https://support.okta.com/help/s/article/How-do-I-create-an-API-token?language=en_US).

:::hint{type="info"}
- To connect Okta to ChartHop, you must be an *Okta administrator*.
- Once you've received the API token from Okta, do not share this information with anyone outside of your organization.
:::

## Install the Okta app

To install the **Okta** app, follow the steps below.

1. From the left sidebar, select **Apps & Bundles**.
2. From the sub-menu, select **Apps**.
3. Select the **Availible Apps** tab.
4. Locate and select the **Okta** app.
5. Select **Install**.
6. Follow the steps outlined in the setup wizard to connect the Okta app to ChartHop.

## &#x20;Configure Lifecycle & Provisioning Settings

Once the app is installed, you must configure how ChartHop handles new hires, re-hires, and departures. These settings determine when an Okta profile is created and when access is revoked.

### Basic Settings

Access these by selecting **Edit** under the **Basic Settings** section of the Okta app.

| **Setting**                                   | **Description**                                                                                                                                               |
| --------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Create Okta profiles for new hires**        | When enabled, ChartHop automatically creates an Okta record for any new person added to the platform.                                                         |
| **Re-activate Okta profiles for re-hires**    | When enabled, ChartHop identifies returning employees and re-activates their existing (inactive) Okta profile rather than creating a duplicate.               |
| **De-activate Okta profiles on departures**   | Automates the de-activation of Okta accounts based on the termination date in ChartHop.                                                                       |
| **De-activate same-day voluntary departures** | If checked, you can set a specific **deactivation Time** (e.g., 11:00 PM). This allows voluntary leavers to maintain access until the end of their final day. |
| **Send email and activate upon creation**     | Determines if the account is immediately activated or remains in a "staged" state. *Note: Test this to ensure it aligns with your onboarding workflow.*       |

## Automated De-activation Logic

ChartHop performs a daily sync to manage departures based on the following rules:

- **Past Departures:** Any employee terminated **yesterday** (voluntary or involuntary) who remains active in Okta will be deactivated during the morning sync.
- **Involuntary Departures:** If event-based sync is active, these users are typically deactivated immediately upon the termination being entered.
- **Voluntary Departures:** These users are deactivated once per day at the designated cutoff time (e.g., 11:00 PM ET) to ensure they have access for their full final shift.

## Run a single, on-demand sync to Okta

Any ChartHop user with sufficient permissions can trigger an on-demand sync to Okta at any time. To sync your data for the first time, or subsequently, on-demand at any time, follow the steps below.

1. From the left sidebar, select **Apps & Bundles**.
2. From the sub-menu, select **Apps**.
3. Select the **Installed Apps** tab.
4. Locate and select the **Okta** app in the list of installed apps.
5. At the top of the page, select **Run one-time sync**.
6. Select **Run sync&#x20;**&#x74;o perform the sync.&#x20;

### Export dry runs

Any ChartHop user with sufficient permissions can trigger a test integration between Okta and ChartHop at any time.&#x20;

1. From the left sidebar, select **Apps & Bundles**.
2. From the sub-menu, select **Apps**.
3. Select the **Installed Apps** tab.
4. Locate and select the **Okta** app in the list of available apps.
5. At the top of the page, select **Run one-time sync**.
6. Select **Export dry run** to test the integration.
7. When the integration is complete, select **Download** to recieve the test results file.

### Create sync groups

You can create and populate Okta groups from the app config page by following the steps below.

1. From the left sidebar, select **Apps & Bundles**.
2. From the sub-menu, select **Apps**.
3. Select the **Installed Apps** tab.
4. Locate and select the **Okta** app in the list of available apps.
5. Under the **Advanced Settings** section, select **Edit**.&#x20;
6. Under the **Sync Groups&#x20;**&#x73;ection, select **+ Add group.**
7. Enter a name for the group in the **Group Name** field.
8. Enter a corresponding Carrot query in the **Include People Matching** field, or use the filter controls to the left.
9. Select **test** to confirm your query. It should open the Data Sheet in a new tab with your query applied.
10. Select **Save** at the bottom of the page.

### Create sync profile fields

For each custom Okta profile field, you may define a ChartHop field or expression to be synced. To do this, follow the steps below.

1. From the left sidebar, select **Apps & Bundles**.
2. From the sub-menu, select **Apps**.
3. Select the **Installed Apps** tab.
4. Locate and select the **Okta** app in the list of available apps.
5. Under the **Advanced Settings** section, select **Edit**.&#x20;
6. Under the **Sync Profile Fields&#x20;**&#x73;ection, select + **Add field**.
7. Enter the name of a custom Okta profile field that you wish to populate with data.
8. Enter the corresponding query or field that you wish to copy from ChartHop.
9. Select **Save** at the bottom of the page

**Common Expression Examples**

Use these common expressions to map ChartHop data to Okta fields:

| **Okta Field Name** | **ChartHop Expression** | **Description**                                                                      |
| ------------------- | ----------------------- | ------------------------------------------------------------------------------------ |
| managerEmail        | manager.email           | Pulls the primary email of the employee's direct manager.                            |
| deptCode            | department.code         | Syncs the short-hand code for the department (e.g., "ENG" instead of "Engineering"). |
| costCenter          | custom.cost\_center     | Pulls a custom field value defined in your ChartHop instance.                        |
| isManager           | is\_manager             | A boolean (true/false) based on whether the person has direct reports.               |

### Supported Attributes

The following SAML attributes are supported:

| **Attribute name** | **Name format** | **Value**                  |
| ------------------ | --------------- | -------------------------- |
| org                | unspecified     | `{org-slug-from-ChartHop}` |
| email              | unspecified     | `user.email`               |
| first\_name        | unspecified     | `user.firstName`           |
| last\_name         | unspecified     | `user.lastName`            |

:::hint{type="info"}
[Modules](https://www.charthop.com/pricing/)**:&#x20;**<font color="#000000">**HRIS** | </font>Engagement | Goals | Performance | <font color="#000000">Compensation Reviews | </font>Headcount Planning
:::


[title] Using ChartHop to open jobs
[path] Implementing ChartHop/Apps & Integrations/Applicant tracking systems/Greenhouse/Untitled/

In an outbound job data flow, ChartHop serves as the primary source of truth for open jobs. Depending on the status of a job in ChartHop, it translates to a specific status for the same job in Greenhouse.

Only one Hiring Manager and Recruiter can be chosen in ChartHop and thus be synced into Greenhouse.

As a workaround, if Hiring Manager and/or Recruiter is blank in ChartHop, but multiple exist in Greenhouse, syncs do not overwrite what’s in Greenhouse.

:::hint{type="warning"}
Group fields cannot be custom mapped. For example a Department in ChartHop can not be mapped to a custom Greenhouse field, and a custom field in ChartHop can not be mapped to Greenhouse Department.
:::

:::hint{type="info"}
Greenhouse job field values default to ChartHop’s if any changes are made, therefore changing an open role must be done in ChartHop to be accurately reflected in Greenhouse.

 

However there is an exception for Hiring Manager and Recruiter fields where the integration will not override those fields if they are left empty in ChartHop. This is to accommodate Greenhouse’s ability to have multiple hiring managers and recruiters.
:::

### Outbound job status mappings

ChartHop job statuses map to Greenhouse job statuses in the following way:

| **ChartHop Status&#xA0;** | **Data flow** | **Greenhouse Opening Status** |
| ------------------------- | ------------- | ----------------------------- |
| Active                    | →             | Open                          |
| Passive                   | →             | Closed                        |
| Inactive                  | →             | Closed                        |
| Pending                   | \<-           | Offer Accepted                |
| Offer                     | →             | Does nothing                  |
| Remove Job                | →             | Opening Deleted               |

:::hint{type="info"}
Charthop Jobs only change the status of Greenhouse Openings directly. That being said, if all Openings underneath a Greenhouse Job are deleted or closed, the Greenhouse Job will automatically turn to Closed.
:::

### Create a job

When conducting your headcount planning in ChartHop, you can add new hires and new direct reports as you normally would, but with the added functionality of the outbound data flow which triggers the moment you set a specific new role(s) **Recruiting** **status&#x20;**&#x74;o **Active**.

![Setting a job as Active triggers the outbound data flow.](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/gfRoQrXtHDkkix2rnITBh_group-17-1.png "Setting a job as Active triggers the oubound data flow.")

To create a new job in ChartHop under an outbound job data flow, follow these steps:

1. From the left sidebar, select **Org Chart.**
2. In the **Org Chart**, create a new job by either: 
   - Adding a direct report by selectin&#x67;**&#x20;Add a** **direct report&#x20;**&#x75;nder a pre-existing person or role.
   - Creating a new job by selecting **New hire** under a pre-existing person or role.
3. In the **Create job** dialog enter your information for the new role under the following tabs:
   - **Structure** - General information about the role, including title, department, and location.
   - **Compensation** - Compensation information about the role, including salary and bonuses.
   - **Recruiting** - Recruiting information about the role, including hiring status and start date.
   - **Description** - A general description about the role.

The outbound job data flow kicks in the moment you set the **Recruiting** **status** for your newly created role is set to **Active**.

### Job hiring status

Any open roles with a **Recruiting status** set to **Active** in ChartHop flow from ChartHop to Greenhouse. New open jobs in ChartHop with an **Active** recruiting status close in Greenhouse if the job is set back to an **Inactive** or **Passive&#x20;**&#x73;tatus in ChartHop. Deleting a job in ChartHop removes the same job in Greenhouse.

| **ChartHop job status** | **Result in Greenhouse**                                                                                                                                                                                                  |
| ----------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Active                  | A req is automatically created in Greenhouse either as a new Greenhouse job or opening, or as a new opening underneath an existing Greenhouse job.                                                                        |
| Inactive or Passive     | The job opening is closed in Greenhouse.<br /><br />A created ChartHop Job set as Inactive or Passive does not sync over to Greenhouse during the initial Greenhouse Job/Opening creation unless it is set to **Active.** |
| Removed job             | The job opening is deleted in Greenhouse.                                                                                                                                                                                 |

:::hint{type="info"}
If the job in ChartHop is the only opening beneath a Greenhouse job, and if the opening is set to **Closed** in Greenhouse, if the ChartHop job is set to **Inactive** or **Passive**, then the job in Greenhouse is automatically closed.
:::

### Job templates

When a new job is created in ChartHop, it copies the job posting from the matching job template configured in the Greenhouse integration job template settings. See[Greenhouse Job Templates](docId\:Vg4De4LCfoKCssAQz9Ier) for more infor

### Job matching 

With **Match Jobs by Job Code** enabled in the Greenhouse integration settings, all ChartHop jobs match with their respective Greenhouse jobs according to the Greenhouse job’s *Requisition ID*. 

New jobs created in ChartHop with a Job Code are reflected in Greenhouse with the Job Code's name (Settings > Groups > Job Codes) instead of the job's title.

I&#x66;**&#x20;Match Jobs By Job Code** is disabled, no job codes exist, or if no match is found via job codes, the initial mappings are then determined by your **Group Job Openings** settings (for example **Title**, **Title** **and** **Location**, or **None**).

For example, if **Title** is selected, then a ChartHop Job is created as a Greenhouse opening underneath a Greenhouse job that has the same **Title**. Once the initial mappings are set, the job in ChartHop is tied to the job in Greenhouse through the Greenhouse Job ID (*greenhouseId)* field in ChartHop.

ChartHop stores both the job id and opening id in the Greenhouse Job ID (*greenhouseId*) field, separated by a slash.

For example, if *greenhouseId* has a value of 123/456, that means the job id has a value of 123 and the opening id has a value of 456.

![Creating a job generates the greenhouseId denoted as jobid/openingid.](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/31dE3cnsSpLo4kaUAoWtl_group-18.png "Creating a job generates the greenhouseId denoted as jobid/openingid.")

:::hint{type="warning"}
The Opening ID is NOT the Opening ID field in the Greenhouse UI. It is the API-assigned Opening ID. If no “Req Code” is provided in ChartHop, ChartHop automatically sets the Opening ID in the Greenhouse UI to the API-assigned Opening ID. However, changing the Opening ID in the Greenhouse UI will not change the API-assigned Opening ID, so manually changing the greenhouseId in ChartHop is *not recommended*.
:::

### Job matching when merging roles to primary in a scenario

When managing an outbound data flow in a ChartHop scenario, you should be aware of the logic used in order to match the jobs.

Once you create a new job in ChartHop or update the job to **Active&#x20;**&#x74;hrough the Org chart, or using a merged scenario, the new job information migrates to Greenhouse.

If a job match can't be found in Greenhouse, a new Greenhouse job is created via the job’s template. The job post tied to the newly created Greenhouse job is the job post specified according to the job’s assigned job template in the Greenhouse integration app’s settings.

As a recruiter, after an initial sync, you can navigate to Greenhouse and update all of the pertinent information pertaining to a role that is not updated in ChartHop, such as the job’s description. With this done, you can begin actively recruiting for the open role.

### Reconcile data

During a sync, you may run into inconsistencies with your data due to sync failures or changes in the custom field mappings. To handle these cases, you can enable the Greenhouse integration app's **Reconciliation** feature. 

With **Run Daily** enabled in the Greenhouse integration app configuration settings, reconciliations are triggered on a daily basis. You may also manually trigger the reconciliation by selecting the **Sync Greenhouse Jobs** button located at the base of the Greenhouse integration app settings page.

:::hint{type="info"}
Reconciliations are only available for outbound job data flows.
:::

![Select the Run a One Time Sync button to manually trigger a reconciliation.](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/QM8oB9f1wahBoDI67rvXh_group-19.png "Select the Run a One Time Sync button to manually trigger a reconcilliation.")

To manually run a data sync reconciliation:

1. From the left sidebar, select **Apps & Bundles**.
2. From the sub-menu, select **Apps**.
3. Select the **Installed Apps** tab.
4. Scroll the list down to the **Greenhouse** app.
5. Select the **Greenhouse** app.
6. From the ChartHop **Greenhouse** app settings page, scroll down to the bottom of the settings page.
7. Select **Sync Greenhouse Jobs**.


[title] Greenhouse Job Templates
[path] Implementing ChartHop/Apps & Integrations/Applicant tracking systems/Greenhouse/Untitled/

## Custom and default job template matchers

With job templates you can create detailed job postings that can be assigned to jobs in your Greenhouse integration.

### Create a default job template matcher

You can specify a default template for your jobs in your Greenhouse integration app’s settings. The default template is used whenever a job in ChartHop does not match any of the criteria specified in the **Template Matching Filter**. Similarly, if no custom job templates are provided, all new Greenhouse Jobs are created using the default template. You can create a default template in order to account for jobs that do not have any specific criteria.

![](https://archbee-image-uploads.s3.amazonaws.com/zxjhb7-DqnuzAP-lru1l3-POCwnU5HYusR_VQ4eAzzr-20250108-193711.png)

To create a default job template in ChartHop: 

1. Mark the existing job in Greenhouse as a *template job*. 
2. Create your default template job in Greenhouse.
3. In ChartHop, from the left sidebar, select **Apps & Bundles**.
4. From the sub-menu, select **Apps**.
5. Select the **Installed Apps** tab.
6. Scroll the list down to the **Greenhouse** app.
7. Select the **Greenhouse** app.
8. From the ChartHop **Greenhouse** app settings page, enter the name of your default template under the **Default Template Name**.

### Create a custom job template matcher

With a custom job template, you can specify what job template to use when creating a new Greenhouse Job if no match is found. This allows you to include additional information, such as the job’s description.

To create a custom job template in ChartHop: 

1. Mark the existing job in Greenhouse as a *template job*. 
2. Create your template job in Greenhouse.
3. In ChartHop, from the left sidebar, select **Apps & Bundles**.
4. From the sub-menu, select **Apps**.
5. Select the **Installed Apps** tab.
6. Scroll the list down to the **Greenhouse** app.
7. Select the **Greenhouse** app.
8. From the ChartHop **Greenhouse** app settings page, in the **Template Matchers** section, select **+ Add Template Matcher&#x20;**&#x74;o create a new template matcher. 
9. Enter the template name using the same name of the template you made in Greenhouse.

:::hint{type="warning"}
Because your ChartHop template name must exactly match the job template name in Greenhouse, we recommend that you copy and paste the name to avoid any errors.
:::

### Customize your filters

Under Template matching filter you can build custom logic to determine when the template is used. For example, in the picture, we are specifying that any job that is part of the "New York" Office to use the“JobTemplateUS” in Greenhouse.

When a new job is created in Greenhouse and no existing matches are found, the Greenhouse job contains additional information attached to that job template, such as the job post, job description, and interview plan.

### Test your job template matcher

You can test your templates to ensure that your open jobs are properly selected. This allows you to perform a manual check of your filter criteria to see what existing ChartHop Jobs match that criteria by highlighting them in the **Data Sheet**.

To test your job template filter:

1. From the left sidebar, select **Apps & Bundles**.
2. From the sub-menu, select **Apps**.
3. Select the **Installed Apps** tab.
4. Scroll the list down to the **Greenhouse** app.
5. Select the **Greenhouse** app.
6. From the ChartHop **Greenhouse** app settings page, in the **Template Matchers** section, select **+ Add Template Matcher&#x20;**&#x74;o create a new template matcher. 
7. Paste your Greenhouse template name in the **Template Name&#x20;**&#x66;ield.
8. Enter your **Template Matching Filter**.
9. Select **Test**.

If your test is successful, you can see a filtered **Data Sheet** containing all jobs in ChartHop that match your criteria.






[title] Adding Greenhouse Jobs
[path] Implementing ChartHop/Apps & Integrations/Applicant tracking systems/Greenhouse/Untitled/

When you configure ChartHop to be the source of truth (outbound data flow), you can choose to import any previously existing Greenhouse jobs into ChartHop.&#x20;

This is a two-step process.  First, you'll use ChartHop's Greenhouse integration app to export your existing jobs and then use ChartHop to import your exported jobs to ChartHop using a CSV file.

You can choose add all jobs, including those that are not active, or just import your active jobs from Greenhouse.

![](https://archbee-image-uploads.s3.amazonaws.com/zxjhb7-DqnuzAP-lru1l3-8zyGr6UpGwg_XzHXkImQd-20250108-194540.png)

### Use the app to export existing Greenhouse jobs to a CSV

To export Greenhouse jobs follow these steps:

1. In ChartHop, from the left sidebar, select **Apps & Bundles**.
2. From the sub-menu, select **Apps**.
3. Select the **Installed Apps** tab.
4. Scroll the list down to the **Greenhouse** app.
5. Select the **Greenhouse** app.
6. From the ChartHop **Greenhouse** app, in the header select the  **Export Greenhouse jobs**.  settings page, select one of the following:
   - **Only export active open roles** if you wish to include only **Open&#x20;**&#x47;reenhouse jobs.
   - **Export all open roles** if you wish to include all job openings.
7. Select **Export**

### Verify your exported roles

Before you import Greenhouse jobs into ChartHop, follow these steps:

1. Open the .csv in Excel or Google Sheets.
2. Remove any roles that are not on your hiring plan, such as test jobs or otherwise closed roles. 
3. Ensure that the list of roles is correct and up to date, and reflects what you want imported into ChartHop as the new source of truth for your hiring plan.

### Import your Greenhouse jobs to ChartHop

To import your saved CSV to ChartHop, save the edited file as a .csv or .xlsx and upload it on the [Import Spreadsheet](https://app.charthop.com/import/csvdata) page in ChartHop.

Once the upload is complete, the hiring plan of open jobs in ChartHop should mirror the hiring plan of open reqs in Greenhouse. From this point forward, you can use ChartHop as the system of record for open roles.


[title] Using Lever to open jobs
[path] Implementing ChartHop/Apps & Integrations/Applicant tracking systems/Lever Requisitions/Lever as the source of truth/

:::hint{type="info"}
[Packages](https://www.charthop.com/pricing/)**:&#x20;**<font color="#a9a9a9">Basic</font> <font color="#000000">|</font> <font color="#000000">**Standard*** | **Premium**</font>****

\* Available as an add-on
:::

When you configure your Lever Acquisitions app to have an inbound flow, Lever serves as the primary source of truth for open jobs. Depending on the status of a job in Lever, it translates to a specific status for the same job in ChartHop.&#x20;

When you open a job in Lever, that job is also created and opened in ChartHop. As a result, any changes you make to open roles in ChartHop are not reflected in Lever.

:::hint{type="info"}
If a requisition is marked as Confidential in Lever, it is marked as Highly Sensitive when it is pulled into ChartHop.
:::

The status changes between ChartHop and Lever are reflected in the following table:

| **Lever status** | **Direction** | **ChartHop status** |
| ---------------- | ------------- | ------------------- |
| Open             | ➡️            | Active              |
| On hold          | ➡️            | Inactive            |
| Draft            | ➡️            | Inactive            |
| Hired            | ➡️            | Pending             |
| Closed           | ➡️            | Inactive            |

If there are already open ChartHop jobs and an inbound sync occurs, unmapped Lever Requisitions are first attempted to be matched to existing open jobs in ChartHop by matching on title and manager.

| **Lever status**       | **Result in ChartHop**                                                                                                                                                                             |
| ---------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Open                   | A new **Active** job in ChartHop is automatically created. If the Lever requisition was already mapped to an existing job in ChartHop, the ChartHop job is set to an **Active** recruiting status. |
| On Hold, Draft, Closed | The ChartHop job is set to an **Inactive** recruiting status.                                                                                                                                      |
| Hired                  | The ChartHop job is set to a **Pending** recruiting status.                                                                                                                                        |


[title] Troubleshooting and FAQ
[path] Implementing ChartHop/Apps & Integrations/Applicant tracking systems/Jobvite/

### Permissions

**Which ChartHop roles are required for creating and viewing open jobs?**

There are two access levels in ChartHop specifically designed for Recruiters: 

1. **Recruiting Editor** - These users are allowed to view and make changes to open jobs, including target compensation levels and sensitive jobs. They are not allowed to make changes to, or access sensitive data about current employees, other than those they manage. This permission is generally intended for Recruiting roles or those managing the ATS.
2. **Recruiters&#x20;**- These users are allowed to view sensitive information about open jobs only, including target compensation levels and viewing all sensitive jobs. They are not allowed to make changes to the primary timeline, or access sensitive information about current employees other than those they manage.

Other access levels with the ability to open roles: 

- **Org Editor&#x20;**- These users are allowed to view all information, and make official, permanent changes to the primary timeline. This access should be restricted tightly and limited to a few authorized individuals in HR, Finance, or similar roles.
- **Owner&#x20;**- These users are allowed full access to everything, including the ability to change user permissions, configure integrations, and alter organization-wide settings. Because of the scope involved, this access should be tightly restricted.

### Metrics

**Where are metrics coming from?**

ChartHop, once daily, pulls a list of candidates in Jobvite, and updates metrics based on the stages that the candidates are in.

### Job Data

**Why did the job fail?**

In case a jobs fails to be properly created, you can check for the following:

1. Confirm that your API and Webhook credentials are correct.
2. Confirm that your Hiring Manager and Recruiter have accounts in both ChartHop and Jobvite with the same email address.
3. Confirm that Description was provided in Charthop
4. Ensure that your teams match between ChartHop and Jobvite.
5. Ensure that there are no teams with the same name across different departments in Jobvite. Please contact [support@charthop.com](#) should this occur.

Lastly, you can review any errors that occur during your sync in detail by checking your ATS app’s sync history page. [Learn more](https://docs.charthop.com/sync-history).

***

**Why did a hiring fail?**

In the case a hiring fails, you can check the following:

1. Confirm that an email has been provided for the candidate
2. Ensure that the Jobvite Req ID field is mapped to the correct job. You can contact [support@charthop.com](#) if you need assistance with this.
3. Be aware that we do not support internal transfers.

### Data sync updates

**When do updates for ChartHop to Jobvite job data flows push over?**

Updates for ChartHop to Jobvite job data flows push over in the following cases:

- If a ChartHop Job has not already been mapped to a Jobvite requisition (e.g., no value in ChartHop's Jobvite ID field), the initial sync will occur when the ChartHop Job is turned to Active recruiting status in Primary.
- If a ChartHop Job has already been mapped to a Jobvite requisition (e.g., there IS a value in ChartHop Jobvite Req ID field), updates will sync over to Jobvite regardless of recruiting status (e.g., even if marked to Inactive, updates will sync over to Jobvite).

***

**When do ChartHop jobs get created for Jobvite to ChartHop job data syncs?**

ChartHop jobs are created for Jobvite to ChartHop job data syncs in the following cases:

- If a Jobvite requisition has not been mapped to a ChartHop Job, a new ChartHop Job will only be created if the Jobvite requisition is Open.
- If a Jobvite requisition has already been mapped to a ChartHop Job, updates will sync over to ChartHop regardless of status until the ChartHop Job is filled (after which no updates are synced).

***

**How do I safely clean up roles that were accidentally duplicated during the sync?**

To fix this, you will need to contact [support@charthop.com](#).

### ATS Setup

**How should I support the setup for my ATS when there are different Departments or Teams between my ATS and payroll system?**

The best practice is to leverage aliases. When aliases are present, if the Department or Team name doesn’t work, ChartHop attempts with aliases, next.

For example, if the Team in Jobvite is Contractor but the Team in ChartHop is Contract, if there is an alias attached to the ChartHop Team called Contractor, we’ll be able to sync into Jobvite’s Contractor team.

### Job status

**Why was Recruit status changed to Pending?**

Recruit status can change to Pending for one of three reasons:

1. Manually changing the status.
2. Receiving a new hire webhook (pending new hire) for the job.
3. Changing the Offer Accept Date will effective date Recruit status changing to Pending on the date selected for the offer acceptance date.


[title] Bundles
[path] Implementing ChartHop/

ChartHop has one-click install bundles that contain additional built-in fields, forms, and custom profile tabs that integrate directly into your reporting and employee profiles.

Included bundles include employee surveys about returning to the office, additional dashboard reports, as well as assessment forms for determining emergency and permanent successors. ChartHop continually adds additional bundles for you to choose from.&#x20;

You can preview the bundle to see a list of the fields it includes and get an idea of where the form will appear in ChartHop.

You must have the owner role in order to install bundles.&#x20;

### Preview a bundle

You can preview any of the included ChartHop bundles.

1. From the left sidebar, select **Apps & Bundles**.
2. From the sub-menu, select **Bundles**.
3. Select the **Availible Bundles** tab.&#x20;
4. Within the Available bundles section, select Install to see an overview of your selected bundle. Within the Bundle page, you can expand each category to examine the content of the bundle. You can view fields, reports, or forms, depending on what is included in the particular bundle.

### Install a bundle

1. From the left sidebar, select **Apps & Bundles**.
2. From the sub-menu, select **Bundles**.
3. Select the **Availible Bundles** tab.&#x20;
4. Within the Available bundles section, select **Install** to see an overview of your selected bundle.
5. Within the Bundle page, select **Install** to install the bundle.



### Uninstall a bundle

1. From the left sidebar, select **Apps & Bundles**.
2. From the sub-menu, select **Bundles**.
3. Select the **Installed Bundles** tab.&#x20;
4. Find the budle that you would like to unstill and select it.&#x20;
5. Within the Bundle page, select **Uninstall** to uninstall the bundle.
6. In the uninstall dialog, select which items from the bundle you would like to uninstall.&#x20;

   *For example, you may want to remove the Dashboard but not the fields.&#x20;*



:::hint{type="info"}
[Packages](https://www.charthop.com/pricing/)**:&#x20;**<font color="#a9a9a9">Basic</font> <font color="#000000">|</font> <font color="#000000">**Headcount Planning** | </font><font color="#000000">**Compensation Reviews** | </font><font color="#000000">**Performance** | </font><font color="#000000">**Engagement** </font>
:::

:::hint{type="info"}
﻿﻿[Roles](https://docs.charthop.com/user-roles-and-permissions): Technical owner | Owner&#x20;
:::


[title] Setting up the Greenhouse integration
[path] Implementing ChartHop/Apps & Integrations/Applicant tracking systems/Greenhouse/

This section covers the process of setting up the ChartHop Greenhouse integration app which allows you to migrate your job data between Greenhouse and ChartHop.&#x20;

Setting up the ChartHop Greenhouse integration app requires the following steps:

1. Create a Greenhouse API key
2. Install the Greenhouse integration app
3. Set up the API connection
4. Configure the flow of job data
5. Set up the flow of new hire data
6. Configure outbound group job openings

:::hint{type="info"}
ATS integrations are typically done with help from ChartHop's professional services. Contact your implementation specialist before beginning these steps.
:::

## Create a Greenhouse API key

In order for ChartHop to access your organization's Greenhouse recruiting data, you need to create an API key to provide to ChartHop.

You use Greenhouse to create this API Key. The user that you use to create the API key must have the *Can manage ALL organization’s API Credentials* permission in **Developer permissions**. You can work with your Greenhouse administrator if you have questions. 

To create your API key, follow the steps outlined in the [Greenhouse API Documentation](https://support.greenhouse.io/hc/en-us/articles/202842799-Generate-API-key-for-Greenhouse-Recruiting).

Use the Greenhouse instructions to create your API key and enter the following values when creating the key.

| **Field name** | **Value**        |
| -------------- | ---------------- |
| API type       | Harvest          |
| Partner        | ChartHop         |
| Description    | Leave this blank |

:::hint{type="info"}
Once you create your Harvest API key, a set of permissions are applied to the connection by default. Leave all options as their default settings.
:::

## Install the Greenhouse Integration App

Once you've created your API key, you can install the Greenhouse integration app.

 To install the Greenhouse integration app:

1. From the left sidebar, select **Apps & Bundles**.
2. From the sub-menu, select **Apps**.
3. Select the **Availible Apps** tab.
4. Scroll the list down to the Greenhouse app.
5. Select **Install**.

Select **Install** from the app install page.

## Set up the API connection

To allow ChartHop to access your Greenhouse data, enter your Greenhouse API credentials in the proper fields in the **Connection&#x20;**&#x73;ection of the **Settings Tab&#x20;**&#x6F;f the app.

Using the following fields, add both your **Greenhouse Domain** and **Harvest API Key**:

| **Field**            | **Description**                                                                                                                                   |
| -------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
| Greenhouse subdomain | The subdomain used by your Greenhouse instance. For example, if your domain is called: myorg.greenhouse.io, then your subdomain would be “myorg”. |
| Harvest API Key      | The Harvest API key generated in Greenhouse.                                                                                                      |

## Configure the flow of job data

Once you establish your API connection, you can configure the type of job data flow that the integration runs. 

**Select your sync direction & source of truth**

When setting up your integration, you can choose the primary source of truth when referencing new job data. An outbound job data flow sets ChartHop as the source of truth, whereas, an inbound job data flow sets Greenhouse as the source of truth.

To select your Greenhouse integration’s sync direction:

1. From the left sidebar, select **Apps & Bundles**.
2. From the sub-menu, select **Apps**.
3. Select the **Installed Apps** tab.
4. Scroll the list down to the **Greenhouse** app.
5. Select the **Greenhouse** app.
6. From the ChartHop **Greenhouse** app settings page, scroll down to the **Basic Settings** section.
7. Select one of the two options:
   1. **Outbound** - ChartHop as source of truth. Active open jobs in ChartHop will be pushed to Greenhouse.
   2. **Inbound** -  Greenhouse as source of truth. Active jobs in Greenhouse will be imported from to ChartHop.

## Configure the Greenhouse integration

Depending on the type of job data flow you choose, you may enable specific configurations to match your desired setup.

### Basic Settings

| **Setting**                      | **What it does**                                                                                                                                                                                                                                                                                                                                                                                                   | **Notes**                         |
| -------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | --------------------------------- |
| Run Daily                        | When turned on, it will syncs data every morning. When enabled, regardless of data direction, job-related candidate metrics are pulled on a daily basis every morning. For customers on the inbound job data flow direction, this also causes the inbound job data flow to run on a daily basis every morning.<br />When turned off, syncs will only run manually or based on events depending on other settings.  | Recommended for most setups.      |
| Sync on change                   | Syncs immediately when a change to a linked open job is made or a new job becomes active.                                                                                                                                                                                                                                                                                                                          | Only availible for Outbound syncs |
| Reconciliation                   | Reconciliation<br />When enabled, reconciles Greenhouse role and field data with ChartHop, treating ChartHop as the source of truth. For example, if an open job exists in ChartHop but not in Greenhouse, a matching req is created in Greenhouse. Reconciliations can either happen on an ad-hoc basis or on a daily basis if the **Run daily** option is enabled.                                               | Only availible for Outbound syncs |
| Default location if not provided | When set to Remote, newly synced records that are not assigned a location are assigned the value "Remote" for their Location.                                                                                                                                                                                                                                                                                      |                                   |

### Job Matching

Job matching settings allow you to configure how ChartHop Jobs are automatically matched to Greenhouse Jobs and vice versa.&#x20;

| **Field**                                          | **What it does**                                                                                                                                                                                                                                                                                                                                    |
| -------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Match by job codes first                           | When enabled, it matches ChartHop Jobs with existing Greenhouse Jobs via the Requisition ID in Greenhouse (if the Requisition ID matches the ChartHop Job Code).  If no match is found via Requisition ID (Greenhouse) and Job Code (ChartHop), then the integration continues to attempt to match based on the chosen “Group Job Openings” option. |
| Group Job Openings                                 | The fallback method for matching on a job is:<br />* Title&#x20;
* Title and Location
* None — Only matched on Job Codes                                                                                                                                                                                                                            |
| Title matching advanced settings                   | Two options that are used for specific title matching formatting options                                                                                                                                                                                                                                                                            |
| If it matches to a closed job, what should happen? | The logic for matching for closed jobs:<br />* Re-open job and create new opening
* Create new job and opening                                                                                                                                                                                                                                      |

## Set up the flow of new hire data

You can use the new hire webhook job data flow to bring new hires from Greenhouse to ChartHop when the candidate is marked as “Hired” in Greenhouse, along with their relevant personal information, such as address, phone number, and email.

New hire webhooks are not processed if the person being hired already exists in ChartHop, even if they aren’t actively in a role. This means that we cannot support (via new hire webhooks):

- Internal transfers
- Re-hires

Only the first new hire webhook for a job in ChartHop is supported.

- For example,  if you update an offer packet and rehire the candidate in Greenhouse, the updated information are not processed in ChartHop unless the new hire in ChartHop is removed first.

A new hire webhook is not processed if the job does not exist in ChartHop.

:::hint{type="info"}
All new hire webhook job data flows are inbound (Greenhouse to ChartHop).
:::

![Copy your generated Secret key to enable your web hook in Greenhouse.](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/J2pq81rcf3CVS6mrqZm1H_group-14-1.png "Copy your generated Secret key to enable your web hook in Greenhouse.")

To configure the new hire webhook job data flow, follow the steps below.

**In ChartHop**:

1. From the left sidebar, select **Apps & Bundles**.
2. From the sub-menu, select **Apps**.
3. Select the **Installed Apps** tab.
4. Scroll the list down to the **Greenhouse** app.
5. Select the **Greenhouse** app.
6. From the ChartHop **Greenhouse** app settings page, copy the secret key value under **New Hire Webhook**.

**In Greenhouse**:

1. Follow the instructions in Greenhouse to [enable your webhook](https://support.greenhouse.io/hc/en-us/articles/360005574531-Enable-a-web-hook).
2. Enter the required information using the table below:

| **Field**             | **Value**                                                                                                  |
| --------------------- | ---------------------------------------------------------------------------------------------------------- |
| Name this webhook     | charthop-hire                                                                                              |
| When                  | Candidate has been hired                                                                                   |
| Endpoint URL          | `https://webhook.charthop.com/v1/webhook/app/greenhouse/5a12dddd6f2b8f0e63fc8e64/5b15fbf1bd35a93451fc5df3` |
| Secret Key            | \[Obtained above]                                                                                          |
| Error recipient email | [support@charthop.com](#)                                                                                  |
| Disabled              | No                                                                                                         |

Save the web hook when you are done.




[title] Adding Jobvite jobs
[path] Implementing ChartHop/Apps & Integrations/Applicant tracking systems/Jobvite/Setting up the Jobvite integration/

:::hint{type="info"}
[Packages](https://www.charthop.com/pricing/)**:&#x20;**<font color="#a9a9a9">Basic</font> <font color="#000000">|</font> <font color="#000000">**Standard*** | **Premium**</font>****

\* Available as an add-on
:::

When you configure ChartHop to be the source of truth (outbound data flow), you can choose to import any previously existing Jobvite jobs into ChartHop.&#x20;

:::hint{type="info"}
Exporting Jobvite jobs are only for outbound data flows.
:::

This is a two-step process.  First, you'll use ChartHop's Jobvite application to export your existing jobs and then use ChartHop to import your exported jobs to ChartHop using a CSV file.

You can choose add all jobs, including those that are not active, or just import your active jobs from Jobvite. &#x20;

![Export all or active only Jobvite jobs.](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/nc_CWcGzNV0WjVubhqWQL_group-10.png "Export all or active only Jobvite jobs.")

### Use the app to export existing Jobvite jobs to a CSV

To export Jobvite jobs follow these steps:

1. From the left sidebar, select **Apps & Bundles**.
2. From the sub-menu, select **Apps**.
3. Select the **Installed Apps** tab.
4. Scroll the list down to the **Jobvite&#x20;**&#x61;pp.
5. Select the **Jobvite&#x20;**&#x61;pp.&#x20;
6. From the ChartHop Job app settings page, select one of the following:
   - Use **Export All Jobvite Reqs** if you want to export all jobs including those that are **Open**, **Closed**, **On hold**, or **Filled**.&#x20;
   - Use **Export Active Jobvite Reqs** if you want to export only **Open** jobs
7. Save the .csv file.

### Verify your exported roles

Before you import Jobvite jobs into ChartHop, follow these steps:

1. Open your .csv file in Google Sheets or Excel.
2. Remove any roles that are not on your hiring plan, such as test jobs or otherwise closed roles. 
3. Ensure that every role has a value for Manager. You should also set target comp (Base and Variable) for the roles if possible.
4. Ensure that the list of roles is correct and up to date, and reflects what you want imported into ChartHop as the new source of truth for your hiring plan 

### Import your Jobvite jobs to ChartHop

To import your saved CSV to ChartHop, save the edited file as a .csv or .xlsx and upload it on the [Import Spreadsheet](https://app.charthop.com/import/csvdata) page in ChartHop.

Once the upload is complete, the hiring plan of open jobs in ChartHop should mirror the hiring plan of open reqs in Jobvite. From this point forward, you can use ChartHop as the system of record for open roles.


[title] Setting up the Jobvite integration
[path] Implementing ChartHop/Apps & Integrations/Applicant tracking systems/Jobvite/

:::hint{type="info"}
[Packages](https://www.charthop.com/pricing/)**:&#x20;**<font color="#a9a9a9">Basic</font> <font color="#000000">|</font> <font color="#000000">**Standard*** | **Premium**</font>****

\* Available as an add-on
:::

This section covers the process of setting up your Jobvite integration app to begin migrating requisition data between Jobvite and ChartHop.

Setting up the Jobvite integration app requires the following steps:

1. Install the Jobvite integration app.
2. Create a Jobvite API Key/ Secret key and set up the flow of new hire data.
3. Set up the API connection.
4. Set up the flow of requisition data.

## Install the Jobvite Integration App

To connect Jobvite to ChartHop, you can install the Jobvite integration app in ChartHop.

 To install the Jobvite integration app:

1. From the left sidebar, select **Apps & Bundles**.
2. From the sub-menu, select **Apps**.
3. Select the **Availible Apps** tab.
4. Scroll the list down to the **Jobvite** app.
5. Select **Install**.
6. Select **Install** from the app install page.

## Create a Jobvite API and Secret key

In order to create an API and Secret key for your Jobvite integration, you need to send some specified information to your Jobvite representative.

| **Field**     | **Description**                                                                                                                                                                                        |
| ------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| Webhook URL   | The URL that is automatically generated in the integration app page. <br /><br />You can get to this page by adding temporary values into the API Key and Secret Key fields as part of the setup flow. |
| Creator Email | The email tied to any actions performed through the integration. Any changes made by the integration will display as being made by this user in Jobvite.                                               |

### Create the Jobvite webhook 

To receive your Jobvite API key, you need to generate a web hook address and send it to your Jobvite representative.

To generate the webhook, complete the following steps:

1. Navigate to the Jobvite integration app. 
2. In the app’s **Settings&#x20;**&#x73;ection, enter the following:
   - A temporary value in th&#x65;**&#x20;API Key** field.
   - A temporary value in the **Secret Key** field.
   - Your **Creator Email**. 
3. Select **Save Settings**.

After you save the app’s settings, refresh the page. When the page refreshes, copy the newly created Webhook URL under the **Web Hook Setup** section in the app.

### Contact Jobvite representative

ChartHop partners with Jobvite for this integration, and so you'll need to work with your Jobvite representative to obtain the required Jobvite credentials.

After you generate your webhook url, send an email to your Jobvite CSM with your custom Webhook URL and Creator Email using the following template:

***

:::BlockQuote
*We are beginning our integration with ChartHop and need an API key generated for Charthop. (Please note that Charthop is a Jobvite partner)

The email I want to associate with the API activity is: \[Email]
&#x20;
In addition, please help set up a candidate hired webhook to the following URL: \[Webhook URL]

Please reply to this email with that information and ensure implementation\@charthop.com is included. ChartHop has previously integrated with the Jobvite APIs and is CC'ed as the technical contacts and can answer any questions.*
:::

***

:::hint{type="warning"}
Jobvite may require a zero dollar contract to be submitted in order to complete the API authorization request. Your Implementation Specialist can help you fill out and submit these forms.
:::

## Set up the API connection

Once you receive your API and Secret keys from Jobvite, enter your Jobvite API and Secret credentials in the **API Key** and **Secret Key** fields in the **Settings&#x20;**&#x73;ection of the app. Then, select **Save Settings**.

## Set up the flow of requisition data

Once you establish your API connection, you can configure the type of requisition data flow that the integration runs. 

### Select your source of truth

When setting up your integration, you can choose the primary source of truth when referencing new requisition data. Selecting ChartHop results in an outbound job data flow where ChartHop is the source of truth, whereas, selecting Remote System (Jobvite) results in an inbound job data flow where the ATS is the source of truth.

To select your **Jobvite** integration’s source of truth:

1. From the left sidebar, select **Apps & Bundles**.
2. From the sub-menu, select **Apps**.
3. Select the **Installed Apps** tab.
4. Scroll the list down to the **Jobvite** app.
5. Select the **Jobvite** app.
6. From the ChartHop **Jobvite** app settings page, scroll down to the **Source of Truth** section.
7. Select one of the two options:
   1. **ChartHop** - ChartHop is the source of truth and the integration is configured to run an outbound job data flow.
   2. **Remote System (Jobvite)** - Jobvite is the source of truth and the integration is configured to run an inbound job data flow.

### Configure the Jobvite Requisitions integration

You can configure the Jobvite integration app to handle two types of data migrations (job data flows) between ChartHop and Jobvite. Depending on the type of job data flow you choose, you may enable specific configurations that may either be required or optional but recommended.

These are the required and recommended configurations for each job data flow:

| **Job data flow type**        | **Configurations**                                                                                  |
| ----------------------------- | --------------------------------------------------------------------------------------------------- |
| Outbound, ChartHop to Jobvite | **Required** <br />* Sync On Change<br />**Recommended**   <br />* Run Daily                        |
| Inbound, Jobvite to ChartHop  | **Required**<br />* Reverse Sync<br />**Recommended**<br />* Run Daily
* Remote Location As Default |

To establish the configuration settings for your Jobvite Requisitions integration:

1. From the left sidebar, select **Apps & Bundles**.
2. From the sub-menu, select **Apps**.
3. Select the **Installed Apps** tab.
4. Scroll the list down to the **Jobvite** app.
5. Select the **Jobvite** app.
6. From the ChartHop **Jobvite** app settings page, scroll down to the **Other Options&#x20;**&#x73;ection.
7. Select from the following configuration options described in the table below.

After you select your integration’s source of truth, you can select additional options to further customize and configure it:

| **Field**                       | **Description**                                                                                                                                                                                                                                                                                                                  |
| ------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Run Daily                       | With this option enabled, the ATS app runs automatically every day. When enabled, regardless of data direction, job-related candidate metrics are pulled on a daily basis every morning. For customers on the inbound job data flow direction, this also causes the inbound job data flow to run on a daily basis every morning. |
| Sync On Change                  | Enables the outbound job data data flow direction. When enabled, changes to open jobs are automatically pushed to Jobvite as soon as they are made in ChartHop. This option cannot be selected when **Reverse Sync** is enabled.                                                                                                 |
| Reverse Sync                    | When enabled, Jobvite becomes the system of record, and ChartHop is updated with new open roles from Jobvite when the inbound job data flow runs. This option cannot be selected when **Sync On Change** is enabled.                                                                                                             |
| Remote Location As Default      | When enabled, newly synced records that are not assigned a location are assigned the value **Remote Location**.                                                                                                                                                                                                                  |
| Publish Requisition On Creation | When enabled, open jobs that are pushed to Jobvite will automatically be published on career sites (both internal and external).                                                                                                                                                                                                 |

## Set up the flow of new hire data

You can use the new hire webhook job data flow to automatically bring new hires from Jobvite to ChartHop when the candidate is marked as “Filled” or “Offer Accepted” in Jobvite, along with their relevant personal information, such as address, phone number, and email.

The new hire webhook will be added to your integration at the same time as when you contact your Jobvite CSM  for the  API and Secret keys, as part of the same email request. Likewise, you will need to contact your Jobvite CSM if you wish to have your Webhook access removed in the future.

:::hint{type="info"}
In order to process the new hire in Charthop, the candidate must have an email address in Jobvite.
:::

New hire webhooks will not be processed if the person being hired already exists in ChartHop, even if they aren’t actively in a role. As a result, the integration cannot support:

- Internal transfers
- Re-hires

Only the first new hire webhook for a ChartHop job is supported. For example, if you update an offer packet and re-hire the candidate in Jobvite, the updated information will not be processed in ChartHop unless the new hire in ChartHop is removed first.

A new hire webhook will not be processed if the job does not exist in ChartHop.


[title] Shoutouts
[path] Implementing ChartHop/ChartHop bundles/

Shoutouts enable employees to recognize each other across your organization.

For example, if someone from your marketing department wants to compliment their graphic designer teammate publicly, they can write up a quick paragraph and have it posted to the graphic designer’s employee profile. The “shoutout” appears on their profile page and is visible to anyone who views the employee profile.

You can even track which of your employees have received shoutouts from others by using the Data Sheet page. Encouraging your teams to use shoutouts helps foster a positive culture.

## Give an employee a shoutout

Any employee can give another employee a shoutout and shoutouts are visible to all employees through respective employee profile pages.

1. From the left sidebar, select **Org Chart**.
2. In the **Org Chart**, select the employee whose profile you want to view.
3. In the employee's profile summary, select **View profile**.
4. Choose **Shoutout** from the Complete tasks menu.

::Image[]{alt="Sending a shoutout " src="https://lh4.googleusercontent.com/3jRG7_tVt34RQATedRFVTxmZhlYe9JKfGRGJ9yXZBzlIijAifkFLctdFszuY8afykaJ-xDuyBP5AXlncM4V4ZC_qHujZ2uO-ZpLVxUtZfx6vM2mAuE9TlKYNxW3sF7Rp5YqdQ_sk4dY00XnPJvD0T_uYxOKsk4HZdNAodOtFpmd9mZZoL8uGbxoF1A" size="50" width="1600" height="837" position="flex-start" showCaption="false"}

1. Use the **Shoutout** dialog to enter the text you’d like to share with the employee.
2. Select **Submit**. The shoutout displays on the Shoutout tab of the employee’s profile.

## View Shoutouts

You can view employee shoutouts (including your own) by navigating to the respective employee’s profile page.

1. From the left sidebar, select **Org Chart**.
2. In the **Org Chart**, select the employee whose profile you want to view.
3. In the employee's profile summary, select **View profile**.
4. Select the **Shoutout** tab to view any shoutouts. 

## Installing the Shoutout bundle

If your ChartHop package did not come with the Shoutout bundle installed, you can install it.

:::hint{type="info"}
[Packages](https://www.charthop.com/pricing/)**:&#x20;**<font color="#a9a9a9">Basic</font> | <font color="#a9a9a9">Standard</font> | **Premium**

[Roles:](https://docs.charthop.com/user-roles-and-permissions)  Technical Owner | Owner
:::

You can customize the shoutout form that employees use to give shoutouts. You can modify the text on the dialog, as well as add ways to add additional information aside from just filling in text. If your organization uses Slack and has integrated ChartHop with Slack, you can also configure shoutouts to automatically be sent to a specific Slack channel.

1. From the left sidebar, select **Apps & Bundles**.
2. From the sub-menu, select **Bundles**.
3. Select the **Availible Bundles** tab to see the list of bundles.
4. Within the Available bundles tab, select a bundle to see an overview of your selected bundle and what it contains.
5. Within the Bundle dialog box, select **Install** to install the bundle.

### Customize the Shoutout bundle

You can add additional fields to the Shoutout form that is used and customize the text used on the dialog box that the employees see.&#x20;

1. From the left sidebar, select **People Ops Tools**.
2. From the sub-menu, select **Forms**.
3. Select the Shoutout form from the list.&#x20;
4. In the Form builder, make the changes you want.
5. After making your changes, select **Preview** to view how the form will appear.
6. Select **Save and Exit**.

### Shoutout fields

| Field    | Data Sensitivity |
| -------- | ---------------- |
| Shoutout | Org public       |

### Shoutout form

| Form      | Data sensitivity                      |
| --------- | ------------------------------------- |
| Shoutouts | Org public (except respective person) |

### Shoutout profile tab

| Form      | Data sensitivity |
| --------- | ---------------- |
| Shoutouts | Org public       |

:::hint{type="info"}
[Packages](https://www.charthop.com/pricing/)**:&#x20;**<font color="#a9a9a9">Basic</font> <font color="#000000">|</font> <font color="#000000">**Headcount Planning** | </font><font color="#000000">**Compensation Reviews** | </font><font color="#000000">**Performance** | </font><font color="#000000">**Engagement** </font>
:::


[title] Slack
[path] Implementing ChartHop/Apps & Integrations/

The Slack app integrates your Slack instance with ChartHop. It syncs Slack profile information to ChartHop employee profiles and allows you to send messages from ChartHop to Slack channels.

If you've installed the Slack integration app, you can also define actions such as birthday and work anniversary announcements to be sent to a Slack channel. See [Birthday announcements ](https://docs.charthop.com/birthday-announcements)or [Work anniversary announcements](https://docs.charthop.com/work-anniversary-announcements).

The Slack app integrates your Slack instance with ChartHop. It syncs Slack profile information to ChartHop employee profiles and allows you to send messages from ChartHop to Slack channels.

User matching is based on the employee’s email address (if it matches their Slack email) or name. If a user exists in Slack but not in ChartHop, that user is ignored during sync.

You need to be a Slack administrator to install. If you don’t have appropriate permissions, grant ChartHop Technical Owner access to a member of your IT staff who does have Slack administrator permissions.


:::hint{type="info"}
Although our Slack integration app is already in use for many ChartHop customers, we are still going through the app approval process with Slack.&#x20;
:::

## Syncing Slack profile data to ChartHop

When you use the Slack app, the following fields from Slack are added to ChartHop employee profiles. However, the Slack photo is not synced if an employee already has an employee photo in ChartHop. If there is no user-uploaded picture in Slack, no image is synced.

- Photo
- Time zone
- Slack ID

:::hint{type="info"}
Contact ChartHop implementation services if you are interested in mapping additional data from Slack.
:::

## Accessing Slack from ChartHop

Messaging from ChartHop to Slack is supported in two ways:

- Employees can access Slack through the Slack logo on an employee’s profile. Employees who select the icon are redirected to Slack DM with the associated user.
- Administrators can set up messaging to Slack based on ChartHop Actions, such as when an employee submits a form or reminders.

## Install the Slack app

You must have either the Owner or Technical Owner role to install the Slack app. In addition, you also need to be a Slack administrator with the appropriate permissions to allow Slack integrations.

To install the Slack app:

1. From the left sidebar, select **Apps & Bundles**.
2. From the sub-menu, select **Apps**.
3. Select the **Availible Apps** tab.
4. Find the Slack app in the list of available apps.
5. Select **Install** on the far right.
6. Select the **Go to Slack** button.
   1. Sign in to Slack.
   2. Select **Allow** to permit ChartHop to connect to Slack.
7. Select **Next.**
8. On the last page of the wizard, select **Save settings**.
9. Select **Save.**

### Run an initial one-time sync of your Slack data

Before configuring your Slack app to sync regularly, you should run an initial sync to verify that the Slack data is syncing correctly to ChartHop.

To run a one-time sync:

1. From the left sidebar, select **Apps & Bundles**.
2. From the sub-menu, select **Apps**.
3. Select the **Installed Apps** tab.
4. Scroll to the Slack app and select the gear (settings) icon on the far right of the row to view app settings.
5. Select **Run one-time sync** in the upper right corner.

### Verify your Slack data in ChartHop

After running your first sync, you can use the Data Sheet to look for employees whose information did not sync from Slack. You can view the Sync History page to verify when the sync was run and if it encountered any issues. 

:::hint{type="info"}
Remember that most issues with your synced data originate in your Slack system. ChartHop allows you to visualize your employee data to make finding these discrepancies easier. For example, if a user’s email in Slack does not match their user email in ChartHop, that user’s information will not sync. If this happens, update the user’s email address in Slack and try the sync again.
:::

1. On the **Data Sheet** page, choose **Select Columns**.
2. In the **Select Columns** dialog, type Slack to find the Slack ID field.
3. Mark the checkbox next to the field to display the column on the Data Sheet.
4. Select **Apply** to save your changes.
5. In the Filter text box, enter the following filter: **!contact.slack:\*&#x20;**&#x77;hich finds any user who does not have a Slack ID.
6. Review the Data Sheet for any users without IDs. Remember that open roles do not have Slack IDs.

## Configure your Slack app sync to run daily

After you’ve synced your data for the first time and verified your employee profiles, you should configure a daily sync. The value of syncing your Slack data to ChartHop is that it ensures that your employee data is always up to date. For example, if an employee's time zone is changed, that info is updated in ChartHop.

1. From the left sidebar, select **Apps & Bundles**.
2. From the sub-menu, select **Apps**.
3. Select the **Installed Apps** tab.
4. Scroll to the Slack app and select the gear (settings) icon on the far right of the row to view app settings.
5. Within the **App status & sync** settings section, select the **Edit** (pencil) icon.
6. Toggle the auto-sync option to on.
7. Select **Save**.

## Set up email notifications

You can configure the Slack app to email specific users the list of changes made by each data sync from your Slack app. Alternatively, you can view these changes on the Sync history page.

1. From the left sidebar, select **Apps & Bundles**.
2. From the sub-menu, select **Apps**.
3. Select the **Installed Apps** tab.
4. Scroll to the Slack app and select the gear (settings) icon on the far right of the row to view app settings.
5. Within the **Email notifications** section, select the **Edit** (pencil) icon.
6. Select Add users to be prompted to enter a ChartHop user or users to email.
7. Select **Save**.

:::hint{type="info"}
[Modules:](https://www.charthop.com/pricing/) <font color="#000000">**HRIS |** </font>**Engagement | Goals | Performance |&#x20;**<font color="#000000">**Compensation Reviews |** </font>**Headcount Planning**
:::

:::hint{type="info"}
﻿﻿[Roles](https://docs.charthop.com/user-roles-and-permissions): Technical owner | Owner&#x20;
:::


[title] Workday Adaptive Planning
[path] Implementing ChartHop/Apps & Integrations/FP&A/

The Workday Adaptive Planning app runs outbound from ChartHop to Workday Adaptive Planning so you can use your ChartHop data in Workday Adaptive Planning to run financial models and perform analysis. You can sync data daily, hourly, weekly, monthly, or as needed. 

Effective dating is not supported, meaning that data cannot be stored with an individual date (for example, a promotion date). 

Customized field mapping is supported, so you can make any data point in your ChartHop organization available in Workday Adaptive Planning. Please direct field mapping questions or requests to ChartHop Professional Services or Support. 

### How it works

The Workday Adaptive Planning app syncs your ChartHop data to a *Custom Cloud Data Source* in Workday Adaptive Planning. The Custom Cloud Data Source always has access to the most recent data from ChartHop. 

After you install the Workday Adaptive Planning app in ChartHop, you’ll set up *Loaders* in Workday Adaptive Planning, which will pipe data from your ChartHop Custom Cloud Data Source to your Workday Adaptive Planning *Sheets.&#xA0;*

You can configure Loaders to run on a schedule or as needed. ChartHop recommends that you configure Loaders to run daily, so your Sheets—and the financial models that run on them—always have the latest ChartHop data.&#x20;

The following diagram shows how ChartHop integrates with Workday Adaptive Planning.&#x20;


![ChartHop and Workday Adaptive Planning architecture](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/D-iyx7VFmoFBo9uh-Dq-7_adaptive-planning-infographicv3-01.png "   ")

### Install the Workday Adaptive Planning app

You install the Workday Adaptive Planning app in ChartHop with an install wizard. You’ll also need to complete some steps in Workday Adaptive Planning (including setting up a Custom Cloud Data Source and importing the ChartHop data structure). ChartHop’s in-app wizard provides full instructions.

:::hint{type="warning"}
To install the Workday Adaptive Planning app, you’ll need to be comfortable configuring external data sources in your Adaptive instance or have access to a resource who can perform this task. For detailed information, view the [Workday Adaptive Planning documentation](https://adaptiveplanning.doc.workday.com/home?content-lang=en-US) (Workday login required).&#x20;
:::

![Workday Adaptive Planning app installation](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/3QI-G-pcSxArEHuiUbGc8_scenariosadaptiveplanning.png "  ")

To install the Workday Adaptive Planning app in ChartHop: 

1. From the left sidebar, select **Apps & Bundles**.
2. From the sub-menu, select **Apps**.
3. Under **Available apps**, locate Workday Adaptive Planning and select **Install**.
4. Select the **Install** button on the page that displays. 
5. Complete the steps in the **Connect to Workday Adaptive Planning** section. 
6. Select **Next Step**.
7. In the **Configure app settings** page, select whether to make data from your primary org available in Workday Adaptive Planning.
8. (Optional) Choose the ChartHop plans you want to make available for import in Workday Adaptive Planning.
   - You have the option to include scenarios, compensation reviews, performance reviews, and headcount plans.
   - You can include up to 10 plans.
   - ChartHop lets you filter by plan type and by the user who created the plan. 
   - You have the ability to edit the plans that are included after you've finished installation.
9. Select th&#x65;**&#x20;Advanced settings** link and select the employee types to make available. 
   - ChartHop recommends accepting the defaults for **Advanced settings**, which makes all employee types available in your synced data.
10. Select **Next Step**.
11. Select **Save**.

### Customize field mapping

After you install the Workday Adaptive Planning app, additional ChartHop fields can be mapped to your Workday Adaptive Planning Sheets using any column names you prefer. Please direct field mapping questions or requests to ChartHop Professional Services or Support. 

To map additional fields: 

1. From the left sidebar, select **Apps & Bundles**.
2. From the sub-menu, select **Apps**.
3. Select the **Installed Apps** tab.
4. Next to Workday Adaptive Planning, select Configure (gear icon). 
5. Select the **Field mappers** tab.
6. Select **Add field mapping** and then select **Add Field Mapper**. 
7. Under **ChartHop Field**, enter the ChartHop field to map while leaving **Optional Charthop Default&#x20;**&#x62;lank. 
8. Under **Mapper Type**, select **One to One**.
9. Under **Remote Fields**, enter the name of the field as you want it to appear in your Sheets, preceded by `job`.&#x20;
   For example, you could map `ChartHopField` to `job.MyChartHopField`. `MyChartHopField` would be the column name in your Workday Adaptive Planning Sheets. 
10. Click **Save field mappers** to finish configuring custom fields.&#x20;

:::hint{type="info"}
[Packages](https://www.charthop.com/pricing/)**:&#x20;**<font color="#a9a9a9">Basic</font> <font color="#000000">|</font> <font color="#000000">**Standard*** | **Premium**</font>****

\* Available as an add-on
:::


[title] Greenhouse Field Mappers
[path] Implementing ChartHop/Apps & Integrations/Applicant tracking systems/Greenhouse/Untitled/

# Built in field mappers

### Mapped job data between ChartHop and Greenhouse

The following fields are used during an inbound or outbound job data flow:

| **ChartHop field** | **Greenhouse field**                                                                 |
| ------------------ | ------------------------------------------------------------------------------------ |
| req                | opening.opening\_id                                                                  |
| recruit            | opening.status                                                                       |
| createdate         | opening.opened\_at                                                                   |
| title              | job.name                                                                             |
| employment         | job.custom\_fields.employment\_type                                                  |
| department         | job.departments                                                                      |
| location           | job.offices                                                                          |
| hiremgr            | job.hiring\_team.hiring\_managers\[0].id, job.hiring\_team.hiring\_managers\[0].name |
| recruiter          | job.hiring\_team.recruiters\[0].id, job.hiring\_team.recruiters\[0].name             |

### Mapped new hire data from New Hire Webhook

The following fields are used during a new hire webhook data flow:

| **ChartHop field**  | **Greenhouse field**                                                                                                                                                                                                             |
| ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| name.first          | candidate.first\_name                                                                                                                                                                                                            |
| name.last           | candidate.last\_name                                                                                                                                                                                                             |
| contact.homeemail   | candidate.email\_addresses\[?(@.type == 'personal' \|\| @.type == 'other')].value.first()                                                                                                                                        |
| contact.workemail   | candidate.email\_addresses\[?(@.type == 'work')].value.first()                                                                                                                                                                   |
| contact.mobilephone | candidate.phone\_numbers\[0].value                                                                                                                                                                                               |
| startdate           | offer.starts\_at                                                                                                                                                                                                                 |
| currency            | offer.custom\_fields.salary.unit                                                                                                                                                                                                 |
| base                | offer.custom\_fields.salary.value, offer.custom\_fields.salary                                                                                                                                                                   |
| variable            | offer.custom\_fields.bonus.value, offer.custom\_fields.bonus, offer.custom\_fields.variable\_compensation.value, offer.custom\_fields.variable\_compensation, offer.custom\_fields.variable.value, offer.custom\_fields.variable |
| grantshares         | offer.custom\_fields.stock\_option.value, offer.custom\_fields.stock\_option, offer.custom\_fields.equity.value, offer.custom\_fields.equity                                                                                     |
| userid              | user.id                                                                                                                                                                                                                          |
| name                | user.name                                                                                                                                                                                                                        |
| email               | user.primary\_email\_address                                                                                                                                                                                                     |

:::hint{type="info"}
You must include the country code as a part of any international number for it to be recognized as such within ChartHop. When you are syncing phone numbers from an external system, such as a payroll system or ATS, be sure the country code is included in the phone number that is listed in the external system. This also applies when updating data through a spreadsheet.
:::



# Custom field mappers

Custom field mappers can be used to map additional custom fields between Greenhouse and ChartHop. 

:::hint{type="info"}
You can use custom field mappers to override the default field mappings. For example, you can pull a custom field into a ChartHop default field. Similarly, you can disable default field mappers. For more information about managing custom fields, please contact your ChartHop implementation specialist.
:::

![You can use custom field mappers to override the default field mappings.](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/wj9HjHXzgilrk5LQarspy_group-25.png "You can use custom field mappers to override the default field mappings.")

To create a custom field mapper, follow these steps:

1. In ChartHop, from the left sidebar, select **Apps & Bundles**.
2. From the sub-menu, select **Apps**.
3. Select the **Installed Apps** tab.
4. Scroll the list down to the **Greenhouse** app.
5. Select the **Greenhouse** app.
6. From the ChartHop **Greenhouse** app settings page, scroll down and select the **Inbound Field Mapper&#x20;**&#x70;age.
7. Enter your Greenhouse custom field code name under **Remote Fields**, appended with the correct endpoint.
   - To ensure that your Greenhouse field parses correctly, your **Remote Fields** must be preceded by the correct endpoint (job., offer., etc.), and structured as follows:
     - The endpoint (such as job) + custom\_fields. + your Greenhouse Immutable Field.
8. In the **ChartHop Field**, enter the field or Carrot expression you wish to map to the previously entered Greenhouse custom field.
9. (Optional) You can overwrite an existing default ChartHop field with your custom field. We recommend that you contact your ChartHop Implementation Specialist before trying this.

As an example, if you wanted to map a ChartHop custom field like *targetSalary* to the Greenhouse custom field *targetBase*, then you’d want to set up your field mapper like in the image below:

![The custom ChartHop Field: targetSalary is mapped to the custom Greenhouse Remote Field: targetBase.](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/MgH8s0IoC9pwgn17tnpFc_group-26-1.png "The custom ChartHop Field: targetSalary is mapped to the custom Greenhouse Remote Field: targetBase.")

:::hint{type="info"}
To avoid failed mappings, be sure to double-check the names of the custom fields you are using.
:::

## Set new hire announce dates

When candidates are hired and they are created in ChartHop, you have a choice about when you want them to show up publically to your organization

Under the option **New Hire Webhook Announce Date&#x20;**&#x73;elect one of the following:

- **Start date** - The new hire will not be org public until their start date.&#x20;
- **Today** - The new hire will be displayed immediately on the day of the sync
- **Earlier of start date and today (Default)**


[title] Workday Reports
[path] Implementing ChartHop/Apps & Integrations/Payroll systems/Installing payroll apps/

:::hint{type="info"}
[Packages](https://www.charthop.com/pricing/)**:&#x20;**<font color="#a9a9a9">Basic</font> <font color="#000000">|</font> <font color="#000000">**Headcount Planning** | </font><font color="#000000">**Compensation Reviews** | </font><font color="#000000">**Performance** | </font><font color="#000000">**Engagement** </font>
:::

With the Workday Reports integration app, you can sync your payroll data from your Workday reports into ChartHop. Synced data includes contact information, demographics, compensation, managers, departments, locations, and custom fields. 

### Workday Reports at a glance

The following table summarizes ChartHop’s Workday Reports app. 

| **Supported**                        | HCM                                                                                                                                                                       |
| ------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Prerequisites**                    | A ChartHop account with the Owner role and a Workday account with administrator privileges.                                                                               |
| **API key permissions**              | In Workday, create an Integration System User (ISU) and ensure that the new user has read access to all fields contained within your reports.                             |
| **Data direction**                   | Inbound from Workday Reports to ChartHop                                                                                                                                  |
| **Sync cadence**                     | Daily or as needed                                                                                                                                                        |
| **Effective dating support**         | No                                                                                                                                                                        |
| **Additional field mapping support** | Yes, any fields that can be added to your report can also be mapped to ChartHop.<br />Please direct all custom mapping requests to ChartHop’s Professional Services team. |
| **How to install**                   | See ChartHop's [install guidelines](https://docs.charthop.com/installing-a-payroll-app) or view detailed instructions on the ChartHop app install page.                   |
| **Payroll app overview**             | Read an [overview](https://docs.charthop.com/payroll-system-apps) of how how payroll apps work in ChartHop.                                                               |

###


[title] Workday Reports
[path] Implementing ChartHop/Apps & Integrations/Payroll systems/Installing payroll apps/Workday/

Workday Reports can be imported using the separate app Workday Reports App in ChartHop. Install the Workday Reports app and follow the instructions to set it up.&#x20;

**Prerequisites:**

1. Access to a **Workday Reports URL**
2. Ability to create an **Integration System User (ISU)** in Workday.

## Installation Instructions:

### 1. Sign in

- Sign in to Workday Reports using your company’s login page.
- For help finding the correct URL, please reach out to your company’s HR or IT department.

### 2. Enter your Workday Reports URL

- In Workday Reports, find your report URL – e.g. [https://wd5-services1.myworkday.com](https://wd5-services1.myworkday.com).

### 3. Create an Integration System User

- In Workday, create an **Integration System User (ISU)**.
- Ensure that the new user has **read access** to all fields contained within the newly created report. If calculated fields are included, allow access to all fields within the calculations.
- Enter the **username** and **password**

### 4. Configure settings

- **Backfill departures** — When syncing departures, choose whether or not to automatically create backfills in ChartHop.
- **Missing location information** — If location is not set for an open role in Workday Reports
- **Overwrite person fields** — Workday Reports will overwrite the values in ChartHop for person fields, such as gender, birthdate, home address, etc. This can pose an issue when an employee has elected to update their person fields in ChartHop, without requesting an update in Workday Reports.
- Exclude Workday IDs — IDs of people to exclude


[title] Installing the Workday app
[path] Implementing ChartHop/Apps & Integrations/Payroll systems/Installing payroll apps/Workday/

This section covers setting up the Workday integration app, which allows you to sync your employee roster to ChartHop. 

## Review your payroll system data

Your ChartHop payroll app syncs your employee data from your payroll system and builds your org chart in ChartHop. Once your Org Chart is created, you can start using ChartHop.

ChartHop recommends reviewing the data in your payroll system to ensure it is what you expect before you sync it to ChartHop. For example, if an employee has multiple system IDs in your payroll system, that employee’s data won’t sync properly. You should also be sure that your payroll system reflects an accurate view of your organization, including reporting structures, employee locations, and compensation. 

## Obtain your Workday instance URL and name

Before you can install the Workday app, you need to obtain a Workday instance URL and name from your Workday representative. This information allows ChartHop to connect to Workday to receive your employee data.

## Create an Integration System User

After you obtain your Workday instance URL and name, you need to create an **Integration System User** and enable specific permissions. This will allow ChartHop to connect to Workday via your Workday instance's API.

To create a Workday **Integration System User**:

1. Login to Workday, and create an **Integration System User (ISU)**.
2. Ensure that the user has **read access** to all **Human\_Resources SOAP APIs**.

## Install the Workday app

After you have your Workday instance name and URL , and have created your Integration System User, you can install the Workday integration app in ChartHop.

1. From the left sidebar, select **Apps & Bundles**.
2. From the sub-menu, select **Apps,&#x20;**&#x69;f not already pre-selected.
3. Select the **Availible Apps** tab.
4. Scroll to your payroll app and select **Install&#x20;**&#x6F;n the far right of the respective app's row.

### Connect the Workday app

When you select **Install**, you'll be prompted to walk through configuring the payroll app.

1. Enter your **Base URL&#x20;**&#x61;nd **Instance name&#x20;**&#x69;n the provided fields.
2. Enter your **Instance System User** name and password in the provided fields.

### Configure data sync settings for Workday

Data sync settings control how and what data is synced to ChartHop from your payroll system. For example, you can choose whether or not to create a backfill position in ChartHop when you have a departure in your payroll system. Other advanced settings allow you to exclude certain employees.

- Select one of the two options:
  - **Automatically create backfills** - This option creates a backfill position in ChartHop (open job) when an employee is marked as departed in your payroll system.
  - **Sync departures only** - This option removes the departed employee from ChartHop. The employee's job history remains in ChartHop.

### Configure advanced settings

Advanced settings allow you to better control how your payroll data syncs to ChartHop.

ChartHop recommends accepting the default values for these settings. Please get in touch with ChartHop Support or your Customer Success Manager for assistance if needed.

1. Expand the **Advanced settings** section. 
2. Use the following table to guide you through advanced settings decisions. 
3. When finished, select **Next step**.

| **Setting**                              | **Description&#xA0;**                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               |
| ---------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Missing location information<br /><br /> | Select one of the two options for what should happen if location information is set for an employee.<br />* **Set Remote as the default location in ChartHop** - When selected, any open role that does not have a location set will be set to have a Remote location in ChartHop.
* **Leave location blank in ChartHop&#x20;**- When selected, any open role that does not have a location set in your payroll app will not have a location set in ChartHop.                                                                                                                                                       |
| Advanced sync options                    | Select the data changes you want to include in your sync. You can include some or all of the following employee data: <br />* Job titles 
* Managers 
* Groups 
* Compensation 
* Hire dates                                                                                                                                                                                                                                                                                                                                                                                                                        |
| Overwrite person fields <br /><br />     | ChartHop recommends using this setting to avoid needing to update both ChartHop and your payroll system when a change is made to any field value that is synced from your payroll system.<br /><br />When you choose this option, your payroll system remains the source of truth for the following fields in ChartHop: birthdate, gender, home address, and so on. Any edits you or an employee make to this data in ChartHop are overwritten during synchronization. This can pose an issue when someone uses ChartHop to update employee fields in ChartHop, without requesting an update in the source system.  |
| Historical data                          | Choose whether or not you want to sync historical data. You can turn this off if you want to exclude any historical changes before the date of your initial sync.                                                                                                                                                                                                                                                                                                                                                                                                                                                   |
| Exclude IDs                              | To exclude specific individuals from the sync, enter their unique payroll system IDs here, separated by commas.<br /> <br />Generally, the company ID should be left blank unless otherwise informed by your ChartHop Customer Success team.                                                                                                                                                                                                                                                                                                                                                                        |

### Run an initial one-time sync of your payroll data

When you first configure your payroll app, you should run a one-time sync to verify that the sync is operating as you expect it to and that your data is what you expect.

To run a one-time sync:

1. In the setup wizard, select the **Run one-time sync** option.
2. Select **Finish setup**.

## Verify your data in ChartHop

After running your first sync, you can use the Data Sheet and Org Chart pages to spot-check your data. You can use the Sync History page to verify when the sync was run and if it encountered any issues. 

You should spot-check your ChartHop org for the following:

- Correct management reporting lines
- Compensation data
- Employee information on profiles (names, addresses, and so on)
- Job titles
- Departments
- Locations

:::hint{type="info"}
Remember that most issues with your synced data originate in your payroll system. ChartHop allows you to visualize your employee data to make finding these discrepancies easier. Still, you’ll need to fix any data discrepancies in your payroll system and rerun the sync to view the fixes in ChartHop.
:::

## Configure your payroll app sync to run daily

After you’ve synced your data for the first time and verified your Org Chart, you should configure a daily sync. The value of syncing your payroll data to ChartHop is that it ensures that your employee data is always up to date. 

1. From the left sidebar, select **Apps & Bundles**.
2. From the sub-menu, select **Apps,&#x20;**&#x69;f not already pre-selected.
3. Select the **Installed Apps** tab.
4. Scroll to your payroll app and select the gear (settings) icon on the far right of the row to view app settings.
5. Within the **App status & sync** settings section, select the **Edit** (pencil) icon.
6. Toggle the auto-sync option to on.
7. Select **Save**.


[title] Etrade
[path] Implementing ChartHop/Apps & Integrations/Equity syncs/

This app syncs your equity data between ChartHop and E\*Trade. The following information is synced daily:

- Employee stock grants

You need to work with a ChartHop implementation specialist to install this app.

:::hint{type="info"}
[Packages](https://www.charthop.com/pricing/)**:&#x20;**<font color="#a9a9a9">Basic</font> <font color="#000000">|</font> <font color="#000000">**Headcount Planning** | </font><font color="#000000">**Compensation Reviews** | </font><font color="#000000">**Performance** | </font><font color="#000000">**Engagement** </font>
:::


[title] Greenhouse as the source of truth
[path] Implementing ChartHop/Apps & Integrations/Applicant tracking systems/Greenhouse/

An inbound job data flow brings open jobs from the ATS to ChartHop where the ATS is the source of truth. Inbound data flows support both on-demand syncs and scheduled daily syncs. In most cases, you can rely on daily syncs to pull updated hiring data from your ATS.

Data remains in and is updated within the ATS system. A daily sync pulls information from the ATS to ChartHop. You can also stream data ad-hoc through an on-demand **Sync Jobs** button that can be accessed within the ATS application configuration page in ChartHop.

![](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/Ki8433pvYjy5-dgPdgL50_screen-shot-2022-09-13-at-21013-pm.png "Open reqs and new hire data flow Inbound. ")

When a hire is made in the ATS, ChartHop creates a pending new hire which starts an open job according to its assigned start date. Once the pending new hire’s information is also entered into the HRIS/payroll system, ChartHop will merge the payroll profile with the existing pending new hire using the pending new hire’s personal or work email as a unique identifier.

### Advantages of inbound job data flows

Inbound job data flows offer a few advantages over outbound job data flows which include:

- Recruiting teams only having to work out of the ATS.
- No changes are required to your standard hiring workflow.
- The process is often easier to start with and implement for first-time users.

Inbound job data flows are recommended if:

- You don't plan on using ChartHop as the source of truth for your hiring plan.
- You work with a team that is very comfortable with their current ATS workflow.
- You have specific data needs with your ATS that ChartHop can’t fulfill such as highly unique systems and data types.
- You do not plan to give recruiters access to ChartHop.




[title] ChartHop as the source of truth
[path] Implementing ChartHop/Apps & Integrations/Applicant tracking systems/Lever Requisitions/

:::hint{type="info"}
[Packages](https://www.charthop.com/pricing/)**:&#x20;**<font color="#a9a9a9">Basic</font> <font color="#000000">|</font> <font color="#000000">**Standard*** | **Premium**</font>****

\* Available as an add-on
:::

With an outbound job data flow, ChartHop is the source of truth and the database of record.

Hiring data is entered and updated in ChartHop, and is then sent from ChartHop to the ATS using event-based trigger flows which update the information in the ATS immediately.

![](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/RJ-ZtbeWqSIF03PKkqGdd_screen-shot-2022-09-13-at-20549-pm.png "Open reqs data flows Outbound, while new hires data flows inbound.")

In an Outbound job data flow, open job and req data flow *outbound* from hiring plans in ChartHop to the ATS. This helps recruiting teams using ChartHop for headcount planning to move data seamlessly from the approved headcount plan into their recruiting system. However, once a hire is made in the ATS, that new hire data flows *inbound* from the ATS into ChartHop.

When a hire is made in the ATS, ChartHop creates a pending new hire which starts an open job according to its assigned start date. Then, once the pending new hire’s information is also entered into the HRIS/payroll system, ChartHop will merge the payroll profile with the existing pending new hire using the pending new hire’s personal or work email as a unique identifier.

### Advantages of Outbound job data flows

Outbound job data flows offer several advantages over inbound job data flows including:

- The immediate and real-time syncing of information.
- Allowing headcount planning and execution (for example, hiring against the headcount plan) to all take place within ChartHop.
- Allowing hiring managers (or recruiters, or even other stakeholders such as finance) to collaboratively propose and make changes to open jobs automatically without needing to access the ATS.

Outbound job data flows are recommended if:

- You utilize ChartHop for headcount planning and/or being the source of truth for the hiring plan.
- You have simple to standard ATS workflows where ChartHop can fulfill most of the data needs.
- You are looking for real-time visualization across both systems.
- You need more collaboration when managing new jobs.






[title] Using ChartHop to open jobs
[path] Implementing ChartHop/Apps & Integrations/Applicant tracking systems/Lever Requisitions/ChartHop as the source of truth/

:::hint{type="info"}
[Packages](https://www.charthop.com/pricing/)**:&#x20;**<font color="#a9a9a9">Basic</font> <font color="#000000">|</font> <font color="#000000">**Standard*** | **Premium**</font>****

\* Available as an add-on
:::

When you configure your Lever Acquisitions app to have an outbound flow, ChartHop serves as the primary source of truth for open jobs. Depending on the status of a job in ChartHop, it translates to a specific status for the same job in Lever.&#x20;

### Open job creation recommendations

When you use ChartHop to open jobs in an outbound data sync, there are a few things to note:

- Syncing outbound from ChartHop to Lever bypasses approval workflows in Lever. As a result, you should leverage scenarios in ChartHop when proposing new open roles or edits to open roles.
- Lever requisition field values are updated to ChartHop’s if any changes are made, therefore you should only make changes in ChartHop to mapped fields as opposed to directly in Lever.
- Only one Location is accepted in Lever, so if multiple Locations are present in ChartHop, only the first Location will be passed into Lever.
- A department in ChartHop cannot be mapped to a custom Lever field, and a custom field in ChartHop cannot be mapped to Lever Department.

### Outbound job status mappings

ChartHop job statuses map to Lever job statuses in the following ways:

| **ChartHop status** | **Direction** | **Lever status** |
| ------------------- | ------------- | ---------------- |
| Active              | ➡️            | Open             |
| Passive             | ➡️            | On hold          |
| Inactive            | ➡️            | On hold          |
| Pending             | ⬅️            | Hired            |
| Offer               | ➡️            | Open             |
| Closed              | ➡️            | Closed           |

### Create a job

With the Lever Requisitions app enabled, ChartHop's open jobs list becomes the system of record for open jobs. Recruiters, hiring managers, financial planners, and team leads can all look at ChartHop for a real-time view of which roles are open and how recruiting is going without needing access to Lever.

:::hint{type="info"}
To avoid potential org data issues, we recommended that you create new jobs via scenarios as opposed to directly in Primary.
:::

When an open job in ChartHop is set to **Active** recruiting status (either when someone creates or updates a new job), a req code is automatically created in Lever if not provided in ChartHop manually. The mapped Lever requisition is changed to **On Hold** in Lever if the open job is set back to an inactive status. Similarly, when the job is removed from ChartHop, it is deleted in Lever.

:::hint{type="warning"}
If you create a new job in ChartHop with a recruiting status set to **Active** without a req code, a new req code is automatically generated by looking through the most recent req codes for that department, and incrementing the number (for example, from ENG-8 to ENG-9).
:::

![Setting a job as Active in ChartHop opens a new job in Lever.](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/gfRoQrXtHDkkix2rnITBh_group-17-1.png "Setting a job as Active in ChartHop opens a new job in Lever.")

To create a new job in ChartHop, follow these steps:

1. From the left sidebar, select **Org chart**.
2. In the **Org chart**, create a new job by either: 
   1. Adding a direct report by selectin&#x67;**&#x20;Add a** **direct report&#x20;**&#x75;nder a pre-existing person or role.
   2. Creating a new job by selecting **New hire** under a pre-existing person or role.
3. In the **Create job** dialog enter your information for the new role using your custom fields and ChartHop’s recommended fields beneath the following tabs:
   - **Structure** - General information about the role, including title, department, and location.
   - **Compensation** - Compensation information about the role, including salary and bonuses.
   - **Recruiting** - Recruiting information about the role, including hiring status and start date.
   - **Description** - A general description about the role.

Once a candidate is hired in Lever, the job in ChartHop is set to **pending status**, and the hired candidate is announced in ChartHop, with their start date being the specified start date in the Lever offer.

### Job hiring status

Any open roles with a **Recruiting status** set to **Active** in ChartHop flow from ChartHop to Lever. Mapped Lever Requisitions are placed **On Hold** in Lever if the mapped ChartHop job is changed to an **Inactive** or **Passive&#x20;**&#x73;tatus in ChartHop. The mapped Lever Requisition is deleted if the ChartHop job is removed.

| **ChartHop job status** | **Result in Lever**                                                                                                                                                                                                                                               |
| ----------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Active or Offer         | A new **Open** Lever requisition is automatically created.If the ChartHop Job was already mapped to an existing Lever Requisition, the Lever requisition is set to **Open.**                                                                                      |
| Inactive or Passive     | The Lever requisition is set to **On Hold**.                                                                                                                                                                                                                      |
| Removed job             | The Lever requisition is deleted.                                                                                                                                                                                                                                 |
| Pending                 | The Lever requisition is set to **Closed.**<br /><br />We do not recommend changing the ChartHop job status to Pending manually. Rather, when a candidate is hired in Lever, the ChartHop Job status is automatically changed to **Pending** to reflect the hire. |

## Reconcile data

You can fix any data discrepancies by forcing ChartHop to reconcile data with Lever outside of a regularly scheduled sync To handle these cases in bulk, you can enable the Lever Requisitions integration app's **Reconciliation** feature. 

During a data reconciliation, ChartHop bulk changes all Lever requisitions to match what is in ChartHop. With **Run Daily** enabled in the Lever Requisitions integration app configuration settings, reconciliations are triggered on a daily basis. You may also manually trigger the reconciliation by selecting the **Sync Jobs** button located at the base of the app settings page.

![Select the Run a One Time Sync button to manually trigger a reconciliation.](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/raFePStDAwMjVsvlV4lEu_group-5.png "Select the Run a One Time Sync button to manually trigger a reconciliation.")

:::hint{type="info"}
Reconciliations are only available for outbound job data flows.
:::

To manually run a data sync reconciliation:

1. From the left sidebar, select **Apps & Bundles**.
2. From the sub-menu, select **Apps**.
3. Select the **Installed Apps** tab.
4. Scroll the list down to the **Lever Requisitions&#x20;**&#x61;pp.
5. Select the **Lever Requisitions&#x20;**&#x61;pp.
6. From the ChartHop **Lever Requisitions&#x20;**&#x61;pp settings page, scroll down to the bottom of the settings page.
7. Select **Sync Jobs**.


[title] Lever as the source of truth
[path] Implementing ChartHop/Apps & Integrations/Applicant tracking systems/Lever Requisitions/

:::hint{type="info"}
[Packages](https://www.charthop.com/pricing/)**:&#x20;**<font color="#a9a9a9">Basic</font> <font color="#000000">|</font> <font color="#000000">**Standard*** | **Premium**</font>****

\* Available as an add-on
:::

An inbound job data flow brings open jobs from the ATS to ChartHop where the ATS is the source of truth. Inbound data flows support both on-demand syncs and scheduled daily syncs. In most cases, you can rely on daily syncs to pull updated hiring data from your ATS.

Data remains in and is updated within the ATS system. A daily sync pulls information from the ATS to ChartHop. You can also stream data ad-hoc through an on-demand **Sync Jobs** button that can be accessed within the ATS application configuration page in ChartHop.

![](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/Ki8433pvYjy5-dgPdgL50_screen-shot-2022-09-13-at-21013-pm.png "Open reqs and new hire data flow Inbound. ")

When a hire is made in the ATS, ChartHop creates a pending new hire which starts an open job according to its assigned start date. Once the pending new hire’s information is also entered into the HRIS/payroll system, ChartHop will merge the payroll profile with the existing pending new hire using the pending new hire’s personal or work email as a unique identifier.

### Advantages of inbound job data flows

Inbound job data flows offer a few advantages over outbound job data flows which include:

- Recruiting teams only having to work out of the ATS.
- No changes are required to your standard hiring workflow.
- The process is often easier to start with and implement for first-time users.

Inbound job data flows are recommended if:

- You don't plan on using ChartHop as the source of truth for your hiring plan.
- You work with a team that is very comfortable with their current ATS workflow.
- You have specific data needs with your ATS that ChartHop can’t fulfill such as highly unique systems and data types.
- You do not plan to give recruiters access to ChartHop.






[title] Jobvite
[path] Implementing ChartHop/Apps & Integrations/Applicant tracking systems/

The Jobvite integration app supports a seamless transition from planning to recruiting and hiring by flowing open jobs and new hire data between ChartHop and Jobvite.

You can leverage the strengths of both the Jobvite and ChartHop platforms in the following collaborative ways:

- Ensure talent and leadership teams:
  - Align on hiring goals. 
  - Keep job data up to date. 
  - Keep new hire data up to date.
- Automatically updates the org chart in ChartHop with every new hire. As soon as a candidate is hired in Jobvite, ChartHop’s org chart updates to reflect the new hire with no manual steps or delays.

:::hint{type="info"}
In compliment to the ATS integration, ChartHop provides a bundle of pre-made **Recruiting Reports** available in the **Apps and Integrations** page .&#x20;
:::

# Jobvite ATS integration app summary

The following table summarizes ChartHop’s Jobvite’s integration app:

| **Features**                  | **Summary**                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                |
| ----------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| ChartHop packages             | <font color="#000000">**Standard*** | **Premium**</font>****<br />\* Available as an add-on                                                                                                                                                                                                                                                                                                                                                                                                                |
| Data direction                | [Inbound or Outbound](https://docs.charthop.com/applicant-tracking-system-apps) The Job Data Flow within the app can be configured in one of two ways:<br />1) **Outbound, ChartHop to Jobvite**: ChartHop is the source of truth for open jobs. 
2) **Inbound, Jobvite to ChartHop**: Jobvite is the source of truth for open jobs. <br />In all cases, candidate information for new hires flows inbound, from Jobvite to ChartHop.                                                                      |
| Sync cadence                  | **Varied**<br />Sync cadence of the Job Data Flow differs by configuration:<br />1) **Outbound, ChartHop to Jobvite**: 
   - Trigger-based (default) syncs when a job creation or update is merged to your primary organization with an **Active&#x20;**&#x72;ecruiting status.
2) **Inbound, Jobvite to ChartHop**: 
   1. Daily syncs.
   2. Ad-hoc syncs.<br />Sync cadence of candidate information for new hires happens on a trigger-basis when candidates are marked as Offer Accepted in Jobvite.  |
| Synced data                   | - Created open roles
- Updates to roles
  - Changes to role details and statuses
- Hired candidates
- Recruiting metrics
  - Candidates
  - Screens 
  - Interviews   &#x20;                                                                                                                                                                                                                                                                                                                               |
| Effective dating support?     | No                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         |
| Custom field mapping support? | Yes, for the `Job`endpoint.<br /><br />Please direct all custom mapping requests to ChartHop’s Professional Services team.                                                                                                                                                                                                                                                                                                                                                                                 |
| Installation Prerequisites    | Syncing data between Jobvite and ChartHop requires:<br />- Jobvite API Credentials 
- Candidate Hired Webhook <br />Both need to be set up manually through the your Jobvite representative. [Learn More](https://docs.charthop.com/setting-up-the-jobvite-integration#hE2HE).                                                                                                                                                                                                                             |




[title] ChartHop as the source of truth
[path] Implementing ChartHop/Apps & Integrations/Applicant tracking systems/Jobvite/

With an outbound job data flow, ChartHop is the source of truth and the database of record.

Hiring data is entered and updated in ChartHop, and is then sent from ChartHop to the ATS using event-based trigger flows which update the information in the ATS immediately.

![](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/RJ-ZtbeWqSIF03PKkqGdd_screen-shot-2022-09-13-at-20549-pm.png "Open reqs data flows Outbound, while new hires data flows inbound.")

In an Outbound job data flow, open job and req data flow *outbound* from hiring plans in ChartHop to the ATS. This helps recruiting teams using ChartHop for headcount planning to move data seamlessly from the approved headcount plan into their recruiting system. However, once a hire is made in the ATS, that new hire data flows *inbound* from the ATS into ChartHop.

When a hire is made in the ATS, ChartHop creates a pending new hire which starts an open job according to its assigned start date. Then, once the pending new hire’s information is also entered into the HRIS/payroll system, ChartHop will merge the payroll profile with the existing pending new hire using the pending new hire’s personal or work email as a unique identifier.

### Advantages of Outbound job data flows

Outbound job data flows offer several advantages over inbound job data flows including:

- The immediate and real-time syncing of information.
- Allowing headcount planning and execution (for example, hiring against the headcount plan) to all take place within ChartHop.
- Allowing hiring managers (or recruiters, or even other stakeholders such as finance) to collaboratively propose and make changes to open jobs automatically without needing to access the ATS.

Outbound job data flows are recommended if:

- You utilize ChartHop for headcount planning and/or being the source of truth for the hiring plan.
- You have simple to standard ATS workflows where ChartHop can fulfill most of the data needs.
- You are looking for real-time visualization across both systems.
- You need more collaboration when managing new jobs.




[title] Carta
[path] Implementing ChartHop/Apps & Integrations/Equity syncs/

With the Carta integration app, you can sync your equity data to ChartHop, which automatically builds your org chart and keeps it up to date. Synced data includes employee stock grants.

### Carta at a glance

The following table summarizes ChartHop’s Carta app. 

| **Supported**                        | - Grow
- Scale                                                                                                                                                                                                                                                                                                                                                                                                                         |
| ------------------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Prerequisites**                    | * A ChartHop account with the Owner role
* Carta account with [Company Editor ](https://support.carta.com/s/article/corporate-permissions#permissions)access.
  - Note: Although HR Administrators can install the app because they not have access to import 409A valuations the sync will not work.&#x20;
*  [This guide from Carta](https://support.carta.com/s/article/corporate-permissions) explains how to check a user's role. |
| **API key permissions**              | To authorize the API connection you must have one of the prerequisite Carta roles above.                                                                                                                                                                                                                                                                                                                                               |
| **Data direction**                   | Inbound from Carta to ChartHop                                                                                                                                                                                                                                                                                                                                                                                                         |
| **Sync cadence**                     | Weekly or as needed                                                                                                                                                                                                                                                                                                                                                                                                                    |
| **Effective dating support**         | Yes                                                                                                                                                                                                                                                                                                                                                                                                                                    |
| **Additional field mapping support** | No                                                                                                                                                                                                                                                                                                                                                                                                                                     |
| **Equity app overview**              | Read an [overview](https://docs.charthop.com/equity-sync-apps) of how equity apps work in ChartHop                                                                                                                                                                                                                                                                                                                                     |
| Synced Carta data                    | The default [synced data](https://docs.charthop.com/synced-data-from-carta) from Carta to ChartHop.                                                                                                                                                                                                                                                                                                                                    |

:::hint{type="info"}
[Modules:](https://www.charthop.com/pricing/) <font color="#000000">**HRIS |** </font>**Engagement | Goals | Performance |&#x20;**<font color="#000000">**Compensation Reviews |** </font>**Headcount Planning**
:::


[title] FP&A
[path] Implementing ChartHop/Apps & Integrations/

ChartHop’s Financial Planning and Analysis (FP\&A) apps leverage its employee, headcount, and scenario data to provide financial teams with the means to conduct cost planning, budgeting, and reporting through a single source of truth for all people data. 

ChartHop supports Workday Adaptive Planning.

:::hint{type="info"}
[Packages](https://www.charthop.com/pricing/)**:&#x20;**<font color="#a9a9a9">Basic</font> <font color="#000000">|</font> <font color="#000000">**Headcount Planning** | </font><font color="#000000">**Compensation Reviews** | </font><font color="#000000">**Performance** | </font><font color="#000000">**Engagement** </font>
:::

:::hint{type="info"}
﻿﻿[Roles](https://docs.charthop.com/user-roles-and-permissions): Technical owner | Owner&#x20;
:::





[title] Identity & SSO
[path] Implementing ChartHop/Apps & Integrations/

You can use ChartHop as your source-of-truth to leverage your employee data for tasks such as creating SSO profiles or workspaces. 

:::hint{type="info"}
[Modules](https://www.charthop.com/pricing/)**:&#x20;**<font color="#000000">**HRIS** | </font>Engagement | Goals | Performance | <font color="#000000">Compensation Reviews | </font>Headcount Planning
:::

:::hint{type="info"}
﻿﻿[Roles](https://docs.charthop.com/user-roles-and-permissions): Technical owner | Owner&#x20;
:::


[title] Google Workspace 
[path] Implementing ChartHop/Apps & Integrations/Identity & SSO/

The Google Workspace app automatically updates Google Workspace profiles with ChartHop source data. You can configure both Google Workspace profile fields and group memberships. Optionally, you can set the app to create Google Workspace profiles when people are hired into ChartHop.

When you install Google Workspace, you'll need to make decisions about how you want to handle Google Workspace profile and what fields you want to include in your sync.

| **Field**                        | **Description**                                                                                                                                               |
| -------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Google Workspace profiles        | - Automatically create new Google Workspace profiles from ChartHop on sync
- Don’t create new profiles only update existing Google Workspace profiles on sync |
| Sync new hires before start date | The number of days before a start date to begin syncing new hires                                                                                             |

### Install the Google Workspace app

To install the **Google Workspace** app, follow the steps below.

1. From the left sidebar, select **Apps & Bundles**.
2. From the sub-menu, select **Apps**.
3. Select the **Availible Apps** tab.
4. Locate and select the **Google Workspace** app in the list of available apps.
5. Select **Install**.
6. Follow the steps outlined in the setup wizard to connect the **Google Workspace&#x20;**&#x61;pp to ChartHop.

:::hint{type="info"}
To connect Google Workspace to ChartHop, you must be an *Google Workspace administrator*.
:::

### Run a single, on-demand sync to Google Workspace

Any ChartHop user with sufficient permissions can trigger an on-demand sync to Google Workspace at any time. To sync your data for the first time, or subsequently, on-demand at any time, follow the steps below.

1. From the left sidebar, select **Apps & Bundles**.
2. From the sub-menu, select **Apps**.
3. Select the **Installed Apps** tab.
4. Locate and select the **Google Workspace** app in the list of installed apps.
5. At the top of the page, select **Run one-time sync**.
6. Select **Run sync&#x20;**&#x74;o perform the sync.&#x20;

### Export dry runs

Any ChartHop user with sufficient permissions can trigger a test integration between Google Workspace and ChartHop at any time.&#x20;

1. From the left sidebar, select **Apps & Bundles**.
2. From the sub-menu, select **Apps**.
3. Select the **Installed Apps** tab.
4. Locate and select the **Google Workspace** app in the list of available apps.
5. At the top of the page, select **Run one-time sync**.
6. Select **Export dry run** to test the integration.
7. When the integration is complete, select **Download** to receive the test results file.

### Create sync groups (mailing lists)

You can create and populate Google Workspace sync groups (mailing lists) from the app config page by following the steps below.

1. From the left sidebar, select **Apps & Bundles**.
2. From the sub-menu, select **Apps**.
3. Select the **Installed Apps** tab.
4. Locate and select the **Google Workspace** app in the list of available apps.
5. Under the **Advanced Settings** section, select **Edit**.&#x20;
6. Under the **Sync Groups (Mailing Lists)&#x20;**&#x73;ection, select **+ Add group.**
7. Enter a name for the group in the **Group Name** field.
8. Enter a corresponding Carrot query in the **Include People Matching** field, or use the filter controls to the left.
9. Select **test** to confirm your query. It should open the Data Sheet in a new tab with your query applied.
10. Select **Save** at the bottom of the page.

### Create sync profile fields

For each custom **Google Workspace** profile field, you may define a ChartHop field or expression to be synced. To do this, follow the steps below.

1. From the left sidebar, select **Apps & Bundles**.
2. From the sub-menu, select **Apps**.
3. Select the **Installed Apps** tab.
4. Locate and select the **Google Workspace** app in the list of available apps.
5. Under the **Advanced Settings** section, select **Edit**.&#x20;
6. Under the **Sync Profile Fields&#x20;**&#x73;ection, select + **Add field**.
7. Enter the name of a custom **Google Workspace** profile field that you wish to populate with data.
8. Enter the corresponding query or field that you wish to copy from ChartHop.
9. Select **Save** at the bottom of the page.

:::hint{type="info"}
[Modules](https://www.charthop.com/pricing/)**:&#x20;**<font color="#000000">**HRIS** | </font>Engagement | Goals | Performance | <font color="#000000">Compensation Reviews | </font>Headcount Planning
:::


[title] Importing historical data
[path] ChartHop for Administrators/Managing data/Importing spreadsheet data/

You can upload historical data for current and terminated employees, including changes to departments, compensations, and titles. You can view historical data from both the **History&#x20;**&#x70;age as well as in any other place in ChartHop that uses the date slider tool, such as the **Org Chart** and the **Data Sheet.**

Types of historical employee data that can be tracked:

- Terminated employees
- Compensation changes
- Manager changes
- Department changes
- Title changes

:::hint{type="warning"}
To upload multiple historical data categories at once for one or more employee(s), when uploading your spreadsheet, you must give each category its own tab.
:::

When you import historical data to ChartHop, depending on the category above, it will only accept the import if the data is provided using the correct column headers.&#x20;

You can use the examples below to learn about the required column headers for each category.&#x20;

## Historical data examples

The following section below provides templates you can use to upload historical data for employees in your ChartHop organization. Events that occur on unique dates should be reflected on new lines.

### Terminated employees template

You can upload historical data for terminated employees. To do so, you will need to add the employee's employment information including:

- Full name
- First manager during their hire date (start date)
- Any manager and title changes during their tenure in the organization
- The end date of their employment

In the example below, we have the employment history for John the Software engineer:

| **Work email**                         | **Date**   | **First name** | **Last name** | **Start Date** | **End Date** | **backfillJob** | **Manager Email**                                              | **Title**                |
| -------------------------------------- | ---------- | -------------- | ------------- | -------------- | ------------ | --------------- | -------------------------------------------------------------- | ------------------------ |
| [johnW@job.com](mailto\:johnW@job.com) |            | John           | Wick          | ﻿4/01/2021     |              |                 | [manager1@example.com](mailto\:manager1@example.com)           | Software Engineer        |
| [johnW@job.com](mailto\:johnW@job.com) | 01/01/2022 |                |               |                |              |                 | [seniormanager@example.com](mailto\:seniormanager@example.com) | Senior software engineer |
| [johnW@job.com](mailto\:johnW@job.com) |            |                |               |                | 2/28/2022    | no              |                                                                |                          |

:::hint{type="success"}
**Line 1**: John's new hire information is added including his work email (unique identifier), first and last name, start date of his employment, starting manager's email, and starting job title.

**Line 2**: John receives a promotion and a manager change on the same day. The date of the change was captured in the **Date** field.

**Line 3**: John's termination day is captured in the **End Date**. Also no planned backfills for his position.
:::

### Compensation changes template

You can upload historical data for changes to employees' compensation over time. To do this, add the employee's employment information including:

- Base salary
- Hourly compensation (optional if hourly compensation is used by your org)
- The currency that was used
- Any variable or base commission changes (reflecting Annual amounts)

| **Work Email**                         | **Date**   | **Base** | **Hourly Comp** | **Hours Per Week** | **Variable Amount** | **Variable Percent** | **Variable Type** | **Currency** |
| -------------------------------------- | ---------- | -------- | --------------- | ------------------ | ------------------- | -------------------- | ----------------- | ------------ |
| [evan@job.com](mailto\:evan@job.com)   | 04/01/2021 | 100,000  |                 |                    |                     | 10%                  | Bonus             | USD          |
| [evan@job.com](mailto\:evan@job.com)   | 01/01/2022 | 115,000  |                 |                    |                     | 15%                  | Bonus             | USD          |
| [sarah@job.com](mailto\:sarah@job.com) | 11/19/2020 |          | 50              | 32                 | 5,000               |                      | Commission        | USD          |
| [joy@job.com](mailto\:joy@job.com)     | 01/01/2022 |          | 50              | 32                 |                     | 12%                  | Bonus             | EUR          |

:::hint{type="success"}
**Line 1**: Evan's base compensation of $100,000 is captured on April 1st, 2021 alongside a compensation of 10% of his yearly income.

**Line 2**: Evan receives a $15,000 yearly salary increase effective January 1st, 2022 alongside his bonus being increased by 5%.

**Line 3**: Sarah's pay is captured at $50 per hour while working 32 hours per week alongside a variable commission of $5000.&#x20;

**Line 4**: Joy's pay is captured at $50 per hour while working 32 hours per week alongside a bonus of 12% of her yearly income.
:::

### Manager changes template

You can upload historical data for changes to employees' managers over time. To do this, you will need the dates of the changes, as well as the manager's emails.

| **Work Email**                         | **Date**   | **Manager Email**                              |
| -------------------------------------- | ---------- | ---------------------------------------------- |
| [larry@job.com](mailto\:larry@job.com) | 04/01/2021 | [pam@example.com](mailto\:pam@example.com)     |
| [larry@job.com](mailto\:larry@job.com) | 01/01/2022 | [roger@example.com](mailto\:roger@example.com) |

:::hint{type="success"}
**Line 1**: Larry was assigned a new manager on April 1st, 2021.

**Line 2**: Larry was then later assigned a new manager on January 1st, 2022.
:::

### Department changes template

You can upload historical data to reflect departmental changes for employees over time. To do this, you will need the dates of the changes, as well as the names of the departments.

| **Work Email**                           | **Date**   | **Department** |
| ---------------------------------------- | ---------- | -------------- |
| [henry@job.com](mailto\:henry@job.com)   | 04/01/2021 | Engineering    |
| [ashley@job.com](mailto\:ashley@job.com) | 01/01/2021 | Product        |
| [ashley@job.com](mailto\:ashley@job.com) | 06/01/2022 | HR             |

:::hint{type="success"}
**Line 1**: Henry was assigned to the engineering department on April 1st, 2021.

**Line 2**: Ashley was assigned to the product department on January 1st, 2021.

**Line 3**: Later that year, Ashley was reassigned to the HR department on June 1st, 2022.
:::

### Title changes template

You can upload historical data to reflect the changes to an employee's titles over time. To do this, you will need the dates of the changes, as well as the names of the titles.

| **Work Email**                         | **Date**   | **Title**         |
| -------------------------------------- | ---------- | ----------------- |
| [ben@job.com](mailto\:ben@job.com)     | 01/01/2022 | Senior Engineer   |
| [illen@job.com](mailto\:illen@job.com) | 06/11/2021 | Accountant        |
| [illen@job.com](mailto\:illen@job.com) | 01/01/2022 | Senior Accountant |

:::hint{type="success"}
**Line 1**: Ben's title was Engineer, but was then promoted to Senior Engineer on January 1st, 2022.

**Line 2**: Illen's title was Junior Accountant and was then promoted to Accountant on June 11th, 2021.

**Line 3**: In the following year, Illen was promoted to Senior Accountant.
:::

[title] Add new people to ChartHop
[path] ChartHop for Administrators/Managing data/Importing spreadsheet data/

You can import a CSV or spreadsheet file to add people to ChartHop. Ensure that the data in your file conforms to ChartHop's [formatting requirements](https://docs.charthop.com/importing-spreadsheet-data).&#x20;

To add new people to your ChartHop organization, complete the following steps:&#x20;

1. From the Settings menu (gear icon) in the left sidebar, select **Import Spreadsheet data**.
2. On the right side of the page, select **Add new people**.&#x20;
3. Select **Download template**. A CSV template downloads to your computer.
4. Add your data to the CSV template, including any optional columns.&#x20;
5. Save the template under a new name.
6. On the **Upload your spreadsheet** page, drag the template to the target area.
7. Ensure the **Allow spreadsheet to create new people and jobs&#x20;**&#x73;etting is selected. It is enabled by default.&#x20;
8. (Optional) To create new [groups](https://docs.charthop.com/creating-and-managing-groups) in your ChartHop org, select **Allow spreadsheet to create new groups**. Note that this does not include [Job Codes](https://docs.charthop.com/job-codes), or [Bands](https://docs.charthop.com/compensation-bands), which must be created manually.
9. Select **Upload to org**.
10. For any fields in your spreadsheet that weren’t automatically matched to a ChartHop field, select a ChartHop field to match to your spreadsheet column. You may need to scroll to see all unmatched fields, which are highlighted in red.&#x20;
11. Once all columns are matched, select **Continue with import** to finish importing data.&#x20;
12. (Optional) When upload is complete, select **View Details** to see a summary.&#x20;

:::hint{type="warning"}
When matching spreadsheet columns with ChartHop fields, select **None of these** to skip a column. Skipped columns are not imported. &#x20;
:::

### Required columns

The following columns are required:

| **Column** | **Description**                                          | **Example**                |
| ---------- | -------------------------------------------------------- | -------------------------- |
| Work Email | Employee's work email address; must be the first column. | `joan.smith@charthop.com`  |
| First Name | Employee's first name.                                   | `Joan`                     |
| Last Name  | Employee's last name.                                    | `Smith`                    |
| Job Title  | Employee's job title.                                    | `Senior Technical Writer`  |
| Start Date | Employee's start date.                                   | `1/5/2022`                 |
| Manager    | Email address for the employee's manager.                | `karen.jones@charthop.com` |

### Optional columns

The following columns are optional:

| **Column**        | **Description**                                                                                                                                                                                    | **Example**               |
| ----------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------- |
| Pref Name         | Any first name or nickname that is different from legal name.                                                                                                                                      | `Sunny`                   |
| Pref Last         | Any last name or nickname that is different from legal name.                                                                                                                                       | `Jones`                   |
| Middle Name       | Full legal middle name.                                                                                                                                                                            | `Trevor`                  |
| Employee ID       | Alphanumeric string representing the employee.                                                                                                                                                     | `1001`                    |
| Base              | Annual base income.                                                                                                                                                                                | `$100,000`                |
| Hourly            | Hourly base income.                                                                                                                                                                                | `$37.50`                  |
| Hours Per Week    | Number of hours worked per week.                                                                                                                                                                   | `40`                      |
| Variable          | Annual bonus or on-target earnings (OTE).                                                                                                                                                          | `$20,000`                 |
| Variable Type     | Type of variable compensation: bonus or commission.                                                                                                                                                | `bonus`                   |
| Currency          | Three-letter currency code, if non-USD, for the currency the job is paid in. [Learn more](https://docs.charthop.com/_kS5-money#pB63z).                                                             | `GBP`                     |
| Band              | Name of the compensation band. Note that bands must be created first. [Learn more.](https://docs.charthop.com/using-the-compensation-bands-wizard)                                                 | `L3`                      |
| Date of Birth     | Employee's birth date.                                                                                                                                                                             | `12/26/1986`              |
| Department        | Department the person belongs to.                                                                                                                                                                  | `Enterprise`              |
| Employment        | Employment status, as follows:<br />* full - Full time.
* part - Part time. 
* temp - Temporary. 
* intern - Intern.
* contract - Contract. 
* expat - Overseas job with special tax status.&#x20; | `full`                    |
| Ethnicity         | Employee's ethnicity.                                                                                                                                                                              | `Asian`                   |
| Gender            | Employee's gender.                                                                                                                                                                                 | `Male`                    |
| Location          | Employee's geographic location.                                                                                                                                                                    | `New York`                |
| Team              | The team or teams the employee belongs to; separate multiple teams with semicolons.                                                                                                                | `Engineering; Technology` |
| Mobile Phone      | Employee's mobile phone.                                                                                                                                                                           | `7187778888`              |
| contact.homePhone | Employee's home phone.                                                                                                                                                                             | `7187778888`              |
| contact.workPhone | Employee's work phone.                                                                                                                                                                             | `7187778888`              |
| Street 1          | Employee's street address.                                                                                                                                                                         | `222 Example St.`         |
| Street 2          | Employee's apartment, if any.                                                                                                                                                                      | `#4E`                     |
| City              | Employee's city.                                                                                                                                                                                   | `Brooklyn`                |
| State             | Employee's state.                                                                                                                                                                                  | `NY`                      |
| Postal Code       | Employee's postal code.                                                                                                                                                                            | `11209`                   |
| Country           | Employee's country.                                                                                                                                                                                | `US`                      |



:::hint{type="info"}
[Modules:](https://www.charthop.com/pricing/) <font color="#000000">**HRIS |** </font>**Engagement | Goals | Performance |&#x20;**<font color="#000000">**Compensation Reviews |** </font>**Headcount Planning**
:::

:::hint{type="info"}
[Roles](https://docs.charthop.com/user-roles-and-permissions): Owner | Org editor
:::


[title] Setting required fields
[path] ChartHop for Administrators/Managing data/Fields/Requiring fields when opening jobs/

When creating and editing a custom field in ChartHop, you can configure the field to be required.

To set a field to be required, you can either create a custom field or select an eligible existing ChartHop field. [Learn more](https://docs.charthop.com/create-a-custom-field).&#x20;

### Make a Built-in field required

You can modify a ChartHop built-in field to be required when creating and editing jobs.&#x20;

![](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/_4q_uwt7HoZUKwZ641vte_group-11-1.png)

To make a built-in field required:

1. Select **Data Model** from the left sidebar
2. Select **Fields** from the sub-menu.
3. On the **Fields** page, select the ChartHop field you wish to modify.
   - Note that only a subset of built-in fields can be made required. ***Learn more.***
4. Check **Required to create or update job**.
5. Select **Save&#x20;**&#x74;o finish modifying the built-in field.

### Make a Custom field required

You can modify a custom field to be required when creating and editing jobs.&#x20;

![](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/BML706oUnhR7uE6FeI_9c_group-12.png)

To make a custom field required:&#x20;

1. From the left sidebar, select **Data Model.**
2. From the sub-menu, select **Field Categories.**
3. On the **Fields** page, select **New field**.&#x20;
4. In the **New field** dialog, ensure that you have following settings:&#x20;
   - **Enable Edit Dialog** is checked on.&#x20;
     - This option will ensure that your field will appear in the **Custom tab** section of your job's profile page.
   - **Applies to&#x20;**&#x69;s set t&#x6F;**&#x20;Jobs**.
   - **Required to create or update job** is checked on.
5. Complete the configuration of your field.
6. Select **Save** when finished.


[title] Viewing sync details
[path] ChartHop for Administrators/Managing data/Sync history/

:::hint{type="info"}
[Packages](https://www.charthop.com/pricing/)**:&#x20;**<font color="#a9a9a9">Basic</font> <font color="#000000">|</font> <font color="#000000">**Standard*** | **Premium**</font>****

\* Available as an add-on
:::

You can view in-depth details for any of your syncs from the **App sync details&#x20;**&#x70;age. On this page, you can find more information about specific errors and warnings that occurred during a sync, along with other helpful information

# View sync details

To view the details page of your sync history results, complete the following steps:

1. From the Settings menu (gear icon) in the left sidebar, select **Sync history.**
2. Select the **All apps** dropdown and choose the app you wish to use to filter by.
3. Select the date and time link from the **Sync completed&#x20;**&#x63;olumn to access that sync's details page.

When you access the details page of a sync, the information is structured in one of two ways, depending on the app and sync type.

# Sync results for ATS requisitions and new hire data

If you have configured your ATS integration to use ChartHop as the source of truth (outbound), you can see a timeline of the sync activities that occurred between ChartHop and the ATS.&#x20;

:::hint{type="info"}
Note: the level of detail you see for different syncs depending on your role and access level. 
:::

![The App sync details page for outbound and new hire webhook data flows](https://lh4.googleusercontent.com/ayDgJ4BxJWN5oAgfePfbe-61q0hyqQATcJp65S6DjAgZE2VpMDFZmWUafAqMgdu7vBIXLFryjFdFxkixKJBTRbN_ozfrRX1OAEJlkn8vC66mo1pE0CEHAs615HalmogQwvkAAja62mbkqUOlXxRpeSNjLQPYivaWTGhHgX_ar6iKEUEwSatEPDlM6Q "  ")

The **App sync details** page contains a summary of the sync including the person who triggered the sync, other corresponding events that occurred (e.g., creating a new Opening in the ATS), and information about any specific fields that were updated (either in ChartHop or in the remote system).

## View sync results for other data flows

For all other apps, you'll see a detailed list of errors and warnings that occurred as part of the sync.

![App sync details page](https://lh4.googleusercontent.com/t6aW6EskVtBcnfzBl2ETKLOeTZVoPugI7L5FgpW2v4H9E6onbvDFaznbhLBM48jJGjlNmb4RhPc-hL1K6tc95ZsaZM_V2x8wyA2wCoK0rX872kq9AW3WruwDgLiBx14jlBqyhhRdr9JaRzdtJCLZOGzYrRbB_m908cWzyYeMEznY_-9vmlkH1Ryffg "   ")

### View sync results

The **Results** section of the app sync details page contains a summary of the sync including its status, completion date/time, duration, number of errors, and more.

The complete list of details captured in the **Results** section are the following:

| **Name**      | **Description**                                                                                                                                            |
| ------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Status        | Contains a summary of the sync status (including if it completed successfully, failed, or completed with errors and the full date and time of completion). |
| Sync Duration | Displays the full duration of the sync in days, hours, minutes and seconds.                                                                                |
| Requested by  | The name of the employee or system (if automatic) that triggered the sync.                                                                                 |
| Total lines   | The total number of lines that were synced.                                                                                                                |
| Updates       | The total number of updates that were made as part of the sync.                                                                                            |
| Warnings      | The number of warnings that occurred as part of  the sync.                                                                                                 |
| Errors        | The number of errors that occurred as part of  the sync.                                                                                                   |

### Download sync results

You can download the result logs of your sync results and export them into .csv and .txt files.

To access and download the sync history log, on the **App sync details** page, under the **Results** section, select **Download full log**.

Though the log file extension is a *.txt*, the actual structure of the data in the file is in *Json*.

### View sync errors

The **Errors & Warnings** section of the **App sync details&#x20;**&#x70;age contains a summary of errors and warnings that occurred as part of the sync.

The complete list of details captured in the **Errors & Warnings** section are the following:

| **Field** | **Description**                                                                                                                                                                                          |
| --------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Line      | The line number where an error occurred. To cross-check the relevant line, select “Export Synced Data” (or “Export Spreadsheet Data” for a spreadsheet import) and view the line in the downloaded .csv. |
| Level     | The type of issue (error or warning) that occurred during the sync:                                                                                                                                      |
| Message   | The source of the error(s) or warning(s) that occurred during the sync.                                                                                                                                  |

### Export sync results

You can download an export of the synced data. This can be useful if you need to reference the specific line in which an error or warning occurred, or if you otherwise want to cross-check the imported data. 

To access and download a .csv of the synced data, select “Export synced data” (or “Export spreadsheet data” if a spreadsheet import).


[title] Update your current organization 
[path] ChartHop for Administrators/Managing data/Importing spreadsheet data/

You can import a CSV or spreadsheet file to make updates to people in ChartHop. Ensure that the data in your file conforms to ChartHop's formatting requirements. &#x20;

To update people in your ChartHop organization, complete the following steps:&#x20;

1. From the Settings menu (gear icon) in the left sidebar, select **Import Spreadsheet data**.
2. On the right side of the page, select **Update current org**.&#x20;
3. Select **Download template**. A CSV template downloads to your computer.
4. Add your data to the CSV template, including any optional columns.&#x20;
5. Save the template under a new name.
6. On the **Upload your spreadsheet** page, drag the template to the target area.
7. (Optional) To create new people and jobs in your ChartHop org, select **Allow spreadsheet to create new people and jobs**. Note that this feature is set on by default.
8. (Optional) To create new [groups](https://docs.charthop.com/creating-and-managing-groups) in your ChartHop org, select **Allow spreadsheet to create new groups**. Note that this does not include [Job Codes](https://docs.charthop.com/job-codes), or [Bands](https://docs.charthop.com/compensation-bands), which must be created manually.
9. Select **Upload to org**.
10. For any fields in your spreadsheet that weren’t automatically matched to a ChartHop field, select a ChartHop field to match to your spreadsheet column. You may need to scroll to see all unmatched fields, which are highlighted in red.&#x20;
11. Once all columns are matched, select **Continue with import** to finish importing data.&#x20;
12. (Optional) When upload is complete, select **View Details** to see a summary.&#x20;

:::hint{type="warning"}
When matching spreadsheet columns with ChartHop fields, select **None of these** to skip a column. Skipped columns are not imported. &#x20;
:::

### Required columns

**Work email** is required, and should be the first column in your file.&#x20;

### Optional Columns&#x20;

Include any of the following columns, depending on what information you want to update.&#x20;

| **Column**        | **Description**                                                                                                                                                                                    | **Example**               |
| ----------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------- |
| Job Title         | Employee's job title.                                                                                                                                                                              | `sunny@charthop.com`      |
| Manager           | Email address for the employee's manager.                                                                                                                                                          | `john@charthop.com`       |
| Pref Name         | Any first name or nickname that is different from legal name.                                                                                                                                      | `Sunny`                   |
| Pref Last         | Any last name or nickname that is different from legal name.                                                                                                                                       | `Jones`                   |
| Middle Name       | Full legal middle name.                                                                                                                                                                            | `Trevor`                  |
| Employee ID       | Alphanumeric string representing the employee.                                                                                                                                                     | `1001`                    |
| Base              | Annual base income.                                                                                                                                                                                | `$100,000`                |
| Hourly            | Hourly base income.                                                                                                                                                                                | `$37.50`                  |
| Hours Per Week    | Number of hours worked per week.                                                                                                                                                                   | `40`                      |
| Variable          | Annual bonus or on-target earnings (OTE) in currency.                                                                                                                                              | `$20,000`                 |
| variablePercent   | Annual bonus in percent.                                                                                                                                                                           | `20%`                     |
| Variable Type     | Type of variable compensation: bonus or commission.                                                                                                                                                | `bonus`                   |
| Currency          | Three-letter currency code, if non-USD, for the currency the job is paid in.                                                                                                                       | `GBP`                     |
| Band              | Name of the compensation band. Note that bands must be created first. [Learn more.](https://docs.charthop.com/using-the-compensation-bands-wizard)                                                 | `L3`                      |
| Date of Birth     | Employee's birth date.                                                                                                                                                                             | `12/26/1986`              |
| Department        | Department the person belongs to.                                                                                                                                                                  | `Enterprise`              |
| Employment        | Employment status, as follows:<br />* full - Full time.
* part - Part time. 
* temp - Temporary. 
* intern - Intern.
* contract - Contract. 
* expat - Overseas job with special tax status.&#x20; | `full`                    |
| Ethnicity         | Employee's ethnicity.                                                                                                                                                                              | `Asian`                   |
| Gender            | Employee's gender.                                                                                                                                                                                 | `Male`                    |
| Location          | Employee's geographic location.                                                                                                                                                                    | `New York`                |
| Team              | The team or teams the employee belongs to; separate multiple teams with semicolons.                                                                                                                | `Engineering; Technology` |
| Mobile Phone      | Employee's mobile phone.                                                                                                                                                                           | `7187778888`              |
| contact.homePhone | Employee's home phone.                                                                                                                                                                             | `7187778888`              |
| contact.workPhone | Employee's work phone.                                                                                                                                                                             | `7187778888`              |
| Street 1          | Employee's street address.                                                                                                                                                                         | `222 Example St.`         |
| Street 2          | Employee's apartment, if any.                                                                                                                                                                      | `#4E`                     |
| City              | Employee's city.                                                                                                                                                                                   | `Brooklyn`                |
| State             | Employee's state.                                                                                                                                                                                  | `NY`                      |
| Postal Code       | Employee's postal code.                                                                                                                                                                            | `11209`                   |
| Country           | Employee's country.                                                                                                                                                                                | `US`                      |



:::hint{type="info"}
[Modules:](https://www.charthop.com/pricing/) <font color="#000000">**HRIS |** </font>**Engagement | Goals | Performance |&#x20;**<font color="#000000">**Compensation Reviews |** </font>**Headcount Planning**
:::

:::hint{type="info"}
[Roles](https://docs.charthop.com/user-roles-and-permissions): Owner | Org editor
:::


[title] Add or update equity data
[path] ChartHop for Administrators/Managing data/Importing spreadsheet data/

When your company issues stock grants, you can import a CSV or spreadsheet file to ChartHop in order to track vesting schedules and compensation. Ensure that the data in your file conforms to ChartHop's [formatting requirements](https://docs.charthop.com/importing-spreadsheet-data).&#x20;

To add or update equity data in ChartHop, complete the following steps:&#x20;

1. From the Settings menu (gear icon) in the left sidebar, select **Import Spreadsheet data**.
2. On the right side of the page, select **Add or update equity data**.&#x20;
3. Select **Download template**. A CSV template downloads to your computer.
4. Add your data to the CSV template, including any optional columns.&#x20;
5. Save the template under a new name.
6. On the **Upload your spreadsheet** page, drag the template to the target area.
7. (Optional) To create new [groups](https://docs.charthop.com/creating-and-managing-groups) in your ChartHop org, select **Allow spreadsheet to create new groups**. Note that this does not include [Job Codes](https://docs.charthop.com/job-codes), or [Bands](https://docs.charthop.com/compensation-bands), which must be created manually.
8. Select **Upload to org**.
9. For any fields in your spreadsheet that weren’t automatically matched to a ChartHop field, select a ChartHop field to match to your spreadsheet column. You may need to scroll to see all unmatched fields, which are highlighted in red.&#x20;
10. Once all columns are matched, select **Continue with import** to finish importing data.&#x20;
11. (Optional) When upload is complete, select **View Details** to see a summary.&#x20;

:::hint{type="warning"}
When matching spreadsheet columns with ChartHop fields, select **None of these** to skip a column. Skipped columns are not imported. &#x20;
:::

## Required columns

The following columns are required:

| **Column**   | **Description**                                    | **Example**               |
| ------------ | -------------------------------------------------- | ------------------------- |
| Work Email   | The person's work email; must be the first column. | `jane.jones@charthop.com` |
| First Name   | First name.                                        | `Jane`                    |
| Last Name    | Last Name.                                         | `Jones`                   |
| Date         | Date on which the grant was issued.                | `5/1/2022`                |
| Grant Price  | Grant's strike price.                              | `$2.50`                   |
| Grant Shares | Total number of shares.                            | `5000`                    |

## Optional columns

The following columns are optional:

| **Column**      | **Description**                                                                                                                      | **Example** |
| --------------- | ------------------------------------------------------------------------------------------------------------------------------------ | ----------- |
| Grant Vest Date | Date the grant's vesting schedule starts.                                                                                            | `5/1/2026`  |
| Grant ID        | Unique ID corresponding to the grant. Recommended, since you can use it to identify and edit existing grants in subsequent uploads.  | `FY2021`    |
| Grant Type      | Type of stock grant, such as incentive stock options (ISO) or non-qualified stock options (NSO).                                     | `ISO`       |
| Grant Vest      | Vesting schedule for the stock grant. See the following section for more examples.                                                   | `Q_4Y_1Y`   |
| grantCancelDate | Date that an existing grant was cancelled; also allows a user to upload a cancelled grant.                                           | `2/1/2022`  |

## Specifying vesting schedules

Typical grant schedules consist of an interval, the length of the grant, and the cliff period.&#x20;

For example, a grant might look like this: `M_4Y_1Y`, where `M` is the interval, `4Y` is the total length, and `1Y` is the cliff period.

### Specifying the interval

Specify the interval with a single letter as follows:

- `Y` - Yearly
- `Q` - Quarterly
- `M` - Monthly

### Specifying the grant length

Specify the grant length with a number and an interval as follows:

- `1Y` - One year
- `36M` - 36 months
- `3Q` - Three quarters

Ensure that the vesting period's total length is at least as long as a single vesting interval and is a multiple of that interval. In addition, cliff length must be less than or equal to the total length of the grant.

### Specifying the cliff length

Specify the cliff length the same way as the total length. The cliff length must be less than or equal to the total grant length as follows:

- `1Y` - One year
- `36M` - 36 months
- `3Q` - Three quarters

To specify a negative cliff length, write the number using `MINUS_` instead of a hyphen, for example`MINUS_1Y` or `MINUS_12M`. If you don't include a cliff length, it defaults to zero.&#x20;

### Specifying vesting percentages&#x20;

You can specify the vesting percentages for yearly, quarterly, and monthly vesting schedules.Whenyou omit the cliff and insert the percentage to be vested each year, quarter, or month, in order, separated by underscores. See the following examples:

| Vesting schedule                          | Meaning                                                                                                                                             |
| ----------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------- |
| `Y_4Y_40_20_20_20`                        | A four-year grant with no cliff, vesting 40% after the first year and 20% each following year.                                                      |
| `Y_4Y_0_20_30_50`                         | A four-year grant where the one-year cliff is built into the year-by-year percentages.                                                              |
| `Q_16Q_0_0_0_20_5_5_5_5_5_5_5_5_5_5_5_25` | A 16-quarter grant with no cliff, vesting 20% after the 4th quarter, plus 5% per quarter after that, and then ending with 25% in the final quarter. |

Keep in mind that you must include as many percentages in the schedule as there are time periods.

### Standard vesting schedules

ChartHop supports the following default vesting schedules:

| **Vesting schedule** | **Meaning**                                                                                                                     |
| -------------------- | ------------------------------------------------------------------------------------------------------------------------------- |
| `M_4Y_1Y`            | Monthly vesting over four years with a one year cliff.                                                                          |
| `M_4Y_0Y`            | Monthly vesting over four years with no cliff.                                                                                  |
| `Q_4Y_1Y`            | Quarterly vesting over four years with a one year cliff.                                                                        |
| `Q_4Y_0Y`            | Quarterly vesting over four years with no cliff.                                                                                |
| `Y_4Y_40_20_20_20`   | Yearly vesting over four years, where 40% is vested the first year and 20% is vested during each of the three subsequent years. |

## Unsupported vesting schedule formats

If a schedule doesn't follow the accepted format or the stock grant doesn't have any vesting schedule at all, ChartHop does the following:

- Displays the schedule's name in the **Equity&#x20;**&#x74;ab as provided by the Equity sync or the string value given in the `grantVest` column during the CSV upload.
- Imports the grant as "unvested," and does not vest over time. When unvested grants appear in the **Equity Grants** table, their **Vesting Start** and **Vesting End** fields are blank.

:::hint{type="info"}
[Modules:](https://www.charthop.com/pricing/) <font color="#000000">**HRIS |** </font>**Engagement | Goals | Performance |&#x20;**<font color="#000000">**Compensation Reviews |** </font>**Headcount Planning**
:::

:::hint{type="info"}
[Roles](https://docs.charthop.com/user-roles-and-permissions): Owner | Org editor
:::


[title] Editing employee profiles
[path] ChartHop for Administrators/Managing data/

As an Owner or Technical Owner, you can edit the job and personal profile information for members of your ChartHop organization from the employee profile view.

:::hint{type="danger"}
Note that changes to job or person details will be overwritten according to the data sync settings of your ChartHop organization's payroll and ATS apps.
:::

### ﻿Edit job

You can directly edit the details of an employee's job through the **Edit job** option available in the profile page dropdown menu.

![Edit job](https://api.archbee.com/api/optimize/CXAjUAezd9VEEVQBIYmdw/V7g302My_v0IayVf-CCPU_screen-shot-2022-06-07-at-43551-pm.png "The Edit job dialog")

To edit an employee's job:

1. From the left sidebar, select **Org Chart**.
2. In the org chart, select the employee whose profile you wish to view and edit.
3. In the information panel, select **View profile**.
4. From the employee profile page, from the menu in the top right corner, select **Edit job**.
5. In the **Edit job&#x20;**&#x64;ialog, edit the following job details as needed:
   - **Structure** - General information about the role including its title, department, and location.
   - **Compensation** - Compensation information about the role including salary and bonuses.
   - **Recruiting** - Recruiting information about the role, including its hiring status and start date.
   - **Description** - A job description for the role.
6. Select **Save to primary** when you're done.

### Edit person

You can directly overwrite the personal data of employees in your Org using the **Edit person** option available in the profile page drop-down menu.

To edit an employee's profile content:

1. From the left side bar, select **Org Chart**.
2. In the org chart, select the node of the employee whose profile you wish to view and edit.
3. In the information panel, select **View profile**.
4. From the employee's profile page, select the down arrow drop-down menu. Select **Edit person.**
5. Edit the information using the fields in the **Edit person** dialog. You'll have the option to edit  information under the **Basic info&#x20;**&#x61;nd **Custom fields** tabs.
   - **Basic info&#x20;**- Includes general information such as names, birthdate, email, phone number, etc. [Learn more](https://docs.charthop.com/editing-your-profile#ihp7t).
   - **Custom fields** -  Includes information specified by the requirements set in pre-made custom fields. [Learn more](https://docs.charthop.com/working-with-custom-fields).
6. Select **Save** when you're finished.

:::hint{type="info"}
[Modules:](https://www.charthop.com/pricing/) HRIS | Engagement | Goals | Performance | Compensation Reviews | Headcount Planning
:::

:::hint{type="info"}
[Roles](https://docs.charthop.com/user-roles-and-permissions): Owner | Technical Owner
:::

[title] Auto-increment fields
[path] ChartHop for Administrators/Managing data/Fields/

# Auto-increment fields

Auto-increment fields automatically generate unique, sequential IDs for jobs in your organization. Each time a new job is created or synced into Primary, the system assigns the next available ID. You can pair auto-incrementing numbers with a prefix based on a **Text** field or **Group Code** to create structured identifiers like **ENG-0001**, **MKT-0001**, and **MKT-0002**.

| **INFO**<br />Auto-increment IDs are only assigned to jobs in Primary. Jobs in Scenarios will not receive an auto-increment ID. |
| ------------------------------------------------------------------------------------------------------------------------------- |



## Auto-increment field properties

When you create an auto-increment field, you configure the following properties:

| **Property**       | **Description**                                                                                                                                                          |
| ------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| **Field label**    | The name identifying the field in the app (e.g., Employee ID).                                                                                                           |
| **Prefix source**  | An optional Text or Group Code field used to generate a prefix for each ID. When set, IDs include the prefix value followed by the incrementing number (e.g., ENG-0001). |
| **Number padding** | The minimum number of digits displayed. Shorter numbers are padded with leading zeros (e.g., 0001 for 4-digit padding).                                                  |
| **Separator**      | The character between the prefix and the number (e.g., a hyphen in ENG-0001).                                                                                            |



## Create an auto-increment field

To create a new auto-increment field:

1. From the left sidebar, select **Data Model**.
2. From the sub-menu, select **Fields**.
3. Select **Create Field**.
4. Enter a **Field label** and optional **Description**.
5. Under **Data type**, select **Auto-increment**.
6. (Optional) Select a **Prefix source** field. Choose a **Text** or **Group Code** field to generate prefixed IDs (e.g., selecting Department produces IDs like ENG-0001).
7. Configure the **Number padding** and **Separator** as needed.
8. Select **Save**.



A confirmation modal appears to let you know the system will automatically populate IDs for all existing jobs in Primary. Select **Confirm** to proceed.

| **NOTE**<br />After saving, the system assigns an auto-increment ID to every existing job in Primary. This process runs in the background and may take a few moments depending on your organization’s size. |
| ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

## How auto-increment IDs work

### Automatic assignment

Whenever a new job is created or synced into Primary, the system automatically assigns the next available auto-increment ID. No manual entry is required.

### Prefix behavior

If you configure a prefix source, the ID combines the value of that field with the incrementing number. For example, if the prefix source is set to **Department** and a job belongs to the Engineering department, the generated ID is **ENG-0001**. Each prefix maintains its own independent sequence:

- ENG-0001, ENG-0002, ENG-0003 (Engineering)
- MKT-0001, MKT-0002 (Marketing)
- FIN-0001 (Finance)

### Manual editing

You can manually edit an auto-increment ID directly in the Data Sheet. This is useful if you need to correct or override a specific value.



| **WARNING**<br />The system validates that all auto-increment IDs are unique. If you enter a value that already exists, the system rejects the change and prompts you to use a different value. |
| ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |



### Scenarios

Jobs in Scenarios are not assigned auto-increment IDs. IDs are only generated when a job exists in or is synced into Primary.

## Best practices

- **Choose a meaningful prefix source.&#x20;**&#x46;ields like Department or Location Group Code make IDs immediately recognizable across the organization.
- **Set sufficient number padding.&#x20;**&#x49;f you expect more than 999 jobs per prefix, use at least 4-digit padding to keep IDs consistent in length.
- **Avoid editing IDs unless necessary.&#x20;**&#x54;he system manages uniqueness automatically. Manual changes increase the risk of conflicts.
- **Plan your configuration before saving.&#x20;**&#x4F;nce the field is saved, existing jobs in Primary are populated immediately.&#x20;

## Frequently asked questions

### What happens if I delete an auto-increment field?

Deleting the field removes all stored auto-increment IDs from your organization. This action cannot be undone.

### Can I use the same auto-increment field across multiple data models?

Auto-increment fields apply to jobs. They’re available wherever job data is displayed, including the Data Sheet and org chart.

### What happens when a job is moved between departments?

The existing auto-increment ID stays with the job. It does not change when the prefix source value changes. New IDs reflect the current prefix at the time of assignment.


[title] Managing data
[path] ChartHop for Administrators/

::::LinkArray{contentSource="CUSTOM"}
:::LinkArrayItem{headerType="COLOR" headerColor="#c8acff"}
[Sync history](docId\:wZ2sVQ7hs8ZSdBbv-gq6z)&#x20;



View how your data has been sync'd to ChartHop.
:::

:::LinkArrayItem{headerType="COLOR" headerColor="#c8acff"}
[Importing spreadsheet data](docId\:At7q7FJKYiorELBLfdowW)&#x20;



Use spreadsheets to import employee data.
:::

:::LinkArrayItem{headerType="COLOR" headerColor="#c8acff"}
[Editing employee profiles](docId\:xoULLp5oNvwTloGOI9seS)&#x20;



Edit an employee profile.
:::
::::


[title] Common data troubleshooting for Admins
[path] ChartHop for Administrators/Managing data/

Below is a collection of common troubleshooting steps for Admins:

# Missing data on a datasheet or dashboard

There are a few reasons why data may not be showing up for you on a datasheet or dashboard.&#x20;

1. You may not have access to the data.&#x20;
   1. **Suggested next step:&#x20;**&#x43;heck your user access role and the field access level. If you are in the [Owner](docId\:o_IcgvK94IdcUnZIuNTVi) role at the organization, you will have access to all data. If you are in another access role or are unsure then you likely don't have access to the data.&#x20;
2. The data may not exist.&#x20;
   1. **Suggested next step: &#x20;**&#x43;heck with an [Owner](docId\:o_IcgvK94IdcUnZIuNTVi) to see if data exists.&#x20;
3. The data sheet or dashboard may be owned by someone who has left the organization.&#x20;
   1. **Suggested next step:&#x20;**&#x49;f you are an [Owner](docId\:o_IcgvK94IdcUnZIuNTVi), then you can click on the share menu and reassign the owner of the data sheet or dashboard to yourself.&#x20;



# A field is not showing up in a field dropdown

1. Check to see if the field is **Hidden** by going to the [Fields](docId\:XYrLLTZxiE-BV4ZKzEs_g) page and filtering by **Status**.&#x20;
2. Ensure the field existis by searching for it on the [Fields](docId\:XYrLLTZxiE-BV4ZKzEs_g) page.&#x20;


[title] Creating custom fields
[path] ChartHop for Administrators/Managing data/Fields/

Custom fields let you extend ChartHop's data model to capture information that matters to your organization — beyond what's available out of the box. Whether you're tracking certifications, t-shirt sizes, employment classification, or project assignments, custom fields put you in control of what data lives in ChartHop and how it behaves.&#x20;

ChartHop supports a variety of [data types](https://docs.charthop.com/field-data-types) for custom fields, including multiple-choice values, yes/no answers, dates, and [calculations](https://docs.charthop.com/working-with-smart-fields). You can also create text fields that allow you or your employees to answer in-depth questions for use in performance reviews or one-on-one conversations.

Depending on the data sensitivity options you select, you can view your custom data anywhere in ChartHop—such as on the **Data Sheet**, on the **Org Chart**, or in reports. When you create a custom field, you control access to the data at the field level.

Finally, you can organize your fields into [categories](https://docs.charthop.com/working-with-field-categories) so they are easier to work with. For example, you can create a Payroll category that holds any custom fields you have created for payroll information.

To get started, navigate to **Data Model > Fields.**

You'll see all fields in your org — both built-in and custom. Select **Create field&#x20;**&#x69;n the top right to open the field creation dialog.

:::hint{type="info"}
The number of custom fields you can add varies according to your ChartHop package. [Learn more.](https://docs.charthop.com/available-charthop-packages)
:::



![The Create field dialog](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/NPpdXjA2-ah_ffllcS2Zi_screenshot-2024-01-19-at-25618-pm.png)

## Creating a custom field

To add a custom field, complete the following steps: 

1. From the left sidebar, select **Data Model.**
2. From the sub-menu, select **Fields.**
3. On the **Fields** page, select **Create field**.&#x20;
4. In the **Create field** dialog, configure your field. See the field configuration table below for descriptions.
5. Select **Save** to finish adding your custom field. 

### Field configuration

This table describes custom field configuration settings:

| **Setting**           | **Description**                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        | **Example**                                                                                                                            |
| --------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------- |
| Label                 | The field's unique name. <br /><br />Enter a short, descriptive label that reflects the field's intended use. This label displays throughout ChartHop to your users. <br /><br />Field labels cannot begin with numbers. Once you have defined this label, you can easily change it later.                                                                                                                                                                                                                                                                             | Portfolio link<br /><br />Performance Number                                                                                           |
| Field code            | The field's internal code. This code is used for calculations and formulas within ChartHop.<br /><br />The field code is automatically generated. Field codes use only letters and numbers (no spaces or punctuation) and cannot begin with numbers. <br /><br />ChartHop recommends not changing the field code after it has been defined to avoid any potential calculation and report errors.                                                                                                                                                                       | portfoliolink<br /><br />PerformanceNumber                                                                                             |
| Category              | How the field is grouped within ChartHop. This setting enables you to organize your fields by category.  Categories are also used to control access to custom fields. For example, if you assign a custom field to the Personal category, only those with access to the Personal fields can view the data.  [Learn more.](https://docs.charthop.com/working-with-field-categories)<br /><br />You can search for an existing category or enter a new one. When this is left blank, the field is added to the **Uncategorized** category.                               | Recruiting<br /><br />Performance                                                                                                      |
| Description           | (Optional) A short description of the field that describes its intended purpose. This description displays to all users who have access to the field.<br /><br />If you are adding a smart field, be sure to add a description of how it works and what it does. [Learn more.](https://docs.charthop.com/working-with-smart-fields)                                                                                                                                                                                                                                    | This field stores links to the candidate's portfolio.<br /><br />This field stores the number rating given during a performance audit. |
| Data type             | The type of information that the field stores. The data type determines how ChartHop captures and stores information. [Learn more.](https://docs.charthop.com/field-data-types)<br /><br />You can select from the following options:<br />* Single select
* Multiple select
* Numeric scale
* Yes/No
* Short text
* Long text
* Integer number
* Decimal number
* Money
* Percentage
* Date
* Person
* Persons
* File
* Address
* Smart calculation
* Smart bucket                                                                                                    | Short text<br /><br />Percentage                                                                                                       |
| Applies to            | Where in ChartHop the field is used. [Learn more.](https://docs.charthop.com/working-with-applies-to)                                                                                                                                                                                                                                                                                                                                                                                                                                                                  | People<br />People (Time-Tracked)<br />Jobs                                                                                            |
| Display formatting    | How ChartHop displays the field’s values. <br /><br />This setting only affects display formatting throughout ChartHop - it does not change the exact value that is entered and stored. <br /><br />You can select from the following:<br />* **Rounded** - Indicates ChartHop displays values as rounded to the nearest whole number. 
* **Exact numbers** - Indicates ChartHop displays exact values. You can set the number of decimal places to display.<br />This setting displays only for the **Percentage**, **Money**, and **Smart calculation** data types.  | Rounded                                                                                                                                |
| Expire after          | (Optional) The expiration for data added to this field (for example, when developing a form for a dated event).                                                                                                                                                                                                                                                                                                                                                                                                                                                        | Ex: 90 days                                                                                                                            |
| Sensitivity           | The field's sensitivity level. This setting determines who can see and access the field throughout ChartHop. [Learn more.](https://docs.charthop.com/sensitive-data)                                                                                                                                                                                                                                                                                                                                                                                                   | Org Public<br />Personal<br />Manager Only<br />Manager shared<br />Highly sensitive                                                   |
| Enable edit dialog    | Whether users have the ability to edit this field directly from a person or job's profile page.                                                                                                                                                                                                                                                                                                                                                                                                                                                                        |                                                                                                                                        |
| Make the field unique | Whether the field values for this field must be unique. <br /><br />When enabled, ChartHop enforces that the value for this field must be unique (see section below).<br /><br />This setting displays only for fields with **Short text** or **Integer number** data types that apply to **people in jobs**.                                                                                                                                                                                                                                                          |                                                                                                                                        |
| Auto-increment        | Set up the field to automatically assign unique IDs to all Jobs.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       | Configuration instructions                                                                                                             |

## Requiring a custom field value to be unique

In some cases, you may want to use a field to uniquely identify the respondent or employee associated with the data. One example of this is creating a custom field that is used to store a secondary employee ID.

When you mark a custom field as unique, you cannot update that field directly in ChartHop and the field displays as read-only. Unique fields can only be updated through a sync with another system or by doing a spreadsheet upload. This restriction helps enforce the unique value and prevent errors.

Only fields with **Short text** or **Integer number** data types that apply to **people in jobs** can be set as unique.

:::hint{type="info"}
[Packages](https://www.charthop.com/pricing/): Basic | **Standard** | **Premium**

****[﻿﻿Roles:](https://docs.charthop.com/user-roles-and-permissions) Owner | Technical owner
:::




[title] Importing spreadsheet data
[path] ChartHop for Administrators/Managing data/

ChartHop provides apps with which you can sync data from different payroll, equity, and applicant tracking systems (ATS). When your system is not supported or when you want to make bulk updates, you can import a CSV or a Microsoft Excel XLSX file.

### Import spreadsheet data to ChartHop

The following image shows a section of the ChartHop spreadsheet upload process.

![Matching ChartHop fields to spreadsheet columns](https://api.archbee.com/api/optimize/CXAjUAezd9VEEVQBIYmdw/OiqMNasVhGbBVuagpsrr6_spreadsheet-uploader.png "   ")

To import a CSV or Excel file to ChartHop:&#x20;

1. Select **Admin (gear icon)** in the left sidebar, select **Import Spreadsheet data**.
2. On the **Import Spreadsheet data** page, drag your file to the target area.
   1. (Optional) Select **Allow spreadsheet to create new people and jobs** - use if your upload contains new people or jobs. If not checked, only existing people or jobs will be updated.
   2. (Optional) To create new [groups](https://docs.charthop.com/creating-and-managing-groups) in your ChartHop org, select **Allow spreadsheet to create new groups**. Note that this does not include [Job Codes](https://docs.charthop.com/job-codes), or [Bands](https://docs.charthop.com/compensation-bands), which must be created manually in ChartHop.
3. Select **Upload to org**.
4. For any fields in your spreadsheet that weren't automatically matched to a ChartHop field, select a ChartHop field to match to your spreadsheet column. You may need to scroll to see all unmatched fields, which are highlighted in red.&#x20;
5. Once all columns are matched, select **Continue with import** to finish importing data.&#x20;
6. (Optional) When upload is complete, select **View Details** to see a summary.&#x20;

:::hint{type="warning"}
When matching spreadsheet columns with ChartHop fields, select **None of these** to skip a column. Skipped columns are not imported. &#x20;
:::

## Spreadsheet Templates & Guides

From the right side of the page, you can select and download templates of CSVs to use.

### Add new people

Use this guided template to create new people in your org

::File{src="https://api.archbee.com/api/presign/CXAjUAezd9VEEVQBIYmdw/6Re10Us1-O8uh2utgbrv6_add-new-people-template.csv" label="Add new people Template.csv"}

### Update current org

Make changes to existing people and jobs

::File{src="https://api.archbee.com/api/presign/CXAjUAezd9VEEVQBIYmdw/HkhOkZlNR5HLLNxHs6uXi_update-current-org-template.csv" label="Update current org Template.csv"}

### Update org history

Make changes to historical org data

::File{src="https://api.archbee.com/api/presign/CXAjUAezd9VEEVQBIYmdw/EUAE8BzKJCqEqLHF7k5Dx_update-org-history-template.csv" label="Update org history Template.csv"}

### Add or update equity data

Create or make changes to stock grants and vesting schedules

::File{src="https://api.archbee.com/api/presign/CXAjUAezd9VEEVQBIYmdw/ZD-ZOaGYyIdHVBa6amdU7_add-or-update-equity-data-template.csv" label="Add or update equity data Template.csv"}

### Add or update hiring plan

Create or make changes to open roles

::File{src="https://api.archbee.com/api/presign/CXAjUAezd9VEEVQBIYmdw/58E2MjXTvBsj8rL2Ojtb3_add-or-update-hiring-plan-template.csv" label="Add or update hiring plan Template.csv"}

##

## Formatting spreadsheets for import

When you format a spreadsheet file for upload to ChartHop, you should follow a series of guidelines listed in this section below.

### File format for spreadsheet imports&#x20;

When using Microsoft Excel, save files to XLSX, since Excel may corrupt files that are saved to CSV.

When importing a XLSX file, also be sure to do the following:

- Avoid empty columns.&#x20;
- Enter complete job titles in any file to be uploaded (for example, "Senior Vice President" instead of "SVP"). ChartHop intelligently abbreviates titles in the org chart depending on how much screen space is available.&#x20;
- Use the same kind of data in all similar fields. For example, use an email address in the Manager column if using Work email as the identifier for the employee.

Also note that columns are case insensitive and ignore spaces. For example, a column named "Base Comp" is the same thing as a column named "basecomp".

:::hint{type="info"}
You must include the country code as a part of any international number for it to be recognized as such within ChartHop. When you are syncing phone numbers from an external system, such as a payroll system or ATS, be sure the country code is included in the phone number that is listed in the external system. This also applies when updating data through a spreadsheet.
:::

### Identifiers for spreadsheet imports

When you add information to ChartHop, you need to tell it which job or person the data belongs to. ChartHop uses the first column in a spreadsheet as the identifier, and it usually prefers that to be a person's **Work email**. You can also create your own unique identifier using a custom field. [Learn more](https://docs.charthop.com/create-a-custom-field).

:::hint{type="info"}
You can export existing employee data from the **Data Sheet** as a CSV file to use as a spreadsheet template for your changes. Once you are done editing that CSV file, you can import it back into ChartHop. [Learn more](https://docs.charthop.com/exporting-data-from-the-data-sheet).
:::

:::hint{type="info"}
ChartHop Standard and Premium customers can add custom fields. If you are importing data to a custom field, be sure to first add the field to ChartHop. [Learn more](https://docs.charthop.com/working-with-custom-fields).
:::

:::hint{type="info"}
[Modules:](https://www.charthop.com/pricing/) HRIS | Engagement | Goals | Performance | Compensation Reviews | Headcount Planning
:::

:::hint{type="info"}
﻿﻿[Roles](https://docs.charthop.com/user-roles-and-permissions): Owner | Org editor
:::

[title] Custom Groups
[path] ChartHop for Administrators/Managing groups/

![](https://api.archbee.com/api/optimize/CXAjUAezd9VEEVQBIYmdw/E3PsNs6x3_0-3mdv0CDdD_image.png "Custom Group view in Org Chart")

**Custom Groups** is a feature which allows you to create different **Group Types** and **Groups** within them, including setting up a hierarchy to display on the **Group Org Chart**. **Custom Groups** can also be referred to as **Matrix Teams** in ChartHop marketing and promotion materials.

Matrix Teams capabilities in ChartHop are full of features to help you manage, understand, and plan your teams over time - giving you and everyone in your org easy-to-understand views of how you work. These features include:

- **Define as many groups as needed.** No one-size-fits-all. Create whatever teams, squads, pods, or groups make sense for your org.
- **Create different structures for different needs.** Some groups are flat (like ERGs), others are structured (like a Product Line with nested Pods).
- **Visualize like an org chart — but different.** Instead of reporting lines, see who's a part of each group, how those groups connect and roll up in your org, and if groups are lacking critical membership or positions.
- **Create custom positions/roles within each group.** For example, ERGs might need to have Lead, Co-lead, and Executive Sponsor positions, while Product Pods might need to have Lead PM, Lead Designer, Lead Developer, Lead Support, and Lead Marketer.
- **Leverage granular access controls.** Set who can see and who can modify each group.
- **Share with teams.** You can now share [Resources](https://docs.charthop.com/JXOt-resources#SY7Fl), [Dashboards](https://docs.charthop.com/sharing-a-dashboard), [Data Sheets](https://docs.charthop.com/creating-data-sheet-views#ykcoX), and more by choosing the team itself — not just individuals.
- **Track membership history over time.** ChartHop tracks when someone joined or left a group, or when groups started or came to a close — critical for context and institutional memory.
- **Full analytics support.** Use Matrix Teams in Dashboards — whether as dimensions ("headcount by Product Pod") or filters ("sales by Regional Team").
- **ChartHop AI understands your teams immediately.** As soon as a team is created, AI can incorporate it into insights, org analysis, and more.

The following pages will walk you through setting up new Group Types, the Groups within them, and controlling visibility of each Group Type.

1. [Creating Group Types](https://docs.charthop.com/creating-a-new-group-type): How to create a new Group Type and its associated Positions.
2. [Creating Groups](https://docs.charthop.com/creating-groups): How to create Groups within a Group Type
3. **Visibility of Groups**: How sharing and visibility works for Groups

[title] Requiring fields when opening jobs
[path] ChartHop for Administrators/Managing data/Fields/

With required fields, you can guarantee that your jobs are entered consistently and synced correctly by requiring certain fields. You can make certain fields required when creating or modifying a job in your ChartHop organization.

When you mark a field as Required, the field must be filled when you create a job. If your new job doesn't contain the field, you are prevented from creating the job. You can enforce required fields when new jobs are created.

Once marking a field as Required, when opening up the Job dialog, a red asterisk will appear next to the required field.&#x20;

:::hint{type="danger"}
Required fields are not enforced for app syncs (e.g., payroll syncs or custom apps) and spreadsheet imports.
:::

### Required fields for ATS syncs

If you are working with an ATS system, you'll want to be sure that any fields that are used in both your ATS and ChartHop and are marked required in one system are also required in other. This prevents sync errors between ChartHop and your ATS.


[title] Sync notifications
[path] ChartHop for Administrators/Managing data/Sync history/

On a per app basis, you are able to add people who will receive email notifications about the sync.&#x20;

These notifications will not send for ever sync, but will *only* send if a sync actually makes updates and changes data.&#x20;



To add people to receive notifications:

1. From the left sidebar, select **Data Apps and Bundle.**
2. From the sub-menu, select **Apps.**
3. Select the app you would like notifications for.
4. Find the box that says: **Email notifications** or **Send Notification Email To.**
5. Add the users who you would like to notify. &#x20;

![](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/K5O4ZpluRyDxcmpq-MJUf_screenshot-2024-06-27-at-112435-am.png)


[title] Work Anniversary announcements
[path] Implementing ChartHop/ChartHop bundles/

You can install the Work Anniversary announcements bundle to have anniversary announcements automatically sent to the email address or Slack channel you configure.

Birthday and work anniversary announcements are included on the ChartHop home page automatically.

:::hint{type="info"}
To enable sending announcements to Slack, you must install the Slack app. [Learn more.](https://docs.charthop.com/slack)



ChartHop Basic customers can enable/disable birthday and anniversary announcements but cannot edit their configuration. [Learn more.](https://docs.charthop.com/birthday-announcements#1CUQW)
:::

### Install the Work Anniversary announcements bundle

Bundles are packages of additional features with pre-made forms, additional fields, and ChartHop notifications (depending on the bundle).

To install the Work Anniversary announcements bundle:

1. From the left sidebar, select **Apps & Bundles**.
2. From the sub-menu, select **Bundles**.
3. Select the **Availible Bundles** tab.&#x20;
4. Scroll to th&#x65;**&#x20;Work Anniversary announcements** bundle.
5. Click **Install** on the far right-hand side of the table.

### Configure Work Anniversary announcements

You can set up Work anniversary announcements by configuring the ChartHop action installed when you installed the Work Anniversary announcements bundle.

You can customize when the announcement is sent, as well as which Slack channel to use when sending announcements. You can also choose to send the announcement to a specific email or DM the person or person's manager with the work anniversary announcement.

For example, you can set up an email to be sent to the HR team's email alias one week (`anniversary=today-7`) before the employee's anniversary.

You can use ChartHop's Carrot language in custom filters. [Learn more.](https://docs.charthop.com/carrot-reference)

::Image[]{alt="Customize anniversary announcements" src="https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/3hbFF_C4dfLojh7OEWPGC_anniversary-example.png" size="50" width="772" height="869" position="flex-start" showCaption="false"}

Separate announcements are sent for each employee's work anniversary according to the parameters you set.&#x20;

You can edit the default template. Here's how the default template looks in Slack:

![Default template that you can edit](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/RcVBWSxau1rhHFk1-XZrb_work-anniversary-example-slack.png)

To configure anniversary announcements:

1. From the left sidebar, select **People Ops Tools**.
2. From the sub-menu, select **Automated** **Actions**.
3. Select Edit from the row menu (⋮) on the left side of the Work Anniversary announcements row.
4. In the Edit dialog, use the **Text&#x20;**&#x66;ield to customize the information included in the announcement.&#x20;
5. Choose from the following options to customize how you want the announcements sent:
   - To use Slack, select **Chat Channel&#x20;**&#x61;nd then enter the name of the Slack channel where you want to send the announcements. Be sure that the channel name starts with #. By default, it is set to send to the #general channel
   - To send to a particular email address, select **Email address** and enter the email address where you want to send the announcement.
   - To send to the person, select **Person**. The announcement is sent in a direct Slack message to the employee. If they are not connected to Slack, it sends an email.
   - To send to the person's manager, select **Person's manager**. The announcement is sent in a direct Slack message to the person's manager. If they are not connected to Slack, it sends an email.
6. Select **Save**.

### Testing anniversary announcements

You can test how your anniversary announcements look and where they are sent.

1. From the left sidebar, select **People Ops Tools**.
2. From the sub-menu, select **Automated** **Actions**.
3. Select Run… from the row menu (⋮) on the left side of the Birthday announcements row.
4. In the Run action dialog, select a person to send an announcement to. This person can verify if they receive the announcement as expected.
5. Select **Run**. The announcement is sent immediately to the person you selected.

### Disabling announcements

You can disable announcements at any time.&#x20;

1. From the left sidebar, select **People Ops Tools**.
2. From the sub-menu, select **Automated** **Actions**.
3. Move the slider in the **Active** column to the grayed out position.&#x20;

::Image[]{alt="Disable an announcement action" src="https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/44h8230JyC4b6uza3iRv__anniversary-disable.png" size="50" width="736" height="342" position="flex-start" showCaption="false"}



:::hint{type="info"}
[Packages](https://www.charthop.com/pricing/)**:&#x20;**<font color="#a9a9a9">Basic</font> <font color="#000000">|</font> <font color="#000000">**Headcount Planning** | </font><font color="#000000">**Compensation Reviews** | </font><font color="#000000">**Performance** | </font><font color="#000000">**Engagement** </font>
:::

:::hint{type="info"}
﻿﻿[Roles](https://docs.charthop.com/user-roles-and-permissions): Technical owner | Owner&#x20;
:::


[title] Equity syncs
[path] Implementing ChartHop/Apps & Integrations/

The quickest way to add your employee equity data to ChartHop is to create a sync with your Equity  system through a ChartHop equity app. This imports all your employees’ stock options into your ChartHop org chart and keeps them up to date on a cadence of your choice: either on demand or once per week.

## How data migrates between ChartHop and an equity system

ChartHop's equity apps sync *inbound&#x20;*&#x66;rom the equity management system to ChartHop, so the equity provider remains the source of truth on equity data while ChartHop always contains your latest employee equity. 



![](https://lh3.googleusercontent.com/A6kjsb2bkH4DHkDGrdTGfbnKIJ3o0SMEM858I40Z3gLxfFjMCSKKt8BhqKEos8C6hMX-FTwwWwzT_mCZaByi1oOowB0-smSSEEkcdbpZX8TeqWkXVvanJo0C-EWsCLeAPbdaztAHN-wTI_qoLqiAIOw)

Equity apps sync equity data one-way from the equity system to ChartHop.

Since the sync is one-way, if you make changes to ChartHop data that originates from your equity system, those changes are overwritten on the next sync.

Data typically synced from your equity system includes:

- Grant Issue Date
- Grant Vest Date
- Grant Cancel Date
- Grant ID
- Grant Type
- Grant Shares
- Grant Price
- Grant Vesting Schedule

## Supported grant types

ChartHop supports several grant types which are available from the **Planned Grant Type** field in the Job dialog when creating and modifying jobs.&#x20;

Supported grant types:

- Incentive Stock Option (ISO)
- Non-qualified Stock Option (NSO)
- Restricted Stock (RSU)
- Stock Appreciation Rights (SAR)
- Performance Shares
- Phantom Stock

## Grant vesting schedule support

ChartHop's equity apps can help you with special vesting schedules for stock grants. When you sync with ChartHop and provide the right kind of schedule, it can calculate how the grants will vest for your employees&#x20;
over time. [Learn more](https://docs.charthop.com/add-or-update-equity-data).

You can view vesting schedules for individual employees in your ChartHop organization by checking the **Equity tab** on the employee’s profile page.

:::hint{type="info"}
[Modules:](https://www.charthop.com/pricing/) <font color="#000000">**HRIS |** </font>**Engagement | Goals | Performance |&#x20;**<font color="#000000">**Compensation Reviews |** </font>**Headcount Planning**
:::

:::hint{type="info"}
﻿﻿[Roles](https://docs.charthop.com/user-roles-and-permissions): Technical owner | Owner&#x20;
:::


[title] Using Greenhouse to open jobs
[path] Implementing ChartHop/Apps & Integrations/Applicant tracking systems/Greenhouse/Untitled/

In an inbound job data flow, Greenhouse open job data flows to ChartHop.

### Job status migration

Greenhouse jobs/openings migrate to ChartHop if the Opening status is set to **Open**. As a result, any changes to open roles in ChartHop are not reflected in Greenhouse.

For example, if a mapped Greenhouse role is changed to *Closed* and the department is updated, the job in ChartHop updates to an **Inactive** status and the department in ChartHop is updated.

:::hint{type="info"}
If multiple Hiring Managers or Recruiters are specified in Greenhouse, ChartHop takes the **first** one specified.
:::

The following table describes how the Greenhouse integration handles its response to changes in a Greenhouse job and opening status. This assumes that the Greenhouse job is not yet mapped to an existing ChartHop job:

| **Greenhouse Job Status** | **Greenhouse Opening Status** | **ChartHop Result**  |
| ------------------------- | ----------------------------- | -------------------- |
| Open                      | Open                          | Created as Active    |
| Open                      | Closed                        | Nothing gets created |
| Draft                     | Open                          | Created as Active    |
| Draft                     | Closed                        | Nothing gets created |
| Close                     | Closed (open is not possible) | Nothing gets created |

:::hint{type="info"}
 It’s important to note that inbound job data flows only pull in **Openings with a status of Open&#x20;**&#x66;rom your ATS into ChartHop.
:::

Open roles must have a Hiring Manager set in Greenhouse, which will be referenced in Charthop as both the manager and hiring manager. Open roles without a manager set in Greenhouse do not migrate over. Additionally, while a recruiter is not required in Greenhouse, if a recruiter is set in Greenhouse and the recruiter does not exist in ChartHop, the jobs also do not sync over.

### Job status mappings

Greenhouse communicates its hiring status to ChartHop using the following mappings:

| **Greenhouse Opening Status**  | **Data flow** | **ChartHop Status** |
| ------------------------------ | ------------- | ------------------- |
| Open                           | →             | Active              |
| Closed                         | →             | Inactive            |


[title] Hiring candidates
[path] Implementing ChartHop/Apps & Integrations/Applicant tracking systems/Greenhouse/

Once you hire a candidate in Greenhouse, a new hire is automatically created in ChartHop to fill the mapped job in Greenhouse. 

The new hire data flow triggers whenever an individual is marked as **Hired** in Greenhouse. The action fires a webhook to ChartHop, which provides ChartHop with the necessary information to pull in the pending hire. [Learn more](https://docs.charthop.com/setting-up-the-greenhouse-integration#iNhqi).

:::hint{type="info"}
The webhook must be set up in Greenhouse first. If you need help setting up the webhook for, please contact your ChartHop implementation specialist. 
:::

To hire an individual in Greenhouse:

1. Navigate to **Candidates.**
2. Select **Offer Details**.
3. Select **Job**.
4. Set Mark Candidate as **Hired**.

The Greenhouse Job ID (*greenhouseId*) is used to map the Greenhouse Opening with the corresponding job in ChartHop. 

If you notice that a job in ChartHop has not switched to **Pending** after the mapped Greenhouse Opening is hired into, you can manually add the new hire into ChartHop. 

:::hint{type="info"}
Once the new hire is added to the HRIS system, the new hire information coming from the payroll system matches with and updates the pending new hire that is created in ChartHop from the new hire data flow.
:::

## Set new hire announce dates

When candidates are hired and they are created in ChartHop, you have a choice about when you want them to show up publically to your organization

Under the option **New Hire Webhook Announce Date&#x20;**&#x73;elect one of the following:

- **Start date** - The new hire will not be org public until their start date.&#x20;
- **Today** - The new hire will be displayed immediately on the day of the sync
- **Earlier of start date and today (Default)**


[title] Update your organization history
[path] ChartHop for Administrators/Managing data/Importing spreadsheet data/

You can import a CSV or spreadsheet file to make changes to historical data such as promotion history, hire and departure history, and performance review history. Ensure that the data in your file conforms to ChartHop's [formatting requirements](https://docs.charthop.com/importing-spreadsheet-data).&#x20;

To upload historical data to ChartHop, complete the following steps:&#x20;

1. In the left sidebar, select the **Admin** menu (gear icon), then select **Import Spreadsheet data**.
2. On the right side of the page, select **Update org history**.&#x20;
3. Select **Download template**. A CSV template downloads to your computer.
4. Add your data to the CSV template, including any optional columns.&#x20;
5. Save the template under a new name.
6. On the **Upload your spreadsheet** page, drag the template to the target area.
7. (Optional) To create new [groups](https://docs.charthop.com/creating-and-managing-groups) in your ChartHop org, select **Allow spreadsheet to create new groups**. Note that this does not include [Job Codes](https://docs.charthop.com/job-codes), or [Bands](https://docs.charthop.com/compensation-bands), which must be created manually.
8. Select **Upload to org**.
9. For any fields in your spreadsheet that weren’t automatically matched to a ChartHop field, select a ChartHop field to match to your spreadsheet column. You may need to scroll to see all unmatched fields, which are highlighted in red.&#x20;
10. Once all columns are matched, select **Continue with import** to finish importing data.&#x20;
11. (Optional) When upload is complete, select **View Details** to see a summary.&#x20;

:::hint{type="warning"}
When matching spreadsheet columns with ChartHop fields, select **None of these** to skip a column. Skipped columns are not imported. &#x20;
:::

### Required columns

| **Column** | **Description**                                          | **Example**               |
| ---------- | -------------------------------------------------------- | ------------------------- |
| Work Email | Employee's work email address; must be the first column. | `joan.smith@charthop.com` |
| Date       | Date in the past when the update would have occurred.    | `10/16/21`                |

### Example update

The following table shows an example update where you change the job title and salary for two employees:

| **Work email**             | **Date**   | **Job Title**            | **Base** |
| -------------------------- | ---------- | ------------------------ | -------- |
| john.smith\@example.com    | 06/05/2017 | Customer Success Manager | $100,000 |
| wendy.carlson\@example.com | 08/05/2019 | Engineer                 | $140,000 |



:::hint{type="info"}
[Modules:](https://www.charthop.com/pricing/) <font color="#000000">**HRIS |** </font>**Engagement | Goals | Performance |&#x20;**<font color="#000000">**Compensation Reviews |** </font>**Headcount Planning**
:::

:::hint{type="info"}
[Roles](https://docs.charthop.com/user-roles-and-permissions): Owner | Org editor
:::


[title] Create a scenario
[path] ChartHop for Administrators/Planning/Scenarios/

ChartHop gives you the ability to create different types of scenarios for the changes you’re proposing to your organization.&#x20;

Any employee can create a scenario and edit scenarios shared with them. The data they see is governed by their access role. For example, if someone has the Employee role and is a manager they will be able to see the compensation for their direct reports. If they do not have a role that allows them to see compensation, no compensation data is shown.

Keep in mind that a scenario is private to the user who creates it until they share it.&#x20;

:::hint{type="warning"}
When you assign the **full data access** permissions to someone, you give them full access to all the changes to data in the scenario, which could potentially include sensitive information (such as compensation) depending on your ChartHop access role. ChartHop recommends only assigning those permissions to individuals who regularly have access to highly sensitive information. [Learn more.](https://docs.charthop.com/collaborating-in-a-scenario)
:::

To create a scenario:

1. From the left sidebar, select Planning.
2. Select Create Scenario.
3. Select the type of scenario you want to create: &#x20;

   - **Simple Workflows&#x20;**- Simple workflows are guided workflows for a change to a singular person or job.&#x20;
     - **Create Job** - Create a new job
       &#x9;*Data Required:* Manager, Title
     - **Update Job** - Choose from a dropdown menu of existing and open jobs (active and inactive) to edit&#x20;
       &#x9;*Data Required:* A change must be made to any filled-in fields, fill in an empty field, or remove a value from a field.
     - **Terminate job** (with or without a backfill) - Terminate a job, set termination reasons, and determine and edit backfill details.
       &#x9;*Data Required:* Termination date, announce date, choose backfill or not

   - **Other Scenario Types**&#x20;
     - **Promotion Planning**- Use this type to propose title and promotion changes in an organization. When you use this scenario type, the scenario automatically generates blank change fields for the group of people you indicate in the Planning for the field.
     - **Budget Scenario** - Plan with a budget to meet a set budget. This scenario type is only available to the following roles: Cash Compensation Viewer, Equity Compensation Viewer, Compensation Viewer, Org Editor, People Ops Admin, and Owner.
     - **Custom Scenario** - Propose multiple organization changes (for example, hiring and reorganization).

4. In the New Scenario dialog, enter information about your scenario:
   **Scenario name** - The name of the scenario (for example, Q4 Hiring Plan).
   **Start date** - The date when the changes proposed in the scenario are intended to go into effect. This can be either the current date or an exact date.
   **Planning for** - Filter to display the group of people whose roles you're editing. This field displays only when you select the Promotion Planning scenario types.
   **Description** - A description of the scenario.
5. Select Create.


### Copy a scenario

As a scenario owner, you can copy one of your other scenarios, including all of its changes, when you want to create an exact copy to customize further.  

You can copy scenarios that are currently In Progress and Archived. You can’t copy scenarios that have already been merged.



![](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/Re6GdlBRuXIU95uHKQ50W_image.png)

To copy a scenario:

1. From the left sidebar, select **Planning**.
2. Select **Create Scenario**.
3. Navigate to the scenario you want to copy.
   - Depending on the scenario status, it may be located on the **In Progress** or **Archived** tabs.
4. Select the checkbox next to the scenario you want to copy.
5. In the menu that displays above the Scenarios list, select **Copy**. 
6. Enter the Scenario name, Start date, Scenario type, and Description for the copied scenario. 
7. Select **Create**.&#x20;
   - A copy of the scenario is created.
   - If you are copying a **Simple Workflow Scenario**, the copy will be saved as a **Custom Scenario**.

:::hint{type="info"}
When you copy a scenario, sharing permissions are not copied over to the new scenario. If you’re collaborating with others in the scenario, you’ll have to re-share the scenario and establish new scenario permissions. [Learn more.](https://docs.charthop.com/collaborating-in-a-scenario)
:::

:::hint{type="info"}
[Packages](https://www.charthop.com/pricing/)**:&#x20;**<font color="#a9a9a9">Basic</font> <font color="#000000">|</font> <font color="#000000">**Headcount Planning** | </font><font color="#000000">**Compensation Reviews** | </font><font color="#000000">**Performance** | </font><font color="#000000">**Engagement** </font>
:::


[title] Reviewing an approval request for a scenario
[path] ChartHop for Administrators/Planning/Scenarios/

As an approver for scenarios, you have the ability to approve or reject the proposed changes within a scenario:

- When you approve a scenario, you give the go-ahead for the changes in the scenario to be merged to your primary organization.
- When you reject a scenario, you send the scenario back to the requester with constructive feedback for additional edits and changes.

You receive an email notification when someone requests your approval for a scenario as well as a Tasks in the **My Tasks&#x20;**&#x73;ection of your ChartHop home page.

![Review a scenario](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/HHbGGcZEbsnvQwf1ugF5R_reviewapprove.png "   ")

To review a scenario:

1. From the **My Tasks&#x20;**&#x73;ection of the ChartHop home page or the email notification, select the **Review scenario** action for the scenario you want to review.
2. Review the changes proposed within the scenario. 
   - The **Changes** tab displays a summary of all changes, including any new jobs or changes to compensation and headcount.
   - The cost summary at the top of the scenario indicates the total cost of all the proposed changes.
   - You can also visualize the proposed changes using the **Org Chart**, **Data Sheet**, **Map**, and **Impact** tabs. Each of these tabs displays your organization as it would appear were the proposed changes to be enabled and put into effect.
3. Once you are done reviewing, you can either approve or reject the scenario (see below).

::::ExpandableHeading
### Approve the scenario

After you are done reviewing, you can give your approval to the proposed scenario.&#x20;

To approve a scenario:

1. Select **Approve scenario&#x20;**&#x69;n the banner at the top of the scenario screen.
2. In the **Approve scenario** dialog, enter an approval comment.
   - Any comments you enter are added to the **Comments** section at the bottom of the scenario.
3. Select **Approve**.
   - ChartHop sends an email notification that you have approved the scenario.
   - When applicable, the scenario is sent to the next approver in the approval process.
   - Once the scenario is fully approved, ChartHop also sends an email notification to people with the ability to merge the scenario to primary that the scenario has been approved and is ready to be merged. [Learn more.](https://docs.charthop.com/merging-a-scenario)

:::hint{type="info"}
If the proposer makes any changes to the scenario after you have given your approval, then the approval is rescinded and the scenario changes to a status of **Open**. The proposer must resubmit the scenario again to you for approval.
:::
::::

:::ExpandableHeading
### Reject the scenario

After you are done reviewing, you can choose to reject the proposed scenario.



To return the scenario to the proposer for additional editing or changes:

1. Select **Reject&#x20;**&#x69;n the banner at the top of the scenario screen.
2. In the **Reject scenario** dialog, enter a reason for sending the scenario back to the proposer.
   - You can include a comment with feedback for additional edits or suggested revisions for the proposer.
   - Any comments you enter are added to the **Comments** section at the bottom of the scenario.
3. Select **Reject**.
   - ChartHop sends an email notification that you have rejected the scenario.
:::

### Withdraw approval for a scenario

If you change your mind about an approval, you have the ability to withdraw your approval. You can only withdraw your approval for approved scenarios that have not been merged yet.

To withdraw your approval:

1. Access the scenario with the approval you want to withdraw. The scenario should have a status of **Approved**.
2. In the banner at the top of the screen, select **Withdraw approval**.
3. Enter a reason for withdrawing the approval. 
   - Any comments you enter are added to the **Comments** section at the bottom of the scenario.
4. Select **Withdraw**.
   - The status of the scenario changes from **Approved** to **Open**.
   - ChartHop sends an email notification that the approval has been withdrawn.

:::hint{type="info"}
[Packages](https://www.charthop.com/pricing/)**:&#x20;**<font color="#a9a9a9">Basic</font> <font color="#000000">|</font> <font color="#000000">**Headcount Planning** | </font><font color="#000000">**Compensation Reviews** | </font><font color="#000000">**Performance** | </font><font color="#000000">**Engagement** </font>
:::

:::hint{type="info"}
[Roles:](https://docs.charthop.com/user-roles-and-permissions) Recruiting editor | Owner | Technical owner
:::


[title] Job codes
[path] ChartHop for Administrators/Managing groups/

Job codes give you a way to group, label, and track roles in ChartHop. They serve two distinct purposes, and you may use one or both depending on how your organization is set up.

## Using job codes as a grouping tool

Job codes let you define a catalog of roles for your organization. Each job code has a name, a short identifier, an optional description, and a color used to represent that code on the org chart. Once created, job codes can be assigned to jobs to categorize and group them across your org.

For instructions on building out your catalog, see:

- [Creating job codes](https://docs.charthop.com/creating-job-codes)
- [Editing job codes](https://docs.charthop.com/editing-job-codes)

## Using job codes as integration matching keys

Job codes can also serve as matching keys that link open jobs in ChartHop to corresponding records in your payroll system or ATS. When a payroll sync runs, ChartHop uses the code value on an open job to find the right record and populate it with new hire data automatically, without duplicating jobs.

This workflow requires some initial setup with ChartHop's implementation team. For details, see:

- [Job matching for payroll syncs](https://docs.charthop.com/job-matching-for-payroll-syncs)
- [Using a job matching field](https://docs.charthop.com/using-a-job-matching-field)

:::hint{type="info"}
[Modules:](https://www.charthop.com/pricing/) **HRIS | Engagement | Goals | Performance | Compensation Reviews | Headcount Planning**
:::


[title] Dashboards
[path] ChartHop for Administrators/

Users can create custom dashboards to analyze various aspects of your organization's data. 

When you create a dashboards, you leverage the data you collect using the built-in and custom fields you use in ChartHop. For example, you can create dashboards to analyze responses to your employee surveys, evaluate compensation metrics, visualize the performance ratings for a department, and so much more. 

Each dashboards is made up of one or more *charts*. Charts display specific data measures in the chart type format you select (for example, in a Line chart over time or in a Pie chart). Charts can be filtered and configured independently from the settings used in an overall dashboard. 

You can create dashboards to be private, shared with the entire organization, or shared only with those who have access to highly sensitive data. 

To access dashboards, select **Dashboards** from the left sidebar.

:::hint{type="info"}
ChartHop Basic users cannot create custom dashboards and only have access to the following pre-built charts: 

- Headcount over time
- Headcount by location
- Headcount by gender
- Headcount by department
:::

:::hint{type="info"}
[Packages](https://www.charthop.com/pricing/)**:&#x20;**<font color="#a9a9a9">Basic</font> <font color="#000000">|</font> <font color="#000000">**Headcount Planning** | </font><font color="#000000">**Compensation Reviews** | </font><font color="#000000">**Performance** | </font><font color="#000000">**Engagement** </font>
:::








[title] Importing changes into a scenario
[path] ChartHop for Administrators/Planning/Scenarios/Propose changes in a scenario/

Instead of manually making your proposed changes within the **Org Chart** or the **Data Sheet** tabs of your scenario, you can also import potential changes into your scenario using a .csv upload. [Learn more.](https://docs.charthop.com/importing-spreadsheet-data)

:::hint{type="info"}
You cannot import new people or create new groups or departments within a scenario. Those must first be added to your primary organization.
:::

![Upload CSV to Scenario](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/1nZrCWc3DrfFT9SQbUwjw_scenarioupload.png "  ")

### Types of changes you can import to a scenario

You can import the following types of data into your scenario:

| **Type of data** | **Description**                                                                                                                                                                                             | **Requirements**                                                                                           |
| ---------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------- |
| Update People    | Use this option when you’re updating specific data about people (for example, when you are reorganizing people and need to change their departments).                                                       | The following column must be included in your .csv:<br />* Name, email, or other employee identifier&#x20; |
| Historical Data  | Use this option to update historical data within your ChartHop organization (for example, start dates).                                                                                                     | The following column must be included in your .csv:<br />* Name, email, or other employee identifier&#x20; |
| Employee Roster  | Use this option to import an employee roster for existing employees. <br /><br />Please note that you cannot add new people using this option. New people must first be added to your primary organization. | The following columns must be included in your .csv:<br />* Name
* Title
* Start Date
* Manager            |
| Hiring Plan      | Use this option to upload your hiring plan (for example, new roles you will be proposing).                                                                                                                  | The following columns must be included in your .csv:<br />* Title
* Start Date
* Manager                   |

### Import changes into a scenario

To import changes into a scenario using a .csv upload:

1. In your scenario, select the **Actions&#x20;**▼ dropdown menu.
2. Select **Import CSV**. 
3. Select the type of changes you are uploading. The following options are available:
   - **Update People**
   - **Historical Data**
   - **Import Employee Roster**
   - **Hiring Plan**
4. Browse for and select your .csv file.
5. Select **Upload**.

:::hint{type="info"}
[Packages](https://www.charthop.com/pricing/)**:&#x20;**<font color="#a9a9a9">Basic</font> <font color="#000000">|</font> <font color="#000000">**Headcount Planning** | </font><font color="#000000">**Compensation Reviews** | </font><font color="#000000">**Performance** | </font><font color="#000000">**Engagement** </font>
:::

:::hint{type="info"}
[Roles:](https://docs.charthop.com/user-roles-and-permissions) Recruiting editor | Owner | Technical owner
:::


[title] Edit jobs from the Changes tab
[path] ChartHop for Administrators/Planning/Headcount planning/Editing jobs in a scenario/

***

Use the **Changes&#x20;**&#x74;ab to edit a job that you have previously added or changed in your headcount planning scenario.

![Edit a job directly from the Changes tab.](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/5-SpgkSS2FIWSVDwizdq4_hpedit-change.jpg "    ")

### Edit a job from the Changes list

You can edit a specific job field directly from the list.&#x20;

To make edits in the table:

1. Select a cell.
2. Enter a new value or use the dropdown list to select from available options.
3. Press Enter or select outside the cell to save your edits.

### Edit a job from the action menu

When you have to make more extensive edits to a job, you can access the **Edit job&#x20;**&#x64;ialog from the action menu.

To edit a job from the action menu:

1. Open the action menu at the left side of the row of data you wish to edit.
2. Select **Edit job**. The **Edit job** dialog displays.
3. Make your edits in the **Edit job** dialog.
4. Select **Save to Scenario**.

:::hint{type="info"}
[Packages](https://www.charthop.com/pricing/)**:&#x20;**<font color="#a9a9a9">Basic</font> <font color="#000000">|</font> <font color="#000000">**Headcount Planning** | </font><font color="#000000">**Compensation Reviews** | </font><font color="#000000">**Performance** | </font><font color="#000000">**Engagement** </font>
:::


[title] Using the Compensation bands wizard
[path] ChartHop for Administrators/Planning/Compensation bands/

When you configure your compensation bands in ChartHop, you use a wizard that allows ChartHop to provide you with a custom spreadsheet template that you can then use to upload your compensation band information. The answers you provide allow ChartHop to create your bands and identify how they map to your organizational structure, including target pay, currency, location multipliers, and so on. 

Once you have completed the wizard, you can download a spreadsheet that matches your exact requirements and fill in the values you need, including target pay, job levels, and locations/multipliers. Uploading the spreadsheet and cleaning up any data is the final step.

:::hint{type="info"}
Only users with the Owner or Org editor role can access the Compensation bands wizard.
:::

To create compensation bands:

1. From the left sidebar, select **Data Model**
2. From the sub-menu, select Job Architecture > **Compensation Bands**.
3. Select **Let's Get Started&#x20;**&#x74;o view the setup questionnaire.
4. Complete the questionnaire.
   - You can navigate forward or backward to update your answers.&#x20;
   - Compensation band tiers are based on built-in or custom fields (for example, Department ).&#x20;
   - If you don't have the field you need, you can select **Add a new field** to create a new custom field to use as a compensation band tier.
   - When you're finished, a table displays a preview of all the columns that are included in your spreadsheet.&#x20;
5. Select **Download** to download the customized spreadsheet.
6. Complete the spreadsheet with your compensation data. [Learn more.](https://docs.charthop.com/complete-your-bands-spreadsheet)
7. When you are ready to upload, return to the **Compensation bands** section to upload your spreadsheet and select **Next step**.
8. Use the **Tidy up your data** page to review and correct any mistakes in your data. Then select **Next step**.
9. Select **Save**.
10. Choose a date when you want your bands to be effective. Assigning an effective date helps you track the history of your compensation bands as your organization grows.&#x20;
11. Select **Save**. Any warnings/errors that may have occurred display on this screen.
12. (Optional) Select **View pay bands** to view your bands or select **Map your jobs to bands** to begin mapping your bands to your existing jobs. [Learn more](https://docs.charthop.com/connecting-bands-to-jobs).

:::hint{type="info"}
[Packages](https://www.charthop.com/pricing/)**:&#x20;**<font color="#a9a9a9">Basic</font> <font color="#000000">|</font> <font color="#000000">**Standard*** | **Premium**</font>****

\* Available as an add-on
:::

﻿﻿[Roles](https://docs.charthop.com/user-roles-and-permissions): Owner | Org editor



[title] Editing job codes
[path] ChartHop for Administrators/Managing groups/Job codes/

You can edit job codes directly in the job codes table in your ChartHop organization.

:::hint{type="danger"}
Be aware that changing the name or the code of a job code can result in disruptions to the data syncs in the remote systems that rely on them.
:::

![Editing a job code value](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/GnkyG2J1LqNlL7oCjeGFo_editing-job-code.png)

To edit a job code:

1. From the **Data Model** option in the left navigation bar, select **Job Codes**.
2. Click into any field in the table to edit it inline.
3. When you are done making changes, select **Save** at the top of the table.

:::hint{type="info"}
[Modules:](https://www.charthop.com/pricing/) **HRIS | Engagement | Goals | Performance | Compensation Reviews | Headcount Planning**
:::

## Related articles

- [Creating job codes](https://docs.charthop.com/creating-job-codes)
- [Job matching for payroll syncs](https://docs.charthop.com/job-matching-for-payroll-syncs) - Understand why code values matter for payroll and ATS syncs before renaming or changing them.

[title] Chart types
[path] ChartHop for Administrators/Dashboards/

# Types of charts you can add to a dashboard

You can add the following types of charts to your dashboards:



- **Headers**
- **Timeseries** - These types of charts depict data over a period of time.
  - Area chart
  - Line chart
  - Table
  - Vertical stacked bar chart
- **Non-Timeseries** - These types of charts depict data at a specific point in time.
  - Single metric chart
  - Horizontal bar chart
  - Pie chart
  - Table
  - Vertical bar chart

### Create a header to separate dashboard sections

You can use headers to separate charts in your dashboard.&#x20;

Learn more about them [here](https://tella.video/melissas-video-b0qt). 

![](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/vHrJtItkbR4kXLzK2FHe0_image.png)

### Area chart

You can use an area chart to depict changes in a data measure over time.

In an area chart, the **Y-axis** is set to a measure you choose from your built-in and custom fields. The **X-axis** is set to the time period you choose in the global filters. In the **Group by** dropdown, you can add an additional dimension to the chart (for example, group by department) for further comparison.

![](https://lh7-us.googleusercontent.com/xOuS5uZHPlyJp1ZycywNIiIhP7VVw5QlunFoLJPgI6jUPFWPJo_FfIlrwPQPD5cBRuAaZan-Qa-s_IuayvwzdGZhuZA0HXmGJwtxwbVdiCgR_ry_ApwiHh7h2y813X0qv98VX-OJ5Wb1rBB_YbY8wcA)

### Line chart

You can use a line chart to depict changes in a data measure over time using a series of data points.

In a line chart, the **Y-axis** is set to a measure(s) you choose from your built-in and custom fields. The **X-axis** is set to the time period you choose in the global filters. In the **Group by** dropdown, you can add an additional dimension to the chart (for example, group by department) for further comparison.



![](https://lh7-us.googleusercontent.com/_HNwZFF8jWzvhOyBOkU3YBapM5dS3yP3yB237TwVfFTwL7ORJsmKPfuWAwpaYeMe8gJhfVk47F7XmEna0DgjfC_KZqOTyqfhbvYc7KVsr1i-4I5iioTpRoKbQLBvUfTGUe2SA1L6hoMUNgGTqAXN0lQ)

### Table

You can use a table chart to display information for a measure in arranged columns and depict how this data changes over time.

In a table, **Cells** and **Columns&#x20;**&#x61;re set to the measures you choose from your built-in and custom fields. **Rows** are set to the time period you choose in the global filters. 

You can select the **Show Total Column** checkbox to add a Totals column to your table.



![](https://lh7-us.googleusercontent.com/OeDYzhoWqKbPFZUjt7rWDJ3KIKgTu6CEG9526u8u1AGkzznUVd-F_dtDABD-0OH7Vi6JdhQJmoaDE5Ti4oTxfYXXIJrYF9cLB9iSCHfBCm_vPvnl2Dmtk6lIHcOy24GCfk-7-SRbbLTmiQtZ43fuDYM)

### Vertical Stacked Bar Chart

You can use a vertical stacked bar chart to depict changes in multiple series of data over time.

In this type of chart, the **Y-axis** is set to the measure you choose from your built-in and custom fields. The **X-axis** is set to the time period you choose in the global filters. In the **Group by** dropdown, you can add an additional dimension to the chart (for example, group by department) for further comparison.

![](https://lh7-us.googleusercontent.com/KK8L3gYgouk2jT5igkEwfKs2LFW1sBpmR8Okf6grWGpojgjwUy18vlJel33DdNwe4UPFMUzweEYBq9ckGEgqTSe2KL5MYoz0GtF6_KMMl2drJThtG8x4_NKD8u6GRugZnLplZ7KvyFKw1_w-SpMAu0U)

### Horizontal Bar Chart

You can use a horizontal bar chart to compare two different measures and depict those data points horizontally. 

In this type of bar chart, the **X-axis&#x20;**&#x61;nd the **Y-axis&#x20;**&#x61;re set to the measure(s) you choose from your built-in and custom fields. In the **Group by** dropdown, you can add an additional dimension to the chart (for example, group by department) for further comparison.



![](https://lh7-us.googleusercontent.com/JqLNod3Y2Dr3zNAiA9mNGXJAapJlnjnax3T_j7i99AJw6HRWkk44NdgakfXWFvTdxWWFaZVbl_SQZJx5HDuETTwsDhbmLPm52SWm4IGX12JBYd0fmwB31sOMhsgAEr8pPVI4rMvbRQWqle2pRyk3q7s)

﻿

### Single metric chart

You can use a single matric chart to display a numeric value from a date range.

In an area chart, the **X-axis** is set to the time period you choose in the global filters.

Watch a video for more [here](https://tella.video/melissas-video-h0hp).

![](https://lh7-us.googleusercontent.com/wPIX46fgOXGN91NSUCG_LeltEMo1gqMTHZLN7Y7XTUf3AaK8CnINQZK8sIwSxz0wCnD0T4ma8txud9obfLRrrEVJw4TdOxiKyEx85Z_EHsq6sPzH0upIL2hVXstUvzSA_sRTn08Cz9mZwFPoVZdJVOw)

### Pie chart

You can use a pie chart to visualize the different values of a measure and compare how they fit together as a whole.

In a pie chart, the **Measure** and **Slice** data points are set from the measures you choose from your built-in and custom fields. You have the option to select multiple pies to add an additional dimension to your pie chart data.



![](https://lh7-us.googleusercontent.com/DfOnHVZHRrTjwWu-4kq1hSvyPcpWUoKBnVHtS8l28ejsjpoA2EV_gzr2svC7UO6aMJ0zlPHVDaOedmVWzYTgodWTYVe0vGDUEkmNOe62AUB0DV0VKnUS1piaAi_AZlnZyEyCFpPQ-JwQ5HuwzeczTps)

### Table (Non-Timeseries)

You can use a table chart to display information for multiple measures in arranged columns and rows.

In a non-timeseries table, the **Cells**, **Rows**, and **Columns** are all set from the measures you choose from your built-in and custom fields.

![](https://lh7-us.googleusercontent.com/wnoL66Cd9dDXmh41J9bSVk8xuA_BH7s1N8K28msVIiQVO7KtmQCSQ3W6Nr5HRg5afQc8z6K6LIXfmRTOZUwEYVGEcdk6OyvPV6umWefw2roUeRkyz0YF0k2C9B2hemDirocPRLBKmHLvOUiWBMYETss)

### Vertical bar chart

You can use a vertical bar chart to compare two different measures and depict those data points vertically. 

In a vertical bar chart, the **Y-axis** and the **X-axis** are set to the measure(s) you choose from your built-in and custom fields. In the **Group by** dropdown, you can add an additional dimension to the chart (for example, group by location) for further comparison.



![](https://lh7-us.googleusercontent.com/DRzv1qFukyg9RHoVQLXsxVBqKrj4iflOLOXpFfoqM0KyO0a-oIAFSEgjdMZmgvhwPuytihcnhgY6WZUh3O7nZrhqIyhSduU9qZUq544FzZyDvLzU8wAeYmO3H5qZTuVWMOmUyvmoKi_w6Tkr_FMXcYo)

﻿

﻿[﻿Packages](https://www.charthop.com/pricing/)**:&#x20;**&#x42;asic | **Headcount Planning** | ﻿**Compensation Reviews** | ﻿**Performance** | ﻿**Engagement** ﻿| **HRIS** ﻿

[title] Approval audit log
[path] ChartHop for Administrators/Planning/Scenarios/

*ChartHop Approvals* include the ability to add a comment when you are approving or rejecting a scenario. 

When you have a notification to review a scenario or are in a scenario that is currently **in review**, **approved**, **rejected,** or **merged** you can click “view details” to expand all notes in the sidebar. 

![](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/T-r6TOpnP-Yi8Am9f233u_image.png)

**&#xFEFF;When comments are visible:**

- From the left sidebar, select **Planning**.
- Access the scenario whose comments you want to review
  - The scenario should have a Review status of **In review, Approved, or Rejected**
- Select **View details** from the banner at the top of the scenario, comments will display in a sidebar to the right of the screen.
- You can also scroll to the bottom of the screen, underneath the comments box.
- Check the box that says “Include Approval Comments”.
- Approval comments and scenario comments will display below the comments box. 



::Image[]{src="https://lh7-us.googleusercontent.com/UdIEM--l2JFf2ezAlHVQOTAbpNvVuPH4RTOx5gir1gZfXNfXxj2yvUG0IS_JI5cIzC5Fbw4AUt0RZvlXwf3rRoLs7X9GfTUjkA9Sc48p6zjbS3KFoUvzhOwfFc6fIH1TGgE9KPvap1SlN0x6BUvad2k" size="72" width="960" height="898" position="center" showCaption="false"}

When a scenario is **rejected**:

- Comments will be visible unless the scenario is edited. 

When a scenario is **approved**: 

- Comments will continue to be visible. 

When a scenario is **merged** **to** **primary**: 

- Comments will be visible in the scenario 
- Comments will also be visible in the profile tab of the open job: 

Within the scenario and on the open job page, the approval chain and comments are visible to everyone who can view the scenario. 

:::hint{type="info"}
Within the scenario and on the open job page, the approval chain and comments are visible to everyone who can view the scenario. 
:::



::Image[]{src="https://lh7-us.googleusercontent.com/41K6ABNYFLpT5Sp-Hd9lCZsm5Y1VAnvCiYZXF1TqZBQQrAdtt1amYKphYvbEdnQXKvjjb5cgFFftfS-YnucCO-2TnRgIMm8E5N4PSzdvpmvqFI9K5A6gNBY1KyeCIEG4LADOKfLuhweCqst7vNy6Hys" size="72" width="950" height="890" position="center" showCaption="false"}


[title] Managing proposed changes in a scenario
[path] ChartHop for Administrators/Planning/Scenarios/Propose changes in a scenario/

:::hint{type="info"}
[Packages](https://www.charthop.com/pricing/)**:&#x20;**<font color="#a9a9a9">Basic</font> <font color="#000000">|</font> <font color="#000000">**Headcount Planning** | </font><font color="#000000">**Compensation Reviews** | </font><font color="#000000">**Performance** | </font><font color="#000000">**Engagement** </font>
:::

:::hint{type="info"}
[Roles:](https://docs.charthop.com/user-roles-and-permissions) Recruiting editor | Owner | Technical owner
:::

Every change you make in a scenario is added and organized into separate tables within the **Changes** tab. These tables display a complete summary of all the changes you have proposed for your organization in the scenario.

Changes are categorized into the following tables based on the type of change you propose:

- New jobs
- New hires
- Removed hires
- Departures
- Comp changes
- Other changes
- Moves

From these tables, you can get a big-picture view of your proposed changes so that you can review, make edits, archive, or delete.

![Scenario changes](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/a20ZLYJC7PdrL2sUTyi-H_scenariochangestab.png)

### Archive a change in a scenario

You can archive a change you've proposed in a scenario when you no longer want it to go into effect but want to keep a record of it within the scenario.

![Archive change](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/j0sZA9aGX-pLrtcg77pHX_scenarioarchivedeletechange.png)

To archive a change that you have proposed in a scenario:

1. Select the row menu (**⋮**) for the change you want to archive.
2. Select **Archive change**.
   - The change is archived and displays in the Changes table with a strikethrough.
   - Even though it continues to display in the Changes table, it is not included in visualizations in the **Org Chart**, **Data Sheet**, and **Impact** tabs of the scenario.
   - The archived change is not applied when the scenario is merged to Primary.

To unarchive the change, select the row menu (**⋮**) again and select **Unarchive change**. This restores the change to the scenario and it is applied when the scenario is merged to Primary.

### Delete a change from a scenario

You can also permanently delete a change you've proposed from a scenario in cases where you want to remove it completely.

To delete a change from a scenario:

1. Select the row menu (**⋮**) for the change you want to delete.
2. Select **Delete change**.
3. Select **Confirm**.
   - The change is permanently deleted and removed from the scenario.

### Remove a job you added in a scenario

You can remove a job that you've added in a scenario when you no longer need it or want to change direction with the changes you're proposing.

![Remove scenario job](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/Fg6xR4p-NXry6FuOvZJHz_scenarioremovejob.png)

:::hint{type="info"}
This process is for removing a job that you have added within a scenario. To remove a job that already exists in your Primary org, you should instead propose the termination in a scenario. [Learn more.](https://docs.charthop.com/propose-a-termination-in-a-scenario)
:::

To remove a job that you have added in a scenario:

1. Select the row menu (**⋮**) for the job you want to remove.
2. Select **Remove job**.
3. Select **Confirm**. The job is permanently removed from the New jobs table.


[title] Edit job changes
[path] ChartHop for Administrators/Managing people and jobs/Working with job history/

You can edit job changes such as job creation date, start date, transfers, promotions, and terminations. You can do this from the **Job History** tab in an employee profile or on the History page.&#x20;

For example, you might need to edit the start date for a hire who started later than expected or change the departure reason for a termination.&#x20;

:::hint{type="warning"}
You can’t set a person’s start date to before their job’s creation date. If you need to do so, first change the job creation date.
:::

### Edit a change from the History page

Use the History page if you want to make multiple edits to your job history as it gives you an easy look into job history across your organization.&#x20;

![Editing a change from the Org Changes History page](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/fcF1TrojhXHRlOjBVpLvw_screenshot-2024-01-19-at-35136-pm.png)

To edit a job change from the History page:

1. In the left sidebar, select **Admin**.&#x20;
2. In the sub-menu, select History > **Org Changes History.&#x20;**
3. At the far right of the row for the change to edit, select the Pencil icon.
4. In the Edit change dialog, make your changes.&#x20;
5. Select **Save to primary**. &#x20;

### Edit a change from the Employee Profile

If you only want to change an individual job change, such as a person's start date, you can use the Employee Profile.

To edit a job change from the Employee Profile:

1. From the left sidebar, select **Org Chart**. 
2. On the **Org Chart**, select the person whose job history you want to edit. 
3. Select **View Profile**.
4. At the far right of the row for the change to edit, select the Pencil icon.
5. In the dialog that appears, make your changes.&#x20;
6. Select **Save to primary**. &#x20;

:::hint{type="info"}
[Modules:](https://www.charthop.com/pricing/) <font color="#000000">**HRIS |** </font>**Engagement | Goals | Performance |&#x20;**<font color="#000000">**Compensation Reviews |** </font>**Headcount Planning**
:::


[title] Creating bands
[path] ChartHop for Administrators/Managing groups/Bands/

:::hint{type="info"}
The Bands feature has been enhanced and moved. You can create and edit compensation bands from the ... (more) menu, and selecting Compensation bands. [Learn more.](https://docs.charthop.com/compensation-bands)
:::

You can create bands to organize the various compensation tiers in your ChartHop organization.

![New band](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/d-xYmd9-kAcErwwd3NHBz_screen-shot-2022-04-13-at-115916-am.png)

To create a band:

1. From the **Settings** option in the left navigation bar, select **Groups**.
2. Select **Create band** from the the **Bands** tab.&#x20;
3. From the **New Band&#x20;**&#x64;ialog, configure your team using the following settings:
   - **Band name:** The name of your location.
   - **Band** **code:** A short code or code number used to uniquely identify the band in other systems.
   - **Aliases:** An alternative name that can be used for the band when syncing with remote systems. [Learn more](https://app.archbee.io/docs/dt2_0qNK3-GKpcsAonAUq/y3VbzSLSAfMYj0al9U-6X).
   - **Color:** The color that will be applied to group members in the org chart.
   - **Image:** An image shown on the band's profile page.
   - **Level:** A number from 0 to 100 used to represent the vertical level of the band.
   - **Minimum Base&#x20;**: The minimum possible salary assigned to the band.
   - **Maximum Base**: The maximum possible salary assigned to the band.
4. Select **Save** when you're done.


[title] Setting up a compensation review
[path] ChartHop for Administrators/Compensation reviews/

Once you've created a new compensation review, you can customize the cycle settings of your compensation review to better fit the needs of your organization.

All your settings are automatically saved as you configure them. You can leave the compensation review setup at any time and return to continue editing where you left off.

:::hint{type="warning"}
You can't edit the cycle settings for a compensation review once you've launched the cycle and it has a status of **Active**. To edit the cycle settings, the compensation review must be in a status of **Not started** or **Paused**.
:::

The following cycle settings topics are included in this section:

- Set up key dates
- Establish eligible employees
- Assign reviewers and approvers
- Assign collaborators
- Set up budget pools
- Establish guidelines
- Customize the reviewer workbook
- Impact Dashboard
- Preview and test a compensation review
- Launch a compensation review

:::hint{type="info"}
[Packages](https://www.charthop.com/pricing/): Basic | **Standard**\* | **Premium**

\* Available as an add-on
:::

[title] Creating job codes
[path] ChartHop for Administrators/Managing groups/Job codes/

You can create job codes to uniquely identify roles in your ChartHop organization while also creating associations to those roles in your payroll system or ATS.

![New Job Code](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/dc_tSZjGvYmBP_6a-xVPW_create-job-code.png)

To create a job code:

1. From the **Settings** option in the left navigation bar, select **Groups**.
2. Select **Create band** from the **Bands** tab.
3. From the **New Band** dialog, configure your team using the following settings:
   - **Name:** A required field, is the name or title of your job.
   - **Code:** A required field, is a short code or code number used to uniquely identify the job in other systems.
   - **Description**: A brief summary of the role tied to the job code.
   - **Color:** The color that will be applied to relevant group members in the org chart.
4. Select **Save** when you're done.

In a scenario, the audit log shows which fields were filled in from the job code and which were overridden. See [Scenario audit log](https://docs.charthop.com/scenario-audit-log).

:::hint{type="info"}
[Modules:](https://www.charthop.com/pricing/) **HRIS | Engagement | Goals | Performance | Compensation Reviews | Headcount Planning**
:::

## Related articles

- [Editing job codes](https://docs.charthop.com/editing-job-codes)
- [Job matching for payroll syncs](https://docs.charthop.com/job-matching-for-payroll-syncs) - Learn how job codes are used to sync data from your payroll system into open ChartHop jobs.

[title] Managing people and jobs
[path] ChartHop for Administrators/

::::LinkArray
:::LinkArrayItem{headerType="COLOR" headerColor="#f4f2f8"}
[About org management](docId\:bP5O1S9A21ihXhwU0cvK6)&#x20;



Get an overview of how to update jobs and people.
:::

:::LinkArrayItem{headerType="COLOR" headerColor="#f4f2f8"}
[Working with people](docId\:ezSv8tDMrRo9aXY5ECgJY)&#x20;



Understand how to move people into jobs.
:::

:::LinkArrayItem{headerType="COLOR" headerColor="#f4f2f8"}
[Working with jobs](docId\:KRvVzwDqqUVS-qMslNKok)&#x20;



Learn how to add new jobs or create backfills.
:::

:::LinkArrayItem{headerType="COLOR" headerColor="#f4f2f8"}
[Working with job history](docId\:e6UxVxjVhlEpiDV2tO0_R)&#x20;



Use Job History to view a record of org changes.
:::

:::LinkArrayItem{headerType="COLOR" headerColor="#f4f2f8"}
[Announcing org changes](docId\:KePhPOFywKrm16wQCU7r7) &#x20;



Customize when org changes are announced.
:::

:::LinkArrayItem{headerType="COLOR" headerColor="#f4f2f8"}
[Effective dating](docId\:ge0D5607K7gG5x8Dfu3Il)



Learn about effective dating for job and people data.
:::
::::






[title] Working with jobs
[path] ChartHop for Administrators/Managing people and jobs/

You can use the **Org Chart** and the **Data sheet** to manage new open jobs in your ChartHop organization across multiple contexts. All job changes go into effect immediately, although you can customize when they’re announced. [Learn more.](https://docs.charthop.com/about-org-management#75UOs)&#x20;

You can perform the following tasks in the **Org Chart** and **Data Sheet**:

- Add a direct report 
- Clone an open job
- Create a new open job
- Backfill a job
- Edit an individual job or multiple jobs
- Fill an open job



:::hint{type="info"}
[Modules:](https://www.charthop.com/pricing/) <font color="#000000">**HRIS |** </font>**Engagement | Goals | Performance |&#x20;**<font color="#000000">**Compensation Reviews |** </font>**Headcount Planning**
:::

:::hint{type="info"}
﻿﻿[Roles](https://docs.charthop.com/user-roles-and-permissions): Owner | Org editor | Recruiting editor
:::


[title] Working with custom dashboards
[path] ChartHop for Administrators/Dashboards/

You can create custom dashboards in ChartHop to analyze data in your organization. To create a custom dashboard, you must first add a new dashboard and then create charts within it to present your data visually.

For example, you can create a dashboard on gender identities in your organization. You can add a pie chart showing the gender distribution on the executive team, a second pie chart showing the gender distribution among all employees, and a line chart showing the gender distribution in hiring over time. All of these charts would be available within the same dashboard.

:::hint{type="info"}
Data in ChartHop dashboards can only be filtered down to weekly values. To view job-related data (for example, departures) on specific dates within a date range, use the History page to filter, view, and export data. [Learn more.](https://docs.charthop.com/history-page)&#x20;
:::

### Create a new dashboard

The first step in building a custom dashboard is adding a new one. This dashboard is initially displayed as empty, and you must add charts to start visualizing your data. 

To create a new dashboard:

1. From the left sidebar, select **Dashboards**. 
2. Select **Create dashboard**.&#x20;

Once you have created a new dashboard, you can configure charts to display within the dashboard.

:::hint{type="info"}
[Packages](https://www.charthop.com/pricing/)**:&#x20;**<font color="#a9a9a9">Basic</font> <font color="#000000">|</font> <font color="#000000">**Headcount Planning** | </font><font color="#000000">**Compensation Reviews** | </font><font color="#000000">**Performance** | </font><font color="#000000">**Engagement** </font>
:::


[title] Fill an open job
[path] ChartHop for Administrators/Managing people and jobs/Working with jobs/

You can fill an open job by assigning it to a new hire or a current member of your ChartHop organization. 

### Fill a job with a new hire

![Filling a job with a new hire](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/Jrk3YbScuJSf-bklwLrJe_screenshot-2024-01-19-at-33853-pm.png)

To fill a job with a new hire:  

1. From the left sidebar, select **Data Sheet**. 
2. On the **Data Sheet**, in the row for the job to fill, select the Actions menu (⋮).
3. Select **New hire**. 
4. In the **New hire** dialog, enter all available information about the person using the fields featured in the table below.&#x20;
   - **First name** and **Last name** are required, but ChartHop strongly recommends adding a **Work email&#x20;**&#x6F;r **Home Email** since email address is the primary identifier. 
5. Select **Save** to finish filling the job.&#x20;

After you add a new hire, you can change the details and effective dates of your additions manually. [Learn more](https://docs.charthop.com/edit-jobs).

The new hire fields list:

| **Field name**      | **Description**                                                                                                                                                              |
| ------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| First name          | The new hire's first name. **Required**.                                                                                                                                     |
| Last name           | The new hire's last name. **Required**.                                                                                                                                      |
| Work email          | The new hire's work email. **Recommended**.                                                                                                                                  |
| Home email          | The new hire's personal email. **Recommended**.                                                                                                                              |
| Preferred name      | The new hire's preferred first name.                                                                                                                                         |
| Middle name         | The new hire's middle name.                                                                                                                                                  |
| Preferred last name | The new hire's preferred last name.                                                                                                                                          |
| Mobile              | The new hire's mobile phone number.                                                                                                                                          |
| Work phone          | The new hire's home phone number.                                                                                                                                            |
| LinkedIn            | The new hire's LinkedIn profile link.                                                                                                                                        |
| Twitter             | The new hire's twitter profile link.                                                                                                                                         |
| GitHub              | The new hire's Github profile link.                                                                                                                                          |
| Home Address        | The new hire's home address.                                                                                                                                                 |
| Image               | The image used for the new hire's profile picture.                                                                                                                           |
| City                | The city of the new hire's home address.                                                                                                                                     |
| State               | The state of the hire's home address.                                                                                                                                        |
| Country             | The country of the hire's home address.                                                                                                                                      |
| Postal              | The postal code of the hire's home address.                                                                                                                                  |
| Birth date          | The new hire's date of birth.                                                                                                                                                |
| Start date          | The date when the new hire starts at the organization.                                                                                                                       |
| Announce date       | The date when the new hire will be publicly announced to the organization and determines the date when the new hire will be visible to all other employees on the org chart. |
| Gender              | The new hire's gender.                                                                                                                                                       |
| Ethnicity           | The new hire's ethnicity.                                                                                                                                                    |

### Fill a job with a member of your org

![Filling a job with an org member](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/ngR2rAz5rPxv89_VnIGwx_fill-job-with-org-member.jpg)

To fill a job with a member of your org: 

1. From the left sidebar, select **Data Sheet**. 
2. On the **Data Sheet**, in the row for the job to fill, select the Actions menu (⋮). 
3. Select **Fill job**. 
4. In the **Fill job** dialog and the **Person** menu, search for a person from your ChartHop organization to fill the job.
5. Enter the following information:
   1. **Start date** - The start date for the person filling the job.
   2. **Move type** - Whether the move is a transfer, promotion, or demotion.
   3. **Note** - Any additional notes regarding the move.
6. Select **Save to primary** to finish filling the job.

:::hint{type="info"}
[Packages](https://www.charthop.com/pricing/): **Basic** | **Standard** | **Premium**[﻿﻿](https://docs.charthop.com/user-roles-and-permissions)

[Roles](https://docs.charthop.com/user-roles-and-permissions): Owner | Org editor | Recruiting editor
:::




[title] Establish eligible employees
[path] ChartHop for Administrators/Compensation reviews/Setting up a compensation review/

*Eligible employees* are all employees whose compensation is being evaluated within the compensation review cycle. By default, all employees are eligible for the compensation review cycle.

You can establish eligibility rules and exceptions to filter out employees who should not be included as eligible within the compensation review cycle.

### Establish eligibility rules

To configure who is eligible for the cycle:

1. Open an existing compensation review with a status of **Not started** or **Paused**.
2. Select the **Eligible employees** tab.
3. In the **Eligibility rules** section, use the **Start with** dropdown to choose your starting population. You can choose from the following options:
   - **All employees** — All employees are included as the starting pool.
   - **Remove specific departments** — Start with all employees and remove those in specific departments.
   - **Remove specific teams** — Start with all employees and remove those in specific teams.
   - **Remove specific locations** — Start with all employees and remove those in specific locations.
   - **Remove (Custom)** — Start with all employees and remove those who match custom criteria. You can establish the criteria using filters or a Carrot query.
4. Your settings are saved automatically.

### Exclude a specific employment status

You can choose to exclude a specific employment status (for example, part-time employees) so that only employees who are not part-time are included in the compensation review cycle.

To exclude a specific employment status:

1. Open an existing compensation review with a status of **Not started** or **Paused**.
2. Select the **Eligible employees** tab.
3. In the **Eligibility rules** section, search for an employment status in the **Not eligible if employment status is one of the following** field.
4. Select the employment status you want to exclude. Employees with that employment status are no longer eligible for the compensation review.
   - Your settings are saved automatically.

### Exclude employees who started on or after a specific date

You can exclude recent hires from being eligible for the compensation review.

To exclude employees with a start date on or after a specific date:

1. Open an existing compensation review with a status of **Not started** or **Paused**.
2. Select the **Eligible employees** tab.
3. In the **Eligibility rules** section, choose a date in the **Not eligible if start date on or after** field. All employees with a start date on or after the chosen date are excluded from the compensation review.
   - Your settings are saved automatically.

### Exclude employees based on the date of their last raise

You can exclude employees who have recently received a raise from being included in the compensation review cycle.

To exclude employees based on the date of their last pay increase:

1. Open an existing compensation review with a status of **Not started** or **Paused**.
2. Select the **Eligible employees** tab.
3. In the **Eligibility rules** section, choose a date in the **Not eligible if last raise on or after** field.
   - All employees with a pay increase established on or after the chosen date are excluded from the compensation review.
   - Your settings are saved automatically.

### Exclude or include specific employees by name

You can choose specific employees to exclude or include in your compensation reviews. For example, you can use this to exclude specific employees who require a separate compensation review process or to include an employee who was hired after the cutoff date.

To exclude or include specific employees:

1. Open an existing compensation review with a status of **Not started** or **Paused**.
2. Select the **Eligible employees** tab.
3. In the **Eligibility rules** section, search for the employee you want to exclude or include in the **Exclude specific people** or **Include specific people** fields.
4. Select the employee's name in the list.
   - Your settings are saved automatically.

## Review eligible employees

Once you have finished establishing eligibility rules, you can collapse the **Eligibility rules** section to view employees. Use the **Eligibility filter** dropdown to switch between **Eligible (n)** and **Ineligible (n)** views, where *n* is the count of employees in each group.

When you select an employee in the list, the profile summary for that employee displays on the right.

You can also use the checkboxes to select employees in the list and quickly exclude or include them.

### Export eligible or ineligible employees

When you select the **View on Data Sheet** button, ChartHop creates a Data Sheet view populated with the employees currently shown in the Eligibility filter. You can then export that list as a .csv file to share with others outside the compensation review cycle configuration.

To export a .csv file of eligible or ineligible employees:

1. Use the **Eligibility filter** dropdown to select the group you want to export (**Eligible** or **Ineligible**).
2. Select **View on Data Sheet**. ChartHop populates a Data Sheet view with the corresponding employees.
3. In the Data Sheet, select the **Edit** dropdown menu.
4. Select **Export CSV**.
5. Configure the export options and select **Export**.

:::hint{type="info"}
[Packages](https://www.charthop.com/pricing/): Basic | **Standard**\* | **Premium**

\* Available as an add-on
:::

[title] Create a location
[path] ChartHop for Administrators/Managing groups/Locations/

You can create locations to capture your physical locations (Offices, stores, warehouses, etc.) within your organization.

![location-panel](https://archbee-image-uploads.s3.amazonaws.com/zxjhb7-DqnuzAP-lru1l3-5b5jqnSj7D6pf9h6UGZpm-20240812-151516.png)

To create a location:

1. Select **Data Model** in the left navigation bar, then select **Locations**.
2. Select **Create location**.&#x20;
3. In the **Create Location&#x20;**&#x70;anel, configure your location using the following fields:
   - **Location name&#x20;**- The location's name.
   - **Location** **code&#x20;**-  A short code or code number used to uniquely identify the location in other payroll, equity, and ATS systems.
   - **Aliases&#x20;**- An alternative name that can be used for the location when syncing with remote systems. [Learn more](https://docs.charthop.com/group-names-and-aliases#t1LA4).
   - **Color&#x20;**- The color that will be applied in the org chart to the location.
   - **Image&#x20;**- The image used on the location's profile page.
   - **Location Type&#x20;**- A dropdown for assigning the location as either **Remote** or **Office**. Required in order to display locations on the **Map**. [Learn more](https://docs.charthop.com/map#li-setting-work-locations).
     - **Remote** - For non-physical locations. Does not offer the option to include a full street address.
     - **Office** - For physical locations. Offers the option to include a full street address.
   - **City&#x20;**&#x20;- The location's city.
   - **State** - The location's state.
   - **Country** - The location's country. Required
   - **Postal** - The location's postal or zip code.
4. Select **Save** when you're done.

:::hint{type="info"}
[Modules:](https://www.charthop.com/pricing/) <font color="#000000">**HRIS |** </font>**Engagement | Goals | Performance |&#x20;**<font color="#000000">**Compensation Reviews |** </font>**Headcount Planning**
:::




[title] Edit jobs from the Data Sheet tab
[path] ChartHop for Administrators/Planning/Headcount planning/Editing jobs in a scenario/

:::hint{type="info"}
[Packages](https://www.charthop.com/pricing/)**:&#x20;**<font color="#a9a9a9">Basic</font> <font color="#000000">|</font> <font color="#000000">**Headcount Planning** | </font><font color="#000000">**Compensation Reviews** | </font><font color="#000000">**Performance** | </font><font color="#000000">**Engagement** </font>
:::

Use the **Data Sheet** tab when you want to edit a job that you have not previously added or edited within your scenario or when want to edit multiple jobs.

To edit jobs from the **Data Sheet&#x20;**&#x74;ab:

1. Filter the data that displays in the data sheet by either:
   - Entering a Carrot query within the filter text box
   - Selecting the funnel icon to select quick filter criteria in the **Filter** dialog
2. Select the **Edit** button.
3. Select the cell(s) you wish to edit. You can only edit highlighted cells.
4. Make your edits.
5. Select **Save Changes** when you are done.
6. In the confirmation window, select **Save to Scenario** to incorporate the changes into your scenario.

:::hint{type="warning"}
You must select **Save to Scenario** before exiting the dialog to save your edits. Opening the context menu will clear out any previous unsaved changes to your data sheet.
:::

:::hint{type="success"}
To make more extensive edits to a job, select the button with the three dots at the left side of the row of data you wish to edit. From the action menu that displays, click **Edit job** to display the **Edit job** dialog.
:::







[title] Sharing Groups
[path] ChartHop for Administrators/Managing groups/

## Overview

Sharing Groups allows additional people to help manage and administrate Groups membership and setup.

Similar to Resources sharing, there are two visibilty settings in the Share modal on each Groups page:

1. Specific user or group sharing for administration of the group
2. Content visibility sharing throughout ChartHop

## Sharing with specific users

Open the Share modal in the header of a Group type's list page.

To allow additional users to see or edit this group type, type their name in the top bar and set their acess level in the dropdown.

- **Owner**: User will have the ability to edit the group type, add groups of this type, and manage members for these groups. User will also have the ability to update the sharing permissions of this group type.
- **Editor**: User will have the ability to edit the group type, add groups of this type, and manage members for these groups.
- **Viewer**: User will be able to see the list page of this group type, and view all of the groups and members lists for these groups.

![](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/tRqKL4WaT1w5nTh2FUXgT_image.png "Share with a specific user to see and manage the group type")

## Sharing with the broader org

To control visibilty of a group type throughout ChartHop, use the group type Sharing dropdown in the lower left corner of the Share modal. This visibility controls who can see the group org chart, see the group membership in Job History and in the Data Sheet, Dashboards, etc.

- **Private**: the group type will only be shared and visible to the users listed in the upper part of the share modal
- **Highly sensitive**: the group type and its groups will be visible to Owners and other users in ChartHop with access to read all sensitive content
- **Org public**: the group type and its groups will be visible to everyone in the organization

![](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/qONXLUr_vKDkY5yFr5G9f_image.png "Determine org visibility throughout ChartHop for the group type")


[title] Connecting bands to jobs
[path] ChartHop for Administrators/Planning/Compensation bands/

After you create compensation bands, you can assign each job in your organization to a band by uploading a spreadsheet that maps your existing employees to the band to which they belong. This method allows you to map all of your jobs to bands at the same time.

Alternatively, you can associate an individual job with a band by selecting **Edit Job**, selecting the **Compensation&#x20;**&#x74;ab, and selecting a band from the dropdown list.

:::hint{type="warning"}
Compensation bands can display in the job details for those with the appropriate sensitivity access. If your organization previously entered bands without the use of the Compensation Band wizard, you'll see a **Band (legacy)** field when editing a job. This field is for information only and you cannot be edited.
:::

### Create a job-band mapping spreadsheet

You'll need a list of the work emails associated with each job you want to map, as well as which band applies to each job. You can also map to a job ID instead of a work email if you want to add a band to an unfilled job.

To create your spreadsheet:

1. Create a spreadsheet (.csv or .xlsx) that includes the following two columns:&#x20;
   - An identifier column (for example, work email or job ID)
   - A column named `compBand`
2. Add a row for each job you want to connect to a band and add values for both the job (work email or job ID) and the compBand. &#x20;

### Upload your spreadsheet

After you've created a spreadsheet to help you map your jobs to the bands you created, upload the spreadsheet to ChartHop to complete the mapping. You can make any individual changes by editing the respective job.

1. From the left sidebar, select **Data Model**
2. From the sub-menu, select Job Architecture > **Compensation Bands**.
3. Click **Edit** in the top right corner.
4. In the **Map your jobs to your band levels** section, select **Upload mapping**.
5. Select **Save Settings**.

### Verify that your bands are mapped

You can use the **Data Sheet** to verify that you've mapped your bands to their respective jobs.

To verify bands are mapped:

1. From the left sidebar, select **Data Sheet**.
2. Select **Select columns**.
3. In the **Select columns** dialog, select the checkbox for the **Comp Band** field.&#x20;
4. Select **Apply**. This displays compensation bands on the **Data Sheet** as a column.
5. Review the rows to view band information for employees and open jobs.

:::hint{type="info"}
Once you've configured your compensation bands, you can also create custom field mappings with our help to export your compensation bands to your external systems. For more information, please reach out to your ChartHop Customer Success Manager.
:::

:::hint{type="info"}
[Packages](https://www.charthop.com/pricing/)**:&#x20;**<font color="#a9a9a9">Basic</font> <font color="#000000">|</font> <font color="#000000">**Standard*** | **Premium**</font>****

\* Available as an add-on
:::

:::hint{type="info"}
﻿﻿[Roles](https://docs.charthop.com/user-roles-and-permissions): Owner | Org editor
:::


[title] Deleting a scenario
[path] ChartHop for Administrators/Planning/Scenarios/

As a scenario owner, you can permanently delete a scenario when you no longer need it or you can instead archive the scenario for later use.

:::hint{type="info"}
You can only archive scenarios that are currently In Progress.
:::

![Delete a scenario](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/6yh3HpSq54dPZlRbaFN4Z_deletearchivescenario.png)

### Delete a scenario

You can permanently delete a scenario either from the Scenarios list or within the scenario itself.

Only scenario owners have the ability to delete their scenarios. You can delete all scenarios regardless of status (In Progress, Merged, or Archived). 

To delete a scenario from the Scenarios list:

1. From the left sidebar, select **Planning**.
2. Navigate to the scenario you want to delete.
   - Depending on the scenario status, it may be located on the **In Progress**, **Merged**, or **Archived** tabs.
3. Select the checkbox next to the scenario you want to delete.
4. In the menu that displays above the Scenarios list, select **Delete**. 
5. Enter **DELETE** to confirm you are deleting the correct scenario.
6. Select **Delete**.
   - Your scenario is permanently deleted.

To delete from within a scenario:

1. On the top right corner of your scenario, select the **Actions** ▼ dropdown.
   - When scenario approvals are required for your organization, select the **Submit for approval&#x20;**▼ button instead.
2. Select **Delete scenario**.
3. Enter **DELETE** to confirm you are deleting the correct scenario.
4. Select **Delete**.
   - Your scenario is permanently deleted.

### Archive a scenario

As a scenario owner, you can archive a scenario to remove it from the **In Progress** tab and save it for later use. You can only archive scenarios that are currently In Progress.

You can archive a scenario either from the Scenarios list or within the scenario itself.

To archive a scenario:

1. From the left sidebar, select **Planning**.
2. On the **In Progress** tab, select the checkbox next to the scenario you want to archive.
3. Select **Archive**.
   - This archives your scenario and displays it in the **Archived** tab of the **Scenarios** page.

To archive from within a scenario:

1. On the top right corner of your scenario, select the **Actions** ▼ dropdown.
   - When scenario approvals are required for your organization, select the **Submit for approval&#x20;**▼ button instead.
2. Select **Archive scenario**.
   - Your scenario is immediately archived.&#x20;
   - To access an archived scenario, navigate to the **Archived&#x20;**&#x74;ab of the **Scenarios** page.&#x20;

### Unarchive a scenario

You can restore an archived scenario back to In Progress at any time in the Scenarios list by selecting the checkbox for the archived scenario and selecting **Unarchive**. 

You can also unarchive a scenario by selecting **Unarchive** **scenario** from the **Actions** ▼ dropdown within the scenario itself.

:::hint{type="info"}
[Packages](https://www.charthop.com/pricing/)**:&#x20;**<font color="#a9a9a9">Basic</font> <font color="#000000">|</font> <font color="#000000">**Headcount Planning** | </font><font color="#000000">**Compensation Reviews** | </font><font color="#000000">**Performance** | </font><font color="#000000">**Engagement** </font>
:::

:::hint{type="info"}
[Roles:](https://docs.charthop.com/user-roles-and-permissions) Recruiting editor | Owner | Technical owner
:::


[title] Merging a scenario
[path] ChartHop for Administrators/Planning/Scenarios/

Once you and your stakeholders have agreed on the changes proposed in a scenario, you can merge those changes into the primary branch of your ChartHop organization using the **Merge to primary** feature.﻿

Only users with the **Owner** or **Org editor** role can merge a scenario to the primary branch of an organization, regardless of whether approvals are required.

When approvals are enabled for a scenario, approvers must review and fully approve the scenario before it can be merged. [Learn more.](https://docs.charthop.com/enabling-approvals)

:::hint{type="warning"}
Merges are permanent actions. Once a merge is complete, all proposed changes in a scenario are put into effect and are displayed to the rest of your organization in ChartHop (depending on the sensitivity of the change and the level of user access level).
:::

:::ExpandableHeading
### Merge a scenario without approvals

When approvals are not enabled for your organization, you have the ability to merge a scenario to primary when you have the **Owner** or **Org editor** role. [Learn more.](https://docs.charthop.com/user-roles-and-permissions)



To merge a scenario to primary:

1. Access the scenario you want to merge.
2. Select **Merge to primary**.
3. Select **Merge** to confirm.
   - Once a scenario has been merged, the status of the scenario changes to **Merged&#x20;**&#x61;nd the scenario displays in the **Merged** tab of the Scenarios page.
   - Accessing the merged scenario displays the date/time the scenario was merged and the name of the user who merged it.
:::

:::ExpandableHeading
### Merge a scenario with approvals

When you are notified to merge scenarios to primary, ChartHop sends you an email notification once a scenario is approved and ready to be merged.



To merge an approved scenario to primary:

1. Access the scenario you want to merge.
2. Review the changes proposed within the scenario.
3. Select **Merge to primary**.
4. Select **Merge&#x20;**&#x74;o confirm.
   - ChartHop sends an email notification that the scenario has been merged to you, the approvers, and the proposer.
:::

### View merged scenarios

Once you merge a scenario, the status of the scenario changes to **Merged** and the scenario displays in the **Merged** tab of the Scenarios page.

Accessing the merged scenario displays the date/time the scenario was merged and the name of the user who merged it.&#x20;

:::hint{type="info"}
[Packages](https://www.charthop.com/pricing/)**:&#x20;**<font color="#a9a9a9">Basic</font> <font color="#000000">|</font> <font color="#000000">**Headcount Planning** | </font><font color="#000000">**Compensation Reviews** | </font><font color="#000000">**Performance** | </font><font color="#000000">**Engagement** </font>
:::

:::hint{type="info"}
[Roles:](https://docs.charthop.com/user-roles-and-permissions) Owner | Org editor | Recruiter editor
:::


[title] Creating multiple jobs in a scenario
[path] ChartHop for Administrators/Planning/Headcount planning/Creating new jobs in a scenario/

In a headcount planning scenario, you can create multiple jobs at once by creating a CSV file and then importing that CSV file to your scenario.

### Create a hiring plan in your scenario using a CSV

Create a spreadsheet that contains the information for each job you want to add to your scenario. The following information should be included for each new job:

- Title
- Start Date
- Manager

Be sure to save the spreadsheet as a CSV file. The data headers in your CSV must match the code names in your organization.

:::hint{type="info"}
For more information on preparing your spreadsheet, check out our guide to adding or updating a hiring plan. [Learn more.](https://docs.charthop.com/add-or-update-a-hiring-plan)
:::

### Import a CSV to your scenario

After you've created your CSV file, upload your completed spreadsheet to your scenario.&#x20;

![Import your CSV from the dropdown menu.](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/c1_f2yxqTNluu42ShOxph_hpimport-csv.jpg "   ")

To import your CSV:

1. From the scenario details, select the **arrow&#x20;**&#x62;utton to display the dropdown menu.
2. Select **Import CSV**. The **Upload CSV To Scenario** dialog displays.
3. Select **Hiring Plan&#x20;**&#x61;s the type of data you're uploading.
4. Browse and select your CSV file.
5. Select **Upload**. The time it takes to upload may depend on the size of your spreadsheet. Once the import is complete, a confirmation message displays.

## Troubleshooting

If you are unable to upload your CSV successfully, try the following:

- Check for typos and extra spaces in your CSV's cells.
- Try resubmitting your CSV.

:::hint{type="warning"}
If you are still unable to complete this process after attempting the troubleshooting options above, reach out to [support@charthop.com](#).
:::

:::hint{type="info"}
[Packages](https://www.charthop.com/pricing/)**:&#x20;**<font color="#a9a9a9">Basic</font> <font color="#000000">|</font> <font color="#000000">**Headcount Planning** | </font><font color="#000000">**Compensation Reviews** | </font><font color="#000000">**Performance** | </font><font color="#000000">**Engagement** </font>
:::






[title] About org management
[path] ChartHop for Administrators/Managing people and jobs/

You can perform a wide range of people management tasks from the **Org Chart** and the **Data Sheet**, ranging from creating jobs to editing employee information. When you perform these actions in your primary org, changes go into effect immediately, so it’s important to understand everything you can do, as well as the impact of each task. 

You can perform tasks including: 

- Adding new jobs in multiple ways
- Backfilling jobs 
- Editing individual or multiple jobs
- Filling jobs with new hires or existing employees
- Terminating people
- Transferring or promoting people
- Adding new people to your org

:::hint{type="info"}
ChartHop Standard and ChartHop Premium customers can use [Scenarios](https://docs.charthop.com/scenarios), which enable you to plan org changes before pushing them live. If you are a Premium customer, make immediate org changes with the instructions in this section or use Scenarios to plan changes, such as with headcount planning. [Learn more](https://docs.charthop.com/headcount-planning).&#x20;
:::

### Working on the Org Chart or the Data Sheet

You can complete most tasks on either the **Org Chart** or the **Data Sheet**. Where relevant, instructions have been provided for both. 

Work from the **Org Chart** when you want to view your organization as a hierarchy and from the **Data Sheet** when you want to see a large amount of data at once in a list view.&#x20;


:::hint{type="info"}
[Modules:](https://www.charthop.com/pricing/) <font color="#000000">**HRIS |** </font>**Engagement | Goals | Performance |&#x20;**<font color="#000000">**Compensation Reviews |** </font>**Headcount Planning**
:::

:::hint{type="info"}
﻿﻿[Roles](https://docs.charthop.com/user-roles-and-permissions): Owner | Org editor
:::


[title] Creating a new Group Type
[path] ChartHop for Administrators/Managing groups/Custom Groups/

:::hint{type="warning"}
This feature is currently in Alpha. Be one of the first customers to try it! Please share any feedback with the ChartHop team.

### How to setup a Alpha Feature

1. Contact [ChartHop support](mailto\:support@charthop.com) or your CSM if you have one. They can activate the feature for you.
2. Read below for setup instructions and context on how the feature will work.
:::

## Overview

Your organization is organized by more than just departments and location, and you can now reflect that in ChartHop! Once "Custom group types" are enabled in Labs, you will be able to create custom groups under Data model --> Groups --> Group types. Group types can have "Groups" within them with a hierarchy. This page will walk you through creating Group types.

*Group types* within ChartHop allow you to fully customize many different ways of seeing your organization. Each Group Type you enable can have its own org chart view. And every org is different, so how you set up your org to reflect how you really operate is up to you.

Here are some examples:

- A software company may have a few different group types:
  - Reflecting how their Research & Development teams are organized around different product scopes
  - Continuously updating Project Groups their R\&D teams are working on
  - Showing all of their Employee Resource Groups and who is a member of each of them
- A national brick & mortar chain may want:
  - All of their store locations in a regional hierarchy
  - Those stores rolling up to different corporate regional offices on the org chart
- A fast growing finance company may have acquired a number of companies in their growth:
  - Group types can easily organize those companies without disrupting current organizational hierarchies
  - HR admin can leverage group types to easily assign calendars and permissions

::Image[]{src="https://api.archbee.com/api/optimize/CXAjUAezd9VEEVQBIYmdw/UGPi5BBhsKj8qCnm2AlXj_image.png" size="88" width="1820" height="668" position="center" showCaption="false" darkWidth="1820" darkHeight="668"}

## Group Type: Assignment Type

When creating a group type, you choose how membership in that type's groups is determined. There are three options:

- **Group** (default): Members are added and removed manually by an admin.
- **Smart Group**: Members are determined automatically by a CQL filter expression set on each individual group. Anyone matching the filter is a member of that group.
- **Expression Group**: Members are determined automatically by a single CQL expression set on the group type itself. That expression evaluates each person and returns which group (or groups) within the type they belong to.

The assignment type is selected when the group type is first created and **cannot be changed** once groups have been created under it.

:::hint{type="info"}
Not sure which to use? Use **Smart Group** when each group has its own distinct membership criteria (e.g. "everyone in Engineering" vs. "everyone in Sales"). Use **Expression Group** when a single rule determines which group a person belongs to across the whole type — for example, mapping a cost center code to a department using a lookup table.
:::

## Creating a group type

Clicking "Create group type" opens a sidebar where you can customize your group.

::Image[]{src="https://api.archbee.com/api/optimize/CXAjUAezd9VEEVQBIYmdw/VObdAnaw2PvDdTzDv41TZ_image.png" size="52" width="1058" height="1406" position="center" showCaption="false" darkWidth="1058" darkHeight="1406"}

**Description**: This is visible just in the sidebar and the list table.

**Parent types allowed:** A group type can have a hierarchy within it, or not, which reflects how the groups are seen on the Groups Org Chart. This setting allows you to set which other group types can be a part of that hierarchy.

- Same: Groups of this group type can only have a parent group of the same type
  - ex: Research & Development groups get broader in scope as you move up the hierarchy, so these groups are parents of other R\&D groups.
- Both: Groups of this group type can have a parent group of the same type or one other (must specify which)
  - ex. Setting up Teams in your org with Department as an option as well so that Teams can roll up to each other and ultimately to a Department.
- Other: Groups of this group type can only have a parent group that is not the same type (must specify which)
  - ex. Regional Stores must roll up to corporate Regional Offices, which are two different group types you've set up.
- None: Cannot have a hierarchy or any parent groups
  - ex. Employee Resource Groups at your organization are independent with no traditional org chart hierarchy

**Positions**: You can create positions within your group types and your groups. For example, a "Product" group type can have the positions of "Senior Product Manager", "Product Manager" and "Junior Product Manager". These will be the positions that are available in any and all groups of that type.

These are fully customizable for your needs.

:::hint{type="info"}
Positions are not available for Smart Group or Expression Group types.
:::

**Code**: You are able to customize a code to reference this group in other systems if needed.

## Membership Type

The **Membership Type** setting controls whether a person can belong to more than one group of this type at the same time.

- **Multiple** *(default)*: A person can belong to more than one group within this group type simultaneously. When a new group is assigned, it is added on top of any existing memberships — values append rather than replace.
- **Single**: A person can only belong to one group within this group type at a time. Assigning a new group will automatically remove their previous membership.

:::hint{type="info"}
If you're seeing group values stack instead of replace, switching **Membership Type** to **Single** is the fix.
:::

### Changing Membership Type on an existing group type

If you change an existing group type from **Multiple** to **Single**, ChartHop will automatically migrate all existing group memberships for that group type — ensuring that historical data follows the "one group per person" rule. No manual cleanup is needed.

Changing from **Single** to **Multiple** requires no migration, since allowing more memberships is always additive.

## Setting up Smart Groups

A **Smart Group** type automatically manages membership using a CQL filter expression. Each group within the type has its own filter, and ChartHop evaluates that filter against every person in the org to determine who belongs to that group.

### How it works

- When you create or edit a group, you write a CQL expression in the **Membership filter** field (for example, `department="Engineering"`).
- ChartHop evaluates the filter and assigns everyone who matches as a member of that group.
- Membership is recomputed automatically when org data changes, and can also be refreshed manually at any time.
- Members cannot be added or removed by hand — membership is always driven by the filter.

### Important: only publicly visible fields are supported

Smart Group filters run as a system-level operation, not as a specific user. To prevent unintended access to sensitive data, the filter can only reference fields that are visible to everyone in the org (Org Public access). Fields with restricted visibility — such as compensation data — are not supported in Smart Group filters.

### Previewing membership

When you enter a CQL expression in the Membership filter field, ChartHop shows a live preview of who would be included. The preview displays:

- A count of matched members
- A scrollable list of matched names and job titles
- A link to view all results in the data sheet

The preview updates as you type (with a short delay), so you can refine your filter before saving.

### Manually refreshing membership

The group detail page shows a filter banner with the active CQL expression and the last time membership was computed. To trigger a refresh manually, click the **Refresh** button in the banner. This is useful after bulk data changes or imports.

### Positions on Smart Groups

Positions (such as "Lead" or "Admin") can still be assigned manually on Smart Groups. Position holders do not need to match the group's membership filter.

## Setting up Expression Groups

An **Expression Group** type uses a single CQL expression on the group type itself to determine membership across all groups of that type. Instead of each group having its own filter, one expression evaluates a person and returns the name or ID of the group they belong to.

### How it works

- You define one **Membership expression** on the group type (for example, an expression that looks up a person's cost center in a reference table and returns the corresponding department group).
- ChartHop evaluates that expression for each person and assigns them to the group the expression returns.
- If the expression returns multiple groups and the group type's Membership Type is set to **Single**, ChartHop uses the **Order** field on each group to determine which one takes priority — the group with the lowest order value wins.
- Like Smart Groups, membership is calculated automatically and is read-only.

### When to use Expression Groups vs. Smart Groups

Use **Expression Groups** when a single lookup rule can determine every person's group — for example, mapping a field value to a group via a reference table. This is more efficient than writing a separate filter per group and is especially useful for large group types where the membership logic is consistent across all groups.

Use **Smart Groups** when each group has meaningfully different membership criteria that need to be expressed individually.

### Setting group order (for Single membership)

If your Expression Group type uses **Single** membership and the expression could return more than one group for a person, set the **Order** field on each group to control priority. Lower numbers take precedence. Groups without an order value are treated as lowest priority.

[title] Advanced chart customization
[path] ChartHop for Administrators/Dashboards/

You can utilize Carrot to customize your charts in addition to the dropdown menu.

## How ChartHop dashboards calculate data

When displaying data in charts, ChartHop uses the following Carrot time parameters:

- **date:&#x20;**&#x53;pecific date 
- **intervalFrom:&#x20;**&#x54;he start of the interval you want to look at (starting with the first date on the date range)
- **intervalTo:&#x20;**&#x54;he end of the interval you want to look at (end with the last date on the date range)

Change type queries are pulled for the entire interval, all others are counted at the end of the interval. If your dashboard date range ends before the end of the month, it will display the summed value for the last day specified in the date range. ChartHop will alert you when this is the case by displaying a partially filled circle on the last month.&#x20;

::Image[]{src="https://lh7-us.googleusercontent.com/dI_8sjCp3sRl-gjAMjJJDc7atb9TRtPKNnq5OUx_qwLSs4rQotm7o5Ymd5WMRbAZlxx6dtvtoZZ8gq229fOCdHrv_63zHm_FkL0ABLkqjKTV3pAj0KslDG3hdEQ3ai0N36wziUMT3-3p_ihbSLygo7L4SQ=s2048" size="36" width="102" height="100" position="center" showCaption="false"}



![](https://lh7-us.googleusercontent.com/ISEBEQZm3u7yiuuguxJwtsgJFKz4LBnq5MEc7ZWS7q_hJWJWbMRUcP2LdAr8RSMWWhSc61kUVvUMefhEflMm672CNFpTM6iu7er-u16bdDzXGOijUopP2CZ7DNcwt2jd9Ma1L6HDzvPJwnSGKLefhbk)

The date range on the dashboard is looking for data from October 22, 2023 - April 22, 2024. 



::Image[]{src="https://lh7-us.googleusercontent.com/RiTsRaa0twn6Eu25yc27nT47mCa_k6EEgR8W_XCgL9_KFtC7UO0aPHSY_LOq0oZLrRxGkJProQx5w6YAW0CpV2R8B9G-WQfpGSZ1e56aTNCjihB8rwKJD5_f_HfrhV1xTp61FkpLzSqNNjV2RW6EeGY" size="80" width="383" height="48" position="center" showCaption="false"}

Because headcount is not a change type query, and instead displays data as of the end of the month, there is no partial circle on “October ‘23”. In the chart below, we are looking at New Hires. Notice the partial circle on both “October ‘23” and “April ‘24”. 



![](https://lh7-us.googleusercontent.com/jY1I0vIlh66xpgzeJovO_RrC8SWnQHex6aJHqeaeOYZDfjSH07jj945fv7lOdHVGBqAvQzVOfsLgawR5wSY5-OHVh3uz0cVS6MA1d56YrscSLpgUoS_9TzRqXW7BPIJ-GXg0C-0QFw53MKhccKp-T1I)

You can customize this chart by clicking the “Advanced Query Mode” toggle



::Image[]{src="https://lh7-us.googleusercontent.com/e-_kVP1HnK_fn6P24e-VutaVYigmh3ZyynUiVs07mZlkyLhanjdsoU3O9RJmte7sOG9kT8HGmX49H-WbzjMGnJUjBwq8qzudg570hcxrdd33OcwaaDKwoMUryHR83wYEZg73p8okvNNTRXmHaqYmrSc" size="80" width="249" height="56" position="center" showCaption="false"}

Then, at the bottom of the edit chart modal, you can choose whether you want to customize the series, or customize each item. 



::Image[]{src="https://lh7-us.googleusercontent.com/I_IdddbUbv7lGjM1njGv_DXuaGJzUZ2VfGwfno1ZqgvWQ-8mcAgYaH-ouBXegcYetdP8BS3ObEf5hz9bGOY-dtD1a0A7GRexZLjZ28dziW-jZYvFKwr9stckyc76jQMYHGkqF2CGeZJ9zTnpp1vsi-I" size="80" width="509" height="44" position="center" showCaption="false"}

Both options will use Carrot [methods](https://docs.charthop.com/methods) that are chained together. Take a look at the Carrot filter box at the bottom of the edit chart modal:



::Image[]{src="https://lh7-us.googleusercontent.com/E58dZXQ6n3PzUkFAAlrUVXeMAGUiIysDq0RJxob-jpYzjDf1bDS2_RSgmuypCxa13_1ZpuMlvwCXVu3FFQTQHhoAM6HLpjne7VXEcPBryTpJ7ZMhYobJmUcJef6MKBHso3845gEKmZmBWmarNJHKeOI" size="80" width="874" height="76" position="center" showCaption="false"}

If we break this expression down, we have the following: 

- **db.job.find** = look at jobs in the ChartHop database 
- **(jobFilter)** = make sure to query any jobs that meet this specific criteria. This filter is found in the dashboard or chart level filters. 

![](https://lh7-us.googleusercontent.com/S6oK10uucNaWeMe_iwkQLLthVrtlSe-XSSdCvgLd_2NjKLx8EOdK4dFacUyyKtWBIRi6TwWfkTBJOE02TN01-hk2fEtl6XkBTyI4xpX2R51OwSYdTz1H7p4CPrcz6TrZcyK6U2_vZpQHeIcgJmE6cHQ)

- **.sum()** = return the sum of entries for the field I’m looking at. Learn more about this and other methods [here](https://docs.charthop.com/sum).




## Grouping by values

groupBy allows you to view data by different variables. Below is a chart that looks at headcount by ethnicity, from October 22, 2024 to April 22, 2024. 



![](https://lh7-us.googleusercontent.com/o0s-Rx65C94-6cI8uFGWnspZJMeUhTq0NFNPd6qDiPhXBnPJVI1KZ8HeM_vM8UsTAJWCm4DFmCWEXemVtjlepJh_NVpxLvSAq9QmKi8hisFKPsT8hZOEg7h8iW1Lpwn4uIjoVKv87KDJU1x8KEHvFho)

Group by values are dynamic- as your departments and other values change in ChartHop, any chart that looks at that attribute will automatically update with new values. 



![](https://lh7-us.googleusercontent.com/H_IVjwi1kWKE-nvgb30xjEhlV5w7-Az-VnhBNQCqje2lPzb3SAf6vOkhTHtIliQXDJfN55eO-zoDs4IwMzgZJL1vD-QDncx5TMxY8utCl3P5ZSc6bAndzNYfxuA0cq96jdVBbiU_lzVDj_dybL7gdMg)

For this chart, you can see we added the “groupBy” value. The chart is now displaying all jobs in the ChartHop database that meet the assigned filter, sorted by ethnicity. 

### Grouping by 2 values 

You can group by up to 2 values in a non-time series chart. You would write that in the Carrot Expression like: 

`db.job.find(jobFilter).groupBy{expression1, expression2}.sum{}` 

For example, if you wanted to see headcount by gender and department:

`db.job.find(jobFilter).groupBy{department, gender}.sum{headcount} `

### Grouping by persons

You can now group by persons as well. For example, if you wanted to see metrics by recruiter, you could write:

`db.job.find(jobFilter).groupBy{recruiter}.count()`

This will group by the recruiter field, therefore updating as recruiters move through your organization. 

## Common queries

We have simplified the syntax for our most commonly used queries. These work in other parts of the platform, like actions, profile tabs, and resources as well.

`findHires(fromDate, untilDate)` displays hires between the specified interval.

`findHires('2024-01-01', '2024-02-01')`returns all the hires that happened in the month of January of 2024. 

You can chain methods with these functions as well:

- `findHires('2024-01-01','2024-02-01'.filter{dept:engineering}.count()`Returns the number of hires that happened in the month of January in the engineering department. 
- `findDepartures(fromDate, untilDate)`- returns all departures within time frame
- `findMoves(fromDate, untilDate)`- returns all moves within time frame
- `findPromotions(fromDate, untilDate)`- returns all promotions within time frame
- `turnoverRate(intervalFrom, intervalUntil[, jobFilter[, depart filter][, groupBy])`-returns turnover rate for the start date to end date on your dashboard range

Other ways to apply the turnover rate function: 

- `turnoverRate('-1y+1d', intervalUntil, jobFilter, null, {ethnicity})`- returns annual turnover rate for a year from the end date on your dashboard range, for the specified job filter, organized by ethnicity. 
- `turnoverRate('-1y+1d', intervalUntil, jobFilter)`- returns annual turnover rate for a year from the end date on your dashboard range, for the specified job filter. 

How we calculate turnover rate: 

`turnoverRate('2023-01-01', '2023-06-01', jobFilter)`

- If headcount was 60 on 2023-01-01
- And headcount was 100 on 2023-06-01
- And 20 departures happened from 2023-01-01 through 2023-05-31
- Turnover rate will be 20/mean(60,100) = 20/80 = 25%

## Querying form responses

You can pull form responses into a dashboard easily as well. 

`findAnswers(questionId, fromDate, untilDate)`

findAnswers('downwardReviewRating', '2024-01-01','2024-02-01') returns the form answers to the question linked to the “downwardReviewRating” field that were submitted during the month of January, 2024. 

You can chain these with methods: 

`findAnswers('downwardReviewRating','2024-01-01','2024-02-01').mean{value} `returns the average downwardReviewRating score. 

You can also utilize groupBy if needed: 

`findAnswers('downwardReviewRating','2024-01-01','2024-02-01').groupBy{submitPerson.department.mean{value} `returns the average downwardReviewRating score, grouped by the department of the person who submitted the form. 

You can retrieve data from a specific assessment using findAnswers as well:

`findAnswers(questionId, assessmentId, fromDate, untilDate)`




﻿[﻿Packages](https://www.charthop.com/pricing/)**: Headcount Planning** | ﻿**Compensation Reviews**﻿ | **HRIS** ﻿

[title] Create a backfill for a job
[path] ChartHop for Administrators/Managing people and jobs/Working with jobs/

You can backfill directly from the **Org Chart** to reflect that you intend to replace a current employee. When you backfill, the employee remains on the **Org Chart** until terminated and a new open job is created with a start date of two months from today's date, rounded down.

:::hint{type="warning"}
When a backfill should not display to the rest of your ChartHop organization, be sure to set **Sensitivity** to **Highly sensitive** so that only recruiters with Sensitive access can view the open role. [Learn more.](https://docs.charthop.com/sensitive-data)
:::

![Adding a backfill from the Org Chart](https://api.archbee.com/api/optimize/CXAjUAezd9VEEVQBIYmdw/2mg-3PFfSKuQce9puETSy_screenshot-2024-01-19-at-33636-pm.png)

To add a backfill for a job:

1. From the left sidebar, select **Org Chart**.
2. On the **Org Chart**, select the person to backfill.
3. In the Profile Summary, from **Edit job** menu, select **Backfill**.
4. In the **Backfill job** dialog, edit the job information copied from the backfilled employee as follows:
   1. **Structure** - General information including title, department, and location.
   2. **Compensation** - Compensation information including salary and bonus.
   3. **Recruiting** - Recruiting information including hiring status and target start date.
   4. **Description** - A general description of the role.
   5. **Custom fields** - Any custom data added by your organization, if available.[ Learn more.](https://docs.charthop.com/custom-fields)
5. Select **Save to Primary**.
   A new backfill appears on the **Org Chart**.

:::hint{type="info"}
You can also create a backfill from the **Data Sheet**. To do this, in the row menu (⋮) on the left side of the row for the person to backfill, select **Backfill**.
:::

### Backfill a person who has left your org

You can create a backfill for a person who has left your org. To do so, use the date slider at the top of the **Org Chart** to go back to the person's last day. Then, add a backfill. The backfill appears in your current ChartHop **Org Chart**.

### Viewing historical backfills

ChartHop saves backfill information for every position. This information is Sensitive ([learn more](https://docs.charthop.com/sensitive-data)). You can view information about which jobs were backfilled and by whom in two ways:

- On the **Org Chart**, go to a person's profile and open the **Job History** tab to view all historical backfills for a job.
- On the **Data Sheet**, go to **Select columns** > **Recruiting** and select **Historic Backfill** to view the most recent backfill for a job.

:::hint{type="warning"}
On the **Data Sheet**, you can also use **Backfill For** to view the most recent backfill for an open job. This field is Org Public, but is cleared when a person is assigned to a job.
:::

### Reporting on the previous person's pay

Once a role is backfilled, you can compare the new hire's pay against what the previous holder earned in that same role. Add the **Historic Backfill** field to a report and pull `historicBackfill.baseComp` next to the current `baseComp` to see the difference. See [Compare current vs. previous pay with Historic Backfill](https://docs.charthop.com/compare-current-vs-previous-pay-with-historic-backfill).

:::hint{type="info"}
[Packages](https://www.charthop.com/pricing/): **Basic** | **Standard** | **Premium**

[Roles](https://docs.charthop.com/user-roles-and-permissions): Owner | Org editor | Recruiting editor
:::

[title] Move a person to a new job
[path] ChartHop for Administrators/Managing people and jobs/Working with people/

:::hint{type="info"}
[Packages](https://www.charthop.com/pricing/):**&#x20;Basic** | **Standard** | **Premium**[﻿﻿](https://docs.charthop.com/user-roles-and-permissions)

[Roles](https://docs.charthop.com/user-roles-and-permissions): Owner | Org editor
:::

You can move a person to a new role in your ChartHop organization by assigning them to an open role. When you do this, you specify whether the move is a transfer, promotion, or demotion. &#x20;

![Moving a person from the Org Chart](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/hP60SfS0etBPg_121-mk6_screenshot-2024-01-19-at-32848-pm.png)

To move a person to a new job:

1. From the left sidebar, select **Org Chart**. 
2. On the **Org Chart**, select the person to move. 
3. In the Profile Summary, from the **Edit job** menu, select **Move person**.
4. At the top of the ChartHop window, select the filter icon to display the **Filters** dialog.
5. In the **Filters** dialog, select **Open jobs** to display all open jobs.
6. Select the job into which you want to move the person. 
7. Select **Move**.
8. In the **Move Person** dialog, add the following information:
   1. **&#xFEFF;Move date** - The date on which the move takes place.﻿
   2. **Announce date** - The date on which the move will be announced.
   3. **Move type** - Whether the move is considered a Transfer, Promotion, or Demotion.
   4. **Notes** - Any additional notes related to the move.
9. Select **Save to primary&#x20;**&#x74;o finish moving the person.&#x20;

:::hint{type="info"}
You can also move a person from the **Data sheet**. To do so, select the row menu (**⋮**) on the left side of the row for the person to move. In the menu that displays, select **Move person**.&#x20;
:::


[title] Editing settings for a scenario
[path] ChartHop for Administrators/Planning/Scenarios/

:::hint{type="info"}
[Packages](https://www.charthop.com/pricing/)**:&#x20;**<font color="#a9a9a9">Basic</font> <font color="#000000">|</font> <font color="#000000">**Headcount Planning** | </font><font color="#000000">**Compensation Reviews** | </font><font color="#000000">**Performance** | </font><font color="#000000">**Engagement** </font>
:::

:::hint{type="info"}
[Roles:](https://docs.charthop.com/user-roles-and-permissions) Recruiting editor | Owner | Technical owner
:::

After you’ve created your scenario, you can go back and edit the scenario settings (for example, name and description). You can also adjust the dates of your scenario.

![Edit scenario](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/IzQim0BMn0GPE9Tj0dRue_editscenario.png)

### Edit scenario settings

To edit scenario settings, you must be the scenario owner and your scenario must have a status of In Progress and a review status of **Open**.

:::hint{type="info"}
For more control over how your scenario changes are affected by adjustments to scenario dates, use the **Adjust dates** option. [Learn more.](https://docs.charthop.com/editing-settings-for-a-scenario#_3sOi)
:::

To edit the settings of your scenario:

1. From the left sidebar, select **Planning**.
2. Navigate and open the In Progress scenario you want to edit.
3. On the top right corner of your scenario, select the **Actions** ▼ dropdown.
   - When scenario approvals are required for your organization, select the **Submit for approval&#x20;**▼ button instead.
   - You cannot edit scenarios that are currently under approval review.
4. Select **Edit scenario details**.
5. Edit your scenario settings.
   - **Scenario name** - The name of the scenario (for example, Q4 Hiring Plan).
   - **Start date** - The date when the changes proposed in the scenario are intended to go into effect. This can be either the current date or an exact date. 
   - **Description** - A description of the scenario.
6. Select **Save** to save your edits.

### Adjust the dates of a scenario

You can make adjustments to the dates of your scenario after you’ve created it. 

To adjust scenario dates, you must be the scenario owner and your scenario must have a status of In Progress and a review status of **Open**.

![Adjust scenario dates](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/QKTT2N2Ir6m2HSiCbCVym_scenarioadjustdates.png)

To adjust the dates for your scenario:

1. From the left sidebar, select **Planning**.
2. Navigate and open the In Progress scenario you want to edit.
3. On the top right corner of your scenario, select the **Actions** ▼ dropdown.
   - When scenario approvals are required for your organization, select the **Submit for approval&#x20;**▼ button instead.
   - You cannot edit scenarios that are currently under approval review.
4. Select **Adjust dates**.
5. Enter a new start date for your scenario. 
   - This is the date when the changes proposed in the scenario are intended to go into effect. 
   - The **New start date** field defaults to the current date.
6. Select how the new date is applied to the changes in your scenario:
   - Select whether dates are adjusted only for scenario changes prior to the new start date you entered.
     - When you select the **Only changes prior** option, all changes in the scenario are adjusted to the new start date.
   - Select whether dates are adjusted equally for all changes in the scenario.
     - When you select the **All changes in scenario** option, you can enter a number of days to adjust scenario changes forward.
     - All changes are updated by the number of days you enter. For example, when you enter 3 days, a scenario change with a date of 04/10 and another scenario change with a date of 04/12 are both adjusted to 04/13 and 04/15 (+3 days). 
7. Once you’re done making adjustments, select **Adjust dates**.
8. Select **Close** once all dates have been adjusted.
   - The Date column in the Changes tables of your scenarios reflects the adjusted dates.


[title] Troubleshooting compensation bands
[path] ChartHop for Administrators/Planning/Compensation bands/

This section provides answers and solutions to potential questions and issues you may run into when setting up your compensation bands in ChartHop.

### Compensation bands setup

**What if I don’t have unique names for each band ID?**

All compensation bands must have unique names. If your names are not unique, ChartHop recommends creating a repeatable system of naming conventions for your compensation bands.

***

**Why don’t I see the location multiplier option?**

The location multiplier displays only when you have location data already populated within ChartHop.

***

**Where do locations come from?**

The locations that display for multiplier configuration are populated from the location groups you create in ChartHop. To view or add a location group, from the left sidebar, select the Settings (gear) menu and select **Groups**. Select the **Location** tab to view all your defined locations.

***

**What if my job levels aren’t exact matches with Radford or Option Impact? Do I still have to map to those market job leveling systems?**

When setting up your job levels in the questionnaire, in the **Job level source** dropdown, select **In-house job leveling system**. In the **Comparable market job level system** dropdown, select **None / Other**. Setting up your job levels with these options allows you to specify custom names for your job levels and skip any mapping to Radford/Option Impact.

***

**Can I modify the spreadsheet I downloaded from the wizard?**

No, do not modify the headers or order of the columns in the spreadsheet. Do not add or delete any columns. ChartHop validates your compensation data based on the included column headers. To change the options that are included in the spreadsheet, feel free to go back through the wizard and adjust your questionnaire selections. If you’ve already completed the wizard, see the following question and answer.

***

**I forgot to select an option during the questionnaire setup - how do I go back and add it?**

Unfortunately, the spreadsheet columns are set once you complete the initial setup. ChartHop recommends the following workaround:

1. From the left sidebar, select **Data Model**
2. From the sub-menu, select Job Architecture > **Compensation Bands**.
3. Select **Edit** to display the Edit compensation bands settings.
4. Select **Import changes**.
5. Select **Download template with current data**.
6. Return to the Edit compensation bands settings.
7. In th&#x65;**&#x20;Delete** section, select **Delete all compensation bands** to deactivate the current set of compensation bands.
8. After you confirm the compensation bands have been deleted/deactivated, repeat the setup wizard process again.
   - Please be sure to select the same options (or as similar as possible) as you did in your previous configuration.
   - Select the new option(s) you want to add.
9. Download the new spreadsheet that is generated. 
10. Copy the data from your previous spreadsheet into the new spreadsheet.
11. Upload the new spreadsheet with the updated compensation band options.
12. When you set an effective date, you must set the date in the future (for example, set it to the following day) so that the compensation bands do not overlap.

***

**Can I upload my compensation bands spreadsheets using the standard .csv importer?**

No, your compensation bands spreadsheets must be uploaded either within the compensation bands wizard or within the Edit compensation bands settings.

***

**There’s empty fields in my spreadsheet - should I enter values in those fields?**

No, that is not necessary. For example, if you selected both Hourly and Annual with different specification formats for each, you only need to fill out the columns that correspond to each of those specific formats. 

***

**I opened the downloaded spreadsheet in Numbers (instead of Excel) and I’m seeing weird formatting and formulas?**

ChartHop recommends using Excel for filling out your downloaded spreadsheet. However, if necessary, you can still use Numbers to enter your compensation band data. The spreadsheet will automatically validate that the values you enter are in the right format and once you upload to ChartHop, there is an additional data tidying-up step to help make sure your data is uploaded correctly.

***

**I selected Save and nothing seems to happen.**

If you have a lot of compensation bands (for example, more than 300), it can take a while to upload all of your data. This can take anywhere between 30 seconds to a couple of minutes. 

***

**The compensation bands wizard is stuck on a step and I can’t move forward in the setup process.**

Please reach out to ChartHop customer support for help with technical issues during setup. 

### Using compensation bands

**How do I connect employees or jobs to compensation bands?**

Once your bands are created, you can select **Map your jobs to bands&#x20;**&#x61;t the end of the wizard or select **Edit** and select **Upload mapping** within the Edit compensation bands settings.

***

**Do I have to map compensation bands to every job?**

No, you do not have to set compensation bands for every job. However, you must map a compensation band to every job that you do want to be associated with one, either using the spreadsheet or manually within th&#x65;**&#x20;Compensation** tab of th&#x65;**&#x20;Edit Job** dialog.

***

**Can jobs automatically be updated with the corresponding compensation band based on job title?**

Unfortunately, not at this time.

***

**What happens to the compensation band if a person leaves a job?**

Compensation bands are associated with jobs, not the individual, so it will continue to remain associated and visible. Please keep this in mind if the compensation band should change for the next hire or if you don’t want the new hire to see the job’s previous band.

***

**What determines the order of compensation bands in the generated spreadsheet and on the graph view?**

Compensation bands display in the order you enter them in the downloaded spreadsheet. 

***

**What are the “with multipliers” fields?**

When your ChartHop organization uses built-in multipliers, the “with multipliers” versions of fields display the value of the underlying field (for example, Comp band base minimum) with any applicable multipliers already applied. 

***

**Can I expand access to compensation bands beyond those with Sensitive access?**

Unfortunately, not at this time.

### Editing compensation bands

**Does my spreadsheet have to include all my compensation bands when editing or can I just add the new ones I wish to create?**

You must currently include all compensation bands rows to prevent potential error messages.

***

**Why did the dropdown/formatting disappear when I have the downloaded spreadsheet open in Excel?**

Formatting is applied only to the first 999 rows. If you have more than 1000 compensation bands, you must copy the formatting to those blank rows before proceeding.

:::hint{type="info"}
[Packages](https://www.charthop.com/pricing/)**:&#x20;**<font color="#a9a9a9">Basic</font> <font color="#000000">|</font> <font color="#000000">**Standard*** | **Premium**</font>****

\* Available as an add-on
:::


[title] Creating Groups
[path] ChartHop for Administrators/Managing groups/Custom Groups/

:::hint{type="warning"}
This feature is currently in Alpha. Be one of the first customers to try it! Please share any feedback with the ChartHop team.&#x20;

### How to setup a Alpha Feature

1. Contact [ChartHop support](mailto\:support@charthop.com) or your CSM if you have one. They can activate the feature for you.&#x20;
2. Read below for setup instructions and context on how the feature will work.
:::

## Overview

Groups can be created within a group type. This allows you to further customize how your company is organized.&#x20;

![](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/fwZzWMJTwuGhIiXeYtrna_image.png)

## Creating a group

You can add groups by selecting the group type and clicking "Create \[group name]". In the example below, our Product group type has 2 groups within it for our current projects- AI and Dashboards.&#x20;

**Description**: This is visible in the groups table, and in the group details where you manage membership.

**Parent Group**: You can nest groups underneath other groups in a group type.

**Start date**: The date at which this group will be visible in ChartHop (for example, on the org chart).

**Color**: The color you choose will be used in the org chart display

**Code and Alias**: These are optional, and can be used to sync data from other systems.

### Assigning members

Once a group is created, clicking the name of the group will open up the group details page.&#x20;

::Image[]{src="https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/pe-cxi3eYlDSUxNINxiSN_image.png" size="84" width="2104" height="982" position="center" caption="Group details" showCaption="true"}

The positions available are created in the group type. Learn more about creating group types here: [Creating a new Group Type](docId\:xKX7rahylX1iKOI3p-QCC)&#x20;

1. Click "Manage Members"&#x20;
2. Choose the person that should fit the roles you want to fill. You can also add additional members until your team is full.&#x20;

### Editing group details

From the Group details page, you can click "Edit details" if you want to change the name, description, parent groups, start date or color.&#x20;

## What can I do with groups?

A lot! You can leverage ChartHop's org charts, dashboards, datasheet, and scenarios to maximize visibility and functionality of your company's groups.

- People ops managers may group employees by product line so they can quickly understand how each product area is staffed and where there may be gaps.
- Executive teams may want to filter dashboards and analytics by acquisition group so they can compare engagement, attrition, or compensation trends across legacy and acquired teams.
- New hires may want to see org charts grouped by business unit (e.g., retail vs. enterprise) to better understand reporting lines and resourcing.
- IT directors may want to assign access to specific tools or dashboards based on group membership (e.g., “All employees in the ACME acquisition”) to manage data security.

::Image[]{src="https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/RogMVbZQMmK8Gs1YooiXK_image.png" size="64" width="1056" height="1172" position="center" caption="Example of groups in an org chart" showCaption="true"}


[title] Submit an approval request for a scenario
[path] ChartHop for Administrators/Planning/Scenarios/

:::hint{type="info"}
[Packages](https://www.charthop.com/pricing/)**:&#x20;**<font color="#a9a9a9">Basic</font> <font color="#000000">|</font> <font color="#000000">**Headcount Planning** | </font><font color="#000000">**Compensation Reviews** | </font><font color="#000000">**Performance** | </font><font color="#000000">**Engagement** </font>
:::

:::hint{type="info"}
[Roles:](https://docs.charthop.com/user-roles-and-permissions) Recruiting editor | Owner | Technical owner
:::

When approvals are enabled for your organization, you must submit an approval request for your scenario. 

:::hint{type="info"}
When approvals are not enabled for your organization, you have the ability to merge your scenario to primary when you have the appropriate permissions. [Learn more.](https://docs.charthop.com/merging-a-scenario)
:::

After you have finished proposing changes in your scenario, you can submit your changes for approval. When you submit a scenario for approval, approvers review your proposed changes and decide whether to approve or reject the scenario. Only scenario owners can submit for approval. A scenario can have multiple owners.

:::hint{type="warning"}
You cannot make any edits after you submit your scenario for approval. To make edits, you must withdraw your scenario submission. [Learn more.](https://docs.charthop.com/monitoring-your-scenario-in-review#Eb8fO)
:::

![Request approval](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/mPyPTQVTU8JRs5zUbKJ98_requestapproval.png "Request approval")

When you submit, both you and the approvers receive an email notification that the scenario has been submitted for approval. Approvers also receive a task for reviewing the scenario and are added as collaborators to the scenario.

To submit an approval request for your proposed scenario:

1. In your scenario, verify that the **Changes** tab accurately summarizes all your proposed changes.
2. Select **Request Approval**.
3. In the **Request Approval** dialog, enter a comment for the approver. 
   - This can be a quick explanation for your proposed changes or additional background information.
   - Any comments you enter are added to the **Comments** section at the bottom of the scenario.
4. Select **Submit**.


[title] Fill a job in a scenario
[path] ChartHop for Administrators/Planning/Headcount planning/Working with open jobs in a scenario/

You can propose to fill an open job in your scenario by assigning the job to a current member of your ChartHop organization or a potential new hire.&#x20;

To fill a job in a scenario:

1. From the **Data Sheet** tab in your scenario, select the row for the open job you'd like to fill.
2. Open the action menu at the left side of the row you wish to edit.
3. Select **Fill job**. The **Fill job** dialog displays.
4. In the **Person** dropdown, select an employee from your ChartHop organization to fill the open job.&#x20;
   - If the person is not currently in your ChartHop organization (for example, when the person is a new hire), then select the **New Hire** link. This displays the **New Hire** dialog where you can enter information for the new hire. Only the **First name** and **Last name** fields are required. Once you're finished, click **Save**. The job is filled with the entered new hire.
5. Enter the following information:
   - **Start date** - The start date for the person filling the job.
   - **Move type** - Whether the move is a transfer, promotion, or demotion.
   - **Notes** - Any additional notes regarding the move.
6. Select **Save to Scenario&#x20;**&#x74;o save your changes.

:::hint{type="info"}
[Packages](https://www.charthop.com/pricing/)**:&#x20;**<font color="#a9a9a9">Basic</font> <font color="#000000">|</font> <font color="#000000">**Headcount Planning** | </font><font color="#000000">**Compensation Reviews** | </font><font color="#000000">**Performance** | </font><font color="#000000">**Engagement** </font>
:::


[title] Reassign an approver for a scenario
[path] ChartHop for Administrators/Planning/Scenarios/

You can reassign an approver when the original approver for a scenario is unavailable (for example, due to PTO or family leave).

:::hint{type="info"}
The person who originally submitted the scenario for approval can’t reassign the approver. A person with Editor access to the scenario must reassign the approver.
:::

![Reassign approver](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/TO5gWXUNWzPS0vpg4o0FG_reassignapprover.png "   ")

To reassign an approver:

1. From the left sidebar, select **Planning**.
2. Access the scenario whose approver you want to reassign. 
   - The scenario should have a Review status of **In review**.
3. Select **View details** from the banner at the top of the scenario.
4. Next to the approver you want to reassign, select the **⋮&#x20;**&#x6D;enu and select **Reassign**.
5. In the **Approver** field, enter the name of the replacement approver.
6. Enter a comment to explain the reassignment.
7. Select **Reassign**. The scenario is shared with the new approver for review. A notification is also sent to the new approver.


[title] Scenario audit log
[path] ChartHop for Administrators/Planning/Scenarios/

# Scenario audit log

The scenario audit log shows a complete, time-stamped history of every change made inside a scenario: what was changed, who changed it, when, and what the previous value was. Use it to review collaborator activity, investigate scenario changes, or produce a record for compliance and approval workflows.

![](https://api.archbee.com/api/optimize/CXAjUAezd9VEEVQBIYmdw/1zk9wGvD4xwsK6Pn3iIzK-20260519-164312.png)

## Who can access it

Anyone who can open the scenario can open its audit log. There's no separate permission. Two viewers may see slightly different logs for the same scenario; see *Sensitive fields* below.

## How to access it

Open the scenario and click the **Audit log** tab in the scenario header.

You can also jump to a specific entry from the **Changes** screen by opening the action menu on a row and selecting **View on audit log**.

::Image[]{src="https://api.archbee.com/api/optimize/CXAjUAezd9VEEVQBIYmdw/F0zD3lX2KEi-S15UnF0KP_styled-screenshot-1.png" size="64" width="564" height="596" position="center" caption="Clicking the three dot menu shows 'View on Audit Log' option" darkWidth="564" darkHeight="596" showCaption="true"}

## What you'll see

The audit log is a table grouped by job. Each row is a single change to a single field on that job, sorted by **Modified at** (most recent first). Click a row to expand it and see the field-by-field breakdown.

| **Column**         | **What it shows**                                                                                                                                                                   |
| ------------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Job**            | The job the change applies to. Click the job title to open it in the org chart at the scenario's effective date.                                                                    |
| **Change type**    | The category of change: **Hire**, **Depart**, **Move**, **Comp**, **Create**, **Update**, or **Delete**. Color-coded for quick scanning.                                            |
| **Effective date** | The date the change takes effect, stored at the moment the change was made. Editing the change later updates this value on subsequent audit entries but doesn't rewrite prior ones. |
| **Modified by**    | The user who made the change. For changes made through an integration or API token, this is the app's identity; the real user who initiated it is recorded internally as well.      |
| **Modified at**    | The timestamp when the change was recorded, in UTC.                                                                                                                                 |
| **Event type**     | Whether this entry is an **Initial change** (first time recorded), a **Change amended** (an earlier change was edited), or a **Change cancelled** (an earlier change was removed).  |

## Expanded row details

Expanding a row reveals one line per field touched by the change, with four side-by-side values:

- **Scenario value**: the new value recorded by this change.
- **Previous value**: the value in the scenario before this change.
- **Primary value**: the value in your main organization data as of the scenario's effective date. Use this to spot when a scenario change has drifted from live data. Not shown for newly-created entries, which have no primary counterpart.
- **Source**: whether the field was overridden from its job code default. Blank for fields you set directly and for linked fields that kept the default.

![](https://api.archbee.com/api/optimize/CXAjUAezd9VEEVQBIYmdw/RHQRWG6ZMp3a4VjC-tHjd_styled-screenshot-3.png)

A multi-field edit produces one row per changed field, all sharing the same **Modified at** timestamp. An **amended** entry only contains the fields that changed in that particular edit, not the full state of the change.

### Fields linked to a job code

If your organization uses linked job code fields, the expanded row groups fields to show you exactly what was set directly and what was filled in automatically from a job code.

- Fields you set directly appear first, with a blank **Source**. When a job code was also changed, the **Job code** row appears last in this group, sitting directly above the linked fields it populated.
- A highlighted header row labeled **Linked fields (N)** (where N is the count) separates the two groups. Hovering over it shows "Linked to the job code".
- Each field beneath that header was filled in from the new job code.

| **What you see**                     | **What it means**                                     |
| ------------------------------------ | ----------------------------------------------------- |
| Field above the group, no **Source** | Set directly in this change                           |
| **Linked fields (N)** header         | The fields below were filled in from the new job code |
| Linked field, blank **Source**       | Kept the job code's default value                     |
| Linked field, **Override** tag       | Changed from the job code's default                   |

Hovering the **Override** tag shows "Changed from the job code default". If the change touched no linked fields, there is no **Linked fields** header and the row looks the same as before.

:::BlockQuote
**Tip:** To see which defaults a job code sets, see [Creating job codes](https://docs.charthop.com/creating-job-codes).
:::

![](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/90mh8cBZntx1MnKJwoxQE_override-update.png)

## Filtering and searching

Use the controls at the top of the table to narrow results:

- **Job**: limit to changes on one or more jobs.
- **Field changed**: limit to specific fields (e.g. salary, manager, title).
- **Modified by**: limit to changes made by a specific person.
- **Job title**: free-text search across job titles.

![](https://api.archbee.com/api/optimize/CXAjUAezd9VEEVQBIYmdw/Uj5NbqLt9s4KjoNRfaF7l_styled-screenshot-4.png)

## Exporting

Click **Export audit log** to download the full log as a CSV. The export runs asynchronously and contains one row per changed field. A single edit that touched five fields produces five rows, all sharing the same change ID and timestamp.

## Sensitive fields

The audit log respects your existing field-level permissions. If you can't see a compensation or other sensitive field on the job itself, you won't see changes to that field in the audit log either. When every changed field on an event would be hidden from you, the entire event row is omitted. Two users with different access levels may see different row counts for the same scenario. This is expected behavior.

## Lifecycle

Audit history is retained permanently. Archiving, merging, or deleting a scenario doesn't remove its audit log; users who can still access the scenario can still view its history. Preview and Test scenarios aren't audited.

## Tips

- The audit log is read-only. To undo a change, go back to the **Changes** screen and edit or remove it there. The removal will appear in the audit log as a **Change cancelled** entry.
- New entries can take a few seconds to appear after a change is saved.
- Looking for approval and rejection comments with the full approval chain? See the Approval audit log.

[title] Creating individual jobs in a scenario
[path] ChartHop for Administrators/Planning/Headcount planning/Creating new jobs in a scenario/

In the **Org Chart&#x20;**&#x77;ithin your scenario, you can quickly add a new job to your headcount planning scenario by adding a direct report or by cloning an existing job.

![Create a new job directly from the scenario Org Chart.](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/uK502Tgv_2_C4R1sKkYrk_hpadd-job.jpg " ")

### Add a direct report in a scenario

To add a new direct report for the currently selected role:

1. Within your scenario, select th&#x65;**&#x20;Org Chart&#x20;**&#x74;ab.
2. In the **Org Chart**, select the employee for whom you'd like to create a new direct report.&#x20;
3. In the profile summary that displays, select the arrow button to expand the dropdown menu.
4. Select **Add direct report**. The **Create job** dialog displays.
5. In th&#x65;**&#x20;Create job&#x20;**&#x64;ialog, add your job detail information to the appropriate sections:
   - **Structure** - General information about the role, including title, department, and location.
   - **Compensation** - Compensation information about the role, including salary and bonuses.
   - **Recruiting** - Recruiting information about the role, including hiring status and start date.
   - **Description** - A general description about the role.
6. Select **Save to Scenario**.

:::hint{type="warning"}
If you do not see your new job in the **Org Chart** after saving your changes, double-check the Start Date for the job and use the Timeline feature to update the **Org Chart** to the appropriate date.
:::

### Clone a job in a scenario

You can also create new jobs in the **Org Chart** by cloning existing jobs. This is helpful for instances where you don't need to make extensive changes to the existing job details and description.

To clone an existing job:

1. Within your scenario, select th&#x65;**&#x20;Org Chart&#x20;**&#x74;ab.
2. Select the employee or open job you'd like to clone.
3. In the profile summary, select the arrow button to expand the dropdown menu.
4. Select **Clone Job**. The **Create Job** dialog displays.
5. Make any edits to the details of the newly cloned job.
6. Select **Save to Scenario**.

:::hint{type="info"}
[Packages](https://www.charthop.com/pricing/)**:&#x20;**<font color="#a9a9a9">Basic</font> <font color="#000000">|</font> <font color="#000000">**Headcount Planning** | </font><font color="#000000">**Compensation Reviews** | </font><font color="#000000">**Performance** | </font><font color="#000000">**Engagement** </font>
:::





[title] Working with open jobs in a scenario
[path] ChartHop for Administrators/Planning/Headcount planning/

You can use your headcount planning scenario to propose changes in your ChartHop organization's internal structure when hiring and filling open jobs.

This section includes the following topics:

- Move a person in a scenario
- Exchange a job in a scenario
- Fill a job in a scenario

### How an open job's start date affects fiscal-year cost

An open job's **planned start date** determines how much of it lands inside a given fiscal year or quarter. When you view scenario cost by **Fiscal year** or **Quarter** (see [Viewing scenario cost by fiscal year or quarter](https://docs.charthop.com/scenarios)), moving a job's start date later in the period lowers its cost for that period, because the job is only paid for the months it's active. The **Annualized** view doesn't change: it always reflects the full-year cost.

For example, for an open Staff Engineer role at $200,000/year in a fiscal year running Apr - Mar:

| Planned start | Months active in the fiscal year | Fiscal-year cost | Annualized |
| ------------- | -------------------------------- | ---------------- | ---------- |
| October 2026  | 6                                | \~$100,000       | $200,000   |
| January 2027  | 3                                | \~$50,000        | $200,000   |

This makes the financial upside of a later start date visible as you plan: push the start date out, and the fiscal-year cost drops live.

:::hint{type="info"}
An open job only contributes cost once it has a salary to price from (planned compensation or a compensation band). Unpriced open jobs count as $0 and won't move the fiscal-year figure.
:::

:::hint{type="info"}
[Packages](https://www.charthop.com/pricing/)**:&#x20;**<font color="#a9a9a9">Basic</font> <font color="#000000">|</font> <font color="#000000">**Headcount Planning** | </font><font color="#000000">**Compensation Reviews** | </font><font color="#000000">**Performance** | </font><font color="#000000">**Engagement** </font>
:::

[title] Exchange a job in a scenario
[path] ChartHop for Administrators/Planning/Headcount planning/Working with open jobs in a scenario/

In your headcount planning scenario, you can exchange jobs between two people.&#x20;

:::hint{type="warning"}
When you exchange jobs between two people, ChartHop counts the action as two connected moves. If one job is removed, the other job is also removed.
:::

To exchange jobs between two people:

1. From the **Data Sheet** tab, select the row for the employee you'd like to exchange.
2. Open the action menu at the left side of the row you wish to edit.
3. Select **Move person**. The **Move Person&#x20;**&#x64;ialog displays.
4. In the **Moving into job** dropdown, select the occupied job into which you are moving the person.
5. Enter the following information:&#x20;
   - **Move date** - The date on which the move will take place.
   - **Announce date** - The date on which the move is announced to the organization.
   - **Move type** - Whether the move is considered a Transfer, Promotion, or Demotion.
   - **Additional notes** - Any additional notes related to the move.
6. Select **Save to Scenario&#x20;**&#x74;o save your changes. Once you save your changes, the jobs are exchanged in your scenario.&#x20;

:::hint{type="info"}
[Packages](https://www.charthop.com/pricing/)**:&#x20;**<font color="#a9a9a9">Basic</font> <font color="#000000">|</font> <font color="#000000">**Headcount Planning** | </font><font color="#000000">**Compensation Reviews** | </font><font color="#000000">**Performance** | </font><font color="#000000">**Engagement** </font>
:::


[title] Assign reviewers and approvers
[path] ChartHop for Administrators/Compensation reviews/Setting up a compensation review/

*Reviewers* are responsible for reviewing employee compensation, proposing compensation changes, and submitting those changes up the approval structure. Reviewers have a pod, or group, of people whose compensation they're responsible for reviewing. This pod can include direct reports as well as multiple levels of employees for review.

*Approvers* are responsible for approving the compensation changes that were submitted to them and submitting those approvals further up the approval structure (either to another approver or to a final approver, depending on the structure).

A person can be both a reviewer and an approver.

A *Final approver* completes the final review of all compensation changes made in a compensation review cycle. You can assign multiple final approvers.

To assign reviewers and approvers, open an existing compensation review with a status of **Not started** or **Paused**. Select the **Reviewers & approvers** tab.

:::hint{type="info"}
Initially, only managers with direct reports can be added as reviewers and approvers in a compensation review. However, you can later reassign reviews to a person without direct reports (for example, an HRBP or other employee). [Learn more.](https://docs.charthop.com/assign-reviewers-and-approvers#KO9tI)
:::

### Assign reviewers and approvers

Use the **This group is included in the comp review as reviewers and approvers** dropdown to define who participates as a reviewer or approver. Choose from:

- **All managers** — All managers with direct reports are added as reviewers and approvers.
- **Custom** — Define custom criteria using filters or a Carrot query to include a specific subset of managers.

Your settings are saved automatically once a selection is made.

The list displays each reviewer with their **Reviewing** and **Approving** counts. Use the **Type** filter in the panel to narrow the list by reviewer type. Select **View on Data Sheet** to open a Data Sheet view of the full reviewer list.

### Per-employee actions in the reviewer panel

When you select an individual employee within a reviewer's panel, you can take the following actions on that employee:

- **Reassign reviewer** — Move the employee to a different reviewer's pod.
- **Make employee ineligible** — Remove the employee from the compensation review entirely.

### Reassign a reviewer in the compensation review

You can reassign a reviewer when you want that specific individual to review compensation for another pod or group of employees.

You can also reassign a reviewer to exclude another manager from participating in the review. For example, you can exclude an individual manager because they are new to the organization or because they will be on leave during the compensation review cycle.

To reassign a reviewer:

1. Open an existing compensation review with a status of **Not started** or **Paused**.
2. Select the **Reviewers & approvers** tab.
3. In the **Reviewers & approvers** list, select the name of the manager you want to remove. A panel displays the manager and all their direct reports.
4. Select **Remove \[name] reassign all**. The **Reassign to another reviewer** dialog displays.
5. Enter the name of the manager to whom you want to reassign the employee reviews.
6. Select **Reassign**.
   - All employee reviews are reassigned to the new manager. The excluded manager displays in the **Reviewer & approver rules & exceptions** section under **Removed reviewers / reassignments**.
   - Select **Reset** under the **Removed reviewers / reassignments** list to undo all exclusions and restore the original assignments.

### Assign final approvers

The final approver is responsible for reviewing all changes at the end of a compensation review. You can assign more than one final approver.

To assign a final approver:

1. Open an existing compensation review with a status of **Not started** or **Paused**.
2. Select the **Reviewers & approvers** tab.
3. In the **Reviewer & approver rules & exceptions** section, enter the name of the person you want to assign as a final approver in the **Include final approvers** field.
4. Select the name of the final approver.
   - Once assigned, final approvers display both in the **Include final approvers** field and are tagged as final approvers within the **Reviewers & approvers** list.
   - Your settings are saved automatically.

:::hint{type="info"}
[Packages](https://www.charthop.com/pricing/): Basic | **Standard**\* | **Premium**

\* Available as an add-on
:::

[title] Undo job changes
[path] ChartHop for Administrators/Managing people and jobs/Working with job history/

You can undo changes you make to people or jobs. You can do this from the History page or from the **Job history** tab within an employee's profile.

For example, you can delete a new hire who was not actually hired or a termination that was accidentally entered. When you delete these changes, the change you make is permanent and cannot be undone. In order to re-do the action, you'll need to go through your process again.

:::hint{type="warning"}
If you delete a job change from either the History page or the **Job history** tab, there will no longer be a record of the change in ChartHop.
:::

### Delete a job change from the History page

You can use the History page if you want to make multiple changes to your job history as it gives you an easy look into the job history across your organization.&#x20;

1. In the left sidebar, select **Admin**.&#x20;
2. In the sub-menu, select History > **Org Changes History.&#x20;**
3. At the far right of the row for the change to delete, select the trash can icon.
4. In the dialog, select **Confirm** to confirm that you want to delete the change.

### Delete a job change from the Employee Profile&#x20;

If you only want to change an individual job history detail, such as revert a job title that was changed for an individual, you can use the respective employee's profile page.

1. Open the Employee Profile of the employee where you want to delete a change. You can do this by selecting the employee on the **Org Chart** or the **Data Sheet**.
2. Select the **Job History** tab.
3. At the far right of the row for the change to delete, select the trash can icon.
4. Select **Confirm** to confirm that you want to delete the change.

:::hint{type="info"}
[Modules:](https://www.charthop.com/pricing/) <font color="#000000">**HRIS |** </font>**Engagement | Goals | Performance |&#x20;**<font color="#000000">**Compensation Reviews |** </font>**Headcount Planning**
:::


[title] Creating teams
[path] ChartHop for Administrators/Managing groups/Teams/

To capture the structure of your ChartHop organization, you can create independent teams, or assign multiple teams to a department.

![New Team](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/ezVNUcqewOtmFkP80QS02_screen-shot-2022-04-13-at-103438-am.png)

To create a team:

1. From the **Settings** option in the left navigation bar, select **Groups**.
2. Select **Create team** from the the **Teams** tab.&#x20;
3. From the **New Team&#x20;**&#x64;ialog box, configure your team using the following settings:
   - **Team name** - The name of the team.
   - **Team** **code&#x20;**- A short code or code number used to uniquely identify the team in other systems.
   - **Aliases&#x20;**- An alternative name that can be used for the team when syncing with remote systems. [Learn more](https://app.archbee.io/docs/dt2_0qNK3-GKpcsAonAUq/y3VbzSLSAfMYj0al9U-6X).
   - **Color&#x20;**- The color that will be applied in the org chart to the team.
   - **Image&#x20;**- An image shown on the team's profile page.
   - **Parent group** - The group that this group is a child under.
4. Select **Save** when you're done.

:::hint{type="info"}
[Modules:](https://www.charthop.com/pricing/) <font color="#000000">**HRIS |** </font>**Engagement | Goals | Performance |&#x20;**<font color="#000000">**Compensation Reviews |** </font>**Headcount Planning**
:::


[title] Monitoring your scenario in review
[path] ChartHop for Administrators/Planning/Scenarios/

:::hint{type="info"}
[Packages](https://www.charthop.com/pricing/)**:&#x20;**<font color="#a9a9a9">Basic</font> <font color="#000000">|</font> <font color="#000000">**Headcount Planning** | </font><font color="#000000">**Compensation Reviews** | </font><font color="#000000">**Performance** | </font><font color="#000000">**Engagement** </font>
:::

:::hint{type="info"}
[Roles:](https://docs.charthop.com/user-roles-and-permissions) Recruiting editor | Owner | Technical owner
:::

After you submit an approval request for your scenario, the review status of your scenario changes from **Open** to **In Review** and your scenario cannot be edited. 

A banner at the top of your scenario lets you know the current status of your scenario. You can select **View details** to see a timeline of the approvals process, including the names and titles of the approvers and changes in review status.

![View details for approvals](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/FfJpty30t6bQ2DrbZ6imr_monitoringapproval.png "View details for approvals")

### Send a reminder to your scenario approver

When your scenario is pending approval, you have the ability to send a friendly reminder to the approver from the Approvals details of your scenario.

To send a reminder:

1. Access your scenario. Your scenario should have a status of **In review**. 
2. In the banner at the top of the screen, select **View details**.
3. In the Approvals details that display, select **Send reminder**.
   - ChartHop sends an email reminder to the approver whose approval is pending.

### Edit your scenario after it has been submitted

When your scenario is in a status of **In review**, it is locked and you cannot make any edits. In order to make any additional changes, you must withdraw the approval request for your scenario. 

Withdrawing your scenario removes the approval request from the Tasks of all approvers and returns it to a status of **Open**.

:::hint{type="info"}
If approvers have already given their approval, you can still edit your scenario by selecting **Edit scenario**. However, this changes the status of the scenario from **Approved** to **Open&#x20;**&#x73;o you’ll have to resubmit the scenario again for approval after you have completed your edits.
:::

![Withdraw scenario](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/_HyrgNhaxF8560ttxTSfM_withdrawapprovals.png "Withdraw scenario")

To withdraw a scenario:

1. Access a scenario that is either **In review** or **Approved**. 
2. In the banner at the top of the screen, select **Withdraw request**.
3. Enter a reason for withdrawing the scenario. 
   - You can use this to describe the additional changes you are making or explain any additional reasons for withdrawing the approval request.
   - Any comments you enter are added to the **Comments** section at the bottom of the scenario.
4. Select **Withdraw**.
   - The approval request is withdrawn and the scenario changes to a status of **Open**, allowing you to make additional edits.
   - Approvers are sent an email notification that the approval request has been withdrawn.

### Edit your scenario after it has been rejected

When your scenario is rejected, approvers send it back to you with their comments. You are also notified by email that your scenario has been rejected.

To view and edit your rejected scenario:

1. Access your scenario. Your scenario should have a status of **Rejected**. 
2. Comments entered by the approvers display at the bottom of the screen in the **Comments** section.
   - These comments contain feedback and additional information explaining why your scenario was sent back to you.
3. In the banner at the top of the screen, select **Edit scenario**. 
   - This changes the status of your scenario to **Open** and unlocks it for editing.
   - Once you are done revising and editing your scenario, you can resubmit it for approval by selecting **Request approval**. [Learn more.](https://docs.charthop.com/submit-an-approval-request-for-a-scenario)


[title] Propose changes in a scenario
[path] ChartHop for Administrators/Planning/Scenarios/

Once you've created a scenario, you can propose changes without affecting your primary organization in ChartHop. For example, you can add and remove jobs, move people to different managers, and plan for promotions while being able to see the structural and financial impact of your proposed changes.

The number of new jobs added and the projected annual cost of your changes are summarized at the top of the screen.

You use the following tabs when working in a scenario:

- **Changes**
- **Impact**
- **Org Chart**
- **Data Sheet**
- **Map**

The **Org Chart**, **Data Sheet**, and **Map** tabs display your organization as it would appear were the proposed changes to be enabled and put into effect.

### Changes tab

As you make changes within your scenario, each change is reflected in the **Changes** tab. This tab displays a summary of all the changes you have made to your organization in the scenario, making it easy for you and any approvers to review everything at once.

![Scenario changes](https://api.archbee.com/api/optimize/CXAjUAezd9VEEVQBIYmdw/_To9865GGfbaaLLpfRJhc_scenariochangestab.png "  ")

### Cost and budget impact

A scenario's **total cost is shown annualized** - the ongoing yearly run-rate of the changes in the scenario. Hover the cost to see how it's calculated, including any custom cost formula or multiplier your organization has configured.

When a scenario affects a budget, its **budget impact bar** shows how the scenario's changes move that budget's spend:

- The bar labels the **cost basis** the budget uses, so you know whether its numbers are annualized or measured over the budget's period.
- A marker on the bar shows the **pre-scenario spend level**, so you can see at a glance how much the scenario adds to (or releases from) the budget.

For the difference between Annualized and Total cost over period, see [Cost basis](https://docs.charthop.com/budgets#cost-basis) on the Budgets page.

### Impact tab

On the **Impact** tab, you can pull in pre-configured reports to make sure that the changes you've made to your ChartHop organization are in line with projected goals. Reports display side by side to show both the primary and scenario situations.

![Impact tab](https://api.archbee.com/api/optimize/CXAjUAezd9VEEVQBIYmdw/lApABOm-JeXv07v-NEXzZ_scenarioimpact.png "  ")

:::hint{type="info"}
You can also see the impact of your scenarios directly within a specific report. While accessing a report, use the **Scenarios** dropdown to select a scenario and see how specifically that scenario would affect the data in the current report. [Learn more.](https://docs.charthop.com/filtering-data-in-a-report)
:::

### Org Chart tab

The **Org Chart** tab gives you all the capabilities of the standard **Org Chart**, but without committing any of your changes. You can use this tab to add and remove jobs, edit roles, and generally reorganize your ChartHop organization within a visual format. [Learn more.](https://docs.charthop.com/org-chart)

Any nodes you move or add are highlighted within the **Org Chart** to make those changes easier to identify. Depending on your changes, nodes can display in the following highlighted colors:

- **Purple** - Indicates this is the currently selected node.
- **Green** - Indicates this is a new job that you've created.
- **Yellow** - Indicates you've edited or moved this job or the person in the job.
- **Red** - Indicates you've terminated this job.

### Only Scenario Changes

By default, the Org Chart in a scenario is filtered to show only the roles that have changes in the scenario. This helps you focus on what the scenario actually affects, rather than scanning your entire org chart.

To view the full org chart, turn off the **Only Scenario Changes** toggle in the filter bar above the chart. You can switch it back on at any time to narrow the view back to just the roles with changes.

![](https://api.archbee.com/api/optimize/CXAjUAezd9VEEVQBIYmdw/RSlDkvbBIVkYvbQQrK-pq_screenshot-2026-07-17-at-103910-am.png)

### Data Sheet tab

The **Data Sheet** tab gives you the full power of the **Data Sheet**, without permanently committing any of your changes. You can use this tab to filter data, create different views, and freely make changes within the instance of your scenario. [Learn more.](https://docs.charthop.com/data-sheet)

![Data Sheet tab](https://api.archbee.com/api/optimize/CXAjUAezd9VEEVQBIYmdw/RnL0yh6RVLFS9QCOHCCci_scenariodatasheettab.png "  ")

### Map tab

The **Map** tab lets you visualize your proposed changes over a global map. As you change data in a scenario, the map will accurately reflect your changes. [Learn more.](https://docs.charthop.com/map)

![Map tab](https://api.archbee.com/api/optimize/CXAjUAezd9VEEVQBIYmdw/67DbwOfzUHwkUiUmaUWDG_scenariomaptab.png "  ")

:::hint{type="info"}
[Packages](https://www.charthop.com/pricing/)**:&#x20;**<font color="#a9a9a9">Basic</font> <font color="#000000">|</font> <font color="#000000">Headcount Planning | </font><font color="#000000">Compensation Reviews | </font><font color="#000000">Performance | </font><font color="#000000">Engagement </font>
:::

[title] Collaborating in a scenario
[path] ChartHop for Administrators/Planning/Scenarios/

You can share your scenarios with your peers (for example, with your leadership team or with an HR business or finance partner) so that everyone can collaborate, make edits, and provide feedback. You can also share your scenario with some integrated ChartHop apps (for example, for financial planning and analysis purposes outside of ChartHop). [Learn more.](https://docs.charthop.com/financial-planning-and-analysis-apps)

In order to collaborate with someone in a scenario, they must be current users in ChartHop.&#x20;

:::hint{type="info"}
Only scenario owners can share a scenario and edit scenario permissions.

When you share a scenario, only the people you share your scenario with can see the changes within the scenario. Your scenario and all changes within the scenario are not visible to the rest of your organization or put into effect until the scenario is merged to Primary. [Learn more.](https://docs.charthop.com/merging-a-scenario)
:::

![Share scenario](https://api.archbee.com/api/optimize/CXAjUAezd9VEEVQBIYmdw/SXcWR8fxxM5tsi5ouFm2S_sharescenario.png "  ")

To share a scenario with someone:

1. Open your scenario.
   - You can share an in-progress scenario only when it has a review status of **Open**.
2. In the scenario header, select your profile picture or select the **+** icon to open sharing permissions.
3. Enter the name of the person you want to share your scenario with in the **Add person&#x20;**&#x66;ield.
4. Using the dropdown, configure the scenario permission for that person. [Learn more.](https://docs.charthop.com/collaborating-in-a-scenario#I68UR)
5. (Optional) Repeat the previous steps to add any additional scenario collaborators.
6. Once you're finished editing sharing permissions, select **Done**.

Once you've shared your scenario with someone, ChartHop sends them a notification that they now have access to your scenario. To later adjust their permissions or to completely remove their access, you can click on their profile picture in the scenario header.

:::hint{type="info"}
Scenario views, including any new added columns, can be maintained when you share the scenario with others with access to the scenario. To share a specific scenario view, an owner of the scenario can customize the columns displayed by clicking "select columns" and then "save columns".
:::

### Scenario permissions

As a scenario owner, you can assign the following permissions to the people you're collaborating with:

| **Permission** | **Description**                                                                                                                    |
| -------------- | ---------------------------------------------------------------------------------------------------------------------------------- |
| **Owner**      | Indicates this person has full access to the scenario; they can view, edit, and share everything in the scenario.<br />            |
| **Editor**     | Indicates this person can view and edit everything in the scenario.<br />                                                          |
| **Viewer**     | Indicates this person can view everything in the scenario, including compensation and cost summaries, but cannot make edits.<br /> |

### Data Sharing Access

| **Permission**           | **Description**                                                                                                                                                                                                                                                                                                                                                                                |
| ------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Standard Data Access** | The user will only see changes within that scenario that they would be able to see on Primary, given their access role.<br />                                                                                                                                                                                                                                                                  |
| **Limited Data Access**  | The user will only see changes for jobs or people below them in the org chart.<br />They cannot view or edit scenario changes above them or outside their reporting line, regardless of their regular ChartHop access role. Limited editors cannot view the total cost summary.<br />                                                                                                          |
| **Full Data Access**     | You are overwriting the individual's current user permissions, allowing them full access to all the changes to data in the scenario, which could potentially include sensitive information (such as compensation) depending on your ChartHop access role. ChartHop recommends only assigning those permissions to individuals who regularly have access to highly sensitive information.<br /> |

**Examples:**&#x20;

A viewer with standard data access, would be able to see the changes in the scenario that they would normally be able to see in primary. For example, if Employee A had a "compensation viewer" user access role, and were shared a scenario as a viewer with standard data access, they'd be able to see compensation data for the whole company.

An editor with full data access would be able to see and make changes to all data in the scenario, even if it is outside their regular access level. Keeping with Employee A, who has a "compensation viewer" user access role, if they were shared a scenario as an editor with full data access, they would be able to see all data in the scenario, which may include more data than they typically can see.

:::hint{type="warning"}
When you assign the **full data access** permissions to someone, you give them full access to all the changes to data in the scenario, which could potentially include sensitive information (such as compensation) depending on your ChartHop access role. ChartHop recommends only assigning those permissions to individuals who regularly have access to highly sensitive information. [Learn more.](https://docs.charthop.com/collaborating-in-a-scenario)
:::

:::hint{type="info"}
**Sensitive jobs stay hidden in scenarios.** Full Data Access widens what changes a collaborator can see on jobs they can already access (including changes to fields like compensation they would not normally see in Primary), but it does not widen *which* jobs they can see. If a collaborator cannot view a job in Primary (for example, a job restricted as sensitive), any changes to that job in a scenario are also hidden from them, even with Full Data Access. Sharing a scenario cannot reveal a restricted job.
:::

### Entering comments in a scenario

When you're collaborating in a scenario, you have the ability to enter employee-specific comments on the change row or overall comments in the **Comments** section of the scenario.&#x20;

As an owner, you receive a notification whenever someone comments in th&#x65;**&#x20;Comments&#x20;**&#x73;ection of the scenario. You do not receive notifications when someone adds employee-specific comments. Individuals with access to the scenario can be tagged in all comments but they only receive a notification when they are tagged in the **Comments** section.

:::hint{type="warning"}
People with **Limited Viewer** permission to the scenario can only view and enter comments if there are changes that they can see.
:::

There are two types of comments within a scenario:

- Employee-specific comments apply only to a specific employee or change row within the scenario Changes tab.
- Overall comments apply to the entire scenario and display at the bottom of the scenario. These comments also include the comments you enter when you submit, approve, reject, or withdraw a scenario.

To enter an employee-specific comment, select the Comment icon at the beginning of the row for the change. Multiple people can enter comments in the same row. Once comments are posted, the Comment icon displays in purple and indicates the number of entered comments. These comments display to everyone who has access to view the specific changes in the scenario.

![Employee-specific comments](https://api.archbee.com/api/optimize/CXAjUAezd9VEEVQBIYmdw/1wc45rgbJ15nqk0Gki4-n_scenariocommentrowview.png)

To enter an overall comment, navigate to the **Comments** section at the bottom of the scenario page. These comments display to everyone who has access to view the scenario.&#x20;

![Overall comments](https://api.archbee.com/api/optimize/CXAjUAezd9VEEVQBIYmdw/Oadut0GPDRC5_lki17aAP_scenariocommentsoverall.png "  ")

:::hint{type="info"}
You can export all comments within a scenario to CSV. [Learn more.](https://docs.charthop.com/exporting-from-a-scenario)
:::

:::hint{type="info"}
[Packages](https://www.charthop.com/pricing/)**:&#x20;**<font color="#a9a9a9">Basic</font> <font color="#000000">|</font> <font color="#000000">**Headcount Planning** | </font><font color="#000000">**Compensation Reviews** | </font><font color="#000000">**Performance** | </font><font color="#000000">**Engagement** </font>
:::

[title] Group details
[path] ChartHop for Administrators/Managing groups/

You can use the **Group details** page to add and remove members, view subgroups, and make other general high-level changes to your groups in your ChartHop organization.

### Accessing the Group details page

Each group has its own Group details page. To access the Group details page for a specific group:

1. From the left sidebar, select **Data Model**.
2. From the sub-menu, select **Departments**, **Teams**, **Locations&#x20;**&#x6F;r one of your **Custom Groups**.
3. Choose the group you want to edit by selecting its name under the **Name** column in the groups list.



![Group details](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/2P3V9JezivpeBgQ_bZHqj_customer-details.png)

### Customizing groups

To customize your groups, you can assign them a specific color or image along with a description.

![Group edit details](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/N81HX-g_sCXs99CzhAmAV_data-model-department-details.png)

To edit a Group:

1. From the **Group details** page, select the **Edit details** button in the upper right.&#x20;

To add or edit a description:

1. In the right side panel, scroll down to the **Description** section.
2. Add or edit your description in the **Description** dialog box.
3. Select **Save** when you're done.

To assign a color:

1. In the right side panel, scroll down to the **Color** section.
2. Under **Color**, use the palette tool to select a color to be assigned to your group.
3. Select **Save** when you're done.

To assign an Image:

1. In the right side panel, scroll down to the **Image** section.
2. Select **browse** and assign an image from your computer.
3. Select **Save** when you're done.

:::hint{type="info"}
Applying an image to your group overrides its color assignment.
:::



:::hint{type="info"}
[Modules:](https://www.charthop.com/pricing/) <font color="#000000">**HRIS |** </font>**Engagement | Goals | Performance |&#x20;**<font color="#000000">**Compensation Reviews |** </font>**Headcount Planning**
:::


[title] Duplicate, export, or delete a dashboard
[path] ChartHop for Administrators/Dashboards/

You can duplicate a dashboard, create a copy of a dashboard owned by another user, export a dashboard to Powerpoint, or delete it. In each case, you use the **Export** ▼ menu in the top right corner of the dashboard. You’ll need to be a dashboard owner to perform these actions.

### Duplicate a dashboard

You can duplicate a dashboard along with its data permissions and shared users if you want to create an exact copy to customize further.  

To duplicate a dashboard:

1. From the left sidebar, select **Dashboards**.
2. On the **Dashboards** page, select the dashboard to duplicate.  
3. From the **Export ▼&#x20;**&#x6D;enu in the top right corner of the dashboard, select **Duplicate**.
4. Select **Duplicate**.
   A copy of the dashboard is created.

### Duplicate a dashboard to a new owner

You can duplicate a dashboard to a new owner, as long as you have ChartHop Org owner or Technical owner permissions. [Learn more](https://docs.charthop.com/user-roles-and-permissions). One example of when you may want to do this is if the previous owner has left your org.

:::hint{type="warning"}
When you duplicate a dashboard to a new owner, previous owners are copied to the new dashboard, but non-owners are removed. The dashboard's available data is based on the new owner’s ChartHop permissions.
:::

![Duplicating a dashboard with a new owner](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/uqMbS8Afbx2CbwqBQvDjz_duplicate-report-with-new-owner.jpg)

To duplicate a dashboard with a new owner:

1. From the left sidebar, select **Dashboards**.
2. On the **Dashboards** page, select the dashboard to clone. &#x20;
3. From the **Export** ▼ menu in the top right corner of the dashboard, select **Duplicate with new owner**.
4. In the dialog that appears, search for the new owner to assign.&#x20;
5. Select **Duplicate**.&#x20;
   A copy of the dashboard is assigned to the new owner.&#x20;

### Export a dashboard

You can export a dashboard as a Powerpoint file. When you export a dashboard, each section is displayed on a separate slide.&#x20;

To export a dashboard:&#x20;

1. From the left sidebar, select **Dashboards**.
2. On the **Dashboards** page, select the dashboard to export. &#x20;
3. In the top right corner of the dashboard, select **Export**.&#x20;
4. In the dialog that appears, select **Download**.
   A Powerpoint file is downloaded to your computer.&#x20;

### Delete a dashboard

If you’re the owner of a dashboard, you can delete it from ChartHop. This action cannot be undone.

:::hint{type="danger"}
Be careful when deleting dashboards! In most cases, removing users from a dashboard is sufficient—and does not remove the dashboard.
:::

To delete a dashboard:&#x20;

1. From the left sidebar, select **Dashboards**.
2. On the **Dashboards** page, select the dashboard to delete. &#x20;
3. From the **Export** ▼ menu in the top right corner, select **Delete**.
4. In the dialog that appears, type `DELETE`.&#x20;
5. Select the **Delete** button.&#x20;
   The dashboard is deleted from ChartHop.&#x20;

:::hint{type="info"}
[Packages](https://www.charthop.com/pricing/)**:&#x20;**<font color="#a9a9a9">Basic</font> <font color="#000000">|</font> <font color="#000000">**Headcount Planning** | </font><font color="#000000">**Compensation Reviews** | </font><font color="#000000">**Performance** | </font><font color="#000000">**Engagement** </font>
:::


[title] Create a backfill in a scenario
[path] ChartHop for Administrators/Planning/Headcount planning/Updating current jobs in a scenario/

When you backfill a job in a scenario, the person's profile is archived but the job stays active and open.

To backfill a job:

1. From the **Data Sheet** tab, select the row for the person whose job you wish to backfill.
2. Open the action menu at the left side of the row you wish to edit.
3. Select **Backfill**. Th&#x65;**&#x20;Backfill job** dialog displays.
4. In the **Backfill job** dialog, you can make any additional edits to the job:
   - **Structure** - The job's position in your ChartHop organization structure.
   - **Compensation** - Adjusted compensation for the role.
   - **Recruiting** - Recruiting information for the role.
   - **Description** - The role's new description (when applicable).
5. Select **Save to Scenario** to save your changes.

:::hint{type="info"}
In cases where the backfill should not display to the rest of your ChartHop organization, be sure to set the recruiting sensitivity to **Highly sensitive**. This ensures that only recruiters with sensitive access can see the open role. [Learn More.](https://docs.charthop.com/sensitive-data)
:::

:::hint{type="info"}
[Packages](https://www.charthop.com/pricing/)**:&#x20;**<font color="#a9a9a9">Basic</font> <font color="#000000">|</font> <font color="#000000">**Headcount Planning** | </font><font color="#000000">**Compensation Reviews** | </font><font color="#000000">**Performance** | </font><font color="#000000">**Engagement** </font>
:::


[title] Filtering data in a dashboard
[path] ChartHop for Administrators/Dashboards/

You can decide which data is displayed in the dashboard by selecting whether the data is pulled directly from your primary organization or from a specific scenario. You can also apply additional filters to further refine the data that displays in your dashboard.

:::hint{type="info"}
By default, the filters that you select are applied globally to all charts unless you define chart-specific filters to override the ones defined at the dashboard level.
:::

![Dashboard filter](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/s5XiRX_udNbX6rDGWlqN1_reportsfilter.png)

### Filter global dashboard data

When you add a filter to dashboard data, that filter is applied to all charts (when they are not enabled to ignore dashboard filters). Filters are applied only in that instance and are not saved permanently. To save a filter, you must enter it into the **Saved filter** dropdown. [Learn more.](https://docs.charthop.com/filtering-data-in-a-report#X5AhO)

To filter the data in a dashboard: 

1. From the left sidebar, select **Dashboards**. 
2. Open the dashboard you want to customize. 
3. In the **Scenario** dropdown, select the data set used in the dashboard. You can select from the following options:
   - **Primary, no forecast** – Calculates the dashboard using data from your primary organization. 
   - **Primary, with hiring forecast** – Calculates the dashboard using data from your primary organization, including projections based on new hires. 
   - **User’s Scenario** - Calculates the dashboard using data based on a specific user’s scenario proposal. Only scenarios you have permission to view display in the list. [Learn more.](https://docs.charthop.com/scenarios) 
   - **Compensation review&#x20;**- Calculates the dashboard using data from the selected compensation review. Only compensation reviews you have permission to view display in the list. [Learn more.](https://docs.charthop.com/compensation-reviews) 
4. The **Time interval&#x20;**&#x64;ropdown, allows you to select how time is grouped together in the dashboard. You can select from the following options:
   - Week
   - Month
   - Quarter
   - Year
   - Fiscal quarter
   - Fiscal year
5. In the **Date range&#x20;**&#x64;ropdown, select a date range for the dashboard. The date ranges are based on the time interval you selected. 
   - Alternatively, you can enter a custom date range by clicking on the listed dates.
6. Choose your filter options in the **Filters** dropdown menu or enter a Carrot query directly in the query box. 

### Save a dashboard filter

The dashboard filters you apply are only applied in the immediate instance and are not saved. However, you can save a filter so that you can easily apply it whenever you access your dashboard.

To save a filter: 

1. From the left sidebar, select **Dashboards**. 
2. Open the dashboard you want to view. 
3. Select the **Saved filter ▼&#x20;**&#x64;ropdown in the top right section.
4. Enter the Carrot query directly into the text box.
5. Select **Save**.
   - Your filter is saved as an option in the dropdown list. 
   - When you access the dashboard again, you can select it from the dropdown and apply it without having to enter it again manually.

### Filter chart data

You have the option to filter data at the chart level. Chart level filters are maintained and do not have to be reapplied. 

:::hint{type="info"}
You must be a dashboard owner or have edit access to be able to edit and apply chart filters.
:::

To filter the data in a chart:

1. From the left sidebar, select **Dashboards**. 
2. Open the dashboard you want to customize. 
3. Select the **⋮** menu for the chart you want to filter.
4. Select **Edit**.
5. Choose your chart filter options in the **Filters** dropdown menu or enter a Carrot query directly in the query box.
   - You can choose to ignore the dashboard-level filters by checking the **Ignore dashboard filters** checkbox.
6. Select **Save & exit**.



:::hint{type="info"}
[Packages](https://www.charthop.com/pricing/)**:&#x20;**<font color="#a9a9a9">Basic</font> <font color="#000000">|</font> <font color="#000000">**Headcount Planning** | </font><font color="#000000">**Compensation Reviews** | </font><font color="#000000">**Performance** | </font><font color="#000000">**Engagement** </font>
:::


[title] Combining scenarios
[path] ChartHop for Administrators/Planning/Scenarios/

You can combine two or more scenarios into a single scenario. This is helpful when consolidating the changes of multiple collaborators in separate scenarios.

When you combine scenarios, you can choose to combine all changes into one of the existing scenarios or to combine all changes into a brand new scenario.

![Combine scenarios](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/bbaf6IIhJpbD8C9uhH7Sk_combinescenariodialog.png)

To combine scenarios:

1. In the Scenarios list, select the checkboxes for the scenarios you want to combine.
2. Select **Combine**. The **Combine Scenarios** dialog displays.
3. Select how you are combining all your scenario changes:
   - Add all scenario changes into an existing scenario.
   - Add all scenario changes into a brand new scenario.
4. (Optional) Enter a name for the new scenario (if combining into a new scenario) and define the start date, scenario type, and description.
5. Select **Create**.&#x20;

:::hint{type="info"}
[Packages](https://www.charthop.com/pricing/)**:&#x20;**<font color="#a9a9a9">Basic</font> <font color="#000000">|</font> <font color="#000000">**Headcount Planning** | </font><font color="#000000">**Compensation Reviews** | </font><font color="#000000">**Performance** | </font><font color="#000000">**Engagement** </font>
:::

:::hint{type="info"}
[Roles:](https://docs.charthop.com/user-roles-and-permissions) Recruiting editor | Owner | Technical owner
:::


[title] Edit jobs
[path] ChartHop for Administrators/Managing people and jobs/Working with jobs/

On the **Data Sheet**, you can edit an individual job or bulk edit a group of jobs after job creation.&#x20;

### Edit an individual job

You can edit a single job from the **Data Sheet** when you want to change information for that job.

![Editing a job from the Data Sheet](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/H-Dw_Q5aMd1AlskBeIOaj_screenshot-2024-01-19-at-33809-pm.png)

To edit an individual job from the **Data Sheet**:

1. From the left sidebar, select **Data Sheet**. 
2. In the Actions menu (⋮) on the left side of the row for the job to edit, select **Edit job**. 
3. In the **Edit job** dialog that displays, make your edits. 
4. Select **Save to primary** to finish editing the job.&#x20;

:::hint{type="info"}
You can also edit an individual job from the **Org Chart**. To do this, select the job. In the Profile Summary on the right, select **Edit job**.&#x20;
:::

### Edit multiple jobs

To edit multiple jobs on the **Data Sheet**: 

1. From the left sidebar, select **Data Sheet**. 
2. On the **Data Sheet**, find the jobs to edit by: 
   1. Entering a [Carrot query](https://docs.charthop.com/carrot-reference) in the filter box.
   2. Choosing [filter criteria](https://docs.charthop.com/filtering) in the **Filters** dialog.
   3. Selecting the **Open Roles** tab. 
3. Select **Edit**. 
4. Select the cell(s) to edit. You can only edit highlighted cells.
5. Make your edits.
6. Select **Save Changes&#x20;**&#x74;o finish editing jobs.



:::hint{type="info"}
[Packages](https://www.charthop.com/pricing/):**&#x20;Basic** | **Standard** | **Premium**[﻿﻿](https://docs.charthop.com/user-roles-and-permissions)

[Roles](https://docs.charthop.com/user-roles-and-permissions): Owner | Org editor | Recruiting editor (for open jobs)
:::


[title] Announcing org changes
[path] ChartHop for Administrators/Managing people and jobs/

When you make org changes such as new hires, transfers, or terminations, they're announced to your ChartHop organization on the **Org Summary** section of the **Home** page. [Learn more](https://docs.charthop.com/home-page#Wu5-6).&#x20;

:::hint{type="warning"}
Only users with sensitive data access can view future-dated org changes, such as unannounced promotions and so on.
:::

As shown in the following table, you can customize when and how org change announcements appear on the **Home** page.&#x20;

| **Org change**     | **Shown under…** | **How to customize**                             |
| ------------------ | ---------------- | ------------------------------------------------ |
| Add an open job    | **Open Jobs**    | Set **Effective date of change** to the future.  |
| Backfill a job     | **Open Jobs**    | Set **Sensitivity** to **Highly sensitive**.     |
| Edit a job         | **Open Jobs**    | Set **Effective date of change** to the future.  |
| Fill a job         | **People Moves** | Set **Announce date&#x20;**&#x74;o the future.   |
| Terminate a person | **People Moves** | Set **Announce date&#x20;**&#x74;o the future.   |
| Transfer a person  | **People Moves** | Set **Announce date&#x20;**&#x74;o the future.   |
| Exchange two jobs  | **People Moves** | Set **Announce date&#x20;**&#x74;o the future.   |
| Rehire a person    | **People Moves** | Set **Start date** to the future.                |
| Add a new person   | **People Moves** | Set **Announce date&#x20;**&#x74;o the future.   |

:::hint{type="info"}
[Modules:](https://www.charthop.com/pricing/) <font color="#000000">**HRIS |** </font>**Engagement | Goals | Performance |&#x20;**<font color="#000000">**Compensation Reviews |** </font>**Headcount Planning**
:::


[title] Updating effective dates
[path] ChartHop for Administrators/Managing people and jobs/Effective dating/

You can update the effective dates of particular changes to your job and employee data, such as start dates for new employees, or backdating compensation changes.

When updating effective dates you can specify a new date either in the present, past (backdated), or future.

### Where to update effective dates

Update effective dates from the following locations in ChartHop:

- [Data Sheet](docId\:XTd4DG4I_4_nMwjfEsq0S)&#x20;
- [Org Changes History page](docId\:xtAS8QlmZJnc3oVkTKrPk)
- Personal history tab
- Job history tab

### Update effective dates in the Data Sheet

Whenever you make changes to data in the **Data Sheet**, the effective date automatically sets to whatever day you have selected in the date picker/sider tool when the change is saved.

### Update effective dates in the History page

You can update effective dates for jobs and employees from the [Org Changes History page](docId\:xtAS8QlmZJnc3oVkTKrPk) page.

To update effective dates for changes to employee data in the History page:

1. In the left sidebar, select **Admin**.&#x20;
2. In the sub-menu, select History > **Org Changes History.&#x20;**
3. On the row of the change you want to edit, select the pencil icon.&#x20;
4. In the dialog, enter your new effective date.
5. Select **Save to Primary**.

### Update effective dates in the Person history tab

You can update effective dates for an individual employee's personal history data, from the **Person history** tab on their profile page. For example, backdating an employee's promotion date to one week prior.

To update effective dates for an employee in the **Person history** tab:

1. From the left sidebar, select **Org Chart**.
2. In the **Org Chart**, select the employee whose profile you wish to view.
3. In the employee's profile summary, select **View profile**.
4. From the employee's profile page, select the **Personal history** tab.
5. On the row of the change you want to edit, select the pencil icon.&#x20;
6. Select **Edit**.
7. In the dialog, enter your new effective date.
8. Select **Save to Primary**.

### Update effective dates in the Job history tab

You can update effective dates for an individual employee's job history data, from the **Job history** tab on their profile page. For example, adding a person's job to a new group at a later date.

To update effective dates for an employee in the **Job history** tab:

1. From the left sidebar, select **Org Chart**.
2. In the **Org Chart**, select the employee whose profile you wish to view.
3. In the employee's profile summary, select **View profile**.
4. From the employee's profile page, select the **Job history** tab.
5. On the row of the change you want to edit, select the pencil icon.&#x20;
6. Select **Edit**.
7. In the dialog, enter your new effective date.
8. Select **Save to Primary**.



[title] Locations
[path] ChartHop for Administrators/Managing groups/

You can use locations to track and manage information about the work addresses used in your ChartHop organization.

:::hint{type="warning"}
Locations are required for ChartHop's Map page.  You must ensure that all of your locations contain both a **City** and a **Country**.
:::

## Creating locations

Like other Groups in ChartHop, you can create locations individually under the Locations tab in ChartHop, or in bulk using the spreadsheet import tool.

## Configuring locations&#x20;

After importing or creating locations in ChartHop, you can include details such as address information, images, and other unique identifiers.

| **Field**     | **Description**                                                                                                                                                                                         |
| ------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Location name | The location's name.                                                                                                                                                                                    |
| Location Code | The shortcode or code number is used to uniquely identify the location in other ATS, equity, or payroll systems.                                                                                        |
| Aliases       | An alternative name that can be used for the location when syncing with remote systems. [Learn more](https://docs.charthop.com/group-names-and-aliases#t1LA4).                                          |
| Color         | The color used to represent the location.                                                                                                                                                               |
| Image         | The image used on the location's profile page.                                                                                                                                                          |
| Location Type | A dropdown for assigning the location as either **Remote** or **Office**. Required in order to display locations on the **Map**. [Learn more](https://docs.charthop.com/map#li-setting-work-locations). |
| City          | The location's city. **Required.**                                                                                                                                                                      |
| State         | The location's state.                                                                                                                                                                                   |
| Country       | The location's country. **Required**.                                                                                                                                                                   |
| Postal        | The location's postal or zip code.                                                                                                                                                                      |

## Syncing location data

When you sync location data between your HRIS to ChartHop, make sure you use the exact same location names in both systems. Also, if your HRIS uses numbers or codes for locations, you can add these to ChartHop using **Aliases** so they match.

:::hint{type="info"}
[Modules:](https://www.charthop.com/pricing/) <font color="#000000">**HRIS |** </font>**Engagement | Goals | Performance |&#x20;**<font color="#000000">**Compensation Reviews |** </font>**Headcount Planning**
:::


[title] Add a new open job
[path] ChartHop for Administrators/Managing people and jobs/Working with jobs/

You can add new jobs in ChartHop as direct reports, clone them from existing jobs, or create them as open jobs. Unlike when you perform [headcount planning](https://docs.charthop.com/headcount-planning) with a scenario, all jobs are created immediately. &#x20;

### Add a direct report from the Org Chart

You can add a new direct report for a person or an open job directly from the **Org Chart**. Doing so creates a new open job that reports to the person or job you selected.&#x20;

![Adding a direct report from the Org Chart](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/S-s4MoseqsIVyoqwhKN23_screenshot-2024-01-19-at-33236-pm.png)

To add a new direct report:

1. From the left sidebar, select **Org Chart**. 
2. On the **Org Chart**, select the person or open job for whom you want to create a new direct report.
3. In the Profile Summary, from the menu next to **Edit job**, select **Add direct report**.
4. In th&#x65;**&#x20;Create job&#x20;**&#x64;ialog, add job information to the appropriate sections:
   - **Structure** - General information including title, department, and location.
   - **Compensation** - Compensation information including salary and bonus.
   - **Recruiting** - Recruiting information including hiring status and target start date.
   - **Description** - A general description about the role.
   - **Custom fields** - Any custom data added by your organization.[ Learn more.](https://docs.charthop.com/custom-fields)
5. Select **Save to Primary**. A new open job appears below the person or open role on the **Org Chart**.

:::hint{type="info"}
- You can also add a new direct report from the **Data Sheet**. To do this, in the row menu (⋮) on the left side of the row for the person to add a direct report for, select **Add direct report**.&#x20;

- If you do not see a new job, it may be listed in the future. Double-check the Start Date and use the timeline slider at the top of the page to move the **Org Chart** to the appropriate date.
:::

### Clone a job from the Org Chart

You can create a new job on the **Org Chart** by cloning an existing job. This is helpful when you don't need to make extensive changes to the job details.

![Cloning an open job from the org chart](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/dVMF_j6y-q4b4oZSVVFND_screenshot-2024-01-19-at-33409-pm.png)

To clone an existing job:

1. From the left sidebar, select **Org Chart**. 
2. On the **Org Chart**, select the employee or open job to clone.
3. In the Profile Summary, from the menu next to **Edit job**, select **Clone Job**. 
4. In the **Create Job** dialog that appears, make any needed edits to the job details.
5. Select **Save to Primary**. The new job is displayed on the **Org Chart**.

:::hint{type="info"}
You can also clone a job from the **Data Sheet**. To do this, in the row menu (⋮) on the left side of the row to clone, select **Clone job**. 
:::

### Create an open job from the Data Sheet

You can create a new open job directly from the **Data Sheet** as an alternative to cloning an existing job or adding a direct report.&#x20;

![Creating a new job from the Data Sheet](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/vHoUaWv96u-yW3xXKMOw9_screenshot-2024-01-19-at-33513-pm.png)

To create an open job: 

1. From the left sidebar, select **Data Sheet**. 
2. On the **Data Sheet**, from the **Edit job** menu, select **New Open Job**. 
3. In th&#x65;**&#x20;Create job&#x20;**&#x64;ialog that appears, add job information to the appropriate sections:
   - **Structure** - General information including title, department, and location.
   - **Compensation** - Compensation information including salary and bonus.
   - **Recruiting** - Recruiting information including hiring status and target start date.
   - **Description** - A general description about the role.
   - **Custom fields** - Any custom data added by your organization, if available.[ Learn more.](https://docs.charthop.com/custom-fields) 
4. Select **Save to primary** to finish creating a new job.&#x20;



:::hint{type="info"}
[Packages](https://www.charthop.com/pricing/): **Basic** | **Standard** | **Premium**[﻿﻿](https://docs.charthop.com/user-roles-and-permissions)[
](https://docs.charthop.com/user-roles-and-permissions)[Roles](https://docs.charthop.com/user-roles-and-permissions): Owner | Org editor | Recruiting editor
:::


[title] Viewing effective dates
[path] ChartHop for Administrators/Managing people and jobs/Effective dating/

You can view your scheduled effective dates for your job and employee data across multiple locations in ChartHop.

### Where to view effective dates

You can view the effective dates for both job and employee data in your ChartHop organization in the following places:

- [Org Changes History page](docId\:xtAS8QlmZJnc3oVkTKrPk)
- Personal history tab
- Job history tab
- Compensation tab

### View effective dates in the History page

On the [Org Changes History page](docId\:xtAS8QlmZJnc3oVkTKrPk) page, the **Date&#x20;**&#x63;olumn lists the effective dates for each event.

### View effective dates in the Personal history tab

You can view a list of effective dates associated with an employee's personal history in your ChartHop organization by checking their **Personal history** tab.

To view effective dates in a person's **Personal history** tab:

1. From the left sidebar, select **Org Chart**.
2. In the **Org Chart**, select the employee whose profile you wish to view.
3. In the employee's profile summary, select **View profile**.
4. From the employee's profile page, select the **Personal history** tab.

### View effective dates in the Job history tab

You can view a list of effective dates for an employee's job history in your ChartHop organization by checking their **Job history** tab.

To view effective dates in a person's **Job history** tab:

1. From the left sidebar, select **Org Chart**.
2. In the **Org Chart**, select the employee whose profile you wish to view.
3. In the employee's profile summary, select **View profile**.
4. From the employee's profile page, select the **Job history** tab.

### View effective dates in the Compensation tab

You can view a list of effective dates for an employee's compensation history in your ChartHop organization by checking their **Compensation&#x20;**&#x74;ab.

To view effective dates in the Compensation tab:

1. From the left sidebar, select **Org Chart**.
2. In the **Org Chart**, select the employee whose profile you wish to view.
3. In the employee's profile summary, select **View profile**.
4. From the employee's profile page, select the **Compensation** tab.

The **Date&#x20;**&#x63;olumn under the **Cash compensation history&#x20;**&#x73;ection lists the effective dates.






[title] Updating compensation bands
[path] ChartHop for Administrators/Planning/Compensation bands/

You can update your compensation bands as your organization changes. For example, you may need to add a compensation band for a new function brought into the organization.

If you need to add, delete, or rename individual bands, you can do so by downloading your current bands in spreadsheet form. You can then make any changes and re-upload the spreadsheet to import the changes.

You can make global changes by renaming org levels, setting currency rounding, or changing multipliers by editing global settings.

### Updating bands with a spreadsheet

To delete or add new compensation bands, you can download, edit, and re-upload a spreadsheet. This is helpful when making significant changes to particular bands.

To update your bands with a spreadsheet:

1. From the left sidebar, select **Data Model**
2. From the sub-menu, select Job Architecture > **Compensation Bands**.
3. Click **Edit** in the top right corner.
4. Click **Import changes** under the **Import changes via spreadsheet** section.
5. Click **Download template with current data** to view your current band information in spreadsheet format. The downloaded spreadsheet is pre-filled with your current band information.
6. Edit the spreadsheet you downloaded with any changes you wish to make. You can make the following types of changes:
   - Add a new band to the spreadsheet.
   - Delete an existing band by typing DELETE in the first column of the band. Deleting a band removes it from any previously mapped jobs.
   - Edit an existing band by changing any number of the columns associated with the band. The provided spreadsheet is pre-filled with your current band information. You may edit this spreadsheet directly to reflect changes to your bands.
7. When finished making changes, navigate back to the **Import changes via spreadsheet** section.
8. Select **Browse** to navigate to your updated spreadsheet to upload or drag it to the **Upload Spreadsheet** section.
9. Select **Next Step**.
10. Use the **Tidy up your data** page to review and correct any mistakes in your data.
11. Select **Next step**.
12. Select **Save**.
13. Choose a date when you want your bands to be effective. You must set the date in the future (for example, set it to the following day) so that the compensation bands do not overlap.
14. Select **Save**.

:::hint{type="info"}
You can also make changes to your job levels and multipliers using the spreadsheet upload.
:::

### Enable currency rounding

You can set rounding rules for each specific currency so that monetary amounts are easier to read in tables and graphs. When you enable currency rounding, it only affects the value that is displayed, not the actual amount.

To enable rounding for a currency:

1. From the left sidebar, select **Data Model**
2. From the sub-menu, select Job Architecture > **Compensation Bands**.
3. Click **Edit** in the top right corner.
4. In the **Currency rounding** section, select **Add currency**.
5. Use the **Currency** dropdown to select the currency for which you want to enable rounding. Only the currencies that are currently configured for your organization are available for selection. [Learn more.](https://docs.charthop.com/managing-currencies-and-costs)
6. Enter the value to round to for the respective currency. For example, you can set the rounding to be to the nearest 1000 units of currency.
7. Select **Save Settings**.

### Update hourly wage amounts

You can change the amount calculated for hourly wages by updating the number of hours and weeks worked during your work year. For example, if you move from a 40-hour work week to a 30-hour work week, you can update that value and your annualized hourly wages update accordingly.

To update hourly wage amounts:

1. From the left sidebar, select **Data Model**
2. From the sub-menu, select Job Architecture > **Compensation Bands**.
3. Click **Edit** in the top right corner.
4. In the **Update hourly wage amounts** section, update the value for either hours per week or weeks per year.
5. Select **Save Settings**.

### Edit multipliers

You can edit multipliers within ChartHop whenever you need to. For example, you may start hiring employees in different regions and may need to add a multiplier to ensure fairness and accuracy for your salary ranges across the company. Or, you may want to further organize multipliers by using additional categories based on specific geographic regions.

To edit multipliers:

1. From the left sidebar, select **Data Model**
2. From the sub-menu, select Job Architecture > **Compensation Bands**.
3. Select **Edit** in the top right corner.
4. Select the **Multipliers** tab.
5. Use the fields to edit the multiplier parameters. You can edit the following:
   - **Label** - Identifies the multiplier.
   - **Multiplier percentage** - Indicates the percentage applied as a multiplier.
   - **Mapped fields** - Indicates the fields to which the multiplier is mapped.
6. Select **Apply Changes**.

You can use the trash can icon to delete a multiplier. To create further categories of multipliers (for example, multipliers for Europe-based locations), select **Add category**.

:::hint{type="info"}
To configure how compensation auto-fills on open jobs from a band, see [Starting salary](https://docs.charthop.com/starting-salary).
:::

:::hint{type="info"}
[Packages](https://www.charthop.com/pricing/): Basic | Standard\* | Premium

\* Available as an add-on
:::

:::hint{type="info"}
[Roles](https://docs.charthop.com/user-roles-and-permissions): Owner | Org editor
:::


[title] Compensation reviews
[path] ChartHop for Administrators/

You can use *Compensation reviews* to create and manage a centralized compensation review cycle completely within ChartHop. 

Within a compensation review, you can create budgets, guidelines, and implement approval flows that you can customize to fit the needs of your organization. You can establish a timeline for your compensation review cycle, collaborate with managers and approvers, and clearly visualize the impact of compensation changes to your organization. All of these tools enable you to build and implement a more transparent and equitable compensation plan.

![Compensation reviews](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/8hRYDJ-Z4yISYPTGQNGYd_compreviewnewtable.png)

### Access compensation reviews

To access compensation reviews: From the left sidebar, select **Comp Reviews.**

When you access compensation reviews, a list displays all compensation reviews available to you (either as an Owner or as a participating Reviewer or Approver). From here, you can open an existing compensation review or create a new compensation review. 

When you are a compensation review owner, and you open an existing compensation review, the following can occur, depending on the status of the selected compensation review:

| **Status**      | **Description**                                                                                                                                                                                                                         |
| --------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Not started** | When the compensation review setup is currently in progress, the Cycle settings display.                                                                                                                                                |
| **Active**      | When the compensation review is active, the Cycle overview displays. The Cycle settings are unavailable. To display the Cycle settings, you must pause the cycle. [Learn more.](https://docs.charthop.com/launch-a-compensation-review) |
| **Paused**      | When the compensation review is paused, the Cycle settings display. [Learn more.](https://docs.charthop.com/managing-a-compensation-review)                                                                                             |
| **Approved**    | When the compensation review is approved, the Cycle overview displays. [Learn more.](https://docs.charthop.com/concluding-a-compensation-review)                                                                                        |
| **Closed**      | When the compensation review is closed, the Cycle overview displays. [Learn more.](https://docs.charthop.com/concluding-a-compensation-review)                                                                                          |

:::hint{type="info"}
[Modules:](https://www.charthop.com/pricing/) <font color="#000000">HRIS | </font>Engagement | Goals | Performance | <font color="#000000">**Compensation Reviews** | </font>Headcount Planning
:::


[title] Move a person in a scenario
[path] ChartHop for Administrators/Planning/Headcount planning/Working with open jobs in a scenario/

***

You can propose a new assignment for a person in your ChartHop organization by moving that person to an open job within your scenario.&#x20;

To move a person into an open job:

1. In the **Data Sheet** tab, select the row for the employee you'd like to move.
2. Open the action menu at the left side of the row you wish to edit.
3. Select **Move person**. The **Move Person** dialog displays.
4. In the **Moving into job** dropdown list, select the job into which you are moving the person.
5. Enter the following information:&#x20;
   - **Move date** - The date on which the move will take place.
   - **Announce date** - The date on which the move is announced to the organization.
   - **Move type** - Whether the move is considered a Transfer, Promotion, or Demotion.
   - **Additional notes** - Any additional notes related to the move.
6. Select **Save to Scenario&#x20;**&#x74;o save your changes.

:::hint{type="info"}
[Packages](https://www.charthop.com/pricing/)**:&#x20;**<font color="#a9a9a9">Basic</font> <font color="#000000">|</font> <font color="#000000">**Headcount Planning** | </font><font color="#000000">**Compensation Reviews** | </font><font color="#000000">**Performance** | </font><font color="#000000">**Engagement** </font>
:::


[title] Editing departments
[path] ChartHop for Administrators/Managing groups/Departments/

As a user, you may want to rename a department or change its location in the org.

![Department details](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/wLG-XFGMWYQwkefo4msRi_customer-details.png)

### View Department details

1. From the left sidebar, select **Data Model**.
2. From the sub-menu, select **Departments**.
3. Choose the **Department** you want to edit by selecting its name under the **Name** column in the groups list.

### Edit Department details

1. In the upper right of the Department details view, select the **Edit details** button.&#x20;

![](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/CeIz8xopWjZbEEWVrozMP_data-model-department-details.png)

To add or edit a description:

1. In the right side panel, scroll down to the **Description** section.
2. Add or edit your description in the **Description** dialog box.
3. Select **Save** when you're done.

To assign a color:

1. In the right side panel, scroll down to the **Color** section.
2. Under **Color**, use the palette tool to select a color to be assigned to your group.
3. Select **Save** when you're done.

To assign an Image:

1. In the right side panel, scroll down to the **Image** section.
2. Select **browse** and assign an image from your computer.
3. Select **Save** when you're done.

### Adding and removing Department lead

You can manage the members in your groups by using the add/remove member feature.

To select a lead for a Group:

1. From the **Group details** page, select the **Edit lead&#x20;**&#x62;utton located to the upper right of the Group lead section.
2. Select the desired lead from the dropdown.
3. Select **Save changes&#x20;**&#x77;hen you're don&#x65;**.**

### Adding and removing Members

You can manage the members in your groups by using the add/remove member feature.

To add members to your group:

1. From the **Group details** page, select the **Edit members&#x20;**&#x62;utton located to the upper right of the member cards.
2. Select the **Add member** dropdown and select the employee you want to add from the list.
3. Select **Save changes&#x20;**&#x77;hen you're don&#x65;**.**

To remove members from your group:

1. From the **Group details** page, select the **Edit members&#x20;**&#x62;utton located to the upper right of the member cards.
2. Scroll down to the member(s) you wish to remove and select the **X** button adjacent to their profile bubble.
3. Select **Save changes** when you're done.

:::hint{type="info"}
[Modules:](https://www.charthop.com/pricing/) <font color="#000000">**HRIS |** </font>**Engagement | Goals | Performance |&#x20;**<font color="#000000">**Compensation Reviews |** </font>**Headcount Planning**
:::

:::hint{type="info"}
﻿﻿[Roles](https://docs.charthop.com/user-roles-and-permissions): Technical owner | Org editor 
:::


[title] Propose a termination in a scenario
[path] ChartHop for Administrators/Planning/Headcount planning/Updating current jobs in a scenario/

In your headcount planning scenario, you can propose to terminate an employee. Terminating an employee can archive both the employee and their role.

To propose a termination:

1. From the **Data Sheet** tab, select the row for the person you are terminating.
2. Open the action menu at the left side of the row you wish to edit.
3. Select **Terminate**. The **Terminate person** dialog displays.
4. In the **Terminate Person** dialog, enter the following information:
   - **Last day** - The person's last day in the system.
   - **Announce data** - The date when the departure will be visible in the org chart.
   - **Departure type** - The conditions of the departure.
   - **Backfill job&#x20;**- Determines whether the position will remain open.
   - **Regrettable&#x20;**- Whether the departure is regrettable by your org. This information is only visible to users with access to sensitive data.[﻿](https://docs.charthop.com/sensitive-data) [Learn more.](https://docs.charthop.com/sensitive-data)
   - **Reason&#x20;**- The reason for the termination.
   - **Notes&#x20;**- Additional notes regarding the termination.
5. Select **Save to Scenario** to save your changes.

:::hint{type="info"}
Once the scenario is merged to primary and the termination goes into effect, terminated employees cannot be queried in the **Data Sheet**. However, they display in the **History tab&#x20;**&#x77;hen you filter for departures.
:::

:::hint{type="info"}
[Packages](https://www.charthop.com/pricing/)**:&#x20;**<font color="#a9a9a9">Basic</font> <font color="#000000">|</font> <font color="#000000">**Headcount Planning** | </font><font color="#000000">**Compensation Reviews** | </font><font color="#000000">**Performance** | </font><font color="#000000">**Engagement** </font>
:::

##


[title] Viewing compensation bands
[path] ChartHop for Administrators/Planning/Compensation bands/

Once your compensation bands are set up, ChartHop gives you two ways to view them: a **Table** view and a **Graph** view. Switch between them with the Table / Graph toggle at the top of the **Compensation Bands** screen.

To open it, go to **Compensation Bands** in your org. Use the **Date** picker in the header to view your bands (and people) as of any point in time.

## Filtering what you see

Both views share the same filters:

- **Job level** — narrow to one or more levels.
- **Tier filters** — up to three dropdowns labeled with your org's configured tier names (for example, department or location).
- **Currency** — when your org has more than one currency configured, choose the currency to display. Band ranges and employee pay are converted into it. (The Currency selector appears in the Graph view header.)

## Table view

The Table view lists each band with its range values (minimum, midpoint, maximum) and the job level and tiers it applies to. Use it when you want to read exact numbers or scan bands row by row.

![ Table view lists each band's min, midpoint, and max.](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/If-ypZnQyzRV-5B9HI2qS_bands-table.png)

## Graph view

The Graph view draws each band as a horizontal bar spanning its pay range, from minimum to maximum. This makes it easy to compare band widths and where ranges overlap across levels.

Hover any band bar to see a summary card: the band label, its **Job level** and tier values, and the band's **Base min**, **Base midpoint**, and **Base max** in the band's currency.

![ Hover a band to see its min, midpoint, and max.](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/1dbKiYDXV8E1hlBaBil7B_band-graph.png)

## Showing employees on the graph

Turn on **Show employees** to overlay your people directly on the band ranges. Each employee appears as an avatar positioned along their band's bar at their annualized base pay — so you can see at a glance where everyone sits and who falls outside their band.

An employee's avatar ring is color-coded:

- A neutral ring means the person's pay is **Within band**.
- A red ring means they are **out of band** — below the minimum or above the maximum. These avatars plot to the left or right of the bar.

Employees with no assigned band or no base pay are not plotted. Click any avatar to open that person's detail panel.

![ With Show employees on, each person appears at their annualized base pay along the band.](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/F74Q72fmqsWyWhN09k5bI_band-employee.png)

:::hint{type="info"}
Pay is annualized and converted to the selected display currency before an employee is positioned. Band tooltips still show the band's native currency values.
:::

## Focusing the overlay

When **Show employees** is on, an **Employee overlay** panel appears with two ways to focus:

- **Only out of band** — hides in-band employees so you see just the people below or above their band.
- **Employee filter** — search and filter the plotted people by person, group, or field (for example, a single team or department).

## Reading employee and band details

Hover an employee's avatar to see their name, their band, their base pay, and a status line:

- **Within band**
- **Amount under band** — how far their pay is below the band minimum
- **Amount over band** — how far their pay is above the band maximum

Out-of-band statuses show a warning icon in red.

When employees are shown, each band's tooltip also adds **Employees below band** and **Employees above band** counts, highlighted in red when non-zero.


[title] Managing allocations
[path] ChartHop for Administrators/Managing groups/Custom Groups/

Allocations show how much of a person's time goes to each group, like an initiative, product vertical, or cost center. Admins can import allocations, review them on each group, and report on who's over or under allocated.

## Before you begin

- Allocations must be enabled for your org. If you don't see the **Supports allocations** setting on your Group Type configuration, contact your ChartHop rep.
- Only admins whose role grants permission to edit group types and groups can set up and import allocations.
- The groups you allocate people to must already exist. To create groups in bulk, see [Managing groups](https://docs.charthop.com/creating-and-managing-groups).

## How allocations work

- An allocation is a decimal share of a person's time on a group. **0.5** = 50%.
- Allocations are effective dated, with a start date and an optional end date.
- A person can be split across groups in different group types, like 50% in an initiative and 50% in a product vertical. ChartHop sums allocations across all group types.
- Allocations work with any group type membership setting, including **Single** and **Multiple**.
- Totals are measured against 100%. Above 100% is over allocated; below 100% is under allocated.
- 0% allocations are allowed. Use them to show someone in a group for visibility, with no FTE impact.

## Turn on allocations for a group type

1. Go to **Settings > Groups**.
2. Select the group type, like **Initiatives**.
3. In the group type details, check **Supports allocations**.
4. Select **Save**.

## Import allocations

1. Open the list of groups for a group type that supports allocations.
2. Select **Import allocations** at the top of the page.
3. Upload your CSV file and select **Continue**.
4. Confirm your columns are matched correctly and select **Continue**.
5. On the preview page, choose whether to add people to groups they aren't in yet (see below).
6. Review any errors, then commit the import.

The importer covers every group that supports allocations, not just the group type you started from.

### CSV columns

| Column         | Required | Details                                                                                 |
| -------------- | -------- | --------------------------------------------------------------------------------------- |
| Group          | Yes      | Group name. Use the lowest-level group (like a sub-initiative), not the full hierarchy. |
| Person         | Yes      | Work email, job ID, or employee ID.                                                     |
| Allocation     | Yes      | Decimal, like 0.5 for 50%.                                                              |
| Effective date | Yes      | When the allocation starts.                                                             |
| End date       | No       | When it ends. Useful for allocations that only last a quarter, a year, or a few weeks.  |
| Notes          | No       | Saved with the change.                                                                  |

### Adding people to groups on import

- Select the checkbox on the preview page to add anyone who isn't already a member of the group.
- If you leave it unchecked, rows for non-members show an error and aren't imported.
- The importer adds membership but never creates groups.

## Updating allocations

- **Same effective date:** the new value replaces the existing allocation.
- **New effective date:** ChartHop adds a new change and keeps history, like other effective-dated data.

## View allocations

### Groups

- On a group type's page, switch to the **table view** to see each member's allocation start and end dates.
- On Group Detail, manage members, allocations, and dates inline. Saving shows a summary of changes to confirm.
- To remove someone, select **⋯** on their row, then **Remove**.
- The sidebar shows the group's FTE equivalent, like **7.3 FTE**.

### Person Profile

The profile shows a person's active allocations by group type, with totals. This view is read-only.

### Data sheet and scenarios

| Column            | Shows                                                        |
| ----------------- | ------------------------------------------------------------ |
| Group allocations | Every group the person is allocated to, with the percentage. |
| Allocations total | Sum across all group types.                                  |
| Over-allocated    | **Yes** if the total is over 100%; otherwise **No**.         |
| Under-allocated   | **Yes** if the total is under 100%; otherwise **No**.        |

- Filter with CQL to find under or over allocated people, for example: `allocations.isUnderallocated`.
- Build a smart bucket for a single over/under/at-100% column.
- Add these columns to scenarios to view them.

## Good to know

- Allocations can't be edited in scenarios yet.
- The import preview can't show every row on very large files (around 10,000 rows). Watch for error patterns before you commit.
- ChartHop flags over allocation but doesn't block it.
- Built-in allocation dashboards and cost per group aren't available yet. Use data sheet columns and CQL for now.
- Import issues? Contact ChartHop support.

***

**See also:** [Managing groups](https://docs.charthop.com/creating-and-managing-groups), [Sharing Groups](https://docs.charthop.com/sharing-groups), [Data Sheet](https://docs.charthop.com/data-sheet)

[title] Rehire a person
[path] ChartHop for Administrators/Managing people and jobs/Working with people/

:::hint{type="info"}
[Packages](https://www.charthop.com/pricing/):**&#x20;Basic** | **Standard** | **Premium**[﻿﻿](https://docs.charthop.com/user-roles-and-permissions)

[Roles](https://docs.charthop.com/user-roles-and-permissions): Owner | Org editor | Recruiting editor
:::

Since ChartHop retains a record of former employees, you can rehire a person who has left your organization by filling an open job with that person.&#x20;

:::hint{type="warning"}
After rehiring a person, contact the [ChartHop Support team](#) and ask them to merge the person’s old profile into their new one to capture their complete history with your org.&#x20;
:::

![](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/c1lCgYNOqUmlNRk9wnGKh_screenshot-2024-01-19-at-31928-pm.png)

To rehire a person: 

1. From the left sidebar, select **Data Sheet**. 
2. On the **Data Sheet**, in the row for the job to fill, select the Actions menu (⋮). 
3. Select **Fill job**. 
4. In the **Fill job** dialog and the **Person** menu, search for the person you want to rehire. 
5. Enter the following information:
   1. **Start date** - The start date for the person filling the job.
   2. **Move type** - Select **Hire**.
   3. **Note** - Any additional notes regarding the move.
6. Select **Save to primary** to finish filling the job.


[title] Set up budget pools
[path] ChartHop for Administrators/Compensation reviews/Setting up a compensation review/

*Budget pools* are budgets that you can create to establish the amount that can be spent within the compensation review.

You can set up an overall budget for all spending or set up several budget pool allocations for specific uses. For example, you can configure the following for your compensation review:

- a cost of living budget pool that applies to all eligible employees, and
- a separate merit budget pool that reviewers can use for performance-based compensation adjustments.

ChartHop also allows you to configure budget pools so that they're applicable to specific categories of employees, or based on built-in and custom fields. These allow you to create individual budget allocations for each reviewer.

If your company uses fixed budgets, or a certain amount of money assigned to specific reviewers within departments, that is also supported in budget pools.

Reviewers and approvers see the budget pools you establish when they perform the employee compensation reviews and work within those budgets.

:::hint{type="info"}
Setting up budgets also allows ChartHop to provide your reviewers and approvers with real-time visualizations of the financial impact of compensation changes against those budgets. [Learn more.](https://docs.charthop.com/reviewing-employee-compensation)

If you choose not to set up budgets, ChartHop still displays a visualization of how much is spent within the compensation review but does not compare that against a specific budget.
:::

To establish budget pools, open an existing compensation review with a status of **Not started** or **Paused**. Select the **Budget pools** tab.

### Global settings

The **Settings** section at the top of the Budget pools tab applies to all budget pools in the cycle.

| **Setting**                          | **Description**                                                                                                                                                                                                                                                                                                                          |
| ------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Allocation type                      | Controls whether budget amounts are allocated **Proportionally** (amounts drawn from each applicable pool at the same time) or **Sequentially** (amounts drawn fully from the first applicable pool before moving to the next). For sequential allocation to work correctly, the same fields and calculations must be used across pools. |
| Display Total Budget in cycle        | When checked, the total budget amount is visible to participants during the cycle.                                                                                                                                                                                                                                                       |
| Who should the budget be visible to? | Controls which participants can see budget information. Options: **All roles**, **Only certain roles**, **Specific people**, **Custom**.                                                                                                                                                                                                 |
| Budget bar visualizations            | Controls whether all budget bars display (**Show all**) or only those applicable to the reviewer's pod (**Only show applicable** — default).                                                                                                                                                                                             |

### Create a budget pool

You can set up multiple budget pools to allocate and track specific budgets within your organization.

To create a new budget pool:

1. Select **New budget pool**.
2. Configure the budget pool settings (see below).
3. Select **Calculate** to process the calculations and display the calculated budgets for each reviewer. You can scroll horizontally to see the full view.

Budget pools are numbered (#1, #2, etc.) and can be reordered using the arrows in the pool header. When sequential allocation is used, pools are processed in this numbered order.

### Delete a budget pool

To delete a budget pool:

1. Select the **Budget pools** tab.
2. In the pool header, select **Delete**.
3. Select **Confirm** to delete the budget pool.

### Budget pool settings

The following table describes the configuration fields for each budget pool:

| **Field**                                                                 | **Description**                                                                                                                                                                                                                                                                                                                                                                           | **Example**                            |
| ------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------- |
| **Basics**                                                                |                                                                                                                                                                                                                                                                                                                                                                                           |                                        |
| Budget pool label                                                         | The name of your budget pool.                                                                                                                                                                                                                                                                                                                                                             | Merit - US                             |
| Employees the budget pool applies to                                      | The group or category of employees to which the budget pool applies. The available options come from your organization's group types (for example, departments, teams, locations, business units) and vary by org. Options include all eligible employees, groups from your org's group types, or a custom filter.                                                                        | Only specific locations: United States |
| Default budget currency                                                   | The default currency used in your budget pool. Used as a backup when the job currency cannot be detected and for reconciling calculations involving multiple currencies. Defaults to the org default currency. [Learn more.](https://docs.charthop.com/set-a-default-currency)                                                                                                            | USD ($)                                |
| **Visibility**                                                            |                                                                                                                                                                                                                                                                                                                                                                                           |                                        |
| Visibility                                                                | Controls who can see this specific pool during the cycle. Configure the pool to be visible to all participants or only to specific roles or people.                                                                                                                                                                                                                                       | Only certain roles                     |
| **Fields**                                                                |                                                                                                                                                                                                                                                                                                                                                                                           |                                        |
| Field the budget is calculated based upon                                 | The ChartHop field (built-in or custom) on which calculations are based. For example, if you choose Base, ChartHop uses the current values of that field to perform the calculations you enter in the Calculation section.                                                                                                                                                                | Base, Base - annualized                |
| Field budget is allocated from                                            | The ChartHop field from which budget spend is tracked. For example, if you choose Base - changed, ChartHop uses the difference between the new entered amount and the previous amount to figure out how much is being spent.                                                                                                                                                              | Base - changed, Base - raise amount    |
| How budget use is calculated                                              | Controls how the budget spend is measured. Options: **Change in tracked field**, **Custom formula - Amount (money)**, **Custom formula - Amount (number)**.                                                                                                                                                                                                                               | Change in tracked field                |
| **Calculation**                                                           |                                                                                                                                                                                                                                                                                                                                                                                           |                                        |
| Are calculations dependent on one or more field values, like performance? | Determines whether the budget amount varies based on a specific field. Options: **No, the calculation is the same for everyone** — applies the calculation evenly across all eligible employees; **No, the calculation is based on Reviewer pods** — applies fixed budget amounts per reviewer pod; **Yes** — enables an additional field to specify which field affects the calculation. | Yes                                    |
| Which field affects the calculation?                                      | The built-in or custom field that affects the calculation. Fields must be of type Number, Money, Percent, or Single select.                                                                                                                                                                                                                                                               | Performance rating                     |
| Calculation                                                               | The specific calculation method. Options: **Percent**, **Set amount (money)**, **Custom formula - Percent**, **Custom formula - Set amount (money)**.                                                                                                                                                                                                                                     | Percent                                |
| Target value                                                              | A target value for the calculation.                                                                                                                                                                                                                                                                                                                                                       | 1.5%, $3000                            |

:::hint{type="info"}
[Packages](https://www.charthop.com/pricing/): Basic | **Standard**\* | **Premium**

\* Available as an add-on
:::


[title] Sharing a dashboard
[path] ChartHop for Administrators/Dashboards/

You can share your dashboards with relevant parties.&#x20;

To share your dashboard:

1. Select on the **+** icon at the top right corner of the page.
2. Type in the name(s) of the people you wish to share the dashboard with.
3. Set an access level per person.
   - **Owner** - access to view, edit, and share the dashboard
   - **Edit** - access to view and edit the dashboard (cannot delete or clone)
   - **View** - can only view the dashboard.
4. If you wish to make the dashboard accessible to Org members from the dashboards list page, update the **Dashboard sharing** field to reflect the desired level of access.
   - **Private** - the dashboard will only be shared with the named individuals above.&#x20;
   - **Highly** **sensitive** - the dashboard will only be shared with the named individuals above **and** Org members with highly sensitive access.
   - **Org** **public** - the dashboard will be available to all Org members.
5. Set the **Data sharing** field.
   - **Normal** - Org members who view this dashboard will only see the underlying data that they have access to.
   - **Full** - Org members who view this dashboard will see all of the same data that the creator of the dashboard can see.
6. Remove a person from this list to stop sharing this dashboard with them.
7. Select **Done** to share the dashboard.

:::hint{type="info"}
[Modules:](https://www.charthop.com/pricing/) <font color="#000000">**HRIS |** </font>**Engagement | Goals | Performance |&#x20;**<font color="#000000">**Compensation Reviews |** </font>**Headcount Planning**
:::


[title] Group names and aliases
[path] ChartHop for Administrators/Managing groups/

Groups are how you identify groupings or divisions of your organization. For example, you create a group to represent a department.&#x20;

### Group names

You can use a group name to uniquely identify a department, team, or location. Group names are unique identifiers and may only be used once in your organization.

### Group aliases

You can use group aliases to consolidate multiple group names into a single group. When group names change such as a department being renamed, you can create an alias for a group that encompasses the old names and still lets you maintain historical data.

Group aliases are also helpful to help you consolidate different department names used in your payroll system. For example, your payroll system may use  "customer success", "CS", and "customer service" to refer to the same department. With ChartHop, you can set up a group alias that combines these group names into a single department. For example, you can create a department called Customer Sucess and add two aliases to that department. In this case, a person or job that is assigned to "CS" or "customer service" in your payroll system will be a part of the "customer success" department in ChartHop. This helps you eliminate "extra" groups in your org chart without needing to update your payroll system. &#x20;

![Group name and aliases](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/t66IXIvrGsSCFleUb1na6_data-model-department-create-department.png)

:::hint{type="warning"}
If you use a term as an alias, you cannot also use it as a group name.
:::

### Differences between Parent groups and aliases

Parent groups are specifically used to organize child groups according to your organization's structure in ChartHop. Aliases, however, are best used as tie-ins to the department names used in your payroll system and ATS.&#x20;

For example, in your payroll system, you could have a department named "Support", while in ChartHop that same department could be referred as "Customer Support".

:::hint{type="info"}
[Modules:](https://www.charthop.com/pricing/) <font color="#000000">**HRIS |** </font>**Engagement | Goals | Performance |&#x20;**<font color="#000000">**Compensation Reviews |** </font>**Headcount Planning**
:::


[title] Retire compensation bands
[path] ChartHop for Administrators/Planning/Compensation bands/

If you want to start over and establish a new set of compensation bands, you can retire all your compensation bands so that they are no longer in effect. 

To retire your compensation bands:

1. From the left sidebar, select **Data Model**
2. From the sub-menu, select Job Architecture > **Compensation Bands**.
3. Select **Edit**.
4. In the **Settings** tab, navigate to the **Retire** section.
5. Select **Retire compensation bands**.
6. Select an effective date on which all compensation bands are retired.
   - All compensation bands on or before the date you select will be retired.
7. Enter **RETIRE** to confirm.
8. Select **Retire**.
   - All compensation bands, tiers, job levels, and multipliers are retired and no longer in effect. You can use the date slider in ChartHop to view retired compensation bands.
   - Any jobs previously mapped to the compensation band will no longer show the compensation band.

:::hint{type="warning"}
Overlapping the effective dates of multiple compensation bands may lead to errors.



ChartHop recommends retiring compensation bands on a date that does not overlap with the effective dates of any new compensation bands. For example, suppose you are retiring a set of compensation bands today. When uploading a new set of compensation bands, define the effective date for tomorrow or another date in the future, so there is no overlap.
:::



:::hint{type="info"}
[Packages](https://www.charthop.com/pricing/)**:&#x20;**<font color="#a9a9a9">Basic</font> <font color="#000000">|</font> <font color="#000000">**Standard*** | **Premium**</font>****

\* Available as an add-on
:::

:::hint{type="info"}
﻿﻿[Roles](https://docs.charthop.com/user-roles-and-permissions): Owner | Org editor
:::


[title] Bands
[path] ChartHop for Administrators/Managing groups/

A Band is a compensation level structure that you can use to organize the salary range of individual members in your organization.

:::hint{type="warning"}
The Compensation bands feature has been updated and the documentation has been moved. [Learn more.](https://docs.charthop.com/compensation-bands)
:::


[title] Creating effective dates
[path] ChartHop for Administrators/Managing people and jobs/Effective dating/

You can create effective dates in order to schedule changes to your job and employee data that can be applied in the present, past (backdated), and future.

### Where to set effective dates

You can set effective dates from the following locations in ChartHop:

- Data Sheet
- When creating and editing jobs
- Spreadsheet import tool
- Payroll app settings

### Set effective dates from the Data Sheet

You can set effective dates for specific job and employee data from the **Data Sheet**. By default, when editing data in the **Data Sheet**, your edits are put into effect the same day you make the change. For example, you could edit an employee's information in the **Data Sheet** by changing their department and manager assignments today. Once you've saved the edits, the changes are put into effect immediately and the effective date would be set to today's date.

Alternatively, you can use the date slider/picker tool to set effective dates for data to occur sometime in the past (backdating) or in the future. For example, you can make similar edits in the **Data Sheet** by changing another employee’s department and manager assignments. However this time, before making those changes in the **Data sheet**, you can set the date slider/picker to a future date which automatically sets the effective date for the change to occur on that date after the changes are saved.

To set effective dates using the **Data sheet**:

1. From the left sidebar, select **Data Sheet.**
2. Select **Edit**.
3. Use the date slider/picker tool to select the date you want your changes to take effect.
4. Make your changes in the **Data sheet**.
5. Select **Save changes**.

### Set effective dates when creating and editing jobs

When creating or editing a job you can determine when the job's changes will be put into effect by specifying a date.

To set effective dates when creating and editing jobs:

1. From the left sidebar, select **Org Chart**. 
2. On the **Org Chart**, select the person or open job you want to edit (for example, by adding a direct report or editing job details)
3. In the Profile Summary, you can edit a person's job by selecting **Edit job**, or open the menu next to the button and select **Add direct report**. [Learn more](https://docs.charthop.com/add-a-new-open-job).
4. In th&#x65;**&#x20;Create job&#x20;**&#x6F;r **Edit job&#x20;**&#x64;ialog, add job information to the appropriate sections as needed.
5. Depending on whether you're creating a job or editing a job, under the **Structure&#x20;**&#x74;ab, the effective date section will be labeled accordingly:
   - **Create date** - The effective date label used when creating a job.
   - **Effective date of change** - The effective date label used when editing a job.
6. Once you've filled out your appropriate changes and selected **Save**, your job edits will be put into effect according to the date you supplied to the **Create date** or **Effective date of change&#x20;**&#x73;ections.

### Set effective dates from a spreadsheet import

You can set effective dates for multiple jobs in bulk using the spreadsheet import tool. To do this, add a date column to your spreadsheet when importing new job and employee data. When you include the date column and assign a date, ChartHop will automatically assign the date in the column as the data's effective date.  [Learn more](https://docs.charthop.com/importing-spreadsheet-data).

If you don't include the date column, the effective dates for the job and employee data will default to the day you import the information into ChartHop. 
&#x20;

[title] Terminate a person
[path] ChartHop for Administrators/Managing people and jobs/Working with people/

When you terminate a person in ChartHop, you remove them from your current ChartHop organization. You can still search for and view terminated people on the **Data Sheet&#x20;**&#x6F;r the **Org Chart** by moving the date slider to when they were still with your organization.

![Terminate person](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/yUzXjn_gQD5bWkOUOs-Jo_terminateperson.png)

To terminate a person:

1. From the left sidebar, select **Org Chart**. 
2. On the **Org Chart**, select the person to terminate. 
3. In the Profile Summary, from the **Edit job ▼&#x20;**&#x64;ropdown, select **Terminate**.
4. In the **Terminate Person** dialog, configure the termination. See the field configuration table below for descriptions.
5. Select **Save to primary** to finish terminating the employee.&#x20;

You can also terminate a person from the **Data Sheet**. To do this, select the row menu (**⋮**) for the person you want to terminate and select **Terminate**.&#x20;

:::hint{type="warning"}
When you terminate a person, an open role is created by default. Selecting **No Backfill** removes the role from your organization on the date you define in the **Last Day** field.&#x20;



If you set the **Announce date** before the employee's **Last Day** and also select **No Backfill**, then the open role can still display for your organization since the **Last Day** has not passed and the role has not been removed.
:::

### Configuring a termination

When you terminate a person, you can configure the following fields:

| **Field**      | **Description**                                                                                                                                                                                                                                          |
| -------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Last day       | The person's last day of employment.                                                                                                                                                                                                                     |
| Announce date  | The date when the departure becomes visible on the **Org Chart&#x20;**&#x61;nd is announced to the rest of the organization.                                                                                                                             |
| Departure type | The conditions of the departure. You can select from the following options:<br />* **Voluntary**
* **Involuntary**<br />This information is only visible to users with access to sensitive data. [Learn more.](https://docs.charthop.com/sensitive-data) |
| Backfill job   | Whether the position is to remain as an open role.                                                                                                                                                                                                       |
| Regrettable    | Whether the departure is considered regrettable by your organization. <br /><br />This information is only visible to users with access to sensitive data. [Learn more.](https://docs.charthop.com/sensitive-data)                                       |
| Reason         | The reason for the termination. You can select a reason from the dropdown list.                                                                                                                                                                          |
| Notes          | Additional notes regarding the termination.                                                                                                                                                                                                              |

:::hint{type="info"}
[Packages](https://www.charthop.com/pricing/):**&#x20;Basic** | **Standard** | **Premium**[﻿﻿](https://docs.charthop.com/user-roles-and-permissions)

[Roles](https://docs.charthop.com/user-roles-and-permissions): Owner | Org editor
:::








[title] Complete your Bands spreadsheet
[path] ChartHop for Administrators/Planning/Compensation bands/Using the Compensation bands wizard/

After you've completed ChartHop's compensation band wizard, you download a custom spreadsheet to use to input your compensation data according to the parameters you defined.

This topic provides information about how to complete your spreadsheet. Remember that your spreadsheet may not include all of these columns and instead represents the answers you provided in ChartHop's questionnaire.

Each row in your spreadsheet represents a separate compensation band within your organization and can have unique values for that band, including whether the band is for hourly or salaried employees, includes equity, and what job level uses the band. The spreadsheet automatically validates that your values are entered in the right format.

Because ChartHop customizes your compensation bands according to your needs, the spreadsheet you download may not include all columns listed on this page.

:::hint{type="info"}
After importing your initial compensation band data, you can reference the data in ChartHop through reports, forms, complex filters, and more using the [Carrot Query Language](https://docs.charthop.com/comp-band) or specific Built-in fields.
:::

### Structure and Base Pay tab

This tab is included in all spreadsheets, although the columns vary according to your choices in the questionnaire.

| **Column**                         | **What it means**                                                                                                                                                                                                                                         | ﻿**Example values**                                                                      |
| ---------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------- |
| Top-level tier                     | The first column represents the top-level tier you indicated and is named to match the field you chose in the questionnaire.                                                                                                                              | Example: Department                                                                      |
| Second-level tier                  | Represents the second-level tier you indicated and is named to match the field you chose in the questionnaire.                                                                                                                                            | Example: Information Technology                                                          |
| Third-level tier                   | Represents the third-level tier you indicated and is named to match the field you chose in the questionnaire.                                                                                                                                             | Example: Job Function                                                                    |
| Pay time period (salary or hourly) | The pay time period for your exempt and/or your non-exempt employees' base pay.                                                                                                                                                                           | ﻿Salary <br />Hourly                                                                     |
| Hours per week / Weeks per year    | Values used to calculate the annualized equivalents for hourly bands                                                                                                                                                                                      | 40 / 52                                                                                  |
| Band Minimum                       | The monetary amount that defines the lower bound of the band’s base pay.                                                                                                                                                                                  | Salary example: ﻿$130,000 Hourly example: $50                                            |
| Band maximum                       | The monetary amount that defines the upper bound of the band’s base pay.                                                                                                                                                                                  | Salary example: $70000 Hourly example: $35                                               |
| Midpoint                           | The midpoint value in the band’s range. Will be calculated automatically if the base band’s minimum and maximum are specified. Is required if “percentage spread” is to be used.                                                                          | Salary example:<br />$100,000 Hourly example: $42                                        |
| Percentage spread                  | The percentage above and below the midpoint that defines the upper and lower bounds of the band. <br /> <br />                                                                                                                                            | ﻿A value of 30% with a midpoint of 100,000 would create a pay range of $70,000-$130,000. |
| Target salary                      | A goal value for the band which may be different from the midpoint. Provides guidance to recruiting or finance teams for new hires.<br />For example, some teams may target the 70th percentile in their band range, rather than the midpoint.            | Salary example: $90,000 Hourly example: $40                                              |
| Target salary percentile           | A goal percentile for the band which may be different from the midpoint. Provides guidance to recruiting or finance teams for new hires.<br /><br />For example, some teams may target the 70th percentile in their band range, rather than the midpoint. | 70%                                                                                      |
| Job level                          | The name of the universal job level associated with this band. The name must exactly match job levels listed on the Comparable job levels tab OR the custom job levels you defined on the Job Levels tab.                                                 |                                                                                          |
| Currency                           | The currency for the base pay of the given band. Indicate currency using the[ standard indicators](https://www.ifcmarkets.com/en/about-forex/currencies-and-abbreviations).                                                                               | Example:<br />﻿USD                                                                       |
| Equity target                      | The amount of equity for the given band. Leave blank if the band does not have an equity component. You can enter equity in three ways: flat money value, shares, or percentage of base.                                                                  | 100 shares                                                                               |
| Variable target                    | The amount of variable pay for the given band. Leave blank if the band does not have an variable component. You can enter equity in two ways: flat money value or percentage of base.                                                                     | Flat money value:<br />$10,000 Percentage of base: 15%                                   |
| Variable currency                  | The currency for the variable bonus of the given band. Indicate currency using the[ standard indicators](https://www.ifcmarkets.com/en/about-forex/currencies-and-abbreviations).                                                                         | Example: USD                                                                             |

### Multipliers and Location Multiplier mapping tabs

The **Multipliers** and the **Location Multiplier mapping** tabs are available only when you store location information in ChartHop and select to apply location as a multiplier in the compensation bands questionnaire.

These tabs automatically pull in your existing ChartHop locations and allow you to define multipliers for each. You can use the same multiplier for similar locations. For example, locations such as San Francisco and New York may be included in the same multiplier.

**Multipliers tab**

Use the **Multipliers** tab to define any multipliers you need.

| **Column**             | **What it means**                                                                                                                                                                                                            | **Examples**                          |
| ---------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------- |
| Multiplier name        | The name of the multiplier you want to define. For example, New York and San Francisco may be included in a multiplier called "Max Cost".                                                                                    | Example values: Max Cost<br />US West |
| Differential value (%) | The amount of the adjustment for the multiplier. Express this as a percentage to multiply by. This column is required for all locations/rows. If there is no multiplier applied to a given location, enter the value as 100. | Example value: 125                    |

**Location Multiplier Mapping tab**

Use the **Location** **Multiplier mapping** tab to map the multipliers you defined to the ChartHop locations included in your organization.

| **Column**         | **What it means**                                                                                                                                                             |
| ------------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| ChartHop Locations | The locations in this column are pulled from your ChartHop instance. Do not change these. If you don't want a multiplier for a particular city, you can leave that row blank. |
| Multiplier         | Enter one of the multipliers that you defined on the Multipliers tab. If you don't want a multiplier for a particular city, you can leave that row blank.                     |

### Job levels tab

The **Job levels** tab is available only when you choose to customize your job level names.&#x20;

When you customize your job level names, you can still map them to industry standard levels. For example, you can choose to have simpler names for your job levels, such as L1, L2, or L3, and map these custom names to an appropriate level within your selected industry standard.

To map custom names to an industry-standard level, fill out the Custom job level column in the **Job levels** tab, and then choose an industry-standard level to use.

If you didn't choose to map your bands to an industry standard, you just need to create your job level names on this tab. Each row should contain a job level name.

| **Column**                | **What it means**                                                                                                                                                          | **Examples**                                       |
| ------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------- |
| Custom job level          | The name of your custom job level.                                                                                                                                         | L1                                                 |
| (Industry-standard level) | This column is either named Radford level or Option Impact level. This column is not included if you chose to create custom job level names without mapping to a standard. | Choose from the pre-populated list of level names. |

:::hint{type="info"}
[Packages](https://www.charthop.com/pricing/)**:&#x20;**<font color="#a9a9a9">Basic</font> <font color="#000000">|</font> <font color="#000000">**Standard*** | **Premium**</font>****

\* Available as an add-on
:::

:::hint{type="info"}
﻿﻿[Roles](https://docs.charthop.com/user-roles-and-permissions): Owner | Org editor
:::


[title] Add a new person to your org
[path] ChartHop for Administrators/Managing people and jobs/Working with people/

:::hint{type="info"}
[Packages](https://www.charthop.com/pricing/):**&#x20;Basic** | **Standard** | **Premium**[﻿﻿](https://docs.charthop.com/user-roles-and-permissions)

[Roles](https://docs.charthop.com/user-roles-and-permissions): Owner | Org editor | Recruiting editor
:::

Although you usually add new people to your ChartHop organization through integrations, you can add a person manually if needed. To do this, you create an open job and then fill it with a new hire. 

If you aren't using integrations and want to add multiple people at once, you can upload a spreadsheet. [Learn more](https://docs.charthop.com/add-new-people-to-charthop).

:::hint{type="warning"}
Note that you can’t set a person’s start date before their job’s creation date. If you need to do so, first change the job creation date. [Learn more](https://docs.charthop.com/undo-job-changes).&#x20;
:::

![](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/Jlk6ZZ8taNjtan1gTKAy-_screenshot-2024-01-19-at-33056-pm.png)

To add a new person to your ChartHop organization manually: 

1. From the left sidebar, select **Data Sheet**. 
2. On the **Data Sheet**, from the **Edit job** menu, select **New Open Job**. 
3. In th&#x65;**&#x20;Create job&#x20;**&#x64;ialog that appears, add job information to the appropriate sections:
   1. **Structure** - General information including title, department, and location.
   2. **Compensation** - Compensation information including salary and bonus.
   3. **Recruiting** - Recruiting information including hiring status and target start date.
   4. **Description** - A general description about the role.
   5. **Custom fields** - Any custom data added by your organization. [Learn more](https://docs.charthop.com/working-with-custom-fields).
4. Select **Save to primary** to finish creating a new job. 
5. On the **Data Sheet**, in the row for the job you just created, select the Actions menu (⋮).
6. Select **New hire**. 
7. In the **New hire** dialog, enter all available information about the person.&#x20;
   Note that only **First name** and **Last name** are required, but ChartHop strongly recommends adding a **Work email&#x20;**&#x6F;r **Home Email** since email address is the primary identifier. &#x20;
8. Select **Save** to finish adding a new person.&#x20;


[title] Exporting from a scenario
[path] ChartHop for Administrators/Planning/Scenarios/

:::hint{type="info"}
[Roles:](https://docs.charthop.com/user-roles-and-permissions) Recruiting editor | Owner | Technical owner
:::

:::hint{type="info"}
[Packages](https://www.charthop.com/pricing/)**:&#x20;**<font color="#a9a9a9">Basic</font> <font color="#000000">|</font> <font color="#000000">**Headcount Planning** | </font><font color="#000000">**Compensation Reviews** | </font><font color="#000000">**Performance** | </font><font color="#000000">**Engagement** </font>
:::

ChartHop enables you to export data from your scenario in various formats. You can export your scenario changes and scenario comments to CSV and create a PowerPoint file based on the changes you make to your **Org Chart** within your scenario.

:::hint{type="info"}
You can export from a scenario regardless of status (whether Open, In Review, Merged, or Archived) as long as you have **Owner** permission for the scenario.
:::

![Export scenario](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/nId6Zy088GRy_v0_MGvCq_exportscenario.png "Export scenario")

## Export a scenario to CSV

You can export all the changes in a scenario to a CSV. Each change you’ve made in the scenario is depicted in its own row within the spreadsheet.

To export your scenario changes to a spreadsheet:

1. Open your scenario. 
   - You must have **Owner** permission to export the scenario.
2. From the **Actions** ⏷ dropdown at the top right of the screen, select **Export CSV**.
   - If your in-progress scenario is currently in a review status of **Open**, you can select **Export CSV** from the **Submit for approval** ⏷ dropdown.
3. Once the export has finished generating, select **Download**.
   - ChartHop generates a spreadsheet with your scenario changes.
   - Each row in the spreadsheet depicts a separate change.
   - You can find details on the [ export formatting here.](docId\:xtAS8QlmZJnc3oVkTKrPk)  &#x20;
4. Close the **Export&#x20;**&#x64;ialog once you’re finished downloading.

## Export comments in a scenario

You can export all the comments you and your collaborators enter in a scenario. This helps you compile all the comments made throughout the scenario in a spreadsheet for additional portability and transparency.

The following information is included when you export comments from a scenario: 

- Name of the employee who received the comments (when applicable) 
- Date and time stamps
- ID of the person who entered the comment
- Whether the comment was related to a specific change or employee (entered in a change row) or an overall scenario comment (entered in the **Comments** section at the bottom of the Scenario)

To export a spreadsheet with all comments from your scenario:

1. Open your scenario. 
   - You must have **Owner** permission to export comments from the scenario.
2. From the **Actions** ⏷ dropdown at the top right of the screen, select **Export Comments**.
   - If your in-progress scenario is currently in a review status of **Open**, you can select **Export Comments** from the **Submit for approval** ⏷ dropdown.
3. Once the export has finished generating, select **Download**.
   - ChartHop generates a spreadsheet with your scenario comments.
   - Each row in the spreadsheet depicts a separate comment. Employees or changes with multiple comments will display in multiple rows.
4. Close the **Export Scenario Comments** dialog once you’re finished downloading.

## Export a scenario Org Chart to slides

You have the ability to export your scenario **Org Chart** to slides. This **Org Chart** reflects any changes you’ve made in the scenario and is different from your primary **Org Chart**. 

Exporting a scenario **Org Chart** is helpful in situations where your scenario includes a lot of people moves and you want to present those changes visually to other stakeholders.

To export a scenario **Org Chart** to slides:

1. Open your scenario. 
   - You must have **Owner** permission to export the scenario.
2. From the **Actions** ⏷ dropdown at the top right of the screen, select **Export PowerPoint**.
   - If your in-progress scenario is currently in a review status of **Open**, you can select **Export PowerPoint** from the **Submit for approval** ⏷ dropdown.
3. Configure your org chart export. [Learn more.](https://docs.charthop.com/export-your-org-chart-to-slides)
4. Select **Export**.&#x20;
   - Depending on the size of your organization, the export may take some time.
5. Once the export has finished generating, select **Download**.
6. Close the **Export&#x20;**&#x64;ialog once you’re finished downloading.


[title] Assign collaborators
[path] ChartHop for Administrators/Compensation reviews/Setting up a compensation review/

*Collaborators* are people who work alongside your reviewers and approvers to guide them throughout the compensation review cycle. These individuals (for example, a senior HR advisor or HRBP) help ensure that your reviewers and approvers are on the same page when it comes to your organization’s compensation goals.

When you assign a collaborator to work with a reviewer or approver, the collaborator sees the same information that the reviewers and approvers see in the compensation review. You have the flexibility to give your collaborators as much control over a compensation review proposal as you want:

- For example, you can set it up so that collaborators have view-only access and only the reviewer or approver can submit their compensation review proposal. 
- Or, if you prefer your collaborators to be more hands-on, you can give collaborators the ability to edit and even submit on behalf of a reviewer. 

All collaborators have the same level of permissions that you assign.

![Collaborators tab](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/x2lxfSdvw_c-c1m32Z7Rt_collaboratorssetup.png)

To assign collaborators, open an existing compensation review with a status of **Not started** or **Paused**. Select the **Collaborators** tab.

:::hint{type="info"}
When you are not working with collaborators in the compensation review, select **No, we are not using collaborators&#x20;**&#x69;n the **Are you using collaborators in this cycle?** dropdown. This option is selected by default. Please note that when you change your selection for the **Are you using collaborators in this cycle?** field, any previous configuration you’ve made is deleted and the Collaborators tab is reset. Once you launch your compensation review cycle, you can't make any more changes to this field.
:::

### Assign the same collaborators for all reviewers and approvers

When the same collaborators are going to be working with all reviewers and approvers in your compensation review cycle, you can assign them all at once. Collaborators are assigned based on the eligible employees included in the compensation review.

To assign the same collaborators to all reviewers and approvers:

1. Navigate to the **Collaborators&#x20;**&#x73;ection in the **Collaborators&#x20;**&#x74;ab.
2. In the **Are you using collaborators in this cycle?** field, select **Yes, they are the same for everyone in the org**. 
3. Assign permissions for your collaborators in the **What permissions should collaborators have?** field. These permissions are applied to all collaborators. You can select from the following permission options:
   - **View only** - Indicates collaborators can only view compensation review proposals for the reviewers and approvers they’re working with.
   - **Edit only** - Indicates collaborators can view and make changes to the compensation review proposals for the reviewers and approvers they’re working with.
   - **Edit & Submit** - Indicates collaborators can view, make changes, and submit compensation review proposals on behalf of the reviewers and approvers they’re working with.
4. Enter the names of your collaborators in the **Who would you like to add as collaborators&#x20;**&#x66;ield. 
   - Remember that these individuals will have access to the same proposals and information that displays to the reviewers and approvers they’re assigned to work with.
   - The individuals you add as collaborators display in the Collaborators column for each reviewer and approver in the **Reviewers & approvers&#x20;**&#x73;ection.
   - Your changes are saved automatically.

### Assign different collaborators for different parts of the organization

You can use ChartHop fields, for example, Department or Location, to get even more specific about how and where you assign collaborators to different groups of reviewers and approvers.&#x20;

When you choose a field to assign collaborators, all of the available field values display in the **Fields** section and collaborators are assigned based on eligible employees. For example, if you assign Melinda Simpson as the collaborator for the Los Angeles office, then every reviewer and approver who has at least one eligible employee in the Los Angeles office will be assigned Melinda as a collaborator.

![Collaborator fields](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/vlpcF7xYbPadb5qC3ngUr_collaboratorsdifferent.png)

To assign collaborators to reviewers and approvers based on a ChartHop field:

1. Navigate to the **Collaborators&#x20;**&#x73;ection in the **Collaborators&#x20;**&#x74;ab.
2. In the **Are you using collaborators in this cycle?** field, select **Yes, they are different people for different parts of the org**. 
3. Assign permissions for your collaborators in the **What permissions should collaborators have?** field. These permissions are applied to all collaborators. You can select from the following permission options:
   - **View only** - Indicates collaborators can only view compensation review proposals for the reviewers and approvers they’re working with.
   - **Edit only** - Indicates collaborators can view and make changes to the compensation review proposals for the reviewers and approvers they’re working with.
   - **Edit & Submit** - Indicates collaborators can view, make changes, and submit compensation review proposals on behalf of the reviewers and approvers they’re working with.
4. In the **Fields** section, select a ChartHop field to use for collaborator assignments from the dropdown (for example, Department).
   - Select **Add Another Field** to add another dimension to the way collaborators are assigned (for example, add Location if you want a specific person to collaborate with reviewers and approvers in the Accounting department in New York).
5. Enter the names of your collaborators in each of the ChartHop field values that display. 
   - For example, if you selected to assign based on Department, enter a collaborator for each department that is listed.
   - Remember that these individuals will have access to the same proposals and information that displays to the reviewers and approvers they’re assigned to work with.
   - The individuals you add as collaborators display in the Collaborators column for each reviewer and approver in the **Reviewers & approvers&#x20;**&#x73;ection.
   - Your changes are saved automatically.

### Assign collaborators for an individual reviewer or approver

You also have the option to manually assign a specific collaborator to a reviewer or approver on an individual basis.&#x20;

![Assign a collaborator](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/Ngmgd5gDa6aBabEP2-PkS_compreviewindvcollaborators.png)

To assign a collaborator for an individual reviewer or approver:

1. Navigate to the **Reviewers & approvers&#x20;**&#x74;able in the **Collaborators** tab.
2. Select the name of the reviewer or approver to whom you want to assign a collaborator.
3. In the **Assigned collaborators** field, enter the name of the individuals you want to assign for the selected reviewer/approver.
   - Your changes are saved automatically.

### Unassign a collaborator from an individual reviewer or approver

You can also manually unassign a collaborator from an individual reviewer or approver. This is helpful when you’ve already assigned all collaborators to your organization but want to make a few individual changes.

To unassign a collaborator for an individual reviewer or approver:

1. Navigate to the **Reviewers & approvers&#x20;**&#x74;able in the **Collaborators** tab.
2. Select the name of the reviewer or approver whose collaborator you want to remove.
3. In the **Assigned collaborators** field, select **X** next to the collaborator you want to unassign.
   - Your changes are saved automatically.

### Reset collaborators

You have the option to reset your collaborators during configuration in case you need to start over.

To clear all collaborator assignments:

1. In the **Collaborators** tab, select **Reset Collaborators**.
2. Select **Confirm**. All your collaborator assignments are cleared.


[title] Configuring charts
[path] ChartHop for Administrators/Dashboards/

# Configuring charts in your dashboard

Charts display the data within your dashboards. When you add a chart, you select the data measures that are included, how those measures are aggregated (for example, total, % of total), and what dimension(s) to break the measures into. Each chart type contains different configuration dropdowns so that you can easily build and customize your chart. 

You can add global data filters that apply to all charts within your dashboard, or use chart-specific filters for each chart. You can also configure charts to ignore global dashboard filters when they are applied.

![](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/A5BK_nvb-gVassNUGNgGj_image.png)

### Add a chart to a dashboard

You can add as many charts as you want to your dashboard.

To add and configure a chart:

- Access your dashboard.
- Select **Add chart**. 
- In the **Chart type** field dropdown, select the type of chart you want to create.[ Learn more.](https://docs.charthop.com/types-of-charts-you-can-add-to-a-dashboard)﻿
  - You can select from the following options:
    - Timeseries:
      - **Area chart**
      - **Line chart**
      - **Table** 
      - **Vertical stacked bar chart**
    - Non-Timeseries:
      - **Single Metric**
      - **Horizontal bar chart**
      - **Pie chart**
      - **Table**
      - **Vertical bar chart**
- In the **Configure chart** section, define your **Y-axis** dropdown with the measures you want to include in your chart. 
  - You can select from built-in and custom fields within the dropdowns.
  - You can also enter the name of a built-in or custom field to filter the dropdown list.
  - When a chart type includes a time series, the time period is automatically defined in the appropriate chart axis based on the time period you choose in the global filters.
- Select the value for how those measures are displayed (for example, Total, % Total, Min, Max).
  - The options available by default are based on the data type associated with the measure you select.
  - The **Format** field is also automatically defined based on the measure you select.
- (Optional) **Below the chart preview**, you can choose your **X-Axis** and **Group by** dropdowns, selecting additional measures to add more dimension to your data. For example, selecting **Department** displays the data in the chart grouped by department. 
  - If you choose to add a measure in **Group by**, you can customize the colors, the labels, choose what order you want the data to display in, as well as displaying the top values, grouping remaining values as other, and including “None” in your results. 

![](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/WrjqrrTcHgMZqnHJpxl7z_image.png)

- (Optional) Select the **Show Date Range&#x20;**&#x63;heckbox to display the date range directly within the chart.
- (Optional) Select the **Show Data Labels** checkbox to display data labels directly within the chart.
- (Optional) Define the scale of your chart by entering the Min and Max values you want to use in the chart axis.
- (Optional) Select the desired format **Metric Format** box if you want data to display differently than the default.
- (Optional) In the **Tooltip** **decimal places&#x20;**&#x66;ield, enter the number of decimal places to display for the values in your chart. You can select between 0 and 5 places.
- In the top right corner of the chart, select **Save & exit&#x20;**&#x74;o add the chart and return to the dashboard.
- (Optional) Repeat these steps to add additional charts.

### Customizing chart dimensions

You can use Carrot to customize the measures of a chart, which enables you to perform very detailed analyses of the data in your ChartHop org. 



![](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/X1QrqWqvA42vp1Gn2geIZ_image.png)

This feature is off by default. To turn it on, select **Customized (Advanced)&#x20;**&#x6F;n the chart. For more information about Carrot, see Getting started with Carrot.[ Learn more](https://docs.charthop.com/carrot-reference).



::Image[]{src="https://lh7-us.googleusercontent.com/k0m6X_kQHnVUUVNU9gsplK783fj61BEihh32AA6gUdHn6_PGqom1m88Y9iVAHTHIYop1fU37IQ4tFFes5a4T89IEU6Gc06b5U5pOY8jXoo1MccmykYVDl0XHiBHsEViID5g2U1pARBxxAEOXkL1DAp0" size="64" width="770" height="102" position="center" showCaption="false"}

&#x20;

::Image[]{src="https://lh7-us.googleusercontent.com/BxXdyG6Uokjeg7r3l_rlAZagz7see2_gUbeBM5v4Q89VCR-MyFfIKTTNg-t-b5v_V9JHnq0syVP_lTUH_R6DwRlxy32T-jMIa2yDzdY2X7I_cFlTgFvR0AaGdRIJgTu_O8fF8t4PB8TmgI5UTadESRE" size="44" width="520" height="524" position="center" showCaption="false"}

﻿

Once you’ve enabled Carrot, you can customize the current measures through Carrot expressions. You can also add a new value to the measures by selecting **Customize each item.&#xA0;**

### Define the axis scale for a chart

You have the ability to define the Min and Max values that are used in the axis of your area, line, and bar charts. This helps with the readability of your charts and gives you more control over how you present your data. 

By default, the axis scale is automatically determined based on the values of your data. However, you can enter a custom Min and Max value in the **Axis Scale** fields when you’re configuring your chart to override those automatic values.

Axis scales are maintained when you export your chart. You can delete any values you have entered to return to the default axis scale values.



![](https://lh7-us.googleusercontent.com/JZOxMfirIJBcdfrpKj3Yw1q7_j3vNp-2XEIPS-VuWhsFfxGG1XxASzS-9VMvzVP1uaU9yj0qqoA4xGNp_Xjo2cq3agZrtA-sdv-kFP_WrZsC0cMX2uMgpy-UQ5Ixeax_yFPFtbRH9-5KPmW11erNt5g)

﻿

### Display data labels in a chart

When you export a dashboard, exported charts display data labels depending on your configuration of the **Data Labels** checkbox.

When you hover over a chart, tooltips display data values with additional information. However, you have the option to display data labels directly within the chart so that you can see this additional information without hovering.

To automatically display data labels in a chart, check the **Data Labels** checkbox. You can check this option for all chart types except tables. 

### Display date ranges in a chart

To automatically display date ranges on a chart, check the **Date range** checkbox. You can check this option for all chart types. 

For time series charts, or other charts that display data between two dates, it will display the range. For non timeseries charts, it will display the end date that the data is from. 

### Create a header to separate dashboard sections

You can use headers to separate charts in your dashboard.&#x20;

Learn more about them [here](https://tella.video/melissas-video-b0qt). 

![](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/tfyvhqxf4peIfM-PhyjmA_image.png)

### Clone a chart in a dashboard

You can clone an existing chart by selecting the chart menu (⋮) and selecting **Clone**. When you clone a chart, all chart settings and filters are maintained in the duplicated chart.



![](https://lh7-us.googleusercontent.com/SNo6jntZ9IMckVnXBtn__Hjdl91VJpujOKlYkcnaVA0-sYJ56dFJJKFdBtzUTqi3BOutgMYD49JgOU70QW9d_0tLB_mg98jWbYpFpzBgGbh0hlwArqtBxg5WQsGDOqhKuFp9SF7ERwj3M3pw4mMsIo0)

﻿

﻿[﻿Packages](https://www.charthop.com/pricing/)**:&#x20;**&#x42;asic | **Headcount Planning** | ﻿**Compensation Reviews** | ﻿**Performance** | ﻿**Engagement** ﻿

[title] Creating departments
[path] ChartHop for Administrators/Managing groups/Departments/

:::hint{type="info"}
﻿﻿[Roles](https://docs.charthop.com/user-roles-and-permissions): Technical owner | Org editor 
:::

You can create departments to fully capture the structure of your ChartHop organization.&#x20;

To create a department:

1. From the left sidebar, select **Data Model**.
2. From the sub-menu, select **Departments**.
3. Select **Create department** from the upper right of the Departments page.
4. From the **New Department&#x20;**&#x72;ight side panel, configure your department using the following settings:
   - **Department name:** The name of the department.
   - **Department code:** A short code or code number used to uniquely identify the department in other systems.
   - **Aliases:** An alternative name that can be used for the group when syncing with remote systems. [Learn more](https://docs.charthop.com/group-names-and-aliases).
   - **Color:** The color that will be applied in the org chart to the group's members.
   - **Image:** An image shown on the group's profile page.
   - **Parent group:** The group that this group is a child under.
   - **Function:** The designated business function assigned to the group.
     - Functions are fixed categories and cannot be customized.
5. Select **Save** when you're done.

:::hint{type="info"}
[Modules:](https://www.charthop.com/pricing/) <font color="#000000">**HRIS |** </font>**Engagement | Goals | Performance |&#x20;**<font color="#000000">**Compensation Reviews |** </font>**Headcount Planning**
:::


[title] Scenarios
[path] ChartHop for Administrators/Planning/

ChartHop *scenarios* help you visualize potential changes to your organization so that you can project and analyze the costs and impact of those changes before putting them into effect.

When you create a scenario, you create a proposal in which you can collaborate with other stakeholders (such as leadership team members or HR business partners) for better transparency.

You can use scenarios to plan potential changes to the hiring plan, backfills, promotions, organizational structure, or all of the above.

:::hint{type="info"}
Any changes you propose in a scenario (including new jobs, reorganization, and terminations) are contained within the scenario and only you as a scenario owner have access to those proposed changes. You can share a scenario with others and control the level of permissions they have to view and edit your scenario.

Your scenario and all changes within the scenario are not visible to the rest of your organization or put into effect until the scenario is merged to Primary. [Learn more.](https://docs.charthop.com/merging-a-scenario)
:::

### Viewing scenario cost by fiscal year or quarter

The scenario header shows the total cost of everything you're planning. By default this is the **annualized** run-rate: the full-year cost of the changes, regardless of when they take effect.

Use the cost dropdown in the header to view that cost on a different basis:

- **Annualized** - the full-year run-rate. This is the default and doesn't change based on timing.
- **Fiscal year (e.g. FY27)** - the cost prorated across your fiscal year. Each change counts only for the months it's active within that year.
- **Quarter (e.g. Q2 FY27)** - the same, prorated across a single fiscal quarter.

Selecting a basis updates the figure in the header immediately. Open the dropdown to compare all three at once, each with its own value.

![Scenario cost selector](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/0spMHRGCcnW9esgHw-nu3_scenario-cost.png)

The **fiscal year and quarter** shown are the ones that contain the earliest costed change in your scenario, based on your organization's fiscal-year start setting. Hover the **info icon** next to the cost to see the exact period and date range being used, for example:

:::BlockQuote
Prorated run-rate across FY27 (Apr 2026 - Mar 2027). Each change counts only for the months it's active in that window.
:::

![Prorated tooltip](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/VnJCtravvBlDb5ZdtiPcv_prorated-tooltiop.png)

:::hint{type="info"}
The fiscal-year and quarter figures are a **prorated run-rate**, not a full forecast. Each change is counted for the portion of the period it's active, at its run-rate. They don't model later departures or compensation changes within the period. Because monthly amounts are rounded, a full year of prorated months can differ slightly from the annualized number.
:::

Your basis choice is **remembered per user across scenarios**, so if you prefer to plan in fiscal years you'll see fiscal years everywhere. Annualized remains the default until you change it.

The same basis applies to the **scenario budget panel**, so the scenario's cost summary and its budget comparison stay on the period you've selected.

:::hint{type="warning"}
**Using a custom cost formula?** If your organization calculates scenario cost with a [custom formula](https://docs.charthop.com/configuring-financial-settings#cost-calculations), the Fiscal year and Quarter views are only accurate when that formula returns an annual figure. ChartHop treats the formula's output as an annual run-rate and prorates it across the selected period. If your formula already returns a period-bounded amount, the Fiscal year and Quarter figures will be misleading: the value gets scoped twice. In that case, rely on the **Annualized** view, which always shows your formula's output unchanged.
:::

### Access scenarios

To access scenarios, select **Planning** from the left sidebar.

You can view an existing scenario or select **Create Scenario&#x20;**&#x74;o create your own. The list displays only scenarios that you've created or that have been shared with you.

![](https://lh7-us.googleusercontent.com/R6uIKTys6Wa27X8vEx07HS2dKSLP3_izb4pafwCdR9aYKQ3rqOhZrSxvq4g3aBcGsaH-ctONRZlpdB0n01NCywONY5w67jx859SkVTzSNf5UHaTU8inkA6irf0T642lK-1Pxm4XE-MuLGTdf7N5hiRE "Scenarios List")

### Filter the list of scenarios

You can also filter the scenarios that display on any of these tabs by the following:

- **Created by** - Choose **Anyone** to view all scenarios you have access to, regardless of who created it, or choose **Me** to view only scenarios you've created. You can also select the name of another employee.
- **Review status** - Filter the scenarios that display based on review status.&#x20;
- **Keyword** - Filter the scenarios that display by entering specific keywords.&#x20;

###

![](https://api.archbee.com/api/optimize/CXAjUAezd9VEEVQBIYmdw/3hf4WZFdypfX7L18djhCJ_image.png "Scenarios Filtering")

### Approvals for scenarios

Depending on your organization's settings, you may be required to send your scenario for review and approval before any changes can be made official.

Once a scenario has been approved, scenario changes can be merged into your organization's primary **Org Chart**.

:::hint{type="info"}
If you are merging data that is also updated by your HRIS, if you merge the changes before you have updated your HRIS the data will be overwritten in the next days sync. We recommend that you merge your scenario and change the data in your HRIS on the same day to avoid this.
:::

### Statuses for scenarios

The status of your scenario lets you know where your scenario is in the review process (when approvals are enabled) and whether it has been merged.

![](https://api.archbee.com/api/optimize/CXAjUAezd9VEEVQBIYmdw/AezBjqO8qvj9EsdYNTNAh_image.png)

Your scenarios can display with the following statuses:

| **Status** | **Description**                                                                                                                                                                                  |
| ---------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| Draft      | Indicates the simple workflow scenario is currently being edited.                                                                                                                                |
| Open       | Indicates the scenario is currently being edited.                                                                                                                                                |
| In review  | Indicates the scenario is currently under review by one or more approvers. This status displays only when Approvals are enabled. [Learn more.](https://docs.charthop.com/enabling-approvals)\*\* |
| Approved   | Indicates the scenario has been approved but has not been merged to primary.                                                                                                                     |
| Rejected   | Indicates the scenario has been rejected by at least one approver and the collaborators of the scenario have not yet made any additional edits.                                                  |
| Merged     | Indicates a scenario has been approved and merged to primary.                                                                                                                                    |
| Archived   | Indicates a scenario has been archived. Merged scenarios cannot be archived.                                                                                                                     |

:::hint{type="info"}
[Packages](https://www.charthop.com/pricing/)**:&#x20;**<font color="#a9a9a9">Basic</font> <font color="#000000">|</font> <font color="#000000">**Headcount Planning** | </font><font color="#000000">**Compensation Reviews** | </font><font color="#000000">**Performance** | </font><font color="#000000">**Engagement** </font>
:::


[title] Compensation Export
[path] ChartHop for Administrators/Managing people and jobs/Working with job history/

Use the **Compensation Export** page to pull a full history of compensation changes for your organization into one table and export it to CSV. Unlike the data sheet, this page shows one row per compensation change, so an employee with several raises appears on several rows. It's built for historical compensation reporting: for example, an audit or a data request that needs every base, variable, and total pay change over a period.

:::hint{type="info"}
This page is not accessible to all employees. Access is governed by the same permission as the **Org Changes History** page. If you can't see it, ask your ChartHop administrator.
:::

## Finding the page

In the left sidebar, open **People Ops Tools**, then select **Compensation Export**. It sits just below **Payroll Export**.

![](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/5TgywMR699VgBXY6k2p7q_comp-export.png)

## What the table shows

Each row is a single compensation change for one employee, as of its effective date. The default columns are:

| Column              | Description                                                       |
| ------------------- | ----------------------------------------------------------------- |
| **Name**            | The employee                                                      |
| **Email**           | The employee's work email                                         |
| **Title**           | Job title at the time of the change                               |
| **Effective date**  | The date the compensation change took effect                      |
| **Base**            | Annualized base pay                                               |
| **Target Variable** | Annualized target variable pay                                    |
| **Total**           | Base plus Target Variable (shown when both use the same currency) |
| **Department**      | Department at the time of the change                              |
| **Manager**         | Manager at the time of the change                                 |

The count above the table (for example, "42 Changes") shows how many rows match your current date range and filter. Results load 100 at a time; select **Load more** to load the next set.

## Filtering the results

Two controls at the top of the page narrow what appears in the table (and what gets exported):

1. **Date range**: set the start and end dates to bound which compensation changes are included by their effective date. The range defaults to the start of the current year through today.
2. **Filter bar**: type to filter the rows (for example, by name, department, or manager).

## Exporting to CSV

1. Set the **date range** and **filter** so the table shows the changes you want.
2. Select **Export CSV** in the top-right corner.
3. In the **Export Compensation Changes** dialog, choose your options:
   - **Data formatting**: **Optimize for readability** uses field names as headers and formats values for people, while **Optimize for import/export** uses field codes as headers and formats values for computers.
   - **Split complex types**: splits complex fields into separate columns.
4. Select **Export CSV**. ChartHop builds the export in the background.
5. When it's ready, select **Download Export** to save the CSV.

![](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/xfQVOBubeVsfYgjpUfOnT_export-dialog-comp.png)

:::hint{type="info"}
The export uses the same date range and filter that are applied to the table. Set those before exporting.
:::

:::hint{type="info"}
[Modules:](https://www.charthop.com/pricing/) **HRIS | Engagement | Goals | Performance | Compensation Reviews | Headcount Planning**
:::


[title] Planning
[path] ChartHop for Administrators/

::::LinkArray{contentSource="CUSTOM"}
:::LinkArrayItem{headerType="IMAGE" headerImage="https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/EcqVsy2CbKkl6bCsC2u0c_screenshot-2024-01-19-at-22021-pm.png"}
[Scenarios](docId\:qKMP0BDS19Q6kYSSpe7lY)



Understand how to propose org changes with scenarios.
:::

:::LinkArrayItem{headerType="IMAGE" headerImage="https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/OU2fqb1gNGPsyEjl0zzVM_screenshot-2024-01-19-at-40219-pm.png"}
[Headcount planning](docId\:AVxhmmYVqrQH929mMuyK-)&#x20;



Learn about creating headcount plans.
:::

:::LinkArrayItem{headerType="IMAGE" headerImage="https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/3UHE98cMUGcXBdURy38JI_screenshot-2024-01-19-at-40123-pm.png"}
[Compensation bands](docId\:rkgLzGtQtddyAsNrFlLtu)&#x20;



Set up compensation bands for your organization.
:::
::::


[title] Edit a location
[path] ChartHop for Administrators/Managing groups/Locations/

You can make changes to any of your previously created or imported locations by editing them directly in ChartHop.

![Edit location](https://archbee-image-uploads.s3.amazonaws.com/zxjhb7-DqnuzAP-lru1l3-5b5jqnSj7D6pf9h6UGZpm-20240812-151516.png)

To edit a location:

1. Select **Data Model** in the left navigation bar, then select **Locations**.
2. Choose the location you wish to edit by selecting the checkbox, then select **Edit**.
3. Select **Save.**

:::hint{type="info"}
[Modules:](https://www.charthop.com/pricing/) <font color="#000000">**HRIS |** </font>**Engagement | Goals | Performance |&#x20;**<font color="#000000">**Compensation Reviews |** </font>**Headcount Planning**
:::


[title] Editing teams
[path] ChartHop for Administrators/Managing groups/Teams/

At times, you may need to update name or other departmental changes in your organization's teams.

![Edit team](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/dflufBTV7NSyHpVJiA7tO_screen-shot-2022-04-13-at-113512-am.png)

To edit a team:

1. From the **Settings** option in the left navigation bar, select **Groups**.
2. From the **Teams** tab, choose the team you wish to edit by selecting it's action menu. Select **Edit**.
3. Select **Save** when you're done.

:::hint{type="info"}
[Modules:](https://www.charthop.com/pricing/) <font color="#000000">**HRIS |** </font>**Engagement | Goals | Performance |&#x20;**<font color="#000000">**Compensation Reviews |** </font>**Headcount Planning**
:::


[title] Creating new jobs in a scenario
[path] ChartHop for Administrators/Planning/Headcount planning/

As part of managing your organization and preparing your headcount plans, you can use the **Org Chart** in your scenario to create new jobs or upload a spreadsheet of new jobs to your scenario.&#x20;

Anyone who has been given access to the scenario can make changes.

This section includes the following topics:

- Creating individual jobs in a scenario
- Creating multiple jobs in a scenario

:::hint{type="info"}
[Packages](https://www.charthop.com/pricing/)**:&#x20;**<font color="#a9a9a9">Basic</font> <font color="#000000">|</font> <font color="#000000">**Headcount Planning** | </font><font color="#000000">**Compensation Reviews** | </font><font color="#000000">**Performance** | </font><font color="#000000">**Engagement** </font>
:::


[title] Editing jobs in a scenario
[path] ChartHop for Administrators/Planning/Headcount planning/

In your headcount planning process, you can edit jobs within your scenario using the following methods:

- Edit jobs from the **Changes** tab - You can make changes within the context of your previously-made scenario changes.&#x20;
- Edit jobs from the **Data Sheet** tab - You can make new changes to your scenario (which are then reflected in the **Changes** tab). You can also edit multiple jobs from the **Data Sheet&#x20;**&#x74;ab. When editing jobs from the **Data Sheet** tab, you can use ChartHop filters to further streamline the process.



:::hint{type="info"}
[Packages](https://www.charthop.com/pricing/)**:&#x20;**<font color="#a9a9a9">Basic</font> <font color="#000000">|</font> <font color="#000000">**Headcount Planning** | </font><font color="#000000">**Compensation Reviews** | </font><font color="#000000">**Performance** | </font><font color="#000000">**Engagement** </font>
:::


[title] Working with people
[path] ChartHop for Administrators/Managing people and jobs/

You can use the [Org Chart](docId\:BepXEDmK2n5nOxoItxF7x) and the [Data Sheet](docId\:XTd4DG4I_4_nMwjfEsq0S) to make changes to people in your ChartHop organization across a variety of contexts. All changes go into effect immediately, although you can customize when they’re announced. [Learn more. ](https://docs.charthop.com/about-org-management#75UOs)

You can take the following actions on people in the **Org Chart** and **Data Sheet**:

- Terminate a person 
- Move a person to a new job
- Rehire a former employee
- Add a new person to your org



:::hint{type="info"}
[Modules:](https://www.charthop.com/pricing/) <font color="#000000">**HRIS |** </font>**Engagement | Goals | Performance |&#x20;**<font color="#000000">**Compensation Reviews |** </font>**Headcount Planning**
:::

:::hint{type="info"}
﻿﻿[Roles](https://docs.charthop.com/user-roles-and-permissions): Owner | Org editor
:::


[title] Working with job history
[path] ChartHop for Administrators/Managing people and jobs/

Users with permission to view job history can see this information from two locations in ChartHop: the **Org History page** and the **Job history** **tab** in a person’s employee profile. 

Job history is only visible to people with sensititve data access.

From the History page and the **Job history** tab, you can:

- Edit a change date
- Delete a change 

You may want to edit or delete a job change when you need to alter a start date or when a person does not join your organization as planned.

:::hint{type="info"}
[Modules:](https://www.charthop.com/pricing/) <font color="#000000">**HRIS |** </font>**Engagement | Goals | Performance |&#x20;**<font color="#000000">**Compensation Reviews |** </font>**Headcount Planning**
:::

:::hint{type="info"}
﻿﻿[Roles](https://docs.charthop.com/user-roles-and-permissions): Owner | Org editor | Recruiting editor | People ops admin
:::





[title] Departments
[path] ChartHop for Administrators/Managing groups/

A Department is a type of group for a collection of employees who perform interrelated tasks. Departments are intended to serve as the highest level group structure in your organization.&#x20;

This section covers:

- Creating a department
- Editing a department

:::hint{type="info"}
[Modules:](https://www.charthop.com/pricing/) <font color="#000000">**HRIS |** </font>**Engagement | Goals | Performance |&#x20;**<font color="#000000">**Compensation Reviews |** </font>**Headcount Planning**
:::


[title] Teams
[path] ChartHop for Administrators/Managing groups/

A *team* is a smaller collection of employees who perform related tasks. Multiple teams can belong to a single department.

This section covers:

- Creating a team
- Editing a team

:::hint{type="info"}
[Modules:](https://www.charthop.com/pricing/) <font color="#000000">**HRIS |** </font>**Engagement | Goals | Performance |&#x20;**<font color="#000000">**Compensation Reviews |** </font>**Headcount Planning**
:::


[title] Editing bands
[path] ChartHop for Administrators/Managing groups/Bands/

:::hint{type="info"}
The Bands feature has been enhanced and the documentation has been moved.  You can now create and edit compensation bands from the ... (more) menu, and selecting Compensation bands. [Learn more.](https://docs.charthop.com/compensation-bands)
:::

As a user, you may want to make changes to your company's compensation structure, or adjust the compensation levels of individual bands.

![Edit band](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/GN3FaTLZJRmM6SnIHut-u_screen-shot-2022-04-13-at-125844-pm.png)

To edit a band:

1. From the **Settings** option in the left navigation bar, select **Groups**.
2. From the **Bands** tab, choose the band you wish to edit by selecting it's action menu. Select **Edit**.
3. Select **Save** when you're done.


[title] Updating current jobs in a scenario
[path] ChartHop for Administrators/Planning/Headcount planning/

In addition to planning a hiring process, you can also use a headcount planning scenario to propose changes to your current employee roster.

This section includes the following topics:

- Terminations
- Backfills

:::hint{type="info"}
[Packages](https://www.charthop.com/pricing/)**:&#x20;**<font color="#a9a9a9">Basic</font> <font color="#000000">|</font> <font color="#000000">**Headcount Planning** | </font><font color="#000000">**Compensation Reviews** | </font><font color="#000000">**Performance** | </font><font color="#000000">**Engagement** </font>
:::


[title] Creating a new compensation review
[path] ChartHop for Administrators/Compensation reviews/

When you create a new compensation review, you start out with a compensation review that is prepopulated with the following default settings:

- All employees are automatically eligible for review.
- All managers with direct reports are automatically set up as reviewers.
- Budget pools and guidelines are blank and ready for you to fill in.
- The reviewer’s workbook is configured with a standard set of columns (based on your ChartHop organization’s compensation settings).

:::hint{type="info"}
To protect sensitive employee data, only ChartHop users with the Owner, Org editor, or Compensation viewer role can create compensation reviews. Once created, a compensation review can be shared with any user, which will give them access to all compensation & sensitive data, as well as the ability to edit configuration of a compenation review.
:::

### Create a new compensation review

To create a new compensation review:

1. From the left sidebar, select **Comp Reviews.**
2. Select **Create comp review**.

### Duplicate an existing compensation review

You can duplicate an existing compensation review to create a new compensation review with the same settings.

To duplicate a compensation review:

1. From the left sidebar, select **Comp Reviews.**
2. Select the checkbox for the compensation review you want to duplicate.
3. Select **Duplicate**.&#x20;
   - A copy of the compensation review is added to the list.

### Delete a compensation review

If you decide that the settings you’ve been configuring for your compensation review are no longer applicable and would rather start over, you can delete an existing compensation review. 

To delete a compensation review:

1. From the left sidebar, select **Comp Reviews.**
2. Select the checkbox for the compensation review you want to delete.
3. Select **Delete**.
4. In the confirmation dialog, enter DELETE.&#x20;
5. Select **Delete**.
   - The compensation review is removed from the list.

:::hint{type="info"}
[Packages](https://www.charthop.com/pricing/)**:&#x20;**<font color="#a9a9a9">Basic</font> <font color="#000000">|</font> <font color="#000000">**Standard*** | **Premium**</font>****

\* Available as an add-on
:::

:::hint{type="info"}
﻿﻿[Roles](https://docs.charthop.com/user-roles-and-permissions): Owner | Org editor | Compensation viewer
:::


[title] Headcount planning
[path] ChartHop for Administrators/Planning/

ChartHop's headcount planning tools provide a framework for proposing and approving changes to your established ChartHop organization.

ChartHop addresses headcount planning using a bottom-up approach:

1. You identify the needed resource change(s) for your organization.
2. You create a proposal for the changes using a scenario. [Learn more.](https://docs.charthop.com/scenarios)
3. You use this scenario to project and analyze the future impact of the proposed changes.
4. You share and review the scenario with key stakeholders and receive their feedback.
5. Once you have stakeholder approval, you merge the proposed changes to your current organization.&#x20;

:::hint{type="info"}
[Packages](https://www.charthop.com/pricing/)**:&#x20;**<font color="#a9a9a9">Basic</font> <font color="#000000">|</font> <font color="#000000">**Headcount Planning** | </font><font color="#000000">**Compensation Reviews** | </font><font color="#000000">**Performance** | </font><font color="#000000">**Engagement** </font>
:::

:::hint{type="info"}
[﻿﻿Roles:](https://docs.charthop.com/user-roles-and-permissions) Recruiting editor | Owner | Technical owner
:::

##


[title] Set up key dates
[path] ChartHop for Administrators/Compensation reviews/Setting up a compensation review/

*Key dates* control when your compensation review takes place, how it's populated and organized, when reviews and approvals are due, and when all changes made within the review cycle should go into effect within your primary ChartHop organization. Date and time formats are based on your organization's settings.

To set up key dates:

1. From the left sidebar, select **Comp Reviews.**
2. Open an existing compensation review with a status of **Not started** or **Paused**.
3. Select the **Key dates** tab.
4. Choose a date for each key date field. See below for descriptions.
5. Once entered, all dates are saved automatically.

:::hint{type="warning"}
The beginning of the cycle cannot be before today.
:::

### Timeline preview

The Key dates tab displays a timeline preview showing the following milestones as you configure them:

- **Review starts**
- **Proposals submitted to final approver**
- **Final approval**
- **Payroll effective date**

This timeline is also visible to reviewers and approvers during the live cycle.

### Key dates descriptions

This table describes key dates and how they work:

| **Key Date**                      | **Description**                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          |
| --------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Review starts                     | The date when the compensation review cycle starts and when you plan to launch the review so that reviewers and approvers can access it. A compensation review cycle is not active until you launch it manually. [Learn more.](https://docs.charthop.com/launch-a-compensation-review) By default, this date is set two weeks into the future. This date displays to reviewers and approvers in the timeline during the live cycle.                                                                      |
| All reviews due                   | The deadline for reviewers and approvers to submit their reviews and approvals. You can select the **Skip incomplete reviews after due date** checkbox to automatically skip incomplete reviews on this date to unlock final approvals. When incomplete reviews are set to be skipped, you cannot edit the All reviews due date once it has passed. [Learn more.](https://docs.charthop.com/set-up-key-dates#teLw_) This date displays to reviewers and approvers in the timeline during the live cycle. |
| Final approval due                | The final approval deadline. Once a cycle is concluded, ChartHop freezes all primary data in the compensation review as of this date to help maintain accurate read-only access. You cannot edit this date after you have launched a cycle. By default, this date is set six weeks into the future. This date displays to reviewers and approvers in the timeline during the live cycle.                                                                                                                 |
| Payroll effective date (optional) | The date when all changes proposed and approved during the review cycle should go into effect. This date is pre-populated in the CSV export for the compensation review cycle. When this date is not defined, the value defaults to the Final approval due date. This date displays to reviewers and approvers in the timeline during the live cycle.                                                                                                                                                    |

### Org data reference date

The **Org data reference date** controls the snapshot of your org that is used to structure the compensation review. All data — including the reviewer tree, eligible employees, and budget data — is based on this date.

This is separate from the Final approval due date. Setting a specific org data reference date is recommended when you want to lock your org structure earlier than the final approval deadline (for example, when payroll dates and cycle timelines differ).

:::hint{type="warning"}
You cannot edit the org data reference date after you launch the cycle.
:::

:::hint{type="warning"}
Changing the org data reference date could impact the number of employees included in the compensation review, as well as the information included about those employees. Certain employees or managers may or may not be included due to organizational changes made after the date you choose.

Any changes you make to your primary org chart data (for example, terminations, changes to compensation) are included in the compensation review only when the effective date for those changes falls before the org data reference date.
:::

### Automatically skip incomplete reviews

The **Skip incomplete reviews after due date** option automatically skips any reviews that have not been completed as of the All reviews due date and marks them as **Skipped**. Reviews are skipped on the day after the All reviews due date.

Any remaining to-dos for lower-level reviewers and approvers are cleared, enabling final approvers to perform their final review without waiting for all incomplete reviews to be completed and submitted.

Skipped reviews become read-only and can no longer be edited. Reviewers and approvers receive a notification at the top of their compensation review letting them know their reviews and approvals were skipped because the deadline passed. Any previous changes entered by reviewers and approvers are maintained.

:::hint{type="warning"}
When the **Skip incomplete reviews after due date** option is enabled, you cannot edit the All reviews due date once it has passed.
:::

:::hint{type="info"}
[Packages](https://www.charthop.com/pricing/): Basic | **Standard**\* | **Premium**

\* Available as an add-on
:::


[title] Budgets
[path] ChartHop for Administrators/Planning/

Budgets give finance and HR teams a shared, real-time view of how headcount plans track against approved spending limits. You define a budget once, and ChartHop surfaces that budget throughout the platform: on the Budgets page, and inside any scenario where your planning changes would affect it.

## How budgets work

A budget is a named spending limit that ChartHop evaluates against your live org data. It consists of:

- **A name.** A descriptive label that identifies the budget across the platform.
- **A total amount.** The approved dollar limit for the budget period.
- **A time frame.** A start date and end date that define the period the budget covers.
- **A group filter.** One or more groups (such as departments or teams) that determine which jobs are in scope. Jobs whose groups match are counted toward budget usage.

ChartHop calculates budget usage by applying your org's **Scenario Cost Calculation** formula (configured under **Admin > Financial Settings**) to all active, filled jobs within the budget's group scope. How that number is measured depends on the budget's cost basis. See [Cost basis](./#cost-basis) below.



![Create Budget Dialog](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/qnyKuzppAwInpNX-SXrnA_budget-setup.png)

## Setting up a budget

Budgets are created and managed under **Planning > Budgets**. This section is only visible to users with the appropriate access role (by default: Cash Comp Viewer, Comp Viewer, Equity Comp Viewer, Org Editor, and People Ops Admin).

**To create a budget:**

1. Navigate to **Planning > Budgets**.
2. Click **New Budget**.
3. Fill in the budget details:
   - **Name.** A descriptive label, such as "Engineering FY27" or "Sales Q2."
   - **Amount.** The total approved budget in your org's currency.
   - **Start date and end date.** The time frame the budget covers.
   - **Groups.** Select the departments, teams, or other groups whose jobs should count toward this budget.
   - **Cost basis.** How the budget's cost is measured (Annualized or Total cost over period). Defaults to your organization's setting.
4. Click **Save**.



![Budget Details](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/enW7MxoFQmh8WrINzLlHI_budget-usage.png)

## Managing budgets

Each budget has a detail page showing:

- **Amount used.** The current total cost of all filled jobs in scope, calculated using your org's Scenario Cost Calculation. How this number is measured depends on the budget's cost basis. See [Cost basis](./#cost-basis) below.
- **Amount remaining.** The difference between the total budget and current usage.
- **Usage bar.** A visual progress indicator showing how much of the budget has been used.
- **Linked data sheet.** A data sheet scoped to the jobs covered by this budget for drilling into headcount detail.

To edit or delete a budget, open it from the Budgets list and use the actions menu.

## Budgets in scenarios

When you work within a scenario, ChartHop automatically calculates which budgets are affected and surfaces them in the **scenario header**. For each impacted budget, the header shows:

- **Current usage.** How much of the budget is used in the live org today, before scenario changes.
- **Scenario impact.** The net cost change the scenario would add to (or remove from) the budget.
- **Total amount.** The full budget limit.

A budget appears in the header only if it is active, its groups overlap with the groups affected by the scenario, and the current user has permission to view it.

![Scenario Header with Budgets](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/1s9xVqtrggOj2nhEvHAn0_budget-bar.png)

## Cost basis

A budget's **cost basis** controls how ChartHop measures the cost that counts against it. Every budget has one, and you can see it in the budget's details and in the **Cost basis** column of the budgets table.

There are two options:

- **Annualized.** The ongoing yearly run-rate. This is the full-year cost of the people and open roles in the budget, regardless of how long the budget runs. Use this when you want to see the standing cost of a team.
- **Total cost over period.** The cost that actually falls inside the budget's start and end dates. ChartHop prorates each person's run-rate across the budget's date range, month by month, and counts open roles only from their planned start date. Use this when you want spend to match the real cost of a fixed time window.

**Example.** A role with a $120,000 annual run-rate that is filled for the whole year shows as **$120,000** on an Annualized budget. On a Total cost over period budget that runs for six months, the same role contributes about **$60,000**, because only half the year falls inside the budget's dates.

:::BlockQuote
**Note:** Total cost over period only makes sense with a date range. If a budget has no start and end dates, its usage preview will not resolve until you set them.
:::

![Budgets with tooltip](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/X4FyxcMvFsg6ljAwlqYp6_budget-header.png)

### Choosing a cost basis for a budget

When you create or edit a budget, use the **Cost basis** field to choose how its cost is measured:

- **Org default.** Follow your organization's default cost basis. The option label shows what that default currently resolves to, so you always know what you're getting. This is the recommended choice unless a specific budget needs to differ.
- **Annualized.**
- **Total cost over period.**

Leaving a budget on **Org default** means it automatically follows any change an admin makes to the organization-wide default. Choosing Annualized or Total cost over period pins the budget to that basis regardless of the org default.

As you create a budget, the **Amount used** preview reflects the basis you pick, so you can see the resulting spend before saving. On a Total cost over period budget, set the start and end dates to see the preview.

### Where you'll see cost basis

- **Budgets table.** A **Cost basis** column shows each budget's effective basis (its own setting, or the org default it inherits).
- **Budget details.** The details panel lists the budget's cost basis alongside its amount and usage.
- **Budget dialog.** The Amount used preview is computed on the selected basis.

![Budget Breakdown Per Job table](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/mI0vYWXLCtS0cwpHcC1v6_budget-breakdown-table.png)

### Default cost basis (organization setting)

Admins can set an organization-wide **Default cost basis** under **Settings > Financial**. It is the cost measurement used by any budget that has not chosen its own basis.

- **System default (Total cost over period).** Budgets are measured over their date range.
- **Annualized.** Budgets show the ongoing yearly run-rate.

Individual budgets can override this from the budget's **Cost basis** field. Scenarios always stay annualized and are not affected by this setting. See [Configuring financial settings](https://docs.charthop.com/configuring-general-settings) for details.

## Visibility and access

There are two ways a user can access a budget:

- **Access role.** Users with Cash Comp Viewer, Comp Viewer, Equity Comp Viewer, Org Editor, or People Ops Admin roles can access the Budgets page and see all budgets. Contact your ChartHop admin to update your access role if needed.
- **Direct sharing.** Individual budgets can be shared with specific users. Users who are shared on a budget can view that budget, even if their access role would not otherwise grant them access to the Budgets page.

**Budget panels in scenarios.** Within a scenario, a user only sees panels for budgets they have permission to view, either through their access role or direct sharing. Budgets they cannot access will not appear in the scenario header, including the existence of the field.

## Configuring the cost calculation

The cost formula used for all budget usage calculations is set org-wide under **Admin > Financial Settings > Scenario Cost Calculation**. If you need to adjust how cost is calculated, update this setting before creating or reviewing budgets to ensure your amounts and usage figures are on the same basis.

## Related resources

- [Use Case: Budget Scenario](docId:50JUUeax3kHjwi4DefSp9) - learn how to create a scenario with a fixed budget limit and track spending in real time as you build your headcount plan.

[title] Org Changes History page
[path] ChartHop for Administrators/Managing people and jobs/Working with job history/

You can use the **Org Changes History** page as your audit log within ChartHop. It displays all people and job changes on one page and provides information about the type of change, who made the change, and when it was made.&#x20;

:::hint{type="info"}
The **Org Changes History** page keeps track of changes made to **Jobs**, **People in Jobs**, and **Open jobs**. [Learn more](https://docs.charthop.com/applies-to).&#x20;

This page is not accessible to all employees.&#x20;
:::

:::hint{type="info"}
For historical compensation reporting specifically, see [Compensation Export](docId:95vusqd-a3v7ylCkLeWMD).
:::

To view **Org Changes History**:

1. In the left sidebar, select **Admin**.&#x20;
2. In the sub-menu, select History > **Org Changes History.&#x20;**

![Org Changes](https://api.archbee.com/api/optimize/zxjhb7-DqnuzAP-lru1l3-EQ_3QToIlgtcDVS6-3fm9-20241028-135426.png)

## Filtering the History page

You can filter the **Org Changes History** page to show only the information that you are interested in. You can select a specific **date range,&#x20;**&#x66;ilter by certain types of changes or look for changes to a specific field.&#x20;

### Example: Find a list of all promotions in this calendar year

1. In the left sidebar, select **Admin**.&#x20;
2. In the sub-menu, select History > **Org Changes History.&#x20;**
3. Set the **date range picke**r to "This year"
4. In the Filters menu, select **Promotions** to show job changes that are categorized as "promotions."

![](https://api.archbee.com/api/optimize/zxjhb7-DqnuzAP-lru1l3-zxAUeO-nS1RFj7ygJp0GQ-20241028-140210.png)

# Exporting history&#x20;

You can export information from the **History** page to a CSV.&#x20;

When you export, the CSV will display all of the changes that you see on the screen. Use the date range and filters to select exactly which data you want to export.&#x20;

To export history information:

1. In the left sidebar, select **Admin**.&#x20;
2. In the sub-menu, select History > **Org Changes History.&#x20;**
3. Set up filters to constrain the data you want to export.&#x20;
4. (Optional) Select **Toggle Export Columns** to select additional fields to add to the CSV.
5. Select the **Download** button to export your CSV.
6. Select the [Exporting data from the Data Sheet](docId\:ZznndmQ09j6UBPvEbbIFW) that best suits your use case.
7. Select **Export**.
8. Select **Download** when your spreadsheet is ready to download.

## Export format

The first columns of the history export will contains details about the change.&#x20;

The following colums will show the changed data. Each field that was changed will display a `Before` and `After` value.&#x20;

### Export for Readability

**Change details:**

| Change Date | Person       | Title | Change Type | Change Status | Change Description                        | Change By   | Change Cost | Change Note            | Change Announce Date | Change Departure Type | Change Departure Regrettable | Change Departure Reason | Change Promotion Type |
| ----------- | ------------ | ----- | ----------- | ------------- | ----------------------------------------- | ----------- | ----------- | ---------------------- | -------------------- | --------------------- | ---------------------------- | ----------------------- | --------------------- |
| 9/11/24     | Ibby Andrews | HRBP  | Update      | Active        | Started reporting to Christian Horn - CPO | Lucy Balmer | $0          | Re-org after departure | 9/11/24              |                       |                              |                         |                       |

**Changed data:**

| Base Compensation (Before) | Base Compensation (After) | Manager (Before) | Manager (After) |
| -------------------------- | ------------------------- | ---------------- | --------------- |
| $100,000                   | $105,000                  | Davis Betran     | Christian Horn  |

### Export for Import/Export

**Change details:**

| changeId                 | jobId                    | personId                 | change.date | person                     | title | change.type | change.status | change.description                        | change.by                  | change.cost | change.note            | change.announceDate | change.departType | change.departRegret | change.departReason | change.promotionType |
| ------------------------ | ------------------------ | ------------------------ | ----------- | -------------------------- | ----- | ----------- | ------------- | ----------------------------------------- | -------------------------- | ----------- | ---------------------- | ------------------- | ----------------- | ------------------- | ------------------- | -------------------- |
| 660417d3887959668bd829f5 | 64809a1xc24db30a37c48a6c | 5278b09a39d5df29d8d2668f | 2024-03-18  | roze.hamann\@demoemail.com | HRBP  | Update      | Active        | Started reporting to Christian Horn - CPO | Lucy.Balmer\@demoemail.com | $0          | Re-org after departure | 2024-03-18          |                   |                     |                     |                      |

**Changed data:**

| change.before.BaseComp | change.after.BaseComp | change.before.manager  | change.after.manager     |
| ---------------------- | --------------------- | ---------------------- | ------------------------ |
| $100,000               | $105,000              | Davis.Betran\@demo.com | Christian.Horn\@demo.com |

### Example use cases:

- Export a list of departures within a specific date range
- Export a list of promotions with start date information
- Export changes to a field within a specific time range

:::hint{type="info"}
[Modules:](https://www.charthop.com/pricing/) <font color="#000000">**HRIS |** </font>**Engagement | Goals | Performance |&#x20;**<font color="#000000">**Compensation Reviews |** </font>**Headcount Planning**
:::


[title] Effective dating
[path] ChartHop for Administrators/Managing people and jobs/

With effective dating, you can specify when changes to your job and employee data are rendered effective. When viewing organizational history, effective dates allow you to differentiate between the day you plan a change to your organization and the actual day the change is put into effect.

Some examples of effective dating include:

- Setting up a vacation time today that will be put into effect in the following week.
- Planning a promotion that will take effect in the following quarter.
- Creating a departmental change for an employee today that will be put into effect later.

When you set an effective date, it helps you track the difference between the date you make a change and the date the change takes effect.

### Creating effective dates

Effective dates help you to schedule changes to an employee's or job's status in the future, or you can use them to set dates retroactively.

You can set effective dates for changes you make to your ChartHop organization when using the Data Sheet, creating or editing jobs, importing spreadsheet data, or automatically through the app settings of any payroll app that supports effective dating via historical data.

After you create effective dates for your job and employee data, you can view and update them.

### Effective dating for ChartHop fields

Not all ChartHop fields support effective dating. For example, you can't set effective dates on changes to personal data, such as employee addresses, phone number and so on.&#x20;

To view a list of the fields where you can set an effective date, use the Fields page to search for the field in the **Fields** page table and checking if the label in the **Date&#x20;**&#x63;olumn reads "Yes". [Learn more](https://docs.charthop.com/working-with-the-fields-page).

:::hint{type="info"}
If you have not manually set an effectively date for a field, ChartHop assumes the effective date to be the day the change is applied.
:::

### Effective dating for payroll apps

If your payroll app supports effective dating, keep in mind that effective dates are synced only for ChartHop fields that support effective dating.

The following payroll apps support effective dating:

- BambooHR
- Humaans
- Ultipro
- Zenefits

:::hint{type="info"}
Payroll apps respect the effective date of changes and only sync new info when it becomes effective.
:::


[title] Compensation bands
[path] ChartHop for Administrators/Planning/

ChartHop allows you to establish and maintain salary bands for your organization. Having well-defined compensation bands is the foundation that ensures you can retain your best talent, enable good hiring practices, and pay your employees fairly.

To see your bands and where employees fall within them, see [Viewing compensation bands](https://docs.charthop.com/viewing-compensation-bands).

![](https://api.archbee.com/api/optimize/CXAjUAezd9VEEVQBIYmdw/u1K83mE9FfnHx_ApIv8MN_compbands.png "Compensation bands")

You have the flexibility to configure your compensation bands to fit your organization's needs. This allows you to use ChartHop to match how your organization is currently tracking compensation.

You must have the Owner role in order to set up compensation bands. The following roles can view bands, but not edit them: Org editor, Recruiter, Sensitive data viewer, and Compensation viewer.

Compensation band information is divided into three aspects that you can define:

- Base, equity, and variable pay amounts
- Structure (department/team/group) and location multipliers
- Job level

Keep in mind that your organization may not use all of the components that ChartHop provides for compensation bands. For example, your companies might not have hourly employees or include equity as a part of your band structure.

## Base, equity and variable pay

You can configure base pay ranges for annual salaries and/or hourly wages by specifying the minimum and maximum values for the range or by specifying a midpoint with a percentage spread. A target salary can be provided as guidance to recruiting or finance teams for new hires when it differs from the midpoint of the range.

Equity is represented by a single target value instead of a range. This value can be specified in shares, monetary amounts, or as a percentage of the actual base pay (not the band range).

Variable bonus is represented by a single target value instead of a range. This value can be specified in monetary amounts or as a percentage of the actual base pay (not the band range).

Equity and variable components are optional for all bands.

## Organizational structure

You can configure a hierarchical representation for your bands that matches your organization's structure. This structure helps organize and filter your bands. The grouping names you choose are meant to reflect the naming structure of your company.

For example, you could have a top-tier grouping called Technology which the Software development and the Information Technology divisions are both organized underneath. The example below further refines the structure by using career paths, such as IC (individual contributor) or manager, as the lowest-level grouping.

![](https://api.archbee.com/api/optimize/CXAjUAezd9VEEVQBIYmdw/a4IX_iSWLl7bV74U6fG9i_tier-bands-example.png "Example groupings")

:::hint{type="info"}
Setting up groupings is optional - you can choose to skip this section during the wizard.
:::

### Locations

Location multipliers allow you to reduce or increase a compensation band's value based on an employee's geographical location or cost of living. To use location multipliers, you must currently be storing location information for your employees in ChartHop. If you aren't storing location data in ChartHop, this band component isn't available to you.

### How location multipliers work: a worked example

Suppose you have a **Software Engineer** band with a base pay range of **$120,000–$160,000**, anchored to a baseline location (for example, Austin, TX).

If you configure a location multiplier of **1.10x** for New York City, ChartHop will automatically apply that multiplier to the band for employees in that location:

| Location              | Multiplier | Adjusted Range      |
| --------------------- | ---------- | ------------------- |
| Austin, TX (baseline) | 1.00x      | $120,000 – $160,000 |
| New York City         | 1.10x      | $132,000 – $176,000 |
| Denver, CO            | 0.90x      | $108,000 – $144,000 |

This means that when a manager or recruiter views the band for a New York-based Software Engineer, they will see the adjusted range — not the baseline range — so compensation decisions always reflect local market rates without requiring manual calculation.

:::hint{type="info"}
Multipliers apply to the entire range (minimum, midpoint, and maximum), not just the midpoint. A multiplier greater than 1.0 increases the range; a multiplier less than 1.0 decreases it.
:::

## Job levels

Job levels are a way to map your compensation bands to a standard level of performance within your organization.

ChartHop allows you to use an industry-standard either directly, indirectly, or not at all. You can either:

- directly adopt one of the industry standards, such as Radford or Option Impact,
- create your own job levels and map them to an industry standard,
- or decide to use custom names and choose not to map them to industry-standard names.

:::hint{type="info"}
[Modules:](https://www.charthop.com/pricing/) HRIS | Engagement | Goals | Performance | Compensation Reviews | Headcount Planning
:::

:::hint{type="info"}
[Roles](https://docs.charthop.com/user-roles-and-permissions): Owner | Org editor
:::


[title] Enablement examples
[path] ChartHop for Administrators/People Ops Tools/Time off for admins/Implementing Time Off/

ChartHop can help make enablement easier! We've provided example emails you can send to your employees to help the transition.&#x20;

## 📩 Email to All Employees

**Subject**: Upcoming Change: Our New Time Off System

Hi Team,

We’re excited to share that we’re making improvements to how you request and track time off!

Starting \[effective date], we’ll be transitioning to ChartHop for time off requests. This platform will provide a more intuitive experience, better visibility into your time off balances, and faster approvals.

***Here’s what you need to know:***

- All future time off requests will be submitted through ChartHop
- Your existing balances will carry over automatically

In the meantime, please continue using our current system through \[last day of old system use].

If you have any questions, feel free to reach out to \[HR contact name/email].

Thanks for your patience as we work to improve your experience!

Best,
&#x20;\[Your Name]
&#x20;\[Your Title]

## 📩 Email to Managers Only

**Subject**: Manager Action Needed: Transitioning to New Time Off System

Hi Managers,

As part of our efforts to streamline HR processes and improve visibility into team availability, we’re transitioning to ChartHop for time off as of \[effective date].&#x20;

***Here’s what you need to know:***

- Your team's balances and requests will automatically migrate.
- You’ll begin approving time off through ChartHop starting \[date].******


💡 **Action Required:**

- Attend the brief training session on \[date/time or link to recording] *(Recommended if company uses this approach)*
- Review your team’s balances and ensure all pending requests are up to date in the current system by \[cutoff date]******


This new platform will help you manage team schedules more efficiently and cut down on manual work. If you have any questions or need support, please reach out to \[HR contact name/email].

Thanks in advance for your leadership in making this transition a success.

Best,
&#x20;\[Your Name]
&#x20;\[Your Title]


[title] Sharing form responses
[path] ChartHop for Administrators/People Ops Tools/Forms/Form responses workflows/

## Automatically sharing form responses

You are able to allow forms to be shared automatically after they are submitted using settings in the form. See details on how to set this up in [Form responses workflows](docId:_QUlJLsN6BsALsltpaOoX). &#x20;

## Manually sharing form responses

Depending on the form settings and your user permission, you may have permission to share a form response.  If you dod then you will see a **"+" icon** in the bottom right corner of the form response.  If you do not see the **"+" icon**, then you do have permission to share the form response.&#x20;

::Image[]{src="https://archbee-image-uploads.s3.amazonaws.com/zxjhb7-DqnuzAP-lru1l3-CNe_PPqd35l7BMFX2n_Rq-20250409-013526.png" size="66" width="1120" height="1164" position="center" showCaption="false"}

**To share the form:**

1. **Click "+" icon** to bring up the sharing menu.&#x20;
2. In add **people or groups**, type in the name of the person or group would like to share with then press enter or select them.&#x20;
3. Select the role that you would like to assign them. &#x20;
4. When you have added everyone you would like. Press **Save.&#x20;**
5. The people who you have shared the form response with, will receive a notification.&#x20;

![](https://archbee-image-uploads.s3.amazonaws.com/zxjhb7-DqnuzAP-lru1l3-395GDdnvojjcd4JC0oNgM-20250409-014248.png)

## Levels of access for form response sharing

This table shows what each level is able to do with the form response.&#x20;

|                                         | View response to questions | View response to fields                | Edit responses | Share with additional people | Delete responses |
| --------------------------------------- | -------------------------- | -------------------------------------- | -------------- | ---------------------------- | ---------------- |
| **Viewer - standard data access&#x20;** | ✅                          | Limited to fields they have access to. |                |                              |                  |
| **Viewer - full data access**           | ✅                          | ✅ Can view full response               |                |                              |                  |
| **Editor - full data access**           | **✅**                      | **✅**                                  | **✅**          | ****                         |                  |
| **Owner - full data access**            | **✅**                      | **✅**                                  | **✅**          | **✅**                        | **✅**            |

##




[title] Troubleshooting time off
[path] ChartHop for Administrators/People Ops Tools/Time off for admins/

This page details how to troublshoot and resolve common time off issues.&#x20;



## How to troubleshoot an "incorrect" balance:

If an employee says they have an incorrect time off balance, here are your tools for understanding their balance. &#x20;

**Identify why their balance is the way it is.**

Balances are calculated based on the combinations of Upfront Balances, Accruals, Carryover, Adjustments and Approved time off requests. The best place to understand the balance is the policy details modal which can be accessed by clicking on a policy on the **profile Time off tab** or the **Balance Tab** of the policy.&#x20;

This will display a [ledger](https://www.google.com/search?q=what+is+a+ledger+and+how+is+it+useful+time+off+tracking\&sca_esv=5de84945538fbbc7\&udm=50\&fbs=AIIjpHxU7SXXniUZfeShr2fp4giZ1Y6MJ25_tmWITc7uy4KIeioyp3OhN11EY0n5qfq-zEMZldv_eRjZ2XLYc5GnVnMEIxC4WQfoNDH7FwchyAayyomVtyMIlwCjX48LT0TrXSPt4cTMBEUhFjb1npEwd-pp_aRD8Rutuf9gzrxQ1X-rVJ_s4WfJYQGlZ0dCz-NY6HC6esLApXMfMf9GTGGaIaQORmX6cA\&aep=1\&ntc=1\&sa=X\&ved=2ahUKEwjsvPfbn_qRAxUAhIkEHSRkGx0Q2J8OegQIEBAE\&biw=1398\&bih=857\&dpr=2\&mstk=AUtExfDXfkuent7ZP34sFHqEqX8AsY5sgOzRXhffu3B0qk7G31x2CwM51ppP-B1FQkJWoxJmSgoIF05D4vckYp9ujvgM2aI20eYIpmNrFMTY5I-PFcXlmGyTYlbVGYPNSEoTMkkclnakwxuj8wCJUwdI_jP0lXsgOhoZMkJFyL6rooWuUYxL3NdxTAMNM52BvRGkQQ7B3negb1taDIEwc4KyXXAon2awwXgLQTej9_CArLjTfYz-6BYAlOdZJg\&csuir=1) of all transactions in a person's time off history. You can walk through it to understand how a balance was calculated and determine potential the issues with it.&#x20;

![](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/JdA10eUb5IK3YUIGKdnAC-20251109-122118.png)

A few common issues that could be the problem:&#x20;

- An **Adjustment** was added incorrectly
- A **Time Off request** is incorrect
- Time off **Expired** and the person didn't realize it



## Resolving an issue with an Adjustment

### Adding an adjustment

![](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/X65QQdL1SD6gUqb5mck4Q-20260107-203427.png)

To add an adjustment:

1. Go to the **Policy details dialog** for a certain person using the Balance Tab of the policy.&#x20;
2. Click **Add Adjustment**
3. Select an adjustment type:&#x20;
   - **Add -&#x20;**&#x57;ill add additional days for the person as of the effective date
   - **Subtract -&#x20;**&#x57;ill add additional days for the person as of the effective date
   - **Override -&#x20;**&#x57;ill set the balance to the indicated amount as of the effective date. *We advise you use this option sparingly. If you are using it with an arbitrary effective date, you are likely not addressing the root issue for why the balance is incorrect. &#x20;*
4. Set the number of **days** to add, subtract or set as the balance
5. Set the **effective date** - *We advise that you intentionally set this date rather than just setting it to the current date. A few examples:*
   - If a person was awarded an extra day for working on December 25, and you are adding it to their record on December 29, then us Decemeber 25 as the effective date.&#x20;
   - If a person's upfront balance is incorrect, and you realize this in March 13, add the override adjustment to the correct upfront balance with an effective date of January 1 rather March 13. &#x20;
6. Add a note *(strongly recommened)*
   - Undocument adjustments often cause confusion. For example: "Extra day for working Christmas" or "Correcting upfront balance due to tenure issue"

### Deleting an adjustment

You are able to delete adjustments that have been have made in ChartHop.&#x20;

![](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/lS4udAUlYOwzOVMp-OTvB-20260107-205216.png)

To delete an adjustment:

1. Go to the **Policy details dialog** for a certain person using the Balance Tab of the policy.&#x20;
2. Locate the adjustment and click the trash can icon.&#x20;
3. Confirm that you want to **Delete Adjustment**

### Editing an adjustment

If you need to adjust the days, type, effective date, or note of an adjustment, you will need to **delete it and re-create it.&#x20;**



## Resolving an issue with a Request

Here are instructions for how to solve the following issues: 

1. **Change a request to a different policy&#xA0;**
   - Select the request and click the Edit button. 
   - In the panel, select the new policy and click Save. 
2. **Change the dates of a request**
   - Select the request and click the Edit button. 
   - In the panel, select the new dates for the request.&#x20;
3. **Add a missing request**
   - Single request - As an admin, you can click “Request Time Off” and create a new time of request for the person and create the missing request
   - In Bulk - Contact the ChartHop team if you need to import a number of missing requests. 
4. **Delete an extra request**
   - Select the request from the list and click “Withdraw Request.” In the confirmation dialog, follow the instructions. 
5. **Approve a pending request**
   - Unapproved requests are not counted towards a balance. As an admin, you may approve or reassign approval of a given request to another person.


[title] Form responses
[path] ChartHop for Administrators/People Ops Tools/Forms/

After you have collected responses for a form, you can view those responses in [Summary](docId\:qbDlkA-YzjmOZHsqLFW-K), [Sheet](docId\:qbDlkA-YzjmOZHsqLFW-K), or [Individual](docId\:qbDlkA-YzjmOZHsqLFW-K) views from within the Form, Review or Survey.&#x20;

To view form responses:&#x20;

1. From the left sidebar, select **People Ops Tools.**
2. Select **Forms**
3. Select the **Responses** tab.&#x20;

![Form Response Summaries](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/S7oVyHM-NbwipFpx9w_j9_forms-responses.png)

# Form Responses Summary

All availible responses to the form will be displayed in a default chart type.&#x20;

If you would like to do additional analysis or share the responses with others, you can build a custom [Dashboard](docId\:kA8-kvT0AUi_ekF7MECLD) by copying the [Carrot](docId\:fL-eMyhB9F8NzL2Vza9fq) expression next to the graph.

::Image[]{src="https://archbee-image-uploads.s3.amazonaws.com/zxjhb7-DqnuzAP-lru1l3-s5-sPZ2AAqjUQ7Tho8-to-20241122-192316.png" size="80" width="966" height="588" position="center" caption="Group by" showCaption="true"}

### Group Responses by

Using the dropdown at the top of the page, you are able to select a demographic field to split out the results by such as `Department` or `Tenure Range`.&#x20;

These allow you to do quick analysis. For [De-identified forms](docId\:kExBcKK0PLhmiFv1NPCqF) the options displayed will be restricted to the set of "Recorded" fields."



![](https://archbee-image-uploads.s3.amazonaws.com/zxjhb7-DqnuzAP-lru1l3-tA4ELPFF7u0kb8Kn_Lfll-20241121-202139.png)

# Form Responses Sheet

:::Iframe{iframeHeight="0" code="<div style=&#x22;position: relative; padding-bottom: 56.25%; height: 0;&#x22;><iframe style=&#x22;position: absolute; top: 0; left: 0; width: 100%; height: 100%; border: 0;&#x22; src=&#x22;https://www.tella.tv/video/cluk8yubt01d00fl50slh46c7/embed?b=1&title=0&a=1&loop=0&t=0&muted=0&wt=0&#x22; allowfullscreen allowtransparency></iframe></div>"}

:::

The sheet is a highly versetile way to view your form response data. It feels in many ways like a spreadsheet.  A few features:

- View Approval or Release states
- See all responses both current and historical.
- Copying and pasting to a spreadsheet or document
- Navigating with your keyboard like a spreadsheet (along with keyboard tool like shift+arrows to select)
- Quick count/sums/average

![Form Responses Sheet](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/xsruB7i-zxWDT-M8sTvD8_screenshot-2024-04-03-at-24936-pm.png "Form Responses Sheet")

### View Approval Status

If a form requires approval, you are able to see the status of that approval right within the table.&#x20;



![](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/_dfpV1pFWKd-pFSJP_h53_screenshot-2024-04-03-at-34516-pm.png)

# Individual Form Responses

![](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/S7GDKzhWhOQiUn9E3QMDK_screenshot-2024-05-02-at-34415-pm.png)

The third tab allows you to view, search and filter individual form responses in a visual card format.&#x20;

Filter the responses or scroll to view additional responses.&#x20;

### Editing form responses

If you need to modify data for a form, survey or review, it is best to edit the form response rather than edit the field directly. If you are editing a field within the form, that field value will be updated as well. If you have access to edit form responses then you have the following options.&#x20;

To edit a form response on the **Sheet** view:

1. Find the form response
2. Click the Expand icon to view the individual response
3. If you have proper permissions, you will see an **pencil icon**. Click the pencil icon to edit the form response. &#x20;
4. Edit the form response, then **Save**.&#x20;

To edit a form response on the **Individual** view:

1. Find the form response using the filters
2. If you have proper permissions, you will see an **pencil icon**. Click the pencil icon to edit the form response. &#x20;
3. Edit the form response, then **Save.**&#x20;



# Filter Responses

For example, if you want to see the responses submitted by the Sales department or forms that are about people who are managers.

You are be able to filter the results by:

- Who submitted the form
- Who the form is about

Depending on the setup of your form, the options will vary depending on the settings of your form.  For example if those are the same person, then you will only see a filter for the "Submitted by."

![](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/xsgVjH0RqGt8eE-x2xXsg_screenshot-2024-04-03-at-33207-pm.png)

### Filter responses by time range

Want to see all the survey responses from last year? No problem.&#x20;

Note: this is only available on the Forms page. Surveys and Reviews will limit the response to submissions associated with that Survey or Review. &#x20;

![](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/OF6rT0LbLh6w8_vEOn4bE_screenshot-2024-04-03-at-33353-pm.png)

#

The form responses you have access to are:

- You are the person who submitted the form response
- You have read access to at least one of the fields in the form response.&#x20;
  - If the form is a mix of fields you do and do not have access to, you will see the response, but you will only see the responses to the fields you have access to.&#x20;

# Form Response Access & Visibility

If you have access to a Form, Survey or Review, then you will have access to the responses sheet. This does *not* mean that you will have access to all of the form responses. Regular access roles and permissions still apply.&#x20;

Access to responses to questions depends on how the form is setup and how it is used.&#x20;

### Form response visibiility rules

| Situation                                                                                                                                                                              | Can they view it                                                      |
| -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------- |
| If the user is the respondent                                                                                                                                                          | ✅ You can always view your own responses to forms.                    |
| If the user is in a [built-in](docId:47kdSxXzVdMh8nqhSJ27I), [custom access role](docId:-WqkyL-Bv1QG2J9obE7uF) with the `formResponse:read` [permission](docId\:NOcTBWb38Zu91ijaq0cpm) | ✅ Owners are the only built in role with this permission.             |
| If the user has View, Edit or Owner access to the Survey or Review.                                                                                                                    | ✅ Giving access to a Survey or Review allows people to see responses. |
| If the form response is hidden from who the form is about due to a workflow state such as: unapproved, rejected, or unreleased.                                                        | ❌ They cannot view until the form is out of that workflow state.      |
| All other users                                                                                                                                                                        | ❌ Do not have access to the form response.                            |

### Field access in form responses

If there is a mix of Fields and Questions in the form response, the field sensitivity will overrides the form response visibility. [Fields](docId\:XYrLLTZxiE-BV4ZKzEs_g) have a configured field sensitivity such as Org Public or Private.  Questions do not.&#x20;

**For example:** If a user has access to view the form response but does have access to the field, then the form response will be displayed with responses to all Questions, but will not display the fields the user does not have access to.&#x20;

![](https://app.archbee.com/api/optimize/CXAjUAezd9VEEVQBIYmdw/62aWonwLkVEhlPl2o7I9b-20251006-172747.png "Create as Dashboard")

# Create a Dashboard of Form Responses

To create a [Dashboard](docId\:kA8-kvT0AUi_ekF7MECLD) of the responses:&#x20;

1. On the **Responses&#x20;**&#x74;ab of the **Form.**
2. Click the **Create as Dashboard** button.&#x20;
3. A dashboard will automatically be created using the default charts for each question. Within the dashboard, you can then modify the chart type, add headers & text blocks, reorganize and then share. If you apply a **Group By** — that will be copied over as well.&#x20;

![](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/8_DZJqvP7Zj_FdJOhfqpe-20251006-172729.png)

### Copy chart to dashboard

If you just want to bring over an individual chart, you can also copy a chart to a dashboard.&#x20;

1. On the **Responses&#x20;**&#x74;ab of the **Survey.**
2. Click the ⠇menu button. Then select **Copy to Dashboard**. &#x20;
3. In the Copy to Dashboard dialog, select the **Dashboard** that you would like to copy the chart to.&#x20;
4. Select **Copy Chart**. The chart will then by added to the end of the Dashboard



# Importing & Exporting Form Responses

## Exporting Form Responses

The form response exporter will export the form responses display, so it will apply any of the filters for: Submitted On, Submitted By, or About.

To export your form responses as a CSV:

1. Navigate to the **Form > Responses** **Tab**
2. Set the correct time range and filter for the responses that you would like to export.
3. In the right corner, select the import/export button, then select **Export Form Responses as CSV**
4. In the dialog, select from the [export formatting options](docId\:ZznndmQ09j6UBPvEbbIFW)  then select **Export CSV**.&#x20;
5. Your export will then be generated. In the dialog, select **Download Export**.&#x20;

## Importing Form Responses

Importing form responses can be useful for:

- Migrating a form or form responses from another system (ie. a previous performance review)
- Adding responses after a deadline or a form has closed
- Uploading responses for special stakeholders *(ie. an executive who doesn't follow the normal process)*
- Bulk updating or modifying existing form responses

::Image[]{src="https://archbee-image-uploads.s3.amazonaws.com/zxjhb7-DqnuzAP-lru1l3-CBXJv6VNh2if-bQi9dSsS-20240909-132215.png" size="46" width="556" height="336" position="center" alt="Import Form Response Button" showCaption="false"}

### To upload a form response

1. Create a CSV of the form responses that you would like to import
2. Ensure that the form in ChartHop contains all of the questions or more that you would like to import. If you are importing a new form from another system, you will have to recreate that form within ChartHop.
3. Navigate to the **Form > Responses** **Tab**
4. In the right corner, select the import/export button, then select **Import Form Responses**
5. Create a CSV that aligns to your form&#x20;
   1. Click the **Download example CSV template** in the modal to get a form a starting point.&#x20;
   2. See below for additional guidance about building out your CSV.
6. Select the CSV
7. Upload the CSV and import the form responses

![](https://archbee-image-uploads.s3.amazonaws.com/zxjhb7-DqnuzAP-lru1l3-Dytjcbsj-jWplypECv5cp-20240909-132149.png)

### Form Responses CSV Columns

We recommend your click **download example CSV template** in the modal to get a form a starting point for your import

Required Columns:

- **submitPersonEmail** - the email address of the person who submitted the form
  - Identified & De-identified Forms - the email address of the person who submitted the form
  - Anonymous Forms - Left blank, but must be included as a column
- **submitAt** - the date/time the form was submitted
  - Accepted Date/Time formats:&#x20;
    - ISO format `2024-09-06T07:44:05Z`
    - Date formats `9/6/2024 or 2024-09-06` (Time will be set to 12:00 AM)
    - Date & Time with Timezone `2023/10/24 3:15:41 PM AST` (Google Sheets Default)
- **One column per question in the form**&#x20;
  - Match using:&#x20;
    - The text of the question *(ex. Any other thoughts you'd like to share?)*
    - The linked field name, if applicable *(ex. Additional Thoughts)*
  - You can leave out some questions if you wish
  - Only questions currently in the form can be uploaded. Previous questions, which may still be listed in the response table, cannot be uploaded.&#x20;
  - Response must align with the format and constraints of a question or field. For example:
    - Single Select - Must you one of the values *(ex. Agree)*&#x20;
    - Yes / No - Must use either use Yes or No

Other Columns:

- **externalId** - identifier of the form response if importing from another system
  - Optional
- **targetPersonEmail** - email address of the person who the form is about
  - Required if the form settings for: Who is this form about? -> Another Person&#x20;
- **assessment** - name of the Review or Survey the form response is tied to
  - 🚧 We only suggest using this if you already have this form linked in the Review or Survey.&#x20;
- **approvalStatus&#x20;**- The status of the form response if it has approval or review steps. Accepted Values:&#x20;
  - UNRELEASED
  - PROPOSED
- **approvalAt** - Timestamp of the approval&#x20;
- **approvalEmail** - email address of the person who approved the form
- **releaseAt** - Timestamp of the release &#x20;
- **releaseEmail** - email address of the person who released the form


[title] Files & Document management
[path] ChartHop for Administrators/People Ops Tools/

![](https://archbee-image-uploads.s3.amazonaws.com/zxjhb7-DqnuzAP-lru1l3-sy2qDT3Qsj1kl69bGvUAX-20250618-201905.png)

## File Organization

In ChartHop, documents are organized using [Fields](docId\:XYrLLTZxiE-BV4ZKzEs_g) and [Categories](docId\:TPKhVeXrOv1C9Jv2x6vDv).&#x20;

Create a new field for each type of document that you would like to categorize and store. Use a Category to group and organize the fields.&#x20;

**To create a new type of document that you would like to store:&#x20;**

1. Follow the instructions one [Creating custom fields](docId\:VMoQbEuAnP7Fz8E8HOZYq)&#x20;
2. For the **Data type,** select **File**.
3. Use the field **Label** to set the name of the document such as "Non-disclosure agreement"&#x20;
4. Use the **Sensitivity** to set who should have access to the document.&#x20;

### Organization Best Practice

1. **Create a fields for every “File type” or “Document type” —&#x20;**&#x49;n other systems these may have been represented in folders or in the file name. Use a single field for the general file type then upload multiple files to that field. For example: ✅ Commission Agreement | ❌ Commission Agreement Q1 FY25
2. **Place all file fields in a&#x20;**[Categories](docId\:TPKhVeXrOv1C9Jv2x6vDv)&#x20;
   1. *Note that the file category name will be visible to all viewers of the file.&#x20;*
3. **Only use “Miscellaneous” as a fallback**

## Uploading documents

### Upload a single document:&#x20;

1. Navigate to the person's [Profile](docId\:p1YCVjPv07ENNcLccNNFu) who you would like to upload a document about.&#x20;
2. Navigate to the **Files** tab.&#x20;
3. Click the **Upload** button in the top right corner.&#x20;
4. Select the **File** type — This dropdown will list all of the file fields that you have access to as well as **Miscellaneous&#x20;**&#x77;hich are file that are not linked to a specific field, but can still be uploaded to the person's profile.&#x20;
5. Drag & drop in your file or Browse to select it. &#x20;
6. Click **Upload**.&#x20;

### Migrate or bulk upload documents

Reach out the ChartHop team if you need to upload documents in migrate or bulk upload documents. We can work with you on the best solution for your organization.&#x20;

### Supported file types

ChartHop supports uploading of:

- Document files - PDF, docx, ppt
- Images - png, jpg, gif

All files must be under 100 MB.&#x20;



## Viewing documents&#x20;

The files page on an employee's profile, if it is enabled at your organization, will display important employee document and files.&#x20;

**To view a file:&#x20;**

1. Click the **document name** in the list of files.&#x20;
2. A modal with appear with the document.&#x20;
   1. If it is a PDF, you will see a preview of the file.&#x20;
   2. Otherwise you can download the file to view it..&#x20;
3. Additional document metadata can be view in the the right side such as when the document was uploaded.&#x20;

![](https://archbee-image-uploads.s3.amazonaws.com/zxjhb7-DqnuzAP-lru1l3-WDt3l43FDcLekOdQhRSlI-20250410-004716.png)

## Files page

Located under People Ops Tools > Files and availible to [Owner](docId\:o_IcgvK94IdcUnZIuNTVi)s in ChartHop. This page allows you to view all of the files added to your ChartHop account. &#x20;

:::Iframe{iframeHeight="0" code="<!-- <p>paste iframe code<iframe style=&#x22;border:0;&#x22; width=&#x22;800&#x22; height=&#x22;450&#x22; src=&#x22;https://www.tella.tv/video/cmc2dv3q1000p0bl47y67aiq6/embed?b=0&title=1&a=1&loop=0&t=0&muted=0&wt=1&#x22; allowfullscreen allowtransparency></iframe> here</p> -->"}

:::

## Auditing documents

| **Use Case**                                                                                            | **Tool**                                                                                            |
| ------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------- |
| See who does and doesn't have a file of certain type.<br />*"See who has a Commission Agreement"&#x20;* | Add field as a column on the [Data Sheet](docId\:XTd4DG4I_4_nMwjfEsq0S).                            |
| View all files of a specific type<br />*"See all Commission Agreements"*                                |  Files page                                                                                         |
| View all files for a certain person.<br />*"View all of Sarah Smith's files"&#x20;*                     | [Profile](docId\:j1T0pLzi_VRnFm3twm3kQ) Files tab or Files page for quick switching across people.  |



The [Data Sheet](docId\:XTd4DG4I_4_nMwjfEsq0S) can also be used to view if a person does or does not have a file.&#x20;

To setup this data sheet to do this audit:&#x20;

1. Add the file as a column to the data sheet.
2. Add a filter to the data sheet:&#x20;
   1. `fieldCode:*` — to display all people with the document
   2. `fieldCode:!*` — to display all people without the document

![](https://archbee-image-uploads.s3.amazonaws.com/zxjhb7-DqnuzAP-lru1l3-73brGeryKBG0NJBoBUF4b-20250411-195207.png "Everyone with the CIIA document")



## Editing document information

Once you are viewing a document, you can edit the document's name and associated field.&#x20;

**To edit a document's information:&#x20;**

1. Click on the file name in the File tab of the profile
2. Click th&#x65;**&#x20;✏️ Edit&#x20;**&#x62;utton in the top right corner.&#x20;
3. Edit the metadata such as name, linked field or access level.&#x20;



## Collecting documents from employees&#x20;

To collect documents from employees you can use the same methods as you use to collect fields: [Forms](docId\:QR76GaDOskC1RlC_S0jes) or [Edit Person Modal](docId\:xoULLp5oNvwTloGOI9seS).&#x20;



## Exporting documents

Docuents can be downloaded as a zip file from the Files tab on the profile.&#x20;

Documents can also be downloaded using the Files page.&#x20;

**To export documents from the Files page:&#x20;**

1. Navigate to **People Ops Tools > Files**
2. **Filter** to the view of the files you would like
3. **Click** the download icon in the top right corner.&#x20;
4. Select either **Export CSV** o&#x72;**&#x20;Export Files as Zip**
   1. **Export CSV -&#x20;**&#x57;ill export a csv of all of the info about the files in ChartHop, but not the files themselves.&#x20;
   2. **Export Files as Zip -&#x20;**&#x57;ill export a zip file of all of the files in the view.&#x20;




[title] The Goals page
[path] ChartHop for Administrators/

![ChartHop Goals](https://api.archbee.com/api/optimize/CXAjUAezd9VEEVQBIYmdw/iVHT6pWuOonoQ_l42O-z__image.png)

Goals is a ChartHop module that connects strategy to execution by letting leaders set objectives at the company level, cascade them to teams and individuals, and track progress in real time - whether through manual updates or automatic signals from connected systems like Salesforce and Zendesk.

Goals live inside the same platform as your org chart, headcount plans, performance reviews, and compensation data. That means goal progress carries real organizational context. Leaders see alignment, momentum, and risk at a glance. Managers walk into 1:1s already knowing where things stand. No chasing updates. No guessing.

Access Goals from the main navigation.

![Goals Page](https://api.archbee.com/api/optimize/CXAjUAezd9VEEVQBIYmdw/649zzzokyO44boUfw1eoG_image.png)

The Goals page is the central place to view, track, and understand goals across the organization. It brings strategy, execution, and accountability into one shared view.

Five tabs give you different lenses into the same goal data: **All**, **Organizational**, **Personal**, **List**, and **People**. All five share a common set of controls at the top of the page.

**Shared controls**

- **Time slider** - scrub across a date range (2019 to 2031) to view goals active during any period. The current date is shown by default.
- **Filter** - narrow goals by people, groups, or attributes. The filter badge shows how many active filters are applied.
- **Find people, groups, or enter query** - search for specific people or groups to focus the view.
- **Search goals** - search by goal name within the current tab.
- **Create Goal** - available from any tab. Opens the Create Goal modal.

The total number of goals visible in the current tab is shown below the tab bar.

## All tab

The default view when opening Goals. Shows all goals across the organization - both Organizational and Personal - in a single list grouped by category. Parent goals are expandable to show their child goals. Each row displays the goal label, owner, supporters and groups, confidence, progress, sensitivity, and end date.

## Organizational tab

Filters to Organizational Goals only. Shows the same hierarchical expand/collapse structure as the All tab, with parent goals and their sub-goals nested beneath them. Use this tab to focus on company, department, and team-level objectives.

## Personal tab

Filters to Personal Goals only. Shows individual-level goals in a flat list. Use this tab to review goals that aren't part of the organizational hierarchy.

## List tab

A flat list of all goals regardless of type or hierarchy. Parent goals and sub-goals appear as separate rows. This view is designed for fast scanning across all goals at once, identifying which are off track, and filtering to what matters most. Columns are the same as the All tab.

## People tab

Organizes goals by person. Every person in the organization appears as a row, showing their name, title, manager, department, and goals across four columns: **Goals** (total count), **Owned Goals**, **Supporter Goals**, and **Group Goals**. Goal names are visible inline within each column.

This view highlights accountability and workload. Use it to prepare for 1:1s, understand goal distribution across teams, and identify where individuals may be over or under-allocated. A grid/list toggle in the top right switches between display formats.

![Confidence and Progress](https://api.archbee.com/api/optimize/CXAjUAezd9VEEVQBIYmdw/xfo_4aqpMld4jd-gTNLTY_image.png)

## Visual Indicators

Two visual signals appear consistently across goal lists throughout ChartHop:

- **Progress** - shown as a percentage with a colored bar. Purple bars indicate progress toward the goal target.
- **Confidence** - shown as a colored pill or dot. Labels and colors are configured by your admin in Goal Types, but the default scale runs from Off Track (red) through Mostly Off Track (orange), Partly On Track (amber), Mostly On Track (teal), to On Track (green). A "Success" state (green) indicates a completed goal.

:::hint{type="info"}
[Modules](https://www.charthop.com/pricing/)**:&#x20;**&#x48;RIS | Engagement | **Goals** | Performance | Compensation Reviews | Headcount Planning
:::


[title] Launch a compensation review
[path] ChartHop for Administrators/Compensation reviews/Setting up a compensation review/

When you launch your compensation review, it changes the status from **Not started** or **Paused** to **Active**.&#x20;

:::hint{type="warning"}
When a compensation review is **Active**, you cannot make any changes to the compensation review cycle settings. To make changes, you must pause the compensation review. [Learn more.](https://docs.charthop.com/managing-a-compensation-review)
:::

Once you launch, all reviewers and approvers have immediate access to the compensation review. ChartHop sends them a notification to let them know they can go ahead and get started.

To launch a compensation review:

1. Open an existing compensation review. The compensation review must have a status of **Not started** or **Paused**.
2. Selec&#x74;**&#x20;Launch** at the top right of the screen.
3. Select **Launch**.
4. Select **Go to Review** to go to the Cycle overview of your compensation review.



:::hint{type="info"}
[Packages](https://www.charthop.com/pricing/)**:&#x20;**<font color="#a9a9a9">Basic</font> <font color="#000000">|</font> <font color="#000000">**Standard*** | **Premium**</font>****

\* Available as an add-on
:::


[title] Performance reviews
[path] ChartHop for Administrators/

You can create and implement performance review cycles directly within ChartHop. 

These review cycles can be customized to fit multiple styles of reviews (for example, 360 reviews, upward/downward reviews, 9-box reviews, and more). You can also use ChartHop reviews to track employee engagement and overall employee satisfaction.

You can set up these reviews for a specific group of employees or everyone in your organization. All review aspects, including sending and tracking forms, sending reminders, viewing completion, and analyzing data, can be accomplished within one centralized location.

:::hint{type="info"}
Before you can create a review, custom forms must have been set up in ChartHop by users with Owner or Technical owner access. [Learn more.](https://docs.charthop.com/forms)
:::

### Access reviews

You can view existing and create new reviews from the Reviews page.

![Reviews page](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/vrj4BSvXcj1c_LU-xQqRY_reviews-page.jpg)

1. From the left sidebar, select **Performance.**
2. A list of all **reviews** and their current status displays.
3. Refine the list in the following ways.
   - Use the Status drop-down list to choose to view only reviews of a certain status.
   - Use the Last modified by drop-down list to view reviews last modified by a particular person.
   - Filter the list by the name of the person who created the review.

### Move a review to a survey

ChartHop separated Reviews into Performance Reviews and Engagement Surveys. You can move items between the Reviews and Surveys by doing the following:

1. From the left sidebar, select **Performance.**
2. Select the reviews that you would like to move
3. Select **Move** from the actions list
4. Confirm the move in the dialog

![Move reviews](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/ptdoJiezAmyioX-CnJmJ__screenshot-2023-12-19-at-10149-pm.png)

:::hint{type="info"}
[Modules](https://www.charthop.com/pricing/)**:&#x20;**<font color="#000000">HRIS | </font>Engagement | Goals | **Performance** | <font color="#000000">Compensation Reviews | </font>Headcount Planning
:::


[title] Update a template
[path] ChartHop for Administrators/People Ops Tools/Letter templates/

After creating a template, you can update its name, content, and styling at any time.

To update a template:

1. From the left sidebar, select **People Ops Tools.**
2. From the sub-menu, select **Letter Templates.**
3. Select the template you wish to update from the template list.
4. Make your changes to the template:
   - **Content**: Make edits to the template itself using HTML or Markdown in the template editor.
   - **Style**: Make edits to the template's styling using CSS or Page Media CSS.
   - **Template name**: Update the name of your template by selecting the Pencil icon, or by selecting the default template name and editing the text.
5. Select **Save** when finished.


[title] Implementing Time Off
[path] ChartHop for Administrators/People Ops Tools/Time off for admins/

When you transition to using Time Off in ChartHop, we will rebuild employee request history for the current policy year. This allows for previous requests to be edited even if they weren't requested in ChartHop.

There are two components to implementing time off: ChartHop setup and internal enablement.

## ChartHop Setup

### Starting balance

Since carryover was handled in a different system, administrators will upload employees' starting balance of policy balance + carryover from the previous year.

You can access the CSV file by creating a time off policy --> adjustments --> import balance. This will give you a CSV with employee names, personId, and a column for the updated balance.

### Request history

We will then upload your employees' request history. We recommend doing this by country to make it easier to review data.

For requests that span the policy year from the last year (`example: I'm transitioning to ChartHop in 2025, but have requests that span from 12/2024-1/2025`), the requests need to be split into different rows.

Example: A request from 12/24/2024-1/3/2025 would be split into two rows on the CSV upload:

`12/24/2024-12/31/2024`

`1/1/2025-1/3/2025`

| Column Header       | Description                                                        |
| ------------------- | ------------------------------------------------------------------ |
| `contact.workEmail` | Unique identifier for employees                                    |
| `timeOffPolicyName` | The time off policy requests apply to                              |
| `timeOffStartDate`  | Start date of time off request                                     |
| `timeOffEndDate`    | End date of time off request                                       |
| `timeOffDays`       | Number of days requested                                           |
| `timeOffApproval`   | Approval status: APPROVED, PENDING, REJECTED, CANCELED, SUPERCEDED |

### Uploading requests

Requests can be uploaded once a time off policy is ACTIVE. Verify filters and ensure all employees are encapsulated.

Upload requests via our importer in admin --> Import spreadsheet data

### Troubleshooting tips

- Requests were uploaded and say "Non ChartHop policy"
  - Verify that the employee was in an active policy at the time of upload
- No balances were changed
  - Check that the policy was set to "limited"
  - Verify that you are uploading a different value than the starting balance

## Internal Enablement

We recommend setting a cutoff date — the date at which employees will stop requesting time off in their old system, and when they will start requesting in ChartHop.

In the setup process, your team will determine a cutoff date. After that date, no more requests will be made in your old system.

By that date, all requests will be uploaded into ChartHop — any last-minute requests can be uploaded or re-requested in ChartHop.

See [Enablement examples](docId\:hf6E9lPKWzU1EKX4z1Ye2) for emails to send to employees and managers

[title] Reviewing employee compensation
[path] ChartHop for Administrators/Compensation reviews/Participating in a compensation review/

Once you access a compensation review, the reviewer workbook displays. Depending on how many levels of employees you’re reviewing, you can review compensation changes just for one level or review and approve multiple levels of proposals.

In the reviewer workbook, you can see the following sections:

1. Timeline
2. Visualizations
3. Reviewer workbook table

![Compensation review](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/WUFT5a46J0rT7w0WzewKc_compreviewsnumbered.png "   ")

### Timeline

Displays each step of the review cycle process, including submission statuses, key dates, and the names of each reviewer and approver. By looking at the timeline, you can easily see where in the process your proposals are and who is currently reviewing them.

### Visualizations

Visualizations show the real-time impact of changes to compensation.

The Budget allocation displays the budgets to which you have access and their real-time status. You can easily see whether a budget allocation has been met or if there’s extra room in the budget. As you make changes to employee base values, the budget allocation charts update to reflect your impact to the budgets. You can hover over the budgets to view a tooltip with more information and a breakdown of each budget (for example, how much is remaining or how much is over budget). You can also change the currency of the budgets you are visualizing by using the **Currency** dropdown.

The Raise percentage displays the range of the raise percentages that you are being given in the current review. As you make changes to employee base values, the Raise percentage chart updates to reflect the impact of the raises you give. When you’re reviewing multiple levels of reviews, the chart updates to show the raise percentage for each reviewer.

Visualizations can be collapsed at any time.

### Reviewer workbook table

Displays the list of employees whose compensation you’re reviewing and all their relevant performance and compensation data. When you have multiple levels of employee review, each level can be expanded and collapsed. The columns that display in the reviewer workbook table are customized to your company.

By default, all eligible employees display in the list. You can use the View dropdown to filter the list to display:

| **View**                  | **Description**                                                                                                                                                                                                                                                                                                                     |
| ------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| All employees             | Displays all employees underneath you in the review structure. This includes employees who are ineligible for the current compensation review (for comparison purposes).                                                                                                                                                            |
| Eligible employees        | Displays only employees underneath you in the review structure who are eligible for the current compensation review.                                                                                                                                                                                                                |
| Employees with comments   | Displays only employees underneath you in the review structure who are eligible for the current compensation review who have comments entered by other reviewers and approvers.                                                                                                                                                     |
| Employees with exceptions | Displays only employees underneath you in the review structure with proposed compensation changes that exceed the established guidelines.<br /><br />Employees with exceptions can display with a flag icon next to the value in the Base raise amount column (depending on how your admin has configured the compensation review). |

You can also use the **Department&#x20;**&#x61;nd **Reviewer&#x20;**&#x64;ropdowns to filter by department and by specific reviewer:

- Selecting a department displays all employees in the specified department. 
- Selecting a reviewer displays all the employees for whom the reviewer is responsible for reviewing and approving. This can include multiple levels of review, depending on the reviewer’s position in the reporting structure.

:::hint{type="info"}
[Packages](https://www.charthop.com/pricing/)**:&#x20;**<font color="#a9a9a9">Basic</font> <font color="#000000">|</font> <font color="#000000">**Standard*** | **Premium**</font>****

\* Available as an add-on
:::


[title] Reject a submitted proposal
[path] ChartHop for Administrators/Compensation reviews/Participating in a compensation review/Reviewing and approving proposals/

When you don’t agree with a proposed compensation change or want to return the compensation review to the original reviewer for more information, you can reject a submitted proposal.

To reject a submitted compensation proposal:

1. Select the **Changes & approvals** tab in the compensation review.
2. In the **Proposals for approval** section, select and review a proposal with a status of **Ready for review**.
3. Select **Reject request** for the selected proposal. The **Reject request** dialog displays.
4. Enter a reason for rejecting the proposal.
5. Select **Submit**. 
   - The proposal status changes to **Awaiting submission** and it is sent back to the original requester. ChartHop notifies the reviewer who originally submitted the proposal that it was rejected and allows them to return to the compensation review and adjust their proposal.

As an approver, you also have the ability to enter employee-specific comments or overall comments in the Comments field to explain why you rejected the proposal and to suggest changes. Your comments are kept confidential and only the reviewers and approvers in your review structure have access to viewing and responding.

:::hint{type="info"}
[Packages](https://www.charthop.com/pricing/)**:&#x20;**<font color="#a9a9a9">Basic</font> <font color="#000000">|</font> <font color="#000000">**Standard*** | **Premium**</font>****

\* Available as an add-on
:::


[title] Submitting your proposal
[path] ChartHop for Administrators/Compensation reviews/Participating in a compensation review/Reviewing employee compensation/

:::hint{type="info"}
[Packages](https://www.charthop.com/pricing/)**:&#x20;**<font color="#a9a9a9">Basic</font> <font color="#000000">|</font> <font color="#000000">**Standard*** | **Premium**</font>****

\* Available as an add-on
:::

Once you’re done reviewing and editing compensation for all the employees assigned to you in the review structure, you must submit your changes to move them forward in the compensation review process.

:::hint{type="warning"}
Once you submit your proposed changes, you cannot make any more edits and the reviewer workbook table displays in view-only mode.



You are able to enter additional comments and view whatever changes and comments your manager (or next level reviewer) makes during their review of your proposal.
:::

### Submit proposal

To submit your proposed changes to compensation:

1. Review all changes and edits you’ve made to compensation.
2. Select **Submit** or **Submit all** in the compensation review header. 
   - For reviewers with only one level of review, the **Submit** button is always available for selection. 
   - For reviewers or approvers reviewing multiple levels of employees, the **Submit all** button is available only when all employee levels have been marked as reviewed.
3. In the **Submit changes** dialog that displays, you can view the next steps of the approval process, including the names of reviewers and approvers who will review your proposed changes. 
4. Select **Submit**.

### Respond to a rejected proposal

In the case that your proposed changes have been rejected by an approver, you can enter the compensation review again and view the comments from your approvers for more information. 

You have the ability to respond to employee-specific comments or overall comments in the Comments field.

![Overall compensation review comments](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/SP0qzg5Iro9zzenypzHfY_compreviewscommentsoverall.png)

Your comments are kept confidential and only the reviewers and approvers in your review structure have access to viewing and responding.

Once you’re ready to adjust your proposed changes, you can update your compensation edits as needed and resubmit your proposals by selecting **Submit**.


[title] Time off payroll export
[path] ChartHop for Administrators/People Ops Tools/Time off for admins/

# Overview

Time off data frequently needs to be recorded for payroll. Our payroll export allows you to export all time off data to appropriately report on time off taken.&#x20;

## To export data:

1. Go to People Ops Tools --> Time off payroll export&#x20;
2. Choose the time period for the data you want to see- for example, if you need to report on the last two weeks for payroll, click "Last N Weeks" and insert "2"
3. If you want to filter for certain countries, employement status, or other fields, you can use the filter bar to set that criteria
4. You will see that the payroll export defaults to the time off columns-&#x20;
   1. Employee- Employee name.&#x20;
   2. Policy Name
   3. Policy Type - Type of policy (PTO, Sick, etc.).
   4. Type of time off - Policy Type.
   5. Entry Type- **Time off** is a time off request, **Upfront Balance** is a balance adjustment
   6. Start Date - Start date of request. This will only be populated for time off requests, not balance adjustments.&#x20;
   7. End Date - End date of request. This will only be populated for time off requests, not balance adjustments.&#x20;
   8. Days - Number of days requested or the number of days updated in the balance.&#x20;
   9. Approval - Whether the request has been approved, rejected, or is pending.&#x20;
   10. Note - Any notes on the time off request.
   11. Balance Effective Date - The date at which the balance is effective. For example, Start date of a request is 1/7/25 - 1/10/25. As of 1/7/25, the balance was 15 days. *(See example below)*
   12. Balance - The balance as of the balance effective date.&#x20;
   13. "+"- This allows you to add any additional columns you may need. You can adjust this like the datasheet- adding columns and moving them to the best order for your export.&#x20;
5. Once you have the data you need, click "Export CSV" to export your time off data&#x20;



![](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/CO8L6-BX7iug4ifg2-mJR_image.png "Select the time frame desired")

![](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/ojL0H1B89MlZN84Llzslo_image.png "Balance effective date example")




[title] New hire management
[path] ChartHop for Administrators/People Ops Tools/

ChartHop can automatically import new hires from your ATS via an Inbound Data Flow. If you haven't yet configured your ATS, you will need to set up an [inbound job data flow from your ATS](docId\:Ah_bmgV0eOME3ZLmuJUrl) first.&#x20;

When you mark a candidate as “hired” in your ATS, ChartHop will automatically try to match the person to the proper open job on your Org Chart. Most of the time this works great and we're able to find a match.

However, if there isn’t a match, the person will be placed into the **New Hire Management&#x20;**&#x70;ag&#x65;**,&#x20;**&#x77;here you can then match the new hire to the appropriate open job in ChartHop. This acts like an "inbox" for new hires flowing into ChartHop from your ATS.

To access the **New Hire Management** page:

1. From the left sidebar, select **People Ops Tools.**
2. From the sub-menu, select **New Hire Management.**

## Matching a new hire to an open job&#x20;

![New Hire Management](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/j_5465RpBLKfW5oAJ1YFa_screenshot-2023-12-13-at-24717-pm.png "New Hire Management")

To match a person an open job:

1. Find the person in the table and click **Match to job**
2. View the information imported from the ATS at the top of the drawer to verify that it is the correct person.&#x20;
3. In the **Hire into existing open job,** select the open job that you want the employee to fill.
4. If availible, the **start date** set in your ATS will be imported. You can keep the imported date or update it.
5. You can also set the **Org announce date**, which is the day that the new hire will appear on the org chart and across ChartHop.&#x20;
6. Click **Save** to save the match. They will now no longer show up in the New Hire Management page. You can now view the person by going to their job within ChartHop.

![](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/alVRtwrVSwoUlNwJAugGq_screenshot-2023-12-13-at-25038-pm.png "Matching a person to an open job")

## Removing a new hire

Sometimes hired candidates don't always work out or people are accidentally marked hired in the ATS.&#x20;

If this happens and the perso&#x6E;*&#x20;was not&#x20;*&#x61;utomatically matched to an Open Job, you can remove the new hire from the New Hire Management Page:

1. Find the person in the table and click **Match to job**
2. Click **\[-] Remove person** in the bottom right corner.&#x20;
3. Confirm that you want to remove the person.&#x20;

If this happens and the person *was* automatically matched to an Open Job, you can remove the person on the **Job History** tab of the **Profile**:

1. Go to the Person's profile and go to the **Job History&#x20;**&#x74;ab
2. Click the three dots next to "Started: Person name" and **delete** that change.&#x20;



:::hint{type="info"}
[Roles](https://docs.charthop.com/user-roles-and-permissions): Owner | Technical Owner | Recruiting Editor
:::


[title] Collaborating in a survey
[path] ChartHop for Administrators/Engagement surveys/

You can share your survey with your peers so that multiple people can edit the survey and monitor its progress.

### Survey permissions

You can assign the following permissions to the people you're collaborating with:

- **Owner** - Indicates this person has full access to the survey; they can view, edit, and share the survey with others.
- **Edit** - Indicates this person can view and edit everything in the survey.
- **Full view** - Indicates this person can view everything in the survey, but cannot make edits.

::Image[]{src="https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/FPsQSBnKTY8MREg1ZI8Ai_share.png" size="50" width="1008" height="788" position="flex-start" caption="Share a survey" showCaption="true"}

### Share a survey

To share a survey with another person:

1. Access your survey from the **Engagement Survey** page.
2. In the top right of your survey, select the **+** icon next to your profile image to display the **Share&#x20;**&#x64;ialog.
3. In the **Add Person** field, search for the person you want to collaborate with in the survey.
4. Use the dropdown to assign the level of permission this person has for the survey. You can select from the following:
   - **Owner**
   - **Edit**
   - **Full view**
5. Select **Done**.&#x20;

Your collaborators are notified that you have added them to the survey. You can remove any collaborators from the survey by selecting the trash can icon next to their names in the **Share** dialog.

:::hint{type="info"}
Collaborators will only be able to see form responses that they have access to based on their role and permissions.&#x20;
:::






[title] Create a review
[path] ChartHop for Administrators/Performance reviews/

Users with the Owner, Technical owner, Sensitive data viewer, and Compensation viewer roles can create reviews. However, the sensitivity of the data displayed in the review itself for participants and reviewers is controlled by the form and fields used in the review. Only users with the Owner and Technical owner roles can create forms. [Learn more.](https://docs.charthop.com/building-a-form)

To create a new review:

1. From the left sidebar, select **Performance.**
2. Select **Create review**. The **Create Review** dialog displays.
3. In the **Create Review** dialog, enter information for the following fields:
   - **Name** - Enter the name of the review cycle.
   - **Start date** - Select the start date for the review cycle.
   - **End date** - Select the end date for the review cycle.
   - **People to include** - Filter the people included in the review (for example, dept: sales). You can add a filter when this review applies only to a specific category of employees.
   - **Description** - Enter a description for the review cycle.
4. Select **Save** to save your changes. Your review displays in the Reviews list as **in progress**.


[title] Viewing review data in ChartHop
[path] ChartHop for Administrators/Performance reviews/

You can view and analyze performance review data for your employees by configuring it to display on the **Data Sheet**. You can also view performance review data directly in the Employee profile.

## View review data on the Data Sheet

After data has been collected for a review, you can view the collected data by adding the fields used in a performance review form as columns on the **Data Sheet**. This gives you the ability to view performance review ratings for a specific group of employees, including your direct reports.&#x20;

You can add as many performance review fields as you want. For example, you can add both self-review ratings and downward review ratings to see how they compare for a group.

![Review ratings on the Data Sheet](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/8K_g60nBOAUWomviVRAcJ_reviewdataratings.png "   ")

To display performance review data in the **Data Sheet&#x20;**&#x66;or your employees:

1. Navigate to the **Data Sheet**. 
2. (Optional) Use the **+** icon to create a new view (for example, Review Rating).
3. Filter the employees that display on the **Data Sheet&#x20;**&#x75;sing Carrot:
   - Enter `is:person under:``"me":` to display all the employees that report to you.
   - Enter `is:person under:"Person's Name"` to display all the employees that report to a specific person.
   - Enter `is:person department:engineering` to display all the employees in a specific department (for example, Engineering).&#x20;
   - You can also use the Filter dialog for additional filtering options. [Learn more.](https://docs.charthop.com/filtering)
4. Select **Select columns**.
5. In the **Select columns** dialog, select the fields you want to display (for example, Self Review Rating and Downward Review Rating).
6. Select **Apply**. The fields and any collected performance review data display as new columns on the **Data Sheet**.

## View review data on an Employee's profile

Your ChartHop admin can set performance review data to display on a custom tab in an Employee profile by linking performance review fields to that tab. This allows you to view performance review data for an employee in one place. [Learn more.](https://docs.charthop.com/creating-custom-profile-tabs)

![Performance Review tab](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/iwII2v3y2QFGJJC12EGdK_reviewsemployeeprofiletab.png "   ")

![](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/0tfXY2X_fGX5BC9qkTvWS-20251006-171139.png)

## View a summary of survey responses

To view a summary of the survey responses:&#x20;

1. From the left sidebar, select **Performance.**
2. Select the Review that you want to view.&#x20;
3. Select the **Responses** tab. The **Summary&#x20;**&#x73;ub-tab will be selected automatically.&#x20;
4. If your review has more than one form, select the form in the dropdown.&#x20;

All available responses will be displayed in a default chart type.&#x20;

If you would like to do additional analysis or share the responses with others, you can copy the response to a  [Dashboard.](docId\:kA8-kvT0AUi_ekF7MECLD)

![](https://app.archbee.com/api/optimize/CXAjUAezd9VEEVQBIYmdw/62aWonwLkVEhlPl2o7I9b-20251006-172747.png "Create as Dashboard")

## Create a Dashboard of responses

To create a [Dashboard](docId\:kA8-kvT0AUi_ekF7MECLD) of the review responses:

1. On the **Responses&#x20;**&#x74;ab of the **Review.**
2. Click the **Create as Dashboard** button.&#x20;
3. A dashboard will automatically be created using the default charts for each question. Within the dashboard, you can then modify the chart type, add headers & text blocks, reorganize and then share. If you apply a **Group By** — that will&#x20;

![](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/8_DZJqvP7Zj_FdJOhfqpe-20251006-172729.png)

### Copy chart to dashboard

If you just want to bring over an individual chart, you can also copy a chart to a dashboard.&#x20;

1. On the **Responses&#x20;**&#x74;ab of the **Survey.**
2. Click the ⠇menu button. Then select **Copy to Dashboard**. &#x20;
3. In the Copy to Dashboard dialog, select the **Dashboard** that you would like to copy the chart to.&#x20;
4. Select **Copy chart**. The chart will then by added to the end of the Dashboard



![](https://app.archbee.com/api/optimize/CXAjUAezd9VEEVQBIYmdw/9qQSWVrtTrSsAsfTI474J-20251006-171437.png "Sheet view of Responses")

## View individual form responses

To view individual review responses:&#x20;

1. From the left sidebar, select **Performance.**
2. Select the Review that you want to view.&#x20;
3. Select the **Responses** tab.&#x20;
4. Select the **Data Sheet or Individual&#x20;**&#x73;ub-tab.&#x20;

![](https://app.archbee.com/api/optimize/CXAjUAezd9VEEVQBIYmdw/kadWNDJLDfQxwB8wUQJxd-20251006-171515.png "Individual Responses")



:::hint{type="info"}
﻿﻿[Roles](https://docs.charthop.com/user-roles-and-permissions): Owner | Technical owner | People Ops Admin
:::


[title] Managing tasks
[path] ChartHop for Administrators/People Ops Tools/

Tasks in ChartHop help you track whether an employee has taken a specific action or not such as completing a form or submitting an approval. 

Tasks are generated by [Reviews](https://docs.charthop.com/create-a-review), [Actions](https://docs.charthop.com/birthday-announcements), [Compensation Reviews ](https://docs.charthop.com/compensation-reviews)or [Scenario Approvals](https://docs.charthop.com/reviewing-an-approval-request-for-a-scenario). 

Users with the Owner, Technical owner, or `task:read` and `task:delete` permissions can use the Tasks page to manage all of the Tasks in your account.

To access the **Tasks** page:&#x20;

1. From the left sidebar, select **People Ops Tools.**
2. From the sub-menu, select **Tasks.**

On this page, you can:

- **View & Filter Tasks** 
- **Delete Tasks** 
- **Send Reminders for Incomplete Tasks**

![ChartHop Tasks Page](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/M7t3nQtHeLUpNl-8mW_80_screenshot-2023-09-05-at-101942-am.png "Tasks Page")

## View and Filter Tasks

### View tasks

- Clicking the name of the task will redirect you to the associated form or scenario
- Clicking the column headers will sort the list of tasks

### Filter tasks

Select one of the filters above the table to refine your list

![Tasks filters](https://lh4.googleusercontent.com/Qv0iONEBO3q0UhXCoFvsjfO53PfuA1WqwVKSaRPp8GgmI-WDyj97tE9yaa0SlGktDrFa3wcZUGZ4DbSsPIfSC9eL1_KiKlODeQTxImRue7gOXlLX7_TpMXQWboDJGvqPtr53Ot7VErGv_4ZtJYApI0A "Tasks filters")

**By Status**

| **Status** | **Description**                                                                                                                                                        |
| ---------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| All        | All of the below statuses                                                                                                                                              |
| Pending    | The action requested by the task has not yet been completed                                                                                                            |
| Done       | The action requested by the task has been completed                                                                                                                    |
| Skipped    | The task has been skipped and therefore will not be completed.                                                                                                         |
| Expired    | The task was not completed, and no longer can be completed because of time limits or action taken by an admin<br />*For example, the compensation review has closed.*  |

**By who the task is "Assigned to"**

This is the person who is responsible for completing the task.&#x20;

*For example, if David needs to fill out a peer review for Sherry then David would be listed here.&#xA0;*



**Filter by who the task is "Assigned for"**

This is the person who the task is about.&#x20;

*For example, if David needs to fill out a peer review for Sherry then Sherry would be listed here.&#xA0;*

This will be blank if the task is not for a specific person.&#x20;


::Image[]{src="https://archbee-image-uploads.s3.amazonaws.com/zxjhb7-DqnuzAP-lru1l3-ZdF1_7_dI52SVAPRzYFdW-20250819-012031.png" size="86" width="1314" height="876" position="center" showCaption="false"}

## Reassign Tasks 

If you have a task that needs to be completed by for example, a new manager, you can reassign it to any users.&#x20;

**Only certainly tasks can be reassigned:&#x20;**

The tasks must be `Pending` and one of the following types:

- Submit Form&#x20;
- Time off approval
- [Signatures](docId:-APezeKDHAACHAZcCuAem) - *The signature request will be updated with the new person*
- [Tasks created by actions](docId:6k2uHP22MlgnhaOvzQ0yX)

**Notably not supported are:**

- Form response approvals
- Form response resubmissions (after changes are requested)
- Scenario approvals
- Comp review approvals.



## Delete Tasks 

1. Select the checkmarks on the left side of the page to select tasks that you want to delete. 
2. Click the **Delete** action at the option at the top of the page
3. Confirm that you want to delete the tasks.



## Send reminders for incomplete tasks

1. Select the checkmarks on the left side of the page to select taks that you want to send reminders for.
   *Note: you cannot send reminders for tasks that are Complete.*
2. Click the **Send reminder&#x20;**&#x61;ction at the option at the top of the page
3. Add in a custom message to include with the reminder.
4. Click “Send Reminder” to send.

![Delete or send reminders for tasks](https://lh4.googleusercontent.com/GyDACwGyETWDLU_ZK3kgvSdZwXNwqxD7mqVT-ZoyMoEsbg1eJw90XlkgQShlAX-6UOy7z4-kHmPyqFPRJ6lHOR4-y-VBfzoD5FUnE6LE503qISZqK4W_TUUSoUgFwryw3FUPdOrb7kkMzWBhHA8_lvo "Bulk actions for tasks")


[title] Time off policy settings
[path] ChartHop for Administrators/People Ops Tools/Time off for admins/

This page contains all of the time off policy settings:&#x20;

### Balances

You can create time off policies with unlimited or upfront balances in ChartHop. 

### Time off types

ChartHop includes a set list of time off types

```markdown
PTO
Sick
Bereavement
Vacation
Jury Duty
Parental Leave
Medical Leave
In-Lieu
Offsite
Unpaid
Short-term disability
Long-term disability
Military Leave
Religious Leave
Voting
Volunteer
Unknown
```

- PTO
- Sick
- Bereavement
- Vacation
- Jury Duty
- Parental Leave
- Medical Leave
- In-Lieu
- Offsite
- Unpaid
- Short-term disability
- Long-term disability
- Military Leave
- Religious Leave
- Voting
- Volunteer
- Unknown

## Confuguring Policies

To create a policy, name the policy on the top of the page. Employees will see the name of the policy and the type when they request time off. 

::Image[]{src="https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/0wAgtKLgOJ0z_-rAsCW7S_image.png" size="64" width="974" height="214" position="center" showCaption="false"}

What employees see:



::Image[]{src="https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/VyQ7TbZVPVbiWG_fkmxNP_image.png" size="28" width="352" height="328" position="center" showCaption="false"}

### Proration

Policies with an upfront balance will be prorated for employees if they start mid-year. The calculation is based on the number of days the employee will work in the remaining calendar year. 

These balances can be rounded based on any of the following rounding settings

- **Do Not Round&#x20;**&#x20;`(8.415 → 8.42)` *\[Rounds to the nearest 100th.]*
- **Round Up to the Next Full Day** `(8.415 → 9)`
- **Round Up from 0.5, Round Down Below 0.5&#x20;**`(8.415 → 8)`
- **Round Up to the Nearest Half Day** `(8.415 → 8.5`*\[if half days are enabled]*

**Example:** 

:::BlockQuote
An employee gets an upfront balance of 20 days a year for a policy that starts on January 1. They start on June 17th. This means the employee will work 197 days of the year, or 53.97% of the year. 
:::

:::BlockQuote
20 days (upfront balance) \* .5397 (percentage of year worked) = 10.794
Rounding is set to "**Round Up to the Next Full Day"&#x20;**&#x73;o 10.794 rounds to 11. 
:::

### Require note

Check this box to require that people add a written note when submitting a time off request.&#x20;

Without it they are still able to add a note, but it will be an optional field.&#x20;

::Image[]{src="https://api.archbee.com/api/optimize/CXAjUAezd9VEEVQBIYmdw/FYwB8JR97PTipkwY2vDIa-20260106-152828.png" size="54" width="1142" height="848" position="center" showCaption="false"}

### Allow partial day requests

Check this box to allow people to request in increments smaller than one full day. You can then select a **Shortest period that can be requested.**  Here is how each of these settings translate to options for requestors:&#x20;

| **Shortest period that can be requested** | **Requestor options**                                                            |
| ----------------------------------------- | -------------------------------------------------------------------------------- |
| Half Day                                  | - Full day
- Half day                                                            |
| 2 Hours                                   | * Full day
* 6 hours
* Half day
* 2 hours                                        |
|  1 Hour                                   | - Full day
- 7 hours
- 6 hours
- 5 hours
- Half day
- 3 hours
- 2 hours
- 1 hour |

All values currently assume and 8 hour work day and cannot set specific times to be out. This information can be added in the note.&#x20;

Requesters are only able to request partial days on the first and last day of a request. If they need more consecutive days of partial days they can create multiple requests.&#x20;

::Image[]{src="https://app.archbee.com/api/optimize/CXAjUAezd9VEEVQBIYmdw/DO66Ulpkfhd78_BK7XZzl-20250924-005858.png" size="80" width="585" height="329" position="center" caption="Employee's view of partial day requests" showCaption="true"}

### Limit number of days in a single request

Use this setting to set a maximum number of days on a given requests.  You can set this limit at `0.5` day increments.&#x20;

For example, if you have a sick day policy where you can't request more than 2 sick days at one time, you can use this setting to set that limit.&#x20;

If an employee tries to request more than the limit, they will see this feedback on their request:&#x20;

::Image[]{src="https://archbee-image-uploads.s3.amazonaws.com/zxjhb7-DqnuzAP-lru1l3-zuH1ULx8-p2SG2W9rMsbk-20250305-152204.png" size="80" width="1182" height="164" position="center" caption="Over the limit message" showCaption="true"}



### Apply a policy to a subset of employees 

CQL filters are dynamic, so as an employee's information changes, they will move into a different policy. 

Examples: 

- US Sick Time Policy applies to all employees whose home country is the United States: `address.country:"us"`Those employees will see the sick time policy on their profile tab once active.
- Employee moves to the UK- once the change is processed and their home address country is now “GB” the following happens: 
  - Admin adjust balance to reflect new policy
  - Previous time off requests will continue to be tracked against old policy

Employees without a policy that applies to them, will be displayed a default fallback message. For example, if you have people who will not be using time off in ChartHop, you can provide a link to the site where they should complete their time off requests.&#x20;

To set the Default message for employees without a time off policy applying to them:&#x20;

1. Go to **Admin > Modules&#x20;**
2. Scroll to **HRIS > Time off&#x20;**
3. Add in the **default message** you would like to display

### Adding Holidays

You can specify holidays that are exempt from a policy. These days will be skipped over when detracting days taken from a balance. 

*We recommend you set up one holiday calendar per time off policy.&#x20;*

Weekend days are automatically exempt from balances.&#x20;

::Image[]{src="https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/EbGyg6UWspOLeeU5QdM7Z_image.png" size="60" width="1066" height="730" position="center" showCaption="false"}

### Approvals

The approver for a policy can be the requester’s manager, grand manager, or a set person in the organization.

If a person is reporting to an open job, their manager's manager will receive the request.

::Image[]{src="https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/dyJ7ueR2BDIFXgA4DL8Rk_image.png" size="76" width="1118" height="520" position="center" showCaption="false"}

### Making a policy active

A policy defaults to inactive. When you are ready for employees to be able to request against their balance, you can make the policy active. 

If a policy is active and is made inactive, the history of the requests made and taken will stay in the employees profile tab. Their balance will no longer display on their profile tab, and they will no longer be able to request against that policy.

### Adjusting Balances

Balances on the employees profile tab reflect days that have been requested and approved. Days that are in a pending request are not deducted from the balance. 

If you transition to ChartHop for time off mid year, you can manually adjust employee balances to ensure they are requesting against the current value. 

To adjust a balance, you can change the value in the “modified” column next to the employee's name in the “Balances” tab. Once a balance is edited, the cell will turn blue to indicate the value has been changed. 

When a balance is changed, **any request that has been taken before the adjustment date** for the calendar year are no longer deducted from the balance. Only future requests and time off scheduled after the balance adjustment date will be deducted.

::Image[]{src="https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/G4Pbdqf8gYv77GFVuX-6x_image.png" size="68" width="1106" height="642" position="center" showCaption="false"}


[title] Review and send the form
[path] ChartHop for Administrators/Engagement surveys/Adding forms to a survey/

You have the ability to review your form, settings, participants, and message before you send it out. Verify that the correct form is being sent out and that the number of employees included in the Form Summary matches the group of employees you want to include. 

Click **Send** to send out the survey form to the included group of participants and launch your survey.&#x20;

:::hint{type="info"}
When you’re integrated with Slack, ChartHop will notify the employees via Slack otherwise they will be notified via email. [Learn more.](https://docs.charthop.com/slack)
:::

After you send out a form, it displays in the **Forms** tab of your survey. You can select **Add form&#x20;**&#x74;o repeat the process and add additional forms to the survey.

![](https://archbee-image-uploads.s3.amazonaws.com/zxjhb7-DqnuzAP-lru1l3-QMGeWa1djAYDi5BpKbwyH-20250819-102924.png)

:::hint{type="info"}
[Modules](https://www.charthop.com/pricing/)**:&#x20;**<font color="#000000">HRIS | </font>**Engagement** | Goals | Performance | <font color="#000000">Compensation Reviews | </font>Headcount Planning
:::


[title] Monitoring participation in a review
[path] ChartHop for Administrators/Performance reviews/

## Review Participation

To monitor the overall participation in a review, go to the **Forms** tab within the review. Each form will display the status of the indiviual forms and the overall completion percentage.&#x20;

![](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/P-aj3C6WiDq0EU4INVl1K_image.png)

### Participation statuses

Depending on the [configuration of your form](docId:0i0EwWz9bTFhzdvsMbPYZ), your will see different statuses to reflect that various states of form completion or [Form responses workflows](docId:_QUlJLsN6BsALsltpaOoX). Here are the statuses:

**Awaiting the next action:&#x20;**

- `Pending` - The form is awaiting initial submission.
- `Awaiting Approval` - The form has been submitted but not been reviewed or approved.
- `Awaiting Changes` - The form has been reviewed by the approver, and the approver has requested changes.
- `Awaiting Release` - The for has been submitted and if applicable approved but not yet released.

**Completed statuses:** These contribute to the completion percentage in the center of the graph.&#x20;

- `Done` - The form has been submitted and that is the final step.&#x20;
- `Approved` - The form has been approved and that is the final step.&#x20;
- `Released` - The form has been released and that is the final step.&#x20;
- `Skipped` - The form has been skipped and will not be completed.

**End statuses:**

- `Expired` - The form has closed and these forms will not be completed.&#x20;
- `Rejected` - The form response was rejected and will then be again awaiting approval.&#x20;



## Tasks Tab

On the **Tasks** tab, you can view a list of all the tasks that have been created as part of the Review.&#x20;

All tasks associated with the review display on this tab, include form submission, approval and resubmission tasks.&#x20;

From the Tasks tab, you can see all reviewees, reviewers, the associated form, the task type, task status, sent date/time, due date/time and completion date/time.

![](https://archbee-image-uploads.s3.amazonaws.com/zxjhb7-DqnuzAP-lru1l3-rpqHP4nd1l3zDTC91z8Bl-20250819-100022.png)

You can filter the list by form, task type, status, by reviewer or by reviewee.

You can find an overview of all of the statuses within [Managing tasks](docId\:AUgK05IqTO-acrgCmfF60).

Select the checkbox next to a row to perform any of the following bulk actions:&#x20;

![](https://archbee-image-uploads.s3.amazonaws.com/zxjhb7-DqnuzAP-lru1l3-bxhW4NVY1Gd_Xv6-JqwTB-20250819-100532.png)

### Reassigning a task

You can reassign a `Pending` Submit Form task to another person, such as a new manager, if you need to.&#x20;

To reassign a task:

1. In the **Tasks** tab, navigate to the task you want to reassign. Select the checkbox next to the task or tasks.&#x20;
2. At the top of the table, click **Reassign**. &#x20;
3. In the Reassign Tasks dialog, select the person to reassign the tasks to.&#x20;
4. \[Optional] Add a message that will be included in the email or chat message to them when they receive notification of the task assignment
5. Click reassign tasks. The person will them be notified of the task assignment.&#x20;

### Send a task reminder

You can send task reminders directly from the **Tasks** tab for Pending Tasks to encourage a reviewer to submit their form. This is helpful for when you want to send a reminder to a specific reviewer.

To send a task reminder:

1. In the **Tasks** tab, navigate to the task you want to send a reminder for. Select the checkbox next to the task or tasks.&#x20;
2. At the top of the table, click **Send Reminder**. &#x20;
3. In the Send Reminder dialog, optionally add a message that will be included in the email or chat message to them when they receive notification of the task assignment
4. Click send reminder. The person will them be re-notified of the task.&#x20;

### Delete a task

Deleting a task permanently removes the task from the review.&#x20;

To delete a task:

1. In the **Tasks** tab, navigate to the task you want to delete. Select the checkbox next to the task or tasks.&#x20;
2. At the top of the table, click **Delete&#x20;**. &#x20;
3. In the Delete confirmation dialog, type DELETE.&#x20;
4. Click confirm. The tasks will then be deleted. &#x20;

### Export tasks

From the **Tasks** tab, you have the ability to export employee data as a spreadsheet.

To export tasks:

1. In the **Tasks** tab, click the download icon button (**Export CSV)**. The **Export CSV** dialog displays.
2. In the **Export type** dropdown, select an export type. You can select from the following:
   - **Pending Tasks Only** - Exports a list of pending tasks.
   - **All Tasks** - Exports a list of all tasks associated with the current review cycle.
3. (Optional) Select whether to include ChartHop IDs or former employees (if applicable) in the spreadsheet.
4. Select **Export**.
5. Once the export is complete, select **Download** to save the generated .csv file.



:::hint{type="info"}
[Modules](https://www.charthop.com/pricing/)**:&#x20;**<font color="#000000">HRIS | </font>Engagement | Goals | **Performance** | <font color="#000000">Compensation Reviews | </font>Headcount Planning
:::


[title] Goals Across ChartHop
[path] ChartHop for Administrators/The Goals page/

Goals aren't siloed in the Goals module. Because ChartHop is a unified platform, goal data surfaces automatically wherever people and groups are referenced. No extra configuration is needed — assign an owner, supporter, or group to a goal and it appears in the right places immediately.



![Profile page with Goals](https://api.archbee.com/api/optimize/CXAjUAezd9VEEVQBIYmdw/XeqgIYuBKymT-DYhH-Adv_image.png "Profile page with Goals")

## Profile pages

Every person's profile page shows a Goals card on the About tab. The card is divided into three sections: **Owner** (goals this person owns), **Supporter** (goals they support), and **Group Goals** (goals associated with their groups).

Each goal displays as a chip with a purple progress bar on the left and a confidence dot on the right. At a glance, anyone viewing a profile can see both progress and confidence for every goal associated with that person — useful context before 1:1s and performance conversations.

Goals also has its own dedicated tab in the profile left nav for a full view of that person's goals.

Visibility respects sensitivity settings. What a viewer sees depends on the goal's sensitivity level and their access permissions.



![Group page with Goals](https://api.archbee.com/api/optimize/CXAjUAezd9VEEVQBIYmdw/V3o1RkMpdT9DFR2IYiqM7_image.png "Group page with Goals")

## Group pages

Every group page shows a Goals card listing all goals tagged to that group. Each goal displays with a purple progress bar and percentage. Progress bars are full-width within the card, making it easy to compare progress across goals at a glance.

Department leads and team managers get instant visibility into all goals touching their group without navigating to the Goals module.



![](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/rCf34aC7vMJn-E5mZQZV2_image.png)

## Data Sheet

Goal data is available as a native field type in the Data Sheet, queryable with Carrot expressions just like any other people data.

Useful filter expressions:

- ownerGoals:\* — people who own at least one goal
- supporterGoals:\* — people who support at least one goal
- groupGoals:\* — people associated with at least one group goal

In Data Sheet views, each goal appears as a chip with a purple progress ring around the owner avatar and a confidence dot on the right. This lets People Ops teams build custom views that cross-reference goal progress with department, level, manager, tenure, or any other field in the platform.





![Performance form with Goals](https://api.archbee.com/api/optimize/CXAjUAezd9VEEVQBIYmdw/gIeJwzAqW35BHXr2n7K1K_image.png "Performance form with Goals")

## Performance reviews, forms, and custom pages

Goals data is available anywhere in ChartHop that accepts HTML and Carrot markup — including performance review forms, resource pages, and custom profile tabs.

The findOwnerGoals() Carrot function pulls a person's owned goals for a specified date range:

:::BlockQuote
\{% for goal in findOwnerGoals(date('-6m'), 'today', person) %}  Goal: \{\{goal}} - \{\{goal.percent / 100}} accomplished
&#x20; \<i>\{\{goal.progress.comment}}\</i>
\{% endfor %}
:::

This renders each goal with its name, progress percentage, and most recent progress update comment. Wrapping it in a table with ChartHop's standard styling produces a Goals reference section that appears inline within a review form — giving managers full goal context without leaving the review.

Available goal fields include goal (name), goal.percent (progress), and goal.progress.comment (latest update narrative). See the Carrot reference for the full list of available goal fields and functions.

That's the full updated documentation across all five pages. A few things to flag before publishing:

1. **"Admin" rename** — the Share modal currently shows "Owner" for the admin-level sharing role. The docs above use "Admin" with a note explaining the rename is coming. Update that note once the rename ships.
2. **Carrot goal fields** — I documented the fields visible in the screenshots (goal, goal.percent, goal.progress.comment). Worth having engineering confirm the full list before the Carrot reference is updated.
3. **"Automatically calculated" integration setup** — I noted it requires a Carrot expression referencing a Data Model table but kept it general. If there's a standard setup guide for connecting Salesforce/Zendesk to goalsMetrics, that deserves its own sub-page or a link from the Target Metric section.

:::hint{type="info"}
[Modules](https://www.charthop.com/pricing/)**:&#x20;**<font color="#000000">HRIS | </font>Engagement | **Goals** | Performance | <font color="#000000">Compensation Reviews | </font>Headcount Planning
:::

##




[title] Approving form responses
[path] ChartHop for Administrators/People Ops Tools/Forms/Form responses workflows/

## Approving a form response

As an approver, you will receive a notification and a task that you need to approve a form response. Clicking the task, will take you the profile tab where you can review and then **Approve** or **Request Changes** using the buttons at the bottom of the form.&#x20;

::Image[]{src="https://archbee-image-uploads.s3.amazonaws.com/zxjhb7-DqnuzAP-lru1l3-LTIkouzv7Z4hTDu5lbZ1f-20250113-164412.png" size="62" width="1154" height="1164" position="center" caption="Approval Pending, Unreleased" showCaption="true"}

## Requesting changes

When requesting changes, the approver must leave a **comment** with details of what should be changed. Once they have added a comment, they can click **request changes.**&#x20;

::Image[]{src="https://archbee-image-uploads.s3.amazonaws.com/zxjhb7-DqnuzAP-lru1l3-cptXIoVWNAGI3XoVJRwa6-20250113-164715.png" size="60" width="1128" height="1396" position="center" caption="Requesting Changes" showCaption="true"}

::Image[]{src="https://archbee-image-uploads.s3.amazonaws.com/zxjhb7-DqnuzAP-lru1l3-LiPZTeiy3GkSiYZFdsVMX-20250113-165854.png" size="62" width="1542" height="940" position="center" caption="Notification for requested changes" showCaption="true"}

After the changes are requested, the submitter will receive a notification and a task that they need to make changes to the submitted form response. Clicking on that notification will take them to the form response, where they can click **make changes&#x20;**&#x61;nd edit the contents of the form and click **Resumbit** to restart the approval process. This may continue until the form response is approved.&#x20;

::Image[]{src="https://archbee-image-uploads.s3.amazonaws.com/zxjhb7-DqnuzAP-lru1l3-3nm8cBEhdMdbM5_2Xr2Ui-20250113-165156.png" size="60" width="1128" height="1336" position="center" caption="Making the requesting Changes" showCaption="true"}

## Bulk Approving Form Responses

::Image[]{src="https://archbee-image-uploads.s3.amazonaws.com/zxjhb7-DqnuzAP-lru1l3-hNf6rLs8U_OjjpY-LuwDX-20241025-185944.png" size="62" width="1012" height="666" position="center" showCaption="false"}

**Approving all form responses&#x20;**&#x77;ill move them from Awaiting Approval --> Approved/Awaiting Release.&#x20;

**To bulk approve forms:**

1. Go to the form that you want to approve within the Review
2. Click the overflow menu and select **Approve all form responses**
3. A confirmation modal will appear stating that all responses will be approved. Click **Confirm** to approve the responses.&#x20;
4. A notification will be sent to the person who submitted the form notifying them of the approval. An approval ✔️ with the name of the person who approved the forms and the time that they approved them will appear on the form response card.&#x20;

::Image[]{src="https://archbee-image-uploads.s3.amazonaws.com/zxjhb7-DqnuzAP-lru1l3-p-zhzjnlXaB1FCc5BM6Vs-20250212-174227.png" size="92" width="2876" height="1614" position="center" caption="Approve all form responses confirmation" alt="Approve all form responses confirmation" showCaption="true"}

##


[title] Monitoring participation in a survey
[path] ChartHop for Administrators/Engagement surveys/

## Survey Participation

To monitor the overall participation in a survey, go to the **Forms** tab within the survey. Each form will display the status of the indiviual forms and the overall completion percentage.&#x20;

![](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/BU5D734vQIcGoKVxH4Ogu_screenshot-2024-07-22-at-92621-am.png)

### Participation statuses

Depending on the [configuration of your form](docId:0i0EwWz9bTFhzdvsMbPYZ), your will see different statuses to reflect that various states of form completion or [Form responses workflows](docId:_QUlJLsN6BsALsltpaOoX). Here are the statuses:

**Awaiting the next action:&#x20;**

- `Pending` - The form is awaiting initial submission.
- `Awaiting Approval` - The form has been submitted but not approved.
- `Awaiting Release` - The for has been submitted and if applicable approved but not yet released.

**Completed statuses:** These contribute to the completion percentage in the center of the graph.&#x20;

- `Done` - The form has been submitted and that is the final step.&#x20;
- `Approved` - The form has been approved and that is the final step.&#x20;
- `Released` - The form has been released and that is the final step.&#x20;
- `Skipped` - The form has been skipped and will not be completed.

**End statuses:**

- `Expired` - The form has closed and these forms will not be completed.&#x20;
- `Rejected` - The form response was rejected and will then be again awaiting approval.&#x20;

## Tasks Tab

On the **Tasks** tab, you can view a list of all the tasks that have been created as part of the Survey.&#x20;

From the Tasks tab, you can see all Submitters, the associated form, the task type, task status, sent date/time, due date/time and completion date/time.

![](https://archbee-image-uploads.s3.amazonaws.com/zxjhb7-DqnuzAP-lru1l3-1ST43LljkPpQXxc1qJc9q-20250819-095830.png)

You can filter the list by form, task type, status or by submitter.

Select the checkbox next to a row to perform any of the following bulk actions:&#x20;

![](https://archbee-image-uploads.s3.amazonaws.com/zxjhb7-DqnuzAP-lru1l3-qk8hmtX1nSRB0aHSIMrfc-20250819-100434.png)

### Reassigning a task

You can reassign a `Pending` Submit Form task to another person, such as a new manager, if you need to.&#x20;

To reassign a task:

1. In the **Tasks** tab, navigate to the task you want to send a reminder for. Select the checkbox next to the task or tasks.&#x20;
2. At the top of the table, click **Reassign**. &#x20;
3. In the Reassign Tasks dialog, select the person to reassign the tasks to.&#x20;
4. \[Optional] Add a message that will be included in the email or chat message to them when they receive notification of the task assignment
5. Click reassign tasks. The person will them be notified of the task assignment.&#x20;

### Send a task reminder

You can send task reminders directly from the **Tasks** tab for Pending Tasks to encourage a submitter to submit their survey. You can customize the reminder message for each subgroup to try to drive action.&#x20;

To send a task reminder:

1. In the **Tasks** tab, navigate to the task you want to reassign. Select the checkbox next to the task or tasks.&#x20;
2. At the top of the table, click **Send Reminder**. &#x20;
3. In the Send Reminder dialog, optionally add a message that will be included in the email or chat message to them when they receive notification of the task assignment
4. Click send reminder. The person will them be re-notified of the task.&#x20;

### Delete a task

Deleting a task permanently removes the task from the survey.&#x20;

To delete a task:

1. In the **Tasks** tab, navigate to the task you want to delete. Select the checkbox next to the task or tasks.&#x20;
2. At the top of the table, click **Delete&#x20;**. &#x20;
3. In the Delete confirmation dialog, type DELETE.&#x20;
4. Click **confirm**. The tasks will then be deleted. &#x20;



### Export tasks

From the **Tasks** tab, you have the ability to export employee data as a spreadsheet.

To export tasks:

1. In the **Tasks** tab, select **Export CSV**. The **Export CSV** dialog displays.
2. In the **Export type** dropdown, select an export type. You can select from the following:
   - **Pending Tasks Only** - Exports a list of pending tasks.
   - **All Tasks** - Exports a list of all tasks associated with the current survey cycle.
3. (Optional) Select whether to include ChartHop IDs or former employees (if applicable) in the spreadsheet.
4. Select **Export**.
5. Once the export is complete, select **Download** to save the generated .csv file.



:::hint{type="info"}
[Modules](https://www.charthop.com/pricing/)**:&#x20;**<font color="#000000">HRIS | </font>**Engagement** | Goals | Performance | <font color="#000000">Compensation Reviews | </font>Headcount Planning
:::


[title] Managing a compensation review
[path] ChartHop for Administrators/Compensation reviews/

Once you’ve launched a compensation review, you can use the Cycle overview to see the overall progress of the review cycle. 

The timeline lets you know the current step of the compensation review process and the Cycle progress shows you where each of your reviewers and approvers is in the process. You can also send reminders to make sure reviewers and approvers keep the compensation review as a priority.

![Cycle overview](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/7mSwX5P6sRKHHS3HLkuXT_compreviewscycleoverview.png "Cycle overview")

Compensation review proposals can display in the Cycle overview with the following statuses:

- **In progress** - Indicates the reviewer or approver is currently reviewing.
- **Pending lower tier** - Indicates the approver is waiting on submission from a reviewer that is below them in the compensation review reporting structure.
- **Submitted** - Indicates the review has been submitted.
- **Skipped** - Indicates the review has been skipped (either manually or automatically).

### Pause and resume a compensation review

You can temporarily pause an active compensation review to make additional adjustments or edits to the following:

- Reassign a reviewer
- Add an eligible employee to the compensation review
- Remove an eligible employee from the compensation review
- Change budgets and guidelines settings

When you pause a compensation review, all reviewers and approvers are blocked from accessing the compensation review for a temporary period. They can access the compensation review again only once you have resumed the compensation review.

To pause and resume an active compensation review:

1. Open an existing compensation review with a status of **Active**.
2. Select **Pause & edit** at the top right of the screen. The **Pause comp review** dialog displays.
3. Select **Pause**. This pauses the compensation review and makes the settings fields available for editing.
4. In the **Cycle settings** tab of the compensation review, make edits to the settings you want to change.
5. Once you’re finished editing, select **Resume review**. The **Resume comp review** dialog displays.
6. Select **Resume**. The compensation review is active and all reviewers and approvers are able to access the compensation review once again.

### Manually skip a reviewer

In cases where a reviewer or approver is not available and has not completed their review, you can manually skip and advance proposals to the next reviewer in the reporting structure using the **Skip reviewer** option in the Cycle overview list.

When you select **Skip reviewer&#x20;**&#x66;or any reviews that are in progress, the original reviewer is notified that their review was skipped. The proposal becomes read-only for the skipped reviewer; however, any changes that were made prior to the skip are maintained and forwarded to the next reviewer.&#x20;

:::hint{type="info"}
Only compensation review owners and collaborators have the ability to manually skip reviewers. Collaborators must have Edit & Submit permission and can only skip the reviewers and approvers they're assigned to collaborate with.&#x20;
:::



### Send a reminder to a reviewer

You can send friendly reminders to reviewers and approvers to encourage them to complete their compensation review proposals.

To send a reminder:

1. Access the compensation review you’re participating in.
2. Navigate to the **Cycle overview** tab. 
3. In the **Cycle progress** section, identify the reviewer or approver you want to remind.
4. Select **Send reminder**. ChartHop sends an email reminder to the reviewer or approver.

### View notifications

ChartHop notifies you, the compensation review owner, when specific events occur in your ChartHop organization that affect your active compensation review.&#x20;

For example, when a departure occurs that impacts the compensation review, ChartHop automatically handles this departure by:

- notifying you of the departure within the Notifications dialog from the left sidebar
- automatically removing the departed employee
- automatically reassigning any reviews and approvals to the departed employee's manager

![Compensation review notifications](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/Ww_vWtkpSPJL0M8u3qSZF_compreviewviewnotification.png "Compensation review notifications")

### View reports for a compensation review

After you launch your compensation review, you can use the data set from the compensation review within ChartHop reports.

When you access a report and select the **Scenario** dropdown, any launched compensation reviews you have access to display within the dropdown options.&#x20;

:::hint{type="info"}
You must be an **Owner** of a compensation review to be able to view and select it from the **Scenario** dropdown.
:::

![Comp Reviews in Reports](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/ke6yU9GNV32G4kHFhOZM5_compreviewreport.png "Comp Reviews in Reports")

### Export comments in a compensation review

You can export all comments that are entered in a compensation review. This helps you compile all the comments made throughout the entire cycle in a spreadsheet for additional portability and transparency.

To export a spreadsheet with all comments from your compensation review:

1. Open an existing compensation review. 
   - The compensation review can be **Active**, **Complete**, or **Closed**.
2. From the **Export** ⏷ dropdown at the top right of the screen, select **Export comments**.
3. In the **Export Comments** dialog, select **Export**. 
   - ChartHop generates a spreadsheet with your compensation review comments.
   - Each row in the spreadsheet includes a separate comment. Employees with multiple comments will display in multiple rows.
4. Once the spreadsheet is done generating, the spreadsheet downloads automatically.
5. Select **Done** when you’re finished downloading.

:::hint{type="info"}
[Packages](https://www.charthop.com/pricing/)**:&#x20;**<font color="#a9a9a9">Basic</font> <font color="#000000">|</font> <font color="#000000">**Standard*** | **Premium**</font>****

\* Available as an add-on
:::


[title] View who you're collaborating with
[path] ChartHop for Administrators/Compensation reviews/Participating in a compensation review/Working as a collaborator in a compensation review/

You can use the **Cycle overview** tab to view a list of all the reviewers and approvers you’re collaborating with, as well as any approvals below and above in the reporting structure, and the current status of each compensation review proposal.&#x20;

Compensation review proposals can display in the Cycle overview with the following statuses:

- **In progress** - Indicates the reviewer or approver is currently reviewing.
- **Pending lower tier** - Indicates the approver is waiting on submission from a reviewer that is below them in the compensation review reporting structure.
- **Submitted** - Indicates the review has been submitted.
- **Skipped** - Indicates the review has been skipped (either manually or automatically).

![Cycle overview for collaborators](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/DZ4Fp7NyFIw1N32UdLxAY_collaboratorscycleoverview.png)

### Send a reminder to the reviewer or approver you’re collaborating with

As a collaborator, you can send a friendly reminder to reviewers and approvers.

To send a reminder:

1. Access the compensation review you’re participating in.
2. Navigate to the **Cycle overview** tab. 
3. In the **Cycle progress** section, identify the reviewer or approver you want to remind.
4. Select **Send reminder**. ChartHop sends an email reminder to the reviewer or approver.

### Skip a reviewer or approver

In cases where a reviewer or approver is not available and has not completed their review, you can manually skip and advance proposals to the next reviewer in the reporting structure using the **Skip reviewer** option in the Cycle overview list.

When you select **Skip reviewer&#x20;**&#x66;or any reviews that are in progress, the original reviewer is notified that their review was skipped. The proposal becomes read-only for the skipped reviewer; however, any changes that were made prior to the skip are maintained and forwarded to the next reviewer.&#x20;

:::hint{type="info"}
As a collaborator, you must have Edit & Submit permissions to be able to skip a reviewer or approver and you can only skip reviewers you're collaborating with. For more information, please contact your compensation review cycle owner.
:::

### View a full team overview

To view a full overview of all employees eligible in the compensation review, you can select the **Full team overview** tab. 

This tab displays all eligible employees whose compensation you have access to view. 

The Budget allocations and Raise percentage visualizations reflect the compensation changes for all employees in the Full team overview list. You can use the dropdowns to filter the employees that display in the list. The visualizations update based on the filters you apply.

![Full team overview for collaborators](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/31EdR4xFZ1Xget0wQ8MBi_collaboratorfullteamoverview.png)


[title] Example Templates
[path] ChartHop for Administrators/People Ops Tools/Letter templates/Creating templates/

Below is a collection of sample templates you can use for your organization. To use them, create a new template, copy the code examples from the editors below, and add them to your new empty template.

## Adding stylings

You can add content using HTML or Markdown, as well as add styling to your templates using CSS. Templates can use both traditional CSS as well as an alternative form of CSS called *Page Media CSS*. [Learn more](https://www.w3.org/TR/css-page-3/#intro).

## Welcome letter

::Image[]{src="https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/gUJJZUPtfBXT5DHHil3j__screen-shot-2022-06-01-at-100545-am.png" size="50" width="1096" height="1082" caption="Welcome letter template" position="flex-start" showCaption="true"}

### Content&#x20;

```html
<img class="headerLogo" src="https://media.charthop.com/org/5a6a3d6eaa13f16472b9a35c/2022/02/04/61fd7dd32488b857fee89555ndnxnx2tscxko6zq8yhyfivv4yilnu5g.png">
<div class="right" style="padding-bottom:50px">
{{formatDate(date, "MMMM d, yyyy")}}
</div>
Dear {{name}},

Welcome to {{org.name}}! 

We are very excited to have you be a part of our {{department}} team and we look forward to creating awesome things together. 

We are all here to help and so if you have any questions or needs, please don't hestitate to reach out.

Sincerely,
Joy & Steve
<div id="addressContainer">
<div id="line"></div>
<div id="address">
Your Org, Inc.
<br />
8 The Green, Suite # 8377
<br />
Dover, DE 19901
<br />&nbsp;
</div>
</div>
```

### Styling

```css
body {
  font-family: muliregular;
  font-size: 14px;
  margin: 0 20px;
}

.headerLogo {
  display:block;
  margin: 0 auto 20px auto;
  width: 250px;
}

#line {
  border-top: 1px solid #cccccc;
  padding-bottom: 20px;
}

.right {
  text-align: right;
}

#addressContainer {
  width: 700px;
  position: fixed;
  bottom: -120px;
  height: 200px;
  text-align: right;
  right: 0;
}

#address {
  position: fixed;
  right: 0;
  color: #2e5d84;
  width: 200px;
  font-weight: 700;
}
```

## Information table

::Image[]{src="https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/UBMWJLZKL027dJoY7isrE_screen-shot-2022-06-01-at-101424-am.png" size="52" width="1142" height="1080" caption="Table example" position="flex-start" showCaption="true"}

### Content&#x20;

```html
# Your Organization

<hr style="margin-top: 40px; border-width: 2px;" />

### Annual Review 2020

<table id="summary">
<tr>
<td>Employee Name:</td>
<td>{{name}}</td>
</tr>
<tr>
<td>Date:</td>
<td>12-31-2020</td>
</tr>
<tr>
<td>Start Date:</td>
<td>{{formatDate(personStartDate, "MM-dd-yyyy")}}</td>
</tr>
<tr>
<td>Title:</td>
<td>{{title}}</td>
</tr>
<tr>
<td>Department:</td>
<td>{{department}}</td>
</tr>
<tr>
<td>Manager:</td>
<td>{{manager}}</td>
</tr>
</table>
```

### Styling

```css
body {
  font-family: Courier New, sans-serif;
}

hr {
  border-top: 1px;
} 

h1 {
  text-transform: uppercase;
  text-align: center;
 font-family: Georgia;
}

h2 {
  font-size: 16px;
  page-break-before: always;
  text-align: center;
}

h3 {
  font-size: 16px;
  margin-top: 40px;
}

h4 {
  text-align: center;
}

table {
  border-collapse: collapse; 
  border: 0px;
}

#summary td, #comp th, #comp td {
  padding: 4px;
  border: 1px solid black;
}

#summary, #comp {
  margin: 40px auto;
}

#summary td {
  padding: 4px 8px;
  min-width: 140px;
  text-align: left;
}

@page:right{
  @bottom-center {
    content: counter(page) " of " counter(pages);
  }
}

body {
  font-family: muliregular;
  font-size: 14px;
  margin: 0 20px;
}

.headerLogo {
  display:block;
  margin: 0 auto 50px auto;
  width: 250px;
}
```


[title] Qualified Electronic Signatures (QES)
[path] ChartHop for Administrators/People Ops Tools/Signatures/

ChartHop Signatures currently follow the requiremest for simple electronic signature (SES) out of the box, but support for **Qualified Electronic Signatures (QES)&#x20;**&#x63;an be added via an add on. &#x20;

If you require **Qualified Electronic Signatures (QES)&#x20;**&#x69;n order of comply with the EUs eIDAS regulation, ChartHop can add support for this for a fee. Please contact the ChartHop team for pricing and to get this setup for your account.&#x20;



## About QES in ChartHop

ChartHop offers QES via an integration with [BoldSign](https://boldsign.com/?utm_source=google\&utm_medium=cpc\&utm_campaign=20961550542\&utm_content=159531906233\&utm_term=boldsign\&gad_source=1\&gad_campaignid=20961550542\&gbraid=0AAAAAqW6QkmVcvNQxQZtBqqLiIWlFvwwk\&gclid=CjwKCAiA64LLBhBhEiwA-Pxgu7iybWjBj0r8Nhiqn2kwoQ7ry3SMwNipK_yr6xJxWOihSbv0PfXS7hoCPpAQAvD_BwE).&#x20;

After QES has been turned on via [QES Settings](docId\:joXqrftT0VsO2uZU1Vtxx), when someone who should be using QES clicks the link to sign a document, they will be taken to a hosted Boldsign page to sign.&#x20;

Once they have signed, they will be redirected to ChartHop and their signed document will be saved to their ChartHop profile after the last signature is complete.&#x20;

When a document has been signed with QES you will see a `QES` tag next to the status and a `QES` info note in the signature section:

::Image[]{src="https://api.archbee.com/api/optimize/CXAjUAezd9VEEVQBIYmdw/PoALxij_wo_9RnwZn9uVW-20260109-202331.png" size="66" width="404" height="354" position="center" showCaption="false"}

::Image[]{src="https://api.archbee.com/api/optimize/CXAjUAezd9VEEVQBIYmdw/W24WqYemf-M7Ar7KLOoD5-20260109-202309.png" size="66" width="396" height="191" position="center" showCaption="false"}

## QES Settings

Once QES has been added to your account, you will see a QES Signatures page under **Admin > QES Signatures**.&#x20;

The settings page will display:&#x20;

1. **Usage Tracking** — A tracker of usage depending on how many QES signatures you have used and purchased in your add on.&#x20;
2. **Signature Configuration** — **When to use QES**
   1. **Always** - for all signatures
   2. **For people matching a filter** - for example `!address.country:US` will use QES only for people who live outside of the US.&#x20;
   3. **Never** - disable QES (Default to start)&#x20;

![](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/BWv2vnyemDxtNvZ4TD2NA-20260109-202252.png)


[title] Select a form for the survey
[path] ChartHop for Administrators/Engagement surveys/Adding forms to a survey/

Before you can create a survey, create the form that you want to send out as part of that survey. [Learn more about how to create forms.](https://docs.charthop.com/configuring-a-form)

![](https://archbee-image-uploads.s3.amazonaws.com/zxjhb7-DqnuzAP-lru1l3-qAYPAl05bDYaXkHJzhG6m-20250819-102547.png)

To select a form to use in the survey:

1. From the left sidebar, select **Engagement.**
2. Select your survey by selecting the name of the survey in the list.
3. From the **Forms** tab, select **Add form**.
4. **Select the form** to be used in the survey from the dropdown list.
   - Any form can be selected, but the setting of the form will determine who the form can be sent to
5. Choose an option for **Does the form have a Due Date?**
   - **No deadline**
   - **Soft deadline** → The form will display a due date. The tasks will not automatically expire at the due date. The form can be completed after the due date.
   - **Hard deadline&#x20;**→  The form will display a due date and the tasks will automatically expire at the due time, will be removed from the home page and can no longer be completed.
     - **Select a Date & Time** that the form is due at. This time is aligned to your account’s time zone.
6. Choose an option fo&#x72;**&#x20;Can the form be skipped?**
   - **No** → Form is required and all survey participants must complete i&#x74;*&#x20;(Recommended for most survey uses)*
   - **Yes** → The form is optional and the person has the choice to either complete the form or skip it.*&#xA0;*
7. Select **Next** to continue.

![Example of tasks with due dates](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/U4XeM3n0PAz9TPZFa7nue_screenshot-2023-09-28-at-32116-pm.png "Example of tasks with due dates")

:::hint{type="info"}
[Modules](https://www.charthop.com/pricing/)**:&#x20;**<font color="#000000">HRIS | </font>**Engagement** | Goals | Performance | <font color="#000000">Compensation Reviews | </font>Headcount Planning
:::


[title] Signatures
[path] ChartHop for Administrators/People Ops Tools/

:::hint{type="info"}
[Packages](https://www.charthop.com/pricing/)**:&#x20;**<font color="#a9a9a9">Basic</font><font color="#a9a9a9">   </font><font color="#a9a9a9">Headcount Planning | </font><font color="#a9a9a9">Compensation Reviews | </font><font color="#0C121D">**Performance** | </font><font color="#a9a9a9">Engagement </font>
:::

This is an overview for admins on how to request signatures and manage signature requests. See [Signing a document](docId\:SFNfl4H1Rig6XCgKL43sc) for information on signing a document.&#x20;

:::Iframe{iframeHeight="0" code="<div style=&#x22;position: relative; padding-bottom: 56.25%; height: 0;&#x22;><iframe style=&#x22;position: absolute; top: 0; left: 0; width: 100%; height: 100%; border: 0;&#x22; src=&#x22;https://www.tella.tv/video/cm7nubokb000y0aju3nx7dt8i/embed?b=0&title=1&a=1&loop=0&t=0&muted=0&wt=0&#x22; allowfullscreen allowtransparency></iframe></div>"}

:::

# Request a signature

There are several ways that you can request a signature on a document depending on the workflow you are trying to support.

Currently the only built in user roles that have the ability to request signatures are:

- [Owner](docId\:o_IcgvK94IdcUnZIuNTVi)&#x20;
- [Org editor](docId\:BJjp5452IEXgnxyIlrdpQ)&#x20;
- [People Ops Admin](docId\:O6czGwxjEKFAefKWZ1l6B)&#x20;
- [People Ops Admin (no comp data)](docId\:xXw0L5UXlyl_QSHSAmtbm)&#x20;
  - *Note that files containing compensation information should be categorized as part of the "Compensation" category in order for them to be blocked from users with this role.&#x20;*
- [People Ops Admin (no sensitive data)](docId\:XoZkhw57NZvOSsNsh_WMT)&#x20;

![](https://archbee-image-uploads.s3.amazonaws.com/zxjhb7-DqnuzAP-lru1l3-9XiFBMqJzisgbopZI6_y4-20250226-155919.png)

## Request via the profile

The simplest way to request a signature is to do so via a file stored on the person's profile.&#x20;

To request a signature via the profile

1. Navigate to the **Files&#x20;**&#x74;ab within the profile.
2. Upload the document that you would like to have signed or select a document you previously uploaded.
3. Within the document viewer, navigate to the **Signatures tab** on the right info panel
4. Click **Request signature**
5. Then select who you would like to request a signature from&#x20;
6. Select **Send request.&#x20;**&#x54;he person will then be notified and will have a task on the ChartHop home page.&#x20;

::Image[]{src="https://archbee-image-uploads.s3.amazonaws.com/zxjhb7-DqnuzAP-lru1l3-zLeIEjp7UqLT3KGIiQSua-20250226-160137.png" size="66" width="620" height="492" position="center" darkWidth="620" darkHeight="492" showCaption="false"}



## Request via an Automated Action

The **Send Document for Signature** step within an automated action allows you to request a signature on either a generated template (such as a promotion letter) or a uploaded PDF (such as an employee handbook).&#x20;

**Prerequisites:**

1. Create a [File](docId\:lT2ej7nQsjhebKLl5XmAZ) field that the document will be stored to
2. Create a  [Letter template](docId\:PrTI425Guur8bJNFonivJ) with the document
3. Link the File and the Letter template
4. Select the template within the action.&#x20;

::Image[]{src="https://app.archbee.com/api/optimize/CXAjUAezd9VEEVQBIYmdw/mD_KDu2P6_EJgy0RXNLyG-20251007-165213.png" size="88" width="760" height="511" position="center" darkWidth="760" darkHeight="511" showCaption="false"}

### Request a signature on a PDF

1. Set up you [Letter template](docId\:PrTI425Guur8bJNFonivJ) as a template using the **Document Type: Uploaded file** option.&#x20;
2. Follow the instructions above for linking the [File](docId\:lT2ej7nQsjhebKLl5XmAZ) field and configuring the the [Request a signature](docId:6k2uHP22MlgnhaOvzQ0yX) action step.

![](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/v1w5LfaJ0DYUAW_DAZKFQ-20251007-165157.png)

### Request a signature on a Template



1. Set up you [Letter template](docId\:PrTI425Guur8bJNFonivJ) as a template using [carrot](docId\:UdtiyEp98g_atcRepTgAu) for variables and format the document as you would like.&#x20;
2. Follow the instructions above for linking the [File](docId\:lT2ej7nQsjhebKLl5XmAZ) field and configuring the the [Request a signature](docId:6k2uHP22MlgnhaOvzQ0yX) action step.



# Signing a document in ChartHop

For a guide on the signing expeience see: [Signing a document](docId\:SFNfl4H1Rig6XCgKL43sc)&#x20;



# Canceling a signature request

::Image[]{src="https://archbee-image-uploads.s3.amazonaws.com/zxjhb7-DqnuzAP-lru1l3-jYtOYYmY16nXQynjHGA7Y-20250226-165337.png" size="60" width="496" height="222" position="center" darkWidth="496" darkHeight="222" showCaption="false"}

If you need to make changes to the document or need to cancel the signature request for any reason, you may do so before it has been signed. Anyone with the ability to request signatures can also cancel signature requests.&#x20;

To cancel a signature request:

1. Navigate to the **Files&#x20;**&#x74;ab within the profile.
2. Navigate to the document that is **Awaiting signature.**
3. Within the document viewer, navigate to the **Signatures tab** on the right info panel
4. Click the **Cancel request&#x20;**&#x62;utton.
5. Confirm that you would like to cancel the request by clicking **Cancel request** in the dialog.





# FAQ

**What files types are supported?&#x20;**

Currently, you can only request a signature on a PDF file.&#x20;

**How many people can sign the document?&#x20;**

Multiple people can sign the document. Just add the signatories when setting up the request. Currently the order of signing is not enforced, so all people will receive the request to sign at the same time.&#x20;

**Which name can users sign with?&#x20;**

The signee can sign with any case sensitive combination of their `First Name` or `Preferred First Name` and their `Last Name` or `Preferred Last Name.` See more information on ChartHop's [Name](docId\:w1GOoRP7tqsQzCWiQ8hzs) fields.&#x20;

**Who can sign documents?**

Current, documents can only be signed by people who currently can login to ChartHop.&#x20;



## Common documents to have signed in ChartHop

- Acknowledgement of Legal or Company Policies (Attendance, Anti-sexual harassment, etc.)
- Onboarding / Offboarding Paperwork
- Promotion Letters
- Compensation Letters
- Performance Improvement Plans (PIPs)
- Acknowledgement of having read Employee Handbook
- Offer Letters
- Separation Agreement
- PIIA or CIIA Document
- Sales Commission Plan
- Relocation/Transfer agreement
- Qualifications, Training or Acredidations&#x20;


[title] Collaborating in a review
[path] ChartHop for Administrators/Performance reviews/

You can share your review with your peers so that multiple people can edit the review and monitor its progress.

### Review permissions

You can assign the following permissions to the people you're collaborating with:

- **Owner** - Indicates this person has full access to the review; they can view, edit, and share the review with others.
- **Edit** - Indicates this person can view and edit everything in the review.
- **Full view** - Indicates this person can view everything in the review, but cannot make edits.

::Image[]{src="https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/FPsQSBnKTY8MREg1ZI8Ai_share.png" size="50" width="1008" height="788" caption="Share a review" position="flex-start" showCaption="true"}

### Share a review

To share a review with another person:

1. Access your review from the **Performance Reviews** page.
2. In the top right of your review, select the **+** icon next to your profile image to display the **Share&#x20;**&#x64;ialog.
3. In the **Add Person** field, search for the person you want to collaborate with in the review.
4. Use the dropdown to assign the level of permission this person has for the review. You can select from the following:
   - **Owner**
   - **Edit**
   - **Full view**
5. Select **Done**.&#x20;

Your collaborators are notified that you have added them to the review. You can remove any collaborators from the review by selecting the trash can icon next to their names in the **Share** dialog.






[title] Generating PDF documents
[path] ChartHop for Administrators/People Ops Tools/Letter templates/

You can generate and send ChartHop documents in PDF format to employees.  &#x20;

You can generate single documents or decide to create multiple at once.&#x20;

Depending on how you want to distribute the PDFs you are generating, you can choose from several options:

- Save the file to the employee's profile page. You can also include an emailed copy to the employee and their manager when using this option if you like.
- Email the respective manager a set of all their direct reports' PDFs.
- Download the PDFs for your records.

When you generate a document, you can decide the date you want to use on the letter and which employees you want to generate documents for.&#x20;

![The Generate PDF documents view](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/drLEAVG1nuFQ9xE4iHmg1_screen-shot-2022-05-29-at-121928-pm.png)

### Preview your document

Previewing how your PDFs will look before sending them out allows you to verify that you are sending what you expect.

You can preview a document for a particular employee. You can preview as many employees as you'd like, one at a time, before choosing to generate your PDF documents.

![Select the action menu and then Preview...](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/ejTIvJunW7E98xxmQryja_image.png)

To preview a final version of a document:

1. From the left sidebar, select **People Ops Tools.**
2. From the sub-menu, select **Letter Templates.**
3. Select the template you wish to generate from the template list.
4. Select the **Generate PDFs&#x20;**&#x61;t the top right of the page.
5. In the **Generate PDF documents** page, select a **Scenario** to view. This option defaults to your primary org, which includes current employees.
6. Set the **Date** you want to use for the document.
7. Select **Preview\...&#x20;**&#x66;rom the left action menu for any employee. &#x20;

### Generate PDF documents to download

By default, you can generate a document and have it download to your personal computer. When you generate a document you can decide what effective date you want to use as well as filter on which employees you want to generate documents for.&#x20;

To generate a PDF document:

1. From the left sidebar, select **People Ops Tools.**
2. From the sub-menu, select **Letter Templates.**
3. Select the template you wish to generate from the template list.
4. Select the **Generate PDFs&#x20;**&#x61;t the top right of the page.
5. In the **Generate PDF documents** page, select a **Scenario** to view. This option defaults to your primary org, which includes current employees.
6. Set the **Date** you want to use for the document.
7. Create a filter that defines the list of employees you want to generate documents for. You can either use the Filter dialog or type a query in the box provided.
8. Verify that the number of documents to be generated is correct. This number is above the toolbar after you complete your filter. If no filter is used, a document will be generated for every employee.
9. Select **Generate Documents**.
10. Select **Download Documents** when the generation task completes.



![Generating PDFs](https://api.archbee.com/api/optimize/CXAjUAezd9VEEVQBIYmdw/pR8gXzydnja01aO516IDe_image.png "Generating PDFs")

### Saving documents to an employee's profile and sending generated documents for Signature

You can generate PDFs from letter templates and make them available on each employee’s profile. You can also email documents directly to employees and send documents for signature. Generated documents appear in the **Files&#x20;**&#x74;ab on the employee’s profile. Emails are sent to the employee’s work email address.

In order to attach files to Employee profiles, the files are associated with a field with the File data type. ChartHop provides three built-in fields to use. Each of these are named Miscellaneous and have different field data sensitivity levels. You can also create your own custom field to hold files. [Learn more.](docId\:VMoQbEuAnP7Fz8E8HOZYq)&#x20;

&#x20;The built-in fields are the following:&#x20;

- **Miscellaneous (Highly sensitive)**: The document may only be viewed by a manager level role and above.
- **Miscellaneous (Manager-only)**: The document may only be viewed by a manager.
- **Miscellaneous (Manager-shared)**: The document may be viewed by both an employee and their manager.

To save a document to a person's profile:

1. From the left sidebar, select **People Ops Tools.**
2. From the sub-menu, select **Letter Templates.**
3. Select the template you wish to generate from the template list.
4. Select the **Generate PDFs&#x20;**&#x61;t the top right of the page.
5. In the **Generate PDF documents** page, select a **Scenario** to view. This option defaults to your primary org, which includes current employees.
6. Set the **Date** you want to use for the document.
7. Create a filter that defines the list of employees you want to generate documents for. You can either use the Filter dialog or type a query in the box provided.
8. Verify that the number of documents to be generated is correct. This number is above the toolbar after you complete your filter. If no filter is used, a document will be generated for every employee.
9. Enable the **Save document to each person's profile** option.
10. In the **Save file as** drop down, select a sensitivity level to determine who can see the attached file.
    - **Miscellaneous (Highly sensitive)**: The document may only be viewed by a manager level role and above.
    - **Miscellaneous (Manager-only)**: The document may only be viewed by a manager.
    - **Miscellaneous (Manager-shared)**: The document may be viewed by both an employee and their manager.
      - **Email each person a link to download their own**: When enabled, will email both the employee and the employee's manager individual documents.
    - **Custom field(s)**: Choose from any listed custom field and the file will inherit the settings of whichever sensitivity level was assigned to the particular field.
11. (Optional) Enable **Email each person a link to download their own document**.
    &#x20;When enabled, the employee and their manager receive a link to the generated document.&#x20;
12. (Optional) Enable **Send document to recipients for signature**.
    &#x20;When enabled, the document is sent to the employee for signature using ChartHop’s native signing experience.
13. Select **Generate and Send Documents**.

### Emailing a direct report's documents to a manager

If you prefer that your PDFs are distributed by the employee's manager or that the manager receive the files separately, you can email a link of the generated PDFs directly to the respective employees' manager. For security purposes, the manager will have to login to ChartHop to download the files.&#x20;



To send employee reports to direct managers:

1. From the left sidebar, select **People Ops Tools.**
2. From the sub-menu, select **Letter Templates.**
3. Select the template you wish to generate from the template list.
4. Select the **Generate PDFs&#x20;**&#x61;t the top right of the page.
5. In the **Generate PDF documents** page, select a **Scenario** to view. This option defaults to your primary org, which includes current employees.
6. Set the **Date** you want to use for the document.
7. Create a filter that defines the list of employees you want to generate documents for. You can either use the Filter dialog or type a query in the box provided.
8. Verify that the number of documents to be generated is correct. This number is above the toolbar after you complete your filter. If no filter is used, a document will be generated for every employee.
9. Enable the **Email managers a link of their directs' documents&#x20;**&#x6F;ption.&#x20;
10. Select **Generate and Send Documents**.

:::hint{type="info"}
**Manager experience**

- The document will send to the person's manager as of effective date, not the current manager. **
  *(For example, if during a comp cycle it will send to the manager at the start of the comp cycle.)*
- The manager must be an active [user](docId\:KOXUdsgLe9S5QqAH9rADj) within ChartHop, so that they can login and access the document files.&#x20;
- The Managers will receive a link to login to ChartHop and download a zip file of their direct reports' documents.
:::






[title] Releasing form responses
[path] ChartHop for Administrators/People Ops Tools/Forms/Form responses workflows/

## Releasing a Form Response

As the person responsible for releasing the form, you will *not* receive a notification or a task that you need to release the form response. You will just need to go to the profile tab where you can review and then release the form by clicking the **Release response to&#x20;**&#x62;utton.&#x20;

After you press the button, you will be asked to confirm. The person the form is about will receive a notification as soon as the form is released.&#x20;

::Image[]{src="https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/zHeODOkjY6Mjs4jmOCjiJ_approved-unreleased-person-who-can-release.png" size="50" width="1052" height="1182" position="center" caption="Approved, Unreleased" showCaption="true"}



::Image[]{src="https://archbee-image-uploads.s3.amazonaws.com/zxjhb7-DqnuzAP-lru1l3-p-zhzjnlXaB1FCc5BM6Vs-20250212-174227.png" size="92" width="2876" height="1614" position="center" caption="Approve all form responses confirmation" alt="Approve all form responses confirmation" showCaption="true"}

## Bulk  Releasing Form Responses

**Releasing all form responses&#x20;**&#x77;ill move all responses from Awaiting Release --> Released.&#x20;

To bulk approve forms:

1. Go to the form that you want to approve within the Review
2. Click the overflow menu and select **Release all form responses**
3. A confirmation modal will then appear stating that exactly what will happen next. Here you can **opt out of release notifications&#x20;**&#x6F;r select the format of the notification: Slack or Email.&#x20;
4. Click **Confirm** to release the responses.&#x20;
5. If selected, a notification will then be sent to the person who submitted the form notifying them of the approval. A release ✔️ with the name of the person who released the forms and the time that they released them will appear on the form response card.&#x20;

![Release all form responses confirmation](https://archbee-image-uploads.s3.amazonaws.com/zxjhb7-DqnuzAP-lru1l3-Wux4opbaj5w5VhvXxlDTh-20250212-174535.png "Release all form responses confirmation")

&#x20;

##


[title] Customize the notification message
[path] ChartHop for Administrators/Performance reviews/Adding forms to a review/

You can customize the notification that you send out to your reviewers when they receive the form you selected. 

You can add additional instructions for your reviewers or remind respondents  expectations for the review. Any due date you set will be included in the automatically generated part of the notification. This message displays to reviewers when they are invited to participate in the review.

:::hint{type="info"}
When you’re integrated with Slack, ChartHop will notify the employees via Slack otherwise they will be notified via email. [Learn more.](https://docs.charthop.com/slack)
:::

A preview of your message displays at the bottom of the page.

![](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/I9ey-PcXW4vaQyyJOoYVw_screenshot-2023-09-28-at-43848-pm.png)

This is an optional step. Once you’re done customizing the message, select **Next** to continue.




[title] Time off notifications
[path] ChartHop for Administrators/People Ops Tools/Time off for admins/



## Sending time off notifications to Slack

::Image[]{src="https://archbee-image-uploads.s3.amazonaws.com/zxjhb7-DqnuzAP-lru1l3-6nYAYRFHaGWAT4EGUpJ4M-20250211-133751.png" size="62" width="926" height="424" position="center" caption="Example message of who's out" alt="Example message of who's out" showCaption="true"}

You can set up notifications to send to Slack or email summarizing who is out on any given day. To set up the notifications, use [intall the bundle ](https://app.charthop.com/bundles/time-off-notifications)with the action into your ChartHop account.&#x20;

To configure the notifications:&#x20;

1. [Intall the bundle ](https://app.charthop.com/bundles/time-off-notifications)
2. Add the name of the channel that you would like the messages to send to to the first action step or select a different message recipient. By default, it will send to #general.&#x20;
3. Make any modifications to the message:
   1. If you would like to only send messages for a specific department or team, you can add in a filter into the first line of the action. For example:
      `{% assign outToday=db.job.find{nextDayOff <= today and department=["people","talent"] } %}`
   2. If you would like to change the emojis for each time off type or adapt any of the text you may do so there.&#x20;
   3. If you would like to add any additional info from the time off request, you may do so using the [TimeOff](docId\:raHsIHytvR1NsKqtdfkJA) object. For example: `{{job.nextTimeOff.startDate}}`


[title] Creating and Managing Goals
[path] ChartHop for Administrators/The Goals page/

![](https://api.archbee.com/api/optimize/CXAjUAezd9VEEVQBIYmdw/0xHJZyOIAnx-1TmjNT2xX_image.png)

## Creating a goal

Select **Create Goal** from any tab on the Goals page to open the Create Goal modal. All fields marked with a red asterisk are required.

### Goal Type (required)

Select from the goal types your admin has configured. Types are grouped into two categories: **Organizational** (company, department, and team-level goals) and **Personal** (individual goals). The type you select determines how progress is tracked, which target levels are available, and whether forecasting and milestones are enabled.

### Parent Goal

Link the new goal to an existing goal to place it in the hierarchy. Select **Top-level goal** to make it a root goal with no parent. If you're adding a sub-goal from within a goal's detail view, the parent is pre-filled automatically. You can change it.

### Sensitivity (required)

Controls who can see the goal. Defaults to Org Public. Five options are available:

| Sensitivity          | Visibility                                                                                                      |
| -------------------- | --------------------------------------------------------------------------------------------------------------- |
| **Org Public**       | Visible to everyone in the organization                                                                         |
| **Manager Shared**   | Visible to the person, their managers in the reporting line, and users with Sensitive access                    |
| **Personal**         | Visible only to the person and users with Sensitive access. Not visible to managers without Sensitive access    |
| **Manager Only**     | Visible to managers in the reporting line and users with Sensitive access. Not visible to the person themselves |
| **Highly Sensitive** | Visible to org owners and users with access to view sensitive data                                              |

### Name of goal (required)

The clear, outcome-focused statement of what the goal is trying to achieve. This name appears throughout ChartHop wherever the goal is referenced. Goals can include an emoji icon, which displays alongside the name in all views.

### Date Range (required)

Start and end dates for the goal. Select a preset from the dropdown or set custom dates using the date pickers. Date range provides the time boundary for progress tracking, charts, and forecasting.

### Description

Context for why the goal exists and what success looks like. Supports rich text formatting, links, images, and markdown.

### Owners

The people accountable for tracking progress, updating confidence, and communicating status. Owners see this goal highlighted on their profile page. Every goal should have at least one clear owner. Search and select from all members of the organization.

### Supporters

Contributors who help achieve the goal without owning the outcome. Supporters also see this goal highlighted on their profile page. Multiple supporters can be added.

### Groups

Teams, functions, or departments associated with the goal. Groups tagged on a goal see it highlighted on their group page. Tagging groups also improves filtering and clarifies which parts of the organization are involved.

### Save

Select **Create Goal** to save. Once created, the goal can be expanded with metrics, milestones, sub-goals, and progress updates.

## Adding a sub-goal

Sub-goals break a larger goal into focused pieces of work. Each sub-goal has its own owner, confidence, and progress, making execution visible without losing alignment to the parent.

To add a sub-goal, open the parent goal's detail view and select **+ Sub-Goal** from the sidebar. This opens the same Create Goal modal with the parent pre-filled. All fields work the same way. Sub-goals are especially useful for cross-functional initiatives where multiple teams contribute to a shared outcome.

## Editing a goal

Select **Edit Goal** from within any goal's detail view to open the Edit Goal modal. All fields are editable, including Goal Type and Parent Goal. Existing owners, supporters, and groups appear as removable pill tags.

Select **Save changes** to apply updates, or **Cancel** to exit without saving.

To permanently delete a goal, select **Delete Goal** in red at the bottom left of the Edit Goal modal.

![Share](https://api.archbee.com/api/optimize/CXAjUAezd9VEEVQBIYmdw/Ju_HWS47t0qVn44A_hIga_image.png)

## Sharing and access

Select the pencil icon next to the sensitivity badge in the goal's top bar to open the Share modal.

The Share modal has two sections:

**Sensitivity** - change the goal's visibility setting. Selecting a new sensitivity applies it immediately across the platform.

**Share with** - add specific people or groups and assign them an access role:

- **Admin** - can create, edit, and manage the goal, including assigning owners.
- **Editor** - can update progress and add comments

Groups listed in the Share modal show their member count and open position count for reference.

Select **Save** to apply changes.

## Custom calculation metrics and the goal creator

When a goal target uses a Calculation to calculate current progress - ChartHop evaluates that expression using the **goal creator's identity and permissions**, not the goal owner's or the viewer's.

This means the expression can access exactly what the goal creator can access, including any sensitive fields they have permission to see. It does not grant access to data the creator could not otherwise view.

The practical implication: **if a goal calculation relies on data that requires specific permissions to access**, the goal must be created by a user who has the appropriate access to that data. If the wrong user creates the goal, the expression may silently return no results or incorrect values.

:::hint{type="info"}
[Modules](https://www.charthop.com/pricing/)**:&#x20;**&#x48;RIS | Engagement | **Goals** | Performance | Compensation Reviews | Headcount Planning
:::


[title] Cash compensation viewer
[path] ChartHop for Administrators/Access/User access controls/Built-in Roles/

The Cash compensation viewer role is given to employees who have a role in determining and analyzing cash budget information. Employees with this role can access all cash compensation data. They **cannot** access equity compensation.

All roles have standard access, which includes the following:

- Access to all non-administrative functions of ChartHop, including scenarios and dashboards.&#x20;
- Ability to view their own compensation data and the compensation data of those who report to them.&#x20;
- Can edit or hide their own personal data.

Data sharing rules apply to all users regardless of role. Owners of artifacts like scenarios, dashboards, compensation reviews, and forms can restrict access to the respective artifact by person or filter.

You can apply a filter to this role to have it apply to a subset of users; for example, all managers within a department or only HR leaders in a specific location.

**Typical ChartHop responsibilities for someone with this role:**

- Viewing ChartHop to understand the organization.
- Completing employee tasks assigned to them (1:1s, surveys), participating in compensation reviews or scenarios when invited.
- Reviewing cash compensation to make budget decisions.

**Common organization titles for users who need the Cash compensation viewer access role:**

- FP\&A (Financial Planning and Analysis) manager
- Finance analyst

The table below lists how users with this role can use the respective pages. If a page is not listed, the role does not grant access to that page.

### Sensitive data&#x20;

- Can view their own compensation data and personal data.
- Can view compensation data for those in their reporting line (including cash and equity).
- Can view all **cash** compensation data for the organization.

### Employee pages

| **ChartHop page**    | **Capabilities**                                                                                                                                                                                                                                                                    |
| -------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Org Chart            | - Can view and filter.                                                                                                                                                                                                                                                              |
| Data Sheet           | * Can create custom views.
* Can view and edit all **cash** compensation data.
* Can share views.                                                                                                                                                                                   |
| Map                  | - Can edit their own location.                                                                                                                                                                                                                                                      |
| Home page            | * Can view all public information. 
* Can view and complete their own tasks.                                                                                                                                                                                                        |
| Dashboards           | - Can create dashboards.
- Can view dashboards that have been shared with them.                                                                                                                                                                                                     |
| Scenarios            | * Can create scenarios.
* Can view scenarios that have been shared with them.
* Can view all cash compensation data and changes to that data.                                                                                                                                       |
| Employee profiles    | - View others' public information.
- Edit their own personal information.
- Set what information of theirs that others can see.
- Can view all compensation data for those in their reporting line.
- Can view manager-shared forms that are part of the profile such as 1:1 forms. |
| History              | * Can view, filter and export historical data.                                                                                                                                                                                                                                      |
| Compensation reviews | - Can be assigned to be an approver or reviewer of a compensation review.                                                                                                                                                                                                           |

:::hint{type="info"}
[Packages](https://www.charthop.com/pricing/)**:&#x20;**<font color="#a9a9a9">Basic</font> <font color="#000000">|</font> <font color="#000000">**Headcount Planning** | </font><font color="#000000">**Compensation Reviews** | </font><font color="#000000">**Performance** | </font><font color="#000000">**Engagement** </font>
:::


[title] Untitled
[path] ChartHop for Administrators/


[title] Preview a template
[path] ChartHop for Administrators/People Ops Tools/Letter templates/

You can preview how your template displays. Previewing allows you to select a particular user and preview how the data is presented.

When you preview, select a particular employee and a date when you expect the template information to be current. For example, if you are previewing a template that informs an employee from the Engineering department that he will be promoted on a certain date, choose that employee and the effective date of the promotion.

::Image[]{alt="Preview basic information" src="https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/wg8PVeqeG0d38U1aPuHmX_screen-shot-2022-05-12-at-53405-pm.png" size="50" width="1216" height="276" position="flex-start" showCaption="false"}

To preview a template:

1. From the left sidebar, select **People Ops Tools.**
2. From the sub-menu, select **Letter Templates.**
3. Select a template from the template list. The template preview automatically display in the **Preview** section.
4. In the **Preview** section, select an employee or role from the employee dropdown list.&#x20;
5. Select a date from the date picker.&#x20;
6. Your template then automatically displays both elements in the **Preview** section.


[title] Export form responses in a review
[path] ChartHop for Administrators/Performance reviews/

You have the ability to export all submitted forms in a review as either a CSV or PDFs.

### Exporting as a CSV

To export a CSV of a review:

1. Access your review. 
2. In the **Responses** tab, select **Sheet**.&#x20;
3. From the **Form&#x20;**&#x64;ropdown, select the Form from the review that you would like to export the responses for. Add any filters if you want only export a subset of the form responses.
4. Click the **Export** Icon Button. Then select, **Export as Form Responses as CSV**.
5. Select your [data formatting options](docId\:ZznndmQ09j6UBPvEbbIFW).&#x20;
6. Click **Export CSV**.
7. Once the export is complete, select **Download Export** to save the .csv file.

::Image[]{src="https://archbee-image-uploads.s3.amazonaws.com/zxjhb7-DqnuzAP-lru1l3-DiOXN59xCoEJjpKmdPCXR-20241022-165726.png" size="60" width="457" height="220" position="center" alt="Export form resonsese" showCaption="false"}

### Exporting as a PDF

When you export reviews in .pdf format:

- All forms form the review will be included in the PDF.
- All reviews are generated as separate .pdf files within a single .zip file.&#x20;
- The files will use the naming convention of: `{{Review Name}} - {{First Name}} {{Last Name}}.pdf` For example: `ACME Q1 Performance Review - Sarah Smith` where Sarah Smith is who the forms in the review are About.&#x20;

To export .pdf files for a review:

1. Access your review. 
2. In the **Responses** tab, select **Sheet**.&#x20;
3. Click the **Export** Icon Button. Then select, **Export Review as PDFs**.
4. (Optional) Add a filter the for the reviews you want to export.
5. Click **Export PDFs**.
6. Once the export is complete, select **Download Export** to save the .zip file.



**Example PDF Export**

::File{src="https://archbee-doc-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/mfIjSGYqS-LwnAO57gU0X_acme-q1-performance-review-jonathan-smith.pdf" label="ACME Q1 Performance Review - Jonathan Smith.pdf" isUploading="false"}


[title] Configuring form settings
[path] ChartHop for Administrators/People Ops Tools/Forms/

Configure your form to meet your needs on **Settings** tab of your form. In the **Settings** tab, you can configure:

- If your form is accepting responses.&#x20;
- Who you want to respond to your form&#x20;
- Whether or not your form requires approvals
- Whether the identity of who responds to your form is visible
- Whether your form can be saved or edited after submission
- Email notifications for your form

![](https://api.archbee.com/api/optimize/zxjhb7-DqnuzAP-lru1l3-JF4jnylkIHScz-DolI44r-20241122-180709.png "Forms settings")

To configure your form settings:

1. From the left sidebar, select **People Ops Tools.**
2. From the sub-menu, select **Forms.**
3. Select and open the form you want to configure.
4. Select the **Settings** tab. The Form Settings display.
5. Configure the form settings as needed. See the table below for descriptions of each form setting.
6. Select **Save & Exit** to save and apply your settings.

## Form settings

The following form settings are available in the **Settings** tab:

### Status

| **Setting** | **Description**                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    |
| ----------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| Status      | Indicates the status of the form. Select from the following statuses:<br />\* **Active** - the form is published and available for use.<br />\* **Inactive** - the form is unpublished and unable to collect responses. Leave this status set to **Inactive** until you're ready to distribute the form.<br />\* **Archived** - the form has been archived. Archived forms are not deleted, but are inactive and no longer displayed in the Forms list unless you filter specifically for Archived forms. [Learn more.](https://docs.charthop.com/managing-a-form) |

### Distribution

| **Setting**                                                                                                                                                                                                                                                                         | **Description**                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     |
| ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Who is this form about?                                                                                                                                                                                                                                                             | This setting determines **whose profile the form response is stored on**. Think of it as declaring the *subject* of the form — not who fills it in, but who the data is *about*.<br /><br />- **The person completing the form** — Use this when people are filling out a form about themselves. The response will be stored on the submitter's own profile. *For example, a self-review or an About Me form.*<br />- **Another person** — Use this when someone is filling out a form on behalf of, or about, someone else. The response will be stored on the **subject's** profile — not the submitter's. *For example, a manager writing up a stay interview with an employee, a peer recognition form, or HR recording notes from a conversation with an employee. In all of these cases, the data should live on the employee's profile, so the form should be set to "Another person".*<br />- **No one specifically** — Use this when you do not want to link the response to a specific person, such as an anonymous survey.<br /><br />\:::hint\{type="info"}                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             |
| **Key principle:** The "Who is this form about?" setting controls where the data lives — not who submits it. If you want form data to appear on a specific employee's profile, set this to **Another person**, even if someone else (a manager, HR, etc.) is the one filling it in. |                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     |
| \:::                                                                                                                                                                                                                                                                                |                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     |
| Who can complete this form?                                                                                                                                                                                                                                                         | Indicates the group of people who are eligible for filling out this form. When you use this form in a review, the respondent relationships defined in this field are applied to the employees made eligible in the review. [Learn more.](https://docs.charthop.com/add-people-to-the-review)<br /><br />"The person" refers to the person who is going to complete the form. Select from the following options:<br /><br />- **Anyone in the org** — When anyone can fill out a form, even about themselves.<br />- **Anyone else in the org** — Use this for when people need to fill out forms about people other than themselves. *For example, a shoutout or recognition form that I would fill out about a coworker.*<br />- **The person or their manager** — Use this if the information in the form is about the person or their manager. *For example, a shared goal setting form.*<br />- **Their manager** — Use this for a form completed by a manager. *For example, a downward review or manager's 1*:&#x31;*&#x20;form.*<br />- **Their manager's manager** — Use this for a form completed by a manager's manager. *For example, a skip-level feedback form.*<br />- **Their direct reports** — Use this for a form completed by the direct reports of the person. *For example, an upward review.*<br />- **Users with sensitive access only** — Use this option for forms that include sensitive fields or responses. [Learn more.](https://docs.charthop.com/sensitive-data) *For example, HRBP private notes.*<br />- **Selected peers** — Use this for a form completed by selected peers of the person. *For example, a peer review.* This option will prompt you to select a **Peers collection field**, which can be any person or persons field, to use as the source of the identified "peers".<br />- **Custom** — Use this if you have a use case where only a certain group of people can respond to the form. Use Carrot to select which group of people. [Learn more.](https://docs.charthop.com/carrot-reference) *For example, if you wanted the form to only be able to be completed by people on the sales team, you could write&#x20;*`target.department="sales"`*&#x20;or if you wanted to limit the form to people who are offboarding, you could use&#x20;*`endDateOrg:*`*.* |
| Whose profile should this form automatically show up on?                                                                                                                                                                                                                            | At the top of each person's profile are buttons for filling out forms. See more information in [Distributing forms](docId\:ZO8ZHb5PqnjvTJnCLAO0v). The buttons will appear only for the people previously selected in **Who can complete this form** and on the profiles of people determined by this setting:<br /><br />- **No one's profile, unless there is a pending task** — This is the default value and will not show on the profile unless you have a pending task to complete the form. Select this option for a form that you will be sending out with Reviews or Actions. *For example, if I need to complete a peer review for a coworker, I will see a "Peer Review" button on their profile but I will not see the button on the profile of other people at the company who I cannot complete peer reviews for.*<br />- **Everyone's profile** — The button will appear on all people's profiles who the form applies to, which depends on what you have selected for "Who can complete this form". Select this option for a form that you always want accessible on the profile. *For example, a Shoutout form where you have selected "Everyone in the org except about themselves" for who can complete this form. This will show up on everyone's profile other than your own.*<br />- **Only specific people's profiles (Custom)** — The button will appear on the profile of a subset of people defined by you. *For example, a part-time employee hours submission that you only want to show for part-time employees. You would add&#x20;*`employment:part`*.*                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              |

![](https://api.archbee.com/api/optimize/CXAjUAezd9VEEVQBIYmdw/kfHSOHCRhL2aFFOAum4ny_form-types.png)

### Access & Anonymity

For full details on the three settings see: [Anonymous and De-Identified Surveys & Forms](docId\:kExBcKK0PLhmiFv1NPCqF)

- **Identified** - Linked to a person and their demographic information
- **De-Identified** - Hide identity, but allow certain specific demographic information and limit reporting to be stored on the form response.
- **Anonymous** - Not linked to any personally identifiable information

| **Setting**                                 | **Description**                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              |
| ------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| Who can see the identity of the respondent? | This option is only available when **Identified** is selected and is only available to organizations with the Performance module.<br /><br />The main use case for this setting is to allow for a type of "Anonymous feedback" where the person receiving the feedback cannot see who gave the feedback, but their manager or admins can. The form response will still be linked to the individual.<br /><br />- **Anyone who can view the form response** — Default. Used in the majority of use cases.<br />- **Managers in the person's reporting line** — Allows the manager of the person the form is about and users with highly sensitive access to see the identity.<br />- **Users with highly sensitive access** — Only users with highly sensitive access can see the identity of the respondent. |
| Who can view the form responses?            | The visibility of form responses depends on a number of factors that are detailed in [Form responses](docId\:qbDlkA-YzjmOZHsqLFW-K). This setting enables certain special applications.<br /><br />- **Default** — Use this for the vast majority of cases.<br />- **The person the form is about** — Allows the form to be viewable to the person the form is about, which is helpful when releasing a form response to an employee and not using fields. The response will not be viewable to them until it is released.<br />- **Custom** — If you have a special use case then you may want to discuss a custom setting. Use with the help of ChartHop staff.                                                                                                                                            |

### Form Completion

| **Setting**                              | **Description**                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        |
| ---------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| Allow saving drafts                      | Determines whether respondents can save their form entries as drafts. When this is enabled, a **Save Draft** button displays for respondents and they have the ability to save and return.                                                                                                                                                                                                                                                                                                             |
| Populate form with previous response?    | Determines whether answers are cleared between submissions by the same person.<br /><br />\* **Yes, display previous responses or existing data** — Use this for forms where the previous information is helpful in determining your next response.<br />\* **No, start with a blank form every time** — Use this for any recurring forms or any forms where previous answers do not matter.                                                                                                           |
| How would you like your form to display? | Allows you to select how you want a form to appear to people who are completing it. The options are:<br /><br />**Pop-up** — Recommended for short forms. Usually appears on the profile tab for most form settings. Provides a fast experience for things like shoutouts or feedback.<br />**Standalone page** — Recommended for longer forms or forms that will be completed on a mobile device. Provides a more immersive experience that's ideal for things like Onboarding, or Surveys. (Default) |

![Pop Up form](https://api.archbee.com/api/optimize/CXAjUAezd9VEEVQBIYmdw/164oqMTxYtVKxP2Z_1n3z_screenshot-2024-05-17-at-14638-pm.png "Pop-up")

![Standalone page forms](https://api.archbee.com/api/optimize/CXAjUAezd9VEEVQBIYmdw/5QngGf03jZBIXIiPC644u_screenshot-2024-05-17-at-14522-pm.png "Standalone page")

### After Submission

For full details on the settings, see the [Form responses workflows](docId:_QUlJLsN6BsALsltpaOoX) page.

![](https://api.archbee.com/api/optimize/zxjhb7-DqnuzAP-lru1l3-6sSVWdwMlgU0p45kNV5r6-20241121-210810.png)

### Notifications

| **Setting**        | **Description**                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      |
| ------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Email responses to | Determines the individuals or group within your organization to notify every time the form is submitted. You can select to notify:<br /><br />\* **The person who completed the form** — The person who clicked submit on the form.<br />\* **The manager of the person who completed the form** — The manager of the person who clicked submit.<br />\* **The person the form is about** — The subject of the form.<br />\* **The manager of the person the form is about** — The manager of the subject of the form.<br />\* **Specific individuals** — Select from any user at your organization. |

:::hint{type="info"}
[Packages](https://www.charthop.com/pricing/)**:** <font color="#a9a9a9">Basic</font> <font color="#000000">|</font> <font color="#000000">HRIS</font> <font color="#000000">|</font> <font color="#a9a9a9">Headcount Planning | Compensation Reviews |</font> <font color="#000000">Performance | Engagement</font>
:::

[title] Engagement surveys
[path] ChartHop for Administrators/

You can create and implement engagement surveys directly within ChartHop. 

You can set up these surveys for a specific group of employees or everyone in your organization. All survey aspects, including sending and tracking forms, sending reminders, viewing completion, and analyzing data, can be accomplished within one centralized location.

:::hint{type="info"}
Before you can create a survey, create a form with all the questions that you would like to ask must have been set up in ChartHop by users with Owner or Technical owner access. [Learn more.](https://docs.charthop.com/forms)
:::

### Access surveys

You can view existing and create new surveys from the Surveys page.

![Engagement Surveys](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/xrnT7yXY-Hj-CoYDd1HTJ_screenshot-2023-12-19-at-125823-pm.png)

1. From the left sidebar, select **Engagement.**
2. Refine the list in the following ways.
   - Use the Status drop-down list to choose to view only surveys of a certain status.
   - Use the Last modified by drop-down list to view surveys last modified by a particular person.
   - Filter the list by the name of the person who created the surveys.

### Move a survey to a review

ChartHop separated Reviews into Performance Reviews and Engagement Surveys. You can move items between the Reviews and Surveys by doing the following:

1. Go to the **Engagement** **Surveys** page
2. Select the survey that you would like to move
3. Select **Move** from the actions list
4. Confirm the move in the dialog

![](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/UPc1YhvrwcUgui2BuGhZi_screenshot-2023-12-19-at-10308-pm.png)

:::hint{type="info"}
[Modules](https://www.charthop.com/pricing/)**:&#x20;**<font color="#000000">HRIS | </font>**Engagement** | Goals | Performance | <font color="#000000">Compensation Reviews | </font>Headcount Planning
:::


[title] Creating templates
[path] ChartHop for Administrators/People Ops Tools/Letter templates/

You can create a new template from scratch or duplicate an existing template if you want to re-use an existing template.

You'll need to have an intermediate knowledge of HTMl and CSS. Here are some examples to get your started. [Learn more](https://docs.charthop.com/-example-templates).

::Image[]{alt="Creating a new template" src="https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/ul33bh8P313E5vPODR_qG_screen-shot-2022-05-12-at-20617-pm.png" size="50" width="1342" height="1464" position="flex-start" showCaption="false"}

### Create a new template

To create a template:

1. From the left sidebar, select **People Ops Tools.**
2. From the sub-menu, select **Letter Templates.**
3. Select **Create Template**.
4. Name your template by selecting the default template name and editing the text.
5. In the **Editor**, author your content using:
   - **Content**: Create and edit your message with the rich text editor, or with Markdown.
   - **Stylesheet**: Apply CSS stylings to your template. For styling ideas you can check out some of the ones used in our example templates. [Learn more](https://docs.charthop.com/-example-templates).
6. Select **Save**.

:::hint{type="info"}
For more complex templates, or for assistance with any template, [contact a ChartHop representative](#).
:::

### Duplicate an existing template

You can duplicate an existing template if you want to create a new template that is based on something that you've created already.

To duplicate a template:

1. From the left sidebar, select **People Ops Tools.**
2. From the sub-menu, select **Letter Templates.**
3. On the **Letter Templates** page, select the check box of the template you want to duplicate.&#x20;
4. Select **Duplicate** from the toolbar. The duplicate template is created and the name is appended with Copy 1, Copy 2, and so on.&#x20;
5. Select the duplicated template to view it in the editor and rename it.


[title] Key Concepts: Role-based Access
[path] ChartHop for Administrators/Access/User access controls/

ChartHop's Role-based Access Controls enable you to define ***who*** (the user) can do ***what*** (the action) for ***which*** part of the platform (the entity).

- For example, you might say that the **CEO** (the user) is allowed to **read** (the action) the data for all **employees** (the entity) in the system.
- Or you might say the **Head of Recruiting** (the user) is allowed to **create** (the action) **new hires** (the entity) in the system.

To do this, users are assigned a specific role, and those roles contain an explicit set of permissions, which define what that role has access to see and do.

## Permissions and Roles

**Permissions** enable you to either **Allow** or **Deny** access to a specific entity, data point, page, or process inside Charthop. You can read more about Permissions in [Defining a custom permission](https://docs.charthop.com/ZDe_mw-9z4teWhQ5Tmkin).

**Roles** are a collection of Permissions that dictate what a user can and can not see or do inside Charthop. You can read more about Roles in [Defining a custom role](https://docs.charthop.com/VUlQVowhVgys4dPjfhzid).

:::hint{type="success"}
**💡An analogy to help you visualize**

You can think of Permissions as keys that unlock areas of the ChartHop platform. You can think of a Role as the keychain that holds the keys. A Role (keychain) holds many Permissions (keys) that grant or deny access to parts of ChartHop.
:::

## Deny always beats Allow

If a role contains two conflicting permissions, the DENY permission will always win.

For a very simple example, consider a role with the following two permissions:

:::BlockQuote
ALLOW person\:read
DENY person\:read
:::

A user with this role would *not* have access to see any Person data, because the DENY permission "beats" the ALLOW permission.

Let's consider a more nuanced example, such as a role with the following two permissions:

:::BlockQuote
ALLOW job\:read
DENY job\:read fields:\["baseComp"]
:::

In this example, the ALLOW gives the user access to see – read – all fields on job. But the DENY means that this user is *not* allowed to see – read – the field baseComp on jobs. Even though the ALLOW permission technically gives the user access to read *all* job fields, the DENY in this case wins, so this user can see *all* job fields *except* base compensation.

:::hint{type="info"}
[Modules:](https://www.charthop.com/pricing/) HRIS | **Engagement | Goals | Performance |** Compensation Reviews | **Headcount Planning**
:::

[title] Concluding a compensation review
[path] ChartHop for Administrators/Compensation reviews/

You can conclude a compensation review at any time. Concluding the review closes it and removes edit access to all reviewers and approvers, including final approvers. Changes cannot be made to the compensation review after it has been concluded. 

When you conclude a compensation review, you have the ability to include whether the compensation review was concluded with or without final approval.

To conclude a review:

1. Open an existing compensation review. The compensation review must be currently active.
2. Select **Conclude review** at the top right of the screen. The **Conclude comp review** dialog displays.
3. In the **Conclude comp review** dialog, select whether the compensation review cycle is being concluded with or without approval:
   - **Conclude without final approval** - Select this option when the changes proposed in this cycle have not been fully approved and you are closing this compensation review for other reasons. This changes the status of the compensation review to **Closed**.
   - **Conclude with final approval** - Select this option when the final approvers have marked all proposals as reviewed and given their final approval to all proposed changes. This changes the status of the compensation review to **Approved**.
4. Select **Conclude**. This completes and updates the compensation review cycle status to either **Approved** or **Closed**.

### Reopen a closed compensation review

Closed compensation reviews can be reopened, but only owners and final approvers can make changes to the compensation review data.

To reopen a closed compensation review:

1. Open an existing compensation review. The compensation review must be currently closed.&#x20;
2. Select **Reopen review** at the top right of the screen. The **Reopen comp review** dialog displays.
3. Select **Reopen**. The compensation review returns to an active state. Owners and final approvers can make changes to the compensation review.

### Export changes

Once a compensation review is closed, you can export the compensation changes made during the review to a spreadsheet that you can then upload to your payroll system.

To export a spreadsheet with the results of your compensation review:

1. Open an existing compensation review. The compensation review must be currently closed.
2. Select **Export** at the top right of the screen. The **Export spreadsheet** dialog displays.
3. Select **Export**. ChartHop generates a spreadsheet with your compensation data.
4. Once the spreadsheet is done generating, the spreadsheet downloads automatically.

:::hint{type="info"}
You may need to adjust column names in the spreadsheet to match the standards for your payroll system.
:::



:::hint{type="info"}
[Packages](https://www.charthop.com/pricing/)**:&#x20;**<font color="#a9a9a9">Basic</font> <font color="#000000">|</font> <font color="#000000">**Standard*** | **Premium**</font>****

\* Available as an add-on
:::


[title] Add people to a survey
[path] ChartHop for Administrators/Engagement surveys/Adding forms to a survey/

After you select a form, you must select the individuals who are included as participants for that specific form.

The group of participants you established when you first created the survey are included by default. You can apply filters or use Carrot queries to further narrow down the group of recipients. 

The **survey preview&#x20;**&#x73;ection displays a list of all the participants who meet the criteria and are to be included in the survey for that specific form.

![](https://archbee-image-uploads.s3.amazonaws.com/zxjhb7-DqnuzAP-lru1l3-acbvVljF-7olv_X88el1g-20250819-102720.png)

:::hint{type="info"}
To participate in a survey, employees must be members of your organization as well as active users in ChartHop. You cannot include an employee who is not a ChartHop user.
:::

To select which people receive the form:

1. From the left sidebar, select **More** and select **Surveys**.
2. Select your survey by selecting the name of the survey in the list.
3. In the **Survey filters** section, use the filters or define a Carrot query to filter the group of employees to be included as participants. For example, you can filter by department when you are using department-specific forms.
4. Use the filters or a Carrot query to filter the group of employees to be included as participants.
5. Select **Next** to continue.

:::hint{type="info"}
[Modules](https://www.charthop.com/pricing/)**:&#x20;**<font color="#000000">HRIS | </font>**Engagement** | Goals | Performance | <font color="#000000">Compensation Reviews | </font>Headcount Planning
:::


[title] Goal Types
[path] ChartHop for Administrators/The Goals page/

Goal Types define how goals behave across ChartHop. They control how progress is measured, how confidence is reported, how forecasting works, and how progress update reminders are sent.

Configuring Goal Types is the right first step before anyone creates a goal. The types you define determine what options users see when creating goals, what progress looks like across the platform, and how goal data is structured for reporting.

Navigate to **Admin > Configuration > Goal Types** to access this page.



![Goal Types admin view](https://api.archbee.com/api/optimize/CXAjUAezd9VEEVQBIYmdw/jt7mY66g9eKzzC9Ew99ja_image.png "Goal Types admin view")

## Goal Types admin view

The Goal Types page lists all goal types available in the organization. Each row shows:

- **Name** — linked, click to edit
- **Goal Category** — Organizational or Personal
- **Metric-based targets** — target level pills (e.g., Goal, Target, Stretch)
- **Forecast Types** — forecast level pills (e.g., Commit, Most Likely, Best Case)
- **Milestone-based targets** — milestone range (e.g., Not Started to Done)

Select **Create Goal Type** to add a new type.



![Creating Goal](https://api.archbee.com/api/optimize/CXAjUAezd9VEEVQBIYmdw/3OekrE4JMQbBlUb2aGPRz_image.png "Creating Goal")

## Creating or editing a Goal Type

Everything configured in a goal type applies to every goal created with that type. Changes to an existing goal type affect all goals using it, so update thoughtfully.

### Name (required)&#x20;

The label users see when selecting a goal type. Make it descriptive: Company Goal, Sales Quota, Project Initiative.

### Goal Category&#x20;

Radio button: **Organizational** or **Personal**. This determines which section the goal type appears under in the Create Goal dropdown. Organizational types are for company, department, and team-level goals. Personal types are for individual goals that aren't part of the organizational cascade.

### Metric-based goal targets&#x20;

Enable this checkbox to allow goals of this type to include numeric metrics. Define each target level with a label, color, and drag-to-reorder handle. Common examples: Goal, Target, Stretch, Base, Bunny. Select **+ Add value** to add additional target levels. These labels appear in goal metrics, charts, progress updates, and the sidebar throughout the product.

### Enable forecasting&#x20;

Enable this checkbox to allow forward-looking estimates on goals. Configure each forecast type with a type selector (Commit, Most Likely, Best Case), a label, and a color. Select **+ Add Forecast Type** to add more. Forecasting lets goal owners communicate expected outcomes, not just current performance, and drives the forecast lines visible in goal charts.



![](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/1GoSjvCNsxIKgy6vZeJ4U_image.png)

### Milestone-based goal targets&#x20;

Enable this checkbox to track progress through completion stages instead of, or in addition to, numeric metrics. Define **Completion Levels** with a label, numeric value, and color. The numeric value is what drives visual progress indicators across the platform for milestone-based goals. A milestone at "Halfway Done" with a numeric value of 50 contributes 50% progress to the goal's overall progress bar. Set these values intentionally — they affect every progress bar users see in the Goals module, on profile pages, group pages, and in the Data Sheet.

Default completion levels: Not Started (0), Just Started (25), Halfway Done (50), Mostly Done (75), Done (100). Select **+ Add value** to customize.

### Progress updates include confidence levels&#x20;

Enable this checkbox to include confidence level selection in progress updates. Define each **Confidence Level** with a label, numeric value, and color. These levels appear as selectable pills in the progress update form and as colored indicators throughout the Goals module.

Default confidence levels: Off Track (0, red), Mostly Off Track (25, orange), Partly On Track (50, amber), Mostly On Track (75, teal), On Track (100, green).



![](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/6slltlmhF5-M38FR76hTf_image.png)

### Done Levels&#x20;

Enable this checkbox to define how a goal is evaluated when it's closed. Define each **Done Level** with a label, numeric value, and color. This provides a consistent way to assess outcomes after a goal period ends.

Default done levels: Missed (0, red), Deprioritized (10, dark gray), Partial Success (50, orange), Success (100, green).

### Progress updates include comments&#x20;

Radio button with three options:

- **Required** — goal owners must write a comment with every progress update
- **Optional** (default) — comments are available but not required
- **Disabled** — no comment field appears in progress updates

### Send progress update reminders&#x20;

Enable this checkbox to automatically remind goal owners to submit progress updates. No separate Action or workflow setup is needed — reminders are configured directly within the goal type.

Configure the reminder schedule:

- **Time** — hour and am/pm
- **Frequency** — e.g., Certain days of the week
- **Recurrence** — e.g., Every month
- **Days of the week** — checkboxes for Sun through Sat
- **Send message using** — defaults to "Default (Chat if possible, otherwise email)"
- **Message** — rich text field for a custom reminder message body

### Save

Select **Create** to save the goal type and make it available across ChartHop, or **Cancel** to exit without saving.

:::hint{type="info"}
[Modules](https://www.charthop.com/pricing/)**:&#x20;**<font color="#000000">HRIS | </font>Engagement | **Goals** | Performance | <font color="#000000">Compensation Reviews | </font>Headcount Planning
:::



##




[title] Compensation reviews owner FAQs
[path] ChartHop for Administrators/Compensation reviews/

This topic answers frequently asked questions about owning a compensation review in ChartHop.

## General questions

**What information do I need before I begin a compensation planning cycle?**

We recommend identifying the following information before you begin:

- A timeline for your compensation review cycle, including start and end dates
- Criteria for determining employees as eligible for your compensation review
- Your list of reviewers and approvers
- Budget information and how you plan on allocating funds
- The type of data you want your reviewers and approvers to have available during the compensation review cycle (for example, performance review data, last raise data)
- A general knowledge of how compensation reviews work in ChartHop

***

**Once we have access to the newest version of Compensation reviews, will we still have access to our legacy compensation review scenarios?**

Yes - you will continue to have access to your legacy compensation reviews in the form of archived scenarios. No data is deleted; however, we recommend that you archive all open compensation planning scenarios.

***

**If I'm currently running a compensation review cycle using the legacy version, can I switch that cycle to the newest version?**

Unfortunately, no. If you're currently running a compensation review cycle using legacy compensation reviews, you cannot update to the newest version until your current cycle is completed. This will help prevent any interruptions or delays to your current compensation review cycle.

***

**Can a person that is not currently in the Org Chart (such as an HRBP) be the owner of a compensation review?**

Yes - as long as they have the access roles of Owner, org editor, or Compensation viewer assigned in ChartHop.

## Compensation review setup

### Key dates

**Do I have to launch my cycle on the Review starts date?**

No, as the compensation review owner you have access to the **Launch** button whenever and can launch the cycle on a date different from the Review starts date. However, to avoid confusion, ChartHop recommends launching on the Review starts date because that is the date that displays to the user in the timeline.

### Eligible employees and reviewers and approvers

**Are new hires included in my eligible employee list if their start date is during the compensation review cycle?**

It depends on your configuration. ChartHop uses the structure of your org chart on the *Final approval due* date to organize and populate your compensation review cycle. [Learn more.](https://docs.charthop.com/set-up-key-dates)

- If the new hire starts before the Final approval due date, AND you have not set any eligibility exclusions based on start date, then the new hire is included in the eligible employees list.
- If you set up exclusions based on start date (for example, you're excluding employees hired after a specific cutoff date), then the new hire will display in All Employees lists but will not be considered eligible because they have been hired after the cutoff date you specified.

Any employees hired after the Final approval date are automatically excluded from the compensation review cycle.

***

**Can I assign a person as a reviewer when they are not currently in the Org Chart (for example, people business partners)?**

A ChartHop user outside the immediate reporting structure of the employee pod can be reassigned as a reviewer. Please note that this gives the user full access to all sensitive data for employees in that compensation review pod.

The previously assigned manager displays in the **Removed reviewers / reassignments** list in the **Reviewers & approvers** tab. [Learn more.](https://docs.charthop.com/assign-reviewers-and-approvers#KO9tI)

***

**Is there a way to export the list of eligible and ineligible employees?**

Yes - you can use the **Eligibility filter** dropdown to select either **Eligible** or **Ineligible**, then select the **View on Data Sheet** button to automatically create a Data Sheet view populated with the corresponding employees. From there, you can export the list as a .csv file and easily share it with leaders outside the compensation review cycle configuration.

### Budget pools and Guidelines & thresholds

**Can I stop reviewers and approvers from going over budget?**

Budgets will show when they've been exceeded, but as of right now, the user is not locked out of editing their reviewer workbook and from going over budget. Approvers have the ability to reject proposed changes with feedback.

***

**How many budgets can I set up?**

You can set up as many as you'd like, however you may want to consider ease of use and navigation for your reviewers and approvers. Too many budgets can get confusing for your reviewers and approvers.

***

**Are multiple currencies supported for budgets?**

Yes - multiple currencies are supported.

For budgets calculated in percentages:

- Budgets default to the default org currency when there is a mix of different local currencies in the reviewer workbook. For example, when a reviewer workbook contains one employee who is paid in USD (the default org currency) and another who is paid in GBP, the budget displays the total amounts in USD plus the amounts in GBP converted to USD.
- If the reviewer workbook contains amounts that are all in the same currency but that currency is NOT the default org currency, the budget will display in that currency. For example, when the reviewer workbook contains employees who are all paid in GBP, the budget displays totals in GBP.

For fixed budgets, you can indicate the currency in which the budget is represented.

***

**Can I set up a budget calculation using a smart calculation custom field?**

Yes - you can configure a smart calculation custom field to affect your budget and guideline calculations.

***

**Can I allow a budget to calculate amounts based on shares instead of currency?**

Yes - if you use the Planned Grant (Shares) `grantShares` data category instead of the Planned Grant (Value) `grantValue` data category, you can set up a budget calculation using those shares.

***

**Can I make it so that reviewers and approvers can't make any changes outside of the guidelines or target values I've defined?**

Unfortunately, this is currently not possible. However, you can set up your compensation review to flag any values that exceed a defined threshold beyond the guidelines you set up. When looking at any table of employees in the compensation review cycle, you can easily filter to display **Employees with exceptions** to display the employees whose compensation was flagged beyond the guideline threshold you define. [Learn more.](https://docs.charthop.com/establish-guidelines)

### Reviewer workbook

**How do I make editing of a column conditional?**

You can use the **Edit Only if** option when setting up the reviewer workbook to make certain fields/columns editable only under specific conditions. [Learn more.](https://docs.charthop.com/customize-the-reviewer-workbook)

***

**Can I hide columns in the reviewer workbooks based on departments or other filter parameters?**

Yes! You can use the visibility options when setting up the reviewer workbook to control how your columns display. [Learn more.](https://docs.charthop.com/customize-the-reviewer-workbook)

***

**Can I tie promotions into the compensation review?**

If you store promotion data within another field in ChartHop, you can include that field as a column in the reviewer workbook. You can also set up a column, for example: New Title, to be editable in the reviewer workbook. However, please note that there is no Merge to Primary option to store these changes in ChartHop at the conclusion of a compensation review.

***

**How do I display compa-ratio information in my compensation review?**

You can use the `compaRatioMid` data category to display a compensation band's midpoint (the job's base pay, divided by the midpoint of its compensation band, as a percentage).

You can also use the `compaRatioTarget` data category to display the compensation band target (the job's base pay, divided by the target pay of its compensation band as a percentage).

### Preview & Test

**Can I test the entire compensation review cycle before I launch it?**

Yes! You can use the Preview & Test feature to completely test all aspects of your compensation review. You can select to view the compensation review as a specific person, enter compensation changes to test budget calculations and guidelines, and even submit proposed changes to test the approval structure. After you're done previewing and testing, any changes you may have made are deleted.

***

**Do all participants in my compensation review cycle need to be active users in ChartHop for me to preview and test?**

Yes - in order for ChartHop to fully build an accurate preview of your compensation review cycle, your participants must be active users in ChartHop. When you preview & test, a ChartHop invitation is automatically sent to any participants who aren't current ChartHop users (as long as they have valid work email addresses).

Please note, users must only be active users, they don't have to be invited to the compensation review yet.

***

**Does the View as ability in Preview & Test take into account role sensitivity?**

When you preview & test as a specific person, you see information based on what the specific person can see.

***

**Can I test my calculations without using the Preview & Test feature?**

To test your budget and guideline calculations without using the Preview & Test feature, you can select the **Calculate** button directly from the **Budget pools** and **Guidelines & thresholds** tabs in the Cycle settings.

## During a cycle

**As an owner, do I have the ability to see the status of approval chains for various groups?**

Yes, as the owner of a review you can see the entire compensation review timeline, along with the Reviewers and approvers tree and their approval status directly within the **Cycle overview** tab. [Learn more.](https://docs.charthop.com/managing-a-compensation-review)

***

**What happens if a re-org happens or if a manager change happens during an active cycle?**

When a manager who is part of your compensation review cycle departs during the review cycle, ChartHop automatically reassigns their reviews to the next manager in the approval tree structure and notifies you of the change.

If other changes do occur, you have the ability to pause the review and reassign a reviewer or approver within the compensation review **Reviewers & approvers** tab.

***

**As an owner, do I have the ability to go in and make edits/adjustments to proposed changes within a compensation review?**

You can only make or propose changes to compensation when you are also an assigned reviewer. In that case, you can edit compensation for the employees assigned to you for review. If you are not assigned as a reviewer, you cannot make any edits to compensation.

Final approvers have the ability to make adjustments to compensation only at the end of the review cycle once all reviews have been submitted to them for approval.

***

**As an owner, can I give edit access back to a reviewer (for example, when there is a mistake that was already submitted)?**

Approvers have the ability to reject a proposal and send it back to the requester. In your capacity as owner, you can pause the compensation review cycle and reassign the reviews to another reviewer.

***

**How do data integrations work with compensation reviews? For example, what happens when an employee's compensation data is updated within the payroll system during an active compensation review cycle and that updated data flows back to ChartHop?**

Any changes made in the payroll system are updated within the compensation review after it flows back into ChartHop. This helps make sure that your budget calculations are using the latest available data.

The only way to currently prevent any updates to compensation data from happening is by temporarily disabling the payroll app sync for the duration of the compensation review cycle.

***

**Can I add an eligible employee to an already launched Compensation review?**

Yes - you can pause the review and add specific employees to the compensation review. [Learn more.](https://docs.charthop.com/managing-a-compensation-review#ugghD)

***

**Can I exclude an employee from the compensation review after it has already launched?**

Yes - you can pause the review and exclude specific employees who were previously included as eligible. [Learn more.](https://docs.charthop.com/managing-a-compensation-review#ugghD)

***

**Can reviewers see who the final approver is at any stage of the cycle?**

No, reviewers cannot see the identity of the final approver. Only compensation review owners can set up and view who final approvers are.

***

**Do I have to wait until the cycle is over to export to CSV?**

As a compensation review owner, you can export a CSV any time after you've launched a cycle, even while it is currently in progress.

## After a cycle

**My final approvers have not given their approval by marking the proposed changes as reviewed but I need to close the compensation review due to other circumstances. Can I conclude the compensation review?**

Yes - as the compensation review owner, you have the ability to conclude the compensation review and specify whether it was concluded with or without final approval. This gives you the flexibility to conclude a compensation review without waiting for your final approvers.

***

**After a compensation review cycle, can I export a .csv with additional fields that weren't included in the reviewer workbook?**

No - you can only export the field columns that you included in your reviewer workbook configuration.

***

**When a compensation review cycle is complete, do I still have access to the approvals timeline?**

Yes - once a compensation review cycle has been concluded, the **Cycle overview** tab displays in a view-only mode.

***

**Do compensation letters work with this newest version of compensation reviews?**

Yes - you can configure templates to work with the updated compensation values from the newest version of compensation reviews.

***

**Are the history of changes made to a person's compensation tracked?**

ChartHop stores this data in our backend. Future iterations of compensation reviews will surface this data.

:::hint{type="info"}
[Packages](https://www.charthop.com/pricing/): Basic | **Standard**\* | **Premium**

\* Available as an add-on
:::

[title] Onboarding & Offboarding Pages
[path] ChartHop for Administrators/People Ops Tools/

- Onboarding
  - Pre-boarding
    - Configure a data sheet of all people who are currently in pre-boarding
  - Onboarding
    - Configure a data sheet of all people who are currently onboarding
  - Match new hires
    - If new hires imported from your ATS are not matched to jobs, they will show up here.&#x20;
- Offboarding
  - Configure a data sheet of all people who are currently in offboarding

![](https://api.archbee.com/api/optimize/CXAjUAezd9VEEVQBIYmdw/svYqm3EMx53umsNZQMTNs_screenshot-2024-04-04-at-43110-pm.png)

## Setting up monitoring

Every organization has a different criteria for what they want to track during their pre-boarding, onboarding & offboarding process.&#x20;

How to set up monitoring:

1. In the filter box, set the criteria for the people who should be considered to be in that stage. Examples:
   1. `startDateOrg>=today-90` will show all the people who started in the last 90 days.&#x20;
   2. `onboardingStatus="In Progress"` will show all the people who have the custom field `onboardingStatus` listed as In Progress.&#x20;
   3. `is:departing` will show all the people who are leaving the organization, but have not yet passed their end date.
2. In Select Columns, select all the ChartHop fields that are relevant to your Onboarding process. For example:
   1. Basic information like their contact information or who their Onboarding Buddy is.&#x20;
   2. Required Information like documents that need to be uploaded or forms that need to be submitted.&#x20;
3. Click view on data sheet to view an overview of your pre-boarding, onboarding and offboarding process.&#x20;

To get a jumpstart on setting up custom fields you can use the [Onboarding Monitoring Bundle](https://app.charthop.com/bundles/onboarding-monitoring).&#x20;

![](https://api.archbee.com/api/optimize/CXAjUAezd9VEEVQBIYmdw/sDSIvpx4Dg-mvjUjAAMt7_screenshot-2024-04-04-at-44928-pm.png "Example data sheet setup with Onboarding Monitoring Bundle")

# Onboarding & Offboarding Tasks

Using [Automated Actions](docId:6k2uHP22MlgnhaOvzQ0yX), you can send Onboarding and Offboarding tasks.&#x20;

### Setting up Tasks

Create an Action and within the action, select **Category > Onboarding or Offboarding.**&#x20;

::Image[]{src="https://api.archbee.com/api/optimize/CXAjUAezd9VEEVQBIYmdw/KHLPmkHVf9mjG0s_h5TSB_screenshot-2024-04-04-at-45202-pm.png" size="44" width="492" height="464" position="center" showCaption="false"}

Set an appropriate [Automated Actions](docId:6k2uHP22MlgnhaOvzQ0yX) for your Action.&#x20;

Create a **Send Task** Action step and fill in the relevant details.&#x20;

::Image[]{src="https://api.archbee.com/api/optimize/CXAjUAezd9VEEVQBIYmdw/hJw0ROZz6AATUesfM9si7_screenshot-2024-04-04-at-45311-pm.png" size="64" width="1300" height="800" position="center" showCaption="false"}

When sent, these tasks will be categorized as either Onboarding or Offboarding and can be filtered within the Tasks page on the profile.&#x20;

![](https://api.archbee.com/api/optimize/CXAjUAezd9VEEVQBIYmdw/3TbJMFt2o7125lKwHSl7Z_screenshot-2024-04-04-at-45750-pm.png)

:::hint{type="info"}
[Modules](https://www.charthop.com/pricing/)**:&#x20;**&#x48;RIS | Engagement | Goals | Performance | Compensation Reviews | Headcount Planning
:::

[title] Customize the notification message
[path] ChartHop for Administrators/Engagement surveys/Adding forms to a survey/

You can customize the notification that you send out to your reviewers when they receive the form you selected. 

You can add additional instructions for your reviewers or remind respondents  expectations for the review. Any due date you set will be included in the automatically generated part of the notification. This message displays to reviewers when they are invited to participate in the review.

![](https://archbee-image-uploads.s3.amazonaws.com/zxjhb7-DqnuzAP-lru1l3-sctLOwR8jE-tXuL6G11ML-20250819-102847.png)

:::hint{type="info"}
When you’re integrated with Slack, ChartHop will notify the employees via Slack otherwise they will be notified via email. [Learn more.](https://docs.charthop.com/slack)
:::

A preview of your message displays at the bottom of the page.

This is an optional step. Once you’re done customizing the message, select **Next** to continue.

:::hint{type="info"}
[Modules](https://www.charthop.com/pricing/)**:&#x20;**<font color="#000000">HRIS | </font>**Engagement** | Goals | Performance | <font color="#000000">Compensation Reviews | </font>Headcount Planning
:::


[title] About ChartHop Signatures
[path] ChartHop for Administrators/People Ops Tools/Signatures/

Signatures in ChartHop are legally binding e-signature that is in complicance with the United States Electronic Signatures in Global and National Commerce Act (E-Sign Act).&#x20;

# Signature Block & Identifiers

When all signers have signed the document, it is "fully executed." On the document you will see two details imprinted:

### ChartHop Signed \{ID} — Unique Signature request identifier

This ID provides tracability for the signature back to ChartHop's electronic records. It is required for e-signature compliance.&#x20;

::Image[]{src="https://archbee-image-uploads.s3.amazonaws.com/zxjhb7-DqnuzAP-lru1l3--0g8RlScBfwckVI7HDjlr-20250227-164529.png" size="76" width="1566" height="519" position="center" showCaption="false"}

### Signature Block

The  signature block is meant to mirror a typical signature section of a document. It contains 4 piece of information:

1. **Signed name** — this is the exact name that the signer used to sign the document. So if Jonathan "Jon" Smith signed with their preferred first name "Jon", then "Jon Smith" will be displayed.&#x20;
2. **Job title&#x20;**— this is the user's current job title in ChartHop at the time that they signed the document.&#x20;
3. **Date & time of signature&#x20;**— This is when the document was signed in the organization's default timezone.&#x20;
4. **Unique signature identifier&#x20;**— This is a unique ID that allows the signature to be linked to the document and signature request in ChartHop's records. It is required for e-signature compliance.&#x20;

![](https://archbee-image-uploads.s3.amazonaws.com/zxjhb7-DqnuzAP-lru1l3-B_jvImmwpVl6iq16cdnvu-20250227-163846.png "Signature Block")

# Signature compliance details

By default ChartHop's signature process qualifies as an simple electronic signature (SES).  To align with the requirements of SES, the signing experience and signature includes the following:

**Intent to sign —** The signer in ChartHop must type their name and click the "Sign Document" button both of which are signals of intent to sign.&#x20;

**Consent — &#x20;**&#x42;y logging into ChartHop to review and sign the document, the user is consenting to use electronic signatures. Text below the signature box also lists: "All parties agree that this document may be signed electronically."

**Record retention&#x20;**— ChartHop records a unique signature request ID that is imprinted at the top of each PDF with the text: "ChartHop Signed \{ID}." At any time, that ID could be retreived by ChartHop to retreve the record of the signature. The signature request can tell you: the Time and date the signature was created and who requested it.&#x20;

**Association with the record&#x20;**— The signature consists of 4 elements: A graphic represtation of the signee's name, the signee's job title (if applicable), the date and time of signature in the organization's default time zone, and a ChartHop signature id. The ChartHop signature id is a generated string that identifies the signature and associates it with the specific document.

**Opt-out clause&#x20;**— The signer has the ability to [decline to sign](docId\:SFNfl4H1Rig6XCgKL43sc) by selecting the: "Decline to sign" option adjacent to the "Sign Document" button.  Instructions on how to decline to sign are availible in the ChartHop documention.&#x20;

**Signed copies&#x20;**— All signers will receive an email with a fully executed copy of the document attached. The signed documents are also availible for download within ChartHop. For more details see [view your signed document](docId\:SFNfl4H1Rig6XCgKL43sc). &#x20;



ChartHop also supports [Qualified Electronic Signatures (QES)](docId\:joXqrftT0VsO2uZU1Vtxx) via an add on. Contact the ChartHop team if you would like to add QES.&#x20;



### ChartHop Signature uses

CharHop signatures are great for use cases where simple electronic signature or [Qualified Electronic Signatures (QES)](docId\:joXqrftT0VsO2uZU1Vtxx) may be used. For documents where "Advanced" electronic signature are needed, please work with a different provider for now.&#x20;

ChartHop Signatures should also not be used for any documents that may not permitted to be signed electronically, whether by law or otherwise, such as:&#x20;

i. Wills, codicils and testamentary trusts

ii. Court documents

iii. Family law documents

iv. Where prohibited by contract

v. Where both parties have not provided consent

[title] View survey responses
[path] ChartHop for Administrators/Engagement surveys/

After you have collected responses for a survey, you are able to view a summary responses immediately.

![](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/0tfXY2X_fGX5BC9qkTvWS-20251006-171139.png)

## View a summary of survey responses

To view a summary of the survey responses:&#x20;

1. From the left sidebar, select **Engagement.**
2. Select the Survey that you want to view.&#x20;
3. Select the **Responses** tab. The **Summary&#x20;**&#x73;ub-tab will be selected automatically.&#x20;
4. If your survey has more than one form, select the form in the dropdown.&#x20;

All available responses to the survey will be displayed in a default chart type.&#x20;

Net promoter questions will also display the NPS value for that question.&#x20;

If you would like to do additional analysis or share the responses with others, you can copy the response to a  [Dashboard.](docId\:kA8-kvT0AUi_ekF7MECLD)

![](https://app.archbee.com/api/optimize/CXAjUAezd9VEEVQBIYmdw/62aWonwLkVEhlPl2o7I9b-20251006-172747.png "Create as Dashboard")

## Create a Dashboard of responses

To create a [Dashboard](docId\:kA8-kvT0AUi_ekF7MECLD) of the survey responses:&#x20;

1. On the **Responses&#x20;**&#x74;ab of the **Survey.**
2. Click the **Create as Dashboard** button.&#x20;
3. A dashboard will automatically be created using the default charts for each question. Within the dashboard, you can then modify the chart type, add headers & text blocks, reorganize and then share. If you apply a **Group By** — that will be copied over as well.&#x20;

![](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/8_DZJqvP7Zj_FdJOhfqpe-20251006-172729.png)

### Copy chart to dashboard

If you just want to bring over an individual chart, you can also copy a chart to a dashboard.&#x20;

1. On the **Responses&#x20;**&#x74;ab of the **Survey.**
2. Click the ⠇menu button. Then select **Copy to Dashboard**. &#x20;
3. In the Copy to Dashboard dialog, select the **Dashboard** that you would like to copy the chart to.&#x20;
4. Select **Copy Chart**. The chart will then by added to the end of the Dashboard



![](https://app.archbee.com/api/optimize/CXAjUAezd9VEEVQBIYmdw/9qQSWVrtTrSsAsfTI474J-20251006-171437.png "Sheet view of Non-Anonymous Survey Responses")

## View individual form responses

To view individual survey responses:&#x20;

1. From the left sidebar, select **Engagement.**
2. Select the Survey that you want to view.&#x20;
3. Select the **Responses** tab.&#x20;
4. Select the **Data Sheet or Individual&#x20;**&#x73;ub-tab.&#x20;

![](https://app.archbee.com/api/optimize/CXAjUAezd9VEEVQBIYmdw/kadWNDJLDfQxwB8wUQJxd-20251006-171515.png "Individual Response view of Non-Anonymous Survey Responses")



:::hint{type="info"}
﻿﻿[Roles](https://docs.charthop.com/user-roles-and-permissions): Owner | Technical owner | People Ops Admin
:::


[title] Adding forms to a survey
[path] ChartHop for Administrators/Engagement surveys/

Once you’ve created a survey, you can select it from the **Engagement Survey** list.&#x20;

When you first open your survey, it won't have any fields or tasks associated with it. You must first add a form to the survey.

:::hint{type="info"}
Forms are made up of built-in and custom ChartHop fields used by your organization to capture and store data. You can use these fields to create performance survey-specific forms to use in the survey. [Learn more.](https://docs.charthop.com/forms)
:::

You can add multiple forms to each survey. For example, you may send a slightly different form to certain departments.  When you add a form, you have the ability to specify the group of employees who will receive that form based on their information.

Adding a form to a survey involves the following steps:

1. Selecting a form for your survey
2. Adding people to your survey
3. Customizing the notification message for your survey
4. Reviewing and sending out the form to your participants



### Setup a recurring survey

You can also set up a recurring survey using [Automated Actions](docId:6k2uHP22MlgnhaOvzQ0yX).&#x20;

**To set up a recurring survey:&#x20;**

1. Go to the survey
2. Go to the Automated Actions Tab
3. Create an Action, name the action for the survey
4. Link the Action to your Survey
5. Create a schedule for the Action
6. Add a step for sending the Form and select the Form you want to send.&#x20;
7. Activate the action. &#x20;




[title] Anonymous and De-Identified Surveys & Forms
[path] ChartHop for Administrators/People Ops Tools/Forms/

## Overview

When configuring a form in ChartHop, you can select from 3 anonymity options the survey:

- **Identified** - Linked to a person and their demographic information
  - The identity can be hidden from certain peple using the "Who can see the identity of the respondent?" settting.&#x20;
- **De-Identified&#x20;**- Hide identity, but allow certain specific demographic information and limit reporting to be stored on the form response.&#x20;
- **Anonymous&#x20;**- Not linked to any personally identifiable information

![](https://archbee-image-uploads.s3.amazonaws.com/zxjhb7-DqnuzAP-lru1l3-iZjy9604OtwD1HWAXxhkx-20241120-005532.png "*Example fields listed")

:::hint{type="info"}
[Modules](https://www.charthop.com/pricing/)**:&#x20;**<font color="#000000">HRIS | </font>**Engagement** | Goals | Performance | <font color="#000000">Compensation Reviews | </font>Headcount Planning
:::

# De-identified Forms

De-identified forms are the most common type that is used in surveys. They give an individual who completes the survey anonymity while allow the administrators to do analysis at a group level in order to identify trends within demographic groups.&#x20;

## Configure De-identified forms

1. Go to **Admin > Modules**
2. Scroll to **Engagement >** **De-identified forms**

### Setup recorded demographic fields

To set the recorded demographic field that you would like to collect within your de-identified surveys:

1. Add and remove fields from the list of [Recorded fields](docId\:kExBcKK0PLhmiFv1NPCqF)&#x20;
   1. These changes will only effect *future* form responses. If you would like them applied to previous form responses, please contact ChartHop.&#x20;
2. Set your [Minimum group size](docId\:kExBcKK0PLhmiFv1NPCqF)
3. Click the **Save settings** button.&#x20;

By default the felds are:

- [Department](docId\:q2akSYlaw1MCsm4g3qXNf)
- [Location](docId\:EnZZGS8UqNOw31_dAR1Nd)
- [Team](docId\:dSuEsDx8gmtOSIdyDkkaT)
- [Employment Status](docId:6uFhbhJVNe8ZKghwARKEY)
- [Manager or IC](docId:17dPHpP5--lRgrgnOriHD) — Based on [Manager](docId:5HR3V0Wd_cU3qtaW7PVNq)
- Tenure range — Based on [startDate](docId:42mjd_qk-WtZOfHl89hjU)
- [Gender](docId\:a46EQ6WXWCAf1SqtNcnAD)
- [Ethnicity](docId\:ufzPsqoy6l0ZOPjDVZFGQ)
- Age range — Based on [Birth Date](docId\:Dxc5df3krjYjg01o0X6Gm)
- [Generation](docId\:kad26Mv0o_xaQ-5H9RBjU) — Based on [Birth Date](docId\:Dxc5df3krjYjg01o0X6Gm)

You are able to add any Single Select, Multi-Select or [Smart Bucket](docId\:XNd9irlWsHFCeXmwwkSbA) field as additional fields.&#x20;

You may also add the [Managers](docId\:pUP93f-_7bcs0fsqn19sJ) field. This allows you to create a grouping of results for everyone that [Reports Up to](docId\:LJmO1kDmKS6yfWlPCGzzX) a certain person (or the current viewer of a dashboard).&#x20;

Fields that contain clearly identifiable information like name, email or other is explicitly not allowed to be added to de-identified surveys.&#x20;

:::hint{type="info"}
The demographic data will be recorded **on the date of the form submission**. This way if the historical data changes, then form results will not change.&#x20;

If you are having issues with the demographic data not aligning to your expectations, please contact ChartHop support.&#x20;
:::

### Set your mimimum group size

In order to protect anonymity, ChartHop will categorize demographics that fall below our limit as "Other."&#x20;

For example, if we are grouping by Department with a limit of `5`, the results:

- 10 Responses from Engineering ➡️ Displays as "Engineering"
- 10 Responses from Sales           ➡️ Displays as "Sales"
- 5 Responses from Support        ➡️ Displays as "Support"
- 4 Responses from Marketing     ➡️ Displays as "Other"
- 2 Responses from Operations   ➡️ Displays as "Other"

The default minimum sample size is 5 responses. The minimum allowed is 3 responses.&#x20;



## De-identified Form Results

### Group results by demographic fields

To view your results by the demographic fields:

1. Go to th&#x65;**&#x20;Form or Survey&#x20;**&#x77;here you want to view results
2. Go to **Responses > Summary**
3. Use the Group by dropdown to select a field to group and analyze the results by

### Understanding the "Other" Grouping

If a demographic group does not reach the minimum group size, then they will be grouped with all of the other demographic groups that have not met the minimum group size as "Other."  See the example above.&#x20;

In order to preserve anonymity, if the "Other" grouping only consists of a single group below the minimum group size then it is combined with another identified group in order to avoid the ability to infer identity.&#x20;

For example, insted of presenting the responses as:

- 25 Male&#x20;
- 35 Female&#x20;
- 2 Other&#x20;

Where it would be easy to infer that the "Other" is Non-Binary. The "Other" results will be grouped with a named group in order to not isolate those responses:&#x20;

- 27 Male + Other
- 35 Female&#x20;

### Exporting De-identified Survey Responses

As the owner of a survey, you are able to [export form responses](docId\:qbDlkA-YzjmOZHsqLFW-K). For a de-identified survey, this export will include demographic information with the minimum sample size limits applied across the entire dataset.&#x20;

To export form responeses:

1. Go to th&#x65;**&#x20;Form or Survey&#x20;**&#x77;here you want to view results
2. Go to **Responses > Summary**
3. Click the download button, then **download the CSV**.&#x20;

# Anonymous Forms

Anonymous forms allow users to submit a form and have the response recorded without any ability to link it back to them. This ensures complete anonymity for the submitter.&#x20;

To setup an anonymous form:

1. Go to the **Form > Settings**
2. **Access & Anonymity** — "How should the identity of the respondent be recorded and displayed?"
3. Select **Anonymous**

You will be able to view the responses to an anonymous form within the form, survey or review, but that is the only location.&#x20;




[title] Goal Targets
[path] ChartHop for Administrators/The Goals page/

Every goal in ChartHop needs a way to measure progress. That's what targets are for. A target defines what success looks like for a goal - the specific outcome, number, or milestone that tells you whether you got there.

If you use an OKRs framework, targets are your **key results** - the measurable signals that tell you whether you achieved the objective.

Goals can have multiple targets. A single goal might track two metrics and three milestones at the same time, each with its own progress. ChartHop rolls these up into an overall progress percentage for the goal.

From the goal detail view, you add targets using two separate actions in the sidebar: **+ Add Milestone** and **+ Add Target Metric**. These represent two distinct ways of measuring progress.

## Milestones

Milestones represent qualitative work that either gets done or doesn't. Use a milestone when success is defined by completing a specific thing rather than hitting a number - for example, "launch new pricing page", "complete compliance audit", or "roll out onboarding process to all managers".

Each milestone has:

- **Description** - what needs to be completed
- **Due date** - defaults to the goal's end date, but can be set independently to sequence work within the goal period
- **Status** - updated via progress updates (e.g., Not Started, In Progress, Complete)

Milestones are added inline directly on the goal detail page. A goal's overall progress accounts for how many milestones have been completed relative to the total.

## Target Metrics

Target metrics track progress toward a specific number. Select **+ Add Target Metric** from the sidebar to open the Target Metric modal.

### Metric type

Choose the type that matches what you're measuring:

| Type        | Use when...                                                                          |
| ----------- | ------------------------------------------------------------------------------------ |
| **Integer** | You're tracking a whole number, e.g., number of customers, headcount, tickets closed |
| **Money**   | You're tracking a currency value, e.g., ARR, pipeline, revenue                       |
| **Percent** | You're tracking a percentage, e.g., retention rate, quota attainment, NPS            |
| **Decimal** | You're tracking a number that may include decimals, e.g., a ratio or score           |

### Goal Direction

Set which direction represents progress:

- **Maximize** - higher is better (e.g., revenue, headcount, retention)
- **Minimize** - lower is better (e.g., bug backlog, churn, time to fill)
- **Closest** - as close to the target value as possible (e.g., a budget figure, a target ratio)

### Target values

The numeric goal to hit. Depending on how your admin has configured the goal type, you may be able to set multiple target levels - for example, a Base target (minimum acceptable), a Goal target (expected outcome), and a Stretch target (aspirational). Each level gets its own value.

### Starting value

An optional baseline to measure progress from. If left blank, ChartHop uses the metric's value at the goal start date as the baseline.

### Manually entered vs. automatically calculated

Under **Goals calculated by**, choose how the current value gets tracked:

**Manually entered** - you or your team submit the current value as part of each progress update. This is the right choice when the data lives outside ChartHop, or when the metric requires judgment to calculate.

**Automatically calculated** - ChartHop calculates the current value automatically using a Carrot expression connected to your org's data. The Actual value in progress updates becomes read-only, updated on a recurring schedule. You only need to enter a Forecast.

Automatically calculated metrics are useful for goals tied to data already in ChartHop - for example, headcount, pipeline values from a connected Salesforce integration, or support ticket counts from Zendesk.

:::hint{type="warning"}
**Automatically calculated metrics use the goal creator's permissions.** The calculation runs using the identity of the person who originally created the goal, not the goal owner or the person viewing it. If the expression relies on data that requires specific access - for example, data visible only to certain roles - the goal must be created by a user who has that access. Changing goal owners does not change whose permissions are used. See [Creating and Managing Goals](https://docs.charthop.com/creating-and-managing-goals) for more detail.
:::

## Multiple targets on one goal

A goal can have any number of targets, and milestones and metrics can be combined freely. Each target tracks independently.

When a goal has multiple metric targets, each appears as its own tab in the progress chart in the goal detail view, and as its own row in the progress update form. Overall goal progress is the average completion percentage across all targets.

Use multiple targets when a single number doesn't fully capture success. For example, a goal to "improve customer health" might combine a retention rate metric, an NPS metric, and a milestone to complete a customer segmentation project.

:::hint{type="info"}
[Modules](https://www.charthop.com/pricing/)**:&#x20;**&#x48;RIS | Engagement | **Goals** | Performance | Compensation Reviews | Headcount Planning
:::


[title] Goals Detail View
[path] ChartHop for Administrators/The Goals page/

The goal detail view is where a single goal comes fully into focus. It brings together context, ownership, progress, and evidence so teams understand not just what the goal is, but how it's doing and why.



![Metric based Goal](https://api.archbee.com/api/optimize/CXAjUAezd9VEEVQBIYmdw/3ZQaPTlipM0L3YloLbkGk_image.png "Metric based Goal")

## Header

At the top of the page, a breadcrumb shows the goal's location: **\[Org] > Goals > \[Goal Name]**. If the goal has a parent, a pill below the breadcrumb shows the parent goal name and its current confidence dot. Selecting it navigates to the parent.

The top bar also shows:

- **Sensitivity badge** (e.g., Org Public) with a share icon to open sharing settings
- **Supporter avatars** with a count of additional collaborators
- **Help achieve goal** — lets you request to contribute to the goal
- **Edit Goal** — opens the Edit Goal modal

## Progress and confidence

Below the header, the goal shows its current **progress percentage** and **confidence pill** side by side. A full-width progress bar sits below. On the right, a **days remaining** countdown shows how much time is left in the goal period.

## Sidebar

The right sidebar provides context and quick actions throughout the detail view.

**Primary actions:**

- **Progress Update** (dark button) — opens the inline progress update form
- **+ Target Metric** — opens the Target Metric modal (appears on metric-enabled goals)
- **+ Milestone** — adds a milestone inline (appears on milestone-enabled goals)
- **+ Sub-Goal** — opens the Create Goal modal with parent pre-filled

**Context fields:**

- **Metrics** — lists each metric with Actual value (and progress %), Goal target, and additional target levels (e.g., Base, Bunny). Shown on metric-based goals only.
- **Summary** — a written description of the goal. On top-level parent goals, ChartHop may surface an AI-suggested description to help get started.
- **Owners** — avatars and names of goal owners
- **Supporters** — avatars and names of goal supporters
- **Groups** — colored department pills for each group tagged on the goal
- **Timeline** — date range with total days and percentage elapsed (e.g., "90 days — 88% elapsed")

## Goal Target Progress

For metric-based goals, a **Goal Target Progress** chart visualizes performance over time. When a goal has multiple metrics, tabs above the chart let you switch between them.

Each chart shows:

- **Actual** (solid light blue) — performance to date
- **Goal** (solid purple) — the target value
- **Forecast** (dashed) — the projected outcome
- Additional target and forecast lines as configured in Goal Types (e.g., Base, Bunny, Commit, Most Likely, Best Case)

A vertical dashed "Today" line marks the current date. The forecast line extends to the end of the goal period.



![Milestone based Goal](https://api.archbee.com/api/optimize/CXAjUAezd9VEEVQBIYmdw/uNhc46OA2wNbcbaaJ00TD_image.png "Milestone based Goal")

## Milestones

For milestone-based goals, a **Milestones** section replaces the progress chart. Each milestone row shows its status pill, description, due date, and edit and delete icons.

Select **+ Milestone** to add a new milestone inline — no modal opens. A new row appears at the bottom of the list with a description field and a due date that defaults to the goal's end date. Enter the description and confirm with the checkmark, or cancel with the × icon. Milestone due dates can be set independently to sequence work within the goal period.

To update a milestone's status, submit a progress update (see below).

## Sub-goals

Sub-goals appear in a table within the goal detail view with columns for Name, Owners, Confidence, Progress, and Goal. Each row links to the sub-goal's own detail view. Select **+ Sub-Goal** from the sidebar to add one.

## Progress Updates

Progress updates are the narrative layer of the goal. The update form opens **inline** within the goal detail page — not in a modal. The rest of the page stays visible and scrollable, so you can review metrics, milestones, previous updates, and sidebar context while composing a new update.

**For metric-based goals**, the update form includes:

- **Update Date** — defaults to today, editable for backdating
- **Metrics table** — one row per metric showing Metric name, Actual, Goal, and Forecast&#x20;
  - For automatically calculated metrics: Actual is read-only (pulled from the connected data source). Enter a Forecast value.
  - For manually entered metrics: Actual is an editable field. Enter both Actual and Forecast values.
- **Overall Confidence** — select one: On Track, Mostly On Track, Partly On Track, Mostly Off Track, Off Track
- **Mark Goal as Done** — checkbox to close the goal from this update
- **Comment** — rich text field for narrative context (required, optional, or disabled per goal type configuration)

**For milestone-based goals**, the update form includes:

- **Update Date** — defaults to today, editable
- **Milestones** — each milestone listed with a status dropdown to update independently
- **Overall Confidence** — same five-option selector
- **Mark Goal as Done** — checkbox
- **Comment** — rich text field

Select **Submit** to save the update. Updates are timestamped and preserved over time, creating a living record of decision-making. Each previous update shows the author, date, a confidence pill, a snapshot of all metric or milestone values at the time, and the written comment.

## Adding a Target Metric

Select **+ Target Metric** from the sidebar to open the Target Metric modal. This is where you define what is being measured on a metric-based goal.

| Field                   | Description                                                                                                                                                                                                |
| ----------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Label**               | The name of the metric, e.g., "Service Uptime" or "Monthly Active Users"                                                                                                                                   |
| **Type**                | Integer number, Money, or Percentage                                                                                                                                                                       |
| **Goal Direction**      | Maximize (higher is better), Minimize (lower is better), or Closest (as close to target as possible)                                                                                                       |
| **Target Values**       | Set the numeric target for each level configured in the goal type (e.g., Goal: 95)                                                                                                                         |
| **Goals calculated by** | Manually entered, or Automatically calculated                                                                                                                                                              |
| **Carrot Expression**   | Appears when Automatically calculated is selected. Enter a Carrot expression referencing a Data Model table, e.g., db.goalsMetrics.metric\['Support'].value. See the Carrot reference for syntax guidance. |
| **Starting Value**      | Optional baseline value for progress calculation                                                                                                                                                           |

Select **Target Metric** to save. A goal can have multiple metrics of mixed types — some automatic, some manual. Each appears as its own tab in the progress chart and its own row in the progress update form.

:::hint{type="info"}
[Modules](https://www.charthop.com/pricing/)**:&#x20;**<font color="#000000">HRIS | </font>Engagement | **Goals** | Performance | <font color="#000000">Compensation Reviews | </font>Headcount Planning
:::

##




[title] Forms
[path] ChartHop for Administrators/People Ops Tools/

![](https://archbee-image-uploads.s3.amazonaws.com/zxjhb7-DqnuzAP-lru1l3-jlUFclNGLgyK-WxTSxnpq-20241121-194522.png)

Forms are a foundational piece of people operations processes. From [onboarding](docId\:ePwhC52aP9PJNauBSHamL) to weekly 1:1s to [Performance reviews](docId\:pgai8TVrVYWmDcEAnerwg), [Engagement surveys](docId\:F_yJDEM_cM1J9XlNG2fZK), and [Shoutouts](docId\:AEXw83bI_tp-_X30oCYyr), they are often the best way to collect information, feedback, or requests from your employees.

You might’ve turned to Google or Microsoft Forms for quick tasks or used disparate systems for performance and engagement. ChartHop forms allow you to centralize all the workflows in one system, alongside the rest of your people data.&#x20;

## Section overview

This section includes everything you need to know about:&#x20;

- [Creating a form](docId\:FA8qvxE2RIdH9vKxl6SHW)&#x20;
- &#x20;[Configuring form settings](docId:0i0EwWz9bTFhzdvsMbPYZ)&#x20;
- [Anonymous and De-Identified Surveys & Forms](docId\:kExBcKK0PLhmiFv1NPCqF)&#x20;
- [Distributing forms](docId\:ZO8ZHb5PqnjvTJnCLAO0v)&#x20;
- [Form responses workflows](docId:_QUlJLsN6BsALsltpaOoX)&#x20;
- [Form responses](docId\:qbDlkA-YzjmOZHsqLFW-K)&#x20;
  - [Form Response Access & Visibility](docId\:qbDlkA-YzjmOZHsqLFW-K)&#x20;
  - [Importing & Exporting Form Responses](docId\:qbDlkA-YzjmOZHsqLFW-K)&#x20;
- [Sharing form responses with your organization](docId\:k3omLGLAaSLiyLYFoGlOR)&#x20;



### Forms Use cases

To see the best uses case of ChartHop forms.[ Take a look at the forms-related bundles](https://app.charthop.com/bundles?tab=available\&tags=%F0%9F%93%8B%C2%A0Forms):&#x20;

| **Form Examples**                               | **HRIS** | **Performance** | **Engagement** |
| ----------------------------------------------- | -------- | --------------- | -------------- |
| About Me (Light Onboarding)                     | ✅        | ✅               | ✅              |
| 1:1 Forms                                       | ✅        | ✅               | ✅              |
| Shoutout (Recognition)                          | ✅        | ✅               | ✅              |
| Onboarding Buddy Program                        | ✅        |                 |                |
| Pre-boarding Forms                              | ✅        |                 |                |
| Onboarding information collection               | ✅        |                 |                |
| 360 Reviews<br />(Peer, Upward, Downward, Self) |          | ✅               |                |
| Direct Feedback (Hide identity)                 |          | ✅               |                |
| Goal Setting & OKRs                             |          | ✅               |                |
| Anonymous feedback                              |          |                 | ✅              |
| Employee Engagement Survey                      |          |                 | ✅              |
| Pulse Survey                                    |          |                 | ✅              |
| 30, 60, or 90 Day Onboarding Survey             |          |                 | ✅              |
| Exit Survey                                     |          |                 | ✅              |
| Anonymous Executive Questions                   |          |                 | ✅              |

![](https://archbee-image-uploads.s3.amazonaws.com/zxjhb7-DqnuzAP-lru1l3-R2-u2f4kh3T-d54hA4V01-20241125-161527.png)

To view and complete forms, your employees must have access to ChartHop. For example, you can't send forms to contractors that don't access to ChartHop. See more about [inviting users to ChartHop](docId\:geKO2l3uNeTWyIDSysJfG).&#x20;



## View only forms

![](https://archbee-image-uploads.s3.amazonaws.com/zxjhb7-DqnuzAP-lru1l3-d9MmXWD7e16TKMC87T8c5-20250616-131743.png)

You may have view-only access to forms if you are a ChartHop customer with [ChartHop Basic](docId\:LLf74n86sMAOLm4IXDVnq) or have installed the [Lattice Integration](docId\:oCmD8wLK4xADhbq8BhCse) or another app that imports form data. With view only forms, you can view [form responses](docId\:qbDlkA-YzjmOZHsqLFW-K), but you cannot change anything about the forms.&#x20;



:::hint{type="info"}
[Packages](https://www.charthop.com/pricing/)**:&#x20;**<font color="#a9a9a9">Basic</font> <font color="#000000">| </font><font color="#000000">**HRIS**</font> <font color="#000000">|</font> <font color="#a9a9a9">Headcount Planning | </font><font color="#a9a9a9">Compensation Reviews | </font><font color="#000000">**Performance** | </font><font color="#000000">**Engagement** </font>
:::

:::hint{type="info"}
﻿﻿﻿[﻿](https://www.charthop.com/pricing/)****[﻿Roles:](https://docs.charthop.com/user-roles-and-permissions)  Owner | Technical owner | People Ops Admin
:::


[title] Impact Dashboard
[path] ChartHop for Administrators/Compensation reviews/Setting up a compensation review/

:::hint{type="warning"}
**Alpha feature.** The Impact Dashboard is currently available to select customers in Alpha. Functionality and configuration options may change before general availability.
:::

## Overview

The Impact Dashboard gives cycle owners and leadership a finance-level view of the aggregate impact of a compensation review cycle. Where the Cycle Overview answers "who has submitted?", the Impact Dashboard answers a different question: **what is the overall financial and organizational impact of the changes proposed in this cycle?**

All data on the Impact Dashboard is scoped to each user's access permissions. A manager who can see 10 employees in the cycle will see KPIs, budget breakdowns, and pivot table rows calculated from those 10 employees only. No data is visible beyond what a user is already permitted to view.

***

## Accessing the Impact Dashboard

The Impact Dashboard appears as a tab inside an active compensation review cycle. The tab order is:

**Cycle Overview > Changes and Approvals > Full Team Overview > Impact Dashboard > Audit Log**

The tab is visible to anyone with access to the cycle, subject to the visibility configuration set by the cycle owner (see [Configuring the Impact Dashboard](docId\:pdPOA8dk7FCkulW2EkjYS) below). It is also available when viewing a cycle in preview or test mode.

***

## KPI Summary Cards

The top of the dashboard shows a row of up to four KPI cards, each summarizing a key dimension of the cycle's impact.

| Card                     | What it shows                                                                        | Notes                                                                                                                                                     |
| ------------------------ | ------------------------------------------------------------------------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Total Cost Impact**    | Sum of compensation changes, percentage increase, and pre/post values                | The source field (typically Base Compensation) is configurable in Cycle Settings. Hidden automatically if the cycle does not use a compatible base field. |
| **Budget Utilization**   | Total budget used vs. allocated across all pools, plus remaining amount              | Hidden automatically if no budget pools are configured for the cycle.                                                                                     |
| **Employees Impacted**   | Count of unique employees with active changes, as a percentage of eligible employees | Shown by default.                                                                                                                                         |
| **Guideline Deviations** | Count of employees with deviations, as a percentage of impacted employees            | Shown automatically only when compensation guidelines are configured for the cycle. Hidden otherwise.                                                     |

The KPI row reflows dynamically. If Guideline Deviations is hidden, for example, the remaining cards expand to fill the row.

Each card (except Guideline Deviations) can be toggled on or off in Cycle Settings.

***

## Cost Waterfall Chart

The waterfall chart visualizes how compensation spend moves from the current state to the post-cycle run rate. Two view modes are available:

- **By Type:** Breaks down changes by category, including Current Comp Spend, Merit/Base Increases, Promotions, and Post-Cycle Run Rate.
- **By Budget Pool:** Shows the same flow broken out by each configured budget pool.

Switch between views using the toggle above the chart.

***

## Budget Pool Summary Table

This table shows one row per budget pool, with the following columns:

- **Allocated:** The total budget assigned to the pool.
- **Used:** The amount committed by reviewers so far.
- **Remaining:** The difference between allocated and used.
- **Utilization %:** Used as a percentage of allocated.
- **Status:** A color-coded chip (green, yellow, or red) indicating budget health.

Equity and integer budgets (such as RSU grant pools) are displayed in their native unit format rather than as dollar amounts. A total row is shown for currency pools only. Integer and equity pools are listed individually.

***

## Impact Pivot Table

The pivot table provides a multi-level breakdown of cycle impact across any configured grouping dimension.

**Available group-by dimensions** (configurable in Cycle Settings):

- Department
- Job Level (from comp bands)
- Location
- Reviewer/Approver
- Additional workbook column fields (group and single-select fields only)

Up to three levels of grouping can be applied at once.

**Columns in the table:**

| Column               | Description                                                      |
| -------------------- | ---------------------------------------------------------------- |
| **Employee Count**   | Number of employees in the group                                 |
| **Promotions**       | Number of promotions in the group                                |
| **Current Spend**    | Annualized compensation before cycle changes                     |
| **Post-Cycle Spend** | Annualized compensation after cycle changes                      |
| **Delta**            | Combined dollar and percent change, shown as `+$782,000 (+4.3%)` |
| **Avg Increase %**   | Average percentage increase across the group                     |

Currency values in the table are shown at full precision (e.g. `$18,200,000`). KPI cards and chart axes use abbreviated formatting (e.g. `$18.2M`).

Clicking a row opens the Full Team Overview filtered to that group, so you can drill into the individual employee changes behind any aggregate number.

***

## Ask ChartHop (AI Insights)

The **Ask ChartHop** button is available on the Impact Dashboard tab. The AI can reference and analyze all data visible on the page, including KPI cards, the waterfall chart, the budget pool summary, and the pivot table, to answer questions about your cycle's impact.

***

## Configuring the Impact Dashboard

Cycle owners can configure the Impact Dashboard from **Cycle Settings > Impact Dashboard** (the 8th tab in Cycle Settings, alongside Key Dates, Budget Pools, and other configuration tabs).

Three sections are available:

### Visibility

Controls who can see the Impact Dashboard tab. Four modes are available:

- **Default (all roles):** Everyone with access to the cycle can see the tab.
- **Role selection:** Limit visibility to specific roles (e.g. cycle owners only).
- **Specific people:** Restrict to a named list of individuals.
- **Custom CQL:** Define visibility using a CQL filter expression.

### KPI Cards

Toggle individual KPI cards on or off. For the Total Cost Impact card, you can also select which field drives the calculation. This is useful for cycles that use a custom base compensation field rather than the built-in base field.

### Group By Options

Configure which dimensions appear in the pivot table's group-by selector. The core set (Department, Job Level, Location, Reviewer/Approver) is enabled by default. You can add additional workbook column fields here. Only group-type and single-select fields are eligible as group-by options.

[title] Built-in Roles
[path] ChartHop for Administrators/Access/User access controls/

A user’s access role within ChartHop determines what data they can see within the org and what actions they can take within ChartHop. Access roles are the broadest way to grant employees access to ChartHop.

For example, users with the Owner role can create new surveys, while users with the Employee role can only take surveys and cannot create them. Users in your organization with the Recruiter editor role can create new jobs in ChartHop.

Each role includes the permission of *standard access,* which means access to the non-administrative features of ChartHop, including shared Scenarios for review purposes. Administrative tasks, such as creating new surveys or importing employee data, are restricted to those with advanced access, such as an Org editor, Owner, or Technical owner role.

Assigning access roles to the members of your organization should be a thoughtful process and follow the principle of granting users only the permissions they need and no more than that. For several roles within your organization, including members of HR, recruiting, finance, IT, and more, additional access may be appropriate, depending on your organization's needs.&#x20;

For roles with access to sensitive data such as personal information for employees, you can further filter what data those that role can see. For example, you can assign the **Org editor** role to multiple people in your organization but filter each person to have those permissions only in their department or division.

:::hint{type="info"}
ChartHop Basic provides two access roles to assign to employees in your organization: Owner and Employee. Non-employees cannot be allowed access.
:::

The following table gives a general overview of each role. Select the role name to view more specific details on pages and data that the role can access.

| **Role**                                                                               | **Description**                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   |
| -------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| [Employee](docId\:fwPtTlc790DmvLT3Xk915)                                               | Allowed to see their own personal information and the compensation data of anyone in their reporting line. This is the default access level appropriate for most organization members.                                                                                                                                                                                                                                                                                                                            |
| [Cash compensation viewer](https://docs.charthop.com/cash-compensation-viewer)<br />   | The same access as an employee but can see cash compensation data, including cash compensation for individuals outside their reporting line.                                                                                                                                                                                                                                                                                                                                                                      |
| [Compensation viewer](https://docs.charthop.com/compensation-viewer)                   | Same as an employee but can see all compensation data, including both cash and equity.                                                                                                                                                                                                                                                                                                                                                                                                                            |
| [Employee (no comp data)](https://docs.charthop.com/employee-no-comp-data)             | The same access as an employee but without permission to view compensation data for those in their reporting line.                                                                                                                                                                                                                                                                                                                                                                                                |
| [Equity compensation  viewer](https://docs.charthop.com/equity-compensation-viewer)    | The same access as an employee but can see all equity compensation data, including equity compensation for individuals outside their reporting line.                                                                                                                                                                                                                                                                                                                                                              |
| [Guest](https://docs.charthop.com/guest)                                               | Can view org public data. Recommended for users outside the organization. Users who are org members can also see their own personal data but not the sensitive data of individuals in their reporting line.                                                                                                                                                                                                                                                                                                       |
| [Org editor](https://docs.charthop.com/org-editor)                                     | Access to all sensitive data, including compensation, with the ability to edit and make permanent changes to the primary environment. Does not have admin capabilities such as the ability to install applications or change organization-wide settings.                                                                                                                                                                                                                                                          |
| [Owner](https://docs.charthop.com/owner)                                               | Allowed full, unrestricted access t&#x6F;**&#x20;everything**, including inviting new users and assigning roles. Can configure integrations and manage organization-wide settings. Because of the unrestricted nature of this role, **this access role should be used very sparingly.**                                                                                                                                                                                                                           |
| [People Ops Admin](docId\:O6czGwxjEKFAefKWZ1l6B)                                       | Access to all sensitive data including compensation, with the ability to edit and make permanent changes to the primary environment. Has the ability to configure and manage Fields, Forms, Categories, Profile Tabs, and Actions, among others. Does not have the ability to change user permissions, configure integrations, or alter organization-wide settings. For most organizations, this role should be the most commonly-used administrator role.                                                        |
| [People Ops Admin (no comp data)](docId\:xXw0L5UXlyl_QSHSAmtbm)                        | Same as People Ops Admin, but without access to compensation data. <br />Access to all sensitive data, except for compensation-related data. Has the ability to edit and make permanent changes to the primary environment, and has the ability to configure and manage Fields, Forms, Categories, Profile Tabs, and Actions, among others. Does not have the ability to change user permissions, configure integrations, or alter organization-wide settings.                                                    |
| [People Ops Admin (no sensitive data)](docId\:XoZkhw57NZvOSsNsh_WMT)                   | Same as People Ops Admin, but without access to sensitive data.<br />Access to manage configuration and workflows, without direct access to any sensitive data including compensation. Has the ability to configure and manage Fields, Forms, Categories, Profile Tabs, and Actions, among others. Does not have the ability to change user permissions, configure integrations, or alter organization-wide settings.                                                                                             |
| [Recruiter](https://docs.charthop.com/recruiter)                                       | Same as an employee and can view open jobs and the sensitive data associated with those jobs, including target compensation. <br />Cannot merge scenarios but can create view scenarios shared with them.                                                                                                                                                                                                                                                                                                         |
| [Recruiting editor](https://docs.charthop.com/recruiting-editor)                       | Same as employee but can create open jobs in the primary timeline as well as in scenarios. <br />Allowed to view and edit sensitive information about open jobs, including target compensation levels and other sensitive data.                                                                                                                                                                                                                                                                                   |
| [Sensitive data (limited comp)](https://docs.charthop.com/sensitive-data-limited-comp) | Same as an employee but can also see all sensitive data except compensation for those outside their reporting line.                                                                                                                                                                                                                                                                                                                                                                                               |
| [Sensitive data viewer](docId\:dhLPrvo0EYwcoaOfQN2k2)<br />                            | Same as an employee but can also see all sensitive data, including for those outside of their reporting line.                                                                                                                                                                                                                                                                                                                                                                                                     |
| [Technical owner](https://docs.charthop.com/technical-owner)                           | Allowed to create and invite new users as well as assign user roles. Can configure apps and integrations, update custom fields, and alter organization-wide settings. However, they do not receive direct access to sensitive people data in the application. Because of the ability to configure data access and API keys, a Technical Owner could indirectly establish access to sensitive data (although such activity would be auditable). This role should be granted with care to the appropriate IT staff. |

:::hint{type="info"}
The following roles are deprecated:&#x20;

- Time Off Viewer
- Personal Contact Viewer

Access remains unchanged for users who have already been assigned these roles. You cannot assign new users these roles.
:::

:::hint{type="info"}
[Modules:](https://www.charthop.com/pricing/) <font color="#000000">**HRIS |** </font>**Engagement | Goals | Performance |&#x20;**<font color="#000000">**Compensation Reviews |** </font>**Headcount Planning**
:::


[title] Using Carrot to reference org data
[path] ChartHop for Administrators/People Ops Tools/Letter templates/Creating templates/

You can use Carrot to reference information from your ChartHop organization, such as compensation data, groups, or specific employee data, and reference it directly in your templates as dynamically-generated fields. [Learn more](https://docs.charthop.com/carrot-reference).

## Useful Carrot expressions

The following section features a list of helpful Carrot expressions available to you and illustrates how you can use them in your templates.

### Specify date formats

When using any of Carrot's date fields, such as `startDatePlanned` and so on, you need to specify the date format if you want something different from the default, which is YYYY-MM-DD.

If you use `{{startDatePlanned}}` without any indication of how you want it formatted, the date is formatted as such: YYYY-MM-DD or 2022-03-14.

If you'd like to format your dates differently from the default, you'll need to use something like this: `{{formatDate(startDatePlanned, "MMMM d, yyyy")}}`. This date is formatted as such: March 14, 2022.

[Learn more.](https://docs.charthop.com/formatdate)

### Substitutions

You can use `{{curlyBraces}}` to substitute any Carrot expression in the body of your template.

```markdown
Hello there {{name.first}} {{name.last}}!

You work in the {{department}} department, based out of the {{location}} location.
```

### If condition

You can use the `if` tag to conditionally display a piece of content.&#x20;

`{% if expression %} conditional content {% endif %}`

```markdown
{% if department:engineering %}
You are part of the Engineering department.
{% endif %}
```

### If... elseif / else

You can use `elsif` or `else` to add additional conditions to an `if` condition block.

```markdown
{% if department:engineering %}
You are part of the Engineering department.
{% elsif department:marketing %}
You are part of the Marketing department.
{% else %}
You are part of a different department.
{% endif %}
```

### For loops (iterations)

You can use the `for` tag to iterate through a series of objects.

```markdown
{% for grant in grants %}
Stock grant dated: {{grant.date}}, amount is {{grant.shares}}
{% endfor %}
```


[title] Defining a custom permission
[path] ChartHop for Administrators/Access/User access controls/

:::hint{type="info"}
[Modules:](https://www.charthop.com/pricing/) <font color="#000000">**HRIS |** </font>**Engagement | Goals | Performance |&#x20;**<font color="#000000">**Compensation Reviews |** </font>**Headcount Planning**
:::

There are five elements that define a permission:

## Permission Label

**&#xA0;**&#x54;his is the name of the permission, and it’s what you will see when selecting permissions in the **Roles** screen. 

:::hint{type="info"}
**💡We recommend** using a naming convention that starts with either **Allow** or **Deny&#x20;**&#x69;n accordance with what the permission is accomplishing. For example a permission that allows a person to see the **Groups** page in Charthop might be labeled “Allow Read Groups”.
:::

## Permission Description

This is a full description of what the permission accomplishes. 

:::hint{type="info"}
**💡We recommend** being as descriptive as possible, since this will help your team keep a better record of what each permission does, and helps ensure that any ChartHop administrators will give proper custom access to the often-sensitive data stored in ChartHop. Without detailed descriptions, mistakes can happen.
:::

## Allow/Deny Toggle

This allows you to toggle whether the specific permission is to **Allow** or **Deny** access to data, pages, or actions in question. 

:::hint{type="warning"}
**☝Please note** that you cannot combine both Allow and Deny into one permission using the Permissions interface. If you have a need to have both, you should instead create two separate permissions on the same role, or you can use the Advanced Editor.
:::

## Entity and Action Drop-downs

There are two menus present in a permission that are linked together. These choices are known as the permission’s **entity action pair.&#x20;**&#x54;ogether, these define *what* the user is allowed to do (the action) on *which* part of the platform (the entity). 

First select the **Entity,** or part of the platform you want to grant or deny access to. Then select the **Action,&#x20;**&#x6F;r *what* behavior you want to allow or deny for the given entity.

:::hint{type="warning"}
**☝Please note** that the Action menu will change depending on the Entity so please select an Entity first.&#x20;
:::

### Common Actions

There are 4 basic Actions that are present on most Entities:

- **Create:&#x20;**&#x43;reate controls the ability to **create** instances of the Entity.
  - For example, for an ALLOW permission, if you select the entity *Group* and the action *Create,* then the permission would grant the ability to create new Groups – new Departments, Teams and Locations. 
- **Read:** Read controls the ability to **see** that specific Entity.
  - For example, for an ALLOW permission, if you select the entity *App* and the action *Read,* then the permission would grant the ability to see the list of Apps that are available to be installed.
- **Update:** Update controls the ability to **edit** an already existing Entity instance.
  - For example, for an ALLOW permission, if you select the entity *Person* and the action *Update*, then the permission would grant the ability to edit or update the details of a Person that is already created, such as updating someone’s legal name or work email. 
- **Delete:** Delete controls the ability to **delete** a specific instance of an Entity. 
  - For example, for an ALLOW permission, if you select the entit&#x79;*&#x20;Comp Band* and the action *Delete*, then the permission would grant the ability to delete a Comp Band that is already created, like deleting an outdated band.&#x20;

## Optional Restrictions

When defining a permission, you might want to restrict the scope of access. We offer you three ways to restrict a permission’s scope:

1. Field and Category restrictions
2. Directions restrictions
3. Carrot (CQL) filters

We’ll dive into how to use each restriction type.&#x20;

### Field and Category Restrictions

Field and Category restrictions limit the permission to apply only to the specified Fields or Categories. Field and Category restrictions can be used on Person, Job, Business Unit, and Comp Band entities. 

Some examples:

- `ALLOW job:read fields:[“baseComp”]` grants the ability to see the “baseComp” field for all jobs in the system, but not other job fields. 
- `ALLOW job:read categories:[“performance”]` grants the ability to see all the fields in the “performance” category for all jobs in the system, but not other job fields. 
- `DENY person:read fields:[“birthDate”]` denies the ability to see the “birthDate” field for all people in the system.

Keep in mind that every field in Charthop applies to a particular entity, either Person, Job, Business Unit, or Comp Band. Depending on the specific field you would like to allow or deny access to, you will need to check the “Applies to” option for that field on the Fields list page, and select the appropriate entity when configuring your permission.

### Directions Restrictions

Directions filters enable you to limit the permission according to the person’s position in the org chart. Direction filters can only be used with Job and Person entities. 

There are four available directions:

1. **Self:** limits the permission to apply to the user’s own person or job
2. **Under:** limits the permission to apply to those “below” the user in the org tree. Think the person’s direct reports, grand reports, all the way down the tree. 
3. **Over:** limits the permission to apply to those “over” the user in the org tree. Think the user’s manager, grand-manager, all the way up the tree. 
4. **Peer:** limits the permission to apply to jobs outside of the person’s reporting line. 

Some examples:

- `ALLOW job:read directions:[“under, self”]` grants the ability to see all the fields for the user’s own job and any jobs that report up into them. 
- `DENY person:read fields:[“baseComp”] directions:[“over”]` denies the ability to see the “baseComp” field for anyone over the user in the management chain (their manager, their manager’s manager, etc.)

### Carrot Filters

In the event that you need to filter your permission by even more complex logic, you can use the generic Carrot (CQL) filter. Using a Carrot filter on your permission will apply the permission *only* to Jobs and People matching that filter string. 

Some examples:

- `ALLOW job:read filter:”job.department=me.department” `grants the ability to see all the fields for any jobs whose department matches the user’s department. *(e.g. if the VP of Engineering had this permission, she could see the job details of all jobs in the Engineering department.)*
- `ALLOW person:read fields:[“address”] filter:”job.location=’remote’”` grants the ability to see address fields for any job with a “remote” location.

To learn more about how to use query expressions, check out our [Carrot Docs](https://docs.charthop.com/carrot-reference).








[title] Select a form for the review
[path] ChartHop for Administrators/Performance reviews/Adding forms to a review/

Before you can create a review, create the form that you want to send out as part of that review. [Learn more about how to create forms.](https://docs.charthop.com/configuring-a-form)

![](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/eUMX_cKHj6QYdk2b8aBhW_screenshot-2023-09-28-at-42925-pm.png)

To select a form to use in the review:

1. From the left sidebar, select **Performance.**
2. Select your review by selecting the name of the review in the list.
3. From the **Forms** tab, select **Add form**.
4. **Select the form** to be used in the review from the dropdown list.
   - Any form can be selected, but the setting of the form will determine who the form can be sent to
5. Choose an option for **Does the form have a Due Date?**
   - **No deadline**
   - **Soft deadline** → The form will display a due date.
   - **Hard deadline&#x20;**→  The form will display a due date and the tasks will automatically expire at the due time, will be removed from the home page and can no longer be completed.
     - **Select a Date & Time** that the form is due at. This time is aligned to your account’s time zone.
6. Choose an option fo&#x72;**&#x20;Can the form be skipped?**
   - **No** → Form is required and all review participants must complete i&#x74;*&#x20;(Recommended for most Reviews uses)*
   - **Yes** → The form is optional and the person has the choice to either complete the form or skip it.*&#xA0;*
7. Select **Next** to continue.

![Example of tasks with due dates](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/U4XeM3n0PAz9TPZFa7nue_screenshot-2023-09-28-at-32116-pm.png "Example of tasks with due dates")

:::hint{type="info"}
[Packages](https://www.charthop.com/pricing/)**:&#x20;**<font color="#a9a9a9">Basic</font> <font color="#000000">|</font> <font color="#000000">**Standard*** | **Premium**</font>****

\* Available as an add-on
:::


[title] Approve and submit proposals
[path] ChartHop for Administrators/Compensation reviews/Participating in a compensation review/Reviewing and approving proposals/

You can approve a proposal when you approve of the proposed compensation changes without any additional edits or when you’ve collaborated with your reviewers to resolve a previously rejected request.

### Approve a submitted proposal

To approve a submitted compensation proposal:

1. Select the **Changes & approvals** tab in the compensation review.
2. In the **Proposals for approval** section, select and review a proposal with a status of **Ready for review**.
3. Select **Mark as reviewed**. 
   - This indicates you’ve reviewed the proposal and approve the proposed compensation changes without any additional changes.
   - The status of the proposal changes to **Reviewed**.
   - The reviewer workbook table changes to a view-only mode. To make changes, you must click **Edit**.

:::hint{type="warning"}
Marking a proposal as reviewed does not complete the approval process. After you mark a proposal as reviewed, you must then submit the approval to move forward. 



You can’t submit an approval until you’ve marked all proposals submitted to you as reviewed.
:::

### Submit all requests and approvals

Once you’re finished reviewing compensation, proposing changes, and reviewing and approving all proposals submitted to you, you must submit all your proposed changes and approvals to move them forward in the compensation review process.

:::hint{type="warning"}
After you submit your proposals and approvals, you cannot make any more edits and your reviewer workbook table displays in view-only mode.



You are able to enter additional comments and view whatever changes and comments your manager (or next level reviewer) makes during their review of your proposal.
:::

To submit all your proposals and approvals:

1. Make sure all proposals that you are responsible for have the status of **Reviewed**. 
   - This includes both changes that you have proposed or proposals that have been submitted to you that you’ve reviewed and approved.
2. Select **Submit all** in the compensation review header. 
   - The **Submit all** button is available only when all proposals have been reviewed.
3. Select **Submit**.

:::hint{type="info"}
[Packages](https://www.charthop.com/pricing/)**:&#x20;**<font color="#a9a9a9">Basic</font> <font color="#000000">|</font> <font color="#000000">**Standard*** | **Premium**</font>****

\* Available as an add-on
:::


[title] Proposing changes
[path] ChartHop for Administrators/Compensation reviews/Participating in a compensation review/Reviewing employee compensation/

You can propose changes to an employee’s compensation by editing the values in the yellow columns of the reviewer workbook table. 

Depending on how your company has configured compensation reviews, the editable columns may be:  &#x20;

- prepopulated with suggested base change or raise amounts, or
- display with guideline columns next to them with target values and/or ranges.

![You can edit the suggested values in the yellow columns](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/S_S66_XtzQI_iCh52uCj8_compreviewproposechanges.png "  ")

Your company takes into account various factors (for example, employee performance, location, changes in cost of living, length of time since last promotion) and uses those to calculate and suggest a suggested raise amount (or guideline) for each eligible employee.

### Edit compensation based on prepopulated amounts

When the editable columns contain suggested raise amounts, you can:

1. Review the suggested base change/raise amounts for each employee.
2. (Optional) Make changes to the amounts by:
   - Selecting a cell in the table and editing the value.  
   - All editable fields in the table update automatically based on the numbers you enter.
   - The budget allocations and raise percentages update to reflect your changes. Budget allocations are pre-determined and set up by your compensation review admin. 
   - Any changes you make to the suggested compensation change get added to the total spend of the compensation review.
   - Select the **Show totals** checkbox to display all the totals in the top row of the table.
3. Your changes are saved automatically in the table.

### Edit compensation based on guidelines

When the editable columns are blank, you can:

1. Review the suggested guidelines to see the suggested target value or suggested range. 
2. Propose a compensation change by:
   - Selecting a blank editable cell in the table and entering a value.  
   - All editable fields in the table update automatically based on the numbers you enter.
   - The budget allocations and raise percentages update to reflect your changes. Budget allocations are pre-determined and set up by your compensation review admin. 
   - The difference between what you enter and the established guidelines for that compensation change get added to the total spend of the compensation review.
   - Select the **Show totals** checkbox to display all the totals in the top row of the table.
3. Your changes are saved automatically in the table.

### Create an exception for an employee

ChartHop empowers you to make the best decisions for your employees, so you do have the ability to bypass the suggested guidelines or suggested amounts for an employee for special circumstances.

When you enter a raise amount or base change that exceeds the suggested guidelines calculated by your company, a flag icon can display next to the amount in the table (depending on the configuration of your compensation review).

![Values that exceed guidelines can be flagged](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/XOYI44fEyisk7CQcQFcJ__compreviewscolumnsflag.png "   ")

Hovering over the cell displays a tooltip with more information about the suggested guideline for that field, so you can see why the amount was flagged.

You can also add a comment to enter reasons for the exception by selecting the Comment icon next to the employee’s name.

![You can enter comments for each employee](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/jnnTKftnfJXxHt7j2qAbg_compreviewcomments.png "   ")

### Working with a collaborator

Depending on your organization, you may be set up to work with a collaborator during the compensation review cycle. This person can be someone like an HR administrator or HRBP working with your organization. 

When a collaborator is assigned to work with you, they can view your proposed compensation review changes. Depending on the permissions given to them, in some cases, they might even be able to edit and submit on your behalf.

When you open your compensation review proposal, the names and permissions of any collaborators display above the review cycle timeline. Please reach out to your compensation review cycle owner with any questions about working with additional collaborators at your organization.

![Working with a collaborator](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/OMI5TuSFgLog89apFUOi-_collaboratorreviewerview.png)

:::hint{type="info"}
[Packages](https://www.charthop.com/pricing/)**:&#x20;**<font color="#a9a9a9">Basic</font> <font color="#000000">|</font> <font color="#000000">**Standard*** | **Premium**</font>****

\* Available as an add-on
:::


[title] Closing a survey
[path] ChartHop for Administrators/Engagement surveys/

You can close a survey at any time - regardless of completion percentage.

To close a survey cycle:

1. Select **Close survey** in the top right corner.
2. Select **Confirm**. 
   - Your survey is marked as completed. 
   - Any pending tasks for all forms are expired and removed from participant dashboards.

### Reactivate a survey

You can select **Reactivate survey** to open all of the previously expired tasks within a survey.&#x20;

:::hint{type="warning"}
Once you reactivate a survey, all pending tasks are moved back to pending and sent out to the appropriate participants. 
:::

:::hint{type="info"}
Once a survey is past the end date you established when creating the survey, an **Overdue** indicator displays when you access the survey. However, this does not affect the survey status.
:::



:::hint{type="info"}
[Packages](https://www.charthop.com/pricing/)**:&#x20;**<font color="#a9a9a9">Basic</font> <font color="#000000">|</font> <font color="#000000">**Standard*** | **Premium**</font>****

\* Available as an add-on
:::


[title] People Ops Tools
[path] ChartHop for Administrators/


[title] Add people to a review
[path] ChartHop for Administrators/Performance reviews/Adding forms to a review/

After you select a form, you must select the individuals who are included as reviewees and reviewers for that specific form.

The group of participants you established when you first created the review are included by default. You can apply filters or use Carrot queries to further narrow down the group of recipients. 

The **Review preview&#x20;**&#x73;ection displays a list of all the reviewers and reviewees who meet the criteria and are to be included in the review for that specific form.

![](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/0y5CLpaJY2dXa0MG8krey_screenshot-2023-09-28-at-43640-pm.png)

:::hint{type="info"}
To participate in a review, employees must be members of your organization as well as active users in ChartHop. You cannot include an employee who is not a ChartHop user.
:::

To select which people receive the form:

1. From the left sidebar, select **Performance.**
2. Select your review by selecting the name of the review in the list.
3. In the **Review filters** section, use the filters or define a Carrot query to filter the group of employees to be included as reviewees. For example, you can filter by department when you are using department-specific forms.
4. Use the filters or a Carrot query to filter the group of employees to be included as reviewers.
5. Select **Next** to continue.

:::hint{type="info"}
[Packages](https://www.charthop.com/pricing/)**:&#x20;**<font color="#a9a9a9">Basic</font> <font color="#000000">|</font> <font color="#000000">**Standard*** | **Premium**</font>****

\* Available as an add-on
:::


[title] Select a reviewer or approver to collaborate with
[path] ChartHop for Administrators/Compensation reviews/Participating in a compensation review/Working as a collaborator in a compensation review/

As a collaborator, you can review compensation review proposals for the reviewers and approvers you’re collaborating with on the **Changes & approvals** tab. 

From the tab header, you can select a reviewer to collaborate with, view the status of the selected compensation review proposal, and view the level of access you have to that proposal. Depending on the permissions given to you by your organization, you may also be able to skip the currently selected reviewer or approver, send reminders, and even submit the proposal on the reviewer or approver’s behalf.

![Changes & approvals](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/NbkZ8CTl9ew8P-nt21h3O_collaboratorchangesapprovals.png)

You can select a reviewer or approver to collaborate with from the **Select reviewer&#x20;**&#x64;ropdown. All the reviewers and approvers you’ve been assigned to collaborate with are available from the dropdown. You can enter a name to search for a specific reviewer or approver.

![Select reviewer](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/7LhLExUomUrrqry9YAGDE_collaboratorcollaboratewith.png)

Once you’ve selected a reviewer or approver, select **Collaborate with** to view their compensation review proposal.&#x20;

![Collaborate with](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/SkV1Adw7DH7iGjKFSZlVi_collaboratorchangesandapprovals.png)

The proposal displays the same information that the reviewer sees. You can view the current status of the proposal and see any changes they’ve entered, as well as review compensation. [Learn more.](https://docs.charthop.com/reviewing-employee-compensation) 

In some cases, depending on how your organization has configured the compensation review, you can even make changes to the proposal and select **Submit** to submit the proposal on their behalf.

### Complete your own compensation review proposal as a collaborator

When you’re a collaborator and also a reviewer or approver in the compensation review cycle, you can complete your own compensation review proposal by selecting yourself in the **Select reviewer** dropdown.

Once you’re done reviewing and entering your proposed compensation changes, you can select **Submit all** to submit your proposal.

![Collaborator and approver](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/fUUONACIdLBSJlu0K-VOS_collaboratorandreviewer.png)


[title] Final approving a compensation review
[path] ChartHop for Administrators/Compensation reviews/Participating in a compensation review/

Final approvers are the final step in the compensation review cycle. While the compensation review cycle is in progress, you don’t have access to reviews and approvals until the deadline when all reviews are due.

Once you reach that key date in the timeline, you have the ability to join the compensation review and review all submitted compensation proposals.

As a final approver, you can review:

- The results of the total overall budget allocation using the Budget overview and Raise percentage charts and make adjustments as necessary.
- Employee exceptions to the established compensation guidelines to ensure compensation is being distributed equitably and transparently.&#x20;
- Comments included with all submitted proposals to see the collaborative process of your reviewers and approvers and how decisions were made.

After you’re done with your final review, the compensation review owner can conclude the compensation review.

![](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/cA0JfhJMEsFyv3j4D4a5v_compreviewsfinalapproval.png "Final approvals")

### Review proposals as a final approver

To review proposals submitted to you throughout the compensation review cycle:

1. Select the **Final approvals** tab in the compensation review.
2. All proposals submitted to you display in a list underneath the Budget overview. 
   - Proposals display in a collapsed state by default.
   - The name of the reviewer associated with the proposal displays as a heading for each proposal.
   - The status of the proposal displays on the right. The following statuses can display:
     - **Ready for review** - Indicates that the proposal has been submitted and is ready for your review.
     - **Reviewed** - Indicates that you or another Final approver have marked the proposal as reviewed and approved but have not submitted it yet.
3. Expand the proposal you want to review. 
4. Review the proposed compensation changes. You can use the following tools to help you with your review:
   - Budget overview and Raise percentage charts - [Learn more.](https://docs.charthop.com/reviewing-employee-compensation#wMp_e)
   - Full team overview - [Learn more.](https://docs.charthop.com/reviewing-and-approving-proposals#qxciM)
   - Budget allocation - see below.
5. Once you have reviewed the proposals, you can mark the proposal as reviewed - [Learn more.](https://docs.charthop.com/approve-and-submit-proposals)

After you and any other final approvers have completed your final review, the compensation review owner can go ahead and mark the compensation review cycle as concluded with your approval.

### View budget allocation for a specific proposal

To view the budget allocations for a specific proposal:

1. Select the **Final approvals** tab in the compensation review.
2. Expand the proposal whose budget allocation you want to review.
3. Select the **Budget allocation** link for the proposal. A **Budget allocations** panel displays a breakdown of the budget allocations for that proposal.

### View final approvals as a CEO or head of organization

CEOs or heads of organization have the same view of the compensation review as the final approver. They can view all changes on the Final Approvals tab.

Once reviews are submitted and reach the CEO/head of organization level, both CEOs and final approvers have the ability to make edits and mark proposals as reviewed on a shared Final approvals tab. 

:::hint{type="info"}
Proposals can only be marked as reviewed; they cannot be rejected at the final approval stage.
:::

:::hint{type="info"}
[Packages](https://www.charthop.com/pricing/)**:&#x20;**<font color="#a9a9a9">Basic</font> <font color="#000000">|</font> <font color="#000000">**Standard*** | **Premium**</font>****

\* Available as an add-on
:::


[title] Compensation viewer
[path] ChartHop for Administrators/Access/User access controls/Built-in Roles/

The Compensation viewer role is given to employees who have a role in determining and analyzing budgets. Employees with this role can access all compensation data, including cash and equity compensation.

All roles have standard access, which includes the following:

- Access to all non-administrative functions of ChartHop, including scenarios and dashboards.&#x20;
- Ability to view their own compensation data and the compensation data of those who report to them.&#x20;
- Can edit or hide their own personal data.

Data sharing rules apply to all users regardless of role. Owners of artifacts like scenarios, dashboards, compensation reviews, and forms can restrict access to the respective artifact by person or filter.

You can apply a filter to this role to have it apply to a subset of users; for example, all managers within a department or only HR leaders in a specific location.

**Typical ChartHop responsibilities for someone with this role:**

- Viewing ChartHop to understand the organization.
- Completing employee tasks assigned to them (1:1s, surveys) and participating in compensation reviews or scenarios when invited.
- Reviewing compensation to make budget decisions.

**Common organization titles for users who need the Compensation viewer access role:**

- FP\&A (Financial Planning and Analysis) manager
- Finance analyst

The table below lists how users with this role can use the respective pages. If a page is not listed, the role does not grant access to that page.

### Sensitive data&#x20;

- Can view their own compensation data and personal data.
- Can view compensation data for those in their reporting line.
- Can view all compensation data, both cash, and equity.

### Employee pages

| **ChartHop page**    | **Capabilties**                                                                                                                                                                                                                                                    |
| -------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| Org Chart            | - Can view and filter.                                                                                                                                                                                                                                             |
| Data Sheet           | * Can create custom views.
* Can edit any compensation data.
* Can share views.                                                                                                                                                                                    |
| Map                  | - Can edit their own location.                                                                                                                                                                                                                                     |
| Home page            | * Can view all public information.
* Can view and complete their own tasks.                                                                                                                                                                                        |
| Dashboards           | - Can create dashboards.
- Can view dashboards that have been shared with them.                                                                                                                                                                                    |
| Scenarios            | * Can create scenarios.
* Can view scenarios that have been shared with them.
* Can view all compensation data and changes to that data.                                                                                                                           |
| Employee profiles    | - View others' public information.
- Edit their own personal information.
- Set what information of theirs that others can see.
- Can view compensation data for all org members.
- Can view manager-shared forms that are part of the profile, such as 1:1 forms. |
| History              | * Can view, filter and export historical data.
* Cannot make any changes.                                                                                                                                                                                          |
| Compensation reviews | - Can create compensation reviews.
- Can be assigned to be an approver or reviewer of a compensation review.                                                                                                                                                       |

:::hint{type="info"}
[Packages](https://www.charthop.com/pricing/)**:&#x20;**<font color="#a9a9a9">Basic</font> <font color="#000000">|</font> <font color="#000000">**Headcount Planning** | </font><font color="#000000">**Compensation Reviews** | </font><font color="#000000">**Performance** | </font><font color="#000000">**Engagement** </font>
:::




[title] Managing forms in a review
[path] ChartHop for Administrators/Performance reviews/

The **Forms** tab displays all the forms you have sent out as part of your review cycle, including their current submission completion status.

You can select the page icon next to the form name to display a preview of the form that was sent out. 

In addition, you can select **Add people** to add another group of people as recipients of that specific form. This is useful for cases where you have maybe omitted a group of people or changed directions in terms of who should be included. [Learn more.](https://docs.charthop.com/add-people-to-the-review)

![](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/c2_oayUA_8Cffs-hmhMJ-_screenshot-2023-09-28-at-44607-pm.png)

### Send reminders for a specific form

You can send reminders to reviewers directly from the **Forms** tab to encourage your reviewers to submit their form.

To send a form-specific reminder:

1. In the **Forms** tab, navigate to the form whose recipients you want to remind.
2. In the **Add people** ▼ dropdown menu, select **Send reminder**. The **Send reminder** dialog displays.
3. (Optional) In the **Send reminder** dialog, enter a reminder message.
4. Select **Send**. The reminder is sent to everyone included for that specific form who has not already completed their submission. Reminders are sent via email or Slack (when configured).

### Close a form&#x20;

Closing a form is like enforcing a deadline. It will expire all of the tasks, so that the people can no longer complete the form.  removes the form from the review and clears all associated pending to-dos for individuals who have already received the form.&#x20;

Forms that have been submitted and are awaiting approval will still be able to be approved after the form is closed. &#x20;

To delete a form:

1. In the **Forms** tab, navigate to the form you want to delete.
2. In the **Add people** ▼ dropdown menu, select **Close form**. The **Close form** dialog displays.
3. Select **Confirm**. The form will then be closed and the tasks expired.&#x20;

### Remove a form from the review

Deleting a form permanently removes the form from the review and clears all associated pending tasks for individuals who have already received the form.&#x20;

Deleting the form only removes the form from the review - any data that has already been collected using the form is not deleted and the form remains active and available for use throughout ChartHop.&#x20;

To delete a form:

1. In the **Forms** tab, navigate to the form you want to delete.
2. In the **Add people** ▼ dropdown menu, select **Remove form**. The **Remove form** dialog displays.
3. Enter **DELETE** to confirm.
4. Select **Delete**. The form is deleted from the review and removed from participant dashboards.


[title] Managing forms
[path] ChartHop for Administrators/People Ops Tools/Forms/

After you have made a form ative, you have the ability to edit, duplicate, deactivate, archive, or delete a form. 

To access forms:&#x20;

1. From the left sidebar, select **People Ops Tools.**
2. Select **Forms**

![Forms Page](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/1nctdlQYb6WZ8LpcP7WWw_forms-overview.png)

You can use the **Filter by name&#x20;**&#x20;search box to search for a specific form.&#x20;

You can use the **Status** dropdown to filter by the following statuses :

- **All** - Displays all forms.
- **Active & Inactive** - Displays active and inactive forms.
- **Active** - Displays only active forms.
- **Inactive** - Displays only inactive forms.
- **Archived** - Displays forms that have been archived. 

### Edit a form

You can make changes to a form after you have published it.

To edit a form:

1. Select the form you want to edit from the table.&#x20;
2. Once you’re done making edits, select **Save**.

### Archive a form

Archiving a form retires the form from displaying in the Forms list, but does not permanently delete it. 

To archive a form:

1. Select the checkbox next to the form or forms that you want to archive.
2. Select **Archive**. The form is archived. 

To unarchive a form, select the form, go to Setting and change the status to "Inactive."

### Delete a form

Deleting a form permanently removes it; however, any collected data associated with that form continues to be stored in ChartHop.

To delete a form:

1. Select the checkbox next to the form or forms that you want to delete.
2. Select **Delete**. Th&#x65;**&#x20;Delete Form** dialog displays.
3. In th&#x65;**&#x20;Delete Form** dialog, type DELETE then select **Confirm**. The form has now been deleted.&#x20;



:::hint{type="info"}
[Packages](https://www.charthop.com/pricing/)**:&#x20;**<font color="#a9a9a9">Basic</font> | <font color="#a9a9a9">Standard</font> | **Premium**

﻿﻿[Roles](https://docs.charthop.com/user-roles-and-permissions): Owner | Technical owner | People Ops Admin
:::


[title] Create a survey
[path] ChartHop for Administrators/Engagement surveys/

Users with the Owner, Technical owner, Sensitive data viewer, and Compensation viewer roles can create surveys. However, the sensitivity of the data displayed in the survey itself for participants is controlled by the form and fields used in the survey. Only users with the Owner and Technical owner roles can create forms. [Learn more.](https://docs.charthop.com/building-a-form)

To create a new survey:

1. From the left sidebar, select **Engagement.**
2. Select **Create survey**. The **Create Survey** dialog displays.
3. In the **Create Survey** dialog, enter information for the following fields:
   - **Name** - Enter the name of the survey cycle.
   - **Start date** - Select the start date for the survey cycle.
   - **End date** - Select the end date for the survey cycle.
   - **People to include** - Filter the people included in the survey (for example, dept: sales). You can add a filter when this survey applies only to a specific category of employees.
   - **Description** - Enter a description for the survey cycle.
4. Select **Save** to save your changes. Your survey displays in the Surveys list as **in progress**.

:::hint{type="info"}
[Packages](https://www.charthop.com/pricing/)**:&#x20;**<font color="#a9a9a9">Basic</font> <font color="#000000">|</font> <font color="#000000">**Standard*** | **Premium**</font>****

\* Available as an add-on
:::


[title] Export form responses in a survey
[path] ChartHop for Administrators/Engagement surveys/

You have the ability to export all submitted forms in a survey as either a CSV or PDF.

### Exporting as a CSV

To export a CSV of a survey:

1. Access your survey. 
2. In the **Responses** tab, select **Sheet**.&#x20;
3. From the **Form&#x20;**&#x64;ropdown, select the Form from the survey that you would like to export the responses for. Add any filters if you want only export a subset of the form responses.
4. Click the **Export** Icon Button. Then select, **Export as Form Responses as CSV**.
5. Select your [data formatting options](docId\:ZznndmQ09j6UBPvEbbIFW).&#x20;
6. Click **Export CSV**.
7. Once the export is complete, select **Download Export** to save the .csv file.

::Image[]{src="https://archbee-image-uploads.s3.amazonaws.com/zxjhb7-DqnuzAP-lru1l3-si6tl5lWckl-nTo3qXb4C-20241022-171143.png" size="50" width="457" height="220" position="center" alt="Export form resonsese" showCaption="false"}

### Exporting as a PDF

When you export surveys in .pdf format:

- All forms from the survey will be included in the PDF.
- All surveys are generated as separate .pdf files within a single .zip file.&#x20;
- The files will use the naming convention of: `{{Survey Name}} - {{First Name}} {{Last Name}}.pdf` For example: `Onboarding Survey - Sarah Smith` or for an anonymous form: `Onboarding Survey - Response 1`

To export .pdf files for a survey:

1. Access your survey. 
2. In the **Responses** tab, select **Sheet**.&#x20;
3. Click the **Export** Icon Button. Then select, **Export Survey as PDFs**.
4. (Optional) Add a filter the for the Survey you want to export.
5. Click **Export PDFs**.
6. Once the export is complete, select **Download Export** to save the .zip file.



**Example PDF Export**

::File{src="https://archbee-doc-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/VQg0nHTA_qMLgK5YQhi1h_engagement-survey-response-1.pdf" label="Engagement Survey - Response 1.pdf" isUploading="false"}


[title] Participating in a compensation review
[path] ChartHop for Administrators/Compensation reviews/

ChartHop centralizes and visualizes employee data so that you have the information you need to make confident and transparent choices when reviewing employee compensation. 

When you join a compensation review, you get a clear picture of the following:  &#x20;

- The complete compensation review cycle timeline, so you know who will review and approve your proposals and when.
- Budget allocations relevant to your group of employees, updated in real-time so you can see the financial impact of your proposed compensation changes.
- Performance and compensation data for the employees whose compensation you’re reviewing, so you can make data-backed decisions.
- Compensation target and range guidelines so that you can be confident that your proposals are on the mark.
- Comments and feedback from reviewers and approvers in the review structure to encourage transparency and collaboration.

![Compensation review](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/eRs61Zw_NrRxYTsbDXjIy_compreviewsreviewer.png "   ")

### Access compensation reviews

When you’re added to a compensation review cycle as a reviewer, approver, or collaborator, you’ll receive an email invitation asking you to join the compensation review in ChartHop.

To access a compensation review to which you’ve been invited:

1. From the left sidebar, select **Comp Reviews.**
2. Select the name of the compensation review.

:::hint{type="info"}
Compensation reviews must have a status of **Active** for you to be able to access them.&#x20;

When a compensation review has a status of **Paused**, you cannot access it until your compensation review admin resumes the review.&#x20;
:::

:::hint{type="info"}
[Packages](https://www.charthop.com/pricing/)**:&#x20;**<font color="#a9a9a9">Basic</font> <font color="#000000">|</font> <font color="#000000">**Standard*** | **Premium**</font>****

\* Available as an add-on
:::


[title] Reviewing and approving proposals
[path] ChartHop for Administrators/Compensation reviews/Participating in a compensation review/

Depending on your position in the compensation review process, you might not only be reviewing employee compensation for your group of employees, but also approving the proposals of reviewers beneath you in the review structure.

When you’re also selected as an approver, you have the ability to see the changes and approvals for your immediate group but also see a full team overview with all other proposals you need to review and approve.

:::hint{type="info"}
You can use the Timeline at the top of the reviewer workbook to see where you are in the compensation review process.
:::

![My proposed changes dialog](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/IdSHDDvXix1SyZkHNL0Qz_compreviewsapprovermyproposedchanges.png "   ")

### Propose changes to compensation for my immediate group

To review and propose changes to employee compensation for employees who are under your level of review:

1. Select the **Changes & approvals** tab in the compensation review.&#x20;
2. Navigate to the **My proposed changes** section. 
   - All eligible employees whose compensation you’re responsible for reviewing display in this section.
3. Edit compensation and propose changes accordingly.  [Learn more.](https://docs.charthop.com/proposing-changes)
   - Your changes are saved automatically.

### Review proposals submitted to you

To review proposals that are directly submitted to you, or that will be submitted to you, throughout the compensation review cycle:

1. Select the **Changes & approvals** tab in the compensation review.
2. Navigate to the **Proposals for approval** section. This is where you can find all the proposals submitted to you for approval.
   - Proposals display in a collapsed state by default.
   - The name of the reviewer associated with the proposal displays as a heading for each proposal.
   - The status of the proposal displays on the right. The following statuses can display:
     - **Awaiting submission** - Indicates that the proposal has not been submitted yet by the reviewer.
     - **Ready for review** - Indicates that the proposal has been submitted and is ready for your review.
     - **Reviewed** - Indicates that you or the reviewer have marked the proposal as reviewed and approved but have not submitted it yet.
     - **Rejected** - Indicates that the proposal has been rejected and returned to the original reviewer for re-submission.
     - **Submitted** - Indicates that the reviewer has reviewed and approved the proposal and submitted all components of the compensation review that they’re responsible for.
3. Expand the proposal you want to review. &#x20;
4. Review the proposed compensation changes.

![Proposals for approval](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/ou0GILP75EEFs7UXtNBuk_compreviewsmarkreviewed.png "  ")

### View a full team overview

To view a full overview of all employees eligible in the compensation review, you can select the **Full team overview** tab. 

This tab displays all eligible employees whose compensation you have access to view. 

The Budget allocations and Raise percentage visualizations reflect the compensation changes for all employees in the Full team overview list. You can use the dropdowns to filter the employees that display in the list. The visualizations update based on the filters you apply.

:::hint{type="info"}
[Packages](https://www.charthop.com/pricing/)**:&#x20;**<font color="#a9a9a9">Basic</font> <font color="#000000">|</font> <font color="#000000">**Standard*** | **Premium**</font>****

\* Available as an add-on
:::


[title] Preview and test a compensation review
[path] ChartHop for Administrators/Compensation reviews/Setting up a compensation review/

Once you’re finished setting up the compensation review, you can preview and test the entire compensation review. ChartHop sets up a full test run of the compensation review as it displays to all reviewers and approvers. This test run is available only to you; reviewers and approvers can’t access the compensation review.&#x20;

You can choose to preview the compensation review as a specific reviewer so that you can test and confirm that they're seeing the right people and guidelines. The compensation review is also fully editable, meaning you can also enter changes to see how those amounts affect the budget pools you set up and evaluate how your calculations are working. Any changes you make inside the preview are not saved.&#x20;

:::hint{type="warning"}
Only one compensation review owner can preview/test at a time. When another compensation review owner changes the cycle settings, the compensation review preview is no longer available and must be regenerated so that it reflects the current settings.
:::

![Preview & test](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/CF_G1DnO2bHaFVBRrT9nz_compreviewspreviewas.png "   ")

To preview and test the compensation review:

1. Open an existing compensation review with a status of **Not started** or **Paused**.&#x20;
   - You can't preview a compensation review with a status of **Active**.
2. From any setup tab, select **Preview & test** at the top right of the screen.
3. Select **Preview & test** in the dialog.&#x20;
4. Select a specific reviewer or approver to preview as. The number of employees they are reviewing and/or approving displays next to their name in the banner at the top of the screen.
5. Use the dropdown list to select another reviewer or approver.
6. Once you have finished previewing, you can select **Exit preview** or **Return to setup** to return to the compensation review set up.

:::hint{type="info"}
When you set up a preview, ChartHop verifies that all reviewers and approvers have access to ChartHop. If a reviewer or approver does not have access, ChartHop sends an email inviting them to ChartHop.
:::


[title] Managing forms in a survey
[path] ChartHop for Administrators/Engagement surveys/

The **Forms** tab displays all the forms you have sent out as part of your survey cycle, including their current submission completion status.

You can select the page icon next to the form name to display a preview of the form that was sent out. 

In addition, you can select **Add people** to add another group of people as recipients of that specific form. This is useful for cases where you have maybe omitted a group of people or changed directions in terms of who should be included. [Learn more.](https://docs.charthop.com/add-people-to-the-review)

![](https://archbee-image-uploads.s3.amazonaws.com/zxjhb7-DqnuzAP-lru1l3-jGFNqAVScVzHi7RjdnstB-20250819-102439.png)

### Send reminders for a specific form

You can send reminders to participants directly from the **Forms** tab to encourage your participants to submit their form.

To send a form-specific reminder:

1. In the **Forms** tab, navigate to the form whose recipients you want to remind.
2. In the **Add people** ▼ dropdown menu, select **Send reminder**. The **Send reminder** dialog displays.
3. (Optional) In the **Send reminder** dialog, enter a reminder message.
4. Select **Send**. The reminder is sent to everyone included for that specific form who has not already completed their submission. Reminders are sent via email or Slack (when configured).

### Close a form&#x20;

Closing a form is like enforcing a deadline. It will expire all of the tasks, so that the people can no longer complete the form.  removes the form from the survey and clears all associated pending to-dos for individuals who have already received the form.&#x20;

Forms that have been submitted and are awaiting approval will still be able to be approved after the form is closed. &#x20;

To delete a form:

1. In the **Forms** tab, navigate to the form you want to delete.
2. In the **Add people** ▼ dropdown menu, select **Close form**. The **Close form** dialog displays.
3. Select **Confirm**. The form will then be closed and the tasks expired.&#x20;

### Remove a form from the survey

Deleting a form permanently removes the form from the survey and clears all associated pending tasks for individuals who have already received the form.&#x20;

Deleting the form only removes the form from the survey - any data that has already been collected using the form is not deleted and the form remains active and available for use throughout ChartHop.&#x20;

To delete a form:

1. In the **Forms** tab, navigate to the form you want to delete.
2. In the **Add people** ▼ dropdown menu, select **Remove form**. The **Remove form** dialog displays.
3. Enter **DELETE** to confirm.
4. Select **Delete**. The form is deleted from the survey and removed from participant dashboards.

:::hint{type="info"}
[Packages](https://www.charthop.com/pricing/)**:&#x20;**<font color="#a9a9a9">Basic</font> <font color="#000000">|</font> <font color="#000000">**Standard*** | **Premium**</font>****

\* Available as an add-on
:::


[title] Distributing forms
[path] ChartHop for Administrators/People Ops Tools/Forms/

# Previewing a form

You can use the **Preview** feature to test your forms before sharing.

To preview your form:

1. **Save** your form.&#x20;
2. Select **Preview** in the header to test your form before publishing it for use.&#x20;
3. Select a Person to preview the form as. This allows any variables or [conditional questions](docId\:FA8qvxE2RIdH9vKxl6SHW) to be displayed as they would be to that person.&#x20;
4. Check that your form appears as you would like it to.&#x20;
5. Select **Exit Preview** to close the preview.

# Activating a form

By making your form Active, people will then be able to complete the form. You will also be about to use throughout ChartHop in Reviews, Surveys and with Automated Actions. &#x20;

To view and complete forms, your employees must have access to ChartHop. For example, you can't send forms to contractors that don't access to ChartHop. See more about [inviting users to ChartHop](docId\:geKO2l3uNeTWyIDSysJfG).&#x20;

To publish a form:

1. Navigate to the **Settings** tab of your form.
2. Select **Active** in the **Status** section at the top of the settings.
   - **Active** - Form can collect responses, be displayed on profiles and used in reviews
     - How it will be distributed is determined in the **Distribution** section of the form settings. See [Configuring form settings](docId:0i0EwWz9bTFhzdvsMbPYZ) for more details.&#x20;
   - **Inactive** - Form can't collect responses, is not displayed anywhere and can't be used in reviews, surveys, or actions.&#x20;
   - **Archived&#x20;**- the form is hidden from the list of forms across the app.&#x20;
3. Select **Save** to activate the form.&#x20;



# Form distribution options

There are a variety of ways that you can share your form with employees.&#x20;

### Copy and share a link

For forms that are about "The person completing the form" or "No one specifically", you are able to send out a share-able link. The link can be found in **Setting > Distribution**

![](https://archbee-image-uploads.s3.amazonaws.com/zxjhb7-DqnuzAP-lru1l3-kw1kyRbbtb8ZBCIKHvCV9-20241121-205055.png)

### Add it to the top of a profile

![](https://archbee-image-uploads.s3.amazonaws.com/zxjhb7-DqnuzAP-lru1l3-LfXD_m6snJ2LU8Z-upL6V-20241121-205402.png)

For forms that are about "The person completing the form" or "another person," a button to complete the form can be surfaced on the header of the profile. See additional details in [Configuring form settings](docId:0i0EwWz9bTFhzdvsMbPYZ).&#x20;

::Image[]{src="https://archbee-image-uploads.s3.amazonaws.com/zxjhb7-DqnuzAP-lru1l3-kEsx7W9ct7aZDVcDIgui0-20241121-205417.png" size="50" width="535" height="282" position="center" showCaption="false"}

### Add it to a custom profile tab

::Image[]{src="https://archbee-image-uploads.s3.amazonaws.com/zxjhb7-DqnuzAP-lru1l3-2xfSjUOu3sSdzBX4psww5-20241121-205907.png" size="78" width="1142" height="467" position="center" showCaption="false"}

If you display form responses on a custom profile tab and the setting form is able to be completed by the person viewing the tab then they will see the "+ button name" at the top of the column.&#x20;

### Send it out as part of a  Review or Survey

By sending a form out as part of a Review or Survey, you are able to: add deadlines, add custom messages, track who has completed the form within the context of that survey, & view form results within the context of those. See more details here:

- [Adding forms to a review](docId\:rspAKbnl1fn0t-cXlgvNp)&#x20;
- [Adding forms to a survey](docId\:zimPJZsIqsYnXTjjXiUjm)&#x20;

### Send it out with an Automated Action

[Automated Actions](docId:6k2uHP22MlgnhaOvzQ0yX) allow you to send out forms based on a recurring schedule or triggered by employee lifecycle events such as a start date, 90 days after a start date or a termination.&#x20;

Using the Send form step you can add deadlines, custom messages, ans specify who the form is sent to and who it is about.&#x20;

&#x20;See this page for additional information about [sending forms vis actions](docId:6k2uHP22MlgnhaOvzQ0yX).

![](https://archbee-image-uploads.s3.amazonaws.com/zxjhb7-DqnuzAP-lru1l3-EQq5GsfB1oPpEgfcsdU3o-20241121-210256.png)


[title] Establish guidelines
[path] ChartHop for Administrators/Compensation reviews/Setting up a compensation review/

You can establish *guidelines* to provide reviewers and approvers with a set of target ranges or amounts for each budget pool so that they have a starting point and reference range to work with when reviewing compensation.

Guidelines empower your reviewers and approvers with the confidence that they are reviewing compensation equitably and according to established considerations.

You can choose to prepopulate field columns with recommended increases based on the values of specific built-in or custom fields (for example, performance review rating, location, or amount of time employed) or choose to provide your reviewers and approvers with guidelines that include target values and ranges.

![Guidelines and threshold](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/WEZkLE5UdAi34uaE8SVNA_compreviewsguidelines.png "   ")

To establish guidelines, open an existing compensation review with a status of **Not started** or **Paused**. Select the **Guidelines & thresholds&#x20;**&#x74;ab.

### Create a guideline

You can create and customize multiple guidelines so that you can provide as much guidance and reference points for your reviewers and approvers as you want.

To create a new guideline:

1. Select **New guideline**.
2. Configure the guideline settings according to the parameters you want to implement. See below for a description of all fields.
3. Once you are finished, select **Calculate** to process and update the guideline calculations.&#x20;

### Delete a guideline

You can delete a guideline when you'd rather start over with a new configuration. Deleting a guideline doesn't affect any other guidelines you've created.

To delete a guideline:

1. Expand the guideline you want to delete.
2. Select **Delete**.
3. Select **Confirm** to delete the guideline.

### Guideline settings

The following table describes the configuration fields you can apply to your guidelines:

| **Field**                                                                 | **Description**                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          | **Example**                                                                                                                                                                                   |
| ------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Basics**                                                                |                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          |                                                                                                                                                                                               |
| Guideline label                                                           | The name of your guideline. <br /><br />Reviewers and approvers see this label during employee compensation reviews.                                                                                                                                                                                                                                                                                                                                                                                                     | Merit - US                                                                                                                                                                                    |
| Employees the guideline applies to                                        | Establishes the group or category of employees for which the guideline applies. <br /><br />Select from the following dropdown options:<br />* All eligible employees
* Only specific departments
* Only specific teams
* Only specific levels
* Only specific locations
* Custom…                                                                                                                                                                                                                                       | Only specific locations<br />* United States                                                                                                                                                  |
| Allocated from this budget pool                                           | Determines the budget pool to which the guidelines apply to.                                                                                                                                                                                                                                                                                                                                                                                                                                                             | Budget pool: Merit - US                                                                                                                                                                       |
| **Fields**                                                                |                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          |                                                                                                                                                                                               |
| Field the guideline is calculated based on                                | Determines the ChartHop field (either built-in or custom) upon which the guideline calculations are based. <br /><br />For example, if you choose Base, then ChartHop uses the current values of that field to perform the calculations you enter in the **Calculation** section.                                                                                                                                                                                                                                        | Base                                                                                                                                                                                          |
| Field the guideline applies to                                            | Determines the ChartHop field (either built-in or custom) that is used to leverage and display the recommended guideline amount.<br /><br />For example, if you choose Base - changed, then ChartHop applies the calculated guideline amount to the values in the Base - changed field.                                                                                                                                                                                                                                  | Base - changed                                                                                                                                                                                |
| **Calculation**                                                           |                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          |                                                                                                                                                                                               |
| Do guidelines include a range, like 2-4%                                  | Determines how your guidelines recommend compensation changes.<br /><br />Select from the following options:<br />* Target value only - Indicates only a target value is recommended.
* Target value + range - Indicates a target value and a range are both recommended.                                                                                                                                                                                                                                                | Target value + range                                                                                                                                                                          |
| Are calculations dependent on one or more field values, like performance? | Determines whether the amount is calculated based on how a specific built-in or custom field is defined (for example, department, performance).<br /><br />Select **Yes** to establish additional considerations for the guideline calculations based on specific fields. Selecting **Yes** displays the **Which field affects the calculation?** field underneath.<br /><br />Select **No, the calculation is the same for everyone** to apply the calculations evenly across all eligible employees for the guideline. | Yes                                                                                                                                                                                           |
| Which field affects the calculation?                                      | Determines the built-in or custom field that affects the calculation. When you select a field, you can define how the values of this field specifically affect the guideline calculations.<br /><br />Only fields with the following data types can be selected:<br />* Number
* Money
* Percent
* Single select                                                                                                                                                                                                         | Performance rating<br /><br />Division<br /><br />Business Operations  2%<br />Customer Support 2%<br />Sales 4%<br />Finance 2%<br />Legal 2%<br />Marketing 3%<br />Product 3%<br />R\&D 4% |
| Calculation                                                               | Determines the specific calculation that is processed to affect the guideline.<br /><br />Select from the following dropdown options:<br />* Percent&#x20;
* Set amount (money)
* Custom formula - Percent
* Custom formula - Set amount (money)                                                                                                                                                                                                                                                                         | Percent                                                                                                                                                                                       |
| Minimum                                                                   | Determines the minimum of the guideline range when the guideline is set to have a target value and range.<br /><br />This can be a percentage or a set amount depending on the Calculation used.                                                                                                                                                                                                                                                                                                                         | 2%<br />$1500                                                                                                                                                                                 |
| Target                                                                    | Determines the target of the guideline range when the guideline is set to have a target value and range.<br /><br />This can be a percentage or a set amount depending on the Calculation used.                                                                                                                                                                                                                                                                                                                          | 4%<br />$3000                                                                                                                                                                                 |
| Maximum                                                                   | Determines the maximum of the guideline range when the guideline is set to have a target value and range.<br /><br />This option displays only when the Calculation is using a percentage.                                                                                                                                                                                                                                                                                                                               | 6%                                                                                                                                                                                            |
| **Thresholds & workbook display options**                                 |                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          |                                                                                                                                                                                               |
| Flag if value deviates from guidelines                                    | Determines whether ChartHop flags a compensation change if it deviates from the established guideline.                                                                                                                                                                                                                                                                                                                                                                                                                   | Yes                                                                                                                                                                                           |
| Prepopulate editable columns with target value                            | Determines whether compensation reviews are prepopulated with recommended amounts for reviewers and approvers. Based on the established guideline target value.                                                                                                                                                                                                                                                                                                                                                          | Yes                                                                                                                                                                                           |



:::hint{type="info"}
[Packages](https://www.charthop.com/pricing/)**:&#x20;**<font color="#a9a9a9">Basic</font> <font color="#000000">|</font> <font color="#000000">**Standard*** | **Premium**</font>****

\* Available as an add-on
:::


[title] Editing form responses
[path] ChartHop for Administrators/People Ops Tools/Forms/Form responses workflows/

Depending on the form settings and your user permission, you may have permission to edit a form response you will see a pencil icon in the top right corner of the form response.  If you do not see the pencil icon, then you do have permission to edit the form response or editing is no longer allowed.&#x20;

**Click the pencil&#x20;**&#x74;o edit the form.

::Image[]{src="https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/zHeODOkjY6Mjs4jmOCjiJ_approved-unreleased-person-who-can-release.png" size="50" width="1052" height="1182" position="center" caption="Approved, Unreleased" showCaption="true"}

When a form response has been edited, the time stamp from the latest edit and editor will be indicated in the header of the form response. This is helpful context for understanding the information in the header.&#x20;

::Image[]{src="https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/H43pR20pXp0JI6uv2bJVR_screenshot-2024-05-21-at-111124-am.png" size="72" width="896" height="166" position="center" showCaption="false"}


[title] Maintaining time off
[path] ChartHop for Administrators/People Ops Tools/Time off for admins/

After launching your policy, use these tools to manage Time Off in ChartHop:&#x20;

## Edit a time off request

As an admin, you are able to edit time off requests for anyone in the organization.&#x20;

To request time off:

1. Find the right person whose time is off. Go to their **Time off** tab.&#x20;
2. Find the time off request to edit, click the check box next to it and select **Edit.&#x20;**
3. Make any of the following updates:&#x20;
   1. Time off policy
   2. Start Date / End Date
   3. Note
4. Click **Save** to save the update. Note that the previous request will not be saved.&#x20;

Employees can also self-serve and [edit future time off requests](docId\:y6XnkAgvcyDoWNxdbFuvt) for themselves. Employees are not able to edit requests that have been approved, rejected or are in the past.&#x20;

::Image[]{src="https://archbee-image-uploads.s3.amazonaws.com/zxjhb7-DqnuzAP-lru1l3--EvrRnGZh3vam5uZ3jGR1-20250819-130448.png" size="50" width="1196" height="1710" position="center" showCaption="false"}

## Delete a time off request

As an admin, you are able to delete any pending or approved time off request. Employees can also delete requests.&#x20;

To delete a time off request:

1. Go to the person's profile
2. Select the **Time off** tab
3. Select the request that you would like to delete using the checkbox on the left of the table.&#x20;
4. Click **Delete&#x20;**&#x69;n the actions buttons at the top of the table
5. Type DELETE and confirm the deletion of the time off request.&#x20;



## Request time off for another person

As an admin, you are able to add time off for anyone in the organization.&#x20;

To request time off:

1. From the left sidebar, select **My Profile**.
2. Go to the **Time off** tab.&#x20;
3. Click **Request time off for Person's Name**
4. Complete the time off request
5. The request will be sent to your manager for approval by you and added to their time off list.&#x20;

![](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/NqClFSZTm3m3TEENw3mW__screenshot-2024-02-09-at-14826-pm.png)

## Approve or reject a time off request

As an admin, you are able to approve any pending time off approval requests regardless of who the person is.&#x20;

To approve or reject a time off request:

1. Go to the person's profile
2. Navigate to the **Time off** tab
3. Select the request that you would like to approve or reject using the checkbox on the left of the table.&#x20;
4. Click **Approve&#x20;**&#x69;n the actions buttons at the top of the table
5. Add an approval note and click **Approve** or **Reject** to submit the approval.&#x20;

![Time off actions](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/B-ETayX4zyK5HVTKQTsbB_screenshot-2024-02-09-at-15405-pm.png)

## Reassigning an approver

If an approver is not available for a period of time, you can reassign the approver for individual requests. Navigate to the employee’s profile page or [Task](docId:1nEEnToGeYECUAAhFwNNZ) page, and check the box next to the request you want to reassign.&#x20;

Click “**Reassign**”, and you can choose a different approver. The new approver will get an email notification and the task will display on their home page. 



##

## Visibility of time off

The default visibility for time off requests. is the following:

| **Role**                   | **View current and future time off requests&#x20;** | **View previous time off requests&#x20;** | **Edit time off policies** |
| -------------------------- | --------------------------------------------------- | ----------------------------------------- | -------------------------- |
| Employees                  | ✅ For the entire organization                       | ❌ Only for self                           | ❌                          |
| Managers                   | ✅ For the entire organization                       | ✅ For people in thier reporting line      | ❌                          |
| Owners & People Ops Admins | ✅ For the entire organization                       | ✅ For the entire organization             | ✅                          |



### Customizing time off visibility&#x20;

There are several ways to adjust time off visibility:&#x20;

1. Adjusting the sensitivity settings for built in Time Off fields or Category. You can view Time Off fields by filtering to the Time Off Category on the [Fields Page.](docId\:XYrLLTZxiE-BV4ZKzEs_g)&#x20;
2. Use [Custom Roles](docId:-WqkyL-Bv1QG2J9obE7uF)  to grant permission to `timeOff` or `timeoffPolicy`.

![Time off fields](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/pQQsFzkBpf_KzHkPBYjxW_screenshot-2024-02-23-at-35920-pm.png)



## Customizing time off visibility&#x20;


[title] Time off admin FAQs
[path] ChartHop for Administrators/People Ops Tools/Time off for admins/

## Employee Balances and policies

### An employee changed locations and changed time off policies. How is that handled?

Time off policies adjust automatically. When an employee changes locations and therefore changes policies, they will automatically be moved to the new policy. Their **STARTING** balance will adjust to the new policy, therefore the current balance will be different. Admin will need to manually adjust if any change is needed otherwise.&#x20;

**Can I move their requests over?&#x20;**

Yes! If you'd like, you can export their requests from the payroll export, and upload them in admin --> import data into their new time off policy. If you are doing this, you would just adjust their starting balance or accrual rate, and the policy will re-adjust on its own.

**Tip**: You can set up actions to send a notification to administrators when an employee meets critiera to move to a new policy! See the workflows below.&#x20;

### An employee didn't end up taking the time they had requested. Can I change it?&#x20;

Yes! If the date has passed and the request was approved, Owners and People Ops Admin roles can **withdraw** the request.

### I need to adjust an employees balance.&#x20;

Go to the time off policy --> adjustments, set the desired date and make the adjustment in the **MIDDLE** column.&#x20;

**NOTE**: An adjustment sets the balance as of that date. All approved time off requests from before that date will not be considered in the balance anymore, only future requests.

## Different policy setups

### Time Off In Lieu (TOIL) or earned/event-driven policies

These policies start at a zero balance and days are awarded only when a specific action occurs. Such as working overtime, working on a holiday or making a weekend push to finish a big project.

Days are usually added at the discretion of HR or management and usually defined in a handbook or on the policy.

**To create this policy:&#x20;**

1. Set the policy type t&#x6F;**&#x20;In Lieu.&#x20;**(this is organizational only)
2. Set **How much time should employees get per year?** to `0`. &#x20;
3. Add any additional policy settings such as who it applies to, expiration, maximum days and descriptions. Adding a employee-facing description can help clarify any rules around the policy.&#x20;
4. Make the policy **Active**.&#x20;

**To award days to a person:&#x20;**

1. As an admin, navigate to policy details modal for that person and click **Add Adjustment**.&#x20;
2. Add an adjustment for the number of **days** with an **effective date&#x20;**&#x6F;f the day that the time is being awardeded for. If you need to award a partial day, you can use decimals such as `0.5` days.&#x20;
3. The employee can now request from this policy

::Iframely{originalUrl="https://www.tella.tv/video/setting-up-a-time-off-in-lieu-policy-1-7lm9" embedUrl="https://www.tella.tv/video/setting-up-a-time-off-in-lieu-policy-1-7lm9" title="Setting up a Time Off In Lieu Policy — Tella" html="<div style=&#x22;left: 0; width: 100%; height: 0; position: relative; padding-bottom: 56.25%;&#x22;><iframe src=&#x22;https://www.tella.tv/video/vid_cmk70rjm701nu04ju2m417lm9/embed?feature=oembed&#x22; style=&#x22;top: 0; left: 0; width: 100%; height: 100%; position: absolute; border: 0;&#x22; allowfullscreen scrolling=&#x22;no&#x22; allow=&#x22;accelerometer *; encrypted-media *; gyroscope *; picture-in-picture *; fullscreen *;&#x22;></iframe></div>"}



### Tenure based policies

Employees can earn more days of PTO as their tenure in the company increases.&#x20;

**Example 1**: Under 5 years tenure starts with 20 days, but between 5-10 years tenure they start with 25 days. This is awarded on the date of their anniversary. On their 6th year, they will start with that amount at the start of the policy year.&#x20;

**Example 1 setup:**&#x20;

Create one policy that applies to all of these employees. Then create actions that will do the following:&#x20;

- Every day, look for employees who's start date was 5 years ago, and who meet the time off policy filter&#x20;

::Image[]{src="https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/gmRVeDcoc2vtLtuBltvdO_image.png" size="100" isUploading="false" width="1424" height="978" showCaption="false" indent="2"}

- Send a message to a person or to an email address&#x20;

::Image[]{src="https://app.archbee.com/api/optimize/CXAjUAezd9VEEVQBIYmdw/-EllxCNmxHksLunwns3xu_image.png" size="92" width="1396" height="1404" position="center" showCaption="false"}

Message to paste:&#x20;

`{% assign anniv = db.job.find{it.startDateOrg=date("-15y") && it.location:"the netherlands"} %} `
``
`Anniversaries:`
``
`{% for person in anniv %}`
`{{person.name}} reached their 15th year and will receive 1 additional PTO day (29) on {{person.anniversary}}`
``
`{% endfor %}`

**This message will display:&#x20;**

Anniversaries:&#x20;

John Smith reached their 15th year and will recieve 1 additional PTO day (29) on 9/30/35.

Albert Rodriguez reached their 15th year and will recieve 1 additional PTO day (29) on 9/30/35.

**Action recipient takes:&#x20;**

Recipient needs to allocate the additional days to that employees balance. They can prorate it or give the full amount. See "I need to adjust an employees balance" above.&#x20;

**Example 2**: Under 5 years tenure starts with 20 days, but between 5-10 years tenure they start with 25 days. This is awarded at the START of their 5th year. They then will start with this balance again on their 6th year, etc.&#x20;

To set this up, put all employees in the same policy, and manually adjust their starting year balance accordingly. You can leverage the data sheet to give a list of employees that would apply.


[title] Adding forms to a review
[path] ChartHop for Administrators/Performance reviews/

Once you’ve created a review, you can select it from the **Performance Reviews** list.&#x20;

When you first open your review, it won't have any fields or tasks associated with it. You must first add a form to the review.

:::hint{type="info"}
Forms are made up of built-in and custom ChartHop fields used by your organization to capture and store data. You can use these fields to create performance review-specific forms to use in the review. [Learn more.](https://docs.charthop.com/forms)
:::

You can add multiple forms to each review. For example, you can add a downward review form with respondents set specifically for Managers and an upward or peer review form with respondents set for all employees within a single performance review. When you add a form, you have the ability to specify the group of employees who will receive that form based on their role.

Adding a form to a review involves the following steps:

1. Selecting a form for your review
2. Adding people to your review
3. Customizing the notification message for your review
4. Reviewing and sending out the form to your reviewers


[title] Defining a custom role
[path] ChartHop for Administrators/Access/User access controls/

:::hint{type="info"}
[Modules:](https://www.charthop.com/pricing/) <font color="#000000">**HRIS |** </font>**Engagement | Goals | Performance |&#x20;**<font color="#000000">**Compensation Reviews |** </font>**Headcount Planning**
:::

When creating a role there are 3 main elements.&#x20;

## Role Label

The user-facing name of the role. You will see the role’s label when applying it to a user, so be clear and accurate.

## Description

A detailed description of what the role permits. This description will appear on the role selection screen when changing a user's role, so we recommend being as descriptive as possible in order to prevent accidentally giving a permission to a user they should not have.

## Permissions

This is a search field that will allow you to search for your custom made permissions or a pre-built permission. There is no limit to the number of permissions that you can assign to a role. The permission **General Allowed&#x20;**&#x69;s the permission for standard Employee Access, and we recommend starting roles with this permission and building up Allow permissions to open access for the role.&#x20;


:::hint{type="warning"}
☝**Please note&#x20;**&#x74;hat a Deny permission will always override an Allow permission. Read more about how Deny permissions always beat Allow permissions [here](https://docs.charthop.com/s7rriK_Vf7NJN5rGPPbGl#HlJPZ).&#x20;
:::










[title] Creating a form
[path] ChartHop for Administrators/People Ops Tools/Forms/

To create a new form:

1. From the left sidebar, select **People Ops Tools.**
2. From the sub-menu, select **Forms.**
3. Select **Create Form**.&#x20;
4. Name your form by replacing the title (New Form)&#x20;
5. Edit the default text block and question.&#x20;
6. Select **Save**.&#x20;
   1. The form will not be accessible to your users until you make it "Active"

After saving your form, start building it by adding questions, field and text blocks.&#x20;

:::hint{type="info"}
﻿﻿Roles with default access to Creating forms:
[Roles](https://docs.charthop.com/user-roles-and-permissions): Owner | Technical owner | People Ops Admin

Any user may be given access to create forms using [Key Concepts: Role-based Access](docId\:zernFu32JBQjFBn67l_fE)&#x20;
:::

# Building a Form

You can add 3 things to a form: [Questions](docId\:gcpVZzT_YrD9G5qmik3z_),  [Fields](docId\:gcpVZzT_YrD9G5qmik3z_), or [Text Blocks](docId\:gcpVZzT_YrD9G5qmik3z_).

To add a Question, Field or Text Block, click the relevant button at the bottom or side

![Building blocks of forms](https://api.archbee.com/api/optimize/CXAjUAezd9VEEVQBIYmdw/Y4osDg7BoV-Oj4xPAb7_k_add-question.png)

## Adding Questions

Use a question if you do not need the answers to be used outside the context of the form. Most similar to how you would use a Google form.

Questions are great for:

- Fully Anonymous forms where you don't want to know whose answer it was
  - *Ex. What questions do you have for our executive team?*
- Quick forms where the information doesn't need to live on the respondent profile forever.
  - *Ex. What size would you like in this sweatshirt for your work anniversary gift?*
  - *Ex. Are you going to attend the team retreat?*
- Quick polls or surveys
  - *Ex. Who are you rooting for in the super bowl?*
  - *Ex. What should our rotating monthly office snack be?*

Responses to questions can be:

- Viewed as built-in graphs in the Summary within Forms, Surveys or Reviews
- Viewed in a table within Forms, Surveys or Reviews
- Viewed as individual responses within Forms, Surveys or Reviews
- Exported as a CSV
- Viewed on form responses on custom profile tabs
- (Roadmap) Use in custom dashboards -*&#x20;Possible with help from ChartHop Team*
- (Roadmap) Pulled into the data sheet

:::hint{type="warning"}
Questions can be converted into new fields before you have collected any information on them.&#x20;

However questions with responses cannot be migrated to fields.
:::

:::hint{type="info"}
**Access to question responses:** Anyone with access to the Forms, Surveys or Reviews will have access to the form responses.

[Fields](docId\:XYrLLTZxiE-BV4ZKzEs_g) have a configured field sensitivity such as Org Public, Manager Shared or Private. Questions do not.&#x20;
:::

### Convert a Field to a Question

There is not currently a way to convert a single field into a question.&#x20;

If you have an existing form that was made using fields and you would like to convert to using questions you can use the **Duplicate and convert to questions&#x20;**&#x6F;ption:

1. Within a form, navigate to the split button in the top right corner.
2. Click the menu and select **Duplicate and convert to questions**
3. The form will be duplicated and all of the fields converted to questions.&#x20;

## Adding Fields

Use a [Fields](docId\:XYrLLTZxiE-BV4ZKzEs_g) if you want to store the information on a person's profile or need to use the information in other places such as Scenarios, or Compensation Reviews.&#x20;

Existing built-in or custom fields can be added to forms.

For example, you might have an Onboarding form that collects preferred name & T-shirt size as a field. That T-shirt size field can be later updated by an admin using the Data Sheet.&#x20;

**Fields and Forms Responses**

Form responses are always preserved in their original state even if the value of the field is changed in a different context. For example:

1. A T-shirt Size field is set as "M" in a form and stored on the field and the form response.&#x20;
2. Later, the an admin uses the data sheet (or Integration, API or CSV import) to change the field to a "S".
3. The form response will still display "M" since that is what was submitted in the form while the field value will display "S." &#x20;

### Convert a Question to a Field

When building out a form, you are able to convert a question to a field before you collect information on the question.

1. Select the question.
2. Click the convert to field button if available
3. Fill out additional information about the field. All existing information from the question will be used to pre-fill the field information.

![Question options](https://api.archbee.com/api/optimize/CXAjUAezd9VEEVQBIYmdw/R8DrR-7hAde-qgrFA9WJb_screenshot-2024-05-02-at-33202-pm.png)

## Adding Text Blocks

Text blocks allow you to add in instructions, guidance or context into your form.

**For example:**

- Add a text block at the start of the form to provide an overview
- Add a text block with a header to split up a long form (Using [Markdown formatting](docId:4G6VTqHsLRsh9rkKX-SFY))
- Add an image in the text block to provide needed context to the question
  - *Ex. An image of a T-shirt that is being purchased so that people get an idea for the size that would be best for them.*
- Add links to helpful resources related to questions
  - *Ex. Guidance on a performance management setup*

::Image[]{src="https://api.archbee.com/api/optimize/zxjhb7-DqnuzAP-lru1l3-SSQGTQtXNs84zkO546Sos-20250814-144041.png" size="92" width="2194" height="1186" position="center" showCaption="false"}

### Image recommendations:

Images are a great way to make a form more engaging and dynamic. You can add an image to any text block.

**Recommended image size:**

- Minimum width: `800 px`
- 16:9 ratio: `800px by 450px`

# Editing Questions & Fields

![Editing Questions](https://api.archbee.com/api/optimize/zxjhb7-DqnuzAP-lru1l3-IiJLpYS1OcpUS8k5_D2jI-20241121-200359.png)

Once you add a question to a form, you can configure that question with the following options:

- **Question —&#x20;**&#x48;ow the question is framed to someone answering it.&#x20;
  (*ex.* *What questions do you have for our executive team?)*
  - Every time you use a Field in a form, you are able to specify a different question if you would like.&#x20;
    - *What is your T-Shirt Size? -> T-Shirt Size*
    - *We're ordering company shirts, please select your size -> T-Shirt Size*
- **Required —** If the questions is required to complete the form.
- **Conditional —&#x20;**&#x49;f you would like to display the question to only certain people. See [Conditional questions & text blocks](./#conditional-questions--text-blocks)&#x20;
- **Type —** The format of the question. One of the following options:
  - Most question types will have additional configuration options such as the values in a multi-select or min or max values.

::Image[]{src="https://api.archbee.com/api/optimize/CXAjUAezd9VEEVQBIYmdw/asVWXE4F47Ygj5APNvZhX_field-type-options.png" size="24" width="195" height="595" position="flex-start" showCaption="false"}

### Duplicate a Question, Field or Text Block

1. Select the question, field or text block.
2. Click the duplicate button (two squares with a +).&#x20;

### Delete a Question, Field or Text Block

1. Select the question, field or text block.
2. Click the delete button (trash can).&#x20;

### Reorder a Question, Field or Text Block

1. Select the question, field or text block.
2. Click the grab handle at the top and drag the question or field up or down in the form.

# Conditional Questions & Text Blocks

Add a filter to any question or text block, so that the question will then only be displayed if the form is about a person who match that filters.&#x20;

For example, adding a filter of `department="Revenue"` will only display the form to people who are in the Revenue department.&#x20;

![](https://api.archbee.com/api/optimize/zxjhb7-DqnuzAP-lru1l3-gVYuWmv-lIwiZsWr5qwbA-20240927-162829.png "Conditional filter")

1. Click the checkbox for Conditional
2. Type in your carrot filter or use the filter builder.&#x20;
3. Click preview, then select a person that matches or doesn't match the filter to verify that it's working as expected.&#x20;

There is also a way to configure conditional forms based on the response to previous questions. Please contact your CSM if you would like to configure this advanced option.&#x20;

# Display name

Forms have both a "Display name" and a "Form name" allowing you to use the best name to organize your forms and the best name to communicate to employees. The display name is shown to employees when they interact with the form.

For example:

- Form Name: "FY24 - Emp Engagement - US"&#x20;
- Display Name: "Employee Engagement Survey"

The display name will be used:

- In the notification & task to complete the form,&#x20;
- In button that links to the form from the profile (More information in [Distributing forms](docId\:ZO8ZHb5PqnjvTJnCLAO0v))&#x20;
- At the top of the form.&#x20;

To edit the display name:

1. Within the Form Builder tab
2. Hover over the **displayed name**, click and edit the name.

![](https://api.archbee.com/api/optimize/zxjhb7-DqnuzAP-lru1l3-HrdGlxalIqw90PxtUmCRN-20241121-212310.png)

:::hint{type="info"}
﻿﻿[Roles](https://docs.charthop.com/user-roles-and-permissions): Owner | Technical owner | People Ops Admin
:::

[title] Requesting signatures on form responses
[path] ChartHop for Administrators/People Ops Tools/Forms/Form responses workflows/

:::BlockQuote
This page has been merged into [Form responses workflows](docId:_QUlJLsN6BsALsltpaOoX) Please refer to that page instead.
:::

[title] Time off for admins
[path] ChartHop for Administrators/People Ops Tools/

The following sections detail everything you need to know about ChartHop's Time off product:&#x20;

[Implementing Time Off](docId\:Laa4JL-zMIuXTUIWXeJ26) - For new customers who are building out policies in ChartHop and importing new data.&#x20;

[Maintaining time off](docId\:cIi7CtZmniIUucbRHzhi2) - For troubleshooting, correcting and fixing issues that may arise once you are using ChartHop Time Off

[Time off policy settings](docId\:YxUkGCUu6tev3qgeLyYxs) - For understanding what each of the settings mean and how they interact.&#x20;

[Time off payroll export](docId\:oF1Pxc2xmawTGvQo-V5XD) - For viewing and exporting any time off data

[title] Review and send the form
[path] ChartHop for Administrators/Performance reviews/Adding forms to a review/

You have the ability to review your form, settings, reviewers, and message before you send it out. Verify that the correct form is being sent out and that the number of employees included in the Form Summary matches the group of employees you want to include. 

Click **Send** to send out the review form to the included group of reviewers and launch your review.&#x20;

:::hint{type="info"}
When you’re integrated with Slack, ChartHop will notify the employees via Slack otherwise they will be notified via email. [Learn more.](https://docs.charthop.com/slack)
:::

After you send out a form, it displays in the **Forms** tab of your review. You can select **Add form&#x20;**&#x74;o repeat the process and add additional forms to the review.

![](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/EyGZjNsUp2gN8zoy9tHeK_screenshot-2023-09-28-at-44107-pm.png)


[title] Deleting templates
[path] ChartHop for Administrators/People Ops Tools/Letter templates/

You can permanently delete templates from your template list if you no longer need a template.

To delete a template or templates:

1. From the left sidebar, select **People Ops Tools.**
2. From the sub-menu, select **Letter Templates.**
3. On the Templates page, select the check box of the template you want to delete. You can select more than one template to delete.
4. Select **Delete&#x20;**&#x66;rom the toolbar.
5. Type "delete" in the confirmation dialog and select **Confirm**.






[title] Closing a review
[path] ChartHop for Administrators/Performance reviews/

You can close a review at any time - regardless of completion percentage.

To close a review cycle:

1. Select **Close review** in the top right corner.
2. Select **Confirm**. 
   - Your review is marked as completed. 
   - Any pending tasks are deleted and removed from reviewer dashboards.

### Reactivate a review

You can select **Reactivate review** to open all of the previously expired tasks within a review.&#x20;

:::hint{type="warning"}
Once you reactivate a review, all pending tasks are moved back to pending and sent out to the appropriate reviewers. 
:::

:::hint{type="info"}
Once a review is past the end date you established when creating the review, an **Overdue** indicator displays when you access the review. However, this does not affect the review’s status.
:::




[title] Letter templates
[path] ChartHop for Administrators/People Ops Tools/

You can use ChartHop Letter templates to create standard and reusable PDF documents such as compensation letters, hiring offers, and proofs of employment for your organization.&#x20;

Like a mail-merge, you can insert people or job data dynamically from your ChartHop organization, allowing you to leverage dynamically-generated information such as employee names, titles, addresses, base salaries, compensation levels, and more.

You can access existing templates and create new ones from the Templates page. The page allows you to sort your list of templates and filter by who last modified a template or who created it.

![Templates page](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/LhmlQWWfZCf3C8E7W6PCW_screenshot-2024-01-19-at-22822-pm.png)

:::hint{type="info"}
[Packages](https://www.charthop.com/pricing/)**:&#x20;**<font color="#a9a9a9">Basic</font> | **Standard&#x20;**| **Premium&#x20;**

[Roles](https://docs.charthop.com/user-roles-and-permissions): Owner | Technical Owner
:::






[title] User access controls
[path] ChartHop for Administrators/Access/

ChartHop provides two paradigms for Administrators to control what users can see and do within ChartHop:

1. **Role-based Access** controls what a particular user can see and do *in general* in a given org. Role-based access is “**top-down”**, tied to a user and configured by administrators. 
   1. *E.g. “Owner” access role vs. “Employee” access role*
2. **Sharing Access** controls which users can see and manage *a particular&#x20;*&#x65;ntity instance. Sharing access is **“bottoms-up”**, tied to a particular thing and configured by the user who created it.
   1. *E.g. Sharing a scenario with someone, granting them "Editor" access, vs "Viewer" access to that particular scenario*

These two frameworks provide administrators with powerful and granular control over what users can see and do within their ChartHop org.


:::hint{type="info"}
[Modules:](https://www.charthop.com/pricing/) <font color="#000000">**HRIS |** </font>**Engagement | Goals | Performance |&#x20;**<font color="#000000">**Compensation Reviews |** </font>**Headcount Planning**
:::






[title] Impact Dashboard
[path] ChartHop for Administrators/Compensation reviews/Participating in a compensation review/

:::hint{type="warning"}
**Alpha feature.** The Impact Dashboard is currently available to select customers in Alpha. Functionality and configuration options may change before general availability.
:::

## Overview

The Impact Dashboard is a tab inside your compensation review cycle that shows the aggregate financial and organizational impact of all changes in the cycle. If you have reviewer or approver access, it gives you a real-time picture of how decisions across your team are adding up.

What you see on the Impact Dashboard is scoped to your access. If you are a reviewer for a subset of employees, the KPIs, charts, and table rows reflect only those employees.

***

## Accessing the Impact Dashboard

Once you are inside an active compensation review cycle, the Impact Dashboard appears as a tab in the cycle navigation:

**Cycle Overview > Changes and Approvals > Full Team Overview > Impact Dashboard > Audit Log**

The tab may not be visible to all participants. Its visibility is controlled by the cycle owner in Cycle Settings.

***

## KPI Summary Cards

At the top of the dashboard, you will see up to four summary cards:

| Card                     | What it shows                                                                                                                                   |
| ------------------------ | ----------------------------------------------------------------------------------------------------------------------------------------------- |
| **Total Cost Impact**    | The total dollar change in compensation across your team, plus the percentage increase and pre/post values.                                     |
| **Budget Utilization**   | How much of the allocated budget has been used across all budget pools, plus the remaining amount. Only shown when budget pools are configured. |
| **Employees Impacted**   | The number of employees with active changes, as a percentage of everyone eligible in the cycle.                                                 |
| **Guideline Deviations** | The number of employees whose proposed changes fall outside compensation guidelines. Only shown when guidelines are configured for the cycle.   |

Not all cards may be visible. Cycle owners can choose which cards to show or hide.

***

## Cost Waterfall Chart

The waterfall chart shows how total compensation spend moves from the current state to the post-cycle run rate. Use the toggle above the chart to switch between two views:

- **By Type:** Breaks down the change by category, such as merit increases and promotions.
- **By Budget Pool:** Shows the same flow, broken out by each configured budget pool.

***

## Budget Pool Summary Table

If budget pools are configured for the cycle, this table shows how each pool is tracking:

- **Allocated:** The total budget for the pool.
- **Used:** The amount committed so far by reviewers.
- **Remaining:** What is left to allocate.
- **Utilization %:** Used as a percentage of allocated.
- **Status:** A color-coded chip showing whether the pool is on track, approaching its limit, or over budget.

***

## Impact Pivot Table

The pivot table breaks down cycle impact by dimension, such as department, job level, location, or reviewer. For each group, you can see:

| Column               | Description                                                      |
| -------------------- | ---------------------------------------------------------------- |
| **Employee Count**   | Number of employees in the group                                 |
| **Promotions**       | Number of promotions in the group                                |
| **Current Spend**    | Annualized compensation before cycle changes                     |
| **Post-Cycle Spend** | Annualized compensation after cycle changes                      |
| **Delta**            | Combined dollar and percent change, shown as `+$782,000 (+4.3%)` |
| **Avg Increase %**   | Average percentage increase across the group                     |

Click any row to open the Full Team Overview filtered to that group, where you can see the individual employee changes behind the number.

The group-by dimensions available in the table are configured by the cycle owner.

***

## Ask ChartHop (AI Insights)

The **Ask ChartHop** button is available on the Impact Dashboard tab. You can use it to ask questions about the data on the page, such as which department has the highest average increase or how much budget remains across pools.

[title] Customize the reviewer workbook
[path] ChartHop for Administrators/Compensation reviews/Setting up a compensation review/

The *reviewer workbook* is the relevant employee, budget, and guideline data that displays to your reviewers and approvers when they complete employee compensation reviews.

Each column in the reviewer workbook corresponds to a ChartHop built-in or custom field. The columns included by default are based on the built-in fields you use throughout your ChartHop organization. You have the flexibility to customize the workbook to fit the needs of your reviewers and approvers.

To customize the reviewer workbook, open an existing compensation review with a status of **Not started** or **Paused**. Select the **Reviewer workbook** tab.

### Customize an existing column

Each column row has an expand icon on the right. Selecting it opens the **Edit column** panel for that column. Make your changes and select **Save** to apply them, or **Cancel** to discard.

You can edit the following settings in the Edit column panel:

- **Label** — The name of the column that displays to reviewers and approvers. For example, *Current salary* instead of *Base*.
- **Editable** — Determines whether reviewers and approvers can edit the contents of the column:
  - **Edit** — The reviewer or approver can edit the column.
  - **View only** — The reviewer or approver cannot make edits.
  - **Edit only if** — The reviewer or approver can edit only if specific criteria are met. Establish the criteria using filters or a Carrot query.
- **These people will see the column and its contents for those under them** — Determines who can see the column. Options:
  - **All reviewers** — Everyone involved in the compensation review can view this column. This is the default setting.
  - **Custom** — Only reviewers and approvers matching specified custom criteria can view this column. Establish the criteria using filters or a Carrot query.
- **What cycle user role types can view this column?** — A separate field that restricts visibility by role within the compensation review. Options: **All roles** or **Only certain roles**. When **Only certain roles** is selected, you can choose from: Proposer, Approver, Final approver, Owner.
  When both a people filter and a role filter are set, a user must meet both requirements for the column to be visible.
- **Budget** — Displays how many budgets you've set up that reference this field.
- **Guideline** — Displays how many guidelines you've set up that reference this field.
- **Color** — Customizes the color of the column header in the reviewer workbook. Enter a Hex code or RGB value.

### Add a new column to the reviewer workbook

To add a new column based on an existing field:

1. In the **Set up reviewer & approver workbook** section, select **Select columns**.
2. Check the checkbox next to each column you want to add.
3. (Optional) In the **Column order** section, rearrange the columns into your preferred order.
4. Select **Apply**.
   - The columns are added to the workbook and can be further customized.

### Delete a column from the reviewer workbook

To remove a column from the reviewer workbook:

1. In the **Set up reviewer & approver workbook** section, select **Select columns**.
2. Uncheck the column you want to delete.
3. Select **Apply**.
   - The column is removed from the workbook and no longer displays to reviewers and approvers.

### Reorder columns

Columns can be reordered by dragging and dropping rows using the drag handles on the left side of each column row in the workbook setup.

### Workbook settings

The **Workbook settings** section applies globally to your reviewer workbook.

| **Setting**                                                  | **Description**                                                                                                                    |
| ------------------------------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------- |
| Frozen columns                                               | Enter the number of columns to freeze on the left side of the workbook. Useful for keeping employee names visible while scrolling. |
| Org URL                                                      | A URL linked from the workbook, typically pointing to org-wide compensation guidelines or resources.                               |
| Label for URL                                                | The display label shown for the Org URL link.                                                                                      |
| Allow Reviewers, Approvers & Collaborators to view Audit Log | When enabled, reviewers, approvers, and collaborators can access the audit log for the cycle.                                      |

### Workbook preview

The **Workbook preview** section shows how the workbook will look to reviewers and approvers. The preview includes **import** and **sync data** links that let you bring in additional data during setup.

:::hint{type="info"}
[Packages](https://www.charthop.com/pricing/): Basic | **Standard**\* | **Premium**

\* Available as an add-on
:::

[title] Working as a collaborator in a compensation review
[path] ChartHop for Administrators/Compensation reviews/Participating in a compensation review/

*Collaborators* are people who work alongside reviewers and approvers to guide them throughout the compensation review cycle. As a collaborator, you perform an important role in a compensation review cycle because you help promote transparency and equity in the compensation changes that are proposed.

When you've been assigned to work as a collaborator with a group of reviewers and approvers, you can see all the information that they have access to and have entered in their compensation review proposals.

Depending on the permissions given to you in the review cycle, you may only be able to view the compensation review proposals for the reviewers and approvers you're working with. In some cases, you may be able to make changes or even submit on behalf of the reviewers and approvers you're collaborating with. Please reach out to your compensation review cycle owner with any additional questions about working as a collaborator at your organization.

### Access compensation reviews as a collaborator

When you're added to a compensation review cycle as a reviewer, approver, or collaborator, you'll receive an email invitation asking you to join the compensation review in ChartHop.

To access a compensation review to which you've been invited:

1. From the left sidebar, select **Comp Reviews.**
2. Select the name of the compensation review.

Once you access the compensation review, you'll see three main tabs:

- **Cycle overview**
- **Changes & approvals**
- **Full team overview**

[title] Compensation reviews reviewer and approver FAQs
[path] ChartHop for Administrators/Compensation reviews/Participating in a compensation review/

This topic answers frequently asked questions about participating in a compensation review in ChartHop.

**I've been invited to a compensation review - how do I access it?**

You can access any compensation reviews to which you've been invited in any of the following ways:

- Selecting **Comp Reviews** from the left sidebar
- Clicking the link from your email invitation
- Selecting the Tasks from your ChartHop home page

***

**What happens if I submit a compensation review proposal for approval and the approver makes a change to my compensation review proposal?**

After you submit your proposed changes, you still have the ability to access your compensation review in view-only mode, allowing you to view any changes made throughout the approval process.

***

**Do I have to follow the established guidelines? What happens if I exceed the guideline targets?**

You have the ability to make exceptions for the changes you propose. Changes that exceed the established guidelines may be flagged for exceeding a predefined threshold. However, going over the guideline won't prevent you from submitting your proposal for approval. [Learn more.](https://docs.charthop.com/proposing-changes#MTRw-)

***

**What happens if an approver rejects my proposed changes?**

When your approver rejects your compensation review, it is returned back to you with comments and feedback. You have the ability to make changes based on that feedback and re-submit it for approval. [Learn more.](https://docs.charthop.com/submitting-your-proposal#ZZKIN)

***

**How can I see where my compensation review proposal is in the approval process?**

You can view the compensation review timeline and the status of your compensation review proposal by accessing the compensation review and viewing the **Timeline** section of your review. [Learn more.](https://docs.charthop.com/reviewing-employee-compensation)

:::hint{type="info"}
[Packages](https://www.charthop.com/pricing/): Basic | **Standard**\* | **Premium**

\* Available as an add-on
:::

[title] Form responses workflows
[path] ChartHop for Administrators/People Ops Tools/Forms/

![](https://api.archbee.com/api/optimize/zxjhb7-DqnuzAP-lru1l3-wd6yQTUxf9hjxUCqQlZwi-20241219-153421.png)

You are able to set up forms with Edit, Approval, Release, Download, or Signature Request steps within the [Configuring form settings](docId:0i0EwWz9bTFhzdvsMbPYZ)&#x20;

::Iframely{originalUrl="https://www.tella.tv/video/form-response-workflows-approval-and-release-cbtz" embedUrl="https://www.tella.tv/video/form-response-workflows-approval-and-release-cbtz" title="Form Response Workflows: Approval & Release" html="<div style=&#x22;left: 0; width: 100%; height: 0; position: relative; padding-bottom: 56.25%;&#x22;><iframe src=&#x22;https://www.tella.tv/video/clw51n1ww026a09kt6catcbtz/embed?feature=oembed&#x22; style=&#x22;top: 0; left: 0; width: 100%; height: 100%; position: absolute; border: 0;&#x22; allowfullscreen scrolling=&#x22;no&#x22; allow=&#x22;accelerometer; encrypted-media; gyroscope; picture-in-picture;&#x22;></iframe></div>"}

Once a form has been submitted, you can decide what you would like to happen afterwards. Who can edit the form?  Does it need to be approved? Should the response not be shown until a "release"? Can someone request a signature on it?&#x20;

Completing forms follow a set path as displayed below.&#x20;

You are able to opt in to either the approval or release steps but approval will always come before release.&#x20;

![Reviews Workflow](https://api.archbee.com/api/optimize/CXAjUAezd9VEEVQBIYmdw/QFHCr71U8O-ZWovELkmnw_reviews-setup-flow.png "Form Workflow Overview")

You are able to opt in or out of each step in this menu:

![](https://api.archbee.com/api/optimize/zxjhb7-DqnuzAP-lru1l3-knA4vWIP7ideyZoYDAPMT-20250408-234838.png)

# Configure a form to be approved

By adding a "approval" step to your form workflow, you can empower managers or manager's managers to "sign off" on information before it is released. &#x20;

How to setup form approvals:

1. Add the form to a column in a [Custom profile tabs](docId\:Kiuev47LOf6QTLVjlujlr).&#x20;
2. In **Form > Settings > After Submission > Approval** — Enable the approval step by clicking the checkbox for: ✅ **Require approval**
3. Select an option for: **"Who is responsible for approving this form response?"**
   1. Manager
   2. Manager's Manager&#x20;

::Image[]{src="https://api.archbee.com/api/optimize/CXAjUAezd9VEEVQBIYmdw/QhC9pMfGEJ8kS-fgQiwdN_screenshot-2024-05-21-at-110153-am.png" size="80" width="1490" height="1004" position="center" caption="Approval and Release options" showCaption="true"}

# Configure a form to be released

The release of a person's performance review or other forms often involves specific individualized timing. By adding a "release" step to your form workflow, you can empower managers and other leaders to release the information when they are ready.&#x20;

**How to setup form releasing:**

1. Add the form to a column in a [Custom profile tabs](docId\:Kiuev47LOf6QTLVjlujlr).&#x20;
2. In **Form > Settings > After Submission > Release** — Enable the release step by clicking the checkbox for: ✅ **Require release**
3. Select an option for: **"Who is allowed to release form responses?"** — *These are the people who will be able to press the "Release response" button on the profile tab*
   1. **Respondent or Admin** — The person who submitted the form. For example, a manager in a downward review.
   2. **Admin** — In this context:
      1. An owner or editor of the Review associated with the form response.
      2. Anyone in the org with the `formResponse:update` permission.
         1. The only built in roles with this is Owner
         2. Using [Defining a custom role](docId:-WqkyL-Bv1QG2J9obE7uF) this permission can be given to any custom access role.

# Configure sharing options for a form

Form responses may be configured to support direct sharing similar to how you [Collaborating in a scenario](docId\:n8Otku_-vb7ih01FLGBc_) or [Sharing a dashboard](docId:0i9JBq64ImA6pQFFAXo-K). This can be helpful if someone outside of an individual's reporting line such as an HRBP or Team Lead needs to see a form response about them.&#x20;

**A few examples:**

1. When running a project-based performance review, a peer review from a teammate may need to be shared with the project leader.&#x20;
2. During a review, if someone changes manager mid-review and you need to give both new and old manager access to see/edit the response
3. In goal setting, a manager can be given editor access to a direct report's form response so that they can collaborate and refine the goals before they are shared with the rest of the org.&#x20;
4. During onboarding, a manager submits an initial draft of a 30/60/90 day plan. The new hire then has the ability to edit and refine them as they start.&#x20;
5. An HRBP needs to be able to edit a PIP form originally submitted by the manager before it is released to the employee.&#x20;
6. An HRBP just simply needs to be "looped in" to any process and can be added as a viewer of a form.&#x20;

**How to setup sharing on form responses:**

1. Add the form response history to a column in a [Custom profile tabs](docId\:Kiuev47LOf6QTLVjlujlr).&#x20;
2. In **Form > Settings > After Submission > Sharing** — Enable sharing by clicking the checkbox for: ✅ **Allow sharing individual**
3. Select an option for: **"Who is allowed to share individual form responses?"** — *These are the people who will see the "+" button to share the form.*
   1. **Respondent or Admin** — The person who submitted the form. For example, a manager in a downward review.
   2. **Admin** — In this context:
      1. An owner or editor of the Review associated with the form response. *(If applicable.)*
      2. Anyone in the org with the `formResponse:update` permission.
         1. The only built in roles with this is Owner
         2. Using [Defining a custom role](docId:-WqkyL-Bv1QG2J9obE7uF) this permission can be given to any custom access role.
4. Optionally, click the **+ Add** button under **"Share automatically with"** to add anyone who the form should automatically be shared with after it is submitted.&#x20;
   1. Select the level of access that you would like them to have.
   2. Select who the person should be. All of the options are relative to the person the form is about.&#x20;

For additional details on the roles and notifications see: [Sharing form responses](docId\:AwSZMaVRt_9OssnB-49_f)&#x20;

![](https://api.archbee.com/api/optimize/zxjhb7-DqnuzAP-lru1l3-AidP4a5UB0VNZfaoUab6J-20250409-013120.png)

### Important setup and usage notes

- If a person has not been invited to ChartHop then they will not receive the invitation to view the form response.&#x20;
- The form response history must be added to a profile page that is set to Org public or the form response will not be accessible to the person who the form is shared with.&#x20;
- It's recommended that all other form visibility settings are kept to their defaults if you are using sharing.&#x20;
- Only the original form submission will automatically share the response. Any edits will not share it, so if you are automatically sharing with a person who is selected as part of the form, then you edit that value, it will not re-share to the new person. The form response must be shared with them manually.&#x20;

# Configure editing options for a form

Depending on the form-based process you are configuring you may want different people to be able to edit a form response until certain dates or actions are performed.&#x20;

By default, a form response *cannot* be edited after it is submitted [other than by an admin.](./#editing--deleting-form-responses-as-an-admin) You are able to optionally allow either the **respondent** or the **approver** to edit the form submission.

How to setup form editing options:

1. Add the form to a column in a [Custom profile tabs](docId\:Kiuev47LOf6QTLVjlujlr).&#x20;
2. In **Form > Settings > After Submission > Editing** — select who you would like to be able to edit by clicking the ✅ for either:
   1. Allow **respondent** to edit
   2. Allow **approver** to edit
3. Select an option for: **"How long can responses be edited?"**
   1. **Indefinitely**&#x20;
      1. Default - Recommended for forms where it will not matter if the responses change over time.&#x20;
   2. **Until it's approved**
      1. Only available if approvals are part of this form's workflow.
      2. Recommended for forms where the info may be changed until an "Approval" finalizes it such as a Goal Setting process with a manager and their direct report. You can use this to make the approval step a "sign off" that finalizes the form.
   3. **Until the Review or Survey is closed**
      1. Used if the form is associated with a Review or Survey to allow responses until the administrator manually [Closing a review](docId\:HceOmyRSvKjXqpZf_Is0l) or [Closing a survey](docId\:yofmcnWIjarfWENn63kzJ).&#x20;
      2. Recommended for forms where the results need to be finalized and remain unchanged (other than by admins) at the close of the review or survey.&#x20;
   4. **For a period of time**
      1. Set a number of days after submission that the person can edit the response.&#x20;
      2. Recommended for forms where historical information doesn't need to and shouldn't change.&#x20;

::Image[]{src="https://api.archbee.com/api/optimize/CXAjUAezd9VEEVQBIYmdw/ss4hNazSwqQmJnlfcJo-r_screenshot-2024-05-21-at-110216-am.png" size="80" width="1362" height="964" position="center" caption="Edit form options" showCaption="true"}

### Example Downward Review Setup:

- **About:** Another Person
- **Submitted by:** Their Manager
- **Approval:** Manager's Manager
- **Release:** Submitter (The Manager) or Admins
- **Allow respondents to edit:** Until it's approved
- **Allow approvers to edit:** Until the Review is closed

# Configure export & download options for individual form responses

If you need form responses to be downloaded and stored as a PDF, you can allow anyone with access to the form responses to do so. This will display a download button on the form response.&#x20;

How to setup a form response export:

1. In **Form > Settings > After Submission > Export** — Enable the export step by clicking the checkbox for: ✅ **Allow viewer to export as a PDF**
2. After you select this, anyone who can view the response will now see a "download" button in the top right corner.&#x20;
3. Clicking **"Download PDF"** will generate a PDF of the form response and all relevant details.&#x20;

Access restrictions will always be applied and text blocks will not be included in the export.&#x20;

If you are looking to do a bulk export of form responses, see [Form responses](docId\:qbDlkA-YzjmOZHsqLFW-K)&#x20;

![](https://api.archbee.com/api/optimize/zxjhb7-DqnuzAP-lru1l3-zh6EUw8_z0lt0GKASdsJQ-20241219-154152.png "Download button on a form response")

# Request a signature on a form response

After a form response has been exported as a PDF, you can request a signature on it directly within ChartHop — no external tool required.

This is useful for processes where a written acknowledgment is needed, such as:

- A manager submits a performance review and the employee needs to sign it after it's released.
- An HRBP submits a PIP and the employee needs to acknowledge receipt.
- Any form-based process that requires a documented signature for compliance purposes.

:::BlockQuote
**Note:** Signature requests work on **PDF files only**. You'll need to first export the form response as a PDF using the Download option above before requesting a signature.
:::

## Requesting a signature via the profile

Once a form response has been downloaded as a PDF and uploaded to a person's profile, you can request a signature directly from the **Files** tab.

1. Navigate to the **Files** tab on the person's profile.
2. Upload the PDF, or select it if it has already been uploaded.
3. In the document viewer, open the **Signatures** tab in the right-hand info panel.
4. Click **Request signature**.
5. Select who you would like to request a signature from.
6. Click **Send request**.

The signer will be notified and will see a task on their ChartHop home page to complete the signature.

## Requesting a signature via an Automated Action

If you want signatures to be requested automatically as part of a workflow (for example, whenever a review is released), you can use the **Send Document for Signature** step in an Automated Action.

This supports both:

- **Generated templates** — e.g., a dynamically generated promotion letter.
- **Uploaded PDFs** — e.g., a static policy document or exported form response.

For full setup instructions, see [Signatures](docId:-APezeKDHAACHAZcCuAem)

## Important notes

- Only **PDF files** are supported for signature requests.
- Only the following roles can request signatures: **Owner**, **Org Editor**, **People Ops Admin**, **People Ops Admin (no comp data)**, and **People Ops Admin (no sensitive data)**.
- Multiple people can sign a document at the same time — signing order is not enforced.
- Only people who currently have **login access to ChartHop** can sign documents.
- To cancel a pending signature request, navigate to the document marked *Awaiting signature*, go to the **Signatures** tab, click **Cancel request**, and confirm.

## Editing & deleting form responses as an admin

Anyone in the org with the `formResponse:update` permission can edit forms at any time. The only built in roles with this capability is [Owner](docId\:o_IcgvK94IdcUnZIuNTVi). Using [Defining a custom role](docId:-WqkyL-Bv1QG2J9obE7uF) this permission can be given to any custom access role.

# Notifications

Notifications are sent to either email or slack depending on your org's notification setting at the following times:

| Event                    | Notification                                                                                                                                                                                                                                                       |
| ------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| Upon Submission          | 📨 \[If Approvals are used] To the Approver, notifying them to review and approve the form<br />📨 \[If Sharing is used] To anyone who the form is automatically set to be shared with<br />📨 To anyone else who is set to be notified based on the form settings |
| Upon Request for changes | 📨 To the submitter of the form, notifying them they should make changes to the submission.                                                                                                                                                                        |
| Upon Approval            | 📨 To the submitter of the form, notifying them the form has been approved.                                                                                                                                                                                        |
| Upon Release             | 📨 To the person who the form is about, notifying them that they can now view the form.<br />📨 To the submitter of the form if the submitter is not the person who released the form.                                                                             |
| Upon Signature Request   | 📨 To the signer(s), notifying them they have a document to sign. A task will also appear on their ChartHop home page.                                                                                                                                             |

# Monitoring form responses

As people submit their reviews, as an admin, you can monitor them within the [Performance reviews](docId\:pgai8TVrVYWmDcEAnerwg).

From the Forms tab within the review, you can see a graph that displays the responses.

![](https://api.archbee.com/api/optimize/CXAjUAezd9VEEVQBIYmdw/pIy4F7_aH6Chw-03fJLxf_image.png)

To view the status of Individual responses, you can go to the **Responses** tab, then the **Sheet** or **Individual** View.&#x20;

From the Sheet view, you can see the **Approval Status** and the **Release Status**.

From the Individual View, you can even take actions as an admin and **Approve, Reject** or **Release** forms.

![](https://api.archbee.com/api/optimize/zxjhb7-DqnuzAP-lru1l3-tA4ELPFF7u0kb8Kn_Lfll-20241121-202139.png)

# FAQ

**The approver has left the organization, how do we approve the form?**

The Owner of the ChartHop org will have the ability to approve the form.

**The submitter has left the organization, how do we release the form?**

The owner of the Review associated with the form response or the Owner of the ChartHop org will still have the ability to release the form.

**What if a form is part of multiple reviews, can the owners/editors of all of the reviews release the form?**

No. Only the owners/editors of the review associated with that form response. You can see the form response in the Review area of the app.

[title] Sharing form responses with your organization
[path] ChartHop for Administrators/People Ops Tools/Forms/

If you would like to share form responses with your organization you have several options depending on your needs. Remember that [regular rules about access](docId\:qbDlkA-YzjmOZHsqLFW-K) will always apply.&#x20;



# Sharing individual responses

### Add form responses to custom profile tabs

Profile tabs are the primary way to distribute forms. The form responses will appear in a chronological column on the profile of the person the form is about. Read more about the details of how to setup those profile tabs here: [Custom profile tabs](docId\:Kiuev47LOf6QTLVjlujlr)&#x20;



# Sharing aggregated responses

### Share the Survey or Review

To share *all* results of a Survey or Review with specific people, you are able to share the survey or review with them. Giving the Viewer access will give them the abiliyt to view any form responses not linked to fields. Access roles and permissions still apply to fields linked to form responses. Read more details at: [View survey responses](docId\:gYwTkIawNMWxYb1r2li4x) or [Viewing review data in ChartHop](docId\:J3x1GyHtgMxQYmNTg8jOq). &#x20;

### Create a Dashboard

[Dashboards](docId\:kA8-kvT0AUi_ekF7MECLD) allow you to create the most curated and clean view of your form responses. If you use fields in your form, you can use those fields within a dashboard. If you used questions, you will need to used the Advanced Carrot settings to pull in form responses to the dashboard.&#x20;


[title] Change-based approvals
[path] ChartHop for Administrators/Admin settings/Enabling approvals/

Not all approval chains are linear. Change-based, or conditional, approvals allow your team to create approval chains based on the submitter, or changes made within the scenario. 

:::hint{type="info"}
We recommend ensuring that there is at least one non-change-based approval step in your chain. If a scenario does not meet the requirement for any conditional approval steps, it will display a message for the user to reach out to their administrator. 
:::

A stage of the approval process can be included always, only if certain conditions are met, or to be excluded under certain conditions. 



![](https://lh7-us.googleusercontent.com/8yHEYAGI4yBlbd6xrKJRsByDsre0x9x9VDR4hJQm7gxEgxe002IgT-sPvwehkmN_6WANC5DF7wHWFK4CoXUF3Nogd-ZoAnMfZXCvtnNZF5h_ncvC0M8dvdbtnEBUZUDoBGGxWWFgL8Yubbh7TvG3fTA)

You can set approval steps to trigger on **ANY** or **ALL** changes in a scenario, as well as the total **COST** of the scenario. You also have the option to leverage Carrot to customize your pathways if it does not meet any of the above requirements. 



### ANY or ALL Changes

To customize your approver for selecting **ANY** or **ALL** changes in a scenario, the approval chain logic will look at the job BEFORE changes in the scenario unless you specify change.after… 

**Examples:&#xA0;**

Include this stage if ANY or ALL changes in a scenario involve a job that was originally in the engineering department before change, OR there is a new job created in the engineering department: 

department="engineering"

Include this stage if ANY or ALL changes in a scenario involve a job that was changed to being in the engineering department. This will NOT look at new jobs created in the scenario: 

change.after.department="engineering"



![](https://lh7-us.googleusercontent.com/Rx5DLUzsQR_GgLzXAoz5uu4F35NpYPNFY3ZjvkwsqQkml7USSUNBpg31CkVfrJHJ6k8bgTcstG6cJd_7lxlAGP6ppoVowXIXUuRYkJCzQLW0octSTPVODOWRKjLdNF3OAqVQXkFpy8UCiGDMwjrSnPE)

###

### Cost

When determining an approver based on the cost of the scenario changes, the “cost” value that the approval chain references is the total cost of the scenario located at the top of the page. 

For example, If you are **UPDATING** an existing job and not changing compensation, that cost will stay at $0. 

If you are terminating a role and creating a backfill with the same compensation, the total cost will also remain at $0.



::Image[]{src="https://lh7-us.googleusercontent.com/-SDUXByCk_WG6DOP2RIuNP3JBtH_d-NKXunqqkcC6ZYj2V7iGAv1nCoyuYVnQ3LrwRH-DrPedQjrFKwhbwp1mdcI5FMsAp4aSQTc-44E52gDFKQMfoHOQI4Ow6uLeQxTvbN5GWyrgnYrXz7ZXLWPuvM" size="58" width="588" height="94" position="center" darkWidth="588" darkHeight="94" showCaption="false"}

If you **CREATE** a new job and add compensation, the total cost will adjust accordingly. 

If you change the compensation of an existing open or active job, or terminate a job without a backfill, the cost will also adjust. 



::Image[]{src="https://lh7-us.googleusercontent.com/JYZHBZ4bI0aEw8lFxo_IRWNG-OZe0GnfKplzhEJe-_Mgbcs3aXv1-hWnEBA9Kona5-iIR-yHfVRt43UR-uSbS-T7mespfC4NotI6HKA10hzh1TILEZB0cW18YdEtsmgmY47LPh1EVecMrU9vYYnGXl4" size="66" width="560" height="68" position="center" darkWidth="560" darkHeight="68" showCaption="false"}

###

### Custom

Choosing the custom change identifier will default to reference the person submitting the request, unless you specifically reference scenario changes. 

When writing your custom Carrot logic, it will default to looking at the submitter unless you specify "scenarioChanges.any\{}" or "scenarioChanges.all\{}"

**Examples:&#xA0;**

Include this stage if the person submitting this scenario is in the engineering department and whose title contains “manager”:

department="engineering"&& title:"manager"

Include this stage if the person submitting this scenario is in the sales department and whose title contains “director”, **and** if the job they are changing is in the sales department:

(department="sales" && title:"director") && scenarioChanges.any\{department="sales"}



![](https://lh7-us.googleusercontent.com/fOr5y9G5kV0E020_4I4nZNuPsMN2DiaUwF_D63QFuJqSBSUNwCaE16A1gMoMCOZKrjk0E1YRxrPMBMcZw-NFmBReGVbQWFwBr4owsJ77cStrEXyayuShGMFaveCVMBPgSzo8QNEmldAiF_GYYKlzf0o)

﻿

﻿[﻿Packages](https://www.charthop.com/pricing/)**: Headcount Planning**  | **Compensation Planning&#x20;**|**&#x20;HRIS**

[title] User management settings
[path] ChartHop for Administrators/Access/User management/

You can use **User management&#x20;**&#x73;ettings to configure the length of user sessions in your ChartHop organization.

![User management](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/FIPprngoogpIYG_eGh-V4_access-settings-user-management.png)

To manage user settings:

1. From the left sidebar, select **Access**.
2. From the sub-menu, select **Settings**.
3. In the **User management&#x20;**&#x73;ection you can set:
   1. **User session expiration**: The length of time that a user's session will last before being automatically logged out.
   2. **Notify these people of user access level changes**: The added users will be notified of user access level changes.
4. Select **Save Settings** to confirm your changes.

:::hint{type="info"}
[Modules:](https://www.charthop.com/pricing/) <font color="#000000">**HRIS |** </font>**Engagement | Goals | Performance |&#x20;**<font color="#000000">**Compensation Reviews |** </font>**Headcount Planning**
:::


[title] Image
[path] Carrot reference/Fields/Basic Org Information/Employee/

### Description

Returns the employee avatar.

- **Code name**: `image`
- **Sensitivity**: Org Public
- **Data type**: [Image](docId\:CMMcm-Qq2nL58KZVV7xZt)&#x20;
- **Data category**: Basic
- **Entity type:** Job
- **Read only:** No


[title] Stock grants
[path] ChartHop for Administrators/Admin settings/Configuring financial settings/Setting up Stock valuations/

ChartHop tracks stock grants over time to plan and manage employee compensation, including:

- **Valuations**: the current value of the company's stock
- **Planned Grants**: for open roles, new hires, or existing employees -- the amount that has been communicated or targeted, but not yet issued
- **Actual Grants**: the grants that have been actually issued, including vesting schedules

### Valuations: Private Companies

From the [Org Settings](https://app.charthop.com/settings/org/stock) page, org Owners can set the stock price history of your company over time.

You can set three types of prices:

- **Common FMV**: Fair Market Valuation performed, usually by an outside firm, to value the company's common stock for safe harbor under IRS 409A. These prices are used as the strike price for stock option grants.
- **Preferred Fundraise**: This is the price most recently paid by investors for preferred stock, entered when the company raises outside investment.
- **Grant**: This should be the price used to determine employee compensation value -- the company's "best value" (as described by Fred Wilson in this [classic blog post](https://avc.com/2010/11/employee-equity-how-much)). When determining the present value of a stock option grant, grant price will be calculated against strike price.

:::hint{type="info"}
If you're not sure what to set Grant Price to, it'd be reasonable to set it to the most recent preferred price (if it's been 6+ months since last fundraise) or the most recent preferred with a 20% discount for common (if coming immediately off a fundraise).&#x20;
:::

### Valuations: Public Companies

- For public companies, the **Public Market Price** will automatically be pulled on a daily basis, and a 60-day rolling average will be used when displaying the current value of compensation.
- However, you will still want to set **Grant Price**, which will determine the formula used to calculate the amount and value of a stock grant that was issued in a given period.

### Planned Grants

These are grants that are planned but not yet issued:

- For open roles, the expected target compensation
- For new hires, the amount that was communicated in the offer package
- For employees, any planned refresh grants

To set Planned Grant value, select a job, click Edit Job, and edit the value in the Compensation tab. Planned Grants can be set in dollars or shares, and can be specified as RSUs or options.

An employee's Planned Grant value will appear on their employee profile, under the Equity Grants tab. When an employee receives any actual stock grants, Planned Grant as of that date will automatically reset to zero.

### Actual Grants

These are the record of each grant issued to employees, including RSUs, ISOs, and NSOs and including the vesting schedule.

- If you are using cap table management software, such as Carta or E\*Trade, to track your cap table, you can sync grants automatically by installing the appropriate app.
- If you're not using cap management software, you can upload the grants after they are issued via a CSV spreadsheet import.

Grants will appear on the employee's profile, under the Equity Grants tab.

For purposes of calculating Annual Equity Compensation, the system will calculate, based on current Grant Price (private companies) or Public Market Price (public companies), the value vested in the upcoming year for any given employee.

:::hint{type="info"}
Example: If Sarah has a grant for 10,000 ISOs on a four-year vesting schedule with a strike price of $0.50 and the most recent Grant Price is $5.00, Sarah's Annual Equity Compensation will be ($5.00 - $0.50) \* 10,000 / 4 = $11,250, for a year's worth of vesting. If Sarah only had six more months before being fully vested, Annual Compensation would be $5625.
:::

### Data Sensitivity

Stock grants are considered sensitive compensation information. Grants (both planned and actual) are visible to the grant recipient, their managers, and those with special access to view equity compensation.

Stock prices are normally considered org-public information so that employees can understand the value of their compensation. However, if you do not wish your org to have access to stock prices, email us at [support@charthop.com](#).

:::hint{type="info"}
[Modules:](https://www.charthop.com/pricing/) <font color="#000000">**HRIS |** </font>**Engagement | Goals | Performance |&#x20;**<font color="#000000">**Compensation Reviews |** </font>**Headcount Planning**
:::


[title] Recruiter
[path] ChartHop for Administrators/Access/User access controls/Built-in Roles/

Those with the Recruiter role can view all open jobs and the sensitive data associated with those jobs.&#x20;

All roles have standard access, which includes the following:

- Access to all non-administrative functions of ChartHop, including scenarios and dashboards.&#x20;
- Ability to view their own compensation data and the compensation data of those who report to them.&#x20;
- Can edit or hide their own personal data.

Data sharing rules apply to all users regardless of role. Owners of artifacts like scenarios, dashboards, compensation reviews, and forms can restrict access to the respective artifact by person or filter.

You can apply a filter to this role to have it apply to a subset of users; for example, all managers within a department or only HR leaders in a specific location.

**Typical ChartHop responsibilities for someone with this role:**

- Viewing open jobs and the sensitive data associated with them.
- Monitoring data flow between ChartHop and an integrated applicant tracking system (if implemented).

**Common organization titles for users who need the Recruiting editor access role:**

- Recruiter
- Talent Acquisition Partner
- Recruitment Specialist

### Sensitive data

- Can view their own compensation data and personal data.
- Can view the compensation data of those that report to them.
- Can view sensitive data related to open jobs.

### Employee pages

The table below list how users with this role can use the respective pages. If a page is not listed, the role does not grant access to that page.

| **ChartHop feature** | **Capabilities**                                                                                                                                                                                                                                                                 |
| -------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Org Chart            | - Can view open jobs.                                                                                                                                                                                                                                                            |
| Data Sheet           | * Can create custom views of the Data Sheet.
* Can share views.
* Can view open jobs.                                                                                                                                                                                            |
| Map                  | - Can edit their own location.                                                                                                                                                                                                                                                   |
| Home page            | * Can view all public information. 
* Can view and complete their own tasks.                                                                                                                                                                                                     |
| Dashboards           | - Can create dashboards.
- Can view dashboards that have been shared with them.                                                                                                                                                                                                  |
| Scenarios            | * Can view scenarios that have been shared with them.
* Can create new scenarios.                                                                                                                                                                                                |
| Employee profiles    | - View others' public information.
- Edit their own personal information.
- Set what information of theirs that others can see.
- Can view compensation data for those in their reporting line.
- Can view manager-shared forms that are part of the profile, such as 1:1 forms. |
| History              | * Can view, filter and export historical data.                                                                                                                                                                                                                                   |
| Comp reviews         | - Can view comp reviews that they are invited to review or approve.                                                                                                                                                                                                              |

:::hint{type="info"}
[Packages](https://www.charthop.com/pricing/)**:&#x20;**<font color="#a9a9a9">Basic</font> <font color="#000000">|</font> <font color="#000000">**Headcount Planning** | </font><font color="#000000">**Compensation Reviews** | </font><font color="#000000">**Performance** | </font><font color="#000000">**Engagement** </font>
:::


[title] Setting up Okta SSO
[path] ChartHop for Administrators/Access/Access Settings/Configuring SSO options/

You can configure your ChartHop organization with Okta SSO.

## Generate the Okta metadata file

To set up Okta SSO with ChartHop you will need to configure the Okta ChartHop app and download your Okta metadata file:

1. Go to Okta's [ChartHop integration page](https://www.okta.com/integrations/charthop/).
2. Select **+ Add Integration**.
3. Log in with your Okta account.
4. Select the **Sign On** tab for the ChartHop SAML app. Select **Edit**.
5. Enter your ChartHop organization's \{org-slug} in the Organization ID field.
6. Select **Save**.
7. Select **View Setup Instructions**.
8. Scroll down to the **Optional** section, and save the metadata XML content as a text file named “okta.xml”.
9. Mark the task as DONE when complete.

:::hint{type="info"}
Your organization's slug can be found in the **Org nickname** field under the **General** tab in **Org settings.**
:::

## Upload Okta metadata to ChartHop

Once you've set up your metadata configuration in Okta, you can return to ChartHop to enable Okta SSO and upload your metadata. Follow these steps to accomplish this:

1. From the left sidebar, select **Access**.
2. From the sub-menu, select **Settings**.
3. Scroll to the **SSO** section on the page.
4. Toggle **Enable Okta SSO**.
5. Upload your Okta metadata file.
6. **Confirm** your metadata file content is present.
7. Select **Save settings**.

### Test the new login with Okta SSO to ChartHop

After uploading your metadata file content to your Okta profile in ChartHop, test the integration by following these steps:

1. Log out of ChartHop.
2. Visit: `https://app.charthop.com/{org-slug}/account/login` where `{org-slug}` is your ChartHop organization's unique slug.
3. Confirm that your Okta sign-in displays on the login screen.

:::hint{type="warning"}
If you encounter any issues during or after testing your SSO setup, please reach out to [support@charthop.com](#).
:::

### Automatically update Okta profiles and groups

You can automatically update Okta profiles and groups using the Okta Integration. [Learn more](docId\:cX7KO0fOqgb7m5EeMKXcp)&#x20;

:::hint{type="info"}
[Packages](https://www.charthop.com/pricing/)**:&#x20;**<font color="#a9a9a9">Basic</font> <font color="#000000">|</font> <font color="#000000">**Headcount Planning** | </font><font color="#000000">**Compensation Reviews** | </font><font color="#000000">**Performance** | </font><font color="#000000">**Engagement** </font>
:::


[title] View past currency rates
[path] ChartHop for Administrators/Admin settings/Configuring financial settings/Managing Currencies and costs/

When you have more than one currency set up for your organization, you have the ability to view past currency rates. This helps you keep track of how currency rates have changed over time and see clearly how ChartHop has been implementing currency conversions.

To view past currency rates:

1. From the left sidebar, select **Admin**.
2. From the sub-menu, select **Financial**.
3. In the **Currencies** section, select the **past currency rates** link. This link is available only when you have more than one currency defined in the Currencies table.
4. In the **Past conversion rates** dialog that displays, you can see the Rate, Effective date, and Source for each currency. You can use the **Currency** and **Rates** dropdowns to filter by currency and by time period.
5. Once you're finished reviewing, select **Close** to exit the dialog.

:::hint{type="info"}
[Modules:](https://www.charthop.com/pricing/) <font color="#000000">**HRIS |** </font>**Engagement | Goals | Performance |&#x20;**<font color="#000000">**Compensation Reviews |** </font>**Headcount Planning**
:::


[title] AI Summaries
[path] ChartHop AI with Access Guard/

## AI Summaries in Surveys, Reviews & Forms

AI Summaries will be displayed in the Responses Tab for an Short Text or Long Text question in a form or a form used in a Survey or Review.&#x20;

Example use case: Summaries of open text responses in an Engagement Survey


![AI Summary of Employee Engagement Survye](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/ipJm4-f6uahDXutSiuO5r_screenshot-2024-03-29-at-21246-pm.png "AI Summary of Employee Engagement Survey")

## AI Insights of Charts in Dashboards

A text-based AI Summaries can be created about any chart.&#x20;

After activating the feature, please contact the ChartHop team to get this setup.&#x20;

Example use case: Summary of demographic data for a company over time.&#x20;

![](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/zgMwwjCEMwiNkd38cvqbH_screenshot-2024-03-29-at-21718-pm.png)

## AI Insights of forms sent over Slack or Email

Using ChartHop Actions, you can create a message that contains a summary of form data.&#x20;

After activating the feature, please contact the ChartHop team to get this setup.&#x20;

Example use case: Send a summary of pulse check questions from across the company



## A note about using AI

AI Summaries are an early access features using the state of the art of generative AI. We acknowledge that the summaries generated by ChartHop AI an include hallucinations and mistakes. These insights are not a substitute for human decision-making and should be reviewed alongside the source data which is also availible to you in ChartHop.&#x20;

See [ChartHop AI with Access Guard](docId:-3RpdkLVnc72ozEIgwXMP) for additional details.&#x20;

[title] View as another user
[path] ChartHop for Administrators/Access/User management/

:::hint{type="info"}
[Modules:](https://www.charthop.com/pricing/) <font color="#000000">**HRIS |** </font>**Engagement | Goals | Performance |&#x20;**<font color="#000000">**Compensation Reviews |** </font>**Headcount Planning**
:::

Users with the appropriate permission can view ChartHop as a different user to verify what they can view. This is especially helpful for administrators who want to test or understand what an employee is seeing when they ask a question. When using **View as**, the administrator can only view as people who they can already access sensitive data to .&#x20;

For example, after inviting new users, you can use the **View as** feature to view ChartHop as that user to preview what data they have access toto explore what data they have access to. You can also use **View as** to verify that a form or survey you've assigned to a user or group of users is displaying for the appropriate users. However, they cannot take actions, such as filling out a form, as that user.&#x20;

:::hint{type="warning"}
**Caution:** View as is a very powerful permission. It should be granted with caution.&#x20;
:::

### View as example

Example: If a people ops business partner has the [People Ops Admin](docId\:O6czGwxjEKFAefKWZ1l6B) role but with a filter that only allows them that access `department="Sales,Marketing,Operations"`, they will only be able to view as users in those 3 department since they only have access to sensitive data for those departments. However, if Finance rolls up to Operations, then they would be able to view as an Operations leader and then view data for the Finance team.&#x20;

Example: If a people&#x20;

![View as another user](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/Z4wu-BkOvpXBBbunutrdL_profile-view-as-another-user.png)

To view as another user:

1. Select your profile icon in the upper-right corner and choose **View as another user**.
2. In the **View as&#x20;**&#x64;ialog, enter the name of the user that you'd like to view as.
3. To stop viewing as the user you selected, select your profile icon and choose **Stop viewing as**.




[title] Compensation
[path] Carrot reference/Fields/

A collection of fields relating to compensation including base comp, cash, variable, total, equity, and bands.

## Categories

| Category                                                  | Description                        |
| --------------------------------------------------------- | ---------------------------------- |
| [Bands](https://docs.charthop.com/carrot-reference/bands) | Compensation band fields.          |
| [Base](https://docs.charthop.com/base)                    | Base compensation fields.          |
| [Variable](https://docs.charthop.com/variable)            | Variable cash compensation fields. |
| [Cash](https://docs.charthop.com/cash)                    | Cash compensation fields.          |
| [Equity](https://docs.charthop.com/equity)                | Equity compensation fields.        |


[title] Basic Org Information
[path] Carrot reference/Fields/

Includes fields that relate to employees, time, and general ChartHop organization information.

### Fields

| **Field name**  | **Function**                                                                        | **Field code**   |
| --------------- | ----------------------------------------------------------------------------------- | ---------------- |
| Change ID       | Returns the Change ID of a particular change or set of changes.                     | `changeID`       |
| Date            | Returns the current date.                                                           | `date`           |
| Image           | Returns the employee avatar.                                                        | `image`          |
| Job ID          | Returns the Job ID of a particular Job.                                             | `jobID`          |
| Name            | Returns the full preferred name of an Org member.                                   | `name`           |
| Name and Title  | Returns the full name and title of an Org member.                                   | `nameTitle`      |
| Person ID       | Returns the Person ID of an Org member.                                             | `personID`       |
| Timezone Offset | Returns the difference in hours and minutes between a particular time zone and UTC. | `timezoneOffset` |
| Title           | Returns an Org member's Job title.                                                  | `title`          |
| Today           | Returns today's date.                                                               | `today`          |




[title] User Access Manager
[path] ChartHop for Administrators/Access/User management/Inviting users/

# Managing User Access in ChartHop

ChartHop's Access Settings let you automatically invite employees to the platform, manage their access level, and ensure departing employees lose access on their last day — all without manual effort.

You must have your Org Chart set up in ChartHop before configuring user access. Employees who appear in your Org Chart still need to be granted access before they can log in.

## Navigate to Access Settings

Go to **Access > Settings** to find all user access configuration options. This page is divided into two sections: **User Management** and **Automatically Invite Users**.

## User Management

The User Management section controls session and security settings that apply to all users.

| Setting                                              | What it does                                                              |
| ---------------------------------------------------- | ------------------------------------------------------------------------- |
| **Require sign-in every**                            | Sets how frequently users must re-authenticate, in days.                  |
| **Sign out after inactivity**                        | Automatically signs users out after a set number of inactive days.        |
| **New user invitations expire after**                | Controls how long an invitation link remains valid before expiring.       |
| **Notify these people of user access level changes** | Select users who should be notified when any user's access level changes. |

## Automatically Invite Users

This section controls how ChartHop invites new employees and removes access for departing ones.

When enabled, ChartHop will automatically invite new employees when they're added to your org and remove access when they depart.

### Primary Setting

**Automatically invite new employees and revoke access on departure** — Check this box to enable automatic access management. Once enabled, you can configure the options below.

**Assign new employees to this role** — Sets the default role granted to newly invited employees. The default is **Employee**, which is the standard access level recommended for most members of the organization. Employees at this level can see their own personal data and compensation data for individuals in their reporting line.

### Advanced Options

| Setting                                                              | What it does                                                                                                                                             |
| -------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Send invitations and revoke access once daily** *(recommended)*    | Runs a daily sync to invite any new employees and revoke access for departing ones. Recommended for most organizations.                                  |
| **Revoke access when employee departs**                              | Removes access on an employee's departure date as part of the daily sync.                                                                                |
| **Immediately revoke access when employee departs**                  | Removes access as soon as a departure is recorded in ChartHop, without waiting for the daily sync.                                                       |
| **Notify these people when a user is invited or access is revoked**  | Select users who should receive a notification when invitations are sent or access is removed.                                                           |
| **Only invite employees that match this filter**                     | Restricts automatic invitations to employees who meet a specific filter (e.g., dept\:sales). If left blank, all employees with a work email are invited. |
| **Allow employees matching this filter to use password-based login** | Allows a subset of employees to log in with a password instead of SSO. Useful for employees who may not have SSO credentials.                            |

### Send Invitations On-Demand

Instead of waiting for the daily sync, you can manually trigger the process at any time by clicking **Invite & revoke now**. This is the recommended approach for your initial rollout — it lets you invite your full organization at once when you're ready.

## Filter Examples

Use filters to control which employees receive automatic invitations.

| Filter              | Who it includes                                               |
| ------------------- | ------------------------------------------------------------- |
| employment\:full    | All full-time employees                                       |
| is\:manager         | All employees who have direct reports                         |
| dept\:sales         | All employees in the Sales department                         |
| under\:manager name | All employees under a specific manager, including skip-levels |

For a full list of available filter fields and syntax, see ChartHop's Carrot documentation.

## Additional Notes

- Employees not in your Org Chart cannot be invited through Access Settings. To invite outside users, go to the **Users** page.
- To change a user's role or grant advanced permissions, use the **Users** page. Automatic invitations can only assign Employee-level roles.
- If an employee is missing a work email in ChartHop, they will be skipped during the sync. Update their email in their profile and re-run the sync or click **Invite & revoke now**.

[title] Managing approval delegates
[path] ChartHop for Administrators/Admin settings/Enabling approvals/

Admins can review and manage approval delegates for anyone in the org from one place. Use this to see who has a delegate, set one up on someone's behalf, or clean up delegates during a reorg or departure.

Setting up your own delegate? See [Approval delegates](https://docs.charthop.com/approval-delegates).

## Before you begin

- Approval delegates must be enabled. If you don't see this option, contact your ChartHop rep.
- Only admins whose role grants permission to manage approval delegates can access this view. Other users can manage their own delegate from user settings.

## Open the org-wide delegate view

Go to **Admin > Approval Delegates** to see a table of everyone with a delegate configured, one row per approver.

## What the table shows

- **Approver**: the person whose approvals are delegated.
- **Scenarios**: their scenario approvals delegate, if set.
- **Time Off**: their time off approvals delegate, if set.
- **Status**: active, scheduled (future start), or expired. Expired delegations stay listed (greyed out) for easy reactivation.

## Set a delegate on someone's behalf

1. In **Admin > Approval Delegates**, add a user or select a row to edit.
2. Select the approver.
3. Choose a delegate for each approval type. Only active users in filled jobs are eligible. One delegate per type; a new selection replaces the existing one.
4. Optionally set start/end dates for a time-scoped delegation. Leave blank for always-on.
5. Save.

## Edit or remove a delegate

- **Edit**: change the delegate or dates. Set new dates to reactivate an expired delegation.
- **Remove**: the former delegate stops receiving delegated tasks. The approver's own tasks are unaffected.

## Notifications and audit trail

- The approver is notified when their delegate is set or changed on their behalf.
- All changes are recorded in the audit trail as performed by you on behalf of the user.

## Good to know

- Delegations are tied to the delegate's job seat. If they leave or change roles, the delegation is removed and the approver is notified.
- Delegates cover scenario and time off approvals only. Compensation review approvals are not delegable.
- Delegates can approve, reject, comment, and edit (scenarios). Reassigning approvals and sending reminders are not available to delegates.

[title] Bands
[path] Carrot reference/Fields/Compensation/

Compensation band fields.

### Fields

| **Field name**                                | **Description**                                                                                                                                                                                     | **Field code**                       |
| --------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------ |
| Comp Band                                     | The compensation band that determines compensation range.                                                                                                                                           | `compBand`                           |
| Comp Band Base Interval                       | The pay interval that the compensation range is specified in.                                                                                                                                       | `compBand.baseInterval`              |
| Comp Band Base Maximum                        | The upper bound of the base compensation range.                                                                                                                                                     | `compBand.baseMax`                   |
| Comp Band Base - Maximum With Multipliers     | The upper bound of the base compensation range, with all applicable multipliers applied.                                                                                                            | `compBand.baseMax.withMultipliers`   |
| Comp Band Base - Midpoint                     | The midpoint of the base compensation range.                                                                                                                                                        | `compBand.baseMid`                   |
| Comp Band Base - Midpoint With Multipliers    | The midpoint of the base compensation range, with all applicable multipliers applied.                                                                                                               | `compBand.baseMid.withMultipliers`   |
| Comp Band Base - Minimum                      | The lower bound of the base compensation range.                                                                                                                                                     | `compBand.baseMin`                   |
| Comp Band Base - Minimum With Multipliers     | The lower bound of the base compensation range, with all applicable multipliers applied.                                                                                                            | `compBand.baseMin.withMultipliers`   |
| Comp Band Base - Pay Range                    | The percentage above and below the midpoint that defines the upper and lower bounds of the band. For example, a value of 30% with a midpoint of 100,000 would create a pay range of 70,000-130,000. | `compBand.baseSpread`                |
| Comp Band Base - Target                       | A guideline value for the band which may be different from the midpoint.                                                                                                                            | `compBand.baseTarget`                |
| Comp Band Base - Target Percentile            | A guideline value for the band which may be different from the midpoint, specified as a percentile between baseMin and baseMax.                                                                     | `compBand.baseTargetPercentile`      |
| Comp Band Equity - Target (money)             | The target equity amount, specified as a monetary value.                                                                                                                                            | `compBand.equityTargetValue`         |
| Comp Band Equity - Target (percent of base)   | The target equity amount, specified as a percentage of the job's actual base.                                                                                                                       | `compBand.equityTargetPercentOfBase` |
| Comp Band Equity - Target (shares)            | The target equity amount, specified in number of shares.                                                                                                                                            | `compBand.equityTargetShares`        |
| Comp Band Variable - Target (money)           | The target variable pay amount, specified as a monetary value.                                                                                                                                      | `compBand.variableValue`             |
| Comp Band Variable - Target (percent of base) | The target variable pay amount, specified as a percentage of the job's actual base.                                                                                                                 | `compBand.variablePercentOfBase`     |
| Comp Band - Department                        | The top-level grouping of your compensation bands.                                                                                                                                                  | `compBand.tier`                      |
| Comp Band - Job Level                         | The universal job level for the given band.                                                                                                                                                         | `compBand.jobLevel`                  |
| Comp Band - Job Family                        | The second level grouping of your compensation bands.                                                                                                                                               | `compBand.jobFamily`                 |
| Compa Ratio – band midpoint                   | The job's base pay, divided by the midpoint of its comp band. Expressed as a percentage.                                                                                                            | `compaRatioMid`                      |
| Compa Ratio – band target                     | The job's base pay, divided by the target pay of its comp band. Expressed as a percentage.                                                                                                          | `compaRatioTarget`                   |


[title] Starting salary
[path] ChartHop for Administrators/Admin settings/Configuring financial settings/

Starting salary tells ChartHop where within a [compensation band](https://docs.charthop.com/compensation-bands) a new hire's offer should land, then uses that to pre-fill compensation when you open a job for an open role. Instead of asking hiring managers to guess a number, you define the rule once (for example, "new hires start at the midpoint of the band") and ChartHop applies it consistently every time someone creates a requisition.

:::hint{type="info"}
**Before you start**

Starting salary is part of Compensation Bands. Your organization needs Compensation Bands enabled to see these settings. Configuring starting salary requires access to **Org Settings > Financial**. Using the auto-fill only requires the standard ability to create or edit jobs.
:::

## How it works

1. An admin sets a **starting salary rule** in **Org Settings > Financial** (for example, band midpoint).
2. ChartHop calculates a **starting salary value for each compensation band** from that rule and shows it as a column on your bands.
3. When a manager selects a band while creating a job for an **open** role, ChartHop fills in the compensation from that band's starting salary.

## Step 1: Configure the starting salary rule

1. Go to **Settings > Org Settings > Financial**.
2. In the **Starting Salary** section, choose a **Starting Salary Type**. This is the rule that determines where in each band a new hire starts:

| Starting Salary Type  | What it uses                                                                                                |
| --------------------- | ----------------------------------------------------------------------------------------------------------- |
| **Band Minimum**      | The bottom of the band range.                                                                               |
| **Band Quarter**      | The first quartile (25th percentile) of the band range.                                                     |
| **Band Midpoint**     | The middle of the band range.                                                                               |
| **Custom Percentile** | A percentile you specify (0-100). When you pick this, enter the percentile value in the field that appears. |

3. Set the **Effective date**. This is the date ChartHop uses when calculating starting salary from your bands, which matters if your bands change over time. It defaults to today.
4. Optionally enable:
   - **Include equity target** - pulls the band's equity target into the starting compensation.
   - **Include variable compensation** - pulls the band's variable (bonus) target into the starting compensation.
5. Select **Save**.

:::hint{type="info"}
**Where this lives**

The Starting Salary configuration currently lives in **Org Settings > Financial**. It will move to the Compensation Bands settings area later this year.
:::

## Estimate open job cost when comp is missing

By default, an open job with no compensation set is counted as zero in your cost totals. Turn on **Estimate open job cost when comp is missing** to have ChartHop estimate each such open job's cost from its compensation band instead. ChartHop applies your starting-salary rule to choose the point in the band, or uses the band midpoint if you haven't set a rule. The estimated cost then appears anywhere cost is calculated, including datasheets, budgets, forecasts, and scenarios. Turning it off returns open jobs with no comp to being counted as zero.

:::hint{type="info"}
This setting requires Compensation Bands to be enabled. If you don't see the **Starting Salary** section, Compensation Bands is not turned on for your organization.
:::

To turn it on:

1. Go to **Settings > Financial**.
2. In the **Starting Salary** section, check **Estimate open job cost when comp is missing**.
3. Select **Save**.

## Step 2: Review starting salary on your bands

Once a starting salary rule is set, a **Starting Salary** column appears on your compensation bands, both in the bands editor and in the bands table view. Each band shows the calculated starting salary produced by your rule.

You can review, and where appropriate override, the per-band value directly in the bands grid. A starting salary must be a positive number.

For background on how band values like minimum, midpoint, and target are defined, see [Compensation bands](https://docs.charthop.com/compensation-bands) and [Comp band base target](https://docs.charthop.com/comp-band-base-target).

## Step 3: Auto-fill compensation when opening a job

When you create or edit a job for an **open** role and select a compensation band, ChartHop automatically fills in the compensation from that band's starting salary:

- **Base pay** (as annual salary or hourly wage, matching the band's pay period)
- **Variable / bonus target** (if your rule includes variable compensation and the band defines one)
- **Equity target** (if your rule includes equity and the band defines one)

The fields are pre-populated so you can review, adjust, and save.

:::hint{type="warning"}
**Filled positions are not changed**

Auto-fill only applies to open roles. If a job already has a person in it, selecting a band will not overwrite that person's existing compensation.
:::

## Related articles

- [Compensation bands](https://docs.charthop.com/compensation-bands)
- [Comp band base target](https://docs.charthop.com/comp-band-base-target)
- [Updating compensation bands](https://docs.charthop.com/updating-compensation-bands)

[title] Enabling approvals
[path] ChartHop for Administrators/Admin settings/

In the **Approvals** page, you can determine whether approvals are required for proposed changes to your organization and how they're handled.

![Approvals page](https://api.archbee.com/api/optimize/CXAjUAezd9VEEVQBIYmdw/yUpkzgfaCaDiue3Hk9GvP_admin-approvals-2.png)

### Enable approvals for scenarios

When you enable approvals for scenarios, scenarios go through an additional review and approval process before they can be merged to your Primary organization.&#x20;

Instead of moving directly from an **Open** status to a **Merged** status, scenarios go through review and can be merged only when they have a status of **Approved**.  [Learn more.](https://docs.charthop.com/scenarios)

You select approvers who review and approve all submitted scenarios and specific people to notify once the scenario is approved so they can merge the scenario. A scenario is considered approved once all approvers have given their approval.

![Scenario statuses](https://api.archbee.com/api/optimize/CXAjUAezd9VEEVQBIYmdw/MuV4yPpV9XuYqHEi2E_-I_scenariostatuses.png)

To enable approvals for scenarios:

1. From the left sidebar, select **Admin**.
2. From the sub-menu, select **Approvals**.
3. Turn on the **Enable approvals** setting.
4. From the upper right of the page, select the button **Create approval chain**.

:::hint{type="info"}
When you enable approvals, you must define at least one Approval Chain. When an approval chain is not defined, the **Enable approvals** setting is automatically disabled.

Approvers must be users in ChartHop within a job. Approvers are automatically added to submitted scenarios as a collaborator with **Editor** permissions. [Learn more.](https://docs.charthop.com/collaborating-in-a-scenario)Select a fallback approver
:::

### Approval settings

Once approvals are enabled, three additional settings are available to configure how approvals work for your organization:

**Show approval chain on open job page**
Displays the approval chain on the open job page, so users can see who needs to approve a scenario before it can be merged.

**Send notification emails to submitter at each approval stage**
Sends an email to the person who submitted the scenario each time it advances to a new stage in the approval chain.

**Make approval comments optional**
By default, approvers are required to enter a comment when approving or rejecting a scenario. When this setting is turned on, comments become optional and approvers can act on a scenario without entering a comment.

### Disable approvals for scenarios

When you turn off the **Enable approvals** setting, approvals requirements are removed for scenarios. You can merge scenarios to primary without review and approval as long as you have the **Owner** or **Org editor** roles.

Any scenarios that have not been merged (with a status of **In Review**, **Rejected** o&#x72;**&#x20;Approved**) revert back to the **Open** status. [Learn more.](https://docs.charthop.com/scenarios)

:::hint{type="info"}
[Modules:](https://www.charthop.com/pricing/) <font color="#000000">**HRIS |** </font>**Engagement | Goals | Performance |&#x20;**<font color="#000000">**Compensation Reviews |** </font>**Headcount Planning**
:::


[title] Today
[path] Carrot reference/Fields/Basic Org Information/Time/

### Description

Returns today's date.

- **Code name**: `today`
- **Sensitivity**: Org Public
- **Data type**: [Date](https://docs.charthop.com/xTAQ-date)
- **Data category**: Basic
- **Entity type:** None
- **Read only:** Yes
- **Properties**: This field contains several properties associated with the Data data type.


[title] Configuring general settings
[path] ChartHop for Administrators/Admin settings/

In the **General** tab, you can configure information about your organization, including basic information, date formats, and user management defaults.

![General Settings](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/DInTJUPxtscIUoJZ1odRc_admin-general.png)

To configure your organization's general settings:

1. From the left sidebar, select **Admin**.
2. From the sub-menu, select **General** if not already pre-selected.
3. Update your company information. See below for details
4. Select **Save** to save your changes.



## Basic org info

- **Org name** - The name of your organization. It will appear at the top of the account at all times.&#x20;
- **Org URL&#x20;**-  The subdomain of your organization, delineated by dashes. It will be used in your charthop url.&#x20;
- **Org phone number** - The main phone number for your organization.

## Branding

These colors and logos will be used throughout the app to make it feel more algined with your organization. It will be used on:&#x20;

1. Home page
2. ChartHop mobile app
3. Profile page *(with&#x20;*[Refreshed Profile Page](docId\:o3B_VFOrEX4xyANSdlkvx)*&#x20;turned on)*

### Branding recommendations

- **Primary brand color&#x20;**— This will be used as a background on the home page and mobile app. We suggest selecting a brand color that is will look good as a compliment to your logo. Often this is a dark color or off white. &#x20;
- **Secondary brand color&#x20;**— This color is currently not used by default, but more options of how to use this color will come in the future.&#x20;
- **Square logo&#x20;**— This logo will appear in the top right corner of your ChartHop account and many other places. We suggest you add a logo where a color other than white takes up the entire square. Circular logos or logos with clear backgrounds are not recommend. The recommended size is 200x200 or 100x100 pixels.
- **Horizontal logo&#x20;**— This logo will primarily be used set against your primary brand color so make sure they work together well. We recommend a logo with a transparent background. For example, the white ChartHop logo set against dark purple. Any logo larger than 100 pixels tall should look great.&#x20;

### Tips on finding your company's branding

1. Check your intranet, internal resources or your marketing team.&#x20;
   1. Ask for *"A brand background color and a logo that would look good on top of that color. For example, a dark purple background and a white logo."*
2. Check your company website for a brand guidelines page.&#x20;
3. Check your company LinkedIn or social media page for square logos. Right-click and "Save image as" then upload that image.&#x20;
4. Search for your company on [Brandfetch](https://brandfetch.com/).&#x20;



## Date and time

- **Date format** - The date format that is used throughout your organization.
- **Org start date** - The official date on which your organization was established.

## Notifications

- **Where should the notifications for all employees be sent by default?** - Sets the default notification settings for your organization. Do you want notifications to go to [Slack](docId\:QSduVgxe4FMcnAHbrlXen) or [ Microsoft Teams](docId\:vPQLlIhmQkRASvIcUeOpA) by default or to email?&#x20;



:::hint{type="info"}
[Modules:](https://www.charthop.com/pricing/) <font color="#000000">**HRIS |** </font>**Engagement | Goals | Performance |&#x20;**<font color="#000000">**Compensation Reviews |** </font>**Headcount Planning**
:::


[title] Notification preferences
[path] ChartHop for Administrators/Admin settings/

ChartHop sends messages & notifications for people ops workflows like [Performance reviews](docId\:pgai8TVrVYWmDcEAnerwg), [Engagement surveys](docId\:F_yJDEM_cM1J9XlNG2fZK) and [Automated Actions](docId:6k2uHP22MlgnhaOvzQ0yX).&#x20;

If you do *not* have the [Slack App](docId\:QSduVgxe4FMcnAHbrlXen) installed, then the notifications will always be sent to email.&#x20;

If you have the [Slack App](docId\:QSduVgxe4FMcnAHbrlXen) installed, then you have the choice to set the organization's default notification preference as one of two options:

- **Slack if possible, otherwise email** *— In this option, ChartHop will send the message to Slack if the person's slack ID is matched to ChartHop. This happens automatically when you connect the Slack app.*
- **Email only** — *Regardless of if you have the Slack App installed. This will send to the notifications via email.&#x20;*

::Image[]{src="https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/--6TfP0MoPYf22beIbm5__screenshot-2024-04-08-at-95616-am.png" size="62" width="470" height="177" position="center" showCaption="false"}

This default can also be overwritten on a per workflow basis.&#x20;

For example, if you want your default to be **Slack if possible, otherwise email&#x20;**&#x62;ut you want to always send birthday notifications to Slack using an [Automated Actions](docId:6k2uHP22MlgnhaOvzQ0yX); you have that option within the action step configuration.&#x20;


[title] Set smart currency defaults
[path] ChartHop for Administrators/Admin settings/Configuring financial settings/Managing Currencies and costs/

You can configure a currency to apply by default in situations where monetary values don’t have a specified currency (for example, when you import a monetary value into ChartHop and the currency is not included).

The following currency default options can be applied (in any order):

- the job's defined currency
- the currency used in a person's home address country
- the currency used in the job location country

If any of these currency defaults are unavailable, you can also specify a currency to apply.

![Smart currency defaults](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/RUIULpPs2VaIlm32uOv_r_admin-financial-smart-currency-defaults.png)

To set a smart currency default:

1. From the left sidebar, select **Admin**.
2. From the sub-menu, select **Financial**.
3. Navigate to the **Smart currency defaults** section.
4. From the dropdown list, select a currency to apply when all currency default options are unavailable.
   1. The currencies available in the dropdown are the currencies that are defined for your organization in the **Currencies** section of the **Currencies & costs** tab. [Learn more.](https://docs.charthop.com/add-and-delete-currencies)
   2. By default, your organization’s default currency is selected.
5. Enable the currency default options you want to apply. You can choose from the following:
   - Job currency
   - Person home address country
   - Job location country
6. Using the move icon (⋮⋮), select and drag the currency default options into the order you want them to apply. 
   - The currency default option in the 1st position is applied first.&#x20;
   - When that currency default option is not available, ChartHop applies the currency default option in the 2nd position, then the 3rd (when enabled). 
   - If you only enable one currency default option, that option automatically moves to the 1st position when you save your changes.
7. Select **Save** to save and apply your changes.

:::hint{type="info"}
[Modules:](https://www.charthop.com/pricing/) <font color="#000000">**HRIS |** </font>**Engagement | Goals | Performance |&#x20;**<font color="#000000">**Compensation Reviews |** </font>**Headcount Planning**
:::


[title] Custom profile tabs
[path] ChartHop for Administrators/Admin settings/Configuring profiles/

You can create new custom profile tabs and add them to your ChartHop organization's employee profiles.&#x20;

![](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/8u2GJPudxBt9LXIoMuFxf_image.png)

## Create a custom profile tab

To create a custom profile tab:

1. From the left sidebar, select **Admin.**
2. From the sub-menu, select **Profile Content.**&#x20;
3. In the profile tab view, at the bottom of the page, select the **+** button to create a new empty tab.
4. Name your tab by giving it a **Label** on the top of the tab.
5. Select **Apply&#x20;**&#x6F;n the bottom right. If you don't see the **+** button in the tab view, try scrolling your browser window all the way to the right.

To duplicate a custom profile tab:

1. From the left sidebar, select **Admin.**
2. From the sub-menu, select **Profile Content.&#x20;**&#x20;
3. In the profile tab view, at the top right of the page, select the duplicate button to create a new tab with the same settings and columns.

To delete a custom profile tab:

1. From the left sidebar, select **Admin.**
2. From the sub-menu, select **Profile Content.&#x20;**&#x20;
3. In the profile tab view, at the top right of the page, select the delete button to remove this profile tab.

## Configure a custom profile tab

You can give your custom profile tab a name, and configure how it appears in the employee profille.

::Image[]{src="https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/OE2U17oenx7Q5HfT0llDV_image.png" size="76" width="1622" height="1094" position="center" showCaption="false"}

Available settings include:

- **Label** - The label displayed for the tab. Newly created tabs are given the label of "New Tab" by default.
- **Active** - The tab's status. Newly created tabs are inactive by default.
- **Display on the profiles of&#x20;**- The tab will only be visible on people's profile who match the filtered criteria. Supports Carrot Query Language filters. No filters are applied by default so it will appear on all profiles.&#x20;
  - For example, if you want to create a tab for "Sales 1:1s" that would only appear on the profile of people in the Sales despartment you can add a `department="sales"` filter.
- **Visible to&#x20;**- Who can view the profile tab.
- **Ordering** - you can drag and drop tabs to re-order them. Click the grab handle on the left to move tabs.&#x20;



To configure a tab's settings:

1. From the left sidebar, select **Admin.**
2. From the sub-menu, select **Profile Content.**&#x20;
3. Select the tab you wish to configure from the top of the view.
4. Apply the following settings in the **Visibility** section:
   - **Label** - The label displayed for the tab. This is located at the top of the profile tab.
   - **Active** - The tab's status. Inactive tabs will not be shown.
   - **Visible to&#x20;**- Who can view the profile tab.
   - **Display on the profiles of&#x20;**- The tab will only be visible on people's profile who match the filtered criteria. Supports Carrot Query Language filters. No filters are applied by default so it will appear on all profiles.&#x20;
5. Select **Save**.

## Add columns to custom profile tabs

You can add up to 4 columns to a custom profile tab.

Each column can contain optionally contain 3 things:

1. A custom content block
2. Form Response History for a form or multiple forms (Recommended)
3. Field History for a field or set of fields

Columns can also be configured to only show up for certain people or on the profiles of certain people.&#x20;



::Image[]{src="https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/NyYq2DZbPs0SdibbIshPr_image.png" size="82" width="928" height="1082" position="center" showCaption="false"}

### Configure columns in a profile tab

To add a column to a custom profile tab:

1. From the left sidebar, select **Admin.**
2. From the sub-menu, select **Profile Content.**&#x20;
3. Select the tab you wish to add a tab column to from the top of the view.
4. In the **Tab Columns** section, select the **+** button to create a new blank tab column.&#x20;
5. Apply the following settings in the **Tab Columns** section:
   - **Header** - The label that will be displayed for the column.
   - **Display on the profiles of&#x20;**- Who's profiles the column should appear on
   - **Visible to** - Who can see the column
   - **Form Responses History** - Allows you to show every response about the person to a certain form.&#x20;
     - Recommended for most form-based use cases.
     - A card of each individual form response will display, historically, in a descending chronological order.&#x20;
   - **Fields** **History** - Allows you to add custom fields to your tab column.&#x20;
     - Recommended when needed to display the change in fields not related to a form.&#x20;
     - Fields will appear as individual cards that will display, historically, in a descending chronological order.&#x20;
     - Custom fields must be created in order to be accessible from the fields list. [Learn more](https://docs.charthop.com/custom-fields).
   - **Custom** **Content** - An area where you can create and edit the content of your tab using the rich text editor, Carrot Template syntax, or using Markdown.
     - Custom content appears at the top of the column, ahead of any form responses or field history cards.&#x20;
6. In the **Tab Configuration** panel on the bottom right of the tab, select **Apply** to save the tab column.



To duplicate a column in a profile tab:

1. From the left sidebar, select **Admin.**
2. From the sub-menu, select **Profile Content.&#x20;**&#x20;
3. In the profile tab view, to the right of **Columns** header, select the duplicate button to create a new column with the same settings and content.



To delete a custom column:

1. From the left sidebar, select **Admin.**
2. From the sub-menu, select **Profile Content.&#x20;**&#x20;
3. In the profile tab view, to the right of **Columns** header, select the delete button to remove the column.


[title] Guest
[path] ChartHop for Administrators/Access/User access controls/Built-in Roles/

The Guest role is given to people outside of your organization who have a need to view your org chart or other non-sensitive data.  

No sensitive data access is also granted with this role. Data sharing rules apply to all users regardless of role. Owners of artifacts like scenarios, dashboards, compensation reviews, and forms can restrict access to the respective artifact by person or filter.

**Typical ChartHop responsibilities for someone with this role:**

- Viewing ChartHop to understand the organization.

**Common organization titles for users who need the Guest access role:**

- Contractors
- Investors

The table below lists how users with this role can use the respective pages. If a page is not listed, users with this role cannot access that page.

### Sensitive data

- No sensitive data access is given.

### ChartHop employee pages

| **ChartHop page** | **Capabilities**                                                                                                                                                                                                                                                                 |
| ----------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Org Chart         | - Can view and filter.                                                                                                                                                                                                                                                           |
| Data Sheet        | * Can create custom views.
* Cannot edit any data other than their own personal information.
* Can share views.                                                                                                                                                                  |
| Map               | - Can edit their own location.                                                                                                                                                                                                                                                   |
| Home page         | * Can view all public information. 
* Can view and complete their own tasks.                                                                                                                                                                                                     |
| Dashboards        | - Can create dashboards.
- Can view dashboards that have been shared with them.                                                                                                                                                                                                  |
| Scenarios         | * Can create scenarios.
* Can view scenarios that have been shared with them.                                                                                                                                                                                                    |
| Employee profiles | - View others' public information.
- Edit their own personal information.
- Set what information of theirs that others can see.
- Can view compensation data for those in their reporting line.
- Can view manager-shared forms that are part of the profile, such as 1:1 forms. |
| History           | * Can view, filter and export historical data.                                                                                                                                                                                                                                   |
| Comp Reviews      | - Can view and approve a comp review that they have been assigned.                                                                                                                                                                                                               |

:::hint{type="info"}
[Packages](https://www.charthop.com/pricing/)**:&#x20;**<font color="#a9a9a9">Basic</font> <font color="#000000">|</font> <font color="#000000">**Headcount Planning** | </font><font color="#000000">**Compensation Reviews** | </font><font color="#000000">**Performance** | </font><font color="#000000">**Engagement** </font>
:::


[title] AI Chat Write Actions
[path] ChartHop AI with Access Guard/

AI Chat Write Actions enables the AI to make changes to your organization's data directly from a chat conversation. Rather than navigating to a profile or data sheet to make an update, users with the appropriate permissions can ask the AI to make changes on their behalf — and the AI will propose and execute those changes inline.

## Enabling AI Chat Write Actions

1. Navigate to **Admin > AI**
2. Ensure **AI Features** is enabled
3. In the **AI Pro** section, toggle on **AI Chat Write Actions**
4. Click **Save Settings**

****

![Chat Write Actions](https://api.archbee.com/api/optimize/CXAjUAezd9VEEVQBIYmdw/ef3KFpOmri5w37PnO6xY1_image.png "Chat Write Actions")

## How It Works

When AI Chat Write Actions is enabled, the AI can propose and apply updates to ChartHop data based on a user's natural language request. Before any change is applied, the AI will present a summary of the proposed update for confirmation. Changes are only made after explicit user approval.

Examples of what AI Chat Write Actions can do:

- Update a job title or department for an employee
- Change a field value on a person's profile
- Apply a set of changes described in plain language
- Create a Dashboard
- Create a Goal
- Assign a Task
- (more capabilities soon!)

## Permissions & Access Control

AI Chat Write Actions respects ChartHop's existing permission model. The AI can only make changes that the logged-in user is already authorized to make. It will not bypass field-level or role-based access controls.


[title] Connecting Claude to ChartHop via MCP
[path] ChartHop AI with Access Guard/AI Pro Features/

ChartHop supports MCP (Model Context Protocol) integration with Claude (by Anthropic), allowing users to query ChartHop data directly from within Claude.

MCP access requires the AI Pro module. All data access follows each user's ChartHop access role and permissions.

## How It Works

Claude can read ChartHop data on behalf of the authenticated user. Access is read-only for now. Write access is planned for a future release.

Admins configure the Claude agent and can restrict what data is available, from fully open (matching Ask ChartHop's scope) to a narrower dataset. Individual user permissions always apply regardless of scope.

## For Admins: Initial Setup

![Find Claude in Available Agents list](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/DTAEVvLQO5TxKTQqVwHVW_image.png)

![Copy the MCP server URL](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/aRi9_ZHuowsWVauQUrsSU_image.png)

### Step 1: Install the Claude Agent in ChartHop

1. Navigate to Apps, Agents & Bundles in the sidebar.
2. Select the Agents tab.
3. Find Claude in the list of available agents and install it.
4. Select Role: Admins can configure the scope of the Claude agent:
   - Agent Role (recommended role) - Recommended default for agents. Can read all data including sensitive data, send messages, submit forms, create scenarios and reports, and read from connected external apps. Cannot edit or delete records, change configuration, impersonate users, or write to external apps.
   - Other Roles - Read through descriptions on the Access Roles page to find alternatives to Agent role if desired
     - User-level permissions always apply. Users will never see data they can't access in ChartHop.
5. Copy the MCP Server URL from the agent settings. If you have more than one organization in ChartHop, you can copy the Any Organization URL. If you only have one, which is typical, copy the This Organization URL.&#x20;



![Add Custom Connector in Claude](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/Qf52-7Fq5bfXZUEgE45ZH_image.png)

![](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/r2gbuwIvDEXneEANGhxkk_image.png)

### Step 2: Add a Custom Connector in Claude

Team and Enterprise plans: Only an Owner or Primary Owner can add a connector via Organization settings > Connectors. Once added, it will be available for members to connect to.

1. In Claude, click Customize.
2. Click Connectors.
3. Click Add Connector.
4. Enter a Name (e.g. ChartHop) and paste the MCP Server URL.
5. Add the connector.


![](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/YdjYLuvBIo-uYZPsTs1l-_image.png)

## For Users: Connecting Your Account

Once an admin has set up the ChartHop connector, each user needs to connect their own account.

1. In Claude, click Customize.
2. Click Connectors.
3. Search for ChartHop under the Not Connected category.
4. Click Connect and complete the OAuth flow using your ChartHop credentials.

Tip: If you don't see ChartHop listed, try refreshing the page or restarting Claude.

## Use Claude to Access Information about Your Org!

![](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/AizU-10oOSaf1pHmSWib9_image.png)


[title] Add and delete currencies
[path] ChartHop for Administrators/Admin settings/Configuring financial settings/Managing Currencies and costs/

In the **Currencies** section, you can see a table of all the currencies used by your organization for compensation purposes, including the current rates and the rate source.&#x20;

:::hint{type="info"}
Currency rates are populated using currencylayer. [currencylayer](https://currencylayer.com/) is an API service that provides updated and accurate currency data for use with ChartHop. Conversion rates are updated on the first of each month.&#x20;
:::

![Currencies table](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/QEug0Q-hQH3xZY4UQbgw8_admin-financial-currencies-table.png)

:::hint{type="info"}
The rate comparisons that display underneath a rate are compared against the default currency for the organization.
:::

### Add a currency

You can add additional currencies to the table. This is helpful for when you are adding new employees to your ChartHop organization and those new employees must be paid using an unlisted currency.&#x20;

![Add a currency](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/ZXU-5QuLglJ5mr09otg75_admin-financial-currencies-add.png)

To add an additional currency to the table:

1. From the left sidebar, select **Admin**.
2. From the sub-menu, select **Financial**.
3. In the **Currencies** section, select **+** **Add additional currency**.&#x20;
4. In the fields that display:
   - **Currency** - Select a currency from the dropdown list. The currencies that display in the list are populated from currencylayer.
   - **Conversion rate source** - Select the source for the currency rate from the following:&#x20;
     - **currencylayer** - Automatically populates currency rates from [currencylayer](https://currencylayer.com/). This option is selected by default.
     - **Custom** - Allows you to enter a custom currency rate. [Learn more.](https://docs.charthop.com/set-custom-currency-rates)
5. Select **Save** at the bottom of the **Currencies & costs** tab to save your changes. The additional currency is added to the list.&#x20;

:::hint{type="info"}
You can add multiple currencies at once by selecting **+ Add additional currency** multiple times. To delete a new currency row, select the trash can icon.
:::

### Delete a currency

To delete a currency from the currencies list:

1. From the left sidebar, select the Settings menu (gear icon) and select **Org settings**.
2. Select the **Currencies & costs&#x20;**&#x74;ab.
3. In the **Currencies** section, select the action menu at the left of the row for the currency you want to delete.
4. Select **Delete**.
5. Select **Save** at the bottom of the **Currencies & costs** tab to save your changes.

:::hint{type="info"}
[Modules:](https://www.charthop.com/pricing/) <font color="#000000">**HRIS |** </font>**Engagement | Goals | Performance |&#x20;**<font color="#000000">**Compensation Reviews |** </font>**Headcount Planning**
:::


[title] Owner
[path] ChartHop for Administrators/Access/User access controls/Built-in Roles/

The Owner role is the broadest access role that can be granted. Those with the Owner role have no limitations to what they can do in ChartHop and has access to ALL sensitive data.

Those with the Owner role can edit all employee data in ChartHop and access ALL ChartHop administration pages, which allows them to configure integrations, create new fields and forms, and start Compensation or Performance reviews. 

Someone with this role can also configure integrations with ChartHop, such as a payroll app or Slack. Owners are also allowed to install ChartHop bundles which can contain forms, fields, and dashboards. Users with this role can grant others access to ChartHop.

All roles have standard access, which includes the following:

- Access to all non-administrative functions of ChartHop, including scenarios and dashboards.&#x20;
- Ability to view their own compensation data and the compensation data of those who report to them.&#x20;
- Can edit or hide their own personal data.

Data sharing rules apply to all users regardless of role. Owners of artifacts like scenarios, dashboards, compensation reviews, and forms can restrict access to the respective artifact by person or filter.

You can apply a filter to this role to have it apply to a subset of users; for example, all managers within a department or only HR leaders in a specific location.

**Typical ChartHop responsibilities for someone with this role:**

- Granting access roles to other employees.
- Inviting employees to use ChartHop.
- Managing headcount plans and jobs,  including merging scenarios into your primary org data.
- Configuring ChartHop for your organization, including installing integrations.
- Creating compensation and performance reviews.
- Creating employee surveys (new fields and forms)
- Employee data management,
- Creating and sharing dashboards.

**Common organization titles for users who need the Owner access role:**

- HR Business Partner
- VP/Head or Director of People
- People Operations
- Head of M\&A
- VP/Head/Director of Talent

The tables below list how users with this role can use the respective pages. If a page is not listed, the role does not grant access to that page.

### Sensitive data

:::hint{type="warning"}
Only users with sensitive data access can view future-dated org changes, such as unannounced promotions and so on.
:::

| **&#x20;ChartHop feature** | **Capabilities**                                                                                                                                |
| -------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------- |
| Sensitive data access      | - Can view their own compensation data and personal data.
- Can view all compensation data, personal information, and all other sensitive data. |
| View as                    | * Can view ChartHop as another user to verify what they can view and access.                                                                    |

### Employee pages

| **ChartHop page**    | **Capabilities**                                                                                                                                                                                                              |
| -------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Org Chart            | - Can add or delete data about jobs or people, including making job transfers, terminations, and new jobs.                                                                                                                    |
| Data Sheet           | * Can create custom views of the Data Sheet.
* Can share views.
* Can add or delete data about jobs or people, including making job transfers, terminations, and new jobs. 
* Can edit sensitive data including compensation. |
| Map                  | - Can edit their own location.
- Can edit the location data of others.                                                                                                                                                        |
| Home Page            | * Can view all public information. 
* Can view and complete their own tasks.                                                                                                                                                  |
| Dashboards           | - Can create dashboards.
- Can view dashboards that have been shared with them.                                                                                                                                               |
| Scenarios            | * Can create scenarios.
* Can view scenarios that have been shared with them.
* Can merge a scenario to the primary org.                                                                                                      |
| Employee profiles    | - View and others' public and private information, including compensation.
- Set what information of theirs that others can see.
- Can view all forms that are part of the profile such as 1:1 forms.                         |
| Compensation reviews | * Can create compensation reviews.
* Can be assigned to be an approver or reviewer of a compensation review.                                                                                                                  |
| Reviews              | - Can create, edit, and monitor reviews.                                                                                                                                                                                      |

### Administration pages

| **ChartHop page**       | **Capabilities**                                                                                                                                                                                                                                                                  |
| ----------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Groups                  | - Can create new groups, departments, and teams and place employees in those groups.                                                                                                                                                                                              |
| Users                   | * Can manage user access for ChartHop, including inviting employees, assigning roles, and creating new users.                                                                                                                                                                     |
| Import spreadsheet data | - Can import employee data by using a spreadsheet. &#xA;&#xA;Spreadsheet imports can include adding new employees, changing information for existing employees, adding open jobs, organizational history info, and financial information such as equity and compensation changes. |
| Org settings            | * Can configure organization-wide settings such as currency, home page customizations, logo, and so on.                                                                                                                                                                           |
| Fields                  | - Can create new custom fields and edit custom fields.                                                                                                                                                                                                                            |
| Categories              | * Can create and edit field categories.                                                                                                                                                                                                                                           |
| Forms                   | - Can create, edit and configure settings for forms.                                                                                                                                                                                                                              |
| Tasks                   | * Can delete and send reminders for tasks                                                                                                                                                                                                                                         |
| Profile tabs            | - Can customize employee profile tabs.                                                                                                                                                                                                                                            |
| Apps                    | * Can install app integrations and pre-configured bundles of fields and forms.                                                                                                                                                                                                    |
| Billing                 | - Can manage payment for the ChartHop subscription.                                                                                                                                                                                                                               |
| Sync history            | * Can monitor the sync history page to view job data flow from ChartHop to an organization’s applicant tracking system (ATS).
* Can manage app settings.                                                                                                                          |
| Actions                 | - Can customize ChartHop actions that trigger events such as sending reminders.                                                                                                                                                                                                   |

:::hint{type="info"}
[Modules:](https://www.charthop.com/pricing/) <font color="#000000">**HRIS |** </font>**Engagement | Goals | Performance |&#x20;**<font color="#000000">**Compensation Reviews |** </font>**Headcount Planning**
:::


[title] Controlling sensitive data
[path] ChartHop for Administrators/Access/User access controls/

:::hint{type="info"}
[Modules:](https://www.charthop.com/pricing/) <font color="#000000">HRIS | </font>**Engagement | Goals | Performance |&#x20;**<font color="#000000">Compensation Reviews | </font>**Headcount Planning**
:::

You can set sensitivity levels on certain data in ChartHop to ensure that only users with permission to see sensitive data can view it.&#x20;

Controlling the sensitivity levels on the custom fields and forms you use in ChartHop allows you to ensure your organization has the right data to make decisions and that sensitive data isn't shared with employees who shouldn't see it.&#x20;

:::hint{type="info"}
You can't change the sensitivity level for a built-in ChartHop field. Use the Fields page to view the sensitivity levels for the fields used in ChartHop. [Learn more.](https://docs.charthop.com/working-with-the-fields-page)
:::

Assigning sensitivity levels to specific data ensures that data is shared only with the appropriate users (for example, 1:1 notes or planning scenarios are shared only with managers).&#x20;

You can customize the sensitivity levels on the following aspects of ChartHop:

- Custom forms
- Custom fields
- Custom profile tabs

## Sensitivity Levels

The following sensitivity levels are available within ChartHop:

| **Sensitivity Level** | **Description**                                                                                                                                                                                                                                                                                                                             | **Examples**                                                                                                                            |
| --------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------- |
| **Org Public**        | Visible to the entire organization (in other words, this is data that is considered public knowledge within a single organization).                                                                                                                                                                                                         | Org chart and structure                                                                                                                 |
| **Manager-Shared**    | Use this option to grant access to an item to a manager and direct report that it is associated with.<br /><br />Visible only to the following:<br />\* the specified person<br />\* anyone to whom they report<br />\* users with sensitive access                                                                                         | - Compensation information for direct reports.<br />- Manager 1:1 forms.                                                                |
| **Manager-Only**      | Use this option to grant access to the employee's manager only.<br /><br />Visible only to the following:<br />- anyone to whom they report<br />- users with sensitive access<br /><br />Users who have no direct reports and do not have sensitive access will not see Manager-Only fields at all — including the existence of the field. | Manager performance reviews                                                                                                             |
| **Personal**          | Visible only to the following:<br />- the specified person<br />- users with sensitive access                                                                                                                                                                                                                                               | Birth Year                                                                                                                              |
| **Highly Sensitive**  | The most restrictive sensitivity level. The field — including its name — is completely hidden from users who do not have sensitive access. It will not appear in dropdowns, menus, visualize options, or anywhere else in the UI for those users. Only visible to users with sensitive access.                                              | \* Future-dated org changes<br />\* Internal HR notes<br />\* Personal address<br />\* PTO information<br />\* Compensation information |

:::hint{type="warning"}
**Highly Sensitive fields are fully hidden, not just redacted.** Unlike lower sensitivity levels that may show a field name while hiding its value, Highly Sensitive fields are invisible in their entirety to users without sensitive access.
:::

## Verifying sensitivity levels for field data

ChartHop's built-in fields have default sensitivity levels that you can't change. For example, personal data fields like home address and home email have a data sensitivity level of Personal. However, your organization may have created additional fields for employee data that are org public. To keep yourself up-to-date on the sensitivity levels for the fields in your org, use the **Fields** page to view this information.&#x20;

To verify your organization's data sensitivity for fields:

1. From the left sidebar, select the Settings (gear) menu and select **Fields**.
2. On the **Fields** page, sort the list by the Sensitivity column. You can choose **Sort asc** or **Sort desc**. The list sorts and you can scroll to view the sensitivity levels for particular fields.

Please consult our [privacy policy](https://docs.charthop.com/privacy-policy) for more information about how we protect your sensitive data and how it is used.

[title] Inviting users
[path] ChartHop for Administrators/Access/User management/

:::hint{type="info"}
[Modules:](https://www.charthop.com/pricing/) <font color="#000000">**HRIS |** </font>**Engagement | Goals | Performance |&#x20;**<font color="#000000">**Compensation Reviews |** </font>**Headcount Planning**
:::

:::hint{type="info"}
****[Roles](https://docs.charthop.com/user-roles-and-permissions): Owner | Technical owner 
:::

After you create your ChartHop organization, you can start inviting employees to use ChartHop. You can invite people to ChartHop users either automatically or manually.

:::hint{type="info"}
You can also add ChartHop users that are not a part of your organization. [Learn more.](https://docs.charthop.com/adding-a-user)
:::

Start by inviting specific individuals to try ChartHop. For people in functions such as People, Recruiting, IT, or Finance, you can set their permissions appropriately from the User Management page. *Most* people should be set to the Employee role.

The method you use and the roles available to grant users differ depending on the ChartHop package you are using.&#x20;

| **ChartHop package**                                               | **Invitation method**                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   |
| ------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| ChartHop Basic                                                     | - **Automatically invite users and assign roles:** ChartHop Basic customers can configure automatic invitations from the Org Settings page. &#xA;ChartHop Basic users can have one of two roles: Employee or Owner. [Learn more.](https://docs.charthop.com/automatic-invitations) &#xA;
- **Manually invite users and assign roles.&#x20;**&#x55;se User Management page. [Learn more.](https://docs.charthop.com/manual-invitations)<br />                                                                                                                                                                                                            |
| ChartHop Headcount Planning, Comp Reviews, Performance, Enablement | * **Automatically invite users and assign roles:&#x20;**&#x43;hartHop Standard and ChartHop Premium customers can use the User Access manager to automatically invite users. &#xA;ChartHop Standard includes multiple roles including specialized roles for recruiters. ChartHop Standard customers can create rules and filters on which to automatically send user invitations, such as deciding not to invite contractors to use ChartHop. [Learn more.](https://docs.charthop.com/user-access-manager)&#xA;
* **Manually invite users and assign roles**. Use the User Management page. [Learn more.](https://docs.charthop.com/manual-invitations) |

### Should you invite everyone?

Do what makes the most sense for your own organizational culture, but we believe everyone benefits from better transparency, communication, and context.

Inviting individual contributors into ChartHop will help everyone know what roles are open, review their own compensation, get context on org structure and people around the organization, and communicate organizational changes with clarity.

It's especially helpful for people who are onboarding and finding their way around! In our experience anywhere from 10-25% of an organization will usually log into ChartHop on a daily basis.

## Sample messages

***

### Human resources / finance team

Attention team,

You should have all received a welcome email to ChartHop. We will be using ChartHop for hire planning, compensation planning, employee performance, 1on1s, and reporting moving forward.

We will be rolling this out to the executive team and all managers in the coming weeks and shortly after, to the rest of the organization. Please get familiar with navigating in ChartHop. If you have any questions, please reach out to IT.

**Setup**

1. Please login using the required SSO login. If you have any issues, please reach out to IT.
2. Please check your employee profile by clicking on your profile icon at the top right and clicking "My Profile." Fill out the company questionnaire, "About Me." Everyone in the organization can view when to best contact you, information about your working style, and random fun facts.

If you have any issues or see any inaccurate data reflected in ChartHop, please reach out to (contact name on HR team).

***

### Executives / managers

Attention team,

You should have all received a welcome email to ChartHop. We will be using ChartHop for hire planning, compensation planning, employee performance, 1on1s, and reporting moving forward.

Please ensure you are familiar with the platform and ready for any questions from your team as we will be rolling this out to the rest of the organization on MM/DD/YYYY.

**Setup**

1. Please login using the required SSO login.
2. Please check your employee profile by clicking on your profile icon at the top right and clicking "My Profile." Fill out the company questionnaire, "About Me." Everyone in the organization can view when to best contact you, how to contact you, and random fun facts.
3. Ensure all your direct reports are accurately reflected under Job Details in your employee profile. If any information is incorrect, please reach out to the people team.
4. Access your department page via the search engine and fill out this year's KPIs. *(Feel free to remove if your organization does not use KPIs)*

If you have any issues or see any inaccurate data reflected in ChartHop, please reach out to IT.

***

### Individual contributors

Attention Everyone,

You should have all received a welcome email to ChartHop. We will be using ChartHop moving forward to give you access to everything you need to know about your colleagues and personal information as well as company structure. You and your manager will start using ChartHop to track your 1on1s and Performance Review cycles progressively. Please make sure you are familiar with navigating around ChartHop and let your manager know if you have any questions.

**Setup**

1. Please login using the required SSO login. If you have any issues, please reach out to IT.
2. Please check your employee profile by clicking on **My Profile** on the left sidebar. Fill out the company questionnaire, "About Me." Everyone in the organization can view when to best contact you, how to contact you, and random fun facts.

If you have any issues or see any inaccurate data reflected in ChartHop, please reach out to IT.


[title] People Ops Admin (no sensitive data)
[path] ChartHop for Administrators/Access/User access controls/Built-in Roles/

The People Ops Admin (no sensitive data) role should be given to employees in your organization responsible for configuring and monitoring organizational processes, like performance reviews, engagement surveys, and compensation review cycles.&#x20;

The People Ops Admin role **has access** to configure and manage Fields, Forms, Categories, Compensation Reviews, Profile Tabs, and Actions, among others.&#x20;

This role **does not have access** to see sensitive data, change user permissions, configure integrations, or alter organization-wide settings.&#x20;

**For most organizations, this role should be the most commonly-used administrator role.&#x20;**

All roles have standard access, which includes the following:

- Access to all non-administrative functions of ChartHop, including scenarios and dashboards.&#x20;
- Ability to view their own compensation data and the compensation data of those who report to them.&#x20;
- Can edit or hide their own personal data.

Data sharing rules apply to all users regardless of role. Owners of artifacts like scenarios, dashboards, compensation reviews, and forms can restrict access to the respective artifact by person or filter.

You can apply a filter to this role to have it apply to a subset of users; for example, all managers within a department or only HR leaders in a specific location.

**Typical ChartHop responsibilities for someone with this role:**

- Sending out Engagement surveys and monitoring the results
- Configuring and monitoring a Performance Review Cycle or Compensation Review Cycle

**Common organization titles for users who need the Org editor access role:**

- People Ops Manager
- People Ops Associate
- HR Associate

The tables below list how users with this role can use the respective pages.&#x20;

### Sensitive data

:::hint{type="warning"}
Only users with sensitive data access can view future-dated org changes, such as unannounced promotions and so on.
:::

| **&#x20;ChartHop feature** | **Capabilities**                                          |
| -------------------------- | --------------------------------------------------------- |
| Sensitive data access      | - Can view their own compensation data and personal data. |

### Employee pages

| **ChartHop feature** | **Capabilities**                                                                                                                                                                                                                                                                         |
| -------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Org Chart            | - Can view and filter                                                                                                                                                                                                                                                                    |
| Data Sheet           | * Can create custom views
* Can share views
* Cannot edit any data other than their own personal information                                                                                                                                                                             |
| Map                  | - Can edit their own location                                                                                                                                                                                                                                                            |
| Home page            | * Can view all public information. 
* Can view and complete their own tasks.                                                                                                                                                                                                             |
| Dashboards           | - Can create dashboards.
- Can view dashboards that have been shared with them.                                                                                                                                                                                                          |
| Scenarios            | * Can create scenarios.
* Can view scenarios that have been shared with them.                                                                                                                                                                                                            |
| Employee profiles    | - Can view others' public information.
- Can edit their own personal information.
- Set what information of theirs that others can see.
- Can view compensation data for those in their reporting line.
- Can view manager-shared forms that are part of the profile, such as 1:1 forms. |
| Comp reviews         | * Can create compensation reviews.
* Can be assigned to be an approver or reviewer of a compensation review.                                                                                                                                                                             |
| History              | - Can view, filter and export org public historical data and other historical data they otherwise have access to (i.e. personal historical data and historical data for those in their reporting line)
- Cannot make any changes.                                                        |
| Files & Signatures   | * Can view and edit the name and access of files that they already have access to&#x20;
* Can sent and cancel requests for signatures of files that they already have access to&#x20;                                                                                                    |

### Administration pages

| **ChartHop Page**       | **Available actions**                                                                                                                                 |
| ----------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------- |
| Fields                  | - Can create, edit, update, and delete custom fields
- Can override ChartHop built-in fields
- Can hide/unhide fields                                 |
| Groups                  | * Can create and manage new groups, departments, and teams&#x20;                                                                                      |
| Compensation bands      | - Can import and update compensation bands for the organization.                                                                                      |
| Import spreadsheet data | * No access                                                                                                                                           |
| Sync history            | - Can monitor the sync history page to view job data flow from ChartHop to an organization’s applicant tracking system (ATS).
- Can rerun data syncs. |

:::hint{type="info"}
[Packages](https://www.charthop.com/pricing/)**:&#x20;**<font color="#a9a9a9">Basic</font> <font color="#000000">|</font> <font color="#000000">**Headcount Planning** | </font><font color="#000000">**Compensation Reviews** | </font><font color="#000000">**Performance** | </font><font color="#000000">**Engagement** </font>
:::


[title] Org editor
[path] ChartHop for Administrators/Access/User access controls/Built-in Roles/

The Org editor role should be given to employees in your organization responsible for making organizational updates such as adding or terminating employees, making compensation changes, updating personal information for employees, and organizing your employees by department, compensation band, or other groups. 

One with the Org editor role can perform job and people actions on general pages such as the Org Chart, Data Sheet, and Employee Profile pages. The Org editor also has access to the following data-related administration pages: Groups, Compensation Bands, Import Spreadsheet data, and Sync history.

Sensitive data access is also granted with this role. Those with the Org editor role have access to all sensitive data.

Grant the Org editor role to those in your organization that you want to have permission to edit employee data but are not responsible for larger people operations tasks such as starting a company compensation or performance review. 

All roles have standard access, which includes the following:

- Access to all non-administrative functions of ChartHop, including scenarios and dashboards.&#x20;
- Ability to view their own compensation data and the compensation data of those who report to them.&#x20;
- Can edit or hide their own personal data.

Data sharing rules apply to all users regardless of role. Owners of artifacts like scenarios, dashboards, compensation reviews, and forms can restrict access to the respective artifact by person or filter.

You can apply a filter to this role to have it apply to a subset of users; for example, all managers within a department or only HR leaders in a specific location.

**Typical ChartHop responsibilities for someone with this role:**

- Managing headcount plans and jobs, including merging scenario proposals into your primary org data
- Employee data management
- Creating and sharing dashboards

**Common organization titles for users who need the Org editor access role:**

- C-suite
- Chief Finance Officer
- VP of HR

The tables below list how users with this role can use the respective pages. If a page is not listed, the role does not grant access to that page.

### Sensitive data

:::hint{type="warning"}
Only users with sensitive data access can view future-dated org changes, such as unannounced promotions and so on.
:::

| **&#x20;ChartHop feature** | **Capabilities**                                                                                                                                |
| -------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------- |
| Sensitive data access      | - Can view their own compensation data and personal data.
- Can view all compensation data, personal information, and all other sensitive data. |
| View as                    | * Can view ChartHop as another user to verify what they can view and access.                                                                    |

### Employee pages

| **ChartHop feature** | **Capabilities**                                                                                                                                                                                                               |
| -------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| Org Chart            | - Can add or delete data about jobs or people, including making job transfers, terminations, and new jobs. 
- Can edit sensitive data in employee profile pages, including compensation.                                       |
| Data Sheet           | * Can create custom views of the Data Sheet.
* Can share views.
* Can add or delete data about jobs or people, including making job transfers, terminations, and new jobs. 
* Can edit sensitive data, including compensation. |
| Map                  | - Can edit their own location and the location data of others.                                                                                                                                                                 |
| Home page            | * Can view all public information. 
* Can view and complete their own tasks.                                                                                                                                                   |
| Dashboards           | - Can create dashboards.
- Can view dashboards that have been shared with them.                                                                                                                                                |
| Scenarios            | * Can create scenarios.
* Can view scenarios that have been shared with them.
* Can merge a scenario to the primary org.
* Can see all sensitive data changes, including job changes and compensation.                         |
| Employee profiles    | - View other's public information.
- Edit their own information.
- Can edit others’ information, including job history.                                                                                                        |
| Comp reviews         | * Can create compensation reviews.
* Can be assigned to be an approver or reviewer of a compensation review.                                                                                                                   |
| History              | - Can view, filter and export historical data.
- Can make changes to job history, including deleting previous changes                                                                                                          |
| Files & Signatures   | * Can view and edit the name and access of files
* Can sent and cancel requests for signatures                                                                                                                                 |

### Administration pages

| **ChartHop Page**       | **Available actions**                                                                                                                                                                                                                                                            |
| ----------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Groups                  | - Can create new groups, departments, and teams and place employees in those groups.                                                                                                                                                                                             |
| Compensation bands      | * Can import and update compensation bands for the organization.                                                                                                                                                                                                                 |
| Import spreadsheet data | - Can import employee data by using a spreadsheet.&#xA;&#xA;Spreadsheet imports can include adding new employees, changing information for existing employees, adding open jobs, organizational history info, and financial information such as equity and compensation changes. |
| Sync history            | * Can monitor the sync history page to view job data flow from ChartHop to an organization’s applicant tracking system (ATS).
* Can rerun data syncs.                                                                                                                            |

:::hint{type="info"}
[Packages](https://www.charthop.com/pricing/)**:&#x20;**<font color="#a9a9a9">Basic</font> <font color="#000000">|</font> <font color="#000000">**Headcount Planning** | </font><font color="#000000">**Compensation Reviews** | </font><font color="#000000">**Performance** | </font><font color="#000000">**Engagement** </font>
:::


[title] Setting up Google SSO
[path] ChartHop for Administrators/Access/Access Settings/Configuring SSO options/

You can configure your ChartHop organization with Google SSO. Google SSO requires employees in your ChartHop organization to have Gmail accounts.

### Set up Google SSO

To get started, visit [Google's SSO Setup](https://cloud.google.com/architecture/identity/single-sign-on#:~\:text=You%20can%20configure%20your%20Cloud,p) instruction page.

### Set up Google SSO in ChartHop

After completing Google's SSO setup instructions, you can enable the Google SSO option in ChartHop. In ChartHop, make sure your Organization is configured to accept Google SSO:

1. From the left sidebar, select **Access**.
2. From the sub-menu, select **Settings**.
3. Scroll to the **SSO** section on the page
4. Select the **Enable Google SSO&#x20;**&#x6F;ption.
5. Select **Save settings**.

ChartHop automatically configures your SSO by matching your company-issued Gmail account to the email assigned to you in your ChartHop user account when you attempt to sign on.

### Test the new login with Google SSO to ChartHop

To test your Google SSO configuration with ChartHop:

1. Log out of ChartHop.
2. Visit: `https://app.charthop.com/{org-slug}/account/login` where `{org-slug}` is your ChartHop organization's unique slug.
3. Confirm that your Google sign-in displays on the login screen.

:::hint{type="warning"}
If you encounter any issues during or after testing your Google SSO setup, please reach out to [support@charthop.com](#).
:::

:::hint{type="info"}
[Modules:](https://www.charthop.com/pricing/) <font color="#000000">**HRIS |** </font>**Engagement | Goals | Performance |&#x20;**<font color="#000000">**Compensation Reviews |** </font>**Headcount Planning**
:::


[title] Employee
[path] ChartHop for Administrators/Access/User access controls/Built-in Roles/

The Employee role is given to most employees, including managers. Employees with this role can access the main pages of ChartHop, including planning scenarios and dashboards. 

No sensitive data access is also granted with this role, except for being able to edit their own personal data and view the compensation of their direct reports.

Data sharing rules apply to all users regardless of role. Owners of artifacts like scenarios, dashboards, compensation reviews, and forms can restrict access to the respective artifact by person or filter.

**Typical ChartHop responsibilities for someone with this role:**

- Viewing ChartHop to understand the organization.
- Completing employee tasks assigned to them (1:1s, surveys) and participating in compensation reviews or scenarios when invited.

**Common organization titles for users who need the Employee access role:**

- All individual contributors and managers.

The table below lists how users with this role can use the respective pages. If a page is not listed, users with this role cannot access that page.

### Sensitive data

- Can view their own compensation data and personal data.
- Can view compensation data for those in their reporting line.

### ChartHop employee pages

| **ChartHop page** | **Capabilities**                                                                                                                                                                                                                                                                 |
| ----------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Org Chart         | - Can view and filter.                                                                                                                                                                                                                                                           |
| Data Sheet        | * Can create custom views.
* Cannot edit any data other than their own personal information.
* Can share views.                                                                                                                                                                  |
| Map               | - Can edit their own location.                                                                                                                                                                                                                                                   |
| Home page         | * Can view all public information. 
* Can view and complete their own tasks.                                                                                                                                                                                                     |
| Dashboards        | - Can create dashboards.
- Can view dashboards that have been shared with them.                                                                                                                                                                                                  |
| Scenarios         | * Can create scenarios.
* Can view scenarios that have been shared with them.                                                                                                                                                                                                    |
| Employee profiles | - View others' public information.
- Edit their own personal information.
- Set what information of theirs that others can see.
- Can view compensation data for those in their reporting line.
- Can view manager-shared forms that are part of the profile, such as 1:1 forms. |
| History           | * Can view, filter and export historical data.
* Cannot make any changes.                                                                                                                                                                                                        |
| Comp Reviews      | - Can view and approve a comp review that they have been assigned.                                                                                                                                                                                                               |


[title] AI Agents
[path] ChartHop AI with Access Guard/AI Pro Features/

**Status:** Alpha (AI Pro)

AI Agents are autonomous AI assistants that can be configured to take actions within ChartHop on behalf of your organization. Rather than simply answering questions, agents can be given a specific identity, set of instructions, and a defined scope of permissions — enabling them to perform multi-step tasks, answer questions using live org data, and execute automated workflows.

Agents are managed from **Admin > Agents**.

***

## Enabling AI Agents

1. Navigate to **Admin > AI**
2. Ensure **AI Features** is toggled on
3. In the **AI Pro** section, toggle on **AI Agents**
4. Click **Save Settings**

Once enabled, a **Default Agent** selector appears, letting you choose which agent users see by default when they open the AI chat.

***



![Create Agent](https://api.archbee.com/api/optimize/CXAjUAezd9VEEVQBIYmdw/r2b2YcAvHLWyuDQ8rJ5yQ_image.png "Create Agent")

## Creating an Agent

Agents are created from **Admin > Agents** using the **New Agent** button. The create/edit dialog contains the following fields:

### Identity

| Field             | Description                                                                              |
| ----------------- | ---------------------------------------------------------------------------------------- |
| **Name**          | A unique internal identifier for the agent (required). Used in URLs and API references.  |
| **Title**         | The display name shown to users (required).                                              |
| **Short Summary** | A one-line description of what the agent does (required). Shown in agent listings.       |
| **Image**         | An optional avatar image for the agent.                                                  |
| **Tags**          | Comma-separated tags to help categorize or filter agents.                                |
| **Description**   | A rich-text longer description of the agent's purpose, shown on the agent's detail page. |

### Behavior

| Field             | Description                                                                                                                                                                                                             |
| ----------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Personality**   | Defines the agent's tone, communication style, and persona (required). For example: *"You are a friendly, concise HR assistant who specializes in compensation questions."*                                             |
| **Knowledge**     | Background information the agent should have — facts about the organization, common terminology, or domain-specific context it should apply when answering questions.                                                   |
| **Instructions**  | Step-by-step or rule-based directives that tell the agent how to behave, what workflows to follow, and what actions to take in specific situations. This is the primary way to define the agent's operational behavior. |
| **Guardrails**    | Constraints on what the agent should *not* do. Use this to prevent the agent from discussing off-topic subjects, making certain kinds of recommendations, or overstepping its intended scope.                           |
| **Enable Memory** | When toggled on, the agent will remember context from previous conversations with each user. See [AI Memory](https://docs.charthop.com/ai-memory) for more detail.                                                      |

### Slack Configuration

Agents can optionally be connected to a Slack workspace, allowing the agent to be messaged directly in Slack. The following credentials from your Slack App configuration are required:

| Field                    | Description                                                                                                     |
| ------------------------ | --------------------------------------------------------------------------------------------------------------- |
| **Slack App ID**         | The unique identifier for your Slack app (e.g. `A012345678`). Found in your Slack app's Basic Information page. |
| **Slack Client ID**      | The OAuth client ID for your Slack app.                                                                         |
| **Slack Client Secret**  | The OAuth client secret. Stored securely and not displayed after saving.                                        |
| **Slack Signing Secret** | Used to verify that incoming requests come from Slack. Stored securely.                                         |

After saving, the agent must be connected to a Slack workspace from the **Messaging** tab (see below).

***

## Managing an Agent

Once created and installed, the agent detail page has four tabs: **Configure**, **Tools & Permissions**, **Actions**, and **Messaging**.

***



![Share](https://api.archbee.com/api/optimize/CXAjUAezd9VEEVQBIYmdw/Nx9A8ee_aEP-Y4z2ebxy4_image.png "Share")

## Sharing an Agent

Installed agents can be shared with other users in your organization using the **sharing controls** in the agent header. You can:

- Grant access to specific users or groups
- Set the agent's **sensitivity level** (Org-wide or High sensitivity) to control who can view and interact with it

Sharing is managed via the standard ChartHop sharing interface on the agent detail page.

***

![Configure](https://api.archbee.com/api/optimize/CXAjUAezd9VEEVQBIYmdw/c9UYOPANAs7buGW08yZ1Z_image.png "Configure")

### Configure Tab

The Configure tab lets you adjust the agent's core behavioral settings after creation. These fields mirror the behavior fields from the create dialog, and can be edited inline:

| Field             | Description                                                                                                                                                                                                               |
| ----------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Instructions**  | The agent's operational directives. Edit to refine how the agent responds and what tasks it performs.                                                                                                                     |
| **Personality**   | The agent's tone and communication style.                                                                                                                                                                                 |
| **Guardrails**    | Constraints on what the agent should avoid doing or saying.                                                                                                                                                               |
| **Resources**     | One or more ChartHop Resource pages (from the Resources section) that the agent should use as a knowledge base. Attaching resources gives the agent grounded, org-specific context to draw from when answering questions. |
| **Enable Memory** | Toggle to enable or disable cross-session memory for this agent.                                                                                                                                                          |

:::BlockQuote
**Note on overrides:** If an agent is installed to your org from an external source, the Configure tab shows the *effective* configuration — which may be a combination of the app-level defaults and any org-level overrides you have set.
:::

***



![Permissions & Approvals](https://api.archbee.com/api/optimize/CXAjUAezd9VEEVQBIYmdw/HeqW6HNCTQI3O5g0xIBwh_image.png "Permissions & Approvals")

### Permissions & Approvals Tab

This tab controls what the agent is *allowed to do* within ChartHop — its identity in the system, who oversees it, and which actions it can take autonomously.

| Field                   | Description                                                                                                                                                                                                                                                                                             |
| ----------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Role**                | The ChartHop role assigned to this agent. This determines what data the agent can read and what changes it is permitted to make. Choose the minimum role required for the agent's intended tasks.                                                                                                       |
| **Manager**             | An optional job in the org chart designated as the agent's "manager" — the person responsible for overseeing and approving the agent's actions.                                                                                                                                                         |
| **Autonomous Actions**  | A list of policy rules defining which actions the agent is permitted to take *without* requiring human approval. Each rule specifies a type of action (e.g. reading a field, creating a record) and the scope it applies to. Actions not covered by these rules will require approval before execution. |
| **Approval Guidelines** | Free-text instructions that help the agent understand *how* to seek approval when it needs to take an action outside its autonomous permissions. For example: *"When uncertain, always message the manager for approval before proceeding."*                                                            |

***



![Messaging](https://api.archbee.com/api/optimize/CXAjUAezd9VEEVQBIYmdw/A-b4C8vZH7f0KK9GTnhzE_image.png "Messaging")

### Messaging Tab

The Messaging tab shows the agent's Slack integration status and connection details.

| Section                 | Description                                                                                                                                            |
| ----------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------ |
| **Slack Config**        | Displays the Slack App ID and Client ID configured for this agent. A link to the app's settings page on api.slack.com is provided if an App ID is set. |
| **Connection Status**   | Shows whether the agent is currently **Connected** or **Not Connected** to a Slack workspace.                                                          |
| **Connection Details**  | When connected, displays the Slack Team ID and Bot User ID for the active connection.                                                                  |
| **Connect / Reconnect** | An OAuth button to initiate or re-authorize the Slack connection for this agent.                                                                       |

:::BlockQuote
The Messaging tab is only shown after the agent has been installed. Slack credentials must first be added via the create/edit dialog before a connection can be established.
:::

***

![](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/BQzTClsxzBjI5WDzKk0Ie_image.png)

### Memories Tab

The Memories tab shows the list of memories that have been saved to the agent, who made the change, how important it is scored, and when the memory was created. Selecting a Memory allows you to delete it.&#x20;

***



![Automation Actions](https://api.archbee.com/api/optimize/CXAjUAezd9VEEVQBIYmdw/3R-Wz3oE7JZQ7qMpJKIu4_image.png "Automated Actions")

## Automated Actions Tab

The Actions tab shows all ChartHop Actions that have been associated with this agent. These are automated workflows the agent can trigger as part of its responses.

Each action in the list shows:

- **Active toggle** — Enable or disable the action without deleting it
- **Description** — A link to the action's detail/edit view
- **Trigger** — The event or schedule that fires the action
- **Run As** — The user identity under which the action executes
- **Last Updated** — When the action was last modified

From this tab you can **create** new actions, **edit** existing ones, **duplicate** an action, **run** an action manually for testing, or **delete** actions.

:::BlockQuote
Actions associated with an agent are scoped to that agent and appear here for easy management. They can also be managed from **Admin > Actions**.
:::

***



![](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/ZSQIQ7sd5sIRPIyTNeBXT_image.png)

## Activity Log Tab

The Activity Log shows all the activity related to the agent in reverse chronological order.&#x20;

***

:::BlockQuote
AI Agents is an alpha feature and is subject to change. Access is limited to organizations with AI Pro enabled.
:::


[title] Set a default currency
[path] ChartHop for Administrators/Admin settings/Configuring financial settings/Managing Currencies and costs/

You can change the default currency for your organization (by default, US Dollar (USD) is configured as the **Org default**).

![Set the default currency](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/nPtd0X1P5-hOZ1dcTorRF_admin-financial-currencies-default.png)

To change the default currency for your ChartHop organization:

1. From the left sidebar, select **Admin**.
2. From the sub-menu, select **Financial**.
3. In the **Currencies** section, select the action menu at the left of the row for the currency you want to set as default.
4. Select **Set as org default currency**.
5. Select **Save** at the bottom of the **Currencies & costs** tab to save your changes. Rate comparisons are updated to be based off of your default currency.

:::hint{type="info"}
[Modules:](https://www.charthop.com/pricing/) <font color="#000000">**HRIS |** </font>**Engagement | Goals | Performance |&#x20;**<font color="#000000">**Compensation Reviews |** </font>**Headcount Planning**
:::


[title] Equity compensation viewer
[path] ChartHop for Administrators/Access/User access controls/Built-in Roles/

The Equity compensation viewer role is given to employees who have a role in determining and analyzing equity budget information. Employees with this role can access all equity compensation data. They cannot access cash compensation data.

All roles have standard access, which includes the following:

- Access to all non-administrative functions of ChartHop, including scenarios and dashboards.&#x20;
- Ability to view their own compensation data and the compensation data of those who report to them.&#x20;
- Can edit or hide their own personal data.

Data sharing rules apply to all users regardless of role. Owners of artifacts like scenarios, dashboards, compensation reviews, and forms can restrict access to the respective artifact by person or filter.

You can apply a filter to this role to have it apply to a subset of users; for example, all managers within a department or only HR leaders in a specific location.

**Typical ChartHop responsibilities for someone with this role:**

- Viewing ChartHop to understand the organization.
- Completing employee tasks assigned to them (1:1s, surveys), and participating in compensation reviews or scenarios when invited.
- Reviewing equity compensation to make budget decisions.

**Common organization titles for users who need the Equity compensation viewer access role:**

- FP\&A (Financial Planning and Analysis) manager
- Stock administrator

The table below lists how users with this role can use the respective pages. If a page is not listed, the role does not grant access to that page.

### Sensitive data&#x20;

- Can view their own compensation data and personal data.
- Can view compensation data for those in their reporting line (including cash and equity).
- Can view all **equity** compensation data for the organization.

### Employee pages

| **ChartHop page**    | **Capabilities**                                                                                                                                                                                                                                                                    |
| -------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Org Chart            | - Can view and filter.                                                                                                                                                                                                                                                              |
| Data Sheet           | * Can create custom views.
* Can view and edit all **equity** compensation data.
* Can share views.                                                                                                                                                                                 |
| Map                  | - Can edit their own location.                                                                                                                                                                                                                                                      |
| Home page            | * Can view all public information. 
* Can view and complete their own tasks.                                                                                                                                                                                                        |
| Dashboards           | - Can create dashboards.
- Can view dashboards that have been shared with them.                                                                                                                                                                                                     |
| Scenarios            | * Can create scenarios.
* Can view scenarios that have been shared with them.
* Can view all cash compensation data and changes to that data.                                                                                                                                       |
| Employee profiles    | - View others' public information.
- Edit their own personal information.
- Set what information of theirs that others can see.
- Can view all compensation data for those in their reporting line.
- Can view manager-shared forms that are part of the profile such as 1:1 forms. |
| History              | * Can view, filter and export historical data.                                                                                                                                                                                                                                      |
| Compensation reviews | - Can be assigned to be an approver or reviewer of a compensation review.                                                                                                                                                                                                           |

:::hint{type="info"}
[Packages](https://www.charthop.com/pricing/)**:&#x20;**<font color="#a9a9a9">Basic</font> <font color="#000000">|</font> <font color="#000000">**Headcount Planning** | </font><font color="#000000">**Compensation Reviews** | </font><font color="#000000">**Performance** | </font><font color="#000000">**Engagement** </font>
:::


[title] Setting up Stock valuations
[path] ChartHop for Administrators/Admin settings/Configuring financial settings/

In the **Stock valuations** tab, you can create stock options for your employees through option grants, strike prices, and fundraising events in your ChartHop organization.

You can use Stock valuations to manage and configure your stock options for your organization's employees, determine the strike price for option grants, and establish amounts to be allocated for fundraising events.

![Creating a Grant Price Stock valuation](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/K30a6cJNyjsYJxdvwABNl_admin-financial-stock-valuations.png)

To create a stock valuation:

1. From the left sidebar, select **Admin**.
2. From the sub-menu, select **Financial**.
3. Scroll down to the **Stock Valuations** section.
4. In the **Date** field, enter the date when the stock valuation will be established.
5. In the **Type** field, use the dropdown to select a stock value type:
   -  **Grant** **Price:&#x20;**&#x54;his should be the price used to determine employee compensation value -- the company's "best value" (as described by Fred Wilson in this [classic blog post](https://avc.com/2010/11/employee-equity-how-much)). When determining the present value of a stock option grant, grant price will be calculated against strike price.
   -  **Common** **FMV:&#x20;**&#x46;air Market Valuation performed, usually by an outside firm, to value the company's common stock for safe harbor under IRS 409A. These prices are used as the strike price for stock option grants
   - **Preferred** **Fundraise:&#x20;**&#x54;his is the price most recently paid by investors for preferred stock, entered when the company raises outside investment.
6. In the **Price/Share** field, enter the value of your price per share.
7. In the **Total shares fully diluted&#x20;**&#x66;ield, enter the value of your organizations total number of shares.
8. Select **+ Add valuation** to create the stock valuation.

:::hint{type="info"}
[Modules:](https://www.charthop.com/pricing/) <font color="#000000">**HRIS |** </font>**Engagement | Goals | Performance |&#x20;**<font color="#000000">**Compensation Reviews |** </font>**Headcount Planning**
:::


[title] AI Scenario Planner
[path] ChartHop AI with Access Guard/

:::hint{type="warning"}
This feature is currently in Alpha. Be one of the first customers to try it! Please share any feedback with the ChartHop team.&#x20;

### How to setup a Alpha Feature

1. Contact [ChartHop support](mailto\:support@charthop.com) or your CSM if you have one. They can activate the feature for you.&#x20;
2. Read below for setup instructions and context on how the feature will work.
:::

## AI Scenario planner&#x20;

Planning Module customers can user the Scenario planner button to create and analyze scenarios.&#x20;

![](https://archbee-image-uploads.s3.amazonaws.com/zxjhb7-DqnuzAP-lru1l3-Zb0-P-n5lKsD4BO1sF_ZE-20250509-035749.png)

### How to use the AI Scenario planner

1. Create a new **Custom Scenario**.&#x20;
2. Click the **✨ Scenario planner&#x20;**&#x62;utton to launch the chat window.&#x20;
3. Write a prompt about the scenario that you would like to create.&#x20;



### Example prompts for scenario building

- Add two new L2 engineers one on the front end team and one on the back end team to work on the new AI project. &#x20;
- Petra Kinney is leaving on 5/22. Can you create a backfill for them and move all of their direct reports to under Ibrahim Andrews.
- Using a typical ratio for Sales manager to AEs to BDRs build out a sales team that can sell $1M in product a quarter.






[title] Connecting a Custom Agent to Slack
[path] ChartHop AI with Access Guard/AI Pro Features/AI Agents/

This guide walks through setting up a custom ChartHop agent in Slack. These steps apply to any custom ChartHop agent.

***

## Step 1: Create a Custom App in Slack

The custom Slack app acts as the conduit between Slack and your custom ChartHop agent  passing messages back and forth so users can interact with the agent directly in Slack.



![api.slack.com/apps](https://api.archbee.com/api/optimize/CXAjUAezd9VEEVQBIYmdw/xuvwc-iIydsO4_dU3cEqA_image.png "api.slack.com/apps")

1. **Go to the Slack API site:** Navigate to [api.slack.com/apps](http://api.slack.com/apps) and sign in to the workspace where you want the agent to live.
2. **Create New App:** Click **Create New App**. When prompted for a setup method, choose **From scratch** (you'll apply the manifest in the next step), or **From an app manifest** if you prefer to paste the manifest immediately.
3. **Name the App and Select a Workspace:** Give the app a name matching your agent and pick the target workspace.
4. **Confirm Creation:** Once created, you'll land on the app's **Basic Information** page, where the **App ID**, **Client ID**, **Client Secret**, and **Signing Secret** are available for later steps.

***

Step 2: Upload a Slack App Manifest



![](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/Ig7t5AE9E5TCSq1tcR0El_image.png)

1. **Obtain a Manifest Template:** Use an existing app manifest as a baseline to ensure all boilerplate settings remain consistent. You can use [this manifest file](https://drive.google.com/file/d/1P98QQTgg7Dk1pe1MdXWFj7LxpQ2lSssB/view?usp=sharing) as your starting point.
2. **Update the Key Fields:** At the top of the JSON file, replace the name, short description, and hex color with the values for your specific agent. Use the same display name and short description as the ChartHop Agent.
3. **Paste into Slack:** In the Slack web view, navigate to **App Manifest** in the lower-left menu and paste your customized document to replace the existing settings.

***

## Step 3: Configure ChartHop Settings

![](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/NouLezFpCQjSwkFRM1OGl_image.png)

1. **Link Identifiers:** Copy the **Slack App ID**, **Slack Client ID**, **Client Secret**, and **Signing Secret** from the **Basic Information** section in your Slack app settings, and paste them into the ChartHop Agent edit form under **Slack App Configuration** (toward the bottom). Add them one at a time, since each value must be copied and pasted individually.
2. **Connect the App:** Go to the **Messaging** tab in the Agent side menu and select **Connect Slack App**.

***

## Step 4: Enable Direct Messaging



![](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/DsJxTH4-c5jiCzB9b-uNq_image.png)

1. **Configure App Home:** In the Slack app configuration, go to **App Home**.
2. **Allow Messages:** Check the box labeled **Allow users to send Slash commands and messages from the messages tab** and save the changes.
3. **Install the App:** Perform an app install by navigating the App Install menu item in Slack and clicking Install and choose your Slack location. Then click Allow.&#x20;
4. In ChartHop Agent, click on the Messaging menu and click Connect Slack App. Then click Allow.&#x20;

***

## Step 5: Verify Event Subscriptions and User Matching

![](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/iQ-1NqfST5hYfeOtGz40C_image.png)

1. **Check Event Subscriptions:** If the agent does not respond, go to **Event Subscriptions** in the Slack app configuration. If there is a failure message, click **Retry** and then **Save**.
2. **Sync User IDs:** Ensure the user's Slack account is matched to their ChartHop profile by running a **Slack Sync** in the ChartHop apps menu.
   - For the sync to work, the user must have their work email in Slack associated with a person record in the ChartHop org, and the email must match. Having a ChartHop user account with permissions is not enough — the user must be part of the org.
   - If the sync fails or connects to the wrong instance, uninstall and reinstall the Slack app before running the sync again.
3. **Test the Agent:** Attempt to direct message (DM) the agent in Slack. If it still does not respond immediately, wait a few minutes for the person contact cache to update.

***

:::BlockQuote
AI Agents is an alpha feature available to **AI Pro** users and is subject to change.
:::


[title] Manual invitations
[path] ChartHop for Administrators/Access/User management/Inviting users/

You can manually send invitations to users to make them members of your org. When you invite a user to ChartHop, they receive an email that allows them to set their password (if applicaple) and access ChartHop.

![](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/6kLuV3J0AHMpsTUuHyxDx-20250922-022037.png)

To send an invitation to a user:

1. From the left sidebar, select **Access**.
2. From the sub-menu, select **Users&#x20;**&#x69;f not already preselected
3. From the **Users** page, select the primary button in the top right corner: "**Invite org members**" to launch the invitre or members flow
4. **Select people to invite** is the first step and will show all current employees in your org who have not yet been invited to ChartHop. Use a filter or individually select the people who you would like to inite to ChartHop.&#x20;
   1. Terminated and preboarding employees will not be shown here. [Preboarding](docId\:o84lTFv6kh2imp46wNwZP) employees can be invited from the Onboarding page.  &#x20;
5. **Review roles** will show you all of the roles that will be assigned to each user and their email address. It allows you to make edits to the assigned roles.&#x20;
   1. Emails are required for every user. &#x20;
6. **Customize invitation&#x20;**&#x61;llows you to make a one-off modification to the invitation template set in [Customizing invitations](docId\:sHqC9zYK5aSQvHcqoKOT7). &#x20;
   1. Toggle **Send notification using** "Do not send a message" if you don't want to send an email out to everyone at the time of invitation
7. **Review and Send** gives you a preview of what you are about to send.&#x20;
8. Click **Send invitations&#x20;**&#x74;o invite the users.&#x20;



:::hint{type="info"}
[Modules:](https://www.charthop.com/pricing/) <font color="#000000">**HRIS |** </font>**Engagement | Goals | Performance |&#x20;**<font color="#000000">**Compensation Reviews |** </font>**Headcount Planning**
:::


[title] Fields
[path] Carrot reference/

A field in Carrot is a word that represents a built-in field or a custom field that has already been defined in ChartHop. All fields are case-insensitive.

A field contains a reference to specific job, employee and organization data, allowing operations to be ran on it in order to perform calculations or used in a filter.

Fields may also posses *properties&#x20;*&#x77;hich are unique members of data belonging to that field's particular *data type.*

Lean more about Carrot fields below:

- [Basic Org Information](docId\:Xtq28h8aa9DfDTtz0ZPjD)&#x20;
- [Compensation](docId:7S5ml_7npB3vlnvEsmMlv)&#x20;
- [Job Changes](docId\:ciPz7Jxm4WXxPXmDx-uwB)&#x20;
- [Permissions](docId\:NOcTBWb38Zu91ijaq0cpm)&#x20;
- [Personal](docId\:yKT7BoiqZo2TG3xbs1IBG)&#x20;
- [Recruiting](docId\:VTrcnj1QwmKZ5iwXF-X9T)
- [Structure](docId\:Hgc8SXKn4v8hm3H0eEJ_3)
- [TimeOff](docId\:raHsIHytvR1NsKqtdfkJA)
- [Data types](docId\:g3DlBCISrMWmXdCfLByBH)&#x20;




[title] Setting up OneLogin SSO
[path] ChartHop for Administrators/Access/Access Settings/Configuring SSO options/

You can configure your ChartHop organization with OneLogin SSO.&#x20;

### Generate your XML metadata file

Before configuring the OneLogin SSO client to ChartHop, you will need to contact [ChartHop support](#) for your metadata XML file.

### Setup SSO in OneLogin

You must configure your SAML 2.0 connection and receive your Issuer URL.

1. Under **Applications**, select **SAML Test Connector (Advanced)**.
2. Select the **SSO** tab.&#x20;
3. Ensure that the **SAML Signature Algorithm** is set to **SHA-256**. 
4. Download the **Issuer URL**.
5. Under **Configuration**, ensure that your settings are set to the following:
   - **RelayState -** https\://app.charthop.com
   - **Audience (EntityID)&#x20;**- ChartHop
   - **Recipient** - https\://api.charthop.com/saml/sso/\{org-slug}
   - **ACS (Consumer) URL Validation\*** - https\://api.charthop.com/saml/sso/\{org-slug}
   - **Login URL** - https\://api.charthop.com/saml/sso/\{org-slug}
   - **SAML Signature Element** - Assertion

:::hint{type="info"}
Your ChartHop organization's slug can be found in ChartHop under the **Org nickname** section under the **General** tab in **Org settings**.
:::

### Setup SSO In ChartHop

After you configure your OneLogin settings, enable the SSO option in ChartHop and upload your metadata in ChartHop.

1. From the left sidebar, select **Access**.
2. From the sub-menu, select **Settings**.
3. Scroll to the **SSO** section on the page.
4. Toggle **Enable OneLogin SSO**.
5. Upload the Issuer URL file under **OneLogin IDP metadata file content**.
6. Select **Save settings**.

### Test the new login with OneLogin SSO to ChartHop

To test your OneLogin SSO configuration with ChartHop:

1. Log out of ChartHop.
2. Visit `https://app.charthop.com/{org-slug}/account/login` where `{org-slug}` is your ChartHop organization's unique slug.
3. Confirm that your OneLogin sign-in displays on the login screen.

:::hint{type="warning"}
If you encounter any issues during or after testing your SSO setup, please reach out to [support@charthop.com](#).
:::



:::hint{type="info"}
[Packages](https://www.charthop.com/pricing/)**:&#x20;**<font color="#a9a9a9">Basic</font> <font color="#000000">|</font> <font color="#000000">**Headcount Planning** | </font><font color="#000000">**Compensation Reviews** | </font><font color="#000000">**Performance** | </font><font color="#000000">**Engagement** </font>
:::


[title] People Ops Admin
[path] ChartHop for Administrators/Access/User access controls/Built-in Roles/

The People Ops Admin role should be given to employees in your organization responsible for making organizational updates such as adding or terminating employees, and configuring and monitoring organizational processes, like performance reviews, engagement surveys, and compensation review cycles.&#x20;

The People Ops Admin role **has access** to all sensitive data including compensation, with the ability to edit and make permanent changes to the primary environment. This role has the ability to configure and manage Fields, Forms, Categories, Profile Tabs, and Actions, among others.&#x20;

This role **does not have access** to change user permissions, configure integrations, or alter organization-wide settings.&#x20;

**For most organizations, this role should be the most commonly-used administrator role.&#x20;**

All roles have standard access, which includes the following:

- Access to all non-administrative functions of ChartHop, including scenarios and dashboards.&#x20;
- Ability to view their own compensation data and the compensation data of those who report to them.&#x20;
- Can edit or hide their own personal data.

Data sharing rules apply to all users regardless of role. Owners of artifacts like scenarios, dashboards, compensation reviews, and forms can restrict access to the respective artifact by person or filter.

You can apply a filter to this role to have it apply to a subset of users; for example, all managers within a department or only HR leaders in a specific location.

**Typical ChartHop responsibilities for someone with this role:**

- Managing headcount plans and jobs, including merging scenario proposals into your primary org data
- Employee data management
- Sending out Engagement surveys and monitoring the results

**Common organization titles for users who need the Org editor access role:**

- Head of People Ops
- Chief Finance Officer
- VP of HR

The tables below list how users with this role can use the respective pages.&#x20;

### Sensitive data

:::hint{type="warning"}
Only users with sensitive data access can view future-dated org changes, such as unannounced promotions and so on.
:::

| **&#x20;ChartHop feature** | **Capabilities**                                                                                                                                                  |
| -------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Sensitive data access      | - Can view and edit their own compensation data and personal data.
- Can view and edit all compensation data, personal information, and all other sensitive data. |
| View as                    | * Can view ChartHop as another user to verify what they can view and access.                                                                                      |

### Employee pages

| **ChartHop feature** | **Capabilities**                                                                                                                                                                                                               |
| -------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| Org Chart            | - Can add or delete data about jobs or people, including making job transfers, terminations, and new jobs. 
- Can edit sensitive data in employee profile pages, including compensation.                                       |
| Data Sheet           | * Can create custom views of the Data Sheet.
* Can share views.
* Can add or delete data about jobs or people, including making job transfers, terminations, and new jobs. 
* Can edit sensitive data, including compensation. |
| Map                  | - Can edit their own location and the location data of others.                                                                                                                                                                 |
| Home page            | * Can view all public information. 
* Can view and complete their own tasks.                                                                                                                                                   |
| Dashboards           | - Can create dashboards.
- Can view dashboards that have been shared with them.                                                                                                                                                |
| Scenarios            | * Can create scenarios.
* Can view scenarios that have been shared with them.
* Can merge a scenario to the primary org.
* Can see all sensitive data changes, including job changes and compensation.                         |
| Employee profiles    | - View other's public information.
- Edit their own information.
- Can edit others’ information, including job history.                                                                                                        |
| Comp reviews         | * Can create compensation reviews.
* Can be assigned to be an approver or reviewer of a compensation review.                                                                                                                   |
| History              | - Can view, filter and export historical data.
- Can make changes to job history, including deleting previous changes                                                                                                          |
| Files & Signatures   | * Can view and edit the name and access of files
* Can sent and cancel requests for signatures                                                                                                                                 |

### Administration pages

| **ChartHop Page**       | **Available actions**                                                                                                                                                                                                                                                            |
| ----------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Fields                  | - Can create, edit, update, and delete custom fields
- Can override ChartHop built-in fields
- Can hide/unhide fields                                                                                                                                                            |
| Groups                  | * Can create and manage new groups, departments, and teams&#x20;
* Can assign employees to those groups                                                                                                                                                                          |
| Compensation bands      | - Can import and update compensation bands for the organization.                                                                                                                                                                                                                 |
| Import spreadsheet data | * Can import employee data by using a spreadsheet.&#xA;&#xA;Spreadsheet imports can include adding new employees, changing information for existing employees, adding open jobs, organizational history info, and financial information such as equity and compensation changes. |
| Sync history            | - Can monitor the sync history page to view job data flow from ChartHop to an organization’s applicant tracking system (ATS).
- Can rerun data syncs.                                                                                                                            |

:::hint{type="info"}
[Packages](https://www.charthop.com/pricing/)**:&#x20;**<font color="#a9a9a9">Basic</font> <font color="#000000">|</font> <font color="#000000">**Headcount Planning** | </font><font color="#000000">**Compensation Reviews** | </font><font color="#000000">**Performance** | </font><font color="#000000">**Engagement** </font>
:::


[title] Recruiting editor
[path] ChartHop for Administrators/Access/User access controls/Built-in Roles/

The Recruiting editor role allows recruiters to open and fill new jobs, including merging a hiring plan scenario to the primary ChartHop organization.

Those with the Recruiting editor can access their own sensitive data and the compensation data of those that report to them. They can view sensitive data associated with the open jobs they create and manage. Those with this role cannot perform any ChartHop administrative functions other than /monitoring the Sync History page.

All roles have standard access, which includes the following:

- Access to all non-administrative functions of ChartHop, including scenarios and dashboards.&#x20;
- Ability to view their own compensation data and the compensation data of those who report to them.&#x20;
- Can edit or hide their own personal data.

Data sharing rules apply to all users regardless of role. Owners of artifacts like scenarios, dashboards, compensation reviews, and forms can restrict access to the respective artifact by person or filter.

**Typical ChartHop responsibilities for someone with this role:**

- Creating new jobs.
- Viewing open jobs and the sensitive data associated with them.
- Monitoring data flow between ChartHop and an integrated applicant tracking system (if implemented).

**Common organization titles for users who need the Recruiting editor access role:**

- Head of Talent Acquisition

The tables below list how users with this role can use the respective pages. If a page is not listed, the role does not grant access to that page.

### Sensitive data

:::hint{type="warning"}
Only users with sensitive data access can view future-dated org changes, such as unannounced promotions and so on.
:::

- Can view their own compensation data and personal data.
- Can view compensation data for those in their reporting line.
- Can view and edit sensitive data related to open jobs.

### Employee pages

| **ChartHop page** | **Capabilities**                                                                                                                                                                                                                                                                 |
| ----------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Org Chart         | - Can add or delete data about jobs.                                                                                                                                                                                                                                             |
| Data Sheet        | * Can create custom views of the Data Sheet.
* Can share views.
* Can add or delete data about jobs.                                                                                                                                                                             |
| Map               | - Can edit their own location.                                                                                                                                                                                                                                                   |
| Home page         | * Can view all public information. 
* Can view and complete their own tasks.                                                                                                                                                                                                     |
| Dashboards        | - Can create dashboards.
- Can view dashboards that have been shared with them.                                                                                                                                                                                                  |
| Scenarios         | * Can create scenarios.
* Can view scenarios that have been shared with them.                                                                                                                                                                                                    |
| Employee profiles | - View others' public information.
- Edit their own personal information.
- Set what information of theirs that others can see.
- Can view compensation data for those in their reporting line.
- Can view manager-shared forms that are part of the profile, such as 1:1 forms. |
| History           | * Can view, filter and export historical data.
* Can edit and delete open jobs.                                                                                                                                                                                                  |
| Comp reviews      | - Can view comp reviews that they are invited to review or approve.                                                                                                                                                                                                              |

### Administration pages

| **ChartHop page** | **Available actions**                                                                                                                                            |
| ----------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Sync history      | - Can monitor the sync history page to view job data flow from ChartHop to an organization’s applicant tracking system (ATS).
- Can rerun an ATS sync operation. |

:::hint{type="info"}
[Packages](https://www.charthop.com/pricing/)**:&#x20;**<font color="#a9a9a9">Basic</font> <font color="#000000">|</font> <font color="#000000">**Headcount Planning** | </font><font color="#000000">**Compensation Reviews** | </font><font color="#000000">**Performance** | </font><font color="#000000">**Engagement** </font>
:::



[title] Relative to: submitter vs. scenario job
[path] ChartHop for Administrators/Admin settings/Enabling approvals/

Once approvals are enabled, you can create your first approval chain. There is no limit to how many approval chains you can have, however they will only be utilized if they are assigned as the default chain, or assigned to specific scenario types.

![](https://lh7-us.googleusercontent.com/asqtQ8d2p5AyRUphFlilu4rmK0T9m8pCXYmQIhs4MkUyHwyTwCvNOYexePtALcEKhJXysO9XxzIOS9YWraGF5Jv1ODgOryBQORQwKWhjMO3Vz2qxv5_-4jeVbMLTRn5-JtPFBCh5WO6WBRY8HuSUvUE)

An approval chain consists of the following:

**Submitter:** Person who is submitting the scenario request

**Approver(s):** Person(s) who will be responsible for approving or rejecting the changes requested.

**Fallback approver:** Person who will be placed in the approval chain if the designated approver is no longer in your org. If a person is reporting to an open job, their manager's manager will receive the request for approval rather than the open job.

**People notified:** Anyone in your org with access to merge a scenario is allowed to be set as a notified person.

When an approver is sourced from a person field — for example **Manager of requester**, **Second-level manager of requester**, or a custom person field like **Hiring Manager** — you can choose whose record that field is read off of.

![](https://i.postimg.cc/rpF34H6x/relative-approvals.png)

The **Relative to** toggle appears beneath the approver source dropdown and offers two options:

- **The person submitting the scenario** — the field is read off the submitter's own record. This is the default and matches previous behavior. Use this when the approver should be derived from *who is filing the request* (e.g., "the submitter's manager must approve").
- **The job in the scenario** — the field is read off the job (or jobs) being changed in the scenario. Use this when the approver should be derived from *the job under review* (e.g., "the Hiring Manager on the open req must approve").

## How multi-job scenarios resolve

When **Relative to** is set to **The job in the scenario**:

- If the scenario contains **one job**, you get one approver.
- If the scenario contains **multiple jobs**, you get an approver group containing every unique value of the field across those jobs. Each approver in the group is treated like any other group approver in the chain.

## When the toggle is hidden

The **Relative to** toggle only appears for field-based approver sources. It is hidden when the approver is configured as:

- **Specific persons** — no field lookup is involved, so the toggle is not applicable.
- **Custom expression** — the expression itself already determines what the approver resolves against.

## Reading the chain visualizer

Each stage card in the approval-chain visualizer shows a subtitle indicating which mode the approver uses — either **Relative to submitter** or **Relative to job** — so you can confirm at a glance that the chain is configured as intended.

# Assigning approval chains

Once you have approval chain(s) created, you can designate chains to be used on certain types of scenarios created.

At the top of the setup page, you can set a default approval chain for all scenario types that do not have an approval chain assigned.

::Image[]{src="https://lh7-us.googleusercontent.com/KAAT-i45onhNUmA4YEd8vfmOsb2c019N4JD8VLZJNhpHVAaC075Vlqb2FjItLzU8spznE85uc5TPraGcGkz1GI-DtswMCzug614GiQ9I7T_LdALqr9YNpPPSZsIKqv5Wmseh5XtaPiVHhjy--NFqaDk" size="46" width="694" height="514" position="center" showCaption="false"}

You can make a chain the default chain for specific types of scenarios by checking the box next to your chain, and choosing which scenario types it should be used for.

::Image[]{src="https://lh7-us.googleusercontent.com/b-uQhDDKSxx114cppduN7BsWcn8fROteHHnrXe-DXtWeZGxXSNtup4EItuSgVWkeue25xLn4q-8oD4xvIUDhKZ2vpDmTbMCGLAjCtNc9FZeMszS67JfPrFzKe4F6H4P-16B2QokHQg0yyWQwBnIZQeU" size="40" width="546" height="386" position="center" showCaption="false"}

::Image[]{src="https://lh7-us.googleusercontent.com/NXwtLWWKuJtwkOkLEbUQMk9sK5o6vvC7MWbthLZl9GfErw_4dyugEEqqNglDe0RzhVfv6U4qtruFS5a2zDgdCtbl6Z78FNpwblA4MRYLd5SFkdenpb-_u2aulOW285VEdmVDnblOOIVrW1NH4Thl_-c" size="68" width="1210" height="598" position="center" showCaption="false"}

This will override your default approval chain for those scenario types.

[Packages](https://www.charthop.com/pricing/): **Headcount Planning** | **Compensation Planning** | **HRIS**

[title] Configuring the Home page
[path] ChartHop for Administrators/Admin settings/

# Header

The header of the home page features your brand colors and logo that you can set in [general settings.](docId:20iYNxv8JlTodekfa6KoA)&#x20;

Your **primary brand color&#x20;**&#x61;n&#x64;**&#x20;horizontal logo** will be used in the header.&#x20;

![](https://archbee-image-uploads.s3.amazonaws.com/zxjhb7-DqnuzAP-lru1l3-7_sUY1AUvbTznva6PKCAr-20250314-184245.png)

![](https://archbee-image-uploads.s3.amazonaws.com/zxjhb7-DqnuzAP-lru1l3-RgERGYAvSoH-g6DIhiovr-20250314-184550.png)

Depending on what information you add your header will adjust:

No **Horizontal logo&#x20;**- Your **square logo** and org name will be displayed

![](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/6NmQQAKqps0TI7ZwoeC1K-20250926-205438.png)

N&#x6F;**&#x20;colors** **or logos&#x20;**- A nice simple grey background

![](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/7YVINNVl8quAlyU6rrLtf-20250926-205545.png)



# Widgets

You add, remove and customize the widgets that display for your organization on the Home page.

There are are 5 widgets that can be added or removed from the home page:

- [Calendar Week View](docId:3bBPrW-EGBg1YxIa0fL0C)&#x20;
- [Welcome Message](docId:3bBPrW-EGBg1YxIa0fL0C)
- [People Moves](docId:3bBPrW-EGBg1YxIa0fL0C)
- [Open Jobs](docId:3bBPrW-EGBg1YxIa0fL0C)
- [Milestones](docId:3bBPrW-EGBg1YxIa0fL0C)



::Image[]{src="https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/pZBEN1Nv5sPTnMBRRbKPR_image.png" size="64" width="988" height="2538" position="center" showCaption="false"}

## Welcome Message

The welcome message is a completely customizable way to share messages with your employees as they log into ChartHop. Some of our favorite use cases are:

- Showcasing your company values
- Announcing upcoming events or people ops activities
- Communicating where people should reach out with questions

You are able to add variables to the text based on who the person is. &#x20;

**Customization Example:**&#x20;

If you had an HRBP field, you could say: "Reach out to your HRBP: `{{hrbp}}`" and the HRBP's name would be inserted for each person.&#x20;

The welcome message widget is hidden if there is no content in it.&#x20;

## People Moves

### Changes to display

You can customize, which types of organizational changes are displayed in the people moves list. The changes will only be displayed after their "Announce Date."

- **Hires** - New hires are displayed on their start dates.
- **Departures** - People who are departing are displayed on their end date.
- **Moves** - Transfers of people from one job to another job. Displayed on the date of the  start int he new job.&#x20;
- **Manager changes&#x20;**- Displayed on the date that the manager changes.&#x20;
- **Title change&#x20;**- Displayed on the date that the title changes.&#x20;

### Time window

Select the time range for the changes that the the people moves should be displayed on.&#x20;

## Open Jobs

If you are displaying the open jobs, you have the option to either:

1. Display all jobs to all people (Default - Unchecked)
2. Display only jobs that align with the person's [Location](docId\:inCBUlReEk95ecZqtoXq-)  (Checked)

## Milestones

Select which types of dates should be displayed on the calender widget:&#x20;

- **Anniversaries**
  - Will display the number of years that someone has been at a company on the anniversary of their start date
- **Birthdays**
  - Employees can [set their birthday preferences on their profile](docId\:DcBuXvrGajcz2Z5iOH9kX). Their birth year and age is never displayed. 

### Export Milestones

Clicking the Export button from Milestones will allow you to sync your selected milestones to Excel, Google Sheets, and Outlook or Google calendars.  

### Time window

Select the time range for the changes that the the people moves should be displayed on.&#x20;

## Calendar Week View

The calendars you display will be the calendars enabled for the organization in Core Views. You can customize your calendar settings [here](https://docs.charthop.com/calendar-view). You can choose whether you want your weekly view to include weekends or just weekdays. 

The weekly view defaults to information for the entire organization. 

Default Calendars you can choose to display:

- **Time** **Off&#x20;**-If you use [ChartHop's](docId\:gfnA7naqvrlSNKQG1Ne0M) time off or your time off data is synced in from your HRIS, then it will be displayed if you select this calendar
- **Hires** - New hires are displayed on their start dates
- **Departures** - People who are departing are displayed on their end date
- **Anniversaries -**&#x57;ill display the number of years that someone has been at a company on the anniversary of their start date
- **Birthdays&#x20;**- Employees can [set their birthday preferences on their profile](docId\:DcBuXvrGajcz2Z5iOH9kX). Their birth year and age is never displayed.
- **Tasks** - Employees will see tasks assigned to themselves on the due dates if the task has one.
- **Performance Reviews** - If you have [selected a cycles dates](https://docs.charthop.com/calendar-view) to display on the calendar.
- **Engagement Surveys** - If you have [selected a cycles dates](https://docs.charthop.com/calendar-view) to display on the calendar.
- **Compensation Reviews**- Once they are launched, visible if an employee is participating in the cycle.




[title] Automatic invitations
[path] ChartHop for Administrators/Access/User management/Inviting users/

:::hint{type="info"}
[﻿﻿Roles:](https://docs.charthop.com/user-roles-and-permissions)  Owner&#x20;
:::

You can configure ChartHop to send invites to new employees automatically when you add them to ChartHop and remove them when they depart.&#x20;

![Automatic invitations](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/NuxdVziYQf1hZ3aUNw1np_access-settings-automatically-invite.png)

To configure Automatic invitations:

1. From the left sidebar, select **Access**.
2. From the sub-menu, select **Settings**.
3. Scroll to the **Automatically invite users** section.
4. From the general **Automatic invitations&#x20;**&#x70;age you can set:
   - Whether to automatically invite new employees and revoke their access upon their departure or not.
   - Default role assignments to new users invited to your organization.
5. In the **Advanced options** you can set:
   - When invitations will be sent a revoked:
     - By default, they are sent and revoked daily or if an employee is terminated on the same day then their are revoked as soon as they are terminated.&#x20;
     - If you unckeck **Send invitations and revoke access once daily** (recommended) - Then you will need to send and remove access manually
     - If you unckeck **Revoke access when the employee departs** - Then invitations will be automatic, but you will need to send and remove access manually
     - If you unckeck **Immediately revoke access when employee departs** - Then if an employee is terminated on the same day then they will be removed the next day rather than immediately.&#x20;
   - Employee's access rights to be revoked automatically upon their departure from the organization.
   - The list of specified users who will be notified when a user has been invited to, or has had their access revoked from, your organization.
     - A base or Carrot filter may be applied to limit the employee list. [Learn more](https://docs.charthop.com/filtering).
     - For example: Only send invitations to full time employees using: `employment:full`&#x20;
6. In the upper right of the page, select **Save settings** when you're done.


[title] Access Settings
[path] ChartHop for Administrators/Access/


[title] Technical owner
[path] ChartHop for Administrators/Access/User access controls/Built-in Roles/

The Technical owner role is the second most broad access role that can be granted. Those with the Technical owner role can access organization-wide administration pages to create new fields and forms, create groups and configure organization-wide settings.

Someone with this role can configure integrations with ChartHop, such as a payroll app or Slack. Technical owners are also allowed to install ChartHop bundles which can contain forms, fields, and dashboards. Users with this role can grant others access to ChartHop.

Those with the Technical owner role have NO access to sensitive data except their own and of those who report to them.

All roles have standard access, which includes the following:

- Access to all non-administrative functions of ChartHop, including scenarios and dashboards.&#x20;
- Ability to view their own compensation data and the compensation data of those who report to them.&#x20;
- Can edit or hide their own personal data.

Data sharing rules apply to all users regardless of role. Owners of artifacts like scenarios, dashboards, compensation reviews, and forms can restrict access to the respective artifact by person or filter.

You can apply a filter to this role to have it apply to a subset of users; for example, all managers within a department or only HR leaders in a specific location.

**Typical ChartHop responsibilities for someone with this role:**

- Installing and managing data integrations
- Creating forms and fields, including determining data types to use for fields and where and when forms are displayed in ChartHop.
- Configuring ChartHop for use within your organization, including org-wide settings like configuring SSO, org currencies, and so on.
- Inviting employees to use ChartHop and granting access roles.
- Creating and sharing dashboards.

**Common organization titles for users who need the Technical Owner access role:**

- PMO
- IT/DevOps

### Sensitive data

- Can view their own compensation data and personal data.
- Can view compensation data for those in their reporting line.

### Employee pages

The tables below list how users with this role can use the respective pages. If a page is not listed, the role does not grant access to that page.

| **ChartHop page**    | **Capabilities**                                                                                                                                                                                                                                                                                                                             |
| -------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Org Chart            | - Can view and filter.                                                                                                                                                                                                                                                                                                                       |
| Data Sheet           | * Can create custom views of the Data Sheet.
* Can share views.
* Can export.
* Can add or delete data about jobs or people.                                                                                                                                                                                                                 |
| Map                  | - Can edit their own location.                                                                                                                                                                                                                                                                                                               |
| Home page            | * Can view all public information. 
* Can view and complete their own tasks.                                                                                                                                                                                                                                                                 |
| Dashboards           | - Can create dashboards.
- Can view dashboards that have been shared with them.                                                                                                                                                                                                                                                              |
| Scenarios            | * Can create scenarios.
* Can view scenarios that have been shared with them.                                                                                                                                                                                                                                                                |
| Employee profiles    | - View others' public information.
- Can edit and delete the personal history of all profiles.
- Edit their own personal information.
- Set what information of theirs that others can see.
- Can view compensation data for those in their reporting line.
- Can view manager-shared forms that are part of the profile, such as 1:1 forms. |
| History              | * Can view, filter and export historical data.
* Can edit and delete historical changes.                                                                                                                                                                                                                                                     |
| Compensation reviews | - Can view and approve a comp review that they have been assigned.                                                                                                                                                                                                                                                                           |

### Administration pages

| **ChartHop page** | **Capabilities**                                                                                                                                         |
| ----------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Groups            | - Can create new groups, departments, and teams and place employees in those groups.                                                                     |
| Users             | * Can manage user access for ChartHop, including inviting employees, assigning roles, and creating new users.                                            |
| Org settings      | - Can configure organization-wide settings such as currency, home page customizations, logo, and so on.                                                  |
| Fields            | * Can create new custom fields and edit custom fields.                                                                                                   |
| Categories        | - Can create and edit field categories.                                                                                                                  |
| Forms             | * Can create, edit and configure settings for forms.                                                                                                     |
| Tasks             | - Can delete and send reminders for tasks                                                                                                                |
| Profile tabs      | * Can customize employee profile tabs.                                                                                                                   |
| Apps              | - Can install app integrations and pre-configured bundles of fields and forms.                                                                           |
| Sync history      | * Can monitor the sync history page to view job data flow from ChartHop to an organization’s applicant tracking system (ATS).
* Can manage app settings. |
| Actions           | - Can customize ChartHop actions that trigger events such as sending reminders.                                                                          |

:::hint{type="info"}
[Packages](https://www.charthop.com/pricing/)**:&#x20;**<font color="#a9a9a9">Basic</font> <font color="#000000">|</font> <font color="#000000">**Headcount Planning** | </font><font color="#000000">**Compensation Reviews** | </font><font color="#000000">**Performance** | </font><font color="#000000">**Engagement** </font>
:::


[title] Sensitive data (limited comp)
[path] ChartHop for Administrators/Access/User access controls/Built-in Roles/

Those with the Sensitive data (limited comp) role can see all sensitive data except compensation for those outside their reporting line.

All roles have standard access, which includes the following:

- Access to all non-administrative functions of ChartHop, including scenarios and dashboards.&#x20;
- Ability to view their own compensation data and the compensation data of those who report to them.&#x20;
- Can edit or hide their own personal data.

Data sharing rules apply to all users regardless of role. Owners of artifacts like scenarios, dashboards, compensation reviews, and forms can restrict access to the respective artifact by person or filter.

You can apply a filter to this role to have it apply to a subset of users; for example, all managers within a department or only HR leaders in a specific location.

**Typical ChartHop responsibilities for someone with this role:**

- Activities related to employee addresses and personal information.

**Common organization titles for users who need the Sensitive data access role:**

- HR Business Partner
- Head of DEI
- People Operations Analyst

The tables below list how users with this role can use the respective pages. If a page is not listed, the role does not grant access to that page.

### Sensitive data

| **ChartHop feature**  | **Capabilities**<br /><br />                                                                                                                           |
| --------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------ |
| Sensitive data access | - Can view their own compensation data and personal data.
- Can view all sensitive data except for compensation of those outside their reporting line. |
| View as               | * Can view ChartHop as another user to verify what they can view and access.                                                                           |

### Employee pages

| **ChartHop feature** | **Capabilities**                                                                                                                                                                                                                                       |
| -------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| Org Chart            | - Can view all sensitive data, including open jobs.
- Cannot view compensation except for themselves and those in their reporting line.                                                                                                                |
| Data Sheet           | * Can create custom views.
* Can share views.
* Can view open jobs.                                                                                                                                                                                    |
| Map                  | - Can edit their own location.                                                                                                                                                                                                                         |
| Home page            | * Can view all public information. 
* Can view and complete their own tasks.                                                                                                                                                                           |
| Dashboards           | - Can create dashboards.
- Can view dashboards that have been shared with them.                                                                                                                                                                        |
| Scenarios            | * Can view scenarios that have been shared with them.
* Can create new scenarios.                                                                                                                                                                      |
| Employee profiles    | - View all information on employee profiles, including personal data and all forms.
- Edit their own information.
- Set what information of theirs that others can see.
- Can only view compensation for themselves and those in their reporting line. |
| History              | * Can view, filter and export historical data.<br />                                                                                                                                                                                                   |
| Comp reviews         | - Can view compensation reviews that they are invited to review or approve.                                                                                                                                                                            |

:::hint{type="info"}
[Packages](https://www.charthop.com/pricing/)**:&#x20;**<font color="#a9a9a9">Basic</font> <font color="#000000">|</font> <font color="#000000">**Headcount Planning** | </font><font color="#000000">**Compensation Reviews** | </font><font color="#000000">**Performance** | </font><font color="#000000">**Engagement** </font>
:::


[title] Key Concepts
[path] Carrot reference/

To create a Carrot query, it helps to have a basic understanding of fields, operators, values, functions, and methods. You can learn more about these key concepts below.&#x20;

### Fields

A field in Carrot is a word that represents a built-in field or a custom field that has already been defined in ChartHop. All fields are case-insensitive.

A field contains a reference to specific job, employee and organization data, allowing operations to be ran on it in order to perform calculations. For example:

```none
workAddress
```

The `workAddress`field can be used as a reference to an employee's work address found in their employee profile.

Fields may also posses *properties&#x20;*&#x77;hich are unique members of data belonging to the field's particular *data type.&#x20;*&#x46;or example:

```none
workAddress.city:"Oak Park"
```

`city` is a property of the `workAddress` field and has the value of `"Oak Park"`.

[Learn more about fields. ](docId\:XYrLLTZxiE-BV4ZKzEs_g)

### Operators

An operator in Carrot is one or more symbols or words that compare the value of a field on its left with one or more values (or functions) on its right. The valuation of the clause will always result as true. For example:

```none
1 * 2 * 3
```

This query uses the [\* (multiply)](https://docs.charthop.com/multiply) operator to evaluate the basic mathematical statement.

```none
department="engineering"
```

This query returns all records where `department `is `engineering`.

:::hint{type="info"}
Carrot operators understand "money math" and will automatically convert currencies when adding or subtracting two different currencies.
:::

[Learn more about operators.](docId\:wn_9tVffgIwgqTde4ybmy)

### Keywords

A keyword in Carrot is a word or phrase that:

- Joins two or more clauses together to form a complex Carrot query.
  - `directs>0 && department:engineering`
- Alters the logic of one or more clauses.
  - `directs>0 && !department:accounting`
- Alters the logic of operators.
  - `department!="engineering"`
- Has an explicit definition in a Carrot query
  - `department:engineering `where`:` means`"matches"`
  - `workAddress.city:"Oak Park"` where `.` refers to the *property&#x20;*&#x63;ity of the *field&#x20;*&#x77;ork address field
- Performs a specific function that alters the results of a Carrot query.
  - `tenure <= 3`

Carrot contains a limited number of reserved keywords.

[Learn more about keywords.](docId\:a3yPI3EmfPJZ9q_4t7Vww)

### Functions

A function in Carrot appears as a word followed by parentheses, which may contain one or more explicit values or Carrot fields. All functions are case-insensitive.

A function performs a calculation on specific Carrot data or on the function's content (enclosed within its parentheses), such that the results retrieved by the function return as true, and then again by the clause in which the function is used. For example:

```none
baseCompBetween('2017-07-01', '2022-08-01", 1.0)
```

This query will return the base compensation of a person between the dates of January 7th, 2017 and January 8th, 2022.

### Methods

Methods are special types of [Functions](docId\:IZsyKLqFBEtmslMltBMay) that apply to a [List](docId\:xWH_cUkHj9waqaEfb7H71) or Sequence of data. Usually, methods are used to aggregate data – such as counting or summing List values.

For example, to count x

[Learn more about functions.](https://docs.charthop.com/functions)

### Aggregators (Deprecated)

**Aggregators were formerly used in ChartHop Dashboards. However, they are now deprecated and should be replaced with their corresponding Method.&#x20;**

An aggregator in Carrot appears as a word followed by curly brackets, which contains an expression. All aggregators are case-insensitive.

An aggregator performs a calculation on an expression and returns a [Number](https://docs.charthop.com/ucI5-number) value based on the aggregator's logic. For example:

```none
count{department:engineering}
```

This query will return the total number of jobs in the engineering department in the ChartHop organization. All non-numeric values are discarded.

[Learn more about aggregators.](https://docs.charthop.com/aggregators)

### Data types

Carrot understands many common data types, including standard data types such as [Number](docId\:ucI5tCTfVBhonEJ6ZQijg) and [String](docId\:Ujw2AQAktel5uukLuP73S), as well as a number of ChartHop-specific data types such as [Money](docId:_kS5D2xbfoR9d8WfRIVnY) and [Comp](docId\:H_73YLW2UsTscC_TjerlF).&#x20;

[Learn more about data types.](https://docs.charthop.com/data-types)

### Reserved characters

Carrot has a list of reserved characters:

`space (' ') - + = . : ? | * / % [ ]`

These characters are reserved for use in operations and keywords. If you wish to use these characters in queries, you need to surround them with quote-marks. You can use either single quote-marks `'` or double quote-marks `"`.

For example:

```none
title:"'*director'"
```

&#x20;Search for spReserved charactersecial characters in text fields is limited.

### Referencing fields

In many of ChartHop's interfaces, you can use carrot to insert data into any rich text area. For example, you can use carrot to insert data into: [Automated Actions](docId:6k2uHP22MlgnhaOvzQ0yX), [Custom profile tabs](docId\:Kiuev47LOf6QTLVjlujlr),  [Home page](docId:3bBPrW-EGBg1YxIa0fL0C), [Forms](docId\:QR76GaDOskC1RlC_S0jes) or [Resources](docId\:JXOtOCIQ2GhvvBxyOu6jP).&#x20;

The carrot syntax for this is to start with `{{` and then end with `}}` in between you can write a field name or an expression.&#x20;

```none
{{workAddress}}
```

```none
"It has been {{baseComp.lastRaise.date.monthsSince}} months 
since {{name}} has received a raise." 
```








[title] Managing currencies and costs
[path] ChartHop for Administrators/Admin settings/Configuring financial settings/

![Currency Settings](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/TaVSEyItsLto3WcccG8MV_admin-financial-currencies.png)

The **Currencies & costs** page lets you manage the currencies used by your organization, as well as set up currency defaults and cost multipliers. The features within this page help make managing currencies and costs a transparent and visible process.

:::hint{type="info"}
Currency rates are populated using currencylayer. [currencylayer](https://currencylayer.com/) is an API service that provides updated and accurate currency data for use with ChartHop. Conversion rates are updated on the first of each month.&#x20;
:::

- In the **Currencies** section, you can add and delete multiple currencies, set a default currency, view the currency rates being used (as well as their source), view past currency rates, and set custom currency rates for your organization.&#x20;
- In the **Smart currency defaults** section, you can set smart defaults for how currency is applied to monetary values without a defined currency.
- In the **Costs** section, you can add a cost multiplier that is applied to all your headcount costs.



:::hint{type="info"}
[Modules:](https://www.charthop.com/pricing/) <font color="#000000">**HRIS |** </font>**Engagement | Goals | Performance |&#x20;**<font color="#000000">**Compensation Reviews |** </font>**Headcount Planning**
:::


[title] Configuring SSO options
[path] ChartHop for Administrators/Access/Access Settings/

You can configure single sign-on (SSO) to allow your users to log in using your organization's identity provider without generating a separate ChartHop password. While it is optional, we recommend that you require SSO, as it's easier and safer for your users.

:::hint{type="info"}
ChartHop supports using one SAML-based identity provider at a time, as only one SSO metadata file can be associated with your ChartHop account. Because Google SSO does not use SAML 2.0, it is possible to enable Google SSO in addition to a SAML-based identity provider.&#x20;



If you want to use a SAML 2.0 identity provider that is not listed here, contact ChartHop support for assistance.
:::

When you enable SSO, you can upload your SSO metadata file and customize your SSO login button image.

![Single Sign On](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/ptjeRG4lp7zrLMWKww0bI_access-settings-sso.png)

### Supported Identity providers

ChartHop supports the following Identity providers:

| **SSO Option**         | **Description**                                                                                                                                          |
| ---------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Google                 | Enables Google SSO login. Recommended if your organization uses G Suite. Can be used in conjunction with an additional SAML 2.0-based SSO configuration. |
| Microsoft              | Enables Microsoft SSO login. Recommended if your organization uses Azure Active Directory.                                                               |
| Okta                   | Enables Okta SSO login. Recommended if your organization uses Okta.                                                                                      |
| OneLogin               | Enables OneLogin SSO login. Recommended if your organization uses OneLogin.                                                                              |
| Azure Active Directory | Enables Azure SSO login. Recommended if your organization uses Azure Active Directory.                                                                   |
| ADP                    | Enables ADP SSO login when ChartHop is connected to ADP via the ADP Marketplace app.                                                                     |

### Allowing password login

If you choose not to use SSO to manage user logins, you also have the option to use standard password logins.

:::hint{type="warning"}
For security reasons it is generally *not recommended* to use both SSO and password login unless you have users from outside your organization who lack SSO to sign in.
:::

You have the option to restrict the password login from specific IP addresses. If you would like to do so, add the IP addresses in th&#x65;**&#x20;Only allow password-based login from specific IPs (comma-separated)&#x20;**&#x69;nput.&#x20;

Note that this only applies to password login, so users with SSO will be able to login from any IP address.&#x20;




[title] Customizing a welcome email
[path] ChartHop for Administrators/Access/Access Settings/

In the **Access Settings** page, you can create a custom email template to invite users to your ChartHop organization.&#x20;

![Send welcome email](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/Et76wDzcY2S4D1ZVbOf8w_access-settings-email.png)

### Create a custom welcome email

To customize the welcome email that invites users to access your ChartHop organization:

1. From the left sidebar, select **Access**.
2. From the sub-menu, select **Settings**.
3. Scroll down to the **Invitation email** section.&#x20;
4. Create or edit your custom welcome email message using the Rich Text editor or using Markdown. You are able to use ChartHop fields for personalization using [Carrot.](docId\:fL-eMyhB9F8NzL2Vza9fq) such as "Hi, `{{name.first}}`".&#x20;
5. Select **Save settings** when you've completed your email template.

### Send test email

Once you've created an email template, you can test how it looks by selecting **Send test**. Selecting the **Send test** button automatically sends a test email to your registered email address.

![Example welcome email](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/puswQojW8zgtXO4H-V8gl_welcomeemailexample.png)

:::hint{type="info"}
[Packages](https://www.charthop.com/pricing/)**:&#x20;**<font color="#a9a9a9">Basic</font> <font color="#000000">|</font> <font color="#000000">**Headcount Planning** | </font><font color="#000000">**Compensation Reviews** | </font><font color="#000000">**Performance** | </font><font color="#000000">**Engagement** </font>
:::


[title] Setting up Microsoft and Azure Active Directory SSO
[path] ChartHop for Administrators/Access/Access Settings/Configuring SSO options/

You can configure your ChartHop organization with Microsoft Azure Active Directory SSO.

### Generate your XML metadata file

Before configuring the Microsoft/Azure SSO client to ChartHop, you will need to provide your Federation metadata XML file which can be downloaded [here.](https://nexus.microsoftonline-p.com/federationmetadata/saml20/federationmetadata.xml)

### Set up SSO in Azure

To set up SSO for Active Directory in ChartHop, you must configure several settings in your Azure account:

1. In the [Azure portal](https://portal.azure.com/), on the left navigation panel, select **Azure Active Directory**.
2. Select **Enterprise Applications**.&#x20;
3. Select **+ New application**.
4. Name the application `ChartHop SSO` and select **Create**.
5. Under **Getting Started,&#xA0;**&#x73;elect Option 2,**&#x20;Set up Single Sign-On**.
6. Under **Manage**, selec&#x74;**&#x20;Single Sign-On**.**&#xA0;**
7. Set the following i&#x6E;**&#xA0;Basic SAML Configuration**:
   - **Identifier (Entity ID)&#x20;**-**&#x20;&#xA0;**&#x43;hartHop
   - **Reply URL** - https\://api.charthop.com/saml/sso/\{org-slug}
   - **Sign on URL** - Leave this field blank.
   - **Relay State&#xA0;**- https\://app.charthop.com
8. Under **Manage**, selec&#x74;**&#x20;Users and Groups**.
9. Select **Granted to use this application**.

### Set up Azure SSO in ChartHop

After you have configured your Azure portal settings, enable the SSO option and upload your generated metadata file to ChartHop:

1. From the left sidebar, select **Access**.
2. From the sub-menu, select **Settings**.
3. Scroll to the **SSO** section on the page.
4. Toggle both **Enable Azure Active Directory SSO&#xA0;**&#x61;n&#x64;**&#xA0;Enable Microsoft SSO**.
5. Upload your **Federation Metadata XML** file under **Azure Active Directory IDP metadata file content**.
6. Select **Save Settings**.

### Test the new login with Azure Active Directory to ChartHop

To test your Azure Active Directory and Microsoft SSO configurations with ChartHop:

1. Log out of ChartHop.
2. Visit `https://app.charthop.com/{org-slug}/account/login` where `{org-slug}` is your ChartHop organization's unique slug.
3. Confirm that your Microsoft sign-in displays on the login screen.

:::hint{type="warning"}
If you encounter any issues during or after testing your SSO setup, please reach out to [support@charthop.com](#).
:::

### Issues with alternative user emails

In some cases, such as during an acquisition, you may have users in your company with alternative email domains than the ones used by the main company. In general, a user's Active Directory email should be the same as the one used in their ChartHop accounts. Having different email domains may result in SSO login issues.&#x20;

:::hint{type="info"}
Microsoft suggests using [a workaround ](#)in cases where users want to keep an original email domain.
:::

:::hint{type="info"}
[Modules:](https://www.charthop.com/pricing/) <font color="#000000">**HRIS |** </font>**Engagement | Goals | Performance |&#x20;**<font color="#000000">**Compensation Reviews |** </font>**Headcount Planning**
:::


[title] User management
[path] ChartHop for Administrators/Access/

:::hint{type="info"}
[Modules:](https://www.charthop.com/pricing/) <font color="#000000">**HRIS |** </font>**Engagement | Goals | Performance |&#x20;**<font color="#000000">**Compensation Reviews |** </font>**Headcount Planning**
:::

:::hint{type="info"}
****[Roles](https://docs.charthop.com/user-roles-and-permissions): Owner | Technical owner 
:::

You can manage how your organization's users access ChartHop as well as control how and when employees are invited to ChartHop.

How you can invite users and what data access roles you can use depends on the ChartHop package you are using.&#x20;

ChartHop customers can create rules and filters on which to automatically send user invitations, such as deciding not to invite contractors to use ChartHop.

ChartHop Basic customers can configure automatic invitations to users, but cannot apply filters or rules. ChartHop Basic users also have less granular access rules.

The User Management page is available to all packages and helps you view and manage your ChartHop users.

- [Inviting users](docId\:geKO2l3uNeTWyIDSysJfG) to the organization
- [Managing users](docId\:uJhZC5s2MyR-mPfvcw_Aj)&#x20;
- [Assigning roles ](docId\:GB1EJ6qEMi3iIDo1l4EJ5)&#x20;
- Removing users
- Revoking user sessions
- Managing user access privileges
- Editing user information
- User management settings


[title] People Ops Admin (no comp data)
[path] ChartHop for Administrators/Access/User access controls/Built-in Roles/

The People Ops Admin (no comp data) role should be given to employees in your organization responsible for making organizational updates such as adding or terminating employees, and configuring and monitoring organizational processes, like performance reviews, engagement surveys, and compensation review cycles.&#x20;

The People Ops Admin role **has access** to all sensitive data **except compensation**, with the ability to edit and make permanent changes to the primary environment. This role has the ability to configure and manage Fields, Forms, Categories, Profile Tabs, and Actions, among others.&#x20;

This role **does not have access** to change user permissions, configure integrations, or alter organization-wide settings.&#x20;

All roles have standard access, which includes the following:

- Access to all non-administrative functions of ChartHop, including scenarios and dashboards.&#x20;
- Ability to view their own compensation data and the compensation data of those who report to them.&#x20;
- Can edit or hide their own personal data.

Data sharing rules apply to all users regardless of role. Owners of artifacts like scenarios, dashboards, compensation reviews, and forms can restrict access to the respective artifact by person or filter.

You can apply a filter to this role to have it apply to a subset of users; for example, all managers within a department or only HR leaders in a specific location.

**Typical ChartHop responsibilities for someone with this role:**

- Sending out Engagement surveys and monitoring the results
- Onboarding and offboarding employees

**Common organization titles for users who need the Org editor access role:**

- People Ops Manager
- Head of People Ops

The tables below list how users with this role can use the respective pages.&#x20;

### Sensitive data

:::hint{type="warning"}
Only users with sensitive data access can view future-dated org changes, such as unannounced promotions and so on.
:::

| **&#x20;ChartHop feature** | **Capabilities**                                          |
| -------------------------- | --------------------------------------------------------- |
| Sensitive data access      | - Can view their own compensation data and personal data. |

### Employee pages

| **ChartHop feature** | **Capabilities**                                                                                                                                                                                                             |
| -------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Org Chart            | - Can add or delete data about jobs or people, including making job transfers, terminations, and new jobs. 
- Can edit sensitive data in employee profile pages, *except for* compensation.                                  |
| Data Sheet           | * Can create custom views of the Data Sheet.
* Can share views.
* Can add or delete data about jobs or people, including making job transfers, terminations, and new jobs. 
* Can edit sensitive data, but not compensation. |
| Map                  | - Can edit their own location and the location data of others.                                                                                                                                                               |
| Home page            | * Can view all public information. 
* Can view and complete their own tasks.                                                                                                                                                 |
| Dashboards           | - Can create dashboards.
- Can view dashboards that have been shared with them.                                                                                                                                              |
| Scenarios            | * Can create scenarios.
* Can view scenarios that have been shared with them.
* Can merge a scenario to the primary org.
* Can see sensitive data changes, *excluding compensation changes*.                                 |
| Employee profiles    | - View other's public information.
- Edit their own information.
- Can edit others’ information, including job history.                                                                                                      |
| Comp reviews         | * Can create compensation reviews.
* Can be assigned to be an approver or reviewer of a compensation review.                                                                                                                 |
| History              | - Can view, filter and export historical data, except compensation historical data
- Can make changes to job history, including deleting previous changes, except for compensation history                                   |
| Files & Signatures   | * Can view and edit the name and access of files
* Can sent and cancel requests for signatures                                                                                                                               |

### Administration pages

| **ChartHop Page**       | **Available actions**                                                                                                                                                                                                                                                            |
| ----------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Fields                  | - Can create, edit, update, and delete custom fields
- Can override ChartHop built-in fields
- Can hide/unhide fields                                                                                                                                                            |
| Groups                  | * Can create and manage new groups, departments, and teams&#x20;
* Can assign employees to those groups                                                                                                                                                                          |
| Compensation bands      | - Can import and update compensation bands for the organization.                                                                                                                                                                                                                 |
| Import spreadsheet data | * Can import employee data by using a spreadsheet.&#xA;&#xA;Spreadsheet imports can include adding new employees, changing information for existing employees, adding open jobs, organizational history info, and financial information such as equity and compensation changes. |
| Sync history            | - Can monitor the sync history page to view job data flow from ChartHop to an organization’s applicant tracking system (ATS).
- Can rerun data syncs.                                                                                                                            |

:::hint{type="info"}
[Packages](https://www.charthop.com/pricing/)**:&#x20;**<font color="#a9a9a9">Basic</font> <font color="#000000">|</font> <font color="#000000">**Headcount Planning** | </font><font color="#000000">**Compensation Reviews** | </font><font color="#000000">**Performance** | </font><font color="#000000">**Engagement** </font>
:::


[title] Admin settings
[path] ChartHop for Administrators/


[title] Configuring Data Sheet Defaults
[path] ChartHop for Administrators/Admin settings/

You customize several options about how your org chart appears and what people can do with it.&#x20;

To configure the Org Chart Options, navigate to **Admin&#x20;**>**&#x20;Configuration /** **Core Views.&#x20;**&#x4F;nly users with the built in roles of [Owner](docId\:o_IcgvK94IdcUnZIuNTVi) and [Technical owner](docId\:LktBP6168xMmcc5DuPFG5) have access to this page.&#x20;

![](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/KB-g2agkSyvrVSvbd1rX4_screenshot-2024-05-15-at-32914-pm.png)

**Default filter —&#x20;**&#x41;dd a filter that displays for every person when they view the data sheet.

- Test the filter on the data sheet view then copy it into the setting.&#x20;
- For example, you could add `employment:full` to only show full time employees.&#x20;



### Export

**Who should be able to export the Data Sheet? —&#x20;**&#x43;ontrol who has the ability to [Exporting data from the Data Sheet](docId\:ZznndmQ09j6UBPvEbbIFW). People will only ever be able to export data that they already have access to.&#x20;


[title] AI Usage
[path] ChartHop for Administrators/

The **AI Usage** view provides administrators with visibility into how AI features are being used across their ChartHop account. Use this dashboard to understand adoption, monitor usage trends over time, and identify where AI is providing the most value across teams and individuals.

You can find this view at **Admin > History > AI Usage**.



![AI Usage Dashboard](https://api.archbee.com/api/optimize/CXAjUAezd9VEEVQBIYmdw/JEm1wZCDAj-Qnb-URHmNO_image.png "AI Usage Dashboard")

## What you can do

From the AI Usage dashboard, you can:

- Track overall AI activity across your organization
- See how many people are using AI features
- Understand which AI use cases are most common
- Compare usage across departments
- Review AI usage (generalized) by individual users

This view is read-only and intended for auditing, monitoring, and analysis.

## Date range and filters

At the top of the page, you can adjust the scope of the data shown:

- **Interval**: View usage aggregated by month (or other available intervals).
- **Date range**: Select a predefined range (for example, past year rolling) or a custom start and end date.
- **Filter**: Narrow results by people, groups, or other supported filters.

All charts and tables on the page update based on your selected filters.

## Summary metrics

The top of the dashboard highlights three key metrics for the selected time range:

- **Total chats**: The total number of AI chat sessions initiated.
- **Average messages per chat**: The average number of messages exchanged within each chat session.
- **Unique chat users**: The number of distinct users who interacted with AI features.

Use these metrics to quickly gauge overall adoption and engagement.

## Usage over time

### Total chats

The **Total Chats** chart shows how AI chat volume changes over time. This helps identify trends such as increasing adoption, seasonal spikes, or periods of lower usage.

### Unique users

The **Unique Users** chart displays how many distinct users engaged with AI during each interval. This is useful for understanding whether usage growth is coming from more users or heavier usage by the same users.

## Top use cases

The **Top Usecases** section ranks the most common ways AI is being used, such as:

- Scenario planning
- People analytics
- Dashboard analysis
- Information retrieval (for example, profiles, policies, or data sheets)

Use this view to understand which workflows are benefiting most from AI and where additional enablement or guidance may be helpful.

## Usage by group

You can group AI usage by organizational attributes, such as **Department, Location, Teams,&#x20;**&#x6F;r any Field.

When grouped, the dashboard shows:

- **Total chats by group**: Which teams generate the most AI activity.
- **Unique users by group**: How many people in each group are using AI.
- **Chats per user by group**: Average intensity of AI usage per user within each group.

These comparisons can help identify differences in adoption across teams.

## Top users

The **Top Users** table lists individuals with the highest AI usage during the selected period. For each user, you can see:

- Name and title
- Department
- Number of AI chats
- Most common AI use cases

This table is useful for identifying power users, champions, or teams that may be early adopters of AI features.

## Privacy and data visibility

The AI Usage dashboard is designed to provide transparency into AI adoption while protecting individual privacy and sensitive information.

- The dashboard **does not display the exact prompts, questions, or messages** that users submit to AI features.
- Administrators cannot view the full content of individual AI conversations.
- Usage is summarized and categorized to show the **nature of the use case** (for example, scenario planning, analytics, or information retrieval) without exposing specific inputs or outputs.

This approach helps organizations understand how AI is being used while maintaining appropriate privacy boundaries for employees.

## Notes and limitations

- The AI Usage dashboard reflects activity within ChartHop’s AI-powered features only.
- Metrics are aggregated and intended for usage monitoring, not performance evaluation.
- Availability of filters and group-by options depends on your account configuration.

[title] Configuring financial settings
[path] ChartHop for Administrators/Admin settings/

In the **General** tab, you can configure information about financial preferences including fiscal year, currencies, cost multipliers, and stock valuations.

![Financial Settings](https://api.archbee.com/api/optimize/CXAjUAezd9VEEVQBIYmdw/taxQT0Zc_XXj-3k7Ogb4i_admin-financial-2.png)

To configure your organization's general settings:

1. From the left sidebar, select **Admin**.
2. From the sub-menu, select **Financial**.
3. Enter your company financial preferences in the following sections:
   - In the **General** section:
     - **Fiscal year starts** - The month on which your organization's fiscal year begins.
   - In the **Currencies** section:
     - **Add additional currency** - Select additional currencies as your organization needs them
     - **Default currency** - The default currency when currency is not specified in imported data
     - **Built-in Base and Variable field currency overrides** - Options to override the currency default for specific conditions when importing data
     - **Cost multiplier** - Custom multiplier for approximating true headcount costs across the organization
   - In the **Stock valuations** section:
     - **Equity grant types** - The types of grants your organization supports and options to rename them
     - **Valuation History** - Manage and configure your stock options for your organization's employees, determine the strike price for option grants, and establish amounts to be allocated for fundraising events.
4. Select **Save Settings** to save your changes.

## Default cost basis

Admins can set an organization-wide **Default cost basis** under **Settings > Financial**. It is the cost measurement used by any budget that has not chosen its own basis.

- **System default (Total cost over period).** Budgets are measured over their date range. ChartHop prorates each person's run-rate across the budget's start and end dates, month by month, and counts open roles only from their planned start date.
- **Annualized.** Budgets show the ongoing yearly run-rate, regardless of how long the budget runs.

Individual budgets can override this setting from the budget's **Cost basis** field. Scenarios always stay annualized and are not affected by this setting.

For a full explanation of how cost basis works and how to configure it per budget, see [Cost basis](https://docs.charthop.com/budgets#cost-basis) on the Budgets page.

:::hint{type="info"}
[Modules:](https://www.charthop.com/pricing/) <font color="#000000">**HRIS |** </font>**Engagement | Goals | Performance |** <font color="#000000">**Compensation Reviews |** </font>**Headcount Planning**
:::

## Cost Calculations

Under **Admin > Financial**, the **Cost Calculations** section controls how ChartHop calculates cost within scenarios.

By default, ChartHop calculates a change's cost as base salary multiplied by your cost multiplier (**Apply cost multiplier to base salary**). If you need a different calculation — for example, to factor in benefits burden or bonus targets — you can define a **Custom formula** that ChartHop applies to every change in a scenario.

### Custom cost formula

To set up a custom cost formula:

1. Go to **Admin > Financial**.
2. Under **Cost Calculations**, select **Custom formula**.
3. In **Formula**, enter a Carrot expression, for example `baseComp.annualized * 1.3`. ChartHop applies the delta of this value to each change you make in a scenario.
4. In **Cost label**, enter a short label to display in scenarios (defaults to "Annual Cost"). Update this if your formula does not represent an annual figure.
5. Optionally, add a **Cost description** to explain the calculation. It appears in the tooltip when users hover the cost in the scenario header.
6. Select **Save**. ChartHop recalculates cost for all scenarios, which may take a few minutes.

:::hint{type="warning"}
**Your formula should return an annual figure.**

Scenario headers let users view cost by **Fiscal year** or **Quarter** (see [Viewing scenario cost by fiscal year or quarter](https://docs.charthop.com/scenarios#viewing-scenario-cost-by-fiscal-year-or-quarter)). Those views assume your formula is an annual run-rate and prorate it across the selected fiscal period. If your formula already returns a period-bounded amount, the Fiscal year and Quarter figures will be wrong: the value gets scoped twice. The **Annualized** view always shows your formula's value unchanged.

- **Annual figures work correctly**, for example `baseComp.annualized * 1.3`. It expresses a full-year amount, so proration produces accurate fiscal-period figures.
- **Already period-bounded amounts do not.** A formula that sums or prorates over a specific date range already returns a scoped total, so proration re-scopes it and produces misleading results.

If your formula is not an annual figure, set the **Cost label** to something other than "Annual Cost" and direct users to rely on the **Annualized** view rather than Fiscal year or Quarter.
:::

[title] Customizing invitations
[path] ChartHop for Administrators/Access/User management/Inviting users/

Using the **Customize Invitation** tab, you can create a custom email template to invite users to your ChartHop organization.&#x20;

![Customize invitation](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/vCBMR8tpi0kJnOouFVz5P_access-settings-invitation-email.png)

### Create a custom welcome email

To customize the welcome email that invites users to access your ChartHop organization:

1. From the left sidebar, select **Access**.
2. From the sub-menu, select **Settings**.
3. Scroll to the **Invitation Email** section on the page
4. Create or edit your custom welcome email message using the Rich Text editor or using Markdown.
5. Select **Save settings** when you've completed your email template.

### Send test email

Once you've created an email template, you can test how it looks by selecting **Send test email**. Selecting the **Send test** **email&#x20;**&#x62;utton automatically sends a test email to your registered email address.

![Example welcome email](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/puswQojW8zgtXO4H-V8gl_welcomeemailexample.png "  ")

:::hint{type="info"}
****<font color="#000000">**Basic**</font> <font color="#000000">|</font> <font color="#000000">HRIS | </font>Engagement | Goals | Performance | <font color="#000000">Compensation Reviews | </font>Headcount Planning
:::




[title] Managing users
[path] ChartHop for Administrators/Access/User management/

The **Users** page in ChartHop is where you can add, update, and remove users from your account. You can find it by selecting **Access** **> Users**

Users are people who have access to login to ChartHop with a set access role.&#x20;

The Users page lists the:

- **User&#x20;**- The persons name as set in the user settings
- **Email&#x20;**- current primary email for their ChartHop login
- **Status&#x20;**- Preboarding or Active
  - Preboarding users will have unique login structures and will automatically be shifted to Active on their start date.&#x20;
- **Invitation** - Invited -  Join
  - **Invited** - has been sent an email to login to ChartHop but has not yet logged in.&#x20;
  - **Joined** - has logged in and their last active time can be seen in the table.&#x20;
- **Role&#x20;**- the [Role](docId\:zernFu32JBQjFBn67l_fE) they are currently assigned
- **External to Org&#x20;**- if they are not in a job within the organization
- **Filter limited&#x20;**- Special rules applied to their access role
- **Last active -** When did they last login to ChartHop

# Adding Users

### &#x20;Adding Org Members as Users

If you would like to add users, you can do so by going through the [inviting users](docId\:geKO2l3uNeTWyIDSysJfG) flows: the [Manual invitation flow](docId\:cmKQDgIW-xZfNZ7htOxbh) or the [Automatic invitation flow](docId\:KYPnbroLnSBo0wqkZFhBo).&#x20;

### Adding External Users

External users are people who are not "in a job" at your organization, but still may need access to your account or data. These might be people like Advisors, Board Members, HR/People Consultants, or Technical Consultants &#x20;

**To invite external users:&#x20;**

1. Navigate to the **Users** page
2. Clicking the **Invite external users** button in the top right corner.
3. Add in their **First name**, **Last name,** **Email,&#x20;**&#x61;n&#x64;**&#x20;Role**. &#x20;
4. You will often want to select "**Enable Password**" for an external if they are not a part of your company SSO.&#x20;
5. Clic&#x6B;**&#x20;Invite user** to invite the external user

![](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/vRArqQr-XnCPZtDiyTh1I-20250917-151917.png)

## Resending ivitations

Users who have been invited to join your org, but have not yet logged in will be listed as `Invited`.&#x20;

To resend an invitation to these users:

1. From the left sidebar, select **Access**.
2. From the sub-menu, select **Users&#x20;**&#x69;f not already preselected.
3. From the **Users** list, select the checkbox users you would like to resend invitations to.&#x20;
4. Click **Resend invitation** and the emails will automatically be sent.&#x20;

![](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/gm5sAgoFHpeQxsUeQkQp6-20250922-023525.png)

# Assigning Roles

Roles are primarity assigned either during the [Manual invitation flow](docId\:cmKQDgIW-xZfNZ7htOxbh) or by the [Automatic invitation flow](docId\:KYPnbroLnSBo0wqkZFhBo). Below on detail of how to update or edit a users role. &#x20;

For [roles](docId:47kdSxXzVdMh8nqhSJ27I)  with access to sensitive data, you can further customize the role by adding a filter that allows that person to see sensitive data for particular departments or by a custom filter that you can define.

## Assign a role to an individual user

To edit a user's current roles:

1. From the left sidebar, select **Access**.
2. From the sub-menu, select **Users&#x20;**&#x69;f not already preselected.
3. From the **Users** list, select the person's name whose role you want to edit.
4. Select thei&#x72;**&#x20;role** from the dropdown in the **Edit user** dialog.



## Assign roles to users in bulk

To edit a user's current roles:

1. From the left sidebar, select **Access**.
2. From the sub-menu, select **Users&#x20;**&#x69;f not already preselected.
3. From the **Users** list, select all of the people who need to be assigned a new role.&#x20;
4. Select thei&#x72;**&#x20;role** from the dropdown and add any relevant filter limiting.&#x20;
5. Then click **Assign role** to assign the role in bulk.&#x20;



## Add a filter for a user's role

For roles with access to sensitive data, you can further customize the role by adding a filter that allows that person to see sensitive data for particular departments or by a custom filter that you can define.

For example, a recruiter who focuses on sales roles may not need to access compensation for all open roles; they might only need access to the Sales department.

You can create filters to associate custom access rules to a person's role. For example, if you want a People Partner to have sensitive access to everyone in the New York office, but exclude executives and members of the Human Resources department, you could use the filter:

`location:"new york" !team:executives !department:"human resources"`

You can add filters to all roles except the Employee, Guest, and Recruiting editor roles.

:::hint{type="info"}
If a user’s role is limited by a filter, the information they see for terminated employees will be limited. 



For example, if an HRBP has the role of an org editor with a custom filter for particular departments or locations, that person would not be able to see sensitive information for a terminated employee regardless of department or location.



This is because terminated employees no longer belong to any groups. Role filters are seen as providing visibility to only certain groups or parameters. If someone with a role that uses a custom filter needs access to sensitive data for terminated employees, the workaround is to temporarily remove the filter.&#x20;
:::

To add a filter for a user's role:

1. From the left sidebar, select **Access**.
2. From the sub-menu, select **Users&#x20;**&#x69;f not already preselected.
3. From the **Users** list, select the name of the user you want to edit.
4. In the **Edit user&#x20;**&#x64;ialo&#x67;**,** use the **Role** dropdown to select the role you wish to assign to your user.
5. Scroll down within the dialog to view the filter checkboxes.&#x20;
6. Choose one of the filters or use both to refine the user's role further.
   - **Department limited** -- Select this checkbox and type the names of a department or departments to which you want to limit this user's role.
   - **Custom-filter limited&#x20;**--Select this checkbox and create a custom filter that defines the rules for this user's role.
7. Select **Save**.



# Removing users

You can add and remove users from your ChartHop organization.

::Image[]{src="https://app.archbee.com/api/optimize/CXAjUAezd9VEEVQBIYmdw/RSsso5pQcOpq7DJaB33xj-20250922-021625.png" size="88" width="667" height="274" position="center" showCaption="false"}

To remove users:

1. From the left sidebar, select **Access**.
2. From the sub-menu, select **Users&#x20;**&#x69;f not already preselected.
3. From the **Users** list, select the checkbox for each user you wish to remove
   1. Tip: Filter to **Status: Invited&#x20;**&#x6F;r **Status: Joined**
4. Select **Remove user** from the options bar.
5. Select **Remove user** from the **Remove user** dialog.



# Editing user information

You can edit your user's information in your ChartHop organization.

To edit a user:

1. From the left sidebar, select **Access**.
2. From the sub-menu, select **Users&#x20;**&#x69;f not already preselected.
3. From the **Users** list, select the name of the user you wish to edit.
   1. If you are unable to select the name of the user then you do not have permission to edit the user.&#x20;
4. In the **Edit user&#x20;**&#x64;ialog, make changes to your user.
5. Select **Edit user** when you're done.



Note: [Preboarding](docId\:o84lTFv6kh2imp46wNwZP) users will have additional options to edit the **home email&#x20;**&#x61;nd the "Active role" that will be used when the user starts at the company.

![](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/H7Gcg6hjUNuP6esFMOQ23-20250922-020903.png)



# Revoking user sessions

You can revoke user's sessions in your ChartHop organization. They will be required to reautheticate when the login again.&#x20;

![](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/fMVqEUKghHrb6WpHxSD9D-20250922-020709.png)

To revoke user sessions:

1. From the left sidebar, select **Access**.
2. From the sub-menu, select **Users&#x20;**&#x69;f not already preselected.
3. From the **Users** list, select the checkbox for each user you wish to revoke the session.
   1. Tip: Filter to **Status: Joined**
4. Select **Revoke user session** from the options bar.
5. Select **Revoke session&#x20;**&#x66;rom the **Revoke user** **session** dialog.



# Export a list of users

To export a list of users:

1. From the left sidebar, select **Access**.
2. From the sub-menu, select **Users&#x20;**&#x69;f not already preselected.
3. In the top right corner, select the Export CSV icon button
4. Click **Export** in the Export CSV dialog.&#x20;



:::hint{type="info"}
[Modules:](https://www.charthop.com/pricing/) <font color="#000000">**HRIS |** </font>**Engagement | Goals | Performance |&#x20;**<font color="#000000">**Compensation Reviews |** </font>**Headcount Planning**
:::


[title] Sensitive data viewer
[path] ChartHop for Administrators/Access/User access controls/Built-in Roles/

Those with the Sensitive data viewer role can view all sensitive data, including all types of compensation and all personal information for all employees. Someone with the Sensitive data role can also view the Sync history page, which tracks employee and job data flow between other systems and ChartHop.

All roles have standard access, which includes the following:

- Access to all non-administrative functions of ChartHop, including scenarios and dashboards.&#x20;
- Ability to view their own compensation data and the compensation data of those who report to them.&#x20;
- Can edit or hide their own personal data.

Data sharing rules apply to all users regardless of role. Owners of artifacts like scenarios, dashboards, compensation reviews, and forms can restrict access to the respective artifact by person or filter.

You can apply a filter to this role to have it apply to a subset of users; for example, all managers within a department or only HR leaders in a specific location.

**Typical ChartHop responsibilities for someone with this role:**

- Activities related to employee addresses and personal information.
- Activities related to compensation.

**Common organization titles for users who need the Sensitive data access role:**

- HR Business Partner
- Head of DEI
- People Operations Analyst

The tables below list how users with this role can use the respective pages. If a page is not listed, the role does not grant access to that page.

### Sensitive data

| **ChartHop feature** | **Capabilities**<br /><br />                                                                 |
| -------------------- | -------------------------------------------------------------------------------------------- |
| View as              | - Can view all sensitive data, including employee personal information and all compensation. |
| View as              | * Can view ChartHop as another user to verify what they can view and access.                 |

### Employee pages

| **ChartHop feature** | **Capabilities**                                                                                                                                                                           |
| -------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| Org Chart            | - Can view all sensitive data, including open jobs.                                                                                                                                        |
| Data Sheet           | * Can create custom views.
* Can share views.
* Can view open jobs.                                                                                                                        |
| Map                  | - Can edit their own location.                                                                                                                                                             |
| Home page            | * Can view all public information. 
* Can view and complete their own tasks.                                                                                                               |
| Dashboards           | - Can create dashboards.
- Can view dashboards that have been shared with them.                                                                                                            |
| Scenarios            | * Can view scenarios that have been shared with them.
* Can create new scenarios.                                                                                                          |
| Employee profiles    | - View all information on employee profiles, including personal data, all compensation, and all forms.
- Edit their own information.
- Set what information of theirs that others can see. |
| History              | * Can view, filter and export historical data.                                                                                                                                             |
| Comp reviews         | - Can view compensation reviews that they are invited to review or approve.                                                                                                                |

:::hint{type="info"}
[Packages](https://www.charthop.com/pricing/)**:&#x20;**<font color="#a9a9a9">Basic</font> <font color="#000000">|</font> <font color="#000000">**Headcount Planning** | </font><font color="#000000">**Compensation Reviews** | </font><font color="#000000">**Performance** | </font><font color="#000000">**Engagement** </font>
:::


[title] Default profile tabs
[path] ChartHop for Administrators/Admin settings/Configuring profiles/

There are 8 built-in tabs that display on employee profiles. These are:&#x20;

- About
- Tasks
- Personal History
- Job History
- Form Response History
- Compensation
- Equity
- Time Off
- Files

## Configuration

You can select which tabs are visible to your employees by going to Core Views and unchecking the box next to a profile tab to hide it.

![](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/VeGLqDmIhOrZK7Xc8Lr2n_image.png)

## Form Response tab

This tab allows you to view all the form responses that you’ve submitted.

Access to form response is based on the setup of the form, but **you can always access all the forms that you’ve submitted.&#x20;**

Ability to edit a form response depends on form settings.

## Files tab

Files can be uploaded for an employee using the `file` type field (learn more about that field type here).

Users with an Owner, People Ops Admin access can upload files directly to an employees profile in the files tab. They can also delete files with one click.&#x20;

Files uploaded for an employee will display in this profile tab, with visibility guided by access controls.&#x20;








[title] Setting up SAML
[path] ChartHop for Administrators/Access/Access Settings/Configuring SSO options/

You can configure your ChartHop organization with SAML V2.

### Generate your XML metadata file

Before configuring SAML in ChartHop, you will need to generate an XML metadata file from your identity provider (IdP). This is done on your end — ChartHop support does not generate this file for you. Refer to your IdP's documentation for instructions on how to export or download your SAML metadata XML.

### Setup SSO In ChartHop

After you have your XML metadata file, enable the SAML option in ChartHop and upload your metadata.

1. From the left sidebar, select **Access**.
2. From the sub-menu, select **Settings**.
3. Scroll to the **SSO** section on the page.
4. Toggle **Enable SAML v2 SSO**.
5. Upload the XML.
6. Select **Save settings**.

### Test the new login with SAML SSO to ChartHop

To test your SAML SSO configuration with ChartHop:

1. Log out of ChartHop.
2. Visit `https://app.charthop.com/{org-slug}/account/login` where `{org-slug}` is your ChartHop organization's unique slug.
3. Confirm that your SAML sign-in displays on the login screen.

:::hint{type="info"}
[Packages](https://www.charthop.com/pricing/)**:&#x20;**&#x42;asic | Headcount PlanningCompensation ReviewsPerformanceEngagement
:::

[title] Set custom currency rates
[path] ChartHop for Administrators/Admin settings/Configuring financial settings/Managing Currencies and costs/

You can define custom currency rates for use in your ChartHop organization by adding new custom currency rates or by editing conversion rates for existing currencies in your list.

### Add a custom currency rate

&#x20;You can add a new custom currency rate to your currencies list.

![Add a custom currency rate](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/eO7h5W-YoQutyma8q_a21_admin-financial-currencies-custom-rate.png)

To add a custom currency rate:

1. From the left sidebar, select **Admin**.
2. From the sub-menu, select **Financial**.
3. In the **Currencies** section, select **+** **Add additional currency**.&#x20;
4. In the fields that display:
   - **Currency** - Select a currency from the dropdown list. The currencies that display in the list are populated from currencylayer.
   - **Conversion rate source** - Select **Custom** from the dropdown list.
   - **Rate** - Enter a custom currency rate.
   - **Effective date** - Enter the date the custom rate goes into effect.
5. Select **Save** at the bottom of the **Currencies & costs** tab to save your changes.&#x20;

:::hint{type="info"}
You can add multiple custom currencies at once by selecting **+ Add additional currency** multiple times. To delete a new currency row, select the trash can icon.
:::

### Edit conversion rate

You can edit the conversion rate for a currency that is already in your list.&#x20;

![Edit the conversion rate](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/pLYdF0qfe9nuADy-RlGh8_customrate.png)

To edit the conversion rate:

1. From the left sidebar, select the Settings menu (gear icon) and select **Org settings**.
2. Select the **Currencies & costs&#x20;**&#x74;ab.
3. In the **Currencies** section, select the action menu at the left of the row for the currency you want to edit.
4. Select **Edit conversion rate**. The **Edit by rate** dialog displays.
5. In the **Edit by rate** dialog, select the **Custom** option.
6. Enter the custom conversion rate. Once you enter a custom rate, the rate comparison against the default currency automatically updates underneath (for example, 1 USD = 1.25 CAD).&#x20;
7. Enter an effective date for the conversion rate change.&#x20;
8. Select **Save**.

:::hint{type="info"}
Conversion rates are always based off of the US dollar (USD).&#x20;

The rate comparisons that display underneath a rate are compared against the default currency for the organization.
:::

:::hint{type="info"}
[Modules:](https://www.charthop.com/pricing/) <font color="#000000">**HRIS |** </font>**Engagement | Goals | Performance |&#x20;**<font color="#000000">**Compensation Reviews |** </font>**Headcount Planning**
:::


[title] Employee (no comp data)
[path] ChartHop for Administrators/Access/User access controls/Built-in Roles/

The Employee role (no comp data) can be used if you want to restrict access to the compensation data of those within an employee’s reporting line. Employees with this role can access the main pages of ChartHop including planning scenarios and dashboards. A person with this role **cannot&#x20;**&#x73;ee the compensation data for their direct reports.

This role also has standard access, which includes the following:

- Access to all non-administrative functions of ChartHop, including scenarios and dashboards.&#x20;
- Can edit or hide their own personal data.

Data sharing rules apply to all users regardless of role. Owners of artifacts like scenarios, dashboards, compensation reviews, and forms can restrict access to the respective artifact by person or filter.

You can apply a filter to this role to have it apply to a subset of users; for example, all managers within a department or only HR leaders in a specific location.

**Typical ChartHop responsibilities for someone with this role:**

- Viewing ChartHop to understand the organization.
- Completing employee tasks assigned to them (1:1s, surveys) and participating in compensation reviews or scenarios when invited.

**Common organization titles for users who need the Employee (no comp data) access role:**

- All individual contributors and managers.

The table(s) below list how users with this role can use the respective pages. If a page is not listed, users with this role cannot access that page.

### Sensitive data

- Can view their own compensation data and personal data.

### ChartHop employee pages

| **ChartHop page**     | **Capabilities**                                                                                                                                                                                                                                                                 |
| --------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Sensitive data access | - Can view their own compensation data and personal data.                                                                                                                                                                                                                        |
| Org Chart             | * Can view and filter.                                                                                                                                                                                                                                                           |
| Data Sheet            | - Can create custom views.
- Cannot edit any data other than their own personal information.
- Can share views.                                                                                                                                                                  |
| Map                   | * Can edit their own location.                                                                                                                                                                                                                                                   |
| Home page             | - Can view all public information. 
- Can view and complete their own tasks.                                                                                                                                                                                                     |
| Dashboards            | * Can create dashboards.
* Can view dashboards that have been shared with them.                                                                                                                                                                                                  |
| Scenarios             | - Can create scenarios.
- Can view scenarios that have been shared with them.                                                                                                                                                                                                    |
| Employee profiles     | * View others' public information.
* Edit their own personal information.
* Set what information of theirs that others can see.
* Can view compensation data for those in their reporting line.
* Can view manager-shared forms that are part of the profile, such as 1:1 forms. |
| History               | - Can view, filter and export historical data.
- Cannot make any changes.                                                                                                                                                                                                        |
| Comp Reviews          | * Can view and approve a comp review that they have been assigned, including compensation values within the comp review.                                                                                                                                                         |

:::hint{type="info"}
[Packages](https://www.charthop.com/pricing/)**:&#x20;**<font color="#a9a9a9">Basic</font> <font color="#000000">|</font> <font color="#000000">**Headcount Planning** | </font><font color="#000000">**Compensation Reviews** | </font><font color="#000000">**Performance** | </font><font color="#000000">**Engagement** </font>
:::


[title] Apply a cost multiplier
[path] ChartHop for Administrators/Admin settings/Configuring financial settings/Managing Currencies and costs/

In the **Cost multiplier** section, you can set a cost multiplier to apply to specific headcount costs. This cost multiplier helps you account for blanket costs (such as taxes and benefits) and is applied to values in the following built-in ChartHop fields:

- Annual cost
- Fiscal year cost

![Set a cost multiplier](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/nSi7qKt4tyYEtIb9E7gGZ_admin-financial-cost-multiplier.png)

To set a cost multiplier:

1. From the left sidebar, select **Admin**.
2. From the sub-menu, select **Financial**.
3. In the **Cost multiplier** section, enter your cost multiplier in the **Cost multiplier** field.
4. Select **Save**.

:::hint{type="info"}
[Modules:](https://www.charthop.com/pricing/) <font color="#000000">**HRIS |** </font>**Engagement | Goals | Performance |&#x20;**<font color="#000000">**Compensation Reviews |** </font>**Headcount Planning**
:::


[title] Managing data sheet and calendar syncs
[path] ChartHop for Administrators/Admin settings/

The Live Queries page allows ChartHop Owners to view and revoke access to any external data syncs created at you organization. Those include:

[Syncing a Data sheet view to Google Sheets or Excel](https://docs.charthop.com/live-queries)&#x20;

[Syncing ChartHop calendars to Google or Outlook calendars](docId\:felwLgVQZ1jYTF2b7r7vF)

![](https://archbee-image-uploads.s3.amazonaws.com/zxjhb7-DqnuzAP-lru1l3-ycIL86elWyFzLeVbDx2xE-20241213-215615.png)

### Live queries page overview

- **Type -** Calendar, Data Sheet - Jobs or Data Sheet - Persons
- **Created by -&#x20;**&#x57;ho created the sync (this users permissions always apply to the synced data)
- **Data Synced&#x20;**- What data they are syncing
  - Calendar - lists the calendars
  - Data sheet - lists the field codes
- **Filter -&#x20;**&#x69;f a filter was applied (Data sheet only)
- **Created -&#x20;**&#x57;hen it was created.&#x20;
- **Last Accessed** - Date when the data was last pulled
- **# Times Access -&#x20;**&#x54;he number of times that the data has been updated or synced.&#x20;

### To delete a sync and revoke access

1. Navigate to **Setting** > **Live Queries**
2. Select the sync that you would like to delete
3. Press **Delete** from the bulk actions menu.&#x20;
4. Confirm the deletion.&#x20;


[title] Ask ChartHop
[path] ChartHop AI with Access Guard/

:::hint{type="warning"}
This feature is currently in Alpha. Be one of the first customers to try it! Please share any feedback with the ChartHop team.&#x20;

### How to setup a Alpha Feature

1. Contact [ChartHop support](mailto\:support@charthop.com) or your CSM if you have one. They can activate the feature for you.&#x20;
2. Read below for setup instructions and context on how the feature will work.
:::

## Ask ChartHop



![](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/XWszTmSx3aXR3ZvtMWhOm_image.png)

### Ask ChartHop

All customers get access to the open ended, Ask ChartHop chat. You can ask ChartHop any People Ops-related question and get instant answers using your existing people data along with data from Resources.&#x20;



### How Ask ChartHop works

Ask ChartHop allows you to ask questions in your natural language like:&#x20;

- *"Who are the longest tenured employees in the Customer department?"&#x20;*
- *"Can you give me a list of all of the people in who were rated "Outstanding" on their last performance review?"*
- *"Who is the HRBP for Alex Stephens?"*&#x20;
- *"How many employees home address is within a 2 hour drive of Chicago?"&#x20;*
- *"Which of our current and former employees from the past year live in California?"&#x20;*
- *"What holidays does the company have in 2025?"&#x20;*

It will then use AI to generate an answer. That answer will take the form of:

- A response in the chat
- A [Data Sheet](docId\:XTd4DG4I_4_nMwjfEsq0S) with the proper filters, columns and date ranges.&#x20;
- A [Calendar View](docId\:KAN6u4lkXGmFywoCNuIJM) with proper calendars, filtering and date ranges.

After your initial question, you can continue chatting to refine the answer or use the ChartHop screen to refine your answer.&#x20;

![](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/Yl7IE2xTwxtBKnlhmv6sl_image.png)

### Try Ask ChartHop with business data using [Tables](docId:3Mq520JkKsDBMxf8d8g6Y)&#x20;

Ask ChartHop allows you to ask business questions in your natural language like:&#x20;

- *"How is the company performing so far this quarter against our goals?"*
- *"Which retail locations have the highest turnover and what might some contributing factors?"*





![](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/-oIiIWMuZ0UPeijZfW4P8_image.png)

### History

Ask ChartHop includes a History button. Clicking it will show a list of previous Ask ChartHop chats. &#x20;

- The hover activated menu to the right of each Ask ChartHop Chat will allow you to:
  - Rename a Chat
  - Delete a Chat
- The edit button next to the History button will let you start a new Chat



![](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/pVpf_xBiXSjIge4bGkPRt-20250920-104458.png)

### Ask ChartHop on the home page&#x20;

Ask ChartHop can be optionally added as a primary feature on the home page for users with access to Ask ChartHop. It will display a search bar that acts as an entry point to the Ask ChartHop chat window and AI-generated suggested prompts. The AI-generated suggested prompts are custom to each person and what data they have access to and will regenerate occasionally.&#x20;

To turn on Ask ChartHop on the home page:

1. Navigate to **Admin > AI**
2. Toggle on "**Ask ChartHop on Home Page**"


[title] Building an Agent Against the ChartHop MCP Server
[path] ChartHop AI with Access Guard/AI Pro Features/

# Building an Agent Against the ChartHop MCP Server

This guide is for developers connecting an AI agent to ChartHop over the [Model Context Protocol (MCP)](https://modelcontextprotocol.io). It covers how to connect and authenticate, what tools are available, how to call them, and the security model you're operating inside.

:::BlockQuote
**Prerequisites:** MCP server access requires the **AI Pro** module. Ensure AI Pro is enabled in **Admin > AI** before proceeding.
:::

If you're using a supported MCP client (Claude, ChatGPT connectors, Cursor, etc.), most of the OAuth handshake is automatic — you paste a URL and approve a consent screen. If you're building a client from scratch, the [Connecting](./#connecting) section documents the full flow.

***

## TL;DR

- **Transport:** JSON-RPC 2.0 over HTTP POST (Streamable HTTP). Request/response only (no SSE stream).
- **Auth:** OAuth 2.0 with PKCE and dynamic client identification (CIMD). You end up with a `Bearer` token scoped to one agent and one org.
- **Connection URL:** `https://<host>/mcp/{agent}` (org chosen at consent time) or `https://<host>/mcp/{agent}/{orgId}` (org fixed in the URL).
- **Tools:** Four: `Search`, `List`, `Detail` (all read-only), and `AskAgent` (delegate a task to a ChartHop agent).
- **Writes:** Off by default. The three data-access tools are read-only by design; actual mutation happens only through `AskAgent`, and only when the agent install has writes enabled.

***

## Connecting

### Connection URL shapes

There are two URL patterns. `{agent}` is the slug of the ChartHop AI agent you're connecting to (an org can publish more than one agent).

| Pattern                     | When to use                                                                                                                                              |
| --------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `POST /mcp/{agent}`         | **Org-less.** The org is selected during the OAuth consent step. Use this for marketplace or directory listings where the URL can't hardcode a customer. |
| `POST /mcp/{agent}/{orgId}` | **Org-scoped.** The org is fixed in the URL. `{orgId}` may be an org id or slug.                                                                         |

`GET` on either path returns `405 Method Not Allowed` — the server does not offer an SSE stream. All traffic is request/response `POST`.

### The OAuth flow

ChartHop implements OAuth 2.0 with **PKCE (S256, mandatory)** and **CIMD** (client identification by metadata document) instead of pre-registered client secrets. Your client is identified by a URL to a hosted client-metadata document rather than a `client_id`/`client_secret` you register ahead of time.

A compliant MCP client performs these steps automatically. In order:

**1. Discover the authorization server.** Starting from just the MCP URL, fetch the protected-resource metadata (RFC 9728):

```javascript
GET /.well-known/oauth-protected-resource/mcp/{agent}[/{orgId}]
→ { resource, authorization_servers, bearer_methods_supported }
```

Then the authorization-server metadata (RFC 8414) at the advertised location:

```javascript
GET /.well-known/oauth-authorization-server/mcp/{agent}[/{orgId}]
```

**2. Fetch grant info** for the consent screen:

```javascript
GET /oauth/mcp/grant-info?clientId=<CIMD_URL>&resource=<resource>&redirectUri=<redirect>
```

- `clientId` — the URL of your hosted client-metadata document (e.g. `https://claude.ai/.well-known/oauth-client-metadata.json`).
- `resource` — the MCP server URL being authorized (RFC 8707).
- The response describes your client, the signed-in user, and — for an org-less URL — the list of candidate orgs the user can pick from.

**3. User approves.** The ChartHop consent screen posts the approval:

```javascript
POST /oauth/mcp/approve
{
  "clientId":            "<CIMD_URL>",
  "redirectUri":         "<redirect>",
  "codeChallenge":       "<S256 hash>",
  "codeChallengeMethod": "S256",
  "resource":            "<resource URL>",
  "state":               "<opaque>",
  "orgId":               "<selected org>"   // only for the org-less URL
}
→ { "redirectUrl": "<redirect>?code=...&state=...&iss=..." }
```

The authorization code is bound to the user, agent, org, PKCE challenge, and redirect URI, and carries the `MCP` and `SENSITIVE` scopes.

**4. Exchange the code for an access token** (PKCE verifier required):

```javascript
POST /oauth/token
  grant_type=authorization_code
  code=<code>
  client_id=<CIMD_URL>
  redirect_uri=<redirect>
  code_verifier=<PKCE verifier>
  resource=<resource URL>          // RFC 8707, optional
→ { "access_token": "...", "token_type": "bearer", "expires_in": ... }
```

The CIMD document at `clientId` is validated server-side: HTTPS only, no redirects, size-capped, fetched through an egress proxy (SSRF protection), and the `redirect_uri` must be listed in it. Loopback redirect URIs match with port flexibility per RFC 8252 §7.3 so native clients can use an ephemeral local port.

### Using the token

Send it as a bearer token on every MCP request:

```javascript
Authorization: Bearer <access_token>
```

The token is **audience-bound to the agent** and **org-bound** (the org you chose at consent, or the org in the URL). A token minted for one agent/org cannot be replayed against another. The `SENSITIVE` scope controls whether sensitive fields (e.g. compensation) come back unmasked — subject to the agent's own permissions.

***

## The protocol

### Versions

The server speaks multiple MCP protocol versions and negotiates per client:

| Version      | Notes                                                                           |
| ------------ | ------------------------------------------------------------------------------- |
| `2026-07-28` | Newest. Stateless: declared per-request (see below), no `initialize` handshake. |
| `2025-06-18` | Latest legacy version. No JSON-RPC batching.                                    |
| `2025-03-26` | Legacy. Supports batching.                                                      |
| `2024-11-05` | Legacy. Supports batching.                                                      |

**Legacy clients** send an `initialize` request; the server replies with the negotiated `protocolVersion`, `capabilities`, and `serverInfo`, and you send an `MCP-Protocol-Version` header on subsequent requests. If a legacy `initialize` asks for `2026-07-28`, it's clamped down to the latest legacy version — the stateless path is opted into differently.

**Stateless (**`2026-07-28`**) clients** skip `initialize` entirely and declare the version on each request under `params._meta["io.modelcontextprotocol/protocolVersion"]`. Discover support with the `server/discover` method, which returns `supportedVersions` (newest first).

### Content type

The message endpoint accepts **any** `Content-Type` — some clients (e.g. ChatGPT's connector) `POST` without `application/json`. The body is parsed as JSON-RPC regardless, and parse failures come back as JSON-RPC errors rather than HTTP 415. Responses are `application/json`.

Notifications (JSON-RPC messages with no `id`) get `202 Accepted` with no body.

### Methods

| Method            | Purpose                                                                                                 |
| ----------------- | ------------------------------------------------------------------------------------------------------- |
| `initialize`      | Legacy handshake. Returns `protocolVersion`, `capabilities`, `serverInfo`, optional `instructions`.     |
| `server/discover` | `2026-07-28` discovery. Returns `supportedVersions`, `capabilities`, identity, optional `instructions`. |
| `ping`            | Health check. Returns `{}`.                                                                             |
| `tools/list`      | List the available tools (see below).                                                                   |
| `tools/call`      | Invoke a tool.                                                                                          |

`tools/list` and `server/discover` carry cache hints (`ttlMs`, `cacheScope: "private"`) — the tool set is auth- and agent-specific, so cache it briefly and per-credential. Tools are returned in a stable (name-sorted) order.

**Server instructions.** If the org's admin has configured an "MCP Instructions" hint, its text is returned in the `instructions` field of `initialize` / `server/discover`. Treat it as system guidance for how to use this particular org's tools; it's omitted when unset.

***

## The tools

Four tools are exposed. `Search`, `List`, and `Detail` are read-only data-access tools. `AskAgent` delegates a whole task to a ChartHop agent.

Each tool in `tools/list` carries MCP annotations you can use to drive UI or warnings: `readOnlyHint`, `destructiveHint`, `idempotentHint`, `openWorldHint`.

### `Search`

Find entities by name.

| Param           | Type      | Req | Description                                                                                                                                                                                          |
| --------------- | --------- | --- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `query`         | string    | Yes | Name to match against.                                                                                                                                                                               |
| `entityTypes`   | string\[] |     | Which types to search; omit to search all. Enum: `persons`, `jobs`, `fields`, `contents`, `functions`, `appUsers`, `scenarios`, `compBands`, `compReviews`, `reports`, `users`, `orgs`, `customers`. |
| `includeFormer` | boolean   |     | Include former employees as if current. Default false.                                                                                                                                               |

Use `Search` to turn a name into an id, then feed that id to `Detail` or a `List` filter.

### `List`

List entities of a type as tabular data, with filtering, pagination, sorting, and grouping/aggregation.

| Param                   | Type      | Req | Description                                                                                                                                       |
| ----------------------- | --------- | --- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
| `entityType`            | enum      | Yes | The entity type to list (see [Entity types](./#entity-types)).                                                                                    |
| `filter`                | string    |     | CQL filter expression, e.g. `dept:engineering` or `status:PENDING`.                                                                               |
| `columns`               | string\[] |     | Columns to return. Omit for the type's default columns. Request specifics like `baseComp`, `startDate`, `email`, `manager`.                       |
| `sort`                  | string    |     | Column to sort by; prefix `-` for descending (e.g. `-baseComp`).                                                                                  |
| `limit`                 | integer   |     | Max results. Default 100, max 200.                                                                                                                |
| `next`                  | string    |     | Pagination cursor from a prior `List` result.                                                                                                     |
| `groupBy`               | string    |     | Column to group by (e.g. headcount by `department`). When set, `next`/`limit`/`sort` are ignored — aggregation runs over the whole filtered set.  |
| `aggFn`                 | string    |     | Comma-separated aggregations for `groupBy`. `count` is always included; add `sum`, `mean`, `min`, `max`.                                          |
| `startDate` / `endDate` | string    |     | Inclusive range for date-aware types. `yyyy-MM-dd` or ISO-8601 datetime; supports relative dates (`today`, `-30d`, `startOfMonth`, `endOfMonth`). |
| `scenarioId`            | string    |     | List within a planning scenario instead of the live org.                                                                                          |

**Pagination:** call again with `next` set to the cursor from the previous result until it's absent.

### `Detail`

Fetch full structured detail for up to **20** entities by id.

| Param                   | Type      | Req | Description                                                                                          |
| ----------------------- | --------- | --- | ---------------------------------------------------------------------------------------------------- |
| `entityType`            | enum      | Yes | The entity type (see [Entity types](./#entity-types)).                                               |
| `ids`                   | string\[] | Yes | Entity ids (24-char hex ObjectIds). Max 20.                                                          |
| `startDate` / `endDate` | string    |     | Range for date-aware entities (reports/dashboards), `yyyy-MM-dd`.                                    |
| `interval`              | enum      |     | For date-aware entities: `DAY`, `WEEK`, `MONTH`, `QUARTER`, `FISCAL_QUARTER`, `YEAR`, `FISCAL_YEAR`. |
| `scenarioId`            | string    |     | View the entity within a scenario.                                                                   |

Over MCP, `Detail` always returns structured metadata.

:::BlockQuote
**ID chaining caveat.** The ids you pass to `Detail` must come from a `Search` or `List` result in the *same* scope (org, scenario, date range). Ids are not globally stable across scenarios — pull the id from a `List`/`Search` that used the same `scenarioId`/date window you're about to query.
:::

### `AskAgent`

Delegate a question or task to a ChartHop AI agent. The agent runs autonomously with its own tools and permissions, then returns a result. Use this when you'd rather hand off "answer this HR/org-data question" than orchestrate `List`/`Detail` yourself. It's also the **only** path to mutations over MCP.

| Param        | Type    | Req | Description                                                                                                                                                                                  |
| ------------ | ------- | --- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `prompt`     | string  | Yes | The question or task for the agent.                                                                                                                                                          |
| `agent`      | enum    |     | Which agent to ask. Enumerated dynamically from what your access allows. Defaults to the org's default agent.                                                                                |
| `readOnly`   | boolean |     | If true (default), the agent is restricted to read-only tools. Set false to allow data-modifying tools — subject to the agent's own permissions and the install's write setting (see below). |
| `complexity` | enum    |     | Reasoning effort: `high`, `medium`, `low`. Higher uses a more capable model. Defaults to the agent's configured tier.                                                                        |

***

## Calling a tool

`tools/call` takes the tool `name` and an `arguments` object:

```json
{
  "jsonrpc": "2.0",
  "id": 42,
  "method": "tools/call",
  "params": {
    "name": "List",
    "arguments": {
      "entityType": "PERSON",
      "filter": "dept:engineering",
      "columns": ["name", "title", "manager", "startDate"],
      "sort": "-startDate",
      "limit": 50
    }
  }
}
```

The result is standard MCP tool content — a `content` array of text blocks, with `isError` set when the call failed:

```json
{
  "jsonrpc": "2.0",
  "id": 42,
  "result": {
    "content": [{ "type": "text", "text": "<display-formatted table>" }],
    "isError": false
  }
}
```

Tool output is already display-formatted server-side (tabular data rendered to text). A failed call returns `isError: true` with an explanatory message rather than a JSON-RPC transport error.

***

## Entity types

`List` and `Detail` accept these `entityType` values (over MCP they're exposed as an enum, and the set is filtered to what your access and the org's configuration allow — e.g. `TIMEOFF` is hidden when the time-off tab is disabled):

`PERSON`, `JOB`, `GROUP`, `FIELD`, `REPORT`, `REPORT_CHART`, `EVENT`, `FILE`, `FORM`, `TASK`, `TEMPLATE`, `CONTENT`, `SCENARIO`, `TABLE`, `PROCESS`, `ACTION`, `CALENDAR`, `CALENDAR_ENTRY`, `COMP_BAND`, `COMP_REVIEW`, `ASSESSMENT`, `GOAL`, `GOAL_TARGET`, `GOAL_PROGRESS`, `GOAL_TYPE`, `STOCK_GRANT`, `TIMEOFF`, `TRANSCRIPT`.

In addition, **custom tables** can be queried by name (use the table's name as the `entityType`, and `TABLE` to discover table metadata).

***

## Security model

Understanding this will save you debugging time when a call returns less than you expect.

- **Read-only by default.** `Search`/`List`/`Detail` cannot mutate anything.
- **Writes are gated twice.** A mutation can only happen through `AskAgent` with `readOnly: false`, and only if the agent install has `enableMcpWrite` turned on. If it's off, write attempts are rejected at the MCP edge with a clear message. This is defense-in-depth layered on top of the agent's role/policy — it never grants access beyond what the agent's role already allows.
- **MCP must be enabled** on the install (`enableMcpServer`) for the server to respond at all.
- **Everything runs as the agent, on behalf of the authenticated user.** Data visibility (including whether sensitive fields are masked) is the intersection of the agent's role/policies and the user's access — not the raw database. Two different tokens against the same org can legitimately see different results.
- **Scenario/date scope is explicit.** If you don't pass `scenarioId` or a date range, you get the live org as of today. Chain ids within a consistent scope.

***

## A minimal agent loop

1. **Connect and authenticate.** Obtain a bearer token for `{agent}` and org.
2. `initialize` (or `server/discover` for stateless). Read `instructions`.
3. `tools/list`. Register `Search`, `List`, `Detail`, `AskAgent` with your model.
4. Let the model call tools:
   - Resolve names to ids with `Search`.
   - Pull tabular/aggregate data with `List` (paginate via `next`).
   - Expand specific records with `Detail` (up to 20 ids, matching scope).
   - Hand off open-ended tasks — or any write — to `AskAgent`.
5. Feed each tool result's `content` text back to the model and continue.

[title] AI Pro
[path] ChartHop AI with Access Guard/

ChartHop's AI capabilities are split into two tiers: [ChartHop AI with Access Guard](docId:-3RpdkLVnc72ozEIgwXMP) features, available to all organizations with the AI module, and **AI Pro features**, a set of advanced agentic capabilities currently in pre-release and available to select organizations.

## AI Pro Features

The following features are part of the **AI Pro (Pre-Release)** tier. They appear in the bottom section of **Admin > AI**.

:::BlockQuote
**Note:** AI Pro features require the base **AI Features** toggle to be enabled. Navigate to **Admin > AI** and ensure *AI Features* is toggled on before enabling any AI Pro features.
:::

1. [AI Agentic Actions](docId\:tV-jF8W-ML-9utKFdl6QX) - Enable AI to trigger automated workflows and actions.
2. [AI Agents](docId\:G3GZp2-QPitTOvnm4VLx7) - Deploy AI agents that can take actions on your behalf within ChartHop. When enabled, you can select a **Default AI Agent** and configure agent settings, including memory.
3. [AI Form Completion](docId:4imPdK6cqGb6uHHF4VDtT) - Use AI to assist with form completion and response summarization.

## Enabling AI Pro Features

1. Navigate to **Admin > AI**
2. Ensure **AI Features** is toggled on
3. Scroll to the **AI Pro (Pre-Release)** section at the bottom of the page
4. Toggle on the specific AI Pro feature(s) you want to enable
5. Click **Save Settings**

:::BlockQuote
AI Pro features are in active development. Behavior and availability may change before general release.
:::


[title] AI Agent Memory
[path] ChartHop AI with Access Guard/

**Status:** Alpha (AI Pro)

AI Agent Memory allows ChartHop's AI to retain context and learned preferences across conversations. Without memory, each chat session starts fresh. With memory enabled, the AI can remember facts, preferences, and context from prior interactions — making it progressively more useful over time.

AI Agent memory works on the default ChartHop AI agent as well as custom agents as part of the AI Pro package.&#x20;

## Enabling AI Agent Memory

1. Navigate to **Admin > AI**
2. Ensure **AI Features** is enabled
3. In the **AI Pro** section, toggle on **AI Agent Memory**
4. Click **Save Settings**

![](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/dYsSb75_8vSclywliaD4X_image.png)

## How It Works

When AI Agent Memory is enabled, the AI can store and recall information between sessions. This may include:

- Preferences expressed by a user during conversation (e.g., preferred report formats or filters)
- Context established in prior sessions that is relevant to a new question
- Organizational knowledge surfaced during previous interactions

Memories are scoped to the user and organization, and do not cross organizational boundaries.

## Privacy Considerations

AI Agent Memory stores information tied to individual users and org-level context. Admins should review their organization's data handling policies before enabling this feature. Memory contents can be cleared at the user or org level as needed.


[title] AI Agentic Actions
[path] ChartHop AI with Access Guard/AI Pro Features/

**Status:** Alpha (AI Pro)

AI Agentic Actions extends the AI's capabilities beyond read-only responses by allowing it to trigger automated workflows and ChartHop Actions from within a conversation. This enables the AI to not just answer questions, but to act — kicking off processes, sending notifications, or making defined changes based on user requests.

## Enabling AI Agentic Actions

1. Navigate to **Admin > AI**
2. Ensure **AI Features** is enabled
3. In the **AI Pro** section, toggle on **AI Agentic Actions**
4. Click **Save Settings**

****

![Agentic Actions](https://api.archbee.com/api/optimize/CXAjUAezd9VEEVQBIYmdw/mXTZnCtCAAuxIX8-_NVOC_image.png "Agentic Actions")

## How It Works

When AI Agentic Actions is enabled, the AI can invoke ChartHop Actions that have been configured in your org. The AI identifies when a user's request maps to an available action, presents it for confirmation, and executes it upon approval.

Examples of what AI Agentic Actions can do:

- Trigger an onboarding workflow for a new hire
- Send a notification to a manager about a pending task
- Fire a custom Action based on a natural language request

## Relationship to ChartHop Actions

AI Agentic Actions works in conjunction with ChartHop's existing Actions framework. Actions must be configured in **Admin > Actions** before the AI can invoke them. See the [Actions documentation](https://docs.charthop.com/actions) for details on building and managing Actions.

:::BlockQuote
AI Agentic Actions is an alpha feature and is subject to change. Access is limited to organizations with AI Pro enabled.
:::


[title] AI Form Completion
[path] ChartHop AI with Access Guard/AI Pro Features/

**Status:** Alpha (AI Pro)

AI Form Completion brings AI assistance into ChartHop's form experience. When enabled, the AI can help users complete forms more efficiently and can generate summaries of form responses — making it easier to extract insights from large volumes of feedback, review responses, or survey data.

## Enabling AI Form Completion

1. Navigate to **Admin > AI**
2. Ensure **AI Features** is enabled
3. In the **AI Pro** section, toggle on **AI Form Completion**
4. Click **Save Settings**

## How It Works

AI Form Completion operates in two areas:



![](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/qcBIzhhvNq9pPmFutJm8F_image.png)

### Form Completion Assistance

When filling out a form, users can use AI suggestions to help draft or refine their responses. This is particularly useful for longer free-text fields, such as performance review comments or feedback submissions.

### Form Response Summarization

Admins and managers can use the AI to generate summaries across multiple form submissions — for example, summarizing all peer feedback received by a particular employee, or identifying themes across a team's engagement survey responses.

## Use Cases

- Summarizing 360 feedback for a manager preparing for a review cycle
- Helping employees write more complete self-assessments
- Synthesizing patterns across survey responses at the team or org level

## Relationship to AI Summaries

AI Form Completion is distinct from the core **AI Summaries** feature (available in the standard AI module), which provides automated summaries on profiles and reports. AI Form Completion specifically extends AI capabilities into the form-filling and response-aggregation workflow.

:::BlockQuote
AI Form Completion is an alpha feature and is subject to change. Access is limited to organizations with AI Pro enabled.
:::


[title] ChartHop AI with Access Guard
[path] /

**ChartHop AI** is a collection of AI capabilities across the ChartHop platform to help you and your employees gain insights about the people and job data at your organization, update information, create with AI faster than using the UI, and create automations. ChartHop AI is available on the web version of ChartHop and in the ChartHop mobile app. ChartHop AI is also available in Slack, Microsoft Teams, Claude, and ChatGPT with ChartHop AI Pro.&#x20;

## Types of ChartHop AI Features

ChartHop has the following AI feature types:

1. [Impact Buttons](./#impact-buttons) - buttons placed conveniently throughout the ChartHop platform to enable one-click AI insights and actions. Availability depends on your plan.
2. [Ask ChartHop](docId\:Ey_nPQlPouWcmB1LsvUF7) - an open ended chat interface to start a dialogue by asking questions and responding to answers. Available to try for all customers. Access will later be restricted to only to HRIS customers.
3. [AI Summaries](docId\:n7l6ftD6WH1VLu9OXfB_Y) - See summaries of open text form responses in reviews, surveys or other forms. Available to HRIS, Performance and Engagement customers.
4. [AI Scenario Planner](docId\:tBAhm6vLFCyn3G7fy42lk) - Use AI to generate organization updates or scenarios. Available to Planning customers.
5. Ask ChartHop on Home Page - Surfaces Ask ChartHop prompt suggestions directly on the ChartHop homepage.
6. [AI Chat Write Actions](docId\:uYeooXsY5TIOpCXDMRjOF) - Allows the AI to make changes to org data directly from a chat conversation.
7. AI Form Response Summaries - Automatically generates a summary of form responses (e.g., 1:1 notes, review feedback) using AI.

In addition to all the features listed above, ChartHop also offers a ChartHop [AI Pro](docId\:GlN1taL_7eXhRhD4Zr6eQ) module which takes ChartHop AI capabilities even further with Ask ChartHop in Slack and Microsoft Teams\*, Custom Agents, truly Agentic Actions, Bi-directional MCP Support, and more.&#x20;

## How to turn on AI Features

Your organization administrator must opt in to using ChartHop's AI features. AI features access may be limited to select users.

1. Navigate to **Admin** > **AI**
2. Toggle on **AI Features** and click **Save settings**.
3. Toggle on any of the specific AI settings.
4. Select **"limit which users can see this feature"** if you would like to only give specific people access to AI initially.

![](https://api.archbee.com/api/optimize/zxjhb7-DqnuzAP-lru1l3-WZhjYq1N90ZhVLrjFcYIq-20250520-192912.png)

## Impact Buttons

![](https://api.archbee.com/api/optimize/CXAjUAezd9VEEVQBIYmdw/FSyAh8Z434XcpKylokV1t_image.png)

### Dashboard Analysis & Insights (All Modules)

Analyze trends and surface insights across your org.

This includes the **Analysis and insights** button on a custom scenario's Impact Dashboard, which requires both AI Impact Buttons and the AI Scenario Planner feature.

::Image[]{src="https://api.archbee.com/api/optimize/zxjhb7-DqnuzAP-lru1l3-M7uKGxrvdGAUB6MMuj7BR-20250410-145144.png" size="66" width="492" height="298" position="center" darkWidth="492" darkHeight="298" showCaption="false"}

### What we have in common (All Modules)

Compare what team members have in common using AI analysis.

::Image[]{src="https://api.archbee.com/api/optimize/zxjhb7-DqnuzAP-lru1l3-Hzyt8_QWu-wpPSBio17ew-20250410-145224.png" size="60" width="334" height="286" position="center" darkWidth="334" darkHeight="286" showCaption="false"}

### Working styles (Performance Module)

Understand team dynamics and working styles to better support employee success.

::Image[]{src="https://api.archbee.com/api/optimize/zxjhb7-DqnuzAP-lru1l3-9MtdbOAUri-86H1Z0v5P0-20250410-145434.png" size="84" width="1546" height="178" position="center" darkWidth="1546" darkHeight="178" showCaption="false"}

### Scenario planner (Headcount Planning Module)

Create and analyze endless headcount scenarios with ease.

Read more at [AI Scenario Planner](docId\:tBAhm6vLFCyn3G7fy42lk)

## Ask ChartHop

HRIS customers get access to the open ended, Ask ChartHop chat.

Ask ChartHop is great for:

1. Common employee questions - *"What's our sick day policy?"* pulling data from your Resources pages.
2. People Ops-related questions - using any existing job, people, engagement, or performance data you have in ChartHop
3. Data search type questions - "How many employees do we have who live within a 2 hour drive of San Francisco?"

For additional information and examples see [Ask ChartHop](docId\:Ey_nPQlPouWcmB1LsvUF7).

## How to set up ChartHop AI

Contact ChartHop Support or your CSM to activate the feature.

You may limit access to Ask ChartHop to specific people. Please inform your CSM about who you would like to have access to try during the beta period.

![](https://api.archbee.com/api/optimize/zxjhb7-DqnuzAP-lru1l3-jGaM0CHXuwoUX9Mm3-ZFS-20241114-191248.png)

## Important details

### Access Guard ™️

ChartHop AI will only use information that you have access to based on your access role and permissions. This security feature is called Access Guard. Unlike AI capabilities on other platforms that use AI itself to determine what you have access to, ChartHop's Access Guard uses the users own access filter for the AI to retrieve answers and update data. If the user doesn't have access, the AI doesn't either. This removes the need for AI to determine what it should or shouldn't allow for each user and instead is limited or enabled on behalf of each user and their access role and permissions.&#x20;

- For example, if you asked: *"What is the average age of the employees?"* but don't have access to anyone's birthday other than your own it will answer with something like: "*I apologize, but it seems that the age data is not available for most employees in the system. Only one employee's age is shown in the results, which is not enough to calculate an accurate average age for the entire company.*"

### Data Security & Training

Our AI model does not export any of your organization's data or any employee's data.

Your organizations data is not used to train or improve the AI model.

If you have questions about ChartHop's secure and mindful approach to AI see our [AI Usage Policy](docId\:sS6bEROoXvg-udia3bYAK).

### Accuracy and Hallucinations

AI models like the one used by Ask ChartHop can at times hallucinate and produce inaccurate information in responses.

We have put in guardrails and training to improve the accuracy and reduce any hallucination.

It's important for you to review and verify any responses that you receive. This is one of the reasons that Ask ChartHop will often pull up a data sheet so that you can verify the information.

There are a few steps that you can take to improve the accuracy of your responses:

1. Ensure all of your [Creating custom fields](docId\:VMoQbEuAnP7Fz8E8HOZYq) are intuitively named and also include descriptive descriptions such as "Performance Rating 2024 - Contains the rating an employee received as part of their annual performance review process conducted in August of 2024."
2. [Fields](docId\:XYrLLTZxiE-BV4ZKzEs_g) that are not in use at your organization.

### Observability

Any questions you ask ChartHop AI can be reviewed by the ChartHop team for QA purposes. Admins at your organization can see the category / theme of the questions you ask.&#x20;

## Pricing

ChartHop AI is part of core ChartHop capabilities and can be enabled or disabled. AI Pro is an additional module that extends AI capabilities and is priced as an add-on.&#x20;

[title] Name
[path] Carrot reference/Fields/Basic Org Information/Employee/

### Description

Returns the full preferred name of an Org member.

- **Code name**: `name`
- **Sensitivity**: Org Public
- **Data type**: [Name](docId\:w1GOoRP7tqsQzCWiQ8hzs)&#x20;
- **Data category**: Basic
- **Entity type:** Job
- **Read only:** No
- **Properties**: This field contains several properties that can be found under the [Name](docId\:w1GOoRP7tqsQzCWiQ8hzs) datatype reference.

### Usage examples

| **Code**     | **Description**                         |
| ------------ | --------------------------------------- |
| `name`       | Returns a member's full preferred name. |
| `name.first` | Returns a member's first name.          |
| `name.last`  | Returns a member's last name.           |


[title] Getting started with Carrot
[path] Carrot reference/

Carrot (Carrot Query Language) is the most powerful way to search, create and reference data across your ChartHop organization using custom or built-in functions and filters.&#x20;

With Carrot you can:

- Create powerful calculations using company data to evaluate financial performance and capture valuable employee data analytics using smart fields.
- Filter your employee data for customizable visualizations using the **Map**,**&#x20;Datasheet**, and **Dashboards**.
- Quickly reference employee data almost anywhere in the ChartHop platform including in the [Org Chart](docId\:BepXEDmK2n5nOxoItxF7x), [Data Sheet](docId\:XTd4DG4I_4_nMwjfEsq0S), [Map](docId\:jFytgiDGyYwmYaY5p0LnB), [Dashboards](docId\:kA8-kvT0AUi_ekF7MECLD), [Smart Fields](docId\:XNd9irlWsHFCeXmwwkSbA), and app configurations.



![](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/TP2e3G5ij20cP22Mw5BAM_screen-shot-2022-12-20-at-101654-am.png "Carrot in use on the Data Sheet")

## Using Carrot

One of Carrot's greatest values comes from its ability to enable users to build advanced structured queries, filters, and smart fields that perform calculations.

### Constructing Carrot queries

A simple query in Carrot consists of a *field*, followed by an *operator*, followed by one or more *values* or *functions*. For example:

```none
title="Director of Engineering"
```

This query will find all ChartHop users in the organization with the job title of "Director of Engineering". In this case, the query uses the `title`*&#x20;field*, the EQUALS *operator*, and the *value&#x20;*`Director of Engineering`.

For more complex queries, *operators* can be used to filter data by more than one criteria. For example:

```none
title:"director" && startDate<'2020-01-01'
```

This query will find all ChartHop users in the organization with "director" somewhere in their job title and who started working before the date of January 1st, 2020. In this case, the query uses the `title`*&#x20;field*, the `:` *operator&#x20;*&#x77;hich functions as a *Fuzzy search,* and the *value&#x20;*`director` as the first half of the query. Then, followed by the `&&`(AND)*&#x20;operator&#x20;*&#x74;he query includes the `startDate` *field*, followed by the LESS THAN *operator*, and then the *value* `'2020-01-01'`

Dive deeper into Carrot's structure in our [Key Concepts](docId\:EVS2nDSHVsn-6-9fLx7vc) article.

### Some Carrot examples

The below examples illustrate how you might use Carrot when creating filters, queries, custom fields, and more.

| **Example**                       | **Searches for**                                           |
| --------------------------------- | ---------------------------------------------------------- |
| `title:director`                  | Everyone with "director" somewhere in their title.         |
| `title="Director of Engineering"` | The exact title "Director of Engineering".                 |
| `startDate<'2020-01-01'`          | Everyone who started before the date January 1st 2020.     |
| `is:manager`                      | All people managers.                                       |
| `!department:sales,marketing`     | Everyone who is not in the Sales or Marketing departments. |
| `is:open daysOpen>90`             | Open jobs that have been open for more than 90 days.       |

## Data access and security

All data access in Carrot is permission controlled, according to ChartHop [Access Levels](https://docs.charthop.com/user-roles-and-permissions), and so query results may vary between users depending on their level of permissions.


[title] Employee
[path] Carrot reference/Fields/Basic Org Information/

Includes fields related to an employee's information including name, job title, and employee avatar.

| **Field name** | **Function**                                      | **Field code** |
| -------------- | ------------------------------------------------- | -------------- |
| Image          | Returns the employee avatar.                      | `image`        |
| Name           | Returns the full preferred name of an Org member. | `name`         |
| Name and Title | Returns the full name and title of an Org member. | `nameTitle`    |
| Title          | Returns an Org member's Job title.                | `title`        |


[title] Comp Band Base - Interval
[path] Carrot reference/Fields/Compensation/Bands/

### Description

The pay interval that the compensation range is specified in. *Hourly* or *Salary*.

- **Field code**: `compBand`
- **Sensitivity**: Highly Sensitive
- **Data type**: *Single Select*
- **Data category**: Compensation
- **Entity type:** Job
- **Read only:** Yes


[title] Comp Band Base - Maximum With Multipliers
[path] Carrot reference/Fields/Compensation/Bands/

### Description

The upper bound of the base compensation range, with all applicable multipliers applied.

- **Field code**: `compBand.baseMax.withMultipliers`
- **Sensitivity**: Highly Sensitive
- **Data type**: [Money](docId:_kS5D2xbfoR9d8WfRIVnY)&#x20;
- **Data category**: Compensation
- **Entity type:** Job
- **Read only:** No
- **Properties**: This field contains several properties that can be found under the [Money](docId:_kS5D2xbfoR9d8WfRIVnY) datatype reference.


[title] Person ID
[path] Carrot reference/Fields/Basic Org Information/Organization/

### Description

Returns the Person ID of an Org member.

- **Code name**: `personID`
- **Sensitivity**: Org Public
- **Data type**: [String](docId\:Ujw2AQAktel5uukLuP73S)&#x20;
- **Data category**: Basic
- **Entity type:** Job
- **Read only:** Yes
- **Properties**: This field contains several properties that can be found under the [String](docId\:Ujw2AQAktel5uukLuP73S)  datatype reference.


[title] Name and Title
[path] Carrot reference/Fields/Basic Org Information/Employee/

### Description

Returns the full name and title of an Org member.

- **Code name**: `nameTitle`
- **Sensitivity**: Org Public
- **Data type**: [String](docId\:Ujw2AQAktel5uukLuP73S)&#x20;
- **Data category**: Basic
- **Entity type:** Job
- **Read only:** Yes
- **Properties**: This field contains several properties that can be found under the [String](docId\:Ujw2AQAktel5uukLuP73S)  [](https://docs.charthop.com/carrot-reference/pkTE-comp-band)datatype reference.


[title] Organization
[path] Carrot reference/Fields/Basic Org Information/

Includes fields related to a person, change, and job ids.

| **Field name** | **Function**                                                    | **Field code** |
| -------------- | --------------------------------------------------------------- | -------------- |
| Change ID      | Returns the Change ID of a particular change or set of changes. | `changeID`     |
| Job ID         | Returns the Job ID of a particular Job.                         | `jobID`        |
| Person ID      | Returns the Person ID of an Org member.                         | `personID`     |


[title] Comp Band
[path] Carrot reference/Fields/Compensation/Bands/

### Description

Returns the compensation band that determines the compensation range.

- **Field code**: `compBand`
- **Sensitivity**: Highly Sensitive
- **Data type**: [Comp Band](https://docs.charthop.com/pkTE-comp-band)&#x20;
- **Data category**: Compensation
- **Entity type:** Job
- **Read only:** No
- **Properties**: This field contains several properties that are associated with the Comp Band data type.


[title] Date
[path] Carrot reference/Fields/Basic Org Information/Time/

### Description

Returns the current date.

- **Code name**: `date`
- **Sensitivity**: Org Public
- **Data type**: [Date](https://docs.charthop.com/date)
- **Data category**: Basic
- **Entity type:** None
- **Read only:** Yes
- **Properties**: This field contains several properties associated with the Date data type.


[title] Job Title
[path] Carrot reference/Fields/Basic Org Information/Employee/

### Description

Returns an Org member's Job title.

- **Code name**: `title`
- **Sensitivity**: Org Public
- **Data type**: [String](docId\:Ujw2AQAktel5uukLuP73S)&#x20;
- **Data category**: Basic
- **Entity type:** Job
- **Read only:** No
- **Properties**: This field contains several properties that can be found under the [String](docId\:Ujw2AQAktel5uukLuP73S)  [](https://docs.charthop.com/carrot-reference/pkTE-comp-band)datatype reference.


[title] Job ID
[path] Carrot reference/Fields/Basic Org Information/Organization/

### Description

Returns the Job ID of a particular Job.

- **Code name**: `jobID`
- **Sensitivity**: Org Public
- **Data type**: [String](docId\:Ujw2AQAktel5uukLuP73S)&#x20;
- **Data category**: Basic
- **Entity type:** Job
- **Read only:** Yes
- **Properties**: This field contains several properties that can be found under the [String](docId\:Ujw2AQAktel5uukLuP73S)  datatype reference.


[title] Comp Band Base - Midpoint
[path] Carrot reference/Fields/Compensation/Bands/

### Description

The midpoint of the base compensation range.

- **Field code**: `compBand.baseMid`
- **Sensitivity**: Highly Sensitive
- **Data type**: [Money](docId:_kS5D2xbfoR9d8WfRIVnY)&#x20;
- **Data category**: Compensation
- **Entity type:** Job
- **Read only:** No
- **Properties**: This field contains several properties that can be found under the [](https://docs.charthop.com/carrot-reference/pkTE-comp-band)[Money](docId:_kS5D2xbfoR9d8WfRIVnY) datatype reference.


[title] Timezone Offset
[path] Carrot reference/Fields/Basic Org Information/Time/

### Description

Returns the difference in seconds between a particular time zone and UTC.

- **Code name**: `timezoneOffset`
- **Sensitivity**: Org Public
- **Data type**: [Number](docId\:ucI5tCTfVBhonEJ6ZQijg)&#x20;
- **Data category**: Basic
- **Entity type:** Person
- **Read only:** Yes
- **Properties**: This field contains several properties that can be found under the [Number](docId\:ucI5tCTfVBhonEJ6ZQijg) datatype reference.


[title] Comp Band Base - Midpoint With Multipliers
[path] Carrot reference/Fields/Compensation/Bands/

### Description

The midpoint of the base compensation range, with all applicable multipliers applied.

- **Field code**: `compBand.baseMid.withMultipliers`
- **Sensitivity**: Highly Sensitive
- **Data type**: [Money](docId:_kS5D2xbfoR9d8WfRIVnY)&#x20;
- **Data category**: Compensation
- **Entity type:** Job
- **Read only:** No
- **Properties**: This field contains several properties that can be found under the [](https://docs.charthop.com/carrot-reference/pkTE-comp-band)[Money](docId:_kS5D2xbfoR9d8WfRIVnY) datatype reference.


[title] Comp Band Base - Pay Range
[path] Carrot reference/Fields/Compensation/Bands/

### Description

The percentage above and below the midpoint that defines the upper and lower bounds of the band. For example, a value of 30% with a midpoint of 100,000 would create a pay range of 70,000-130,000.

- **Field code**: `compBand.baseSpread`
- **Sensitivity**: Highly Sensitive
- **Data type**: [](https://docs.charthop.com/carrot-reference/pkTE-comp-band)[Percent](https://docs.charthop.com/carrot-reference/percent)
- **Data category**: Compensation
- **Entity type:** Job
- **Read only:** No
- **Properties**: This field contains several properties that can be found under the [Percent](https://docs.charthop.com/carrot-reference/percent)[](https://docs.charthop.com/carrot-reference/pkTE-comp-band) datatype reference.


[title] Comp Band Base - Minimum With Multipliers
[path] Carrot reference/Fields/Compensation/Bands/

### Description

The lower bound of the base compensation range, with all applicable multipliers applied.

- **Field code**: `compBand.baseMin.withMultipliers`
- **Sensitivity**: Highly Sensitive
- **Data type**: [Money](docId:_kS5D2xbfoR9d8WfRIVnY)&#x20;
- **Data category**: Compensation
- **Entity type:** Job
- **Read only:** No
- **Properties**: This field contains several properties that can be found under the [](https://docs.charthop.com/carrot-reference/pkTE-comp-band)[Money](docId:_kS5D2xbfoR9d8WfRIVnY) datatype reference.


[title] Carrot reference
[path] /

Carrot is a powerful query language that empowers you to search, create and reference data across your ChartHop organization.

Lean more about Carrot using the links below

- [Getting started with Carrot](docId\:UdtiyEp98g_atcRepTgAu)
- [Key Concepts](docId\:EVS2nDSHVsn-6-9fLx7vc)
- [Fields](docId\:FUEk2XZP_TA3dZeSNAMLb)
- [Operators](docId\:wn_9tVffgIwgqTde4ybmy)
- [Functions](docId\:IZsyKLqFBEtmslMltBMay)
- [Methods](docId\:e-xS-5QFSphnplU0ozZuU)
- [Quick Reference: Common Filters](docId\:SCbRuMXsV2qTmobL3VeSt)


[title] Configuring profiles
[path] ChartHop for Administrators/Admin settings/

As an Owner or Technical owner, you can use custom profile tabs to present forms to your employees that help your organization track information. For example, you can create a custom profile tab that captures and displays an employee's established goals for the quarter.

## Configuring your custom profile tabs

You can define the name, listing order, and who can access your custom profile tabs.

For example, you could create a custom profile tab with the label "Quarterly Goals" as the first tab in an employee's profile and set that tab to only be accessible to Employees and their Managers.

## Creating content for your custom profile tabs

After creating and configuring a custom profile tab, you can add and organize its content by using tab blocks. Tab blocks allow you to structure the content of your profile tabs so that you may control the type, order, and role view permissions for every segment of content inside your custom profile tabs. Content can be added using Markdown or CQL expressions in the Markdown editor. In addition to the markdown editor, you also have the option to insert custom fields into your tab blocks.

:::hint{type="info"}
&#x20;You can [create custom fields](docId\:VMoQbEuAnP7Fz8E8HOZYq) to use in your tab blocks. Or, you can import pre-made custom fields using [bundles.](docId\:O7K0K249Lrkt97FF36-YS)
:::

Using our Quarterly Goals tab idea as an example, you could:&#x20;

- Create a tab block that contains a prompt of questions for Employees about their goals for the quarter using a combination of questions written via the Markdown editor.&#x20;
- Add a series of additional questions that would require a response measured on a scale of 1 to 10, such as job satisfaction, via custom fields.&#x20;
- In another block, add a section where Managers could add feedback notes in response to the Employee's cited goals.

:::hint{type="info"}
To further customize whether fields are shown/hidden on the About, Personal History, and Job History employee profile tabs for your organization, please contact ChartHop Customer Success.
:::


[title] Configuring Org Chart Defaults
[path] ChartHop for Administrators/Admin settings/

You customize several options about how your org chart appears and what people can do with it.&#x20;

To configure the Org Chart Options, navigate to **Admin&#x20;**>**&#x20;Configuration /** **Core Views.&#x20;**&#x4F;nly users with the built in roles of [Owner](docId\:o_IcgvK94IdcUnZIuNTVi) and [Technical owner](docId\:LktBP6168xMmcc5DuPFG5) have access to this page.&#x20;

![](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/kb8K2Q4YdSVRL2o9qQWAi_screenshot-2024-05-15-at-21305-pm.png)

**Default filter —&#x20;**&#x41;dd a filter that displays for every person when they view the org chart.&#x20;

- Test the filter on the org chart view then copy it into the setting.&#x20;
- For example, you could add `employment:full` to only show full time employees.&#x20;

### Visualization

**Default fields to visualize —&#x20;**&#x54;hese fields are highlighted by default in the visualize part of the org chart. Add up to 3 fields.&#x20;

::Image[]{src="https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/e9bP9MUgQjQZ70FrDmoCd_screenshot-2024-05-15-at-30243-pm.png" size="80" width="1142" height="258" position="center" showCaption="false"}

![](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/JzHfYg18xwnSxgAzh6aKJ_screenshot-2024-05-15-at-30140-pm.png "Example of default visualization")

**Fields to highlight in the visualize menu —&#x20;**&#x53;elect which fields you would like to display at the top of the visualize menu. These are fields that you'd like to empower your team with quick access to. For example, if you have a custom `Skills` field, that you want people to use, you can add it here. These options will be the same for all users unless they do not have access to the field at all.&#x20;

::Image[]{src="https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/oAlAEMkKj8Aj3yisG34-1_screenshot-2024-05-15-at-31256-pm.png" size="76" width="938" height="638" position="center" caption="Visualize Menu" showCaption="true"}

### Card Appearance

**Which "additional people & jobs" indicators should be displayed? —&#x20;**&#x49;n the image below you can see both Sibling and Downward indicators.

- **Sibling Indicator&#x20;**— shows that the number of people that are on the same org chart level as this person. Clicking it will display "expand" the view and show those people.&#x20;
- **Downward Indicator** — Indicates that the number of people that this person has under them. Clicking this will expand the view and show those people.&#x20;

![Sibling & Downward Indicators in org chart](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/lbrRlZttO7HIbZ9SOEiv3_screenshot-2024-05-15-at-31741-pm.png "Sibling & Downward Indicators")

### Export

**Who should be able to export the Org Chart? —&#x20;**&#x43;ontrol who has the ability to [Export your Org Chart to slides](docId\:O5mVYG8s1K6stJLz6CcjL).&#x20;

## Profile Panel

The profile panel pops up when you click on a person in the org chart, map and other views around ChartHop.&#x20;

**Fields to display in the profile panel —** You can customize which fields are displayed on this panel.&#x20;

- The fields will display in the order that they were selected
- Certain built in fields have overrides for the names in the the profile panel such as `manager` -> "Reports to". &#x20;

::Image[]{src="https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/xIXRQHkV3AAzb6dwRaBQE_screenshot-2024-05-15-at-33539-pm.png" size="70" width="1112" height="408" position="center" caption="Profile Panel Field Selection" showCaption="true"}

::Image[]{src="https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/IGqbw7d4ai6XTsjlGCaFm_screenshot-2024-05-15-at-33344-pm.png" size="62" width="680" height="1262" position="center" showCaption="false"}


[title] Time
[path] Carrot reference/Fields/Basic Org Information/

Includes fields related to time and date.

| **Field name**  | **Function**                                                                        | **Field code**   |
| --------------- | ----------------------------------------------------------------------------------- | ---------------- |
| Date            | Returns the current date.                                                           | `date`           |
| Timezone Offset | Returns the difference in hours and minutes between a particular time zone and UTC. | `timezoneOffset` |
| Today           | Returns today's date.                                                               | `today`          |


[title] Change ID
[path] Carrot reference/Fields/Basic Org Information/Organization/

### Description

Returns the Change ID of a particular change or set of changes.

- **Code name**: `changeID`
- **Sensitivity**: Org Public
- **Data type**: [String](docId\:Ujw2AQAktel5uukLuP73S)&#x20;
- **Data category**: Basic
- **Entity type:** Job
- **Read only:** Yes
- **Properties**: This field contains several properties that can be found under the [String](docId\:Ujw2AQAktel5uukLuP73S)  datatype reference.


[title] Comp Band Base - Minimum
[path] Carrot reference/Fields/Compensation/Bands/

### Description

The lower bound of the base compensation range.

- **Field code**: `compBand.baseMin`
- **Sensitivity**: Highly Sensitive
- **Data type**: [Money](docId:_kS5D2xbfoR9d8WfRIVnY)&#x20;
- **Data category**: Compensation
- **Entity type:** Job
- **Read only:** No
- **Properties**: This field contains several properties that can be found under the [](https://docs.charthop.com/carrot-reference/pkTE-comp-band)[Money](docId:_kS5D2xbfoR9d8WfRIVnY) datatype reference.


[title] Comp Band Base - Maximum
[path] Carrot reference/Fields/Compensation/Bands/

### Description

The upper bound of the base compensation range.

- **Field code**: `compBand.baseMax`
- **Sensitivity**: Highly Sensitive
- **Data type**: [Money](docId:_kS5D2xbfoR9d8WfRIVnY)&#x20;
- **Data category**: Compensation
- **Entity type:** Job
- **Read only:** No
- **Properties**: This field contains several properties that can be found under the [Money](docId:_kS5D2xbfoR9d8WfRIVnY) datatype reference.


[title] Target Variable - annualized
[path] Carrot reference/Fields/Compensation/Variable/

### Description

The job's annualized target variable pay.

- **Code name**: `variableTarget.annualized`
- **Sensitivity**: Cash Compensation
- **Data type**: [Money](docId:_kS5D2xbfoR9d8WfRIVnY)&#x20;
- **Data category**: Cash Compensation
- **Entity type:** Job
- **Read only:** Yes
- **Properties:&#x20;**&#x54;his field inherits the properties of the [Money](docId:_kS5D2xbfoR9d8WfRIVnY) data type.

### Usage examples

| **Values** |
| ---------- |
| £10,000    |


[title] Band Range
[path] Carrot reference/Fields/Compensation/Bands/

:::hint{type="danger"}
- This field is deprecated and is no longer available. &#x20;
- As a substitute you can use the following formula in a [smart field](https://docs.charthop.com/working-with-smart-fields): **(base / compBand.baseMax)\*100**
:::

### Description

Returns an Org member's base compensation percentile within their band. Values below `0` indicate a base compensation below the range defined in the band. Values above `100` indicate a base compensation above the range defined in the band.

- **Field name**: Band Range
- **Code**: bandRange
- **Sensitivity**: Cash Compensation
- **Data type:&#x20;**[Number](docId\:ucI5tCTfVBhonEJ6ZQijg)&#x20;
- **Data category**: Cash Compensation
- **Entity type:** Job
- **Read only:** Yes

[title] Base – last raise date
[path] Carrot reference/Fields/Compensation/baseComp/

### Description

Date of the latest change to base compensation.

- **Code name**: `baseComp.lastRaise.date`
- **Sensitivity**: Cash Compensation
- **Data type**: [Date](https://docs.charthop.com/carrot-reference/xTAQ-date)
- **Data category**: Cash Compensation
- **Entity type:** Job
- **Read only:** Yes
- **Properties**: This field inherits the properties of the [Date](https://docs.charthop.com/carrot-reference/xTAQ-date) data type.

### Usage examples

| **Values** |
| ---------- |
| 5/9/20     |
| 6/1/22     |


[title] Variable Comp
[path] Carrot reference/Fields/Compensation/Variable/



:::hint{type="danger"}
This field will soon be deprecated and replaced with the [Target Variable - amount](https://docs.charthop.com/target-variable-amount) and [Target Variable - percent](https://docs.charthop.com/target-variable-percent) field.
:::

### Description

Returns the annual variable compensation, such as bonus or commission, as a `Percent` or `Money` value.

- **Code name**: `variable`
- **Sensitivity**: Cash Compensation
- **Data type**: [Money](docId:_kS5D2xbfoR9d8WfRIVnY) or [Percent](docId\:FbN7bFaHlFPV4f1C53DxA)&#x20;
- **Data category**: Cash Compensation
- **Entity type:** Job
- **Read only:** Yes
- **Properties**: This field contains several properties that can be found under the [Money](docId:_kS5D2xbfoR9d8WfRIVnY) and [Percent](docId\:FbN7bFaHlFPV4f1C53DxA) datatype references.


[title] Cash
[path] Carrot reference/Fields/Compensation/

Cash compensation fields.

### Fields

| **Field name**                     | **Description**                                                                                                                                                          | **Field code**       |
| ---------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -------------------- |
| Annual Cost                        | Returns the annual cash cost of a Job. The annual cash cost is sum of `Base` and `Variable`, where `Base` can have an optional multiplier applied for fully-loaded cost. | `cost`               |
| Comp                               | (Description coming soon.)                                                                                                                                               | `comp`               |
| Last Comp Change %                 | Returns the last change in compensation as a `Percent`.                                                                                                                  | `compChangePercent`  |
| Currency                           | Returns the local currency in which this person or job is compensated.                                                                                                   | `currency`           |
| Last Raise/Promotion               | Returns the date of the most recent raise or promotion.                                                                                                                  | `raisePromotionDate` |
| Last Raise Amount                  | Returns the amount of the most recent increase to total compensation.                                                                                                    | `raiseAmount`        |
| Last Raise                         | Returns the date of the most recent increase to total compensation.                                                                                                      | `raiseDate`          |
| Last Raise %                       | Returns the percent of the most recent increase to total compensation.                                                                                                   | `raisePercent`       |
| Total Annual Comp                  | Returns total annual compensation.                                                                                                                                       | `totalComp`          |
| Total Annual Comp (Local Currency) | Returns the total annual compensation in the local currency.                                                                                                             | `totalCompLocal`     |
| Total Cash Comp                    | Returns the total annual cash compensation for an Org member in the primary currency. Total annual cash compensation is the sum of base and variable compensation.       | `cashComp`           |
| Total Cash Comp (Local Currency)   | Returns the total annual cash compensation for an Org member in the local currency. Total annual cash compensation is the sum of base and variable compensation.         | `cashCompLocal`      |
| Variable Comp (Primary Currency)   | Returns the value of `variable` in the primary currency of the Org.                                                                                                      | `variablePrimary`    |

[title] Base – last raise %
[path] Carrot reference/Fields/Compensation/baseComp/

### Description

Percent increase of the latest change to base compensation.

- **Code name**: `baseComp.lastRaise.percent`
- **Sensitivity**: Compensation
- **Data type**: Percent
- **Data category**: Cash Compensation
- **Entity type:** Job
- **Read only:** Yes
- **Properties:&#x20;**&#x54;his field inherits the properties of the [Percent](https://docs.charthop.com/percent) data type.

### Usage examples

| **Values**          |
| ------------------- |
| Old Base = $120,000 |
| New base = $150,000 |
| Last Raise % = 25%  |


[title] Job Changes
[path] Carrot reference/Fields/

Includes fields related to updates in job status including promotions, changes, and departures.

### Fields

| **Field name**      | **Description**                                 | **Field code** |
| ------------------- | ----------------------------------------------- | -------------- |
| Current Change      |                                                 | `change`       |
| Data Fields         |                                                 | `data`         |
| Depart Type         |                                                 | `depart`       |
| Promotion           |                                                 | `promotion`    |
| Change Reason       | Returns the reason for a departure.             | `reason`       |
| Depart Regret       | Returns the state of `regret` of an Org member. | `regret`       |
| Changed in Scenario | Returns a list of changes in a given Scenario.  | `scenario`     |
| Update Type         | Returns the update type.                        | `update`       |


[title] Target Variable - last raise %
[path] Carrot reference/Fields/Compensation/Variable/

### Description

Percent increase of the latest change to variable compensation.

- **Code name**: `variableTargets.lastRaise.percent`
- **Sensitivity**: Cash Compensation
- **Data type**: [Percent](docId\:FbN7bFaHlFPV4f1C53DxA) 
- **Data category**: Cash Compensation
- **Entity type:** Job
- **Read only:** Yes
- **Properties:&#x20;**&#x54;his field inherits the properties of the [Percent](docId\:FbN7bFaHlFPV4f1C53DxA) data type.

### Usage examples

| **Values**                                                                       |
| -------------------------------------------------------------------------------- |
| Old Bonus = $12,000<br /><br />New bonus = $15,000<br /><br />Last Raise % = 25% |


[title] Permissions
[path] Carrot reference/Fields/

Includes fields related to access level permissions and data sensitivity.

### Fields

| **Field name**                       | **Description**                                                                                                   | **Field code**           |
| ------------------------------------ | ----------------------------------------------------------------------------------------------------------------- | ------------------------ |
| Can this person approve this change? | Returns a boolean (yes/no) value indicating whether an Org member has permission to approve changes in Scenarios. | <br />`canApproveChange` |
| Can this user edit this job?         | <br />Returns a boolean (yes/no) value indicating whether an Org member has permission to edit jobs.              | <br />`canEditJob`       |
| Data Access                          | Returns all data access permissions associated with a record.                                                     | <br />`dataAccess`       |
|  Data Access Sensitive               |                                                                                                                   | `dataAccessSensitive`    |
| Sensitivity                          |                                                                                                                   | `sensitivity`            |


[title] Target hours per week
[path] Carrot reference/Fields/Compensation/baseComp/

### Description

For jobs compensated on an hourly interval, the target number of working hours per week.

- **Code name**: `targetHoursPerWeek`
- **Sensitivity**: Cash Compensation
- **Data type**: [Number](docId\:ucI5tCTfVBhonEJ6ZQijg)&#x20;
- **Data category**: Cash Compensation
- **Entity type:** Job
- **Read only:** No
- **Properties:&#x20;**&#x54;his field inherits the properties of the [Number](docId\:ucI5tCTfVBhonEJ6ZQijg) data type.

### Usage examples

| **Values** |
| ---------- |
| 40         |

[title] variableTarget
[path] Carrot reference/Fields/Compensation/

Represents a job's target variable compensation -- for example an annual bonus or on-target-earnings commission.

- **Label:&#x20;**&#x54;arget variable
- **Field Code:&#x20;**`variableTarget`
- **Data Type:&#x20;**[VariableComp](docId\:ny_nabMaX4hU45W8SvLdt)&#x20;
- **Entity Type:&#x20;**[Job](docId:09AD2ikREIzwa-J0dFOBM)&#x20;
- **Sensitivity:&#x20;**&#x4D;anager-Shared
- **Category:&#x20;**&#x43;ompensation: Variable
- **Time Tracked:&#x20;**&#x59;es&#x20;

### Compound fields - examples

The below compound fields are examples that you can build using `baseComp` and its properties (from [VariableComp](docId\:ny_nabMaX4hU45W8SvLdt) ).

| **Field name**                              | **Description**                                                                                                                                                                                  | **Field code**                            |
| ------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ----------------------------------------- |
| Target Variable                             | The most recent variable compensation set on the job. The type can be reflected as either a `Bonus` or `Commission`. The value can be expressed as either a % of the base, or as a fixed amount. | `variableTarget`                          |
| Target Variable - annualized                | The job's annualized target variable pay.                                                                                                                                                        | `variableTarget.annualized`               |
| Target Variable - annualized (org currency) | The job's annualized target variable pay in the org's default currency.                                                                                                                          | `variableTarget.annualized.asOrgCurrency` |
| Target Variable - amount                    | Returns the value of `variableTarget` if that value is of type `Money`.                                                                                                                          | `variableTarget.pay`                      |
| Target Variable - percent                   | Returns the value of `variableTarget` if that value is of type `Percent`.                                                                                                                        | `variableTarget.percent`                  |
| Target Variable - type                      | Returns the type of compensation of the associated `variableTarget` value. `variableTarget.type` can have a value of either `Bonus` or `Commission`.                                             | `variableTarget.type`                     |
| Target Variable - last raise %              | Percent increase of the latest change to variable compensation.                                                                                                                                  | `variableTargets.lastRaise.percent`       |
| Target Variable – last raise amount         | Returns the dollar value of the latest increase to variable compensation.                                                                                                                        | `variableTargets.lastRaise.pay`           |
| Target Variable – last raise date           | Returns the date in which the latest increase to variable compensation took place.                                                                                                               | `variableTargets.lastRaise.date`          |
| Target Variable – months since last raise   | The number of months since the last change to variable compensation.                                                                                                                             | `variableTargets.lastRaise.monthsSince`   |


[title] Base – yearly (org currency)
[path] Carrot reference/Fields/Compensation/baseComp/

### Description

For jobs compensated on a yearly interval, the job's annual salary, in the org's default currency.

- **Code name**: `baseComp.yearly.asOrgCurrency`
- **Sensitivity**: Cash Compensation
- **Data type**: [Money](docId:_kS5D2xbfoR9d8WfRIVnY)&#x20;
- **Data category**: Cash Compensation
- **Entity type:** Job
- **Read only:** Yes
- **Properties:&#x20;**&#x54;his field inherits the properties of the [Money](docId:_kS5D2xbfoR9d8WfRIVnY) data type.

### Usage examples

| **Values** |
| ---------- |
| $120,000   |


[title] Base
[path] Carrot reference/Fields/Compensation/baseComp/

:::hint{type="danger"}
This field will soon be deprecated and replaced with the [Base - yearly](https://docs.charthop.com/carrot-reference/base-yearly) field.
:::

Returns annual base salary for full time employees, and returns `Null` for hourly workers.

- **Code name**: `base`
- **Sensitivity**: Cash Compensation
- **Data type**: [Money](docId:_kS5D2xbfoR9d8WfRIVnY)&#x20;
- **Data category**: Cash Compensation
- **Entity type:** Job
- **Read only:** No


[title] Base – last raise amount
[path] Carrot reference/Fields/Compensation/baseComp/

### Description

Amount of the latest change to base compensation.

- **Code name**: `baseComp.lastRaise.pay`
- **Sensitivity**: Cash Compensation
- **Data type**: [Money](docId:_kS5D2xbfoR9d8WfRIVnY)&#x20;
- **Data category**: Cash Compensation
- **Entity type:** Job
- **Read only:** Yes
- **Properties:&#x20;**&#x54;his field inherits the properties of the [Money](docId:_kS5D2xbfoR9d8WfRIVnY) data type.

### Usage examples

| **Values**                   |
| ---------------------------- |
| Old Base = €120,000          |
| New base = €150,000          |
| Last Raise amount  = €30,000 |

[title] Target Variable - amount
[path] Carrot reference/Fields/Compensation/Variable/

### Description

Returns the value of `variable` if that value is of type `Money`.

- **Code name**: `variableTarget.pay`
- **Sensitivity**: Cash Compensation
- **Data type**: [Money](docId:_kS5D2xbfoR9d8WfRIVnY)&#x20;
- **Data category**: Cash Compensation
- **Entity type:** Job
- **Read only:** Yes
- **Properties**: This field contains several properties that can be found under the [Money](docId:_kS5D2xbfoR9d8WfRIVnY) datatype reference.

### Usage examples

| **Values** |
| ---------- |
| $10,000    |


[title] Target Variable - type
[path] Carrot reference/Fields/Compensation/Variable/

### Description

Returns the type of compensation of the associated `variableTarget` value. `variableTarget.type` can have a value of either `Bonus` or `Commission`.

- **Code name**: `variableTarget.type`
- **Sensitivity**: Cash Compensation
- **Data type**: [Enum](docId\:UnTq2eAL5RMIpNYczvfw1)&#x20;
- **Data category**: Cash Compensation
- **Entity type:** Job
- **Read only:** No
- **Properties**: This field contains several properties that can be found under the [Enum](docId\:UnTq2eAL5RMIpNYczvfw1) datatype reference.

### Usage examples

| **Values** |
| ---------- |
| Bonus      |
| Commission |


[title] Target Variable – months since last raise
[path] Carrot reference/Fields/Compensation/Variable/

### Description

The number of months since the last change to variable compensation.

- **Code name**: `variableTargets.lastRaise.monthsSince`
- **Sensitivity**: Cash Compensation
- **Data type**: [Number](docId\:ucI5tCTfVBhonEJ6ZQijg)&#x20;
- **Data category**: Cash Compensation
- **Entity type:** Job
- **Read only:** Yes
- **Properties:&#x20;**&#x54;his field inherits the properties of the [Number](docId\:ucI5tCTfVBhonEJ6ZQijg) data type.

### Usage examples

| **Values** |
| ---------- |
| 5          |


[title] Base – last raise type
[path] Carrot reference/Fields/Compensation/baseComp/

### Description

The type of the latest change to base compensation, e.g. promotion.

- **Code name**: `baseComp.lastRaise.type`
- **Sensitivity**: Cash Compensation
- **Data type**: *Single select*
- **Data category**: Cash Compensation
- **Entity type:** Job
- **Read only:** Yes
- **Properties:&#x20;**&#x54;his field inherits the properties of the *Single select* data type.

### Usage examples

| **Values** |
| ---------- |
| Promotion  |
| Demotion   |
| None       |

[title] Base interval
[path] Carrot reference/Fields/Compensation/baseComp/

### Description

The pay interval of the base pay, which can be `yearly` , `hourly`, `monthly`, `weekly`,  or `daily`.

- **Code name**: `baseComp.interval`
- **Sensitivity**: Cash Compensation
- **Data type**: *Single select*
- **Data category**: Cash Compensation
- **Entity type:** Job
- **Read only:** Yes
- **Properties:&#x20;**&#x54;his field inherits the properties of the *Single select* data type.

### Usage examples

| **Return values** |
| ----------------- |
| yearly            |
| hourly            |


[title] Target Variable – last raise date
[path] Carrot reference/Fields/Compensation/Variable/

### Description

Returns the date in which the latest increase to variable compensation took place.

- **Code name**: `variableTargets.lastRaise.date`
- **Sensitivity**: Cash Compensation
- **Data type**: [ate](https://docs.charthop.com/carrot-reference/xTAQ-date)
- **Data category**: Cash Compensation
- **Entity type:** Job
- **Read only:** Yes
- **Properties:&#x20;**&#x54;his field inherits the properties of the [ate ](https://docs.charthop.com/carrot-reference/xTAQ-date)data type.

### Usage examples

| **Values** |
| ---------- |
| 8/4/22     |

[title] Base Comp Changes
[path] Carrot reference/Fields/Job Changes/

### Description

Returns a list of the changes to the person's base compensation over time, in chronological order. This is intended to give you access to the person's base compensation history.

- **Code name**: `baseCompChanges`
- **Sensitivity**: Org Public
- **Data type**: Object
- **Data category**: Changes
- **Entity type**: None
- **Read only:** Yes

### Fields

`baseCompChanges` returns a list of *CompChange* objects, each of which has the following fields:

- **date** (Date) – the date the compensation change took effect.
- **baseComp** (PayInterval) – the new base compensation that took effect on the specified date, returned as a PayInterval.

### Usage Examples

| **Code**                                                                                                           | **Description**                                                          |
| ------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------ |
| `baseCompChanges.first.baseComp`                                                                                   | Return the job’s original (first ever) base compensation amount.         |
| `baseCompChanges.last.date`                                                                                        | Return the date of the job’s last base comp adjustment.                  |
| `baseCompChanges == []`                                                                                            | Jan. 1 - new open job is created.                                        |
| `baseCompChanges == [ CompChange{ date: Jan 2, baseCompcomp{…}} ]`                                                 | Jan 2 - Sally fills the job and her baseComp.yearly is set to $100,000   |
| `baseCompChanges == []`                                                                                            | Feb 1 - Sally departs                                                    |
| `baseCompChanges == [ CompChange{ date: March 1, baseCompcomp{…}} ]`                                               | March 1 - Sam fills the job and his baseComp.yearly is set to $100,000   |
| `baseCompChanges == [ CompChange{ date: March 1, baseCompcomp{…}} , CompChange{ date: April 1, baseCompcomp{…}} ]` | April 1 - Sam gets a pay adjustment. His new baseComp.yearly is $110,000 |

### Additional Notes

- `baseCompChanges` for open jobs returns an empty list \[].
- `baseCompChanges` for jobs that were backfills but are now filled by a new person will *only* return the base comp changes for .


[title] Base - annualized
[path] Carrot reference/Fields/Compensation/baseComp/

### Description

The job's annualized base pay. Hourly base pay is annualized by multiplying the hourly rate by the target hours per week and weeks per year.

- **Code name**: `baseComp.annualized`
- **Sensitivity**: Cash Compensation
- **Data type**: [Money](docId:_kS5D2xbfoR9d8WfRIVnY)&#x20;
- **Data category**: Cash Compensation
- **Entity type:** Job
- **Read only:** Yes
- **Properties:&#x20;**&#x54;his field inherits the properties of the [Money](docId:_kS5D2xbfoR9d8WfRIVnY) data type.

### Usage examples

| **Values** |
| ---------- |
| €83,200    |
| €120,000   |


[title] Base – hourly (org currency)
[path] Carrot reference/Fields/Compensation/baseComp/

### Description

For jobs compensated on an hourly interval, the job's hourly pay, in the org's default currency.

- **Code name**: `baseComp.hourly.asOrgCurrency`
- **Sensitivity**: Cash Compensation
- **Data type**: [Money](docId:_kS5D2xbfoR9d8WfRIVnY)&#x20;
- **Data category**: Cash Compensation
- **Entity type:** Job
- **Read only:** Yes
- **Properties:&#x20;**&#x54;his field inherits the properties of the [Money](docId:_kS5D2xbfoR9d8WfRIVnY) data type.

### Usage examples

| **Values** |
| ---------- |
| $40        |


[title] Base – months since last raise
[path] Carrot reference/Fields/Compensation/baseComp/

### Description

The number of months since the last change to base compensation.

- **Code name**: `baseComp.lastRaise.date.monthsSince`
- **Sensitivity**: Cash Compensation
- **Data type**: [Number](docId\:ucI5tCTfVBhonEJ6ZQijg)&#x20;
- **Data category**: Cash Compensation
- **Entity type:** Job
- **Read only:** Yes
- **Properties:&#x20;**&#x54;his field inherits the properties of the [Number](docId\:ucI5tCTfVBhonEJ6ZQijg) data type.

### Usage examples

| **Values** |
| ---------- |
| 5          |

[title] Base – yearly
[path] Carrot reference/Fields/Compensation/baseComp/

### Description

For jobs compensated on a yearly interval, the job's annual salary.

- **Code name**: `baseComp.yearly`
- **Sensitivity**: Cash Compensation
- **Data type**: [Money](docId:_kS5D2xbfoR9d8WfRIVnY)&#x20;
- **Data category**: Cash Compensation
- **Entity type:** Job
- **Read only:** Yes
- **Properties:&#x20;**&#x54;his field inherits the properties of the [Money](docId:_kS5D2xbfoR9d8WfRIVnY) data type.

### Usage examples

| **Values** |
| ---------- |
| €120,000   |


[title] Compa Ratio – band midpoint
[path] Carrot reference/Fields/Compensation/Bands/



### Description

The job's base pay, divided by the midpoint of its comp band. Expressed as a percentage.

- **Field code**: `compaRatioMid`
- **Sensitivity**: Highly Sensitive
- **Data type**: [Percent](https://docs.charthop.com/percent)
- **Data category**: Compensation
- **Entity type:** Job
- **Read only:** Yes
- **Properties**: This field contains several properties that can be found under the [Percent](https://docs.charthop.com/percent) datatype reference.

### Usage examples

| **Values** |
| ---------- |
| 92%        |


[title] Base – hourly
[path] Carrot reference/Fields/Compensation/baseComp/

### Description

For jobs compensated on an hourly interval, the job's hourly pay.

- **Code name**: `baseComp.hourly`
- **Sensitivity**: Cash Compensation
- **Data type**: [Money](docId:_kS5D2xbfoR9d8WfRIVnY)&#x20;
- **Data category**: Cash Compensation
- **Entity type:** Job
- **Read only:** Yes
- **Properties:&#x20;**&#x54;his field inherits the properties of the [Money](docId:_kS5D2xbfoR9d8WfRIVnY) data type.

### Usage examples

| **Values** |
| ---------- |
| €40        |


[title] Depart Type
[path] Carrot reference/Fields/Job Changes/

### Description

Returns the type of departure of a terminated employee. `depart` can be `Voluntary` or `Involuntary`.

- **Code name**: `depart`
- **Sensitivity**: Manager-only
- **Data type**: [Enum](docId\:UnTq2eAL5RMIpNYczvfw1)&#x20;
- **Data category**: Changes
- **Entity type:** Change
- **Read only:** No


[title] Base – last raise amount (org currency)
[path] Carrot reference/Fields/Compensation/baseComp/

### Description

Amount of the latest change to base compensation, in the org's default currency.

- **Code name**: `baseComp.lastRaise.pay.asOrgCurrency`
- **Sensitivity**: Cash Compensation
- **Data type**: [Money](docId:_kS5D2xbfoR9d8WfRIVnY)&#x20;
- **Data category**: Cash Compensation
- **Entity type:** Job
- **Read only:** Yes
- **Properties:&#x20;**&#x54;his field inherits the properties of the [Money](docId:_kS5D2xbfoR9d8WfRIVnY) data type.

### Usage examples

| **Values**                   |
| ---------------------------- |
| Old Base = €120,000          |
| New base = €150,000          |
| Last Raise amount  = €30,000 |

[title] Equity
[path] Carrot reference/Fields/Compensation/

Equity compensation fields.

### Fields

| **Field name**              | **Description**                                                                                                                                                             | **Code name**        |
| --------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------- |
| Calendar Year Vested Shares | Returns the number of shares that an Org member is vesting in the current calendar year.                                                                                    | `calYearVestShares`  |
| Calendar Year Vested Value  | Returns the value, based on current stock price, that the person is vesting in the current calendar year.                                                                   | `calYearVestValue`   |
| Fully Vested Date           | Returns the date on which an Org member's equity grants will be fully vested.                                                                                               | `vestedDate`         |
| Fully Vested Value          | <br />Returns the total value of all shares issued, both vested and unvested.                                                                                               | `totalSharesValue`   |
| Grants                      | (Description coming soon.)                                                                                                                                                  | `grants`             |
| Last Grant                  | Returns a `StockGrant` structure for last grant issued to an Org member. Use the properties of the `StockGrant` datatype to pull relevant data such as `.value` or `.date`. | `lastGrant`          |
| Planned Grant (Shares)      | Returns the number of planned grant shares.                                                                                                                                 | `grantShares`        |
| Planned Grant (Type)        | Returns the planned grant type.                                                                                                                                             | `grantType`          |
| Planned Grant (Value)       | Returns the value of planned grants.                                                                                                                                        | `grantValue`         |
| Strike Price                | Returns the strike price.                                                                                                                                                   | `strikePrice`        |
| Total Shares                | Returns the total number of shares issued, both vested and unvested.                                                                                                        | `totalShares`        |
| Total Org Shares            | Returns the total number of Org shares.                                                                                                                                     | `totalOrgShares`     |
| Unvested Shares             | Returns the total number of shares that have been issued, but not vested.                                                                                                   | `unvestedShares`     |
| Unvested Value              | Returns the total value of all shares that have been issued, but not vested.                                                                                                | `unvestedValue`      |
| Vested Shares               | Returns the total number of shares issued that have vested.                                                                                                                 | `vestedShares`       |
| Vested Value                | Returns the total value, based on current stock price, that has vested from issued equity grants.                                                                           | `vestedValue`        |
| Vest Shares - Upcoming Year | Returns the number of shares the an Org member is vesting over the upcoming year.                                                                                           | `nextYearVestShares` |
| Vest Value - Upcoming Year  | Returns the value, based on current stock price, of the shares an Org member is vesting over the upcoming year.                                                             | `nextYearVestValue`  |


[title] Target Variable
[path] Carrot reference/Fields/Compensation/Variable/

### Description

The most recent variable compensation set on the job. The type can be reflected as either a `Bonus` or `Commission`. The value can be expressed as either a % of the base, or as a fixed amount.

- **Code name**: `variableTarget`
- **Sensitivity**: Cash Compensation
- **Data type**: *VariableComp*
- **Data category**: Cash Compensation
- **Entity type:** Job
- **Read only:** No

### Usage examples

| **Values**         |
| ------------------ |
| Bonus 30%          |
| Commission $10,000 |


[title] baseComp
[path] Carrot reference/Fields/Compensation/

Represents a job's base compensation rate -- for example a salary of $80,000 / year or an hourly rate of $25 / hour.

- **Label:&#x20;**&#x42;ase
- **Field Code:&#x20;**`baseComp`
- **Data Type:&#x20;**[PayInterval](docId\:yKNKN59I_Xjwtq9iO-i3-)&#x20;
- **Entity Type:&#x20;**[Job](docId:09AD2ikREIzwa-J0dFOBM)&#x20;
- **Sensitivity:&#x20;**&#x4D;anager-Shared
- **Category:&#x20;**&#x43;ompensation: Base
- **Time Tracked:&#x20;**&#x59;es

### Compound fields - examples

The below compound fields are examples that you can build using `baseComp` and its properties (from [PayInterval](docId\:yKNKN59I_Xjwtq9iO-i3-)).

| **Example**                             | **Description**                                                                                                                                                            | **Syntax**                             |
| --------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------- |
| Base                                    | The job's base pay.                                                                                                                                                        | `baseComp`                             |
| Base (org currency)                     | The job's base pay, in the org's default currency.                                                                                                                         | `baseComp.asOrgCurency`                |
| Base - annualized                       | The job's annualized base pay. Hourly base pay is annualized by multiplying the hourly rate by the target hours per week and weeks per year                                | `baseComp.annualized`                  |
| Base - annualized (org currency)        | The job's annualized base pay in the org's default currency. Hourly base pay is annualized by multiplying the hourly rate by the target hours per week and weeks per year. | `baseComp.annualized.asOrgCurrency`    |
| Base interval                           | The pay interval of the base pay, for instance, `yearly` or `hourly`.                                                                                                      | `baseComp.interval`                    |
| Base – yearly                           | For jobs compensated on a yearly interval, the job's annual salary.                                                                                                        | `baseComp.yearly`                      |
| Base – yearly (org currency)            | For jobs compensated on a yearly interval, the job's annual salary, in the org's default currency.                                                                         | `baseComp.yearly.asOrgCurrency`        |
| Base – hourly                           | For jobs compensated on an hourly interval, the job's hourly pay.                                                                                                          | `baseComp.hourly`                      |
| Base – hourly (org currency)            | For jobs compensated on an hourly interval, the job's hourly pay, in the org's default currency.                                                                           | `baseComp.hourly.asOrgCurrency`        |
| Base – last raise %                     | Percent increase of the latest change to base compensation.                                                                                                                | `baseComp.lastRaise.percent`           |
| Base – last raise amount                | Amount of the latest change to base compensation.                                                                                                                          | `baseComp.lastRaise.pay`               |
| Base – last raise amount (org currency) | Amount of the latest change to base compensation, in the org's default currency.                                                                                           | `baseComp.lastRaise.pay.asOrgCurrency` |
| Base – last raise date                  | Date of the latest change to base compensation.                                                                                                                            | `baseComp.lastRaise.date`              |
| Base – last raise type                  | The type of the latest change to base compensation, e.g. promotion.                                                                                                        | `baseComp.lastRaise.type`              |
| Base – months since last raise          | The number of months since the last change to base compensation.                                                                                                           | `baseComp.lastRaise.date.monthsSince`  |
| Target hours per week                   | For jobs compensated on an hourly interval, the target number of working hours per week.                                                                                   | `targetHoursPerWeek`                   |
| Target weeks per year                   | For jobs compensated on an hourly interval, the target number of working weeks per year.                                                                                   | `targetWeeksPerYear`                   |


[title] Comp Band - Job Family
[path] Carrot reference/Fields/Compensation/Bands/

### Description

The second level grouping of your compensation bands.

- **Field code**: `compBand.jobLevel`
- **Sensitivity**: Highly Sensitive
- **Data type**: Table[](https://docs.charthop.com/carrot-reference/pkTE-comp-band)
- **Data category**: Compensation
- **Entity type:** Job
- **Read only:** No


[title] Hours Per Week
[path] Carrot reference/Fields/Compensation/baseComp/

:::hint{type="danger"}
This field will soon be deprecated and replaced with the [Target hours per week](https://docs.charthop.com/target-hours-per-week) field.
:::

### Description

Returns the number of hours per week worked by an hourly worker.

- **Code name**: `hoursPerWeek`
- **Sensitivity**: Cash Compensation
- **Data type**: Number
- **Data category**: Cash Compensation
- **Entity type:** Job
- **Read only:** No


[title] Last Base Raise
[path] Carrot reference/Fields/Compensation/baseComp/

:::hint{type="danger"}
This field will soon be deprecated and replaced with the [Base - last raise date](https://docs.charthop.com/base-last-raise-date) field.
:::

### Description

Returns the date on which an Org member received their last base compensation raise.

- **Code name**: `baseRaiseDate`
- **Sensitivity**: Cash Compensation
- **Data type**: Date
- **Data category**: Cash Compensation
- **Entity type:** Job
- **Read only:** Yes


[title] Data Access
[path] Carrot reference/Fields/Permissions/

### Description

Returns all data access permissions associated with a record.

- **Code name**: `dataAccess`
- **Sensitivity**: Org Public&#x20;
- **Data type**: [String](docId\:Ujw2AQAktel5uukLuP73S)&#x20;
- **Data category**: Permissions
- **Entity type:** Job
- **Read only:** Yes


[title] Weeks Per Year
[path] Carrot reference/Fields/Compensation/baseComp/

:::hint{type="danger"}
This field will soon be deprecated and replaced with the [Target hours per year](https://docs.charthop.com/target-weeks-per-year) field.
:::

### Description

Returns the number of weeks per year during which an hourly worker is employed.

- **Code name**: `weeksPerYear`
- **Sensitivity**: Cash Compensation
- **Data type:&#x20;**&#x4E;umber
- **Data category**: Cash Compensation
- **Entity type:** Person
- **Read only:** No


[title] Target Variable – last raise amount
[path] Carrot reference/Fields/Compensation/Variable/

### Description

Returns the dollar value of the latest increase to variable compensation.

- **Code name**: `variableTargets.lastRaise.pay`
- **Sensitivity**: Cash Compensation
- **Data type**: [Money](docId:_kS5D2xbfoR9d8WfRIVnY)&#x20;
- **Data category**: Cash Compensation
- **Entity type:** Job
- **Read only:** Yes
- **Properties:&#x20;**&#x54;his field inherits the properties of the [Money](docId:_kS5D2xbfoR9d8WfRIVnY) data type.

### Usage examples

| **Values** |
| ---------- |
| $10,000    |

[title] Comp Band - Department
[path] Carrot reference/Fields/Compensation/Bands/

### Description

The top-level grouping of your compensation bands.

- **Field code**: `compBand.tier`
- **Sensitivity**: Highly Sensitive
- **Data type**: Table
- **Data category**: Compensation
- **Entity type:** Job
- **Read only:** No


[title] Annual Cost
[path] Carrot reference/Fields/Compensation/Cash/

### Description

Returns the annual cash cost of a Job. The annual cash cost is sum of `Base` and `Variable`, where `Base` can have an optional multiplier applied for fully-loaded cost.

- **Code name**: `cost`
- **Sensitivity**: Cash Compensation
- **Data type**: [Money](docId:_kS5D2xbfoR9d8WfRIVnY)&#x20;
- **Data category**: Cash Compensation
- **Entity type:** Job
- **Read only:** Yes
- **Properties**: This field contains several properties that can be found under the [](https://docs.charthop.com/carrot-reference/pkTE-comp-band)[Money](docId:_kS5D2xbfoR9d8WfRIVnY) datatype reference.


[title] Base
[path] Carrot reference/Fields/Compensation/baseComp/

### Description

The job's base pay.

- **Code name**: `baseComp`
- **Sensitivity**: Cash Compensation
- **Data type**: *PayInterval*
- **Data category**: Cash Compensation
- **Entity type:** Job
- **Read only:** No
- **Properties:&#x20;**&#x54;his field inherits the properties of the *PayInterval* data type.

### Usage examples

| **Values**    |
| ------------- |
| €40/hour      |
| €120,000/year |


[title] Total Cash Comp
[path] Carrot reference/Fields/Compensation/Cash/

### Description

Returns the total annual cash compensation for an Org member in the primary currency. Total annual cash compensation is the sum of base and variable compensation.

- **Code name**: `cashComp`
- **Sensitivity**: Cash Compensation
- **Data type**: [Money](docId:_kS5D2xbfoR9d8WfRIVnY)&#x20;
- **Data category**: Cash Compensation
- **Entity type:** Job
- **Read only:** Yes
- **Properties**: This field contains several properties that can be found under the [](https://docs.charthop.com/carrot-reference/pkTE-comp-band)[Money](docId:_kS5D2xbfoR9d8WfRIVnY) datatype reference.

[title] Comp Band - Job Level
[path] Carrot reference/Fields/Compensation/Bands/

### Description

The universal job level for the given band.

- **Field code**: `compBand.jobLevel`
- **Sensitivity**: Highly Sensitive
- **Data type**: Table[](https://docs.charthop.com/carrot-reference/pkTE-comp-band)
- **Data category**: Compensation
- **Entity type:** Job
- **Read only:** No


[title] Currency
[path] Carrot reference/Fields/Compensation/Cash/

### Description

Returns the local currency in which this person or job is compensated.

- **Code name**: `currency`
- **Sensitivity**: Cash Compensation
- **Data type**: [Currency](docId\:HYeq9EU9e7La_RvHQTFvG)&#x20;
- **Data category**: Cash Compensation
- **Entity type:** Job
- **Read only**: No
- **Properties**: This field contains several properties that can be found under the [](https://docs.charthop.com/carrot-reference/pkTE-comp-band)[Currency](docId\:HYeq9EU9e7La_RvHQTFvG) datatype reference.


[title] Last Raise/Promotion
[path] Carrot reference/Fields/Compensation/Cash/

### Description

Returns the date of the most recent raise or promotion.

- **Code name**: `raisePromotionDate`
- **Sensitivity**: Cash Compensation
- **Data type**: [Date](https://docs.charthop.com/date)
- **Data category**: Cash Compensation
- **Entity type:** Job
- **Read only:** Yes
- **Properties**: This field contains several properties associated with the Data datatype.


[title] Total Org Shares
[path] Carrot reference/Fields/Compensation/Equity/

### Description

Returns the total number of Org shares.

- **Code name**: `totalOrgShares`
- **Sensitivity**: Equity Compensation
- **Data type**: [Number](docId\:ucI5tCTfVBhonEJ6ZQijg)&#x20;
- **Data category**: Equity Compensation
- **Entity type:** Job
- **Read only:** Yes
- **Properties**: This field contains several properties that can be found under the [Number](docId\:ucI5tCTfVBhonEJ6ZQijg) datatype reference.


[title] Comp Band Base - Target
[path] Carrot reference/Fields/Compensation/Bands/

### Description

A guideline value for the band which may be different from the midpoint.

- **Field code**: `compBand.baseTarget`
- **Sensitivity**: Highly Sensitive
- **Data type**: [](https://docs.charthop.com/carrot-reference/pkTE-comp-band)[Percent](https://docs.charthop.com/carrot-reference/percent)
- **Data category**: Compensation
- **Entity type:** Job
- **Read only:** No
- **Properties**: This field contains several properties that can be found under the [Percent](https://docs.charthop.com/carrot-reference/percent)[](https://docs.charthop.com/carrot-reference/pkTE-comp-band) datatype reference.


[title] Comp Band Variable - Target (percent of base)
[path] Carrot reference/Fields/Compensation/Bands/

### Description

The target variable pay amount, specified as a percentage of the job's actual base.

- **Field code**:  `compBand.variablePercentOfBase`
- **Sensitivity**: Highly Sensitive
- **Data type**: [Money](docId:_kS5D2xbfoR9d8WfRIVnY)&#x20;
- **Data category**: Compensation
- **Entity type:** Job
- **Read only:** No
- **Properties**: This field contains several properties that can be found under the [](https://docs.charthop.com/carrot-reference/pkTE-comp-band)[Money](docId:_kS5D2xbfoR9d8WfRIVnY) datatype reference.


[title] Last Raise Amount
[path] Carrot reference/Fields/Compensation/Cash/

### Description

Returns the amount of the most recent increase to total compensation.

- **Code name**: `raiseAmount`
- **Sensitivity**: Cash Compensation
- **Data type**: [Money](docId:_kS5D2xbfoR9d8WfRIVnY)&#x20;
- **Data category**: Cash Compensation
- **Entity type:** Job
- **Read only:** Yes
- **Properties**: This field contains several properties that can be found under the [](https://docs.charthop.com/carrot-reference/pkTE-comp-band)[Money](docId:_kS5D2xbfoR9d8WfRIVnY) datatype reference.


[title] Total Annual Comp
[path] Carrot reference/Fields/Compensation/Cash/

### Description

Returns total annual compensation.

- **Code name**: `totalComp`
- **Sensitivity**: Cash Compensation
- **Data type**: [Money](docId:_kS5D2xbfoR9d8WfRIVnY)&#x20;
- **Data category**: Cash Compensation
- **Entity type:** Job
- **Read only:** Yes
- **Properties**: This field contains several properties that can be found under the [](https://docs.charthop.com/carrot-reference/pkTE-comp-band)[Money](docId:_kS5D2xbfoR9d8WfRIVnY) datatype reference.


[title] Total Cash Comp (Local Currency)
[path] Carrot reference/Fields/Compensation/Cash/

### Description

Returns the total annual cash compensation for an Org member in the local currency. Total annual cash compensation is the sum of base and variable compensation.

- **Code name**: `cashCompLocal`
- **Sensitivity**: Cash Compensation
- **Data type**: [Money](docId:_kS5D2xbfoR9d8WfRIVnY)&#x20;
- **Data category**: Cash Compensation
- **Entity type:** Job
- **Read only:** Yes
- **Properties**: This field contains several properties that can be found under the [](https://docs.charthop.com/carrot-reference/pkTE-comp-band)[Money](docId:_kS5D2xbfoR9d8WfRIVnY) datatype reference.

[title] Last Base Raise Amount
[path] Carrot reference/Fields/Compensation/baseComp/

:::hint{type="danger"}
This field will soon be deprecated and replaced with the [Base - last raise amount](https://docs.charthop.com/base-last-raise-amount) field.
:::

### Description

Returns an Org member's last base compensation raise amount.

- **Code name**: `baseRaiseAmount`
- **Sensitivity**: Cash Compensation
- **Data type**: [Money](docId:_kS5D2xbfoR9d8WfRIVnY)&#x20;
- **Data category**: Cash Compensation
- **Entity type:** Job
- **Read only:** Yes


[title] Vest Shares - Upcoming Year
[path] Carrot reference/Fields/Compensation/Equity/

### Description

Returns the number of shares the an Org member is vesting over the upcoming year.

- **Code name**: `nextYearVestShares`
- **Sensitivity**: Equity Compensation
- **Data type**: [Number](docId\:ucI5tCTfVBhonEJ6ZQijg)&#x20;
- **Data category**: Equity Compensation
- **Entity type:** Job
- **Read only:** Yes
- **Properties**: This field contains several properties that can be found under the [Number](docId\:ucI5tCTfVBhonEJ6ZQijg) datatype reference.


[title] Strike Price
[path] Carrot reference/Fields/Compensation/Equity/

### Description

Returns the strike price.

- **Code name**: `strikePrice`
- **Sensitivity**: Equity Compensation
- **Data type**: [Number](docId\:ucI5tCTfVBhonEJ6ZQijg)&#x20;
- **Data category**: Equity Compensation
- **Entity type:** Job
- **Read only:** Yes
- **Properties**: This field contains several properties that can be found under the [Number](docId\:ucI5tCTfVBhonEJ6ZQijg) datatype reference.


[title] Comp Band Equity - Target (money)
[path] Carrot reference/Fields/Compensation/Bands/

### Description

The target equity amount, specified as a monetary value.

- **Field code**: `compBand.equityTargetValue`
- **Sensitivity**: Highly Sensitive
- **Data type**: [Money](docId:_kS5D2xbfoR9d8WfRIVnY) [](https://docs.charthop.com/carrot-reference/pkTE-comp-band)
- **Data category**: Compensation
- **Entity type:** Job
- **Read only:** No
- **Properties**: This field contains several properties that can be found under the [](https://docs.charthop.com/carrot-reference/pkTE-comp-band)[Money](docId:_kS5D2xbfoR9d8WfRIVnY) datatype reference.


[title] Comp Band Equity - Target (shares)
[path] Carrot reference/Fields/Compensation/Bands/

### Description

The target equity amount, specified in number of shares.

- **Field code**: `compBand.equityTargetShares`
- **Sensitivity**: Highly Sensitive
- **Data type**: Decimal
- **Data category**: Compensation
- **Entity type:** Job
- **Read only:** No


[title] Comp Band Variable - Target (money)
[path] Carrot reference/Fields/Compensation/Bands/

### Description

The target variable pay amount, specified as a monetary value.

- **Field code**: `compBand.variableValue`
- **Sensitivity**: Highly Sensitive
- **Data type**: [Money](docId:_kS5D2xbfoR9d8WfRIVnY)&#x20;
- **Data category**: Compensation
- **Entity type:** Job
- **Read only:** No
- **Properties**: This field contains several properties that can be found under the [](https://docs.charthop.com/carrot-reference/pkTE-comp-band)[Money](docId:_kS5D2xbfoR9d8WfRIVnY) datatype reference.


[title] Last Raise
[path] Carrot reference/Fields/Compensation/Cash/

### Description

Returns the date of the most recent increase to cash compensation.

- **Code name**: `raiseDate`
- **Sensitivity**: Cash Compensation
- **Data type**: [Date](https://docs.charthop.com/xTAQ-date)
- **Data category**: Cash Compensation
- **Entity type:** Job
- **Read only:** Yes
- **Properties**: This field contains several properties associated with the Data data type.


[title] Fully Vested Value
[path] Carrot reference/Fields/Compensation/Equity/

### Description

Returns the total value of all shares issued, both vested and unvested.

- **Code name**: `totalSharesValue`
- **Sensitivity**: Equity Compensation
- **Data type**: [Money](docId:_kS5D2xbfoR9d8WfRIVnY)&#x20;
- **Data category**: Equity Compensation
- **Entity type:** Job
- **Read only:** Yes
- **Properties**: This field contains several properties that can be found under the [Number](docId\:ucI5tCTfVBhonEJ6ZQijg) datatype reference.


[title] Unvested Value
[path] Carrot reference/Fields/Compensation/Equity/

### Description

Returns the total value of all shares that have been issued, but not vested.

- **Code name**: `unvestedValue`
- **Sensitivity**: Equity Compensation
- **Data type**: [Money](docId:_kS5D2xbfoR9d8WfRIVnY)&#x20;
- **Data category**: Equity Compensation
- **Entity type:** Job
- **Read only:** Yes
- **Properties**: This field contains several properties that can be found under the [Number](docId\:ucI5tCTfVBhonEJ6ZQijg) datatype reference.


[title] Hourly Comp
[path] Carrot reference/Fields/Compensation/baseComp/

:::hint{type="danger"}
This field will soon be deprecated and replaced with the [Base - hourly](https://docs.charthop.com/base-hourly) field.
:::

### Description

Returns an Org member's hourly rate of compensation.

- **Code name**: `hourly`
- **Sensitivity**: Cash Compensation
- **Data type**: Money
- **Data category**: Cash Compensation
- **Entity type:** Job
- **Read only:** No


[title] Changed in Scenario
[path] Carrot reference/Fields/Job Changes/

### Description

Returns a list of changes in a given Scenario.

- **Code name**: `scenario`
- **Sensitivity**: Org Public
- **Data type**: [Enum](docId\:UnTq2eAL5RMIpNYczvfw1)&#x20;
- **Data category**: Changes
- **Entity type:** Change
- **Read only:** Yes


[title] Calendar Year Vested Shares
[path] Carrot reference/Fields/Compensation/Equity/

### Description

Returns the number of shares that an Org member is vesting in the current calendar year.

- **Code name**: `calYearVestShares`
- **Sensitivity**: Equity Compensation
- **Data type**: [Number](docId\:ucI5tCTfVBhonEJ6ZQijg)&#x20;
- **Data category**: Equity Compensation
- **Entity type:** Job
- **Read only:** Yes
- **Properties**: This field contains several properties that can be found under the [Number](docId\:ucI5tCTfVBhonEJ6ZQijg) datatype reference.


[title] Calendar Year Vested Value
[path] Carrot reference/Fields/Compensation/Equity/

### Description

Returns the value, based on current stock price, that the person is vesting in the current calendar year.

- **Code name**: `calYearVestValue`
- **Sensitivity**: Equity Compensation
- **Data type**: [Money](docId:_kS5D2xbfoR9d8WfRIVnY)&#x20;
- **Data category**: Equity Compensation
- **Entity type:** Job
- **Read only:** Yes
- **Properties**: This field contains several properties that can be found under the [Money](docId:_kS5D2xbfoR9d8WfRIVnY) datatype reference.


[title] Planned Grant (Value)
[path] Carrot reference/Fields/Compensation/Equity/

### Description

Returns the value of planned grants.

- **Code name**: `grantValue`
- **Sensitivity**: Equity Compensation
- **Data type**: [Money](docId:_kS5D2xbfoR9d8WfRIVnY)&#x20;
- **Data category**: Equity Compensation
- **Entity type:** Job
- **Read only:** No
- **Properties**: This field contains several properties that can be found under the [Money](docId:_kS5D2xbfoR9d8WfRIVnY) datatype reference.


[title] Vested Shares
[path] Carrot reference/Fields/Compensation/Equity/

### Description

Returns the total number of shares issued that have vested.

- **Code name**: `vestedShares`
- **Sensitivity**: Equity Compensation
- **Data type**: [Number](docId\:ucI5tCTfVBhonEJ6ZQijg)&#x20;
- **Data category**: Equity Compensation
- **Entity type:** Job
- **Read only:** Yes
- **Properties**: This field contains several properties that can be found under the [Number](docId\:ucI5tCTfVBhonEJ6ZQijg) datatype reference.


[title] Vested Value
[path] Carrot reference/Fields/Compensation/Equity/

### Description

Returns the total value, based on current stock price, that has vested from issued equity grants.

- **Code name**: `vestedValue`
- **Sensitivity**: Equity Compensation
- **Data type**: [Money](docId:_kS5D2xbfoR9d8WfRIVnY)&#x20;
- **Data category**: Equity Compensation
- **Entity type:** Job
- **Read only:** Yes
- **Properties**: This field contains several properties that can be found under the [Number](docId\:ucI5tCTfVBhonEJ6ZQijg) datatype reference.


[title] Change Reason
[path] Carrot reference/Fields/Job Changes/

Returns the reason for a departure. `reason` can be `Attendance`, `Business Direction`, `Career Opportunity`, `Compensation`, `Culture`, `Death`, `Education`, `End of Contract`, `Lack of Advancement`, `Lack of Recognition`, `Lack of Work`, `Layoff`, `Manager`, `Misconduct`, `Moving`, `Mutual Agreement`, `No-Show`, `Other Job`, `Performance`, `Personal/Family`, `Poached`, `Reduction in Force`, `Retirement`, `Seasonal`, `Theft`, `Transferred`, `Work Conditions`, or `Work-Life Balance`.

- **Code name**: `reason`
- **Sensitivity**: Manager-only
- **Data type**: [Enum](docId\:UnTq2eAL5RMIpNYczvfw1)&#x20;
- **Data category**: Changes
- **Entity type:** Change
- **Read only:** No


[title] Update Type
[path] Carrot reference/Fields/Job Changes/

### Description

Returns the update type.

- **Code name**: `update`
- **Sensitivity**: Org Public
- **Data type**: [String](docId\:Ujw2AQAktel5uukLuP73S)&#x20;
- **Data category**: Changes
- **Entity type:** Change
- **Read only:** Yes


[title] Can this user edit this job?
[path] Carrot reference/Fields/Permissions/

### Description

Returns a boolean (yes/no) value indicating whether an Org member has permission to edit jobs.

- **Code name**: `canEditJob`
- **Sensitivity**: Org Public&#x20;
- **Data type**: [Boolean](docId\:kdvwA4oPcqWedHpYCTH4L)&#x20;
- **Data category**: Permissions
- **Entity type:** Job
- **Read only:** Yes


[title] Base Comp (Primary Currency)
[path] Carrot reference/Fields/Compensation/baseComp/

:::hint{type="danger"}
This field will soon be deprecated and replaced with the [Base - yearly (Org Currency](https://docs.charthop.com/base-yearly-org-currency)) field.
:::

### Description

Returns the value of `base` in the Org's primary currency.

- **Code name**: `basePrimary`
- **Sensitivity**: Cash Compensation
- **Data type**: [Money](docId:_kS5D2xbfoR9d8WfRIVnY)&#x20;
- **Data category**: Cash Compensation
- **Entity type:** Job
- **Read only:** Yes


[title] Current Change
[path] Carrot reference/Fields/Job Changes/



- **Code name**: `change`
- **Sensitivity**: Org Public
- **Data type**: Object
- **Data category**: Changes
- **Entity type**: None
- **Read only:** Yes


[title] Last Base Raise %
[path] Carrot reference/Fields/Compensation/baseComp/

:::hint{type="danger"}
This field will soon be deprecated and replaced with the [Base - last raise %](https://docs.charthop.com/base-last-raise-percent)  field.
:::

### Description

Returns an Org member's last base compensation raise percent.

- **Code name**: `baseRaisePercent`
- **Sensitivity**: Cash Compensation
- **Data type**: [Percent](docId\:FbN7bFaHlFPV4f1C53DxA)&#x20;
- **Data category**: Cash Compensation
- **Entity type:** Job
- **Read only:** Yes


[title] Planned Grant (Shares)
[path] Carrot reference/Fields/Compensation/Equity/

### Description

Returns the number of planned grant shares.

- **Code name**: `grantShares`
- **Sensitivity**: Equity Compensation
- **Data type**: [Number](docId\:ucI5tCTfVBhonEJ6ZQijg)&#x20;
- **Data category**: Equity Compensation
- **Entity type:** Job
- **Read only:** No
- **Properties**: This field contains several properties that can be found under the [Number](docId\:ucI5tCTfVBhonEJ6ZQijg) datatype reference.


[title] Base (org currency)
[path] Carrot reference/Fields/Compensation/baseComp/

### Description

The job's base pay, in the org's default currency.

- **Code name**: `baseComp.asOrgCurency`
- **Sensitivity**: Cash Compensation
- **Data type**: *PayInterval*
- **Data category**: Cash Compensation
- **Entity type:** Job
- **Read only:** Yes
- **Properties:&#x20;**&#x54;his field inherits the properties of the *PayInterval* data type.

### Usage examples

| **Values**    |
| ------------- |
| $40/hour      |
| $120,000/year |

[title] Total Annual Comp (Local Currency)
[path] Carrot reference/Fields/Compensation/Cash/

### Description

Returns the total annual compensation in the local currency.

- **Code name**: `totalCompLocal`
- **Sensitivity**: Cash Compensation
- **Data type**: [Money](docId:_kS5D2xbfoR9d8WfRIVnY)&#x20;
- **Data category**: Cash Compensation
- **Entity type:** Job
- **Read only:** Yes
- **Properties**: This field contains several properties that can be found under the [](https://docs.charthop.com/carrot-reference/pkTE-comp-band)[Money](docId:_kS5D2xbfoR9d8WfRIVnY) datatype reference.


[title] Last Comp Change %
[path] Carrot reference/Fields/Compensation/Cash/

### Description

Returns the last change in compensation as a `Percent`.

- **Code name**: `compChangePercent`
- **Sensitivity**: Cash Compensation
- **Data type**: [Percent](docId\:FbN7bFaHlFPV4f1C53DxA)&#x20;
- **Data category**: Cash Compensation
- **Entity type:** Job
- **Read only:** Yes
- **Properties**: This field contains several properties that can be found under the [](https://docs.charthop.com/carrot-reference/pkTE-comp-band)[Percent](docId\:FbN7bFaHlFPV4f1C53DxA) datatype reference.


[title] Last Raise %
[path] Carrot reference/Fields/Compensation/Cash/

### Description

Returns the percent of the most recent increase to total compensation.

- **Code name**: `raisePercent`
- **Sensitivity**: Cash Compensation
- **Data type**: [Percent](docId\:FbN7bFaHlFPV4f1C53DxA)&#x20;
- **Data category**: Cash Compensation
- **Entity type:** Job
- **Read only:** Yes
- **Properties**: This field contains several properties that can be found under the [](https://docs.charthop.com/carrot-reference/pkTE-comp-band)[Percent](docId\:FbN7bFaHlFPV4f1C53DxA) datatype reference.


[title] Fully Vested Date
[path] Carrot reference/Fields/Compensation/Equity/

### Description

Returns the date on which an Org member's equity grants will be fully vested.

- **Code name**: `vestedDate`
- **Sensitivity**: Equity Compensation
- **Data type**: [Number](docId\:ucI5tCTfVBhonEJ6ZQijg)&#x20;
- **Data category**: Equity Compensation
- **Entity type:** Job
- **Read only:** Yes
- **Properties**: This field contains several properties that can be found under the [Number](docId\:ucI5tCTfVBhonEJ6ZQijg) datatype reference.


[title] Comp
[path] Carrot reference/Fields/Compensation/Cash/

### Description

(Description coming soon.)

- **Code name**: `comp`
- **Sensitivity**: Cash Compensation
- **Data type:&#x20;**[Comp](docId\:H_73YLW2UsTscC_TjerlF)&#x20;
- **Data category**: Cash Compensation
- **Entity type:** Job
- **Read only:** No
- **Properties**: This field contains several properties that can be found under the [](https://docs.charthop.com/carrot-reference/pkTE-comp-band)[Comp](docId\:H_73YLW2UsTscC_TjerlF) datatype reference.


[title] Target Variable- percent
[path] Carrot reference/Fields/Compensation/Variable/

### Description

Returns the value of `variable` if that value is of type `Percent`.

- **Code name**: `variableTarget.percent`
- **Sensitivity**: Cash Compensation
- **Data type**: [Percent](https://docs.charthop.com/percent)
- **Data category**: Cash Compensation
- **Entity type:** Job
- **Read only:** Yes
- **Properties**: This field contains several properties associated with the Percent data type.

### Usage examples

| **Values** |
| ---------- |
| 10%        |


[title] Grants
[path] Carrot reference/Fields/Compensation/Equity/

### Description

(Description coming soon.)

- **Code name**: `grants`
- **Sensitivity**: Equity Compensation
- **Data type**: [StockGrant](docId:8QnJloyOOo5jNp4x2Pucn)&#x20;
- **Data category**: Equity Compensation
- **Entity type:** Job
- **Read only:** Yes
- **Properties**: This field contains several properties that can be found under the [StockGrant](docId:8QnJloyOOo5jNp4x2Pucn) datatype reference.


[title] Comp Band Base - Target Percentile
[path] Carrot reference/Fields/Compensation/Bands/

### Description

A guideline value for the band which may be different from the midpoint, specified as a percentile between baseMin and baseMax.

- **Field code**: `compBand.baseTargetPercentile`
- **Sensitivity**: Highly Sensitive
- **Data type**: [](https://docs.charthop.com/carrot-reference/pkTE-comp-band)[Percent](https://docs.charthop.com/carrot-reference/percent)
- **Data category**: Compensation
- **Entity type:** Job
- **Read only:** No
- **Properties**: This field contains several properties that can be found under the [Percent](https://docs.charthop.com/carrot-reference/percent)[](https://docs.charthop.com/carrot-reference/pkTE-comp-band) datatype reference.


[title] Unvested Shares
[path] Carrot reference/Fields/Compensation/Equity/

### Description

Returns the total number of shares that have been issued, but not vested.

- **Code name**: `unvestedShares`
- **Sensitivity**: Equity Compensation
- **Data type**: [Number](docId\:ucI5tCTfVBhonEJ6ZQijg)&#x20;
- **Data category**: Equity Compensation
- **Entity type:** Job
- **Read only:** Yes
- **Properties**: This field contains several properties that can be found under the [Number](docId\:ucI5tCTfVBhonEJ6ZQijg) datatype reference.


[title]  Planned Grant (Type)
[path] Carrot reference/Fields/Compensation/Equity/

### Description

Returns the planned grant type.

- **Code name**: `grantType`
- **Sensitivity**: Equity Compensation
- **Data type**: [Enum](docId\:UnTq2eAL5RMIpNYczvfw1)&#x20;
- **Data category**: Equity Compensation
- **Entity type:** Job
- **Read only:** No
- **Properties**: This field contains several properties that can be found under the [Enum](docId\:UnTq2eAL5RMIpNYczvfw1) datatype reference.


[title] Hourly Comp (Primary Currency)
[path] Carrot reference/Fields/Compensation/baseComp/

:::hint{type="danger"}
This field will soon be deprecated and replaced with the [Base - hourly (Org Currency](https://docs.charthop.com/base-hourly-org-currency)) field.
:::

### Description

Returns an Org member's hourly rate of compensation in the Org's primary currency.

- **Code name**: hourlyPrimary
- **Sensitivity**: Cash Compensation
- **Data type**: [Money](docId:_kS5D2xbfoR9d8WfRIVnY)&#x20;
- **Data category**: Cash Compensation
- **Entity type:** Job
- **Read only:** Yes


[title] Vest Value - Upcoming Year
[path] Carrot reference/Fields/Compensation/Equity/

### Description

Returns the value, based on current stock price, of the shares an Org member is vesting over the upcoming year.

- **Code name**: `nextYearVestValue`
- **Sensitivity**: Equity Compensation
- **Data type**: [Money](docId:_kS5D2xbfoR9d8WfRIVnY)&#x20;
- **Data category**: Equity Compensation
- **Entity type:** Job
- **Read only:** Yes
- **Properties**: This field contains several properties that can be found under the [Money](docId:_kS5D2xbfoR9d8WfRIVnY) datatype reference.

****


[title] Annual Base Money
[path] Carrot reference/Fields/Compensation/baseComp/

:::hint{type="danger"}
This field will soon be deprecated and replaced with the [Base - Annualized](https://docs.charthop.com/carrot-reference/https://docs.charthop.com/base-annualized) field.
:::

### Description

Returns annual base salary for full time employees, and returns the total yearly compensation for hourly workers.

- **Code name**: `annualBaseMoney`
- **Sensitivity**: Cash Compensation
- **Data type**: [Money](docId:_kS5D2xbfoR9d8WfRIVnY)&#x20;
- **Data category**: Cash Compensation
- **Entity type:** Job
- **Read only:** Yes
- **Properties:&#x20;**&#x54;his field inherits the properties of the [Money](docId:_kS5D2xbfoR9d8WfRIVnY) data type.


[title] Depart Regret
[path] Carrot reference/Fields/Job Changes/

### Description

Returns the state of `regret` of an Org member. `regret` can be `regret` or `nonregret`.

- **Code name**: `regret`
- **Sensitivity**: Manager-only
- **Data type**: [Enum](docId\:UnTq2eAL5RMIpNYczvfw1)&#x20;
- **Data category**: Changes
- **Entity type:** Change
- **Read only:** No


[title] Total Shares
[path] Carrot reference/Fields/Compensation/Equity/

### Description

Returns the total number of shares issued, both vested and unvested.

- **Code name**: `totalShares`
- **Sensitivity**: Equity Compensation
- **Data type**: [Number](docId\:ucI5tCTfVBhonEJ6ZQijg)&#x20;
- **Data category**: Equity Compensation
- **Entity type:** Job
- **Read only:** Yes
- **Properties**: This field contains several properties that can be found under the [Number](docId\:ucI5tCTfVBhonEJ6ZQijg) datatype reference.


[title] Last Grant
[path] Carrot reference/Fields/Compensation/Equity/

### Description

Returns a `StockGrant` structure for last grant issued to an Org member. Use the properties of the `StockGrant` datatype to pull relevant data such as `.value` or `.date`.

- **Code name**: `lastGrant`
- **Sensitivity**: Equity Compensation
- **Data type**: [StockGrant](docId:8QnJloyOOo5jNp4x2Pucn)&#x20;
- **Data category**: Equity Compensation
- **Entity type:** Job
- **Read only:** Yes
- **Properties**: This field contains several properties that can be found under the [StockGrant](docId:8QnJloyOOo5jNp4x2Pucn) datatype reference.


[title] Can this person approve this change?
[path] Carrot reference/Fields/Permissions/

### Description

Returns a boolean (yes/no) value indicating whether an Org member has permission to approve changes in Scenarios.

- **Code name**: `canApproveChange`
- **Sensitivity**: Org Public&#x20;
- **Data type**: [Boolean](docId\:kdvwA4oPcqWedHpYCTH4L)&#x20;
- **Data category**: Permissions
- **Entity type:** Change
- **Read only:** Yes


[title] Data Fields
[path] Carrot reference/Fields/Job Changes/



- **Code name:&#x20;**`data`
- **Sensitivity**: Org Public
- **Data type**: [String](docId\:Ujw2AQAktel5uukLuP73S)&#x20;
- **Data category**: Changes
- **Entity type:** Change
- **Read only:** Yes


[title] Base - annualized (org currency)
[path] Carrot reference/Fields/Compensation/baseComp/

### Description

The job's annualized base pay in the org's default currency. Hourly base pay is annualized by multiplying the hourly rate by the target hours per week and weeks per year.

- **Code name**: `baseComp.annualized.asOrgCurrency`
- **Sensitivity**: Cash Compensation
- **Data type**: [Money](docId:_kS5D2xbfoR9d8WfRIVnY)&#x20;
- **Data category**: Cash Compensation
- **Entity type:** Job
- **Read only:** Yes
- **Properties:&#x20;**&#x54;his field inherits the properties of the [Money](docId:_kS5D2xbfoR9d8WfRIVnY) data type.

### Usage examples

| **Values** |
| ---------- |
| $83,200    |
| $120,000   |

[title] Comp Band Equity - Target (percent of base)
[path] Carrot reference/Fields/Compensation/Bands/

### Description

The target equity amount, specified as a percentage of the job's actual base.

- **Field code**: `compBand.equityTargetPercentOfBase`
- **Sensitivity**: Highly Sensitive
- **Data type**: [](https://docs.charthop.com/carrot-reference/pkTE-comp-band)[Percent](https://docs.charthop.com/carrot-reference/percent)
- **Data category**: Compensation
- **Entity type:** Job
- **Read only:** No
- **Properties**: This field contains several properties that can be found under the [Percent](https://docs.charthop.com/carrot-reference/percent)[](https://docs.charthop.com/carrot-reference/pkTE-comp-band) datatype reference.


[title] Variable Comp (Primary Currency)
[path] Carrot reference/Fields/Compensation/Variable/



:::hint{type="danger"}
This field will soon be deprecated and replaced with the [Target Variable - annualized](https://docs.charthop.com/target-variable-annualized) field.
:::

### Description

Returns the value of `variable` in the primary currency of the Org.

- **Code name**: `variablePrimary`
- **Sensitivity**: Cash Compensation
- **Data type**: [Money](docId:_kS5D2xbfoR9d8WfRIVnY)&#x20;
- **Data category**: Cash Compensation
- **Entity type:** Job
- **Read only:** No
- **Properties**: This field contains several properties that can be found under the [Money](docId:_kS5D2xbfoR9d8WfRIVnY) datatype reference.


[title] Compa Ratio – band target
[path] Carrot reference/Fields/Compensation/Bands/

### Description

The job's base pay, divided by the target pay of its comp band. Expressed as a percentage.

- **Field code**: `compaRatioTarget`
- **Sensitivity**: Highly Sensitive
- **Data type**: [Percent](https://docs.charthop.com/percent)
- **Data category**: Compensation
- **Entity type:** Job
- **Read only:** Yes
- **Properties**: This field contains several properties that can be found under the [Percent](https://docs.charthop.com/percent) datatype reference.

### Usage examples

| **Values** |
| ---------- |
| 55%        |


[title] Target weeks per year
[path] Carrot reference/Fields/Compensation/baseComp/

### Description

For jobs compensated on an hourly interval, the target number of working weeks per year.

- **Code name**: `targetWeeksPerYear`
- **Sensitivity**: Cash Compensation
- **Data type**: [Number](docId\:ucI5tCTfVBhonEJ6ZQijg)&#x20;
- **Data category**: Cash Compensation
- **Entity type:** Job
- **Read only:** No
- **Properties:&#x20;**&#x54;his field inherits the properties of the [Number](docId\:ucI5tCTfVBhonEJ6ZQijg) data type.

### Usage examples

| **Values** |
| ---------- |
| 52         |


[title] Target Variable - annualized (org currency)
[path] Carrot reference/Fields/Compensation/Variable/

### Description

The job's annualized target variable pay in the org's default currency.

- **Code name**: `variableTarget.annualized.asOrgCurrency`
- **Sensitivity**: Cash Compensation
- **Data type**: [Money](docId:_kS5D2xbfoR9d8WfRIVnY)&#x20;
- **Data category**: Cash Compensation
- **Entity type:** Job
- **Read only:** Yes
- **Properties:&#x20;**&#x54;his field inherits the properties of the [Money](docId:_kS5D2xbfoR9d8WfRIVnY) data type.

### Usage examples

| **Values** |
| ---------- |
| $10,000    |


[title] Promotion
[path] Carrot reference/Fields/Job Changes/



- **Code name**: `promotion`
- **Sensitivity**: Org Public
- **Data type**: [Enum](docId\:UnTq2eAL5RMIpNYczvfw1)&#x20;
- **Data category**: Changes
- **Entity type:** Change
- **Read only:** No


[title] Dates
[path] Carrot reference/Fields/Structure/

Fields related to job employment start/end dates, anniversaries, and tenure.

### Fields

| **Field name**     | **Function**                                                                                                       | **Field code**     |
| ------------------ | ------------------------------------------------------------------------------------------------------------------ | ------------------ |
| Anniversary        | Returns an Org member's work anniversary.                                                                          | `anniversary`      |
| Create Date        | Returns the date the job was created.                                                                              | `createDate`       |
| End Date in Job    | The date that the Person left the job.                                                                             | `endDateJob`       |
| End Date at Org    | The date that the Person left the organization.                                                                    | `endDateOrg`       |
| Job Start Date     | Returns the Start Date of a Job.                                                                                   | `jobStartDate`     |
| Last Promotion     | Returns the date when the most recent promotion occurred.                                                          | `promotionDate`    |
| Start Date         | For filled jobs, the date the Person started at the organization, or for open jobs, the planned target start date. | `startDate`        |
| Start Date in Job  | The date that the Person started in the job.                                                                       | `startDateJob`     |
| Start Date at Org  | The date that the Person started at the organization.                                                              | `startDateOrg`     |
| Planned Start Date | For open roles, the intended target start date of the job. The field still remains once the job is hired.          | `startDatePlanned` |
| Tenure in Job      | The time in months that the Person has filled the Job.                                                             | `tenureJob`        |
| Tenure at Org      | The time in months that the Person has worked at the organization.                                                 | `tenureOrg`        |
| Last Title Change  | Returns the date of the most recent title change for an Org member.                                                | `titleDate`        |


[title] Compare current vs. previous pay with Historic Backfill
[path] Carrot reference/Fields/Recruiting/

When you backfill a role, ChartHop remembers who last held it. The **Historic Backfill** field on a job points at that previous person, so you can pull them and their pay in that role into a report or formula alongside whoever holds the role today.

This is useful for:

- **Pay-equity review**: see how a new hire's pay compares to the person they replaced.
- **Budget tracking and forecasting**: quantify the pay delta each time a role turns over.

## Historic Backfill vs. Backfill For

ChartHop has two related fields. They are not the same:

- **Backfill For**: shows, during the hiring workflow, who a currently open or departing job is a backfill for. Use this when you are managing the backfill itself.
- **Historic Backfill**: a reporting field that resolves the previous holder's details **as of their last day in the role**. Use this when you want to compare pay or other in-role attributes. This is the field you reference in formulas (`historicBackfill.baseComp`).

## Using it in a report

Add both of these as columns on a job or headcount report to see the comparison side by side:

| Column                      | Shows                                                          |
| --------------------------- | -------------------------------------------------------------- |
| `baseComp`                  | The current holder's base pay.                                 |
| `historicBackfill.baseComp` | The previous holder's base pay on their last day in this role. |

The difference between the two is your backfill pay delta.

## The pay fields you can compare

Everything you navigate off `historicBackfill` resolves as of the previous holder's last day in the role. The compensation fields include:

- `historicBackfill.baseComp` — base pay
- `historicBackfill.variableTarget` — variable/bonus/commission target
- `historicBackfill.totalComp` — total compensation
- `historicBackfill.cashCompLocal` — cash comp in local currency
- `historicBackfill.annualBaseMoney` — annualized base

:::hint{type="info"}
Non-pay details you navigate off `historicBackfill` — such as **title**, **department**, **band**, and **manager** — also reflect what was true while that person held the role, not their current values. For example, if the previous holder was later promoted or changed departments, these show the in-role values.
:::

## Who can see it

**Historic Backfill** is a high-sensitivity field. Pay you pull through it follows the same compensation permissions and sensitive-view rules as any other comp data in ChartHop. Viewers without pay access see it scrubbed or hidden, exactly as they would elsewhere. It does not expose anything a viewer could not already see.

## Current limitation

Historic Backfill resolves the previous holder's in-role pay as long as their record is **retained** in ChartHop (they departed but were not deleted). If the previous person was fully removed from your org, their in-role pay will not resolve. Support for fully-removed people is a possible future enhancement.

:::hint{type="info"}
[Modules:](https://www.charthop.com/pricing/) **HRIS | Headcount Planning**

[Roles](https://docs.charthop.com/user-roles-and-permissions): Owner | Org editor | Recruiting editor
:::


[title] Address
[path] Carrot reference/Fields/Personal/

Fields that reference the address information of ChartHop organization members.

### City

| **Field name**        | **Field** **code**       |
| --------------------- | ------------------------ |
| City - Home Address   | `address.city`           |
| City - Remote Address | `remoteWorkAddress.city` |
| City - Work Address   | `workAddress.city`       |

### Country

| **Field name**           | **Field code**              |
| ------------------------ | --------------------------- |
| Country - Home Address   | `address.country`           |
| Country - Remote Address | `remoteWorkAddress.country` |
| Country - Work Address   | `workAddress.country`       |

### Full address

|                       |                     |
| --------------------- | ------------------- |
| Full - Home Address   | `address`           |
| Full - Remote Address | `remoteWorkAddress` |
| Full - Work Address   | `workAddress`       |

### Latitude

| **Field** **name**        | **Field** **code**                                  |
| ------------------------- | --------------------------------------------------- |
| Latitude - Home Address   | `address.lat`<br />`address.lat`<br />`address.lat` |
| Latitude - Remote Address | `remoteWorkAddress.lat`                             |
| Latitude - Work Address   | `workAddress.lat`                                   |

### Longitude

| **Field** **name**         | **Field** **code**      |
| -------------------------- | ----------------------- |
| Longitude - Home Address   | `address.lng`           |
| Longitude - Remote Address | `remoteWorkAddress.lng` |
| Longitude - Work Address   | `workAddress.lng`       |

### State

| **Field** **name**     | **Field** **code**        |
| ---------------------- | ------------------------- |
| State - Home Address   | `address.state`           |
| State - Remote Address | `remoteWorkAddress.state` |
| State - Work Address   | `workAddress.state`       |

### Street

| **Field** **name**              | **Field** **code**          |
| ------------------------------- | --------------------------- |
| Street 1 - Home Address         | `address.street1`           |
| Street 1 - Remote Address       | `remoteWorkAddress.street1` |
| Street 1 - Work Address         | `workAddress.street1`       |
| Street 2 - Home Address         | `address.street2`           |
| Street 2 - Remote Address<br /> | `remoteWorkAddress.street2` |
| Street 2 - Work Address         | `workAddress.street2`       |
| Street 3 - Home Address         | `address.street3`           |
| Street 3 - Remote Address       | `remoteWorkAddress.street3` |
| Street 3 - Work Address         | `workAddress.street3`       |

### Zip/Postal

| **Field** **name**          | **Field** **code**         |
| --------------------------- | -------------------------- |
| Zip/Postal - Home Address   | `address.postal`           |
| Zip/Postal - Remote Address | `remoteWorkAddress.postal` |
| Zip/Postal - Work Address   | `workAddress.postal`       |


[title] Latitude - Remote Address
[path] Carrot reference/Fields/Personal/Address/



- **Code name**: `remoteWorkAddress.lat`
- **Sensitivity**: Org public
- **Data type**: [Address](https://docs.charthop.com/carrot-reference/cprK-address)
- **Data category**: Personal
- **Entity type:** Personal
- **Read only:** No
- **Properties**: This field inherits the properties of the [Address](https://docs.charthop.com/carrot-reference/cprK-address)[](https://docs.charthop.com/carrot-reference/xTAQ-date) data type.


[title] Birth Date
[path] Carrot reference/Fields/Personal/Member profile/

The person's date of birth or birthday.&#x20;

- **Code name**: `birthDate`
- **Sensitivity**: Manager shared
- **Data type**: [Date](https://docs.charthop.com/xTAQ-date)
- **Data category**: Personal
- **Entity type:** Person
- **Read only:** Yes
- **Properties**: None.

:::hint{type="info"}
When birth date fields are set to **Personal**, no other employees except those with access to sensitive data can see the year.
:::

### Example usage

| **Code** **example** | **Description**                                                                              |
| -------------------- | -------------------------------------------------------------------------------------------- |
| `08/12`              | Birth date omitting the year.                                                                |
| `08/12/2022`         | Birth date including the year. <br /><br />**Viewable by those with sensitive access only.** |


[title] Country - Work Address
[path] Carrot reference/Fields/Personal/Address/



- **Code name**:`workAddress.country`
- **Sensitivity**: Org public
- **Data type**: [Address](https://docs.charthop.com/carrot-reference/cprK-address)
- **Data category**: Personal
- **Entity type:** Personal
- **Read only:** No
- **Properties**: This field inherits the properties of the [Address](https://docs.charthop.com/carrot-reference/cprK-address) data type.

### Usage examples

| **Code**                   | **Description**                                             |
| -------------------------- | ----------------------------------------------------------- |
| `workAddress.country="US"` | Returns members who's work address is in the United states. |
| `workAddress.country="SG"` | Returns members who's work address is in Singapore.         |
| `workAddress.country="MX"` | Returns members who's work address is in the Mexico.        |


[title] Full - Home Address
[path] Carrot reference/Fields/Personal/Address/



- **Code name**: `address`
- **Sensitivity**: Personal (contact)
- **Data type**: [Address](https://docs.charthop.com/carrot-reference/cprK-address)
- **Data category**: Personal
- **Entity type:** Personal
- **Read only:** No
- **Properties**: This field inherits the properties of the [Address](https://docs.charthop.com/carrot-reference/cprK-address) data type.


[title] Zip/Postal - Work Address
[path] Carrot reference/Fields/Personal/Address/



- **Code name**:`workAddress.postal`
- **Sensitivity**: Org public
- **Data type**: [Address](https://docs.charthop.com/carrot-reference/cprK-address)
- **Data category**: Personal
- **Entity type:** Personal
- **Read only:** No
- **Properties**: This field inherits the properties of the [Address](https://docs.charthop.com/carrot-reference/cprK-address)[](https://docs.charthop.com/carrot-reference/xTAQ-date) data type.


[title] Member profile
[path] Carrot reference/Fields/Personal/

Fields related to an org member's profile including name, gender, and contact information.

### Member profile fields

| **Field name**        | **Description**                                                                                                                               | **Field code**                         |
| --------------------- | --------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------- |
| Active Days (Last 30) | Returns the number of days a user (including Org members) has been active in the last thirty days.                                            | `userActiveDays`<br />`userActiveDays` |
| Birth Date            | The person's date of birth or birthday.                                                                                                       | `birthDate`                            |
| Employee ID           |                                                                                                                                               | `contact.employee`                     |
| Ethnicity             | Self-reported ethnicity, categorized as per EEOC definitions.                                                                                 | `ethnicity`                            |
| First Name            |                                                                                                                                               | `name.first`                           |
| Gender                | Self-reported gender identification.                                                                                                          | `gender`                               |
| Generation            | The generation that the person falls into, based on their date of birth. (Date ranges and generations as defined by the Pew Research Center.) | `generation`                           |
| GitHub                |                                                                                                                                               | `contact.github`                       |
| GitLab                |                                                                                                                                               | `contact.gitlab`                       |
| Home Phone            |                                                                                                                                               | `contact.homePhone`                    |
| Home email            |                                                                                                                                               | `contact.homeEmail`                    |
| Last Name             |                                                                                                                                               | `name.last`                            |
| LinkedIn              |                                                                                                                                               | `contact.linkedin`                     |
| Middle Name           |                                                                                                                                               | `name.middle`                          |
| Mobile                |                                                                                                                                               | `contact.mobilePhone`                  |
| Preferred First Name  |                                                                                                                                               | `name.pref`                            |
| Preferred Last Name   |                                                                                                                                               | `name.preflast`                        |
| Preferred Name        |                                                                                                                                               | `name.preferred`                       |
| Twitter               |                                                                                                                                               | `contact.twitter`                      |
| Work email            |                                                                                                                                               | `contact.workEmail`                    |
| Work phone            |                                                                                                                                               | `contact.workPhone`                    |

[title] Active Days (Last 30)
[path] Carrot reference/Fields/Personal/Member profile/

Returns the number of days a user (including Org members) has been active in the last thirty days.

- **Code name**: `userActiveDays`
- **Sensitivity**: Manager shared
- **Data type**: [Number](docId\:ucI5tCTfVBhonEJ6ZQijg)&#x20;
- **Data category**: Personal
- **Entity type:** Person
- **Read only:** Yes
- **Properties**: This field inherits the properties of the [](https://docs.charthop.com/carrot-reference/cprK-address)[Number](docId\:ucI5tCTfVBhonEJ6ZQijg) data type.


[title] Last name
[path] Carrot reference/Fields/Personal/Member profile/



- **Code name**: `name.last`
- **Sensitivity**: Personal (contact)
- **Data type**: *Short text*
- **Data category**: Personal
- **Entity type:** Person
- **Read only:** No


[title] Paylocity ID
[path] Carrot reference/Fields/Personal/External apps/



- **Code name**: `contact.paylocity`
- **Sensitivity**: Personal (contact)
- **Data type**: *Short text*
- **Data category**: Personal
- **Entity type:** Person
- **Read only:** Yes


[title] Preferred Name
[path] Carrot reference/Fields/Personal/Member profile/



- **Code name**:`name.preferred`
- **Sensitivity**: Org public
- **Data type**: *Short text*
- **Data category**: Personal
- **Entity type:** Person
- **Read only:** No


[title] Country - Home Address
[path] Carrot reference/Fields/Personal/Address/



- **Code name**:`address.country`
- **Sensitivity**: Personal (contact)
- **Data type**: [Address](https://docs.charthop.com/carrot-reference/cprK-address)
- **Data category**: Personal
- **Entity type:** Personal
- **Read only:** No
- **Properties**: This field inherits the properties of the [Address](https://docs.charthop.com/carrot-reference/cprK-address) data type.

### Usage examples

| **Code**               | **Description**                                             |
| ---------------------- | ----------------------------------------------------------- |
| `address.country="US"` | Returns members who's home address is in the United states. |
| `address.country="SG"` | Returns members who's home address is in Singapore.         |
| `address.country="MX"` | Returns members who's home address is in the Mexico.        |


[title] Structure
[path] Carrot reference/Fields/

Contains a collection of fields relating to the overall structure of your ChartHop organization.

## Categories

| Category                                               | Description                                                                                                                           |
| ------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------- |
| [Dates](https://docs.charthop.com/dates)               | Fields related to job employment start/end dates, anniversaries, and tenure.                                                          |
| [Groups](https://docs.charthop.com/groups)             | Fields related to groups and departments.                                                                                             |
| [Headcount](https://docs.charthop.com/headcount)       | Fields related to headcount planning such as job and employee counts.                                                                 |
| [Management](https://docs.charthop.com/management)     | Fields related to ChartHop organization managerial structure like reporting hierarchies, manager counts, and direct/indirect reports. |
| [Organization](https://docs.charthop.com/organization) | Fields related to general ChartHop organization structure including placements and org member hierarchy.                              |


[title] Offer Accept Date
[path] Carrot reference/Fields/Recruiting/

### Description

The date that an offer was accepted.

- **Code name**: `offerAcceptDate`
- **Sensitivity**: Org public
- **Data type**: [ate](https://docs.charthop.com/carrot-reference/xTAQ-date)
- **Data category**: Structure
- **Entity type:** Job
- **Read only:** No
- **Properties**: This field inherits the properties of the [ate](https://docs.charthop.com/carrot-reference/xTAQ-date) data type


[title] anniversary
[path] Carrot reference/Fields/Structure/Dates/

### Anniversary

Returns an Org member's next work anniversary, counting from the current date and comparing to their [startDateOrg](docId\:X7LX-U_pJSnawTQ0V_I5C) .

For example, if someone started on January 15th, 2022, and the current date is February 10th, 2024, this field will return `2025-01-15` (January 15th, 2025 -- the next occurrence of the anniversary).

- **Label:&#x20;**&#x41;nniversary
- **Code name**: `anniversary`
- **Sensitivity**: Personal
- **Data type**: [Date](https://docs.charthop.com/carrot-reference/xTAQ-date)
- **Data category**: Structure
- **Entity type:** Job
- **Read only:** Yes

### See also

- [birthday](docId\:Ph81WeBcCjrJpZG8ytLnO) field
- [nextAnniversary()](docId\:j-5ERgB8pFiAi9Ykv1wqX) function


[title] External apps
[path] Carrot reference/Fields/Personal/

Fields that reference I.D.s connecting ChartHop organization members to various external apps.

### App fields

| **Field name** | **Field code**           |
| -------------- | ------------------------ |
| ADP ID         | `contact.adp`            |
| ALPHASTAFF ID  | `contact.alphastaff`     |
| Bamboo ID      | `contact.bamboo`         |
| Finch ID       | `contact.finch`          |
| Greenhouse ID  | `contact.greenhouse`     |
| Gusto ID       | `contact.gusto`          |
| Humaans ID     | `contact.humaans`        |
| Jobvite ID     | `contact.jobvite`        |
| Lever ID       | `contact.lever`          |
| Namely ID      | `contact.namely`         |
| Okta ID        | `contact.okta`           |
| Paylocity ID   | `contact.paylocity`      |
| Prism ID       | `contact.prism`          |
| Rippling ID    | `contact.rippling`       |
| SFactors ID    | `contact.successfactors` |
| Sapling ID     | `contact.sapling`        |
| Trinet ID      | `contact.trinet`         |
| Ultipro ID     | `contact.ultipro`        |
| Workday ID     | `contact.workday`        |
| Zenefits ID    | `contact.zenefits`       |


[title] City - Home Address
[path] Carrot reference/Fields/Personal/Address/



- **Code name**: `address.city`
- **Sensitivity**: Personal (contact)
- **Data type**: [Address](https://docs.charthop.com/carrot-reference/cprK-address)
- **Data category**: Personal
- **Entity type:** Personal
- **Read only:** No
- **Properties**: This field inherits the properties of the [Address](https://docs.charthop.com/carrot-reference/address) data type.


[title] Recruiting
[path] Carrot reference/Fields/Recruiting/

### Description

Returns the following status of an open job:

| **Status** | **Description**                                                             |
| ---------- | --------------------------------------------------------------------------- |
| Active     | The role is being recruited for.                                            |
| Passive    | Inbound candidates are being reviewed, but no active search is in progress, |
| Inactive   | The role is currently not being recruited.                                  |
| Offer      | An offer is out for the role but is not yet accepted.                       |
| Pending    | Someone is hired to start the role.                                         |

- **Code name**: `recruit`
- **Sensitivity**: Org Public
- **Data type**: *Single select*
- **Data category**: Recruiting
- **Entity type:** Job
- **Read only:** Yes


[title] Interviews (Active)
[path] Carrot reference/Fields/Recruiting/



- **Code name**: `applyInterview`
- **Sensitivity**: Org public
- **Data type**: [Number](docId\:ucI5tCTfVBhonEJ6ZQijg)
- **Data category**: Recruiting
- **Entity type:** Job
- **Read only:** Yes
- **Properties**: This field inherits the properties of the [Number](docId\:ucI5tCTfVBhonEJ6ZQijg) data type.


[title] Recruiting
[path] Carrot reference/Fields/

Contains fields related to recruiting metrics such as backfills, offers, recruiting statuses, and hiring dates.

### Fields

| Field name            | Description                                                                                                                                                                                                                                                                                                                                                                                      | Code name           |
| --------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------- |
| Active (Days)         |                                                                                                                                                                                                                                                                                                                                                                                                  | `daysActive`        |
| Annual Budget Cost    |                                                                                                                                                                                                                                                                                                                                                                                                  | `budgetCost`        |
| Backfill For          | Returns Org member for whom an open role is a backfill. Cleared when a person is assigned to the job.                                                                                                                                                                                                                                                                                            | `backfill`          |
| Backfill Job          | Returns whether a job should be backfilled at all. (Yes/No).                                                                                                                                                                                                                                                                                                                                     | `backfillJob`       |
| Candidates (Active)   |                                                                                                                                                                                                                                                                                                                                                                                                  | `applyActive`       |
| Historic Backfill     | Points to the person who previously held a backfilled role. Values navigated off this field (such as `historicBackfill.baseComp`) resolve as of that person's **last day in the role**, making it useful for pay-equity and budget comparisons. See [Compare current vs. previous pay with Historic Backfill](https://docs.charthop.com/compare-current-vs-previous-pay-with-historic-backfill). | `historicBackfill`  |
| Hiring Manager        |                                                                                                                                                                                                                                                                                                                                                                                                  | `hireMgr`           |
| Interviews (Active)   |                                                                                                                                                                                                                                                                                                                                                                                                  | `applyInterview`    |
| Lever Req ID          |                                                                                                                                                                                                                                                                                                                                                                                                  | `leverReqId`        |
| Offer Accept Date     |                                                                                                                                                                                                                                                                                                                                                                                                  | `offerAcceptDate`   |
| Offers (Active)       |                                                                                                                                                                                                                                                                                                                                                                                                  | `applyOffer`        |
| Offers (Total)        |                                                                                                                                                                                                                                                                                                                                                                                                  | `applyTotalOffer`   |
| Open (days)           | Returns the number of days that Job has been `open`, even if not actively recruiting.                                                                                                                                                                                                                                                                                                            | `daysOpen`          |
| Priority (Recruiting) | The relative priority of hiring an open job.                                                                                                                                                                                                                                                                                                                                                     | `recruitPriority`   |
| Recruit Active Date   |                                                                                                                                                                                                                                                                                                                                                                                                  | `recruitActiveDate` |
| Recruiter             | The person who is responsible for recruiting this role. Can be set to "External Recruiter" to mark external recruiters.                                                                                                                                                                                                                                                                          | `recruiter`         |
| Recruiting            | The status of an open job, where:<br />\* **Active** means the job is being recruited for<br />\* **Passive** means inbound candidates are being reviewed, but no active search is in progress<br />\* **Inactive** means the role is currently not being recruited<br />\* **Offer** means an offer is out but not yet accepted<br />\* **Pending** means someone is hired to start             | `recruit`           |
| Time to Fill (days)   | Measured as the time between starting active recruitment for a role (e.g., job posting published) and having an offer acceptance or:<br /><br />***Offer Accept Date*** - ***Recruit Active Date***                                                                                                                                                                                              | `fillDays`          |
| Recruit Active Date   | The date that active recruitment started.                                                                                                                                                                                                                                                                                                                                                        | `recruitActiveDate` |
| Offer Accept Date     | The date that an offer was accepted.                                                                                                                                                                                                                                                                                                                                                             | `offerAcceptDate`   |

[title] First name
[path] Carrot reference/Fields/Personal/Member profile/



- **Code name**: `name.first`
- **Sensitivity**: Org public
- **Data type**: *Short text*
- **Data category**: Personal
- **Entity type:** Person
- **Read only:** No


[title] Street 3 - Remote Address
[path] Carrot reference/Fields/Personal/Address/



- **Code name**:`workAddress.street3`
- **Sensitivity**: Org public
- **Data type**: [Address](https://docs.charthop.com/carrot-reference/cprK-address)
- **Data category**: Personal
- **Entity type:** Personal
- **Read only:** No
- **Properties**: This field inherits the properties of the [Address](https://docs.charthop.com/carrot-reference/cprK-address)[](https://docs.charthop.com/carrot-reference/xTAQ-date) data type.


[title] Gusto ID
[path] Carrot reference/Fields/Personal/External apps/



- **Code name**: `contact.gusto`
- **Sensitivity**: Personal (contact)
- **Data type**: *Short text*
- **Data category**: Personal
- **Entity type:** Person
- **Read only:** Yes


[title] Recruit Active Date
[path] Carrot reference/Fields/Recruiting/



- **Code name**: `recruitActiveDate`
- **Sensitivity**: Org public
- **Data type**: [ate](https://docs.charthop.com/carrot-reference/xTAQ-date)
- **Data category**: Structure
- **Entity type:** Job
- **Read only:** No
- **Properties**: This field inherits the properties of the [ate](https://docs.charthop.com/carrot-reference/xTAQ-date) data type


[title] Latitude - Home Address
[path] Carrot reference/Fields/Personal/Address/



- **Code name**: `address.lat`
- **Sensitivity**: Personal (contact)
- **Data type**: [Address](https://docs.charthop.com/carrot-reference/cprK-address)
- **Data category**: Personal
- **Entity type:** Personal
- **Read only:** No
- **Properties**: This field inherits the properties of the [Address](https://docs.charthop.com/carrot-reference/cprK-address)[](https://docs.charthop.com/carrot-reference/xTAQ-date) data type.


[title] State - Work Address
[path] Carrot reference/Fields/Personal/Address/



- **Code name**:`workAddress.state`
- **Sensitivity**: Org public
- **Data type**: [Address](https://docs.charthop.com/carrot-reference/cprK-address)
- **Data category**: Personal
- **Entity type:** Personal
- **Read only:** No
- **Properties**: This field inherits the properties of the [Address](https://docs.charthop.com/carrot-reference/cprK-address) data type.


[title] Latitude - Work Address
[path] Carrot reference/Fields/Personal/Address/



- **Code name**:`workAddress.lat`
- **Sensitivity**: Org public
- **Data type**: [Address](https://docs.charthop.com/carrot-reference/cprK-address)
- **Data category**: Personal
- **Entity type:** Personal
- **Read only:** No
- **Properties**: This field inherits the properties of the [Address](https://docs.charthop.com/carrot-reference/cprK-address) data type.


[title] Sensitivity
[path] Carrot reference/Fields/Permissions/



- **Code name**: `sensitivity`
- **Sensitivity**: Org Public&#x20;
- **Data type**: [Enum](docId\:UnTq2eAL5RMIpNYczvfw1)&#x20;
- **Data category**: Permissions
- **Entity type:** Job
- **Read only:** Yes


[title] Mobile
[path] Carrot reference/Fields/Personal/Member profile/



- **Code name**:`contact.mobilePhone`
- **Sensitivity**: Personal (contact)
- **Data type**: *Phone*
- **Data category**: Personal
- **Entity type:** Person
- **Read only:** No


[title] Recruiter
[path] Carrot reference/Fields/Recruiting/

### Description

The person who is responsible for recruiting this role. Can be set to "External Recruiter" to mark external recruiters.

- **Code name**: `recruiter`
- **Sensitivity**: Org Public
- **Data type**: [Person](docId\:BZrX1MTDjk8CgkAW7UjQJ) 
- **Data category**: Recruiting
- **Entity type:** Job
- **Read only:** Yes
- **Properties**: This field inherits the properties of the [Person](docId\:BZrX1MTDjk8CgkAW7UjQJ) data type.


[title] Country - Remote Address
[path] Carrot reference/Fields/Personal/Address/



- **Code name**: `remoteWorkAddress.country`
- **Sensitivity**: Org public
- **Data type**: [Address](https://docs.charthop.com/carrot-reference/cprK-address)
- **Data category**: Personal
- **Entity type:** Personal
- **Read only:** No
- **Properties**: This field inherits the properties of the [Address](https://docs.charthop.com/carrot-reference/cprK-address) data type.

### Usage examples

| **Code**                         | **Description**                                                    |
| -------------------------------- | ------------------------------------------------------------------ |
| `remoteWorkAddress.country="US"` | Returns members who's remote work address is in the United states. |
| `remoteWorkAddress.country="SG"` | Returns members who's remote work address is in Singapore.         |
| `remoteWorkAddress.country="MX"` | Returns members who's remote work address is in the Mexico.        |


[title] Ethnicity
[path] Carrot reference/Fields/Personal/Member profile/

### Description

Returns the self-reported ethnicity, categorized as per EEOC definitions for an employee.

- **Code name**: `ethnicity`
- **Sensitivity**: Personal
- **Data type**: [Enum](docId\:UnTq2eAL5RMIpNYczvfw1)&#x20;
- **Data category**: Demographic
- **Entity type:** Person
- **Read only:** No

### Example usage

| **Code** **example** | **Description**                                                                                                                                                                         |
| -------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `ethnicity='White'`  | Filter's criteria where an employee's ethnicity is White.                                                                                                                               |
| `ethnicity='Black'`  | Filter's criteria where an employee's ethnicity is Black.<br />Filter's criteria where an employee's ethnicity is White.<br />Filter's criteria where an employee's ethnicity is White. |
| `ethnicity:asian`    | Filter's criteria where an employee's ethnicity is Asian.                                                                                                                               |


[title] Full - Work Address
[path] Carrot reference/Fields/Personal/Address/



- **Code name**:`workAddress`
- **Sensitivity**: Org public
- **Data type**: [Address](https://docs.charthop.com/carrot-reference/cprK-address)
- **Data category**: Personal
- **Entity type:** Personal
- **Read only:** No
- **Properties**: This field inherits the properties of the [Address](https://docs.charthop.com/carrot-reference/cprK-address)[](https://docs.charthop.com/carrot-reference/xTAQ-date) data type.


[title] Generation
[path] Carrot reference/Fields/Personal/Member profile/

The generation that the person falls into, based on their date of birth. (Date ranges and generations as defined by the Pew Research Center.)&#x20;

- **Code name**: `generation`
- **Sensitivity**: Personal
- **Data type**: *Smart bucket*
- **Data category**: Personal
- **Entity type:** Person
- **Read only:** No


[title] Twitter
[path] Carrot reference/Fields/Personal/Member profile/



- **Code name**:`contact.twitter`
- **Sensitivity**: Personal (contact)
- **Data type**: *Short text*
- **Data category**: Personal
- **Entity type:** Person
- **Read only:** No


[title] Longitude - Home Address
[path] Carrot reference/Fields/Personal/Address/



- **Code name**:`address.lng`
- **Sensitivity**: Personal (contact)
- **Data type**: [Address](https://docs.charthop.com/carrot-reference/cprK-address)
- **Data category**: Personal
- **Entity type:** Personal
- **Read only:** No
- **Properties**: This field inherits the properties of the [Address](https://docs.charthop.com/carrot-reference/cprK-address)[](https://docs.charthop.com/carrot-reference/xTAQ-date) data type.


[title] Work email
[path] Carrot reference/Fields/Personal/Member profile/

### Description

Work email address.

- **Code name**:`contact.workEmail`
- **Sensitivity**: Org public
- **Data type**: *Email*
- **Data category**: Personal
- **Entity type:** Person
- **Read only:** No


[title] Rippling ID
[path] Carrot reference/Fields/Personal/External apps/



- **Code name**: `contact.rippling`
- **Sensitivity**: Personal (contact)
- **Data type**: *Short text*
- **Data category**: Personal
- **Entity type:** Person
- **Read only:** Yes


[title] Perferred Last Name
[path] Carrot reference/Fields/Personal/Member profile/



- **Code name**:`name.preflast`
- **Sensitivity**: Org public
- **Data type**: *Short text*
- **Data category**: Personal
- **Entity type:** Person
- **Read only:** No


[title] Street 1 - Home Address
[path] Carrot reference/Fields/Personal/Address/



- **Code name**: `address.street1`
- **Sensitivity**: Personal (contact)
- **Data type**: [Address](https://docs.charthop.com/carrot-reference/cprK-address)
- **Data category**: Personal
- **Entity type:** Personal
- **Read only:** No
- **Properties**: This field inherits the properties of the [Address](https://docs.charthop.com/carrot-reference/cprK-address)[](https://docs.charthop.com/carrot-reference/xTAQ-date) data type.


[title] Street 3 - Work Address
[path] Carrot reference/Fields/Personal/Address/



- **Code name**:`workAddress.street3`
- **Sensitivity**: Org public
- **Data type**: [Address](https://docs.charthop.com/carrot-reference/cprK-address)
- **Data category**: Personal
- **Entity type:** Personal
- **Read only:** No
- **Properties**: This field inherits the properties of the [Address](https://docs.charthop.com/carrot-reference/cprK-address)[](https://docs.charthop.com/carrot-reference/xTAQ-date) data type.


[title] Bamboo ID
[path] Carrot reference/Fields/Personal/External apps/



- **Code name**: `contact.bamboo`
- **Sensitivity**: Personal (contact)
- **Data type**: *Short text*
- **Data category**: Personal
- **Entity type:** Person
- **Read only:** Yes


[title] Offers (Total)
[path] Carrot reference/Fields/Recruiting/



- **Code name**: `applyTotalOffer`
- **Sensitivity**: Org public
- **Data type**: [Number](docId\:ucI5tCTfVBhonEJ6ZQijg)
- **Data category**: Recruiting
- **Entity type:** Job
- **Read only:** Yes
- **Properties**: This field inherits the properties of the [Number](docId\:ucI5tCTfVBhonEJ6ZQijg) data type.


[title] State - Home Address
[path] Carrot reference/Fields/Personal/Address/



- **Code name**: `address.state`
- **Sensitivity**: Personal (contact)
- **Data type**: [Address](https://docs.charthop.com/carrot-reference/cprK-address)
- **Data category**: Personal
- **Entity type:** Personal
- **Read only:** No
- **Properties**: This field inherits the properties of the [Address](https://docs.charthop.com/carrot-reference/cprK-address)[](https://docs.charthop.com/carrot-reference/xTAQ-date) data type.


[title] State - Remote Address
[path] Carrot reference/Fields/Personal/Address/



- **Code name**: `remoteWorkAddress.state`
- **Sensitivity**: Org public
- **Data type**: [Address](https://docs.charthop.com/carrot-reference/cprK-address)
- **Data category**: Personal
- **Entity type:** Personal
- **Read only:** No
- **Properties**: This field inherits the properties of the [Address](https://docs.charthop.com/carrot-reference/cprK-address)[](https://docs.charthop.com/carrot-reference/xTAQ-date) data type.


[title] Street 3 - Home Address
[path] Carrot reference/Fields/Personal/Address/



- **Code name**: `address.street3`
- **Sensitivity**: Personal (contact)
- **Data type**: [Address](https://docs.charthop.com/carrot-reference/cprK-address)
- **Data category**: Personal
- **Entity type:** Personal
- **Read only:** No
- **Properties**: This field inherits the properties of the [Address](https://docs.charthop.com/carrot-reference/cprK-address) data type.


[title] Annual Budget Cost
[path] Carrot reference/Fields/Recruiting/



- **Code name**: `budgetCost`
- **Sensitivity**: Limited (Cash compensation)
- **Data type**: [Money](docId:_kS5D2xbfoR9d8WfRIVnY)&#x20;
- **Data category**: Recruiting
- **Entity type:** Job
- **Read only:** No
- **Properties**: This field inherits the properties of the [Money](docId:_kS5D2xbfoR9d8WfRIVnY) data type.


[title] Zip/Postal - Remote Address
[path] Carrot reference/Fields/Personal/Address/



- **Code name**:`workAddress.postal`
- **Sensitivity**: Org public
- **Data type**: [Address](https://docs.charthop.com/carrot-reference/cprK-address)
- **Data category**: Personal
- **Entity type:** Personal
- **Read only:** No
- **Properties**: This field inherits the properties of the [Address](https://docs.charthop.com/carrot-reference/cprK-address) data type.


[title] Hiring Manager
[path] Carrot reference/Fields/Recruiting/



- **Code name**: `hireMgr`
- **Sensitivity**: Org public
- **Data type**: [Person](docId\:BZrX1MTDjk8CgkAW7UjQJ) 
- **Data category**: Recruiting
- **Entity type:** Job
- **Read only:** Yes
- **Properties**: This field inherits the properties of the [Person](docId\:BZrX1MTDjk8CgkAW7UjQJ) data type.


[title]  Data Access Sensitive
[path] Carrot reference/Fields/Permissions/



- **Code name**: `dataAccessSensitive`
- **Sensitivity**: Org Public&#x20;
- **Data type**: [String](docId\:Ujw2AQAktel5uukLuP73S)&#x20;
- **Data category**: Permissions
- **Entity type:** Job
- **Read only:** Yes


[title] Sapling ID
[path] Carrot reference/Fields/Personal/External apps/



- **Code name**: `contact.sapling`
- **Sensitivity**: Personal (contact)
- **Data type**: *Short text*
- **Data category**: Personal
- **Entity type:** Person
- **Read only:** Yes


[title] Personal
[path] Carrot reference/Fields/

Fields that reference the profile, address, and external ATS, payroll, and equity information for members in a ChartHop organization.

### Categories

| **Name**                                                   | **Description**                                                                                |
| ---------------------------------------------------------- | ---------------------------------------------------------------------------------------------- |
| [Address](https://docs.charthop.com/cprk-address)          | Fields that reference the address information of ChartHop organization members.                |
| [External apps](https://docs.charthop.com/external-apps)   | Fields that reference I.D.s connecting ChartHop organization members to various external apps. |
| [Member profile](https://docs.charthop.com/member-profile) | Fields related to an org member's profile including name, gender, and contact information.     |


[title] Ultipro ID
[path] Carrot reference/Fields/Personal/External apps/



- **Code name**: `contact.ultipro`
- **Sensitivity**: Personal (contact)
- **Data type**: *Short text*
- **Data category**: Personal
- **Entity type:** Person
- **Read only:** Yes


[title] City - Remote Address
[path] Carrot reference/Fields/Personal/Address/



- **Code name**: `remoteWorkAddress.city`
- **Sensitivity**: Org public
- **Data type**: [Address](https://docs.charthop.com/carrot-reference/cprK-address)
- **Data category**: Personal
- **Entity type:** Personal
- **Read only:** No
- **Properties**: This field inherits the properties of the [Address](https://docs.charthop.com/carrot-reference/cprK-address) data type.


[title] Home Phone
[path] Carrot reference/Fields/Personal/Member profile/

### Description

Personal home phone number.

- **Code name**: `contact.homePhone`
- **Sensitivity**: Personal (contact)
- **Data type**: *Phone*
- **Data category**: Personal
- **Entity type:** Person
- **Read only:** No

### Usage examples

| **Values**        | **Type**      |
| ----------------- | ------------- |
| 555-555-5555      | Local         |
| +44-555-555-5555  | International |


[title] Street 2 - Work Address
[path] Carrot reference/Fields/Personal/Address/



- **Code name**:`workAddress.street2`
- **Sensitivity**: Org public
- **Data type**: [Address](https://docs.charthop.com/carrot-reference/cprK-address)
- **Data category**: Personal
- **Entity type:** Personal
- **Read only:** No
- **Properties**: This field inherits the properties of the [Address](https://docs.charthop.com/carrot-reference/cprK-address)[](https://docs.charthop.com/carrot-reference/xTAQ-date) data type.


[title] Active (Days)
[path] Carrot reference/Fields/Recruiting/

### Description

Returns the number of days that a Job has been open and active for recruiting.

- **Code name**: `daysActive`
- **Sensitivity**: Org Public
- **Data type**: [Number](docId\:ucI5tCTfVBhonEJ6ZQijg)&#x20;
- **Data category**: Recruiting
- **Entity type:** Job
- **Read only:** Yes
- **Properties**: This field inherits the properties of the [Number](docId\:ucI5tCTfVBhonEJ6ZQijg) data type.




[title] ADP ID
[path] Carrot reference/Fields/Personal/External apps/



- **Code name**: `contact.adp`
- **Sensitivity**: Personal (contact)
- **Data type**: *Short text*
- **Data category**: Personal
- **Entity type:** Person
- **Read only:** Yes


[title] Greenhouse ID
[path] Carrot reference/Fields/Personal/External apps/



- **Code name**: `contact.greenhouse`
- **Sensitivity**: Personal (contact)
- **Data type**: *Short text*
- **Data category**: Personal
- **Entity type:** Person
- **Read only:** Yes


[title] Humaans ID
[path] Carrot reference/Fields/Personal/External apps/



- **Code name**: `contact.humaans`
- **Sensitivity**: Personal (contact)
- **Data type**: *Short text*
- **Data category**: Personal
- **Entity type:** Person
- **Read only:** Yes


[title] Lever ID
[path] Carrot reference/Fields/Personal/External apps/



- **Code name**: `contact.lever`
- **Sensitivity**: Personal (contact)
- **Data type**: *Short text*
- **Data category**: Personal
- **Entity type:** Person
- **Read only:** Yes


[title] Time to Fill (days)
[path] Carrot reference/Fields/Recruiting/

### Description

Measured as the time between starting active recruitment for a role (e.g., job posting published) and having an offer acceptance or: ***Offer Accept Date*** - ***Recruit Active Date***

- **Code name**: `fillDays`
- **Sensitivity**: Org Public
- **Data type**: *Smart Calculation*
- **Data category**: Recruiting
- **Entity type:** Job
- **Read only:** Yes


[title] Prism ID
[path] Carrot reference/Fields/Personal/External apps/



- **Code name**: `contact.prism`
- **Sensitivity**: Personal (contact)
- **Data type**: *Short text*
- **Data category**: Personal
- **Entity type:** Person
- **Read only:** Yes


[title] Workday ID
[path] Carrot reference/Fields/Personal/External apps/



- **Code name**: `contact.workday`
- **Sensitivity**: Personal (contact)
- **Data type**: *Short text*
- **Data category**: Personal
- **Entity type:** Person
- **Read only:** Yes


[title] Employee ID
[path] Carrot reference/Fields/Personal/Member profile/



- **Code name**: `contact.employee`
- **Sensitivity**: Personal (contact)
- **Data type**: *Short text*
- **Data category**: Personal
- **Entity type:** Person
- **Read only:** Yes


[title] Gender
[path] Carrot reference/Fields/Personal/Member profile/

Self-reported gender identification.

- **Code name**: `gender`
- **Sensitivity**: Org public
- **Data type**: *Single Select*
- **Data category**: Personal
- **Entity type:** Person
- **Read only:** No


[title] Home email
[path] Carrot reference/Fields/Personal/Member profile/

### Description

Personal email address.

- **Code name**: `contact.homeEmail`
- **Sensitivity**: Personal (contact)
- **Data type**: *Email*
- **Data category**: Personal
- **Entity type:** Person
- **Read only:** No


[title] Work phone
[path] Carrot reference/Fields/Personal/Member profile/

### Description

Work phone number.

- **Code name**:`contact.workPhone`
- **Sensitivity**: Org public
- **Data type**: *Phone*
- **Data category**: Personal
- **Entity type:** Person
- **Read only:** No

### Usage examples

| **Values**        | **Type**      |
| ----------------- | ------------- |
| 555-555-5555      | Local         |
| +44-555-555-5555  | International |


[title] Backfill Job
[path] Carrot reference/Fields/Recruiting/

### Description

Returns whether a job should be backfilled at all. (Yes/No).

- **Code name**: `backfillJob`
- **Sensitivity**: Org public
- **Data type**: [Person](docId\:BZrX1MTDjk8CgkAW7UjQJ)&#x20;
- **Data category**: Recruiting
- **Entity type:** Job
- **Read only:** No
- **Properties**: This field inherits the properties of the [Person](docId\:BZrX1MTDjk8CgkAW7UjQJ) data type.


[title] Candidates (Active)
[path] Carrot reference/Fields/Recruiting/



- **Code name**: `applyActive`
- **Sensitivity**: Org public
- **Data type**: [Number](docId\:ucI5tCTfVBhonEJ6ZQijg) 
- **Data category**: Recruiting
- **Entity type:** Job
- **Read only:** Yes
- **Properties**: This field inherits the properties of the [Number](docId\:ucI5tCTfVBhonEJ6ZQijg) data type.


[title] Lever Req ID
[path] Carrot reference/Fields/Recruiting/



- **Code name**: `leverReqId`
- **Sensitivity**: Org public
- **Data type**: *Short Text*
- **Data category**: Recruiting
- **Entity type:** Job
- **Read only:** Yes


[title] Offers (Active)
[path] Carrot reference/Fields/Recruiting/



- **Code name**: `applyOffer`
- **Sensitivity**: Org public
- **Data type**: [Number](docId\:ucI5tCTfVBhonEJ6ZQijg)
- **Data category**: Recruiting
- **Entity type:** Job
- **Read only:** Yes
- **Properties**: This field inherits the properties of the [Number](docId\:ucI5tCTfVBhonEJ6ZQijg) data type.


[title] Open (days)
[path] Carrot reference/Fields/Recruiting/

### Description

Returns the number of days that Job has been `open`, even if not actively recruiting.&#x20;

- **Code name**: `daysOpen`
- **Sensitivity**: Org Public
- **Data type**: [Number](docId\:ucI5tCTfVBhonEJ6ZQijg)&#x20;
- **Data category**: Recruiting
- **Entity type:** Job
- **Read only:** Yes
- **Properties**: This field inherits the properties of the [Number](docId\:ucI5tCTfVBhonEJ6ZQijg) data type.




[title] Recruit Active Date
[path] Carrot reference/Fields/Recruiting/

### Description

The date that active recruitment started.

- **Code name**: `recruitActiveDate`
- **Sensitivity**: Org public
- **Data type**: [ate](https://docs.charthop.com/carrot-reference/xTAQ-date)
- **Data category**: Structure
- **Entity type:** Job
- **Read only:** No
- **Properties**: This field inherits the properties of the [ate](https://docs.charthop.com/carrot-reference/xTAQ-date) data type


[title] Middle name
[path] Carrot reference/Fields/Personal/Member profile/



- **Code name**:`middle.name`
- **Sensitivity**: Org public
- **Data type**: *Short text*
- **Data category**: Personal
- **Entity type:** Person
- **Read only:** No


[title] Preferred First Name
[path] Carrot reference/Fields/Personal/Member profile/



- **Code name**:`name.pref`
- **Sensitivity**: Org public
- **Data type**: *Short text*
- **Data category**: Personal
- **Entity type:** Person
- **Read only:** No


[title] Priority (Recruiting)
[path] Carrot reference/Fields/Recruiting/

### Description

The relative priority of hiring an open job.

- **Code name**: `recruitPriority`
- **Sensitivity**: Org Public
- **Data type**: *Numeric Scale*
- **Data category**: Recruiting
- **Entity type:** Job
- **Read only:** Yes


[title] Backfill For
[path] Carrot reference/Fields/Recruiting/

### Description

Returns Org member for whom an open role is a backfill.

- **Code name**: `backfill`
- **Sensitivity**: Org public
- **Data type**: [Person](docId\:BZrX1MTDjk8CgkAW7UjQJ)
- **Data category**: Recruiting
- **Entity type:** Job
- **Read only:** Yes
- **Properties**: This field inherits the properties of the [Person](docId\:BZrX1MTDjk8CgkAW7UjQJ) data type.

:::hint{type="info"}
**Backfill For** is not the same as **Historic Backfill**. Backfill For is used during the hiring workflow to identify who a currently open or departing job is replacing, and is cleared once the role is filled. Historic Backfill is a reporting field that resolves the previous holder's details as of their last day in the role. See [Compare current vs. previous pay with Historic Backfill](https://docs.charthop.com/compare-current-vs-previous-pay-with-historic-backfill).
:::

[title] Longitude - Work Address
[path] Carrot reference/Fields/Personal/Address/



- **Code name**:`workAddress.lng`
- **Sensitivity**: Org public
- **Data type**: [Address](https://docs.charthop.com/carrot-reference/cprK-address)
- **Data category**: Personal
- **Entity type:** Personal
- **Read only:** No
- **Properties**: This field inherits the properties of the [Address](https://docs.charthop.com/carrot-reference/cprK-address)[](https://docs.charthop.com/carrot-reference/xTAQ-date) data type.


[title] GitHub
[path] Carrot reference/Fields/Personal/Member profile/



- **Code name**: `contact.github`
- **Sensitivity**: Personal (contact)
- **Data type**: *Short text*
- **Data category**: Personal
- **Entity type:** Person
- **Read only:** No


[title] Street 2 - Remote Address
[path] Carrot reference/Fields/Personal/Address/



- **Code name**: `remoteWorkAddress.street2`
- **Sensitivity**: Org public
- **Data type**: [Address](https://docs.charthop.com/carrot-reference/cprK-address)
- **Data category**: Personal
- **Entity type:** Personal
- **Read only:** No
- **Properties**: This field inherits the properties of the [Address](https://docs.charthop.com/carrot-reference/cprK-address)[](https://docs.charthop.com/carrot-reference/xTAQ-date) data type.


[title] Trinet ID
[path] Carrot reference/Fields/Personal/External apps/



- **Code name**: `contact.trinet`
- **Sensitivity**: Personal (contact)
- **Data type**: *Short text*
- **Data category**: Personal
- **Entity type:** Person
- **Read only:** Yes


[title] Okta ID
[path] Carrot reference/Fields/Personal/External apps/



- **Code name**: `contact.okta`
- **Sensitivity**: Personal (contact)
- **Data type**: *Short text*
- **Data category**: Personal
- **Entity type:** Person
- **Read only:** Yes


[title] Zip/Postal - Home Address
[path] Carrot reference/Fields/Personal/Address/



- **Code name**: `address.postal`
- **Sensitivity**: Personal (contact)
- **Data type**: [Address](https://docs.charthop.com/carrot-reference/cprK-address)
- **Data category**: Personal
- **Entity type:** Personal
- **Read only:** No
- **Properties**: This field inherits the properties of the [Address](https://docs.charthop.com/carrot-reference/cprK-address)[](https://docs.charthop.com/carrot-reference/xTAQ-date) data type.


[title] Offer Accept Date
[path] Carrot reference/Fields/Recruiting/



- **Code name**: `offerAcceptDate`
- **Sensitivity**: Org public
- **Data type**: [ate](https://docs.charthop.com/carrot-reference/xTAQ-date)
- **Data category**: Structure
- **Entity type:** Job
- **Read only:** No
- **Properties**: This field inherits the properties of the [ate](https://docs.charthop.com/carrot-reference/xTAQ-date) data type


[title] Zenefits ID
[path] Carrot reference/Fields/Personal/External apps/



- **Code name**: `contact.zenefits`
- **Sensitivity**: Personal (contact)
- **Data type**: *Short text*
- **Data category**: Personal
- **Entity type:** Person
- **Read only:** Yes


[title] Full - Remote Address
[path] Carrot reference/Fields/Personal/Address/



- **Code name**: `remoteWorkAddress`
- **Sensitivity**: Org public
- **Data type**: [Address](https://docs.charthop.com/carrot-reference/cprK-address)
- **Data category**: Personal
- **Entity type:** Personal
- **Read only:** No
- **Properties**: This field inherits the properties of the [Address](https://docs.charthop.com/carrot-reference/cprK-address)[](https://docs.charthop.com/carrot-reference/xTAQ-date) data type.


[title] Longitude - Remote Address
[path] Carrot reference/Fields/Personal/Address/



- **Code name**: `remoteWorkAddress.lng`
- **Sensitivity**: Org public
- **Data type**: [Address](https://docs.charthop.com/carrot-reference/cprK-address)
- **Data category**: Personal
- **Entity type:** Personal
- **Read only:** No
- **Properties**: This field inherits the properties of the [Address](https://docs.charthop.com/carrot-reference/cprK-address)[](https://docs.charthop.com/carrot-reference/xTAQ-date) data type.


[title] LinkedIn
[path] Carrot reference/Fields/Personal/Member profile/



- **Code name**: `contact.homePhone`
- **Sensitivity**: Personal (contact)
- **Data type**: *Short text*
- **Data category**: Personal
- **Entity type:** Person
- **Read only:** No


[title] SFactors ID
[path] Carrot reference/Fields/Personal/External apps/



- **Code name**: `contact.successfactors`
- **Sensitivity**: Personal (contact)
- **Data type**: *Short text*
- **Data category**: Personal
- **Entity type:** Person
- **Read only:** Yes


[title] Finch ID
[path] Carrot reference/Fields/Personal/External apps/



- **Code name**: `contact.finch`
- **Sensitivity**: Personal (contact)
- **Data type**: *Short text*
- **Data category**: Personal
- **Entity type:** Person
- **Read only:** Yes


[title] Street 1 - Work Address
[path] Carrot reference/Fields/Personal/Address/



- **Code name**:`workAddress.street1`
- **Sensitivity**: Org public
- **Data type**: [Address](https://docs.charthop.com/carrot-reference/cprK-address)
- **Data category**: Personal
- **Entity type:** Personal
- **Read only:** No
- **Properties**: This field inherits the properties of the [Address](https://docs.charthop.com/carrot-reference/cprK-address)[](https://docs.charthop.com/carrot-reference/xTAQ-date) data type.


[title] Jobvite ID
[path] Carrot reference/Fields/Personal/External apps/



- **Code name**: `contact.jobvite`
- **Sensitivity**: Personal (contact)
- **Data type**: *Short text*
- **Data category**: Personal
- **Entity type:** Person
- **Read only:** Yes


[title] Namely ID
[path] Carrot reference/Fields/Personal/External apps/



- **Code name**: `contact.namely`
- **Sensitivity**: Personal (contact)
- **Data type**: *Short text*
- **Data category**: Personal
- **Entity type:** Person
- **Read only:** Yes


[title] ALPHASTAFF ID
[path] Carrot reference/Fields/Personal/External apps/



- **Code name**: `contact.alphastaff`
- **Sensitivity**: Personal (contact)
- **Data type**: *Short text*
- **Data category**: Personal
- **Entity type:** Person
- **Read only:** Yes


[title] Street 1 - Remote Address
[path] Carrot reference/Fields/Personal/Address/



- **Code name**: `remoteWorkAddress.street1`
- **Sensitivity**: Org public
- **Data type**: [Address](https://docs.charthop.com/carrot-reference/cprK-address)
- **Data category**: Personal
- **Entity type:** Personal
- **Read only:** No
- **Properties**: This field inherits the properties of the [Address](https://docs.charthop.com/carrot-reference/cprK-address)[](https://docs.charthop.com/carrot-reference/xTAQ-date) data type.


[title] Street 2 - Home Address
[path] Carrot reference/Fields/Personal/Address/



- **Code name**: `address.street2`
- **Sensitivity**: Personal (contact)
- **Data type**: [Address](https://docs.charthop.com/carrot-reference/cprK-address)
- **Data category**: Personal
- **Entity type:** Personal
- **Read only:** No
- **Properties**: This field inherits the properties of the [Address](https://docs.charthop.com/carrot-reference/cprK-address)[](https://docs.charthop.com/carrot-reference/xTAQ-date) data type.


[title] City - Work Address
[path] Carrot reference/Fields/Personal/Address/



- **Code name**:`workAddress.city`
- **Sensitivity**: Org public
- **Data type**: [Address](https://docs.charthop.com/carrot-reference/cprK-address)
- **Data category**: Personal
- **Entity type:** Personal
- **Read only:** No
- **Properties**: This field inherits the properties of the [Address](https://docs.charthop.com/carrot-reference/cprK-address) data type.


[title] Data Types
[path] Carrot reference/Fields/

Carrot understands many rich data types, including standard types such as [Number](docId\:ucI5tCTfVBhonEJ6ZQijg) and [String](docId\:Ujw2AQAktel5uukLuP73S) that are common across systems, as well as a number of ChartHop-specific data types.

## Basic Data Types

These data types are basic building blocks of the system.

| **Type**                                   | **Description**                                             | **Example Syntax**           |
| ------------------------------------------ | ----------------------------------------------------------- | ---------------------------- |
| [Boolean](docId\:kdvwA4oPcqWedHpYCTH4L)    | A true or false value. (Also known as "Yes or No")          | `true`                       |
| [Currency](docId\:HYeq9EU9e7La_RvHQTFvG)   | A national currency, such as the dollar or euro.            |                              |
| [Date](docId\:xTAQdzvLBTAKjxRnpFwe9)       | A  date, independent of time.                               | `date('2025-01-01')`         |
| [Enum](docId\:UnTq2eAL5RMIpNYczvfw1)       | A multiple-choice value selected by a user.                 | `enum("Meets Expectations")` |
| [Image](docId\:CMMcm-Qq2nL58KZVV7xZt)      | An image stored on the ChartHop system                      |                              |
| [Money](docId:_kS5D2xbfoR9d8WfRIVnY)       | A monetary value, including currency and amount.            | `money(1000, 'USD')`         |
| [List](docId\:xWH_cUkHj9waqaEfb7H71)       | Represents a list of any other value                        | `[1, 2, 3]`                  |
| [Null](docId\:N9trVqonnBknqL9DrNBP6)       | An empty value that means "data not set"                    | `null`                       |
| [Number](docId\:ucI5tCTfVBhonEJ6ZQijg)     | A number, either decimal or integer.                        | `42.123`                     |
| [Percent](docId\:FbN7bFaHlFPV4f1C53DxA)    | A percentage value                                          | `42%`                        |
| [String](docId\:Ujw2AQAktel5uukLuP73S)     | A piece of text.                                            | `"Hello, world!"`            |
| [Timestamp](docId\:j1uFZtC3_yprDI3uCIn3u)  | A moment in time (both date and time, timezone-independent) |                              |

## ChartHop Data Types

These data types represent more complex structures that can be used inside other fields.

| **Type**                                      | **Description**                                                              |
| --------------------------------------------- | ---------------------------------------------------------------------------- |
| [Address](docId\:khI0D64Z7Evk0DsM_gJWf)       | A mailing address, including street address, city, and postal code.          |
| [Name](docId\:w1GOoRP7tqsQzCWiQ8hzs)          | The name of a person, including first, last, and preferred names.            |
| [PayInterval](docId\:yKNKN59I_Xjwtq9iO-i3-)   | A recurring pay rate, such as an hourly or yearly salary.                    |
| [VariableComp](docId\:ny_nabMaX4hU45W8SvLdt)  | Target variable compensation, such as an annual bonus or commission target.  |
|                                               |                                                                              |

## ChartHop Entity Types

These data types represent important objects within the ChartHop data model.

| **Entity Type**                            | **Description**                                                                                                                                                                                                     |
| ------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| [Comp Band](docId\:pkTEib-CrL7FMV5YfPsHv)  | A compensation band used to describe pay levels.                                                                                                                                                                    |
|                                            |                                                                                                                                                                                                                     |
| [File](docId\:lT2ej7nQsjhebKLl5XmAZ)       | A file that has been uploaded into the ChartHop system, such as a document.                                                                                                                                         |
| [Group](docId:7kUM4sl_wT2Y_lDfMO6qb)       | An organizational unit comprising Jobs and People, such as a Department, Location, or Team.                                                                                                                         |
| [Job](docId:09AD2ikREIzwa-J0dFOBM)         | A set of responsibilities represented as a box on the org chart.                                                                                                                                                    |
| [Person](docId\:BZrX1MTDjk8CgkAW7UjQJ)     | A person, such as an employee.                                                                                                                                                                                      |
| [StockGrant](docId:8QnJloyOOo5jNp4x2Pucn)  | An equity or stock option grant issued to a Person.                                                                                                                                                                 |
| [TimeOff](docId\:raHsIHytvR1NsKqtdfkJA)    | Time Off requested or taken by a Person, including paid and unpaid leave.                                                                                                                                           |
| [User](docId:6hG3wvt0l2N5eByFDU_TC)        | A user of the ChartHop system. This often represents the user-identity of a corresponding [Person](docId\:BZrX1MTDjk8CgkAW7UjQJ), but also might be an app or an external user who is not part of the organization. |


[title] Address
[path] Carrot reference/Fields/Data Types/

A *Carrot* datatype used by fields that store location data.&#x20;

:::hint{type="info"}
The `Address` datatype is not currently supported in Custom Fields. Supported uses for the `Address` datatype are currently limited to the inbuilt `address`, `workAddress`, and `remoteWorkAddress` fields. `address` and `homeAddress` are interchangeable.
:::

### Properties

The `Address` datatype supports the following properties:

| **Property**                  | **Definition**                                                                 |
| ----------------------------- | ------------------------------------------------------------------------------ |
| *workAddress.**street1***     | Returns value for ***line one*** of `workAddress`, ex. *233 S Wacker Dr.*      |
| *workAddress.**street2***     | Returns value for ***line two*** of `workAddress`, ex. *Unit 2805.*            |
| *workAddress.**street3***     | Returns value for ***line three*** of `workAddress`*.*                         |
| *workAddress.**city***        | Returns value for ***city*** of `workAddress`, ex. *Chicago.*                  |
| *workAddress.**state***       | Returns value for ***state*** of `workAddress`, ex. *Illinois.*                |
| *workAddress.**country***     | Returns value for ***country code*** of `workAddress`, ex. *US.*               |
| *workAddress.**countryName*** | Returns value for **country name** of `workAddress`, ex.*&#x20;United States.* |
| *workAddress.**postal***      | Returns value for ***postal code*** of `workAddress`, ex. *60606.*             |
| *workAddress.**lat***         | Returns value for ***latitude*** of `workAddress`, ex. *41.87901217911454.*    |
| *workAddress.**lng***         | Returns value for ***longitude*** of `workAddress`, ex. *-87.63587198599579.*  |

### Sample usage

`address.state if address.country:"US"` returns the state if the address is in the United States.


[title] StockGrant
[path] Carrot reference/Fields/Data Types/

A *Carrot* datatype used by fields that store equity grant values.&#x20;

:::hint{type="info"}
The `StockGrant` datatype is not supported by Custom Fields. Supported uses for the `StockGrants` datatype are currently limited to the default fields `grants`, `grantShares`, and `grantType`.
:::

### Properties

The `StockGrant` datatype supports the following properties:

| **Property**                   | **Definition**                                          |
| ------------------------------ | ------------------------------------------------------- |
| *StockGrant*.**id**            | Returns the grant ID.                                   |
| *StockGrant*.**stock**         | Returns the ticker symbol of this stock.                |
| *StockGrant*.**date**          | Returns the date of the grant.                          |
| *StockGrant*.**vestDate**      | Returns the vesting start date of the grant.            |
| *StockGrant*.**expireDate**    | Returns the expiration date of the grant.               |
| *StockGrant*.**shares**        | Returns the number of shares granted.                   |
| *StockGrant*.**price**         | Returns the per-share strike price.                     |
| *StockGrant*.**type**          | Returns the type of grant.                              |
| *StockGrant*.**vest**          | Returns the vesting schedule.                           |
| *StockGrant*.**originalPrice** | Returns the per share grant price at the time of issue. |
| *StockGrant*.**currentPrice**  | Returns the current per share grant price.              |
| *StockGrant*.**vestedShares**  | Returns the current number of shares vested.            |
| *StockGrant*.**vestEndDate**   | Returns the vesting end date.                           |
| *StockGrant*.**cancelDate**    | Returns the cancellation date.                          |
| *StockGrant*.**originalValue** | Returns the original value of the grants.               |
| *StockGrant*.**currentValue**  | Returns the current value of the grants.                |


[title] tenure
[path] Carrot reference/Fields/Structure/Dates/

### Tenure

The number of months that the Person has worked at the organization, from their most recent [startDate](docId:42mjd_qk-WtZOfHl89hjU) when they were hired.

- **Label:&#x20;**&#x54;enure
- **Field Code:&#x20;**`tenure`
- **Aliases:&#x20;**`tenureOrg`
- **Data Type:&#x20;**[Number](docId\:ucI5tCTfVBhonEJ6ZQijg)&#x20;
- **Entity Type:&#x20;**[Person](docId\:BZrX1MTDjk8CgkAW7UjQJ) &#x20;
- **Sensitivity:&#x20;**&#x4F;rg Public
- **Category:&#x20;**&#x53;tructure
- **Time Tracked:&#x20;**&#x59;es
- **Calculated:&#x20;**&#x59;es

### See Also

- [tenureJob](docId\:JZQspmgRRGyzP7SDggHRz)&#x20;
- [tenureLifetime](docId\:nXIlRF3Qcl3z99b7CVOmW)&#x20;


[title] FormAnswer
[path] Carrot reference/Fields/Data Types/

A `FormAnswer` represents a single question's answer extracted from a form submission. It is the return type of the `findAnswers*` family of CQL functions.

Unlike [FormResponse](docId\:lIHL9I6DR0EINbNNDG2ec), which represents an entire form submission with all its answers, a `FormAnswer` is focused on **one specific question** — making it easy to aggregate or analyze a single field across many submissions.

## Properties

| **Property**     | **Type**                                  | **Description**                                                                                                                                                  |
| ---------------- | ----------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `answerValue`    | @Any                                      | The value given for this question. The type depends on the question — for example, a numeric rating question returns a number, a text question returns a string. |
| `assessmentId`   | [String](docId\:Ujw2AQAktel5uukLuP73S)    | The ID of the assessment cycle this response was part of, or `null` if the submission was not associated with an assessment                                      |
| `formId`         | [String](docId\:Ujw2AQAktel5uukLuP73S)    | The ID of the form the answer came from                                                                                                                          |
| `formResponseId` | [String](docId\:Ujw2AQAktel5uukLuP73S)    | The ID of the parent [FormResponse](docId\:lIHL9I6DR0EINbNNDG2ec) this answer belongs to                                                                         |
| `questionId`     | [String](docId\:Ujw2AQAktel5uukLuP73S)    | The ID of the question this answer is for                                                                                                                        |
| `submitAt`       | [Timestamp](docId\:j1uFZtC3_yprDI3uCIn3u) | The timestamp the form was submitted                                                                                                                             |
| `submitPerson`   | [Person](docId\:BZrX1MTDjk8CgkAW7UjQJ)    | The person who submitted the form, or `null` if anonymous                                                                                                        |
| `target`         | [Person](docId\:BZrX1MTDjk8CgkAW7UjQJ)    | The person the form was about (the target), or `null` if the form had no target                                                                                  |

## Usage Notes

`FormAnswer` is designed for **aggregation**. The most common pattern is to chain it with `.mean{}`, `.count()`, or `.groupBy{}` to derive insights from a specific question across many responses.

The `answerValue` property holds the raw answer value. For numeric questions (ratings, scores), you can use `.mean{answerValue}` directly. For enum/label questions, use `.groupBy{answerValue}.count()` to see the distribution.

## Examples

`findAnswers('managerReviewRating', '-365d').mean{answerValue}`

Average manager review rating across the org over the past year.

`findAnswersByAssessment('managerReviewRating', 'Q3 2024 Performance Review').groupBy{target.department}.mean{answerValue}`

Average manager review rating per department within a specific assessment cycle.

`findAnswersByTarget('peerFeedbackImpactRating', person, '-180d').count()`

Number of peer feedback impact ratings submitted about the current person in the past 6 months.

## See Also

- [FormResponse](docId\:lIHL9I6DR0EINbNNDG2ec) — the full form submission object
- `findAnswers()` — retrieve answers for a question across the org
- `findAnswersByForm()` — scope answers to a specific form
- `findAnswersByAssessment()` — scope answers to a specific assessment cycle
- `findAnswersByTarget()` — scope answers about a specific person

[title] Managers
[path] Carrot reference/Fields/Structure/Management/

### Description

Returns a list of the Org's reporting hierarchy from lowest to highest, with the highest level being the CEO.

- **Code alias**: `managers` `managerIds`
- **Sensitivity**: Org Public&#x20;
- **Data type**: [List](docId\:xWH_cUkHj9waqaEfb7H71)&#x20;
- **Data category**: Structure
- **Entity type:** Job
- **Read only:** Yes

### Example usage

| **Code**                        | **Description**                                            |
| ------------------------------- | ---------------------------------------------------------- |
| `managers[0]`                   | Returns an Org member's immediate manager.                 |
| `managers[1]` or `grandManager` | Returns an Org member's grand manager (Manager's manager). |
| `managers.reversed[0]`          | Returns the CEO of the Org.                                |




[title] Group
[path] Carrot reference/Fields/Data Types/

A *Carrot* datatype used by fields that store group values.

:::hint{type="info"}
The `Group` datatype is not supported in Custom Fields/Forms. Supported uses for the `Group` datatype include Departments, Teams, Locations, and Bands.
:::

### Properties

The `Group` datatype supports the following properties:

| **Property**                 | **Definition**                                                                                    |
| ---------------------------- | ------------------------------------------------------------------------------------------------- |
| *someGroup*.**id**           | Returns the group ID. Applicable to all group types.                                              |
| *someGroup*.**name**         | Returns the group name. Applicable to all group types.                                            |
| *someGroup*.**code**         | Returns the group code, ex. "CS." Applicable to all group types.                                  |
| *someGroup*.**aliases**      | Returns the group alias. Applicable to all group types.                                           |
| *someGroup*.**address**      | Returns the group address. Only applicable to Locations.                                          |
| *someGroup*.**category**     | Returns the group category. Only applicable to Departments. Interchangeable with Group.func.      |
| *someGroup*.**func**         | Returns the group function. Only applicable to Departments. Interchangeable with Group.category.  |
| *someGroup*.**color**        | Returns the group color. Applicable to all group types.                                           |
| *someGroup*.**locationType** | Returns the location type. Only applicable to Locations.\\                                        |
| *someGroup*.**compMin**      | Returns the minimum base value. Only applicable to Bands.                                         |
| *someGroup*.**compMax**      | Returns the maximum base value. Only applicable to Bands.                                         |
| *someGroup*.**level**        | Returns the group level. Only applicable to Bands.                                                |

### Sample usage

`department:"customer service"` returns all records where `department`, a default field of type `Group`, has a value of `customer service`.


[title] startDateJob
[path] Carrot reference/Fields/Structure/Dates/

### Start Date in Job

The date that the Person started in their current Job, whether that was through a hire or an internal move/transfer.

- **Code name**: `startDateJob`
- **Sensitivity**: Org Public
- **Data type**: [Date](https://docs.charthop.com/carrot-reference/xTAQ-date)
- **Data category**: Structure
- **Entity type:** Job
- **Read only:** No
- **Properties**: This field inherits the properties of the [Date](https://docs.charthop.com/carrot-reference/xTAQ-date) data type.

### See also

- [startDateOrg](docId\:X7LX-U_pJSnawTQ0V_I5C)&#x20;
- [startDatePlanned](docId:-oN0DZTzEAWcLSvtXBUOF)&#x20;


[title] Time off
[path] Carrot reference/Fields/

Includes fields related to time off including sick days, jury duty, vacation, etc.

### Fields

| **Field name**                   | **Function**                                                                                                                                                        | **Field code**            |
| -------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------- |
| Days Off (All Types)             | The number of days that the person has taken, or been approved, in the current calendar year.                                                                       | `daysOff.all`             |
| Days Off (Bereavement)           | The number of days that the person has taken, or been approved, in the current calendar year -- bereavement only.                                                   | `daysOff.bereavement`     |
| Days Off (In Lieu)               | The number of days that the person has taken, or been approved, in the current calendar year -- time off in lieu.                                                   | `daysOff.toil`            |
| Days Off (Jury Duty)             | The number of days that the person has taken, or been approved, in the current calendar year -- jury duty days only.                                                | `daysOff.jury`            |
| Days Off (LT Disability)         | The number of days that the person has taken, or been approved, in the current calendar year -- long term disability.                                               | `daysOff.disabilityLong`  |
| Days Off (Medical)               | The number of days that the person has taken, or been approved, in the current calendar year -- medical only.                                                       | `daysOff.medical`         |
| Days Off (Military)              | The number of days that the person has taken, or been approved, in the current calendar year -- military only.                                                      | `daysOff.military`        |
| Days Off (Offsite)               | The number of days that the person has taken, or been approved, in the current calendar year -- offsite only.                                                       | `daysOff.offsite`         |
| Days Off (Parental)              | The number of days that the person has taken, or been approved, in the current calendar year -- maternity, paternity, or other parental leave.                      | `daysOff.parental`        |
| Days Off (PTO)                   | The number of days that the person has taken, or been approved, in the current calendar year -- paid time off only.                                                 | `daysOff.pto`             |
| Days Off (Religious)             | The number of days that the person has taken, or been approved, in the current calendar year -- religious only.                                                     | `daysOff.religious`       |
| Days Off (Sick)                  | The number of days that the person has taken, or been approved, in the current calendar year -- sick days only.                                                     | `daysOff.sick`            |
| Days Off (ST Disability)         | The number of days that the person has taken, or been approved, in the current calendar year -- short term disability.                                              | `daysOff.disabilityShort` |
| Days Off (Unknown)               | The number of days that the person has taken, or been approved, in the current calendar year -- unknown only.                                                       | `daysOff.unknown`         |
| Days Off (Unpaid)                | The number of days that the person has taken, or been approved, in the current calendar year -- unpaid time off.                                                    | `daysOff.unpaid`          |
| Days Off (Vacation)              | The number of days that the person has taken, or been approved, in the current calendar year -- vacation only.                                                      | `daysOff.vacation`        |
| Days Off (Voting)                | The number of days that the person has taken, or been approved, in the current calendar year -- voting only.                                                        | `daysOff.voting`          |
| Days Off Used (current year)     | Returns a variety of data points related to days off **taken or approved** in the current year. Use the properties of the `DaysOff` datatype to pull relevant data. | `daysOff`                 |
| Days Off Taken (current year)    | The number of days that the person has taken off so far in the current calendar year.                                                                               | `daysOffTaken.all`        |
| Days Off Upcoming (current year) | The number of days that the person has approved, but not yet taken, in the current calendar year.                                                                   | `daysOffUpcoming.all`     |
| Next Day Off                     | The soonest upcoming date that the person has approved to take off.                                                                                                 | `nextDayOff`              |
| Previous Day Off                 | The most recent date that the person has taken off.                                                                                                                 | `prevDayOff`              |
| Next Time Off                    | The summary of the person's soonest upcoming time off.                                                                                                              | `nextTimeOff`             |
| Previous Time Off                | The summary of the person's most recent time off.                                                                                                                   | `prevTimeOff`             |


[title] Headcount
[path] Carrot reference/Fields/Structure/

Fields related to headcount planning such as job and employee counts.

### Fields

| **Field name** | **Function**                                                                                                             | **Field code**      |
| -------------- | ------------------------------------------------------------------------------------------------------------------------ | ------------------- |
| Directs        | Returns the number of direct Jobs, both filled and open.                                                                 | `directJobCount`    |
| Direct Persons | Returns the number of direct reports, not including open Jobs.                                                           | `directPersonCount` |
| Employment     | Returns the employment type. employment can be `Full Time`, `Part Time`, `Temporary`, `Contract`, `Intern`, or `Ex-Pat`. | `employment`        |
| Head Count     | Returns the headcount.                                                                                                   | `headcount`         |
| Job Count      | Returns the jobcount.                                                                                                    | `jobcount`          |
| Open           | Returns the status of a Job. `open` can be either `open` or `filled`.                                                    | `open`              |


[title] Task
[path] Carrot reference/Fields/Data Types/

An entity type that represents a Task that has been assigned to a user to complete, such as a form submission.

### Properties

| **Property** | **Type**                                   | **Description**                                                                                          |
| ------------ | ------------------------------------------ | -------------------------------------------------------------------------------------------------------- |
| `user`       | [User](docId:6hG3wvt0l2N5eByFDU_TC)        | The user who was assigned the task                                                                       |
| `person`     | [Person](docId\:BZrX1MTDjk8CgkAW7UjQJ)     | The person who was assigned the task                                                                     |
| `status`     | [Enum](docId\:UnTq2eAL5RMIpNYczvfw1)       | Whether the task was completed or not. Allowed values:<br />* `Pending`
* `Done`
* `Expired`
* `Skipped` |
| `doneAt`     | [Timestamp](docId\:j1uFZtC3_yprDI3uCIn3u)  | The moment the task was completed, or `null` if never completed                                          |
| `createAt`   | [Timestamp](docId\:j1uFZtC3_yprDI3uCIn3u)  | The moment the task was created (first assigned)                                                         |
| `dueAt`      | [Timestamp](docId\:j1uFZtC3_yprDI3uCIn3u)  | The moment the task is due, or `null` if the task does not have a due date                               |




[title] birthday
[path] Carrot reference/Fields/Structure/Dates/

### Birthday

Returns an org member's next upcoming birthday, counting from the current date and comparing to their [Birth Date](docId\:Dxc5df3krjYjg01o0X6Gm).

This is functionally equivalent to calling `nextAnniversary(birthDate)`. Note that `birthDate` is the raw stored date of birth, while `birthday` is a **computed, read-only field** that always returns the *next* occurrence of that date going forward.

For example, if someone was born on January 15th, and today is February 10th, 2026, this field will return `2027-01-15` (their next upcoming birthday). If today *is* their birthday, the field returns today's date.

- **Label:** Birthday
- **Code name**: `birthday`
- **Sensitivity**: Org Public (note: the underlying [Birth Date](docId\:Dxc5df3krjYjg01o0X6Gm) field has a higher sensitivity level)
- **Data type**: [Date](https://docs.charthop.com/carrot-reference/xTAQ-date)
- **Data category**: Structure
- **Entity type:** Job
- **Read only:** Yes

### CQL Usage Examples

Find everyone whose birthday is today:

```javascript
birthday = today
```

Find everyone with an upcoming birthday in the next 30 days:

```javascript
birthday >= today and birthday <= '+30d'
```

### Common Use Cases

- Setting up birthday announcements via Slack actions
- Filtering for upcoming birthdays in Data Sheet views
- Adding birthday events to org calendars

### See also

- [Birth Date](docId\:Dxc5df3krjYjg01o0X6Gm) field
- [nextAnniversary()](docId\:j-5ERgB8pFiAi9Ykv1wqX) function
- [Birthday announcements](docId\:o39aUM1eQETiJNBw7nVPW)

[title] Sequence
[path] Carrot reference/Fields/Data Types/

An internal representation of a stream of objects that behaves like a [List](docId\:xWH_cUkHj9waqaEfb7H71).

The main difference between a Sequence and a List is that a Sequence performs more efficiently when operating on large sets of data. You can usually treat this like a List.

### Properties

| **Property** | **Type**                                  | **Description**                                 |
| ------------ | ----------------------------------------- | ----------------------------------------------- |
| `first`      | Object                                    | The first object in the sequence                |
| `last`       | Object                                    | The last object in the sequence                 |
| `length`     | [Number](docId\:ucI5tCTfVBhonEJ6ZQijg)    | The number of entries contained in the Sequence |
| `reversed`   | [Sequence](docId\:JG4itlQWafzLpArttFo67)  | The sequence, in reverse order                  |

### Sequences and Methods

Most commonly, a Sequence is used together with [Methods](docId\:e-xS-5QFSphnplU0ozZuU), especially:

- @filter
- @limit
- @sort or @sortDesc

For example:

`db.job.find{department:engineering}`

Returns a Sequence of Jobs in the Engineering department.

To return the first 5 jobs with more than $100k in Base Comp, sorted in alphabetical order by Title, you could use:

`db.job.find{department:engineering}.filter{baseComp > 100000}.sort{title}.limit(5}`


[title] Money
[path] Carrot reference/Fields/Data Types/

A datatype used to represent a monetary value.

### Properties

| **Property**    | **Type**                                  | **Description**                                                                                                          |
| --------------- | ----------------------------------------- | ------------------------------------------------------------------------------------------------------------------------ |
| `amount`        | [Number](docId\:ucI5tCTfVBhonEJ6ZQijg)    | The amount of money                                                                                                      |
| `currency`      | [Currency](docId\:HYeq9EU9e7La_RvHQTFvG)  | The currency of the money (e.g. USD or EUR)                                                                              |
| `asOrgCurrency` | [Money](docId:_kS5D2xbfoR9d8WfRIVnY)      | Converts the money to the org's default currency, (using the current exchange rate in effect as-of the evaluation date). |

### Type Conversions and Money Math

Money values can use any math operations, such as addition, subtraction, rounding and division.

- If two Money values of the same currency are used together in a formula, they will be added normally. (Example: EUR100 + EUR200 = EUR300)
- If two Money values of different currencies are used together in a formula, they will be converted to the org's default currency, using the exchange rate currently in effect as-of that date.
- If a Money value is used together with a non-Money numeric value, such as [Number](docId\:ucI5tCTfVBhonEJ6ZQijg) or [Percent](docId\:FbN7bFaHlFPV4f1C53DxA), then the non-Money value will be converted into Money of the the same currency as the Money. (Example: USD1000 + 1000 = USD2000)

### Representing Money

To represent a Money in an expression, use the [money()](docId:6YEQUaDJYq5HbQDhSS1zO) function. You can also use this function to convert between money currencies.

- For example: `money(1000, 'USD')` will resolve to USD $1000


[title] List
[path] Carrot reference/Fields/Data Types/

A List of a number of objects, in order.

This datatype is often used to represent concepts such as a list of [Group](docId:7kUM4sl_wT2Y_lDfMO6qb)s, a list of [StockGrant](docId:8QnJloyOOo5jNp4x2Pucn)s, etc.

### Properties

| **Property** | **Type**                                  | **Description**                                 |
| ------------ | ----------------------------------------- | ----------------------------------------------- |
| `first`      | Object                                    | The first object in the sequence                |
| `last`       | Object                                    | The last object in the sequence                 |
| `length`     | [Number](docId\:ucI5tCTfVBhonEJ6ZQijg)    | The number of entries contained in the Sequence |
| `reversed`   | [Sequence](docId\:JG4itlQWafzLpArttFo67)  | The sequence, in reverse order                  |

### Indexing by Position

You can return each item of the list using `list[index]` syntax, starting numbering with `0` to represent the first item of the list.

- For example, `myList[2]` will return the third element in the list.

### Representing Lists

To represent a List in an expression, you can use `[square brackets]` with commas to separate the elements.

- For example: `[1, 2, 3]` will represent a List containing the numbers 1, 2, and 3.
- `["Director", "VP"]` will represent a List containing the [String](docId\:Ujw2AQAktel5uukLuP73S)s "Director" and "VP"&#x20;

### List and Equality Comparisons

The [= (equals)](docId:50o8vwTa5Zp6SV8DQdwjl) operator will test for list membership when comparing a singular value to a list.

- For example, `["Director", "VP"] = "vp"` will return true, because "VP" (case-insensitive) is a member of the list.


[title] Management
[path] Carrot reference/Fields/Structure/

Fields related to ChartHop organization managerial structure like reporting hierarchies, manager counts, and direct/indirect reports.

### Fields

| **Field name**   | **Function**                                                                                                  | **Field code**               |
| ---------------- | ------------------------------------------------------------------------------------------------------------- | ---------------------------- |
| Indirect Manager | Returns an Org member's indirect manager.                                                                     | `indirect`                   |
| Managed Jobs     | Returns the number of open and filled Jobs either directly or indirectly managed by an Org member.            | `manageJobs`                 |
| Manager          | Returns the manager of a particular Org member.                                                               | `manager`                    |
| Managers         | Returns a list of the Org's reporting hierarchy from lowest to highest, with the highest level being the CEO. | `managers`<br />`managerIds` |
| Manager Count    | Returns the number of managers that a Job or Person has, from the Org head down.                              | `managerCount`               |
| Manager or IC    | Returns one of 2 values: "manager" or "IC based on whether the job is a manager or individual contributor.    | `managerOrIC`                |


[title] Name
[path] Carrot reference/Fields/Data Types/

A *Carrot* datatype used by fields that store employee names.&#x20;

:::hint{type="info"}
The `Name` datatype is not supported by Custom Fields. The `Name` datatype is currently limited to the default field `name`.
:::

### Properties

The `Name` datatype supports the following properties:

| **Property**             | **Definition**                                                            |
| ------------------------ | ------------------------------------------------------------------------- |
| *name*.**last**          | Returns last name, ex. "Morrison."                                        |
| *name*.**first**         | Returns first name, ex. "Jim."                                            |
| *name*.**pref**          | Returns preferred first name, ex. "Jimmy."                                |
| *name*.**prefLast**      | Returns preferred last name, ex "Morrison."                               |
| *name*.**middle**        | Returns middle name, ex. "Douglas."                                       |
| *name*.**full**          | Returns full name.                                                        |
| *name*.**preferred**     | Returns preferred full name.                                              |
| name.**preferredFirst**  | Returns preferred first name if it exists, otherwise returns first name.  |
| *name*.**lastPreferred** | Returns preferred full name, reversed, ex. "Morrison, Jimmy."             |
| *name*.**firstLast**     | Returns full name.                                                        |
| *name*.**lastFirst**     | Returns full name, reversed, ex. "Morrison, Jim."                         |

### Sample usage

`name.last` returns the last name of a record.


[title] Relative Dates
[path] Carrot reference/Fields/Data Types/

Many functions in Carrot (CQL) that accept dates, such as the [date()](docId\:grpUvYCy4WI6Wm7kUq4bv) function, will accept **Relative Dates,**  a way of expressing date math.

### Quick Reference

| Operation            | Example                      | Description                |
| -------------------- | ---------------------------- | -------------------------- |
| `+3d`                | `date("+3d")`                | 3 days from today          |
| `-1w`                | `date("-1w")`                | 1 week ago                 |
| `+6m`                | `date("+6m")`                | 6 months from today        |
| `monthStart`         | `date("monthStart")`         | First day of current month |
| `monthStart-1d`      | `date("monthStart-1d")`      | Last day of previous month |
| `fiscalYearStart+1q` | `date("fiscalYearStart+1q")` | Start of Q2 of fiscal year |

Relative Dates are expressed as a string of operations, like `+3d` (add three days), or `fiscalYearStart+2q-1q` (starting from the beginning of the fiscal year, add two quarters and subtract one day).

Operations are always expressed as `+` or `-` followed by a number, followed by one of the following:

- `d` for days
- `w` for weeks
- `m` for months (will preserve end-of-month if the starting point is also EOM)&#x20;
- `q` for quarters (will preserve end-of-month if the starting point is also EOM)
- `y` for years

For example, `+3w` means ("plus three weeks")

Relative Dates can start with a *starting point.* If omitted, the starting point will be the current date. For example, `+3m` means ("three months from the current date") but `monthStart+3m` means ("three months from the start of the month of the current date")

Valid starting points are:

- `today` - always returns today's date
- `fiscalYearStart`
- `fiscalQuarterStart`
- `yearStart`
- `quarterStart`
- `monthStart`
- `weekStart`
- `fiscalYearEnd`
- `fiscalQuarterEnd`
- `yearEnd`
- `quarterEnd`
- `monthEnd`
- `weekEnd`

### Examples

`date("+1m")` - one month from the current date

`date("-30d", "2025-01-31")` - returns `2025-01-01`

`date("+1m-1d")` - one month, minus one day, from the current date

`date("-1y+1d")` - subtract one year, but add one day, to the current date

`date("today+1m")` - one month from today (equivalent to `date("+1m", today)`)

`date("fiscalYearStart+2q")` - two quarters from the start of the fiscal year of the current date

`date("yearStart+2q")` - two quarters from the start of the calendar year of the current date

[title] Manager or IC
[path] Carrot reference/Fields/Structure/Management/

### Description

Returns one of 2 values: "manager" or "IC based on whether the job is a manager or individual contributor.

Based on the calculation of `is:manager` and `is:ic` which can also each be used independently.&#x20;

- **Code name**: `managerOrIC`
- **Field name**: Manager or IC
- **Sensitivity**: Org Public&#x20;
- **Data type**: [Enum](docId\:UnTq2eAL5RMIpNYczvfw1)
- **Data category**: Structure
- **Entity type:** Job
- **Read only:** Yes


[title] Organization
[path] Carrot reference/Fields/Structure/

Fields related to general ChartHop organization structure including placements and org member hierarchy.

### Fields

| **Field name**          | **Function**                                                                  | **Field code**   |
| ----------------------- | ----------------------------------------------------------------------------- | ---------------- |
| Org                     |                                                                               | `org`            |
| Placement               | Returns the value of placement, which can be either `Normal` or `Assistant`.  | `placement`      |
| Relationships           |                                                                               | `relationships`  |
| State                   | Returns the value of `open`.                                                  | `state`          |
| Reports Up To           | Returns the organization under a particular Org member.                       | `under`          |
| Reports Up To Including | Returns both the person being matched as well as the organization under them. | `underIncluding` |


[title] Days Off (Vacation)
[path] Carrot reference/Fields/Time off/

### Description

The number of days that the person has taken, or been approved, in the current calendar year -- vacation only.

- **Code name**: `daysOff.vacation`
- **Sensitivity**: Manager shared
- **Data type**: [DaysOff](docId:_CMGaoFHVoXumDGP6hZH5)&#x20;
- **Data category**: TimeOff
- **Entity type:** Person
- **Read only:** Yes


[title] Days Off (Unpaid)
[path] Carrot reference/Fields/Time off/

### Description

The number of days that the person has taken, or been approved, in the current calendar year -- unpaid time off.

- **Code name**: `daysOff.unpaid`
- **Sensitivity**: Manager shared
- **Data type**: [DaysOff](docId:_CMGaoFHVoXumDGP6hZH5)&#x20;
- **Data category**: TimeOff
- **Entity type:** Person
- **Read only:** Yes


[title] endDateOrg
[path] Carrot reference/Fields/Structure/Dates/

### End Date at Org

The date that the Person left the organization.

- **Label:** End Date at Org
- **Code name**: `endDateOrg`
- **Sensitivity**: Org Public
- **Data type**: [Date](https://docs.charthop.com/carrot-reference/xTAQ-date)
- **Data category**: Structure
- **Entity type:** Job
- **Read only:** No


[title] Head Count
[path] Carrot reference/Fields/Structure/Headcount/

### Description

Returns the headcount.&#x20;

- **Code name**: `headcount`
- **Sensitivity**: Org Public
- **Data type**: [Number](docId\:ucI5tCTfVBhonEJ6ZQijg)&#x20;
- **Data category**: Structure
- **Entity type:** Person
- **Read only:** Yes


[title] Manager Count
[path] Carrot reference/Fields/Structure/Management/

### Description

Returns the number of managers that a Job or Person has, from the Org head down.

- **Code name**: `managerCount`
- **Field name**: Manager Count
- **Sensitivity**: Org Public&#x20;
- **Data type**: [Number](docId\:ucI5tCTfVBhonEJ6ZQijg)&#x20;
- **Data category**: Structure
- **Entity type:** Job
- **Read only:** Yes


[title] nextTimeOff
[path] Carrot reference/Fields/Time off/

Returns the next time off for the person, or the time off currently being taken if the person is currently off.

- **Label**: Next Time Off
- **Sensitivity**: Manager Shared
- **Data type**: [TimeOff](docId\:raHsIHytvR1NsKqtdfkJA)&#x20;
- **Data category**: TimeOff
- **Entity type:** Person
- **Read only:** Yes


[title] Comp Band
[path] Carrot reference/Fields/Data Types/

A *Carrot* datatype that stores compensation band levels.&#x20;

:::hint{type="info"}
The `Comp Band` datatype is not currently supported in Custom fields.&#x20;
:::

## Properties

The `Comp Band` datatype supports the following properties:

### Job Level

| **Field Name**          | **Property**        | **Definition**                                     | **Examples**                          |
| ----------------------- | ------------------- | -------------------------------------------------- | ------------------------------------- |
| Comp Band  - Job Family | `compBand.tier`     | The top-level grouping of your compensation bands. | `Sales`, `Product`, `Engineering`     |
| Comp Band - Job Level   | `compBand.jobLevel` | The universal job level for the given band.        | `Entry Level`, `Associate`, `Manager` |

### Equity

| **Field Name**                                 | **Property**                         | **Definition**                                                                | **Examples** |
| ---------------------------------------------- | ------------------------------------ | ----------------------------------------------------------------------------- | ------------ |
| Comp Band Equity - Target (money)              | `compBand.equityTargetValue`         | The target equity amount, specified as a monetary value.                      | `$10,000`    |
| Comp Band Equity - Target (shares)             | `compBand.equityTargetShares`        | The target equity amount, specified in number of shares.                      | `45`         |
| Comp Band Equity - Target (percentage of base) | `compBand.equityTargetPercentOfBase` | The target equity amount, specified as a percentage of the job's actual base. | `5`          |

### Base

| **Field Name**                             | **Property**                       | **Definition**                                                                                                                                                                                      | **Examples**       |
| ------------------------------------------ | ---------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------ |
| Comp Band Base - Target                    | `compBand.baseTarget`              | A guideline value for the band which may be different from the midpoint.                                                                                                                            | `$100000`          |
| Comp Band Base - Target Percentile         | `compBand.baseTargetPercentile`    | A guideline value for the band which may be different from the midpoint, specified as a percentile between baseMin and baseMax.                                                                     | `$75000`           |
| Comp Band Base - Interval                  | `compBand.baseInterval`            | The pay interval that the compensation range is specified in.                                                                                                                                       | `Hourly`, `Salary` |
| Comp Band Base - Pay Range                 | `compBand.baseSpread`              | The percentage above and below the midpoint that defines the upper and lower bounds of the band. For example, a value of 30% with a midpoint of 100,000 would create a pay range of 70,000-130,000. | `30`               |
| Comp Band Base - Maximum                   | `compBand.baseMax`                 | The upper bound of the base compensation range.                                                                                                                                                     | `$200000`          |
| Comp Band Base - Maximum With Multipliers  | `compBand.baseMax.withMultipliers` | The upper bound of the base compensation range, with all applicable multipliers applied.                                                                                                            | `$200000`          |
| Comp Band Base - Minimum                   | `compBand.baseMin`                 | The lower bound of the base compensation range.                                                                                                                                                     | `$80000`           |
| Comp Band Base - Minimum With Multipliers  | `compBand.baseMin.withMultipliers` | The lower bound of the base compensation range, with all applicable multipliers applied.                                                                                                            | `$75000`           |
| Comp Band Base - Midpoint                  | `compBand.baseMid`                 | The midpoint of the base compensation range.                                                                                                                                                        | `$100000`          |
| Comp Band Base - Midpoint With Multipliers | `compBand.baseMid.withMultipliers` | The midpoint of the base compensation range, with all applicable multipliers applied.                                                                                                               | `$110000`          |

### Variable

| **Field** **Name**                               | **Property**                     | **Definition**                                                                      | **Examples** |
| ------------------------------------------------ | -------------------------------- | ----------------------------------------------------------------------------------- | ------------ |
| Comp Band Variable - Target (money)              | `compBand.variableValue`         | The target variable pay amount, specified as a monetary value.                      | `$300000`    |
| Comp Band Variable - Target (percentage of base) | `compBand.variablePercentOfBase` | The target variable pay amount, specified as a percentage of the job's actual base. | `25`         |


[title] Reports Up to
[path] Carrot reference/Fields/Structure/Organization/

### Description

Returns the organization under a particular Org member.

- **Code name**: `under`
- **Sensitivity**: Org Public&#x20;
- **Data type**: [JobList](docId\:nSjKyTC3-z5e_QcUrck8M)&#x20;
- **Data category**: Structure
- **Entity type:** Job
- **Read only:** Yes

### Usage examples

| Code                 | Description                                                                  |
| -------------------- | ---------------------------------------------------------------------------- |
| `under:"John Smith"` | Returns a list of people who report up to a certain individual (John Smith). |




[title] startDate
[path] Carrot reference/Fields/Structure/Dates/

### Start Date

For filled Jobs, the date the Person started at the organization (same as [startDateOrg](docId\:X7LX-U_pJSnawTQ0V_I5C) ), or for open Jobs, the planned target start date (same as [startDatePlanned](docId:-oN0DZTzEAWcLSvtXBUOF))

- **Label:&#x20;**&#x53;tart Date
- **Code name:&#x20;**`startDate`
- **Sensitivity**: Org Public
- **Data type**: [Date](https://docs.charthop.com/carrot-reference/xTAQ-date)
- **Data category**: Structure
- **Entity type:** Job
- **Read only:** No

### See also

- [startDateOrg](docId\:X7LX-U_pJSnawTQ0V_I5C)&#x20;
- [startDatePlanned](docId:-oN0DZTzEAWcLSvtXBUOF)&#x20;
- [startDateLifetime](docId\:a1_ef8JYH0spf5w8U0nqQ)&#x20;

### Selecting the correct Start Date field

| Field                 | Code                           | Description                                                                                                                                                                                                                         | Usage                                                                                                    |
| --------------------- | ------------------------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------- |
| Start Date            | startDate, personStartDate     | For filled Jobs, the date the Person started at the organization (same as [startDateOrg](docId\:X7LX-U_pJSnawTQ0V_I5C) ), or for open Jobs, the planned target start date (same as [startDatePlanned](docId:-oN0DZTzEAWcLSvtXBUOF)) | The most general start date field.                                                                       |
| Start date at org     | startDateOrg, startDateAtOrg   | The most recent date that the Person started at the organization, or `null` for open jobs.                                                                                                                                          | General usage for typical start dates for people.                                                        |
| Start date (Lifetime) | startDateLifetime              | The original date that the Person first started at the organization, regardless of any rehires.                                                                                                                                     | When working with any situations that may involve rehires use this field.                                |
| Start date in job     | startDateJob, startDateActual  | The date that the Person started in their current Job, whether that was through a hire or an internal move/transfer.                                                                                                                | For understanding [tenureJob](docId\:JZQspmgRRGyzP7SDggHRz) or how long people have been in a position.  |
| Offer Start Date      | offerStartDate                 | Often synced from the ATS, lists when the offer listed as the start date                                                                                                                                                            | Allows tracking of instances where start dates changed from offer.                                       |
| Planned Start Date    | startDatePlanned, jobStartDate | For open jobs, the intended target start date of the job. The field still remains once the job is hired.                                                                                                                            | During org planning for forecasting start dates of planned roles.                                        |




[title] State
[path] Carrot reference/Fields/Structure/Organization/

### Description

Returns the value of `open`.

- **Code name**: state
- **Sensitivity**: Org Public&#x20;
- **Data type**: [Enum](docId\:UnTq2eAL5RMIpNYczvfw1)&#x20;
- **Data category**: Structure
- **Entity type:** Job
- **Read only:** Yes


[title] Employment
[path] Carrot reference/Fields/Structure/Headcount/

### Description

Returns the employment type. employment can be `Full Time`, `Part Time`, `Temporary`, `Contract`, `Intern`, or `Ex-Pat`.

- **Code name**: `employment`
- **Sensitivity**: Org Public
- **Data type**: [Enum](docId\:UnTq2eAL5RMIpNYczvfw1)&#x20;
- **Data category**: Structure
- **Entity type:** Job
- **Read only:** No


[title] Manage Persons
[path] Carrot reference/Fields/Structure/Management/

### Description

Returns the number of Persons (presently filled jobs) either directly or indirectly managed by an Org member.

- **Code name**: `managePersons`
- **Sensitivity**: Org Public&#x20;
- **Data type**: [Number](docId\:ucI5tCTfVBhonEJ6ZQijg)&#x20;
- **Data category**: Structure
- **Entity type:** Job
- **Read only:** Yes


[title] Timestamp
[path] Carrot reference/Fields/Data Types/

Represents a moment in time, with millisecond precision.

### Properties

None.

### Type Conversions

If the following types are used in place of a Timestamp:

- [Date](docId\:xTAQdzvLBTAKjxRnpFwe9): will be converted into the timestamp of exactly midnight (00:00:00) on the start of that date in the org's timezone.
- [String](docId\:Ujw2AQAktel5uukLuP73S): will be parsed, including using @relative dates


[title] Days Off (Sick)
[path] Carrot reference/Fields/Time off/

### Description

The number of days that the person has taken, or been approved, in the current calendar year -- sick days only.

- **Code name**: `daysOff.sick`
- **Sensitivity**: Manager shared
- **Data type**: [DaysOff](docId:_CMGaoFHVoXumDGP6hZH5)&#x20;
- **Data category**: TimeOff
- **Entity type:** Person
- **Read only:** Yes


[title] File
[path] Carrot reference/Fields/Data Types/

A *Carrot* data type used by fields that store uploaded files.&#x20;

:::hint{type="info"}
The `File` data type is supported in Custom fields and forms.
:::

### Properties

The `File` data type does not support any user retrievable properties.

### Supported file types

The `File` data type supports the following file types:

- .txt
- .csv
- .pptx
- .pdf
- .png
- .jpg
- .xlsx
- .doc

:::hint{type="warning"}
Audio and video file formats such as .wav and .mp4 are not supported.
:::

### Sample usage

`uploadedReport:*` returns all records where custom field `uploadedReport` has an uploaded file.


[title] Org
[path] Carrot reference/Fields/Structure/Organization/

### Description

The Org object contains references to information that can be found in your ChartHop Organization's [General settings](https://docs.charthop.com/configuring-general-settings).

- **Code name**: `org`
- **Sensitivity**: Org Public&#x20;
- **Data type**: *Object*
- **Data category**: Structure
- **Entity type:** None
- **Read only:** Yes

### Example usage

| **Code**       | **Description**                     |
| -------------- | ----------------------------------- |
| `org.name`     | Returns the Org's name.             |
| `org.slug`     | Returns the Org's slug.             |
| `org.currency` | Returns the Org's default currency. |


[title] TimeOff
[path] Carrot reference/Fields/Data Types/

An entity type that represents time off taken by an employee.

### Properties

| **Property**      | **Type**                                       | **Description**                                                                                       |
| ----------------- | ---------------------------------------------- | ----------------------------------------------------------------------------------------------------- |
| `approval`        | [Enum](docId\:UnTq2eAL5RMIpNYczvfw1)           | Approval status, possible values:<br />* Approved
* Pending
* Cancelled
* Rejected
* Superseded       |
| `approvalAt`      | [Timestamp](docId\:j1uFZtC3_yprDI3uCIn3u)      | When the time off was approved                                                                        |
| `approvalUser`    | [User](docId:6hG3wvt0l2N5eByFDU_TC)            | The user who approved the time off                                                                    |
| `createAt`        | [Timestamp](docId\:j1uFZtC3_yprDI3uCIn3u)      | When the time off was created in the system                                                           |
| `createUser`      | [User](docId:6hG3wvt0l2N5eByFDU_TC)            | The user who created the time off                                                                     |
| `days`            | [Number](docId\:ucI5tCTfVBhonEJ6ZQijg)         | The number of days that were requested (typically a whole number, but can be `.5` for half-days)      |
| `endDate`         | [Date](docId\:xTAQdzvLBTAKjxRnpFwe9)           | The last day of the time off                                                                          |
| `externalId`      | [String](docId\:Ujw2AQAktel5uukLuP73S)         | If the time off was imported from an external system, the unique external identifier from that system |
| `hours`           | [Number](docId\:ucI5tCTfVBhonEJ6ZQijg)         | The number of hours that were requested                                                               |
| `id`              | [String](docId\:Ujw2AQAktel5uukLuP73S)         | The unique ChartHop identifier of the time off                                                        |
| `note`            | [String](docId\:Ujw2AQAktel5uukLuP73S)         | The note attached to the time off                                                                     |
| `policy`          | [TimeOffPolicy](docId\:NSPh0ILH9hMeU44mkvQ3J)  | The policy that was used for this time off                                                            |
| `requestAt`       | [Timestamp](docId\:j1uFZtC3_yprDI3uCIn3u)      | When the time off was requested                                                                       |
| `startDate`       | [Date](docId\:xTAQdzvLBTAKjxRnpFwe9)           | The date that the time off starts                                                                     |
| `typeDescription` | [String](docId\:Ujw2AQAktel5uukLuP73S)         | The type of time off that was requested, for example "PTO", "Sick" or "Jury Duty"                     |
| `updateAt`        | [Timestamp](docId\:j1uFZtC3_yprDI3uCIn3u)      | When the time off was last updated                                                                    |
| `updateUser`      | [User](docId:6hG3wvt0l2N5eByFDU_TC)            | The user who updated the time off                                                                     |
|                   |                                                |                                                                                                       |

### See Also

- [nextTimeOff](docId:9_kBHO1LF4ICD6Js6u4Gk)&#x20;
- [prevTimeOff](docId\:NgvMA7vMOmpAty1rmJTrx)&#x20;


[title] Enum
[path] Carrot reference/Fields/Data Types/

An Enum represents one value out of a set of allowed values, each with a unique label.

This is the value type produced by the "Single Select", "Multiple Select", "Numeric Scale", and "Smart Bucket" field types.

### Properties

| **Property** | **Type**                                | **Description**                                                                           |
| ------------ | --------------------------------------- | ----------------------------------------------------------------------------------------- |
| `label`      | [String](docId\:Ujw2AQAktel5uukLuP73S)  | The label of the Enum value, for example `Meets Expectations`                             |
| `color`      | [String](docId\:Ujw2AQAktel5uukLuP73S)  | The hex color code of the Enum value                                                      |
| `num`        | [Number](docId\:ucI5tCTfVBhonEJ6ZQijg)  | If the value comes from a Numeric Scale field, the numeric value of this value            |
| `expr`       | [String](docId\:Ujw2AQAktel5uukLuP73S)  | If the value comes from a Smart Bucket field, the Carrot formula expression of the bucket |

### Type Conversions

Enums that contain `num` values can be used in place of [Number](docId\:ucI5tCTfVBhonEJ6ZQijg) for math operations, and will be automatically converted to their numeric value.

- For example, you can call `mean(performanceRating1, performanceRating2)` to average together two different "performance rating" enums.


[title] titleDate
[path] Carrot reference/Fields/Structure/Dates/

### Last Title Change

Returns the date of the most recent title change for a Job.

- **Name:&#x20;**&#x4C;ast Title Change
- **Code name**: `titleDate`
- **Sensitivity**: Sensitive
- **Data type**: [Date](https://docs.charthop.com/carrot-reference/xTAQ-date)
- **Data category**: Structure
- **Entity type:** Job
- **Read only:** Yes


[title] Date
[path] Carrot reference/Fields/Data Types/

Represents an exact date (year, month, and day).

### Properties

| **Property** | **Type**                                | **Description**              | **Example** |
| ------------ | --------------------------------------- | ---------------------------- | ----------- |
| `year`       | [Number](docId\:ucI5tCTfVBhonEJ6ZQijg)  | The calendar year            | `1980`      |
| `month`      | [Number](docId\:ucI5tCTfVBhonEJ6ZQijg)  | The month of the year (1-12) | `5`         |
| `day`        | [Number](docId\:ucI5tCTfVBhonEJ6ZQijg)  | The day of the month (1-31)  | `12`        |

### Type Conversions

If the following types are used in place of a Date:

- [Timestamp](docId\:j1uFZtC3_yprDI3uCIn3u) - uses the date of the timestamp after converting to the org's timezone
- [String](docId\:Ujw2AQAktel5uukLuP73S) - parses the date, including supporting relative dates

### See also

[date()](docId\:grpUvYCy4WI6Wm7kUq4bv) - converts into a Date

[Relative Dates](docId\:LVlFv-1A-ePBySJQJ5FJC) - syntax for expressing relative dates

[title] startDateLifetime
[path] Carrot reference/Fields/Structure/Dates/

### Start Date (Lifetime)

Similar to [tenureLifetime](docId\:nXIlRF3Qcl3z99b7CVOmW), this returns the "original" start date for a Person started at the organization, or `null` for open jobs. This will look for the date of the first time the person was hired into the organization

- **Label:&#x20;**&#x53;tart date (Lifetime)
- **Code name**: `startDateLifetime`
- **Sensitivity**: Org Public
- **Data type**: [Date](https://docs.charthop.com/carrot-reference/xTAQ-date)
- **Data category**: Structure
- **Entity type:** People
- **Read only:** No


[title] PayInterval
[path] Carrot reference/Fields/Data Types/

A datatype used to represent a pay interval, which represents the amount and period that someone is paid -- for example, an annual salary or hourly rate.

### Properties

| **Property**    | **Type**                                     | **Description**                                                                                                               |
| --------------- | -------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------- |
|                 |                                              |                                                                                                                               |
| `amount`        | [Number](docId\:ucI5tCTfVBhonEJ6ZQijg)       | The amount of money, without the currency (same as `pay.amount`)                                                              |
| `annualized`    | [Money](docId:_kS5D2xbfoR9d8WfRIVnY)         | The amount of money, converted to an annualized total.                                                                        |
| `asOrgCurrency` | [PayInterval](docId\:yKNKN59I_Xjwtq9iO-i3-)  | Converts the PayInterval to the org's default currency (using the current exchange rate in effect as-of the evaluation date). |
| `currency`      | [Currency](docId\:HYeq9EU9e7La_RvHQTFvG)     | The currency being paid (same as `pay.currency`)                                                                              |
| `hourly`        | [Money](docId:_kS5D2xbfoR9d8WfRIVnY)         | The hourly rate if hourly, otherwise `null`                                                                                   |
| `hoursPerWeek`  | [Number](docId\:ucI5tCTfVBhonEJ6ZQijg)       | The number of expected hours per week (incorporated in `annualized` calculation)                                              |
| `interval`      | [String](docId\:Ujw2AQAktel5uukLuP73S)       | The interval being paid, either `year` or `hour`                                                                              |
| `pay`           | [Money](docId:_kS5D2xbfoR9d8WfRIVnY)         | The rate of pay                                                                                                               |
| `weeksPerYear`  | [Number](docId\:ucI5tCTfVBhonEJ6ZQijg)       | The number of expected weeks per year (incorporated in `annualized` calculation)                                              |
| `yearly`        | [Money](docId:_kS5D2xbfoR9d8WfRIVnY)         | The yearly rate if yearly, otherwise `null`                                                                                   |

### Type Conversions and Money Math

If a Pay Interval is used together with Money in a formula, the Pay Interval is automatically converted to its annualized value.


[title] createDate
[path] Carrot reference/Fields/Structure/Dates/

### Create Date

The date the Job was created.

- **Label:** Create Date
- **Code name**: `createDate`
- **Sensitivity**: Org Public
- **Data type**: [Date](https://docs.charthop.com/carrot-reference/xTAQ-date)
- **Data category**: Structure
- **Entity type:** Job
- **Read only:** Yes


[title] endDateJob
[path] Carrot reference/Fields/Structure/Dates/

### End Date in Job

The date that the Person left the job.

- **Label:** End Date in Job
- **Code name**: `endDateJob`
- **Sensitivity**: Org Public
- **Data type**: [Date](https://docs.charthop.com/carrot-reference/xTAQ-date)
- **Data category**: Structure
- **Entity type:** Job
- **Read only:** No


[title] Department
[path] Carrot reference/Fields/Structure/Groups/

### Description

Returns the department an Org member is under.

- **Code name**: `department`
- **Sensitivity**: Org Public
- **Data type**: [Group](docId:7kUM4sl_wT2Y_lDfMO6qb)&#x20;
- **Data category**: Structure
- **Entity type:** Job
- **Read only:** No
- **Properties**: This field inherits the properties of the [](https://docs.charthop.com/carrot-reference/xTAQ-date)[Group](docId:7kUM4sl_wT2Y_lDfMO6qb) data type.


[title] String
[path] Carrot reference/Fields/Data Types/

A *Carrot* datatype used by fields that store text values.&#x20;

:::hint{type="info"}
The `String` datatype is supported by Custom Fields, however it cannot directly be used to define custom fields. Custom fields that store text values must be defined as one of two `String` subtypes: `ShortText` or `LongText`.
:::

### Properties

The `String` datatype does not support any user retrievable properties.

### Sample usage

`favoriteFlavor:orange` returns all records where `favoriteFlavor` has a value of `orange`.


[title] Days Off (Unknown)
[path] Carrot reference/Fields/Time off/

### Description

The number of days that the person has taken, or been approved, in the current calendar year -- unknown only.

- **Code name**: `daysOff.unknown`
- **Sensitivity**: Manager shared
- **Data type**: [DaysOff](docId:_CMGaoFHVoXumDGP6hZH5)&#x20;
- **Data category**: TimeOff
- **Entity type:** Person
- **Read only:** Yes


[title] Boolean
[path] Carrot reference/Fields/Data Types/

A *Carrot* datatype used by fields that store `true` and `false` values.&#x20;

:::hint{type="info"}
The `Boolean` datatype is supported in Custom Fields. The only custom field of type `Boolean` is *Yes/No*.
:::

### Properties

The `Boolean` datatype supports the following properties:

### Sample usage

`vaccinated = true` returns all records where the custom boolean field `vaccinated` has the value `true`.


[title] Days Off (In Lieu)
[path] Carrot reference/Fields/Time off/

### Description

The number of days that the person has taken, or been approved, in the current calendar year -- time off in lieu.

- **Code name**: `daysOff.toil`
- **Sensitivity**: Manager shared
- **Data type**: [DaysOff](docId:_CMGaoFHVoXumDGP6hZH5)&#x20;
- **Data category**: TimeOff
- **Entity type:** Person
- **Read only:** Yes


[title] Days Off Upcoming (current year)
[path] Carrot reference/Fields/Time off/

### Description

The number of days that the person has approved, but not yet taken, in the current calendar year.

- **Code name**: `daysOffUpcoming`
- **Sensitivity**: Sensitive
- **Data type**: [DaysOff](docId:_CMGaoFHVoXumDGP6hZH5)&#x20;
- **Data category**: TimeOff
- **Entity type:** Person
- **Read only:** Yes


[title] Days Off Taken (current year)
[path] Carrot reference/Fields/Time off/

### Description

The number of days that the person has taken off so far in the current calendar year.

- **Code name**: `daysOffTaken`
- **Sensitivity**: Sensitive
- **Data type**: [DaysOff](docId:_CMGaoFHVoXumDGP6hZH5)&#x20;
- **Data category**: TimeOff
- **Entity type:** Person
- **Read only:** Yes


[title] Previous Day Off
[path] Carrot reference/Fields/Time off/

### Description

Returns the most recent day off for an Org member.

- **Code name**: `prevDayOff`
- **Sensitivity**: Sensitive
- **Data type**: Date
- **Data category**: TimeOff
- **Entity type:** Person
- **Read only:** Yes


[title] Open
[path] Carrot reference/Fields/Structure/Headcount/

### Description

Returns the status of a Job. `open` can be either `open` or `filled`.

- **Code name**: `open`
- **Sensitivity**: Org Public&#x20;
- **Data type**: [Enum](docId\:UnTq2eAL5RMIpNYczvfw1)&#x20;
- **Data category**: Structure
- **Entity type:** Job
- **Read only:** Yes


[title] Days Off (Parental)
[path] Carrot reference/Fields/Time off/

### Description

The number of days that the person has taken, or been approved, in the current calendar year -- maternity, paternity, or other parental leave.

- **Code name**: `daysOff.parental`
- **Sensitivity**: Manager shared
- **Data type**: [DaysOff](docId:_CMGaoFHVoXumDGP6hZH5)&#x20;
- **Data category**: TimeOff
- **Entity type:** Person
- **Read only:** Yes


[title] Days Off (Religious)
[path] Carrot reference/Fields/Time off/

### Description

The number of days that the person has taken, or been approved, in the current calendar year -- religious only.

- **Code name**: `daysOff.religious`
- **Sensitivity**: Manager shared
- **Data type**: [DaysOff](docId:_CMGaoFHVoXumDGP6hZH5)&#x20;
- **Data category**: TimeOff
- **Entity type:** Person
- **Read only:** Yes


[title] Currency
[path] Carrot reference/Fields/Data Types/

A *Carrot* datatype used by fields that store national currencies.&#x20;

:::hint{type="info"}
The `Currency` datatype is not currently supported in Custom Fields. Supported uses for the `Currency` datatype are currently limited to the builtin `currency` field.&#x20;
:::

### Properties

The `Currency` datatype does not support any user retrievable properties.

### Sample usage

`currency:usd` returns all records where `currency`, a default field of type `Currency`, has a value of `usd`.


[title] Direct Persons
[path] Carrot reference/Fields/Structure/Headcount/

### Description

Returns the number of direct reports, not including open Jobs.

- **Code name**: `directPersonCount`
- **Sensitivity**: Org Public
- **Data type**: [Number](docId\:ucI5tCTfVBhonEJ6ZQijg)&#x20;
- **Data category**: Structure
- **Entity type:** Job
- **Read only:** Yes


[title] Indirect Manager
[path] Carrot reference/Fields/Structure/Management/

### Description

Returns an Org member's indirect manager.

- **Code name**: `indirect`
- **Sensitivity**: Org Public
- **Data type**: [Job](docId:09AD2ikREIzwa-J0dFOBM)&#x20;
- **Data category**: Structure
- **Entity type:** Job
- **Read only:** No


[title] Days Off (Bereavement)
[path] Carrot reference/Fields/Time off/

### Description

The number of days that the person has taken, or been approved, in the current calendar year -- bereavement only.

- **Code name**: `daysOff.bereavement`
- **Sensitivity**: Manager shared
- **Data type**: [DaysOff](docId:_CMGaoFHVoXumDGP6hZH5)&#x20;
- **Data category**: TimeOff
- **Entity type:** Person
- **Read only:** Yes


[title] tenureJob
[path] Carrot reference/Fields/Structure/Dates/

### Tenure in Job

The time in months that the Person has been in their current Job.

- **Label:&#x20;**&#x54;enure in Job
- **Code name:&#x20;**`tenureJob`
- **Sensitivity**: Org Public
- **Data type**: [Number](docId\:ucI5tCTfVBhonEJ6ZQijg)&#x20;
- **Data category**: Structure
- **Entity type:** Job
- **Read only:** No


[title] Reports Up To Including
[path] Carrot reference/Fields/Structure/Organization/

### Description

Returns both the person being matched as well as the organization under them.

- **Code name**: `underIncluding`
- **Sensitivity**: Org Public&#x20;
- **Data type**: [JobList](docId\:nSjKyTC3-z5e_QcUrck8M)&#x20;
- **Data category**: Structure
- **Entity type:** Job
- **Read only:** Yes


[title] Days Off (All Types)
[path] Carrot reference/Fields/Time off/

### Description

The number of days that the person has taken, or been approved, in the current calendar year.

- **Code name**: `daysOff.all`
- **Sensitivity**: Manager shared
- **Data type**: [DaysOff](docId:_CMGaoFHVoXumDGP6hZH5)&#x20;
- **Data category**: TimeOff
- **Entity type:** Person
- **Read only:** Yes


[title] Days Off (ST Disability)
[path] Carrot reference/Fields/Time off/

### Description

The number of days that the person has taken, or been approved, in the current calendar year -- short term disability.

- **Code name**: `daysOff.disabilityShort`
- **Sensitivity**: Manager shared
- **Data type**: [DaysOff](docId:_CMGaoFHVoXumDGP6hZH5)&#x20;
- **Data category**: TimeOff
- **Entity type:** Person
- **Read only:** Yes


[title] Days Off Used (current year)
[path] Carrot reference/Fields/Time off/

### Description

Returns a variety of data points related to days off **taken or approved** in the current year. Use the properties of the `DaysOff` datatype to pull relevant data.

- **Code name**: `daysOff`
- **Sensitivity**: Sensitive
- **Data type**: [DaysOff](docId:_CMGaoFHVoXumDGP6hZH5)&#x20;
- **Data category**: TimeOff
- **Entity type:** Person
- **Read only:** Yes


[title] Next Day Off
[path] Carrot reference/Fields/Time off/

### Description

Returns the date of the next day off for an Org member.

- **Code name**: `nextDayOff`
- **Sensitivity**: Sensitive
- **Data type**: Date
- **Data category**: TimeOff
- **Entity type:** Person
- **Read only:** Yes


[title] Location
[path] Carrot reference/Fields/Structure/Groups/

### Description

Returns the location of an Org member's office or work location.

- **Code name**: `location`
- **Sensitivity**: Org Public&#x20;
- **Data type**: [Group](docId:7kUM4sl_wT2Y_lDfMO6qb)&#x20;
- **Data category**: Structure
- **Entity type:** Job
- **Read only:** No
- **Properties**: This field inherits the properties of the [](https://docs.charthop.com/carrot-reference/xTAQ-date)[Group](docId:7kUM4sl_wT2Y_lDfMO6qb) data type.


[title] Band
[path] Carrot reference/Fields/Structure/Groups/

### Description

Returns an Org member's organizational band.

- **Code name**: `band`
- **Sensitivity**: Org Public
- **Data type**: [Group](docId:7kUM4sl_wT2Y_lDfMO6qb)&#x20;
- **Data category**: Structure
- **Entity type:** Job
- **Read only:** No
- **Properties**: This field inherits the properties of the [](https://docs.charthop.com/carrot-reference/xTAQ-date)[Group](docId:7kUM4sl_wT2Y_lDfMO6qb) data type.


[title] Job Count
[path] Carrot reference/Fields/Structure/Headcount/

### Description

Returns the jobcount.

- **Code name**: `jobcount`
- **Sensitivity**: Org Public
- **Data type**: [Number](docId\:ucI5tCTfVBhonEJ6ZQijg)&#x20;
- **Data category**: Structure
- **Entity type:** Person
- **Read only:** Yes


[title] Job
[path] Carrot reference/Fields/Data Types/

A *Carrot* datatype used by fields that store job values.

:::hint{type="info"}
The `Job` datatype is not supported in Custom Fields/Forms. Supported uses for the `Job` datatype are limited to open and filled roles.
:::

### Properties

The `Job` datatype supports the following properties:&#x20;

[title] Relationships
[path] Carrot reference/Fields/Structure/Organization/



- **Code name**: `relationships`
- **Sensitivity**: Org Public&#x20;
- **Data type**: Object
- **Data category**: Structure
- **Entity type:** Job
- **Read only:** Yes


[title] Percent
[path] Carrot reference/Fields/Data Types/

A *Carrot* datatype used by fields that store a percent value.&#x20;

:::hint{type="info"}
The `Percent` datatype is supported by custom fields.
:::

### Properties

The `Percent` datatype does not support any user retrievable properties.

### Sample usage

`departmentTurnover > .07` returns all records where the turnover rate of the department is greater than 7%.


[title] startDateOrg
[path] Carrot reference/Fields/Structure/Dates/

### Start Date at Org

The most recent date that the Person started at the organization, or `null` for open jobs.

- **Label:&#x20;**&#x53;tart date at org
- **Code name**: `startDateOrg`
- **Sensitivity**: Org Public
- **Data type**: [Date](https://docs.charthop.com/carrot-reference/xTAQ-date)
- **Data category**: Structure
- **Entity type:** Job
- **Read only:** No



For the *first* start date at the org, see [startDateLifetime](docId\:a1_ef8JYH0spf5w8U0nqQ). &#x20;

[title] Groups
[path] Carrot reference/Fields/Structure/

Fields related to groups and departments.

### Fields

| **Field name** | **Function**                                                     | **Field code** |
| -------------- | ---------------------------------------------------------------- | -------------- |
| Department     | Returns the department to which an Org member belongs.           | `department`   |
| Location       | Returns the location of an Org member's office or work location. | `location`     |
| Band           | Returns an Org member's organizational band.                     | `band`         |
| Team           | Returns the team to which an Org member belongs.                 | `team`         |


[title] Image
[path] Carrot reference/Fields/Data Types/

A *Carrot* datatype used by fields that store uploaded images.&#x20;

:::hint{type="info"}
The `Image` datatype is not supported in Custom Fields/Forms. Supported uses for the `Image` datatype are limited to profile pictures of employees.
:::

### Properties

The `Image` datatype does not support any user retrievable properties.

### Sample usage

`image:*` returns all records where default field `image` has any stored image.


[title] Days Off (LT Disability)
[path] Carrot reference/Fields/Time off/

### Description

The number of days that the person has taken, or been approved, in the current calendar year -- long term disability.

- **Code name**: `daysOff.disabilityLong`
- **Sensitivity**: Manager shared
- **Data type**: [DaysOff](docId:_CMGaoFHVoXumDGP6hZH5)&#x20;
- **Data category**: TimeOff
- **Entity type:** Person
- **Read only:** Yes


[title] Days Off (Medical)
[path] Carrot reference/Fields/Time off/

### Description

The number of days that the person has taken, or been approved, in the current calendar year -- medical only.

- **Code name**: `daysOff.medical`
- **Sensitivity**: Manager shared
- **Data type**: [DaysOff](docId:_CMGaoFHVoXumDGP6hZH5)&#x20;
- **Data category**: TimeOff
- **Entity type:** Person
- **Read only:** Yes


[title] Days Off (Offsite)
[path] Carrot reference/Fields/Time off/

### Description

The number of days that the person has taken, or been approved, in the current calendar year -- offsite only.

- **Code name**: `daysOff.offsite`
- **Sensitivity**: Manager shared
- **Data type**: [DaysOff](docId:_CMGaoFHVoXumDGP6hZH5)&#x20;
- **Data category**: TimeOff
- **Entity type:** Person
- **Read only:** Yes


[title] prevTimeOff
[path] Carrot reference/Fields/Time off/

Returns the person's most recently taken time off.

- **Label**: Previous Time Off
- **Sensitivity**: Manager Shared
- **Data type**: [TimeOff](docId\:raHsIHytvR1NsKqtdfkJA)&#x20;
- **Data category**: TimeOff
- **Entity type:** Person
- **Read only:** Yes


[title] Comp
[path] Carrot reference/Fields/Data Types/

A *Carrot* datatype used to store a job's total compensation.&#x20;

:::hint{type="info"}
The `Comp` datatype is not currently supported in Custom Fields.&#x20;
:::

### Properties

The `Comp` datatype supports the following properties:

| **Property**        | **Definition**                                     |
| ------------------- | -------------------------------------------------- |
| *Comp*.**currency** | Returns the currency associated with a job's comp. |
| *Comp*.**base**     | Returns a job's base compensation amount.          |
| *Comp*.**variable** | Returns a job's variable compensation amount.      |


[title] DaysOff
[path] Carrot reference/Fields/Data Types/

A *Carrot* datatype used by inbuilt fields that store information about days off.

:::hint{type="info"}
The `DaysOff` datatype is not supported in Custom Fields/Forms. Supported uses for the `DaysOff` datatype are limited to the following inbuilt fields: `daysOff`, `daysOffTaken`, and `daysOffUpcoming`.
:::

### Properties

The `DaysOff` datatype supports the following properties:

| **Property**       | **Definition**                                                    |
| ------------------ | ----------------------------------------------------------------- |
| *daysOff***.all**  | Returns the total number of days off as a Number.                 |
| *daysOff***.sick** | Returns the total number of sick days off as a Number.            |
| *daysOff***.pto**  | Returns the Returns the total number of PTO days off as a Number. |


[title] Person
[path] Carrot reference/Fields/Data Types/

A *Carrot* datatype used by fields that store a person value.

:::hint{type="info"}
The `Person` datatype is supported by Custom Fields.
:::

### Properties

The `Person` datatype does not support any user retrievable properties.

### Sample usage

`assignedSuccessManager:"Jim Morrison"` returns all records where the custom field `assignedSuccessManager` has a value of Jim Morrison.


[title] tenureLifetime
[path] Carrot reference/Fields/Structure/Dates/

### Tenure (Lifetime)

The total time in months that the Person has worked at the organization since the very beginning, incorporating multiple periods of service (departures and re-hires).

For example, someone who was hired on January 1, 2022, departed on September 1, 2022 (8 months of service), re-hired on March 1, 2024, and departed on March 1, 2025 (12 months of service), will have a `tenureLifetime` of 20 months.&#x20;

- **Label**: Tenure (Lifetime)
- **Code name**: `tenureLifetime`
- **Sensitivity**: Org Public
- **Data type**: [Number](docId\:ucI5tCTfVBhonEJ6ZQijg)&#x20;
- **Data category**: Structure
- **Entity type:** Job
- **Read only:** No


[title] TimeOffPolicy
[path] Carrot reference/Fields/Data Types/

Represents a time off policy.

### Properties

| **Property**     | **Type**                                   | **Description**                                                                                                                                                                                                                                  |
| ---------------- | ------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `allocationType` | [Enum](docId\:UnTq2eAL5RMIpNYczvfw1)       | The type of allocation, possible values:<br />* Upfront
* Accrual
* Unlimited                                                                                                                                                                    |
| `createAt`       | [Timestamp](docId\:j1uFZtC3_yprDI3uCIn3u)  | When the policy was created in the system                                                                                                                                                                                                        |
| `createUser`     | [User](docId:6hG3wvt0l2N5eByFDU_TC)        | The user who created the policy                                                                                                                                                                                                                  |
| `description`    | [String](docId\:Ujw2AQAktel5uukLuP73S)     | The description of the policy                                                                                                                                                                                                                    |
| `id`             | [String](docId\:Ujw2AQAktel5uukLuP73S)     | The unique ChartHop identifier of the time off policy                                                                                                                                                                                            |
| `name`           | [String](docId\:Ujw2AQAktel5uukLuP73S)     | The unique name of the policy                                                                                                                                                                                                                    |
| `status`         | [Enum](docId\:UnTq2eAL5RMIpNYczvfw1)       | The status of the policy, possible values:<br />* Active
* Inactive                                                                                                                                                                              |
| `type`           | [Enum](docId\:UnTq2eAL5RMIpNYczvfw1)       | The type of the time off, possible values:<br />* PTO
* TOIL
* Vacation
* Sick
* Medical
* Jury
* Offsite
* Parental
* Unpaid
* Short Term Disability
* Long Term Disability
* Bereavement
* Military
* Religious
* Voting
* Volunteer
* Unknown |
| `updateAt`       | [Timestamp](docId\:j1uFZtC3_yprDI3uCIn3u)  | When the policy was last updated                                                                                                                                                                                                                 |
| `updateUser`     | [User](docId:6hG3wvt0l2N5eByFDU_TC)        | lastThe user who  updated the time off                                                                                                                                                                                                           |
|                  |                                            |                                                                                                                                                                                                                                                  |

### See Also

- [TimeOff](docId\:raHsIHytvR1NsKqtdfkJA) &#x20;


[title] Manager
[path] Carrot reference/Fields/Structure/Management/

### Description

Returns the manager of a particular Org member.

- **Code name**: `manager`
- **Sensitivity**: Org Public&#x20;
- **Data type**: [Job](docId:09AD2ikREIzwa-J0dFOBM)&#x20;
- **Data category**: Structure
- **Entity type:** Job
- **Read only:** No


[title] Days Off (Military)
[path] Carrot reference/Fields/Time off/

### Description

The number of days that the person has taken, or been approved, in the current calendar year -- military only.

- **Code name**: `daysOff.military`
- **Sensitivity**: Manager shared
- **Data type**: [DaysOff](docId:_CMGaoFHVoXumDGP6hZH5)&#x20;
- **Data category**: TimeOff
- **Entity type:** Person
- **Read only:** Yes


[title] Number
[path] Carrot reference/Fields/Data Types/

A *Carrot* datatype used by fields that store number values.

:::hint{type="info"}
The `Number` datatype is supported by Custom Fields, however it cannot directly be used to define custom fields. Custom fields that store number values must be defined as one of two `Number` subtypes: `Decimal` or `Integer`.
:::

### Properties

The `Number` datatype does not support any user retrievable properties.

### Sample usage

`numberOfVaccines = 2` returns all records where custom field `numberOfVaccines` has the value `2`.


[title] Shares
[path] Carrot reference/Fields/Data Types/

A *Carrot* datatype used by fields that store a values related to company shares.

:::hint{type="info"}
The `Shares` datatype is not supported by Custom Fields. Supported uses for the `Shares` datatype are currently limited to the default fields `vestedShares`, `unvestedShares`, and `totalShares`.
:::

### Properties

The `Shares` datatype does not support any user retrievable properties.

### Sample usage

`vestedShares > 1000` returns all records where `vestedShares` is greater than 1000.


[title] startDatePlanned
[path] Carrot reference/Fields/Structure/Dates/

### Planned Start Date

For open roles, the intended target start date of the job. The field still remains once the job is hired.

- **Label:&#x20;**&#x50;lanned Start Date
- **Code name**: `startDatePlanned`
- **Sensitivity**: Org Public
- **Data type**: [Date](https://docs.charthop.com/carrot-reference/xTAQ-date)
- **Data category**: Structure
- **Entity type:** Job
- **Read only:** No


[title] Days Off (Jury Duty)
[path] Carrot reference/Fields/Time off/

### Description

The number of days that the person has taken, or been approved, in the current calendar year -- jury duty days only.

- **Code name**: `daysOff.jury`
- **Sensitivity**: Manager shared
- **Data type**: [DaysOff](docId:_CMGaoFHVoXumDGP6hZH5)&#x20;
- **Data category**: TimeOff
- **Entity type:** Person
- **Read only:** Yes


[title] EnumList
[path] Carrot reference/Fields/Data Types/

A *Carrot* datatype used by fields as a collection of data.

:::hint{type="info"}
The `EnumList` datatype is supported in Custom Fields/Forms.
:::

### Properties

The `EnumList` datatype does not support any user retrievable properties.


[title] Days Off (PTO)
[path] Carrot reference/Fields/Time off/

### Description

The number of days that the person has taken, or been approved, in the current calendar year -- paid time off only.

- **Code name**: `daysOff.pto`
- **Sensitivity**: Manager shared
- **Data type**: [DaysOff](docId:_CMGaoFHVoXumDGP6hZH5)&#x20;
- **Data category**: TimeOff
- **Entity type:** Person
- **Read only:** Yes


[title] Days Off (Voting)
[path] Carrot reference/Fields/Time off/

### Description

The number of days that the person has taken, or been approved, in the current calendar year -- voting only.

- **Code name**: `daysOff.voting`
- **Sensitivity**: Manager shared
- **Data type**: [DaysOff](docId:_CMGaoFHVoXumDGP6hZH5)&#x20;
- **Data category**: TimeOff
- **Entity type:** Person
- **Read only:** Yes


[title] Direct Reports
[path] Carrot reference/Fields/Structure/Headcount/

There are several Carrot Fields for calculating various versions of direct reports:

| Field Carrot Code   | Aliases                 | Type           | Description                                            |
| ------------------- | ----------------------- | -------------- | ------------------------------------------------------ |
| `directJobCount`    | `directs`, `directJobs` | Integer Number | The number of direct reports, including open jobs.     |
| `directJobs`        |                         | Job            | All of the jobs that report up to a person.            |
| `directPersonCount` |                         | Integer Number | The number of direct reports, excluding open jobs.     |
| `directPersons`     |                         | Persons        | All of the people who are direct reports of a person.  |
| `indirectJobs`      |                         | Job            | All of the indirect people that report up to a person. |



### Description

Returns the number of direct Jobs, both filled and open.

- **Code name**: `directJobCount`
- **Sensitivity**: Org Public
- **Data type**: [Number](docId\:ucI5tCTfVBhonEJ6ZQijg)&#x20;
- **Data category**: Structure
- **Entity type:** Job
- **Read only:** Yes

### Example usage

| **Code** **example** | **Description**                                                         |
| -------------------- | ----------------------------------------------------------------------- |
| `directs>0`          | Checks if the manager has at least 1 direct report (filled and open).   |
| `directs=1`          | Checks if the manager has exactly 1 direct report (filled and open).    |
| `directs<4`          | Checks if the manager has less than 4 direct reports (filled and open). |


[title] promotionDate
[path] Carrot reference/Fields/Structure/Dates/

### Promotion Date

The date when the Person's most recent promotion occurred.

- **Label:&#x20;**&#x50;romotion Date
- **Code name**: `promotionDate`
- **Sensitivity**: Manager-Shared&#x20;
- **Data type**: [Date](https://docs.charthop.com/carrot-reference/xTAQ-date)
- **Data category**: Structure
- **Entity type:** Person
- **Read only:** Yes


[title] PersonList
[path] Carrot reference/Fields/Data Types/

A *Carrot* datatype used by fields that store multiple person values.&#x20;

:::hint{type="info"}
The `PersonList` datatype is supported by Custom Fields. All newly created custom fields in ChartHop can be of type `PersonList`.
:::

### Properties

The `PersonList` datatype supports the following properties:

| **Property**                | **Definition**                             |
| --------------------------- | ------------------------------------------ |
| *somePersonList*.**amount** | Returns the number of Persons in the list. |

### Sample usage

`liason:"Bob Smith"` returns all records where the value for custom field `liason` contains a record that matches Bob Smith.


[title] Managed Jobs
[path] Carrot reference/Fields/Structure/Management/

### Description

Returns the number of open and filled Jobs directly managed by an Org member.

- **Code name**: `manageJobs`
- **Sensitivity**: Org Public&#x20;
- **Data type**: [Number](docId\:ucI5tCTfVBhonEJ6ZQijg)&#x20;
- **Data category**: Structure
- **Entity type:** Job
- **Read only:** Yes


[title] FormResponse
[path] Carrot reference/Fields/Data Types/

An entity object that represents a form response, including all individual answers within the form response.

## Properties

| **Property**   | **Type**                                            | **Description**                                                                                                                                                                                                     |
| -------------- | --------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `approvalAt`   | [Timestamp](docId\:j1uFZtC3_yprDI3uCIn3u)           | The timestamp of approval of the form response, or `null` if it was never approved                                                                                                                                  |
| `approvalUser` | [User](docId:6hG3wvt0l2N5eByFDU_TC)                 | The user who approved                                                                                                                                                                                               |
| `answerValue`  | @Map\<[String](docId\:Ujw2AQAktel5uukLuP73S), @Any> | Map of answer values, by their Question ID and/or their field name                                                                                                                                                  |
| `date`         | [Date](docId\:xTAQdzvLBTAKjxRnpFwe9)                | The date the form was submitted                                                                                                                                                                                     |
| `form`         | @Form                                               | The form that was submitted                                                                                                                                                                                         |
| `formId`       | [String](docId\:Ujw2AQAktel5uukLuP73S)              | The form ID                                                                                                                                                                                                         |
| `releaseAt`    | [Timestamp](docId\:j1uFZtC3_yprDI3uCIn3u)           | The timestamp that the form response was released, or `null` if it was never released                                                                                                                               |
| `releaseUser`  | [User](docId:6hG3wvt0l2N5eByFDU_TC)                 | The user who released the form response                                                                                                                                                                             |
| `status`       | [Enum](docId\:UnTq2eAL5RMIpNYczvfw1)                | The status of the form response, where possible values can be:<br />* `Active`
* `Proposed` - submitted but not yet approved
* `Unreleased` - submitted and potentially approved, but not yet released
* `Rejected` |
| `submitAt`     | [Timestamp](docId\:j1uFZtC3_yprDI3uCIn3u)           | The timestamp the form response was submitted                                                                                                                                                                       |
| `submitPerson` | [Person](docId\:BZrX1MTDjk8CgkAW7UjQJ)              | The person who submitted the form                                                                                                                                                                                   |
| `target`       | [Person](docId\:BZrX1MTDjk8CgkAW7UjQJ)              | The person who was the target of the form, or null if there was no target                                                                                                                                           |




[title] Placement
[path] Carrot reference/Fields/Structure/Organization/

### Description

Returns the value of placement, which can be either `Normal` or `Assistant`.

- **Code name**: `placement`
- **Sensitivity**: Org Public&#x20;
- **Data type**: [Enum](docId\:UnTq2eAL5RMIpNYczvfw1)&#x20;
- **Data category**: Structure
- **Entity type:** Job
- **Read only:** No

### Example usage

| **Code** **example**  | **Description**                         |
| --------------------- | --------------------------------------- |
| `placement:normal`    | Checks that placement is **normal**.    |
| `placement:assistant` | Checks that placement is **assistant**. |


[title] Null
[path] Carrot reference/Fields/Data Types/

A *Carrot* datatype used by fields that have a value of `null`.&#x20;

:::hint{type="info"}
The `Null` datatype is not supported in Custom Fields.
:::

### Properties

The `Null` datatype does not support any user retrievable properties.


[title] Team
[path] Carrot reference/Fields/Structure/Groups/

### Description

Returns the team to which an Org member belongs.

- **Code name**: team
- **Sensitivity**: Org Public&#x20;
- **Data type**: [Group](docId:7kUM4sl_wT2Y_lDfMO6qb)&#x20;
- **Data category**: Structure
- **Entity type:** Job
- **Read only:** No
- **Properties**: This field inherits the properties of the [](https://docs.charthop.com/carrot-reference/xTAQ-date)[Group](docId:7kUM4sl_wT2Y_lDfMO6qb) data type.


[title] fiscalYearEnd()
[path] Carrot reference/Functions/

Returns the last date of the fiscal year for a given date, based on your organization's configured fiscal year start month.

If no date is provided, the current context date is used.

### Syntax

`fiscalYearEnd(date)`

### Parameters

| **Parameter** | **Type**                             | **Description**                                                              |
| ------------- | ------------------------------------ | ---------------------------------------------------------------------------- |
| `date`        | [Date](docId\:xTAQdzvLBTAKjxRnpFwe9) | Optional. The date to calculate the fiscal year end from. Defaults to today. |

### Return Type

[Date](docId\:xTAQdzvLBTAKjxRnpFwe9)

The last day of the fiscal year that contains the given date.

### Examples

For an organization with a **default fiscal year** (starts in January):

`fiscalYearEnd('2025-05-12')`

- Returns `2025-12-31` because May 12, 2025 falls within the fiscal year ending December 31, 2025.

For an organization with a **fiscal year starting in February**:

`fiscalYearEnd('2025-03-15')`

- Returns `2026-01-31` because March 2025 falls within the fiscal year ending January 31, 2026.

`fiscalYearEnd('2025-01-15')`

- Returns `2025-01-31` because January 2025 falls within the fiscal year ending January 31, 2025.

### Related Carrot

- [fiscalYearStart()](docId\:jpLzeg4Gb8l9ZHw1IITw6) - Returns the start date of the fiscal year
- [fiscalYear()](docId:4MBFWcNMkOYKGkTotswdb) - Returns the fiscal year number
- [fiscalQuarterEnd()](docId\:qJfKAw-X26wzRPkrkT2if) - Returns the end date of the fiscal quarter

[title] findResponsesByTarget()
[path] Carrot reference/Functions/

Returns form responses for a specific form where the **target** (the person the form is about) matches a given person, optionally filtered by date range.

Useful when you want to retrieve all responses written *about* a particular employee — for example, all manager reviews submitted about a specific person.

### Syntax

`findResponsesByTarget(form, target[, from][, until])`

### Parameters

| **Parameter** | **Type**                                  | **Description**                                          |
| ------------- | ----------------------------------------- | -------------------------------------------------------- |
| `form`        | [String](docId\:Ujw2AQAktel5uukLuP73S)    | Name or ID of the form                                   |
| `target`      | Person                                    | The person the form responses are about                  |
| `from`        | [Timestamp](docId\:j1uFZtC3_yprDI3uCIn3u) | Starting point of the date range to traverse (inclusive) |
| `until`       | [Timestamp](docId\:j1uFZtC3_yprDI3uCIn3u) | Ending point of the date range to traverse (exclusive)   |

### Return Type

[List](docId\:xWH_cUkHj9waqaEfb7H71) \<[FormResponse](docId\:lIHL9I6DR0EINbNNDG2ec)>

### Examples

`findResponsesByTarget('360 Feedback', person, '-365d').count()`

Counts the number of 360 Feedback responses submitted about the current person in the past year.

`findResponsesByTarget('Manager Review', person, intervalFrom, intervalUntil).mean{answerValue.reviewScore}`

In a Dashboard, returns the average manager review score for the current person over the dashboard's time interval.

[title] vestValue()
[path] Carrot reference/Functions/

Given a start date and end date, returns the share price value of stock that will vest over that period of time.

### Syntax

`vestValue(fromDate, untilDate)`

- `fromDate` - the first date in the range
- `untilDate` - the second date in the range
- **Return type:** [Money](docId:_kS5D2xbfoR9d8WfRIVnY)&#x20;

### Sample usage

`vestValue('2020-01-01', '2021-01-01')` returns the share price value of stock over the defined date range

### Supported data types

| **Input type**                            | **Return type**                         | **Logic**                                                                                      |
| ----------------------------------------- | --------------------------------------- | ---------------------------------------------------------------------------------------------- |
| ****[Date](docId\:xTAQdzvLBTAKjxRnpFwe9)  | [Money](docId:_kS5D2xbfoR9d8WfRIVnY)    | If two Dates are passed, the share price value of stock over that date range will be returned. |
| *Unsupported data types*                  | **[Null](docId\:N9trVqonnBknqL9DrNBP6)  | Unsupported data types return `Null`.                                                          |


[title] costBetween()
[path] Carrot reference/Functions/

Calculates the cost of a job over a specified period of time where the cost of a job includes if multiple people have held that job.&#x20;

## costBetweenPrimary()

Returns the costBetween calculation only using data from Primary.

### Syntax

**baseCostBetweenPrimary** -  Calculates the **Base cost&#x20;**(Base \* Org Multiplier) of a job over a specific time period, including future roles with announced start dates, based on data in Primary only.

`baseCostBetweenPrimary( startDate: Date, endDate: Date, Multiplier: BigDecimal)`

- `startDate` - The current, or announced starting date for the current, or future filled role, respectively.
- `endDate` - The end date for the role.
- `Multiplier`- Optional multiplier. Defaults to `1.0`.
- **Return type:&#x20;**[Money](https://docs.charthop.com/_kS5-money)****

***

**variableCostBetweenPrimary** - Calculates the **Variable cost** of a job over a specific time period, including future filled roles with announced start dates, based on data in Primary only.

`variableCostBetweenPrimary( startDate: Date, endDate: Date, Multiplier: BigDecimal)`

- `startDate` - The current, or announced starting date for the current, or future filled role, respectively.
- `endDate` - The end date for the role.
- `Multiplier`- Optional multiplier. Defaults to `1.0`.
- **Return type:&#x20;**[Money](https://docs.charthop.com/_kS5-money)

***

**fullyLoadedCostBetweenPrimary** - Calculates the **Base cost** (Base \* Org Multiplier) plus the **Variable cost** of a job over a specific time period, including future roles with announced start dates, based on data in Primary only.

`fullyLoadedCostBetweenPrimary( startDate: Date, endDate: Date, Multiplier: BigDecimal)`

- `startDate` - The current, or announced starting date for the current, or future filled role, respectively.
- `endDate` - The end date for the role.
- `Multiplier`- Optional multiplier. Defaults to `1.0`.
- **Return type:&#x20;**[Money](https://docs.charthop.com/_kS5-money)

### Sample usages

| **Code sample**                                                   | **Result**                                                                                                                                       |
| ----------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------ |
| `baseCostBetweenPrimary('2017-07-01', '2022-08-01", 1.0)`         | Returns the calculated `base` cost of a job between January 7th, 2017 and January 8th, 2022.                                                     |
| `variableCostBetweenPrimary('2017-07-01', '2022-08-01", 2.5)`     | Returns the calculated `variable` cost of a job between January 7th, 2017 and January 8th, 2022 and multiplies that value by `2.5`               |
| `fullyLoadedCostBetweenPrimary('2017-07-01', '2022-08-01", 1.0)`  | Returns the calculated fully loaded cost of a job: ((`base`\* `Org Multiplier`) + `variable`)), between January 7th, 2017 and January 8th, 2022. |


[title] findAnswersByFormAssessment()
[path] Carrot reference/Functions/

Returns individual form answers for a specific question, scoped to both a specific form **and** a specific assessment cycle, optionally filtered by date range.

This is the most targeted of the `findAnswers*` functions — useful when the same question label appears on multiple forms across multiple cycles and you need to pin down exactly which form and cycle you want.

### Syntax

`findAnswersByFormAssessment(question, form, assessment[, from][, until])`

### Parameters

| **Parameter** | **Type**                                  | **Description**                                          |
| ------------- | ----------------------------------------- | -------------------------------------------------------- |
| `question`    | [String](docId\:Ujw2AQAktel5uukLuP73S)    | Name or ID of the question/field to retrieve answers for |
| `form`        | [String](docId\:Ujw2AQAktel5uukLuP73S)    | Name or ID of the form                                   |
| `assessment`  | [String](docId\:Ujw2AQAktel5uukLuP73S)    | Name or ID of the assessment cycle                       |
| `from`        | [Timestamp](docId\:j1uFZtC3_yprDI3uCIn3u) | Starting point of the date range to traverse (inclusive) |
| `until`       | [Timestamp](docId\:j1uFZtC3_yprDI3uCIn3u) | Ending point of the date range to traverse (exclusive)   |

### Return Type

[List](docId\:xWH_cUkHj9waqaEfb7H71) \<[FormAnswer](docId\:pjyHWzHYK83aOSCqV_K6l)>

### Examples

`findAnswersByFormAssessment('reviewScore', 'Manager Review', 'Q3 2024 Performance Review').mean{answerValue}`

Returns the average `reviewScore` from the `Manager Review` form specifically within the Q3 2024 cycle.

`findAnswersByFormAssessment('reviewScore', 'Manager Review', 'Q3 2024 Performance Review').groupBy{target.department}.mean{answerValue}`

Breaks down the average review score by department, scoped to a specific form and assessment cycle.

### Note

Use this function when you need both form and assessment scoping simultaneously. If you only need one of those constraints, `findAnswersByForm()` or `findAnswersByAssessment()` will be simpler.

[title] != (not-equals)
[path] Carrot reference/Operators/

Returns all records where the value of a given field and a given expression are **not** the same.

### Syntax

`expression1 != expression2`

### Sample usage

`tenure!=3` returns all records where `tenure` is not `3`.

`department!="engineering"` returns all records where `department` is not `engineering`.

`startDate!=('2021-01-01')` returns all records where `startDate` is not `01/01/2021`.

### Supported data types

- Evaluated expressions can be of any type.
- `String` comparisons are case-insensitive.
- If either side of the comparison is a `List` then the comparison will return true if there are any values in common.

### See also

- [= (equals)](docId:50o8vwTa5Zp6SV8DQdwjl)&#x20;
- [!= (not-equals)](docId\:G6PRxUTGM2VRCNW7HcqrY)&#x20;
- [! (not)](docId\:Hdagli50AFSEam4jX6B8N)&#x20;


[title] monthEnd()
[path] Carrot reference/Functions/

Returns the last day of a given month.

### Syntax

`monthEnd([date])`

- `date` - (optional) the date from which to derive the last day of that date's month.
- **Return type:&#x20;**[Date](docId\:xTAQdzvLBTAKjxRnpFwe9)&#x20;

### Sample usage

`monthEnd('2020-05-12')` returns `2020-05-31`.

### Supported data types

| **Input type**                            | **Return type**                         | **Logic**                                                                                                     |
| ----------------------------------------- | --------------------------------------- | ------------------------------------------------------------------------------------------------------------- |
| ****[Date](docId\:xTAQdzvLBTAKjxRnpFwe9)  | [Date](docId\:xTAQdzvLBTAKjxRnpFwe9)    | The input date specifies the desired month. The month is then used to determine the final date in that month. |
| *Unsupported data types*                  | **[Null](docId\:N9trVqonnBknqL9DrNBP6)  | Unsupported data types return `Null`.                                                                         |


[title] findResponses()
[path] Carrot reference/Functions/

Returns form responses for a particular form submitted over a period of time.

### Syntax

`findResponses(form[, from][, until])`

### Parameters

| **Parameter** | **Type**                                   | **Description**                                          |
| ------------- | ------------------------------------------ | -------------------------------------------------------- |
| `form`        | [String](docId\:Ujw2AQAktel5uukLuP73S)     | Name or ID of the form                                   |
| `from`        | [Timestamp](docId\:j1uFZtC3_yprDI3uCIn3u)  | Starting point of the date range to traverse (inclusive) |
| `until`       | [Timestamp](docId\:j1uFZtC3_yprDI3uCIn3u)  | Ending point of the date range to traverse (exclusive)   |

### Return Type

[List](docId\:xWH_cUkHj9waqaEfb7H71) \<[FormResponse](docId\:lIHL9I6DR0EINbNNDG2ec) >

### Examples

`findResponses('1:1 Form', '-30d').count()`

Returns the number of form responses that have been submitted in the past 30 days.

`findResponses('Manager Review', '2024-01-01', '2025-01-01').mean{answerValue.reviewScore}`

Returns the average review score of all submissions of the `Manager Review` form submitted in calendar year 2024.

`findResponses('Shoutout', intervalFrom, intervalUntil).groupBy{submitPerson}.count()`&#x20;

In a Dashboard, return the top submitters of the `Shoutout` form.

`findResponses('Shoutout', intervalFrom, intervalUntil).groupBy{target}.count()`&#x20;

In a Dashboard, return the top recipients of the `Shoutout` form.

[title] findAnswersByTarget()
[path] Carrot reference/Functions/

Returns individual form answers for a specific question where the **target** (the person the form is about) matches a given person, optionally filtered by date range.

This is the answer-level equivalent of `findResponsesByTarget()` — useful for aggregating scores or values from a single question across all submissions about a specific employee.

### Syntax

`findAnswersByTarget(question, target[, from][, until])`

### Parameters

| **Parameter** | **Type**                                  | **Description**                                          |
| ------------- | ----------------------------------------- | -------------------------------------------------------- |
| `question`    | [String](docId\:Ujw2AQAktel5uukLuP73S)    | Name or ID of the question/field to retrieve answers for |
| `target`      | Person                                    | The person the form responses are about                  |
| `from`        | [Timestamp](docId\:j1uFZtC3_yprDI3uCIn3u) | Starting point of the date range to traverse (inclusive) |
| `until`       | [Timestamp](docId\:j1uFZtC3_yprDI3uCIn3u) | Ending point of the date range to traverse (exclusive)   |

### Return Type

[List](docId\:xWH_cUkHj9waqaEfb7H71) \<[FormAnswer](docId\:pjyHWzHYK83aOSCqV_K6l)>

### Examples

`findAnswersByTarget('managerReviewRating', person, '-365d').mean{answerValue}`

Returns the average manager review rating given about the current person in the past year.

`findAnswersByTarget('peerFeedbackImpactRating', person, '-180d').count()`

Counts the number of peer feedback impact ratings submitted about the current person in the past 6 months.

[title] findAnswers()
[path] Carrot reference/Functions/

Returns individual form answers for a specific question across all form submissions, optionally filtered by date range.

While `findResponses()` returns whole form submissions, `findAnswers()` drills down to the level of a single question — letting you aggregate or analyze the values given for a specific field across many responses.

### Syntax

`findAnswers(question[, from][, until])`

### Parameters

| **Parameter** | **Type**                                  | **Description**                                          |
| ------------- | ----------------------------------------- | -------------------------------------------------------- |
| `question`    | [String](docId\:Ujw2AQAktel5uukLuP73S)    | Name or ID of the question/field to retrieve answers for |
| `from`        | [Timestamp](docId\:j1uFZtC3_yprDI3uCIn3u) | Starting point of the date range to traverse (inclusive) |
| `until`       | [Timestamp](docId\:j1uFZtC3_yprDI3uCIn3u) | Ending point of the date range to traverse (exclusive)   |

### Return Type

[List](docId\:xWH_cUkHj9waqaEfb7H71) \<[FormAnswer](docId\:pjyHWzHYK83aOSCqV_K6l)>

### Examples

`findAnswers('managerReviewRating', '-365d').mean{answerValue}`

Returns the average manager review rating submitted across the organization in the past year.

`findAnswers('oooRating', intervalFrom, intervalUntil).groupBy{submitPerson}.mean{answerValue}`

In a Dashboard, returns the average 1:1 performance self-rating per person over the dashboard's time interval.

### See Also

- `findAnswersByForm()` — scope answers to a specific form
- `findAnswersByAssessment()` — scope answers to a specific assessment cycle
- `findAnswersByTarget()` — scope answers about a specific person

[title] grantedShares()
[path] Carrot reference/Functions/

Returns all of the shares that were granted between two specified dates.

### Syntax

`grantedShares(fromDate, untilDate[, filters])`

- `fromDate` - the date from which counting begins.
- `untilDate` - the date at which counting ceases.
- `filters` - optional modifiers.
- **Return type**: [Number](docId\:ucI5tCTfVBhonEJ6ZQijg)&#x20;

### Sample usage

`grantedShares('2000-01-01', '2020-03-02')` returns the number of shares that were granted between `2000-01-01` and `2020-03-02`.

### Supported data types

| **Input type**                                 | **Return type**                         | **Logic**                                                                                                    |
| ---------------------------------------------- | --------------------------------------- | ------------------------------------------------------------------------------------------------------------ |
| ****[Date](docId\:xTAQdzvLBTAKjxRnpFwe9)  (x2) | [Number](docId\:ucI5tCTfVBhonEJ6ZQijg)  | The function will count the number of granted shares beginning with `fromDate`, and ending with `untilDate`. |
| *Unsupported data types*                       | **[Null](docId\:N9trVqonnBknqL9DrNBP6)  | Unsupported data types return `Null`.                                                                        |


[title] findAnswersByAssessment()
[path] Carrot reference/Functions/

Returns individual form answers for a specific question scoped to a specific assessment cycle, optionally filtered by date range.

This is the answer-level equivalent of `findResponsesByAssessment()` — useful when you want to aggregate scores or values from a single question across all participants in a given review cycle.

### Syntax

`findAnswersByAssessment(question, assessment[, from][, until])`

### Parameters

| **Parameter** | **Type**                                  | **Description**                                          |
| ------------- | ----------------------------------------- | -------------------------------------------------------- |
| `question`    | [String](docId\:Ujw2AQAktel5uukLuP73S)    | Name or ID of the question/field to retrieve answers for |
| `assessment`  | [String](docId\:Ujw2AQAktel5uukLuP73S)    | Name or ID of the assessment cycle                       |
| `from`        | [Timestamp](docId\:j1uFZtC3_yprDI3uCIn3u) | Starting point of the date range to traverse (inclusive) |
| `until`       | [Timestamp](docId\:j1uFZtC3_yprDI3uCIn3u) | Ending point of the date range to traverse (exclusive)   |

### Return Type

[List](docId\:xWH_cUkHj9waqaEfb7H71) \<[FormAnswer](docId\:pjyHWzHYK83aOSCqV_K6l)>

### Examples

`findAnswersByAssessment('managerReviewRating', 'Q3 2024 Performance Review').mean{answerValue}`

Returns the average manager review rating across all participants in the Q3 2024 cycle.

`findAnswersByAssessment('managerReviewRating', 'Q3 2024 Performance Review').groupBy{target.department}.mean{answerValue}`

Breaks down the average manager review rating by department for the specified cycle.

[title] <= (less-than-equals)
[path] Carrot reference/Operators/

Returns all records where the value of one expression or field is less than or equal to the value of another expression or field.

### Syntax

`expression <= expression`

### Sample usage

`tenure <= 3` return all records where `tenure` is less than or equal to `3`.

`base <= 100000` returns all records where `base` is less than or equal to $100,000.

### Supported data types

- Number
- Percent
- Money
- Date
- String
- Shares

**Note**: When a Money value is compared to a Number, the Money value is compared as an amount in the Org's primary currency.

### See also

- [\< (less-than)](docId\:dfZeov4u--zpsLRwr83bl)&#x20;
- [> (greater-than)](docId\:KC0htlkxUvbamz_X6QFT9)&#x20;
- [> (greater-than)](docId\:KC0htlkxUvbamz_X6QFT9)&#x20;


[title] distance()
[path] Carrot reference/Functions/

Returns the distance between built-in addresses in ChartHop in the specified units.

### Syntax

`distance(point1, point2[, 'unit'])`

- `point1` - the first location from which to measure distance.
- `point2` - the destination to which the function measures distance.
- `unit` - (optional) the units of the returned distance.
  - Accepted values are: `meters` (default), `miles`, `km`.
- **Return type:** [Number](docId\:ucI5tCTfVBhonEJ6ZQijg)&#x20;

### Sample usage

`distance(address, workAddress, 'meters')` returns the distance in meters.

`distance(address, workAddress, 'miles')` returns the distance in miles.

### Supported data types

| **Input type**                                    | **Return type**                         | **Logic**                                                                                                                      |
| ------------------------------------------------- | --------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------ |
| ****[Address](docId\:cprKzR-VnOLXIXCms6UGz)  (x2) | [Number](docId\:ucI5tCTfVBhonEJ6ZQijg)  | If two Addresses are passed, the distance between the two will be returned in the specified units. Default units are `meters`. |
| *Unsupported data types*                          | **[Null](docId\:N9trVqonnBknqL9DrNBP6)  | Unsupported data types return `Null`.                                                                                          |


[title] fiscalYear()
[path] Carrot reference/Functions/

Returns the fiscal year number for a given date, based on your organization's configured fiscal year start month.

If no date is provided, the current context date is used.

When the fiscal year does not start in January, the fiscal year number is the calendar year in which the fiscal year *ends*. For example, with a February fiscal year start, February 2025 through January 2026 is fiscal year 2026.

### Syntax

`fiscalYear(date)`

### Parameters

| **Parameter** | **Type**                             | **Description**                                                   |
| ------------- | ------------------------------------ | ----------------------------------------------------------------- |
| `date`        | [Date](docId\:xTAQdzvLBTAKjxRnpFwe9) | Optional. The date to get the fiscal year for. Defaults to today. |

### Return Type

[Number](docId\:ucI5tCTfVBhonEJ6ZQijg)

The fiscal year number.

### Examples

For an organization with a **default fiscal year** (starts in January):

`fiscalYear('2025-05-12')`

- Returns `2025`.

For an organization with a **fiscal year starting in February**:

`fiscalYear('2025-02-12')`

- Returns `2026` because February 2025 is the start of fiscal year 2026 (ending January 2026).

`fiscalYear('2025-01-12')`

- Returns `2025` because January 2025 is the last month of fiscal year 2025.

### Related Carrot

- [fiscalYearStart()](docId\:jpLzeg4Gb8l9ZHw1IITw6) - Returns the start date of the fiscal year
- [fiscalYearEnd()](docId\:jGCeF8TWW3ZsK3FvgDqMt) - Returns the end date of the fiscal year
- [fiscalQuarter()](docId\:usyc-tk0V_bMTgUHK9eiB) - Returns the fiscal quarter number (1–4)
- [year()](docId\:PLbQkxFaZuh1ntXwgkdb_) - Returns the calendar year

[title] nearestOffice()
[path] Carrot reference/Functions/

Returns the nearest geographic Location, including only Office locations (no Remote locations), to a particular person, group, or address.

### Syntax

`nearestOffice(entity[, list])`

### Parameters

| **Parameter** | **Type**                                                                                                                  | **Description**                                                                                                                                                                                                               |
| ------------- | ------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `entity`      | [Person](docId\:BZrX1MTDjk8CgkAW7UjQJ), [Group](docId:7kUM4sl_wT2Y_lDfMO6qb), or [Address](docId\:khI0D64Z7Evk0DsM_gJWf)  | The starting point to measure distance from                                                                                                                                                                                   |
| `list`        | [List](docId\:xWH_cUkHj9waqaEfb7H71)\<[Group](docId:7kUM4sl_wT2Y_lDfMO6qb)>                                               | (Optional) A list of Groups to compare against. The one that is the nearest geographically, and is also an Office, will be returned.<br />If this parameter is not provided, all Locations that are Offices will be compared. |

### Return Type

[Person](docId\:BZrX1MTDjk8CgkAW7UjQJ), [Group](docId:7kUM4sl_wT2Y_lDfMO6qb), or [Address](docId\:khI0D64Z7Evk0DsM_gJWf)

Whichever entity provided in the `list`, or whichever [Group](docId:7kUM4sl_wT2Y_lDfMO6qb) Location is closest geographically, will be returned.

### Examples

`nearestOffice(person)`

Returns the nearest Location, that is an office, to the person.

`nearestLocation(person, db.group.find{type:location and name:atlanta,boston,orlando})`

Returns which of the office locations matching "Atlanta", "Boston" or "Orlando" is closest to the current person.

[title] daysOffBetween()
[path] Carrot reference/Functions/

Returns the number of days off taken between two given dates.

### Syntax

`daysOffBetween(fromDate, toDate)`

- `fromDate` - the date from which to begin counting number of days off.
- `toDate` - the date at which counting stops. `toDate` is exclusive.&#x20;
- **Return type:** [Number](docId\:ucI5tCTfVBhonEJ6ZQijg)&#x20;

### Sample usage

`daysOffBetween('2020-10-12', '2020-11-12')` returns the number of days off taken during the specified one month period. This will return the number of days excluding `11/12/20`.&#x20;

### Supported data types

| **Input type**                                 | **Return type**                         | **Logic**                                                                                           |
| ---------------------------------------------- | --------------------------------------- | --------------------------------------------------------------------------------------------------- |
| ****[Date](docId\:xTAQdzvLBTAKjxRnpFwe9)  (x2) | [Number](docId\:ucI5tCTfVBhonEJ6ZQijg)  | The function will count the number of days off beginning with `fromDate`, and ending with `toDate`. |
| *Unsupported data types*                       | **[Null](docId\:N9trVqonnBknqL9DrNBP6)  | Unsupported data types return `Null`.                                                               |


[title] formatMoney()
[path] Carrot reference/Functions/

Converts a given value of type `Money` into a `String`, while retaining the currency type in the `String` output. Optionally specify the format and locale of the returned value.

### Syntax

`formatMoney(money[, format][, locale])`

- `money` - the Money value to be converted to a String
- `format` - a formatting string that uses Java's `DecimalFormat` to format the number. For example, `#.00` will format the returned value to two decimal places. Learn how to use `DecimalFormat` [here](https://docs.oracle.com/javase/7/docs/api/java/text/DecimalFormat.html), and view additional examples of `DecimalFormat` [here](http://tutorials.jenkov.com/java-internationalization/decimalformat.html).
- `locale` - an ISO 639-1 language code, optionally followed by an ISO 3166-1 country code, used to apply proper localization settings to the returned value. For example, `en-US` will format the returned value using US English settings, whereas `en-GB` will format using British English and `fr-CA` will format using French Canadian settings. If `locale` is not passed, it will use the org's default locale (typically `en-US`).
- **Return type:** [String](docId\:Ujw2AQAktel5uukLuP73S)&#x20;

### Sample usage

`formatMoney(base)` returns the value of `base` as a `String`, including the currency symbol.

### Supported data types

| **Input type**                            | **Return type**                         | **Logic**                                                                                        |
| ----------------------------------------- | --------------------------------------- | ------------------------------------------------------------------------------------------------ |
| ****[Money](docId:_kS5D2xbfoR9d8WfRIVnY)  | [String](docId\:Ujw2AQAktel5uukLuP73S)  | If a Money value is passed, it's value will returned as a String, including the currency symbol. |
| *Unsupported data types*                  | **[Null](docId\:N9trVqonnBknqL9DrNBP6)  | Unsupported data types return `Null`.                                                            |


[title] fiscalYearStart()
[path] Carrot reference/Functions/

Returns the start date of the fiscal year for a given date, based on your organization's configured fiscal year start month.

If no date is provided, the current context date is used.

### Syntax

`fiscalYearStart(date)`

### Parameters

| **Parameter** | **Type**                             | **Description**                                                                |
| ------------- | ------------------------------------ | ------------------------------------------------------------------------------ |
| `date`        | [Date](docId\:xTAQdzvLBTAKjxRnpFwe9) | Optional. The date to calculate the fiscal year start from. Defaults to today. |

### Return Type

[Date](docId\:xTAQdzvLBTAKjxRnpFwe9)

The first day of the fiscal year that contains the given date.

### Examples

For an organization with a **default fiscal year** (starts in January):

`fiscalYearStart('2025-05-12')`

- Returns `2025-01-01` because May 12, 2025 falls within the fiscal year starting January 1, 2025.

For an organization with a **fiscal year starting in February**:

`fiscalYearStart('2025-03-15')`

- Returns `2025-02-01` because March 15, 2025 falls within the fiscal year starting February 1, 2025.

`fiscalYearStart('2025-01-15')`

- Returns `2024-02-01` because January 15, 2025 falls within the fiscal year that started February 1, 2024.

### Related Functions

- [Relative Dates](docId\:LVlFv-1A-ePBySJQJ5FJC) - Relative date expressions including fiscal year references

[title] asOf()
[path] Carrot reference/Functions/

Returns the result of a Carrot expression on a particular date using either only Primary data, or both Primary and Scenario based data.

### Syntax

**asOf** - Returns the result of a Carrot expression on a particular date using data from both Primary, and the Scenario that the function is used in.

`asOf( date: Date, expression:{CQL} )`

- `date` - The selected date.
- `expression` - The Carrot (CQL) expression.
- **Return type:&#x20;**&#x54;he data type result of the Carrot (CQL) expression.&#x20;

| **Code sample**                           | **Result**                                                                                                                 |
| ----------------------------------------- | -------------------------------------------------------------------------------------------------------------------------- |
| `asOf('2017-07-01', {performanceRating})` | Returns the value of `performanceRating` as of January 7th, 2022 using data on Primary and from proposed Scenario changes. |

***

**asOfPrimary** - Returns the result of a Carrot expression on a particular date using data from Primary.

`asOfPrimary( date: Date, expression:{CQL} )`

- `date` - The selected date.
- `expression` - The Carrot (CQL) expression.
- **Return type:&#x20;**&#x54;he data type result of the Carrot (CQL)  expression.&#x20;

| **Code sample**                                 | **Result**                                                                                                                                                  |
| ----------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `asOfPrimary('2017-07-01', '2022-08-01", 2.5)`  | Returns the value of `performanceRating` as of January 7th, 2022, using **only the data on Primary.** Does not include data from proposed Scenario changes. |


[title] split()
[path] Carrot reference/Functions/

Divides a `String` into a list of Strings.

### Syntax

`split(string, delimiter)`

- `string` - the String value to be divided into an array of sub-Strings
- `delimiter` - the character or set of characters that indicate where to split the input String
- **Return type:** List

### Sample usage

`split("I am a string", ' ')` returns a list of component Strings consisting of `I`, `am`, `a`, and `string`

`split("This-is-text", '-')[2]` returns `text`

### Supported data types

| **Input type**                              | **Return type**                                          | **Logic**                                                                                                                                                           |
| ------------------------------------------- | -------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| ****[String](docId\:Ujw2AQAktel5uukLuP73S)  | List, optionally [String](docId\:Ujw2AQAktel5uukLuP73S)  | If a String is passed, that String will be parsed into an array (list) of component Strings. Specifying the array index will return the String value of that index. |
| *Unsupported data types*                    | **[Null](docId\:N9trVqonnBknqL9DrNBP6)                   | Unsupported data types return `Null`.                                                                                                                               |


[title] formatPercent()
[path] Carrot reference/Functions/

Converts a given value of type `Percent` into a `String`.

### Syntax

`formatPercent(percent[, format][, locale])`

- `percent` - the Percent value to be converted to a String
- `places` - the number of places of the returned value
- `locale` -&#x20;
- **Return type:** [String](docId\:Ujw2AQAktel5uukLuP73S)&#x20;

### Sample usage

`formatPercent(.5)` returns `50%` as a `String`.

### Supported data types

| **Input type**                               | **Return type**                         | **Logic**                                                           |
| -------------------------------------------- | --------------------------------------- | ------------------------------------------------------------------- |
| ****[Percent](docId\:FbN7bFaHlFPV4f1C53DxA)  | [String](docId\:Ujw2AQAktel5uukLuP73S)  | If a Percent value is passed, it's value will returned as a String. |
| *Unsupported data types*                     | **[Null](docId\:N9trVqonnBknqL9DrNBP6)  | Unsupported data types return `Null`.                               |


[title] year()
[path] Carrot reference/Functions/

Returns the Gregorian calendar year of a particular date.

### Syntax

`year(date)`

- `date` - the date from which to extrapolate the year
- **Return type:** [Number](docId\:ucI5tCTfVBhonEJ6ZQijg)&#x20;

### Sample usage

`year('2020-05-12')` returns `2020`.

### Supported data types

| **Input type**                            | **Return type**                         | **Logic**                                                                  |
| ----------------------------------------- | --------------------------------------- | -------------------------------------------------------------------------- |
| ****[Date](docId\:xTAQdzvLBTAKjxRnpFwe9)  | [Number](docId\:ucI5tCTfVBhonEJ6ZQijg)  | If a Date is passed, the year corresponding to that date will be returned. |
| *Unsupported data types*                  | **[Null](docId\:N9trVqonnBknqL9DrNBP6)  | Unsupported data types return `Null`.                                      |


[title] diffDays()
[path] Carrot reference/Functions/

Returns the number of days between two dates. The result is positive when `date2` is after `date1`, and negative when `date2` is before `date1`.

### Syntax

`diffDays(date1, date2)`

### Parameters

| **Parameter** | **Type**                             | **Description**                     |
| ------------- | ------------------------------------ | ----------------------------------- |
| `date1`       | [Date](docId\:xTAQdzvLBTAKjxRnpFwe9) | The date from which counting begins |
| `date2`       | [Date](docId\:xTAQdzvLBTAKjxRnpFwe9) | The date at which counting ends     |

### Return Type

[Number](docId\:ucI5tCTfVBhonEJ6ZQijg)

The number of days between the two dates.

### Examples

`diffDays('2025-01-01', '2025-12-31')`

- Returns `364`.

`diffDays('2025-03-15', '2025-01-01')`

- Returns `-73` because `date2` is before `date1`.

### Related Carrot

- [diffWeeks()](docId\:hUGMmHjqhZBnHOH3NjTfY) - Returns the number of whole weeks between two dates
- [diffMonths()](docId\:Jo2UBEInT1Mtnw1xnl7_2) - Returns the number of whole months between two dates
- [diffYears()](docId\:XtaGbzq7NGAiKtSG0pAOm) - Returns the number of whole years between two dates

[title] percent()
[path] Carrot reference/Functions/

Given a value, returns that value as a `Percent`.&#x20;

### Syntax

`percent(value[, places])`

- `value` - the `Number`, `Percent`, or `String` value to be converted to a `Percent`.
- `places` - the number of decimal places of the returned `Percent` value.
- **Return type:** [Percent](docId\:FbN7bFaHlFPV4f1C53DxA)&#x20;

### Sample usage

`percent(50/100)` returns `50%`.

`percent(0.75)` returns `75%`.

`percent(0.5667777, 3)` returns `56.678%`.

### Supported data types

| **Input type**                              | **Return type**                          | **Logic**                                                                                                                                               |
| ------------------------------------------- | ---------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------- |
| ****[Number](docId\:ucI5tCTfVBhonEJ6ZQijg)  | [Percent](docId\:FbN7bFaHlFPV4f1C53DxA)  | If a Number value is passed, a Percent will be returned only if the Number value is represented using division, ex. `50/100`, or if it is a decimal.    |
| [Percent](docId\:FbN7bFaHlFPV4f1C53DxA)     | [Percent](docId\:FbN7bFaHlFPV4f1C53DxA)  | If a Percent value is passed, the same Percent value will be returned.                                                                                  |
| [String](docId\:Ujw2AQAktel5uukLuP73S)      | [Percent](docId\:FbN7bFaHlFPV4f1C53DxA)  | If a String value is passed a Percent will be returned only if the String value can be converted to a Number value, and that Number value is a decimal. |
| *Unsupported data types*                    | **[Null](docId\:N9trVqonnBknqL9DrNBP6)   | Unsupported data types return `Null`.                                                                                                                   |


[title] diffYears()
[path] Carrot reference/Functions/

Returns the total number of years between two given dates.

### Syntax

`diffYears(date1, date2)`

- `date1` - the date from which counting begins.
- `date2` - the date at which counting ceases.
- **Return type:** [Number](docId\:ucI5tCTfVBhonEJ6ZQijg)&#x20;

### Sample usage

`diffYears('2021-10-11', '2020-10-11')` returns `1`.

### Supported data types

| **Input type**                                 | **Return type**                         | **Logic**                                                                                    |
| ---------------------------------------------- | --------------------------------------- | -------------------------------------------------------------------------------------------- |
| ****[Date](docId\:xTAQdzvLBTAKjxRnpFwe9)  (x2) | [Number](docId\:ucI5tCTfVBhonEJ6ZQijg)  | The function will count the number of years beginning with `date1`, and ending with `date2`. |
| *Unsupported data types*                       | **[Null](docId\:N9trVqonnBknqL9DrNBP6)  | Unsupported data types return `Null`.                                                        |


[title] fiscalQuarter()
[path] Carrot reference/Functions/

Returns the fiscal quarter number (1–4) for a given date, based on your organization's configured fiscal year start month.

If no date is provided, the current context date is used.

### Syntax

`fiscalQuarter(date)`

### Parameters

| **Parameter** | **Type**                             | **Description**                                                      |
| ------------- | ------------------------------------ | -------------------------------------------------------------------- |
| `date`        | [Date](docId\:xTAQdzvLBTAKjxRnpFwe9) | Optional. The date to get the fiscal quarter for. Defaults to today. |

### Return Type

[Number](docId\:ucI5tCTfVBhonEJ6ZQijg)

A number from 1 to 4 representing the fiscal quarter.

### Examples

For an organization with a **default fiscal year** (starts in January):

`fiscalQuarter('2025-05-12')`

- Returns `2` because May falls in Q2 (April–June).

For an organization with a **fiscal year starting in February**:

`fiscalQuarter('2025-02-15')`

- Returns `1` because February is the first month of the fiscal year, placing it in Q1.

`fiscalQuarter('2025-01-15')`

- Returns `4` because January falls in the last quarter of a Feb–Jan fiscal year.

### Related Carrot

- [fiscalQuarterStart()](docId\:iUPfFY8zADBoxeNN_JmvG) - Returns the start date of the fiscal quarter
- [fiscalQuarterEnd()](docId\:qJfKAw-X26wzRPkrkT2if) - Returns the end date of the fiscal quarter
- [fiscalYear()](docId:4MBFWcNMkOYKGkTotswdb) - Returns the fiscal year number
- [fiscalYearStart()](docId\:jpLzeg4Gb8l9ZHw1IITw6) - Returns the start date of the fiscal year

[title] fiscalQuarterStart()
[path] Carrot reference/Functions/

Returns the start date of the fiscal quarter for a given date, based on your organization's configured fiscal year start month.

If no date is provided, the current context date is used.

### Syntax

`fiscalQuarterStart(date)`

### Parameters

| **Parameter** | **Type**                             | **Description**                                                                                                                                                                                            |
| ------------- | ------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `date`        | [Date](docId\:xTAQdzvLBTAKjxRnpFwe9) | Optional. The date to calculate the fiscal quarter start from. Defaults to today. Accepts hardcoded dates (e.g. `'2025-05-01'`) or [Relative Dates](docId\:LVlFv-1A-ePBySJQJ5FJC) (e.g. `'+3m'`, `'-3m'`). |

### Return Type

[Date](docId\:xTAQdzvLBTAKjxRnpFwe9)

The first day of the fiscal quarter that contains the given date.

### Examples

For an organization with a **default fiscal year** (starts in January):

`fiscalQuarterStart('2025-05-12')`

- Returns `2025-04-01` because May 12 falls in Q2, which starts on April 1.

For an organization with a **fiscal year starting in February**:

`fiscalQuarterStart('2025-03-15')`

- Returns `2025-02-01` because March falls in fiscal Q1, which starts on February 1.

`fiscalQuarterStart('2025-01-15')`

- Returns `2024-11-01` because January falls in fiscal Q4, which started on November 1 of the previous calendar year.

### Using Relative Date Offsets

Relative date offsets can be passed to resolve dynamically relative to today, without needing to hardcode a specific date:

`fiscalQuarterStart('+3m')`

- Returns the start of the fiscal quarter that is 3 months from today (i.e. "next quarter" when called during the first month of the current quarter).

`fiscalQuarterStart('-3m')`

- Returns the start of the fiscal quarter that is 3 months ago (i.e. "last quarter").

This is especially useful for dynamic date filters in reports and dashboards. For example:

```javascript
closeDate >= fiscalQuarterStart('+3m') and closeDate <= fiscalQuarterEnd('+3m')
```

This expression will always refer to next quarter's date range without needing manual updates.

### Related Carrot

- [fiscalQuarterEnd()](docId\:qJfKAw-X26wzRPkrkT2if) - Returns the end date of the fiscal quarter
- [fiscalQuarter()](docId\:usyc-tk0V_bMTgUHK9eiB) - Returns the fiscal quarter number (1–4)
- [fiscalYearStart()](docId\:jpLzeg4Gb8l9ZHw1IITw6) - Returns the start date of the fiscal year
- [Relative Dates](docId\:LVlFv-1A-ePBySJQJ5FJC) - Relative date expressions supported in CQL

[title] diffWeeks()
[path] Carrot reference/Functions/

Returns the number of whole weeks between two dates. The result is positive when `date2` is after `date1`, and negative when `date2` is before `date1`.

### Syntax

`diffWeeks(date1, date2)`

### Parameters

| **Parameter** | **Type**                             | **Description**                     |
| ------------- | ------------------------------------ | ----------------------------------- |
| `date1`       | [Date](docId\:xTAQdzvLBTAKjxRnpFwe9) | The date from which counting begins |
| `date2`       | [Date](docId\:xTAQdzvLBTAKjxRnpFwe9) | The date at which counting ends     |

### Return Type

[Number](docId\:ucI5tCTfVBhonEJ6ZQijg)

The number of whole weeks between the two dates. Partial weeks are not counted.

### Examples

`diffWeeks('2025-01-01', '2025-12-31')`

- Returns `52`.

`diffWeeks('2025-01-01', '2025-01-08')`

- Returns `1` because there is exactly one full week between the two dates.

### Related Carrot

- [diffDays()](docId\:pRprI026iiuEbPHKNZw8U) - Returns the number of days between two dates
- [diffMonths()](docId\:Jo2UBEInT1Mtnw1xnl7_2) - Returns the number of whole months between two dates
- [diffYears()](docId\:XtaGbzq7NGAiKtSG0pAOm) - Returns the number of whole years between two dates

[title] formatDate()
[path] Carrot reference/Functions/

Converts a given value of type `Date` into a `String`.&#x20;

### Syntax

`formatDate(date,'format','locale')`

- `date` - the date to be formatted, eg. `startDateOrg`
- `format` - the format of the Date, eg. `'MM-dd-YYY'`
  - Supports any formatting inputs [from date-fns](https://date-fns.org/v3.3.1/docs/format).
- `locale` - (optional) the language of the date, eg. `'es'`
  - Default: `'en-US'`- American English
  - Supports any [IETF BCP 47 language tag](https://en.wikipedia.org/wiki/IETF_language_tag).&#x20;

### Sample usage

`formatDate(startDateOrg)`&#x20;
Returns the value of `startDateOrg` as a `String`. &#x20;

`formatDate(startDateOrg, 'EEEE, dd MMMM YYYY)`&#x20;
Returns the value of the `startDateOrg` formatted as a `String` for example "Wednesday, 15 June 2022."

`formatDate(startDateOrg, 'mm-dd-yyyy','es')`&#x20;
Returns the value of `startDateOrg` as a `String` in Spanish for example "Miercoles, 14 junio 2022"

### Supported data types

| **Input type**                            | **Return type**                         | **Logic**                                                        |
| ----------------------------------------- | --------------------------------------- | ---------------------------------------------------------------- |
| ****[Date](docId\:xTAQdzvLBTAKjxRnpFwe9)  | [String](docId\:Ujw2AQAktel5uukLuP73S)  | If a Date value is passed, it's value will returned as a String. |
| *Unsupported data types*                  | **[Null](docId\:N9trVqonnBknqL9DrNBP6)  | Unsupported data types return `Null`.                            |


[title] formatRound()
[path] Carrot reference/Functions/

Converts a given value into a `String`, rounded to specific decimal place. Accepts `Number`, `Money`, or `Percent` datatypes.

### Syntax

`formatRound(number[, places][, locale])`

- `number` - the Number value to be rounded
- `places` - the number of places of the returned value
- `locale` -&#x20;
- **Return type:** [String](docId\:Ujw2AQAktel5uukLuP73S)&#x20;

### Sample usage

`formatRound(10.101010, 2)` returns `"10.10"`.

`formatRound(base, 2)` returns the value of `base`, rounded to two decimal places, as a `String`.

### Supported data types

| **Input type**                             | **Return type**                         | **Logic**                                                                                             |
| ------------------------------------------ | --------------------------------------- | ----------------------------------------------------------------------------------------------------- |
| ****[Number](docId\:ucI5tCTfVBhonEJ6ZQijg) | [String](docId\:Ujw2AQAktel5uukLuP73S)  | The passed Number value is rounded to the specified decimal places, then converted to a String value. |
| *Unsupported data types*                   | **[Null](docId\:N9trVqonnBknqL9DrNBP6)  | Unsupported data types return `Null`.                                                                 |


[title] roundUp()
[path] Carrot reference/Functions/

Rounds a given value to the next largest integer.

### Syntax

`roundUp(number[, places])`

- `number` - the `Number` value to be evaluated.
- `places` (optional) - the number of places of the returned `Number` value.
- **Return type:** [Number](docId\:ucI5tCTfVBhonEJ6ZQijg) &#x20;

### Sample usage

`roundUp(4.5678, 2)` returns `4.57`

`roundUp(4.5678)` returns `5`

### Supported data types

| **Input type**                              | **Return type**                         | **Logic**                                                                                                                                   |
| ------------------------------------------- | --------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------- |
| ****[Number](docId\:ucI5tCTfVBhonEJ6ZQijg)  | [Number](docId\:ucI5tCTfVBhonEJ6ZQijg)  | If a Number value is passed, that Number value will be rounded up to the defined number of decimal places. Defaults to zero decimal places. |
| *Unsupported data types*                    | **[Null](docId\:N9trVqonnBknqL9DrNBP6)  | Unsupported data types return `Null`.                                                                                                       |


[title] usageDays()
[path] Carrot reference/Functions/

Returns the number of days that the current person being evaluated has used a particular ChartHop feature.

Typically this will be used for measuring user activity metrics.

### Syntax

`usageDays(feature, days)`

### Parameters

| **Parameter** | **Type**                                | **Description**                                                                                                                                                                                                                                                                                                                                                                                       |
| ------------- | --------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `feature`     | [String](docId\:Ujw2AQAktel5uukLuP73S)  | The feature to check, available features are:<br />* `any`- any usage of any feature
* `home` - Home Page
* `org`- Org Chart
* `sheet`- Data Sheet
* `map`- Map
* `calendar` - Calendar
* `scenario`- Scenarios
* `report`- Dashboards
* `review`- Reviews and Survey management
* `comp_review`- Comp Reviews
* `profile`- Profile pages
* `content` - Resources pages
* `ai_chat` - Ask ChartHop AI |
| `days`        | [Number](docId\:ucI5tCTfVBhonEJ6ZQijg)  | The number of days back to check                                                                                                                                                                                                                                                                                                                                                                      |
|               |                                         |                                                                                                                                                                                                                                                                                                                                                                                                       |

### Returns

[Number](docId\:ucI5tCTfVBhonEJ6ZQijg) - the number of days

### Example

`usageDays('org', 7)`

Returns the number of days, out of the past 7 days, that the person has used the Org Chart feature of ChartHop.


[title] subString()
[path] Carrot reference/Functions/

Given a `String` and specified parameters, returns a part of that `String`.

### Syntax

`subString(string, start[, length])`

- `string` - the `String` value from which to derive the returned `String`
- `start` - the starting index of the returned `String`
- `length` - (optional) the length of the returned `String`
- **Return type:** [String](docId\:Ujw2AQAktel5uukLuP73S)&#x20;

### Sample usage

`subString("Piece of cake.", 2)` returns `"ece of cake."`

`subString("Piece of cake.", 2, 3)` returns `"ece"`

### Supported data types

| **Input type**                              | **Return type**                         | **Logic**                                                                                                                                                                                                                                                                                                 |
| ------------------------------------------- | --------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| ****[String](docId\:Ujw2AQAktel5uukLuP73S)  | [String](docId\:Ujw2AQAktel5uukLuP73S)  | If a String value is passed, that value will be interpreted beginning with the `start` index. If a `length` is provided, the returned String will contain that many characters, beginning with the `index`. If not, the returned String will contain all remaining characters beginning with the `index`. |
| *Unsupported data types*                    | **[Null](docId\:N9trVqonnBknqL9DrNBP6)  | Unsupported data types return `Null`.                                                                                                                                                                                                                                                                     |


[title] diffMonths()
[path] Carrot reference/Functions/

Returns the total number of months between two given dates.

### Syntax

`diffMonths(date1, date2)`

- `date1` - the date from which counting begins.
- `date2` - the date at which counting ceases.
- **Return type:** [Number](docId\:ucI5tCTfVBhonEJ6ZQijg)&#x20;

### Sample usage

`diffMonths('2021-10-11', '2021-11-11')` returns `1`.

### Supported data types

| **Input type**                                 | **Return type**                         | **Logic**                                                                                     |
| ---------------------------------------------- | --------------------------------------- | --------------------------------------------------------------------------------------------- |
| ****[Date](docId\:xTAQdzvLBTAKjxRnpFwe9)  (x2) | [Number](docId\:ucI5tCTfVBhonEJ6ZQijg)  | The function will count the number of months beginning with `date1`, and ending with `date2`. |
| *Unsupported data types*                       | **[Null](docId\:N9trVqonnBknqL9DrNBP6)  | Unsupported data types return `Null`.                                                         |


[title] min()
[path] Carrot reference/Functions/

Returns the lowest of all values passed as parameters.

### Syntax

`min(value, value2, ...,)`

- `value` - the first value.
- `value2` - the second value.

**Return type:&#x20;**[Number](docId\:ucI5tCTfVBhonEJ6ZQijg) , [Percent](docId\:FbN7bFaHlFPV4f1C53DxA) , [Money](docId:_kS5D2xbfoR9d8WfRIVnY).

### Sample usage

`min(-2, 3, 4)` returns `-2`.

### Supported data types

| **Input type**                             | **Return type**                          | **Logic**                                                                                            |
| ------------------------------------------ | ---------------------------------------- | ---------------------------------------------------------------------------------------------------- |
| ****[Number](docId\:ucI5tCTfVBhonEJ6ZQijg) | [Number](docId\:ucI5tCTfVBhonEJ6ZQijg)   | If a set of Number values is passed, the lowest Number value will be returned as a Number value.     |
| [Percent](docId\:FbN7bFaHlFPV4f1C53DxA)    | [Percent](docId\:FbN7bFaHlFPV4f1C53DxA)  | If a set of Percent values is passed, the lowest Percent value will be returned as a Percent value.  |
| [Money](docId:_kS5D2xbfoR9d8WfRIVnY)       | [Money](docId:_kS5D2xbfoR9d8WfRIVnY)     | If a set of Money values is passed, the lowest Money value will be returned as a Money value.        |
| *Unsupported data types*                   | **[Null](docId\:N9trVqonnBknqL9DrNBP6)   | Unsupported data types return `Null`.                                                                |


[title] >= (greater-than-equals)
[path] Carrot reference/Operators/

Returns all records where the value of one expression or field is greater than or equal to the value of another expression or field.

### Syntax

`expression >= expression`

### Sample usage

`tenure >= 3` return all records where `tenure` is greater than or equal to `3`.

`base >= 100000` returns all records where `base` is greater than or equal to $100,000.

### Supported data types

- Number
- Percent
- Money
- Date
- String
- Shares

**Note**: When a Money value is compared to a Number, the Money value is compared as an amount in the Org's primary currency.

### See also

- [> (greater-than)](docId\:KC0htlkxUvbamz_X6QFT9)&#x20;
- [\< (less-than)](docId\:dfZeov4u--zpsLRwr83bl)&#x20;
- [\<= (less-than-equals)](docId\:IBS4w-l1PwA6xMSwyvUjq)&#x20;


[title] date()
[path] Carrot reference/Functions/

Converts a value to a [Date](docId\:xTAQdzvLBTAKjxRnpFwe9), including handling relative dates.

### Syntax

`date(value[, startingDate])`&#x20;

- `value` - the value to convert to a date. This value may be an exact date ("2025-01-01"), or in [Relative Dates](docId\:LVlFv-1A-ePBySJQJ5FJC) form ("+1w+3d")
  - If passed a [Number](docId\:ucI5tCTfVBhonEJ6ZQijg), then the number will be assumed to be a Unix Timestamp (seconds since the epoch)
- `startingDate` (optional) if passed, will use this date as the starting-point date for the relative date

### Return Type

[Date](docId\:xTAQdzvLBTAKjxRnpFwe9), or [Null](docId\:N9trVqonnBknqL9DrNBP6) if unable to parse or convert the value into a date

### Examples

`date()` returns the current date.

`date("-3m")` returns the date three months ago

`date(1744206569)` returns the date of April 9, 2025 (by converting from a unix timestamp)

`date("2025-12-25")` returns the exact date of Dec 25, 2025

`date("+6w", createDate)` returns a date six weeks from the value of `createDate`.

[title] fiscalQuarterEnd()
[path] Carrot reference/Functions/

Returns the last date of the fiscal quarter for a given date, based on your organization's configured fiscal year start month.

If no date is provided, the current context date is used.

### Syntax

`fiscalQuarterEnd(date)`

### Parameters

| **Parameter** | **Type**                             | **Description**                                                                                                                                                                                          |
| ------------- | ------------------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `date`        | [Date](docId\:xTAQdzvLBTAKjxRnpFwe9) | Optional. The date to calculate the fiscal quarter end from. Defaults to today. Accepts hardcoded dates (e.g. `'2025-05-01'`) or [Relative Dates](docId\:LVlFv-1A-ePBySJQJ5FJC) (e.g. `'+3m'`, `'-3m'`). |

### Return Type

[Date](docId\:xTAQdzvLBTAKjxRnpFwe9)

The last day of the fiscal quarter that contains the given date.

### Examples

For an organization with a **default fiscal year** (starts in January):

`fiscalQuarterEnd('2025-05-12')`

- Returns `2025-06-30` because May 12 falls in Q2, which ends on June 30.

For an organization with a **fiscal year starting in February**:

`fiscalQuarterEnd('2025-02-15')`

- Returns `2025-04-30` because February falls in fiscal Q1, which ends on April 30.

`fiscalQuarterEnd('2025-01-15')`

- Returns `2025-01-31` because January falls in fiscal Q4, which ends on January 31.

### Using Relative Date Offsets

Relative date offsets can be passed to resolve dynamically relative to today, without needing to hardcode a specific date:

`fiscalQuarterEnd('+3m')`

- Returns the end of the fiscal quarter that is 3 months from today (i.e. "next quarter" when called during the first month of the current quarter).

`fiscalQuarterEnd('-3m')`

- Returns the end of the fiscal quarter that is 3 months ago (i.e. "last quarter").

This is especially useful for dynamic date filters in reports and dashboards. For example:

```javascript
closeDate >= fiscalQuarterStart('+3m') and closeDate <= fiscalQuarterEnd('+3m')
```

This expression will always refer to next quarter's date range without needing manual updates.

### Related Carrot

- [fiscalQuarterStart()](docId\:iUPfFY8zADBoxeNN_JmvG) - Returns the start date of the fiscal quarter
- [fiscalQuarter()](docId\:usyc-tk0V_bMTgUHK9eiB) - Returns the fiscal quarter number (1–4)
- [fiscalYearEnd()](docId\:jGCeF8TWW3ZsK3FvgDqMt) - Returns the end date of the fiscal year
- [Relative Dates](docId\:LVlFv-1A-ePBySJQJ5FJC) - Relative date expressions supported in CQL

[title] vestShares()
[path] Carrot reference/Functions/

Given a start date and end date, returns the number of shares that will vest over that period of time.

### Syntax

`vestShares(fromDate, untilDate)`

- `fromDate` - the first date in the range
- `untilDate` - the second date in the range
- **Return type:** [Money](docId:_kS5D2xbfoR9d8WfRIVnY)&#x20;

### Sample usage

`vestValue('2020-01-01', '2021-01-01')` returns the number of shares that will vest over the defined date range

### Supported data types

| **Input type**                            | **Return type**                         | **Logic**                                                                                      |
| ----------------------------------------- | --------------------------------------- | ---------------------------------------------------------------------------------------------- |
| ****[Date](docId\:xTAQdzvLBTAKjxRnpFwe9)  | [Money](docId:_kS5D2xbfoR9d8WfRIVnY)    | If two Dates are passed, the number of shares that will vest over that range will be returned. |
| *Unsupported data types*                  | **[Null](docId\:N9trVqonnBknqL9DrNBP6)  | Unsupported data types return `Null`.                                                          |


[title] jobFieldChanges()
[path] Carrot reference/Functions/

Return a sequence of changes for the current job, for the given field

### Syntax

Single field: `jobFieldChanges(fieldCode, fromDate, untilDate)`

Multiple fields: `jobFieldChanges(['fieldCode1', 'fieldCode2'], fromDate, untilDate)`



### Parameters

| **Parameter** | **Type**                                   | **Description**                                          |
| ------------- | ------------------------------------------ | -------------------------------------------------------- |
| `field`       | [String](docId\:Ujw2AQAktel5uukLuP73S)     | The slug or ID of a field                                |
| `from`        | [Timestamp](docId\:j1uFZtC3_yprDI3uCIn3u)  | Starting point of the date range to traverse (inclusive) |
| `until`       | [Timestamp](docId\:j1uFZtC3_yprDI3uCIn3u)  | Ending point of the date range to traverse (exclusive)   |

### Return Type

[Sequence](docId\:JG4itlQWafzLpArttFo67) \<[Job Changes](docId\:ciPz7Jxm4WXxPXmDx-uwB)>

| **Parameter**      | **Type**                                     | **Description**                                       |
| ------------------ | -------------------------------------------- | ----------------------------------------------------- |
| `change.fieldCode` | [String](docId\:Ujw2AQAktel5uukLuP73S)<br /> | The value of the field that was updated by the change |
| `change.date`      | [Date](docId\:xTAQdzvLBTAKjxRnpFwe9)         | Returns the data the that the change occured.         |
| `change.type`      | [String](docId\:Ujw2AQAktel5uukLuP73S)       | Will return one of `CREATE` `UPDATE` or `DELETE`      |

### Examples

`jobFieldChanges(baseComp, '-5y').count()`

Returns how many times the `baseComp` field has changed in the last 5 years for a specific job.&#x20;

Would return `3` if the person had 3 changes to their `baseComp` field in the time period.&#x20;



`jobFieldChanges(baseComp, '2024-01-01', '2025-01-01')`

Returns a sequence of changes to the base comp field between 1/1/2024 and 1/1/2025 for a specific job.&#x20;



`jobFieldChanges([department,team,location], '2020-01-01', '2025-01-01')`

Returns a sequence of all changes to the `department, team, or location` fields for a specific job.&#x20;



`jobFieldChanges('title').map{it.update.title}`

Example return:  `["Software Engineer", "Senior Software Engineer"]`

Returns an array of all of the titles across the changes.&#x20;



`jobFieldChanges('title').map{date}`

Example Return: `[2020-01-01, 2020-01-02]`

Returns an array of all of the dates of that the changes occured on.&#x20;



### CQLT Example Template

This would retun a table row with the date of the change and the field that was updated with the title.&#x20;

:::CodeblockTabs
Function

```javascript
  {% for change in jobFieldChanges('title') %}
  <tr>
  <td>{{change.date}}</td>
  <td>{{change.title}}</td>
  </tr>
  {% endfor %}
```
:::


[title] round()
[path] Carrot reference/Functions/

Rounds a given value to the defined number of decimal places.

### Syntax

`round(number[, places])`

- `number` - the `Number` value to be evaluated.
- `places` (optional) - the number of places of the returned `Number` value.
- **Return type:** [Number](docId\:ucI5tCTfVBhonEJ6ZQijg)&#x20;

### Sample usage

`round(4.5678, 2)` returns `4.57`.

`round(4.5678)` returns `5`.

### Supported data types

| **Input type**                              | **Return type**                         | **Logic**                                                                                                                                |
| ------------------------------------------- | --------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- |
| ****[Number](docId\:ucI5tCTfVBhonEJ6ZQijg)  | [Number](docId\:ucI5tCTfVBhonEJ6ZQijg)  | If a Number value is passed, that Number value will be rounded to the defined number of decimal places. Defaults to zero decimal places. |
| *Unsupported data types*                    | **[Null](docId\:N9trVqonnBknqL9DrNBP6)  | Unsupported data types return `Null`.                                                                                                    |


[title] > (greater-than)
[path] Carrot reference/Operators/

Returns all records where the value of one expression or field is greater than the value of another expression or field.

### Syntax

`expression > expression`

### Sample usage

`tenure > 3` return all records where `tenure` is greater than `3`.

`('2021-01-01') > ('2020-01-01')` evaluates to `true`.

`base > 100000` returns all records where `base` is greater than $100,000.

### Supported data types

- Number
- Percent
- Money
- Date
- String
- Shares

**Note**: When a Money value is compared to a Number, the Money value is compared as an amount in the Org's primary currency.

### See also

- [\< (less-than)](docId\:dfZeov4u--zpsLRwr83bl)&#x20;
- [\<= (less-than-equals)](docId\:IBS4w-l1PwA6xMSwyvUjq)&#x20;
- [>= (greater-than-equals)](docId\:YE9GwBz-iTgpXtBDzxD_A)&#x20;


[title] - (subtract)
[path] Carrot reference/Operators/

An operator used to subtract an expression from another expression.

### Syntax

`valueOne - valueTwo`

### Sample usage

`(1 - 2) - 3` returns `-4`

`('2021-01-02') - 1` returns `2021-01-01`

### Supported data types

- If a `Number`, `Money` value, or `Percent` is subtracted from an expression of the same type, the difference between the two values will be returned.
- If the left side is a `Date`, and the right side is a `Number`, it will return the date minus that many days.
- `Date` is subtracted from another `Date`the number of days between them will be returned.
- If a `Number` value is subtracted from a `Money` value, the `Money` value will decrease by the value of the `Number`.
- If a `Percent` value is subtracted from a `Number` value, the `Number` value will decrease by the value of the `Percent`; the reverse operation will also work, however the returned value will still be of type `Number`.

### See also

- [Number](docId\:ucI5tCTfVBhonEJ6ZQijg)
- [Money](docId:_kS5D2xbfoR9d8WfRIVnY)&#x20;
- [Percent](docId\:FbN7bFaHlFPV4f1C53DxA)&#x20;
- [String](docId\:Ujw2AQAktel5uukLuP73S)&#x20;
- [Date](docId\:xTAQdzvLBTAKjxRnpFwe9)
- [+ (add)](docId\:DsLKNiKEXsESezTV3C5Zv)&#x20;


[title] : (match)
[path] Carrot reference/Operators/

Returns true where the value of a given field and a given expression partially match.

### Syntax

`expression:match`

- Single-word `Strings` do not require quotations.
- Multi-word `Strings` require quotations: `field:"multi-word string"`.

### Sample usage

`department:engineering` returns all records where `department` contains the string `engineering`.

`department:eng` returns all records where `department` contains the string \`eng\`.

`department:engineering,sales,"customer success"` returns all records where `department` matches any of `engineering`, `sales`, `customer success`.

`department:*` returns all records where `department` has any value.

`department:` returns all records where `department` has no value.

### Supported data types

- Anything after the `:` must be a \`String\`. To compare two fields to each other, or to perform an exact comparison, use the [= (equals)](docId:50o8vwTa5Zp6SV8DQdwjl) operator.

### See also

- [= (equals)](docId:50o8vwTa5Zp6SV8DQdwjl)&#x20;
- [!= (not-equals)](docId\:G6PRxUTGM2VRCNW7HcqrY)&#x20;
- [! (not)](docId\:Hdagli50AFSEam4jX6B8N)&#x20;


[title] + (add)
[path] Carrot reference/Operators/

An operator used to add two or more expressions.

### Syntax

`valueOne + valueTwo + valueThree + ...`

### Sample usage

`1 + 2 + 3` returns `6`

`"concat" + "enate"` returns `concatenate`

`('2021-01-01') + 1` returns `2021-01-02`

### Supported data types

- If two `Numbers`, `Money` values, or `Percents` are added together, the values will be added.
- If either side is a `String`, then both sides will be concatenated as a `String`.
- If either side is a `List`, then both sides are cast to `Lists` and the two `Lists` will be joined together.
- If the left side is a `Date`, and the right side is a `Number`, it will return the date plus that many days.
- If a `Money` value and a `Number` value are added, the `Money` value will increase by the value of the `Number`.
- If a `Percent` value and a `Number` value are added, the `Number` value will increase by the value of the `Percent`.

### See also

- [Number](docId\:ucI5tCTfVBhonEJ6ZQijg)
- [Money](docId:_kS5D2xbfoR9d8WfRIVnY)&#x20;
- [Percent](docId\:FbN7bFaHlFPV4f1C53DxA)&#x20;
- [String](docId\:Ujw2AQAktel5uukLuP73S)&#x20;
- [Date](docId\:xTAQdzvLBTAKjxRnpFwe9)&#x20;
- [- (subtract)](docId\:X9JOQMWHVhTajOgmjlbUa)&#x20;


[title] nextWorkDay()
[path] Carrot reference/Functions/

Returns the date of the next work day for the organization.&#x20;

A work day is defined as the next non-holiday, non-weekend date.

### Syntax

`nextWorkDay([date])`

- `date` - the value to be evaluated by the function.
- **Return type:&#x20;**[Date](docId\:xTAQdzvLBTAKjxRnpFwe9)&#x20;



### Sample usage

`abs(-10)` returns `10`.

### Supported data types

| **Input type**           | **Return type**                         | **Logic**                                                           |
| ------------------------ | --------------------------------------- | ------------------------------------------------------------------- |
| Date                     |                                         | No type conversion.                                                 |
| *Unsupported data types* | **[Null](docId\:N9trVqonnBknqL9DrNBP6)  | Unsupported data types return [Null](docId\:N9trVqonnBknqL9DrNBP6). |


[title] findAnswersByForm()
[path] Carrot reference/Functions/

Returns individual form answers for a specific question, scoped to a specific form, optionally filtered by date range.

This is useful when the same question name exists on multiple forms and you need to disambiguate — or when you want to analyze answers from one particular form only.

### Syntax

`findAnswersByForm(question, form[, from][, until])`

### Parameters

| **Parameter** | **Type**                                  | **Description**                                          |
| ------------- | ----------------------------------------- | -------------------------------------------------------- |
| `question`    | [String](docId\:Ujw2AQAktel5uukLuP73S)    | Name or ID of the question/field to retrieve answers for |
| `form`        | [String](docId\:Ujw2AQAktel5uukLuP73S)    | Name or ID of the form                                   |
| `from`        | [Timestamp](docId\:j1uFZtC3_yprDI3uCIn3u) | Starting point of the date range to traverse (inclusive) |
| `until`       | [Timestamp](docId\:j1uFZtC3_yprDI3uCIn3u) | Ending point of the date range to traverse (exclusive)   |

### Return Type

[List](docId\:xWH_cUkHj9waqaEfb7H71) \<[FormAnswer](docId\:pjyHWzHYK83aOSCqV_K6l)>

### Examples

`findAnswersByForm('reviewScore', 'Manager Review', '-365d').mean{answerValue}`

Returns the average `reviewScore` answer submitted via the `Manager Review` form in the past year.

`findAnswersByForm('oooRating', '1:1 Notes', intervalFrom, intervalUntil).groupBy{submitPerson}.mean{answerValue}`

In a Dashboard, breaks down average 1:1 self-ratings by person, scoped to the `1:1 Notes` form only.

### Note

If the question is only used on one form, `findAnswers()` and `findAnswersByForm()` will produce the same result. Use `findAnswersByForm()` when disambiguation is needed.

[title] formatNumber()
[path] Carrot reference/Functions/

Converts a given value of type `Number` into a `String`.

### Syntax

`formatNumber(number[, format][, locale])`

- &#x20;`number` - the Number value to be converted to a String.
- `format` -&#x20;
- `locale` -&#x20;
- **Return type:** [String](docId\:Ujw2AQAktel5uukLuP73S)&#x20;

### Sample usage

`formatNumber(20)` returns `20` as a `String`.

### Supported data types

| **Input type**                             | **Return type**                         | **Logic**                                                          |
| ------------------------------------------ | --------------------------------------- | ------------------------------------------------------------------ |
| ****[Number](docId\:ucI5tCTfVBhonEJ6ZQijg) | [String](docId\:Ujw2AQAktel5uukLuP73S)  | If a Number value is passed, it's value will returned as a String. |
| *Unsupported data types*                   | **[Null](docId\:N9trVqonnBknqL9DrNBP6)  | Unsupported data types return `Null`.                              |


[title] ? (ternary)
[path] Carrot reference/Operators/

Evaluates the truthiness of an expression, and returns the value of one of two expressions based on that outcome.

### Syntax

`condition ? ifTrue : ifFalse`

- `condition` - the conditional expression to be evaluated for truthiness.
- `ifTrue` - the expression to be evaluated if `condition` is found to be truthy.
- `ifFalse` - the expression to be evaluated if `condition` is not found to be truthy.

### Sample usage

`base * (tenure < 12 ? tenure / 12 : 1)` returns the prorated base salary of someone if they are under 12 months tenure, otherwise returns their base.&#x20;

### See also

- [?: (elvis)](docId\:X-HM1Bldw8aWd8-byRlZV)&#x20;
- [. (dot)](docId\:t8HBpyTpsANh8YfiZ4YJf)&#x20;
- [&& (and)](docId\:UVpXLLWGCPZRpr42E2NXm)&#x20;


[title] && (and)
[path] Carrot reference/Operators/

A logic operator used to evaluate the truthiness of two or more expressions.

### Syntax

`booleanExpression && booleanExpression && ...`

### Sample usage

`directs>0 && department:engineering` returns all records with directs greater than zero **and** where department is engineering.

### See also

- [|| (or)](docId\:A7wCSbxwsJEwfYJwbuH8z)&#x20;
- [if](docId\:JUlRVGgdPgy_iHcBbgTNM)&#x20;
- [! (not)](docId\:Hdagli50AFSEam4jX6B8N)&#x20;


[title] lowercase()
[path] Carrot reference/Functions/

Returns a [String](docId\:Ujw2AQAktel5uukLuP73S) with all characters lowercased.

### Syntax

`lowercase(string)`

- `string` - the String value to be lowercased
- **Return type:** [String](docId\:Ujw2AQAktel5uukLuP73S)&#x20;

### Examples

- `lowercase("Hello world")` returns `hello world`
- `lowercase(title)` returns the current job's title, lowercased


[title] mean()
[path] Carrot reference/Functions/

Returns the mean value of all the passed parameters, excluding `Nulls`.

### Syntax

`mean(value, value2, ...,)`

- `value` - the first value to be averaged.
- `value2` - the second value to be averaged.

**Return type:&#x20;**[Number](docId\:ucI5tCTfVBhonEJ6ZQijg) , [Percent](docId\:FbN7bFaHlFPV4f1C53DxA) , [Money](docId:_kS5D2xbfoR9d8WfRIVnY).

### Sample usage

`mean(2, 10)` returns `6`.

### Supported data types

| **Input type**                             | **Return type**                          | **Logic**                                                                                          |
| ------------------------------------------ | ---------------------------------------- | -------------------------------------------------------------------------------------------------- |
| ****[Number](docId\:ucI5tCTfVBhonEJ6ZQijg) | [Number](docId\:ucI5tCTfVBhonEJ6ZQijg)   | If a set of Number values is passed, the mean of the values will be returned as a Number value.    |
| [Percent](docId\:FbN7bFaHlFPV4f1C53DxA)    | [Percent](docId\:FbN7bFaHlFPV4f1C53DxA)  | If a set of Percent values is passed, the mean of the values will be returned as a Percent value.  |
| [Money](docId:_kS5D2xbfoR9d8WfRIVnY)       | [Money](docId:_kS5D2xbfoR9d8WfRIVnY)     | If a set of Money values is passed, the mean of the values will be returned as a Money value.      |
| *Unsupported data types*                   | **[Null](docId\:N9trVqonnBknqL9DrNBP6)   | Unsupported data types return `Null`.                                                              |


[title] Operators
[path] Carrot reference/

An operator in Carrot is one or more symbols or words that compare the value of a field on its left with one or more values (or functions) on its right. The valuation of the clause will always result as true.

:::hint{type="info"}
Carrot operators understand money-math and automatically convert currencies when adding or subtracting two different currencies.
:::

### Operator list

| **Name**                                                                          | **Function**                                                                                                                                                                                        |
| --------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| [+ (add)](https://docs.charthop.com/add)                                          | An operator used to add two or more expressions.                                                                                                                                                    |
| [- (subtract)](https://docs.charthop.com/-subtract)<br />                         | An operator used to subtract an expression from another expression.                                                                                                                                 |
| [\* (multiply)](https://docs.charthop.com/multiply)                               | An operator used to multiply two or more expressions.                                                                                                                                               |
| [/ (divide)](https://docs.charthop.com/divide)                                    | An operator used to divide one expression by another.                                                                                                                                               |
| [% (modulus)](https://docs.charthop.com/percent-modulus)                          | An operator used to calculate the remainder of a division operation.                                                                                                                                |
| [= (equals)](https://docs.charthop.com/-equals)                                   | Returns true when the value of a given field and a given expression are the same.                                                                                                                   |
| [!= (not-equals)](https://docs.charthop.com/-not-equals)                          | Returns all records where the value of a given field and a given expression are **not** the same.                                                                                                   |
| [! (not)](https://docs.charthop.com/not)                                          | Invalidates the truthiness of an evaluated expression.                                                                                                                                              |
| [> (greater-than)](https://docs.charthop.com/greater-greater-than)                | Returns all records where the value of one expression or field is greater than the value of another expression or field.                                                                            |
| [>= (greater-than-equals)](https://docs.charthop.com/greater-greater-than-equals) | Returns all records where the value of one expression or field is greater than or equal to the value of another expression or field.                                                                |
| [\< (less-than)](https://docs.charthop.com/less-less-than)                        | Returns all records where the value of one expression or field is less than the value of another expression or field.                                                                               |
| [\<= (less-than-equals)](https://docs.charthop.com/less-less-than-equals)         | Returns all records where the value of one expression or field is less than or equal to the value of another expression or field.                                                                   |
| [\[ \](array)](https://docs.charthop.com/-array)                                  | Access a given expression as an array, and return a defined position on that array.                                                                                                                 |
| [: (match)](https://docs.charthop.com/match)                                      | Returns true where the value of a given field and a given expression partially match.                                                                                                               |
| [&& (and)](https://docs.charthop.com/andand-and)                                  | A logic operator used to evaluate the truthiness of two or more expressions.                                                                                                                        |
| ﻿[\|\| (or)](#)                                                                   | A logic operator used to evaluate the truthiness of at least one expression in a sequence of expressions.                                                                                           |
| [if](https://docs.charthop.com/if)                                                | A logic operator used to return a defined expression based on the truthiness of one or more other expressions.                                                                                      |
| [? (ternary)](#)﻿                                                                 | Evaluates the truthiness of an expression, and returns the value of one of two expressions based on that outcome.                                                                                   |
| [?: (elvis)](https://docs.charthop.com/elvis)                                     | Evaluates the truthiness of the first expression, and returns its value if that value is truthy. If the value of the first expression is not truthy, it returns the value of the second expression. |
| [. (dot)](https://docs.charthop.com/dot)                                          | Used to retrieve a property of a given field.                                                                                                                                                       |

### Operator precedence

When an expression makes use of more than one operator, Carrot relies on a set of rules to determine the order in which each operator is evaluated. Carrot follows a standard order of operations when evaluating an expression based on operator precedence. Operators that have a higher precedence in the table below will be evaluated first.

| **Precedence** | **Operator**                                                                                                                                                                                                                   | **Associativity** |
| -------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ----------------- |
| 9              | [\[ \](array)](docId\:py8sKX3_AquLsnUSBCD5R)<br />[. (dot)](docId\:t8HBpyTpsANh8YfiZ4YJf)                                                                                                                                      | left to right     |
| 8              | [! (not)](docId\:Hdagli50AFSEam4jX6B8N)                                                                                                                                                                                        | right to left     |
| 7              | [\* (multiply)](docId\:BNPKFAw9igsz2hPk4WXbh)<br />[/ (divide)](docId\:luJCYaMvfnApFnvX916_K)<br />[% (modulus)](docId:0FwsqipgLrW4XsAv7bYPK)                                                                                  | left to right     |
| 6              | [+ (add)](docId\:DsLKNiKEXsESezTV3C5Zv)<br />[- (subtract)](docId\:X9JOQMWHVhTajOgmjlbUa)                                                                                                                                      | left to right     |
| 5              | [\< (less-than)](docId\:dfZeov4u--zpsLRwr83bl)<br />[\<= (less-than-equals)](docId\:IBS4w-l1PwA6xMSwyvUjq)<br />[> (greater-than)](docId\:KC0htlkxUvbamz_X6QFT9)<br />[>= (greater-than-equals)](docId\:YE9GwBz-iTgpXtBDzxD_A) | not associative   |
| 4              | [: (match)](docId\:ldpiNC46SdrU3oQyN7cb2) <br />[= (equals)](docId:50o8vwTa5Zp6SV8DQdwjl) <br />[!= (not-equals)](docId\:G6PRxUTGM2VRCNW7HcqrY)                                                                                | left to right     |
| 3              | [&& (and)](docId\:UVpXLLWGCPZRpr42E2NXm)                                                                                                                                                                                       | left to right     |
| 2              | [\|\| (or)](docId\:A7wCSbxwsJEwfYJwbuH8z)                                                                                                                                                                                      | left to right     |
| 1              | [? (ternary)](docId\:mJPHsJn60Dsm44OO2welJ)<br />[?: (elvis)](docId\:X-HM1Bldw8aWd8-byRlZV)                                                                                                                                    | right to left     |

Consider the expression below.

:::BlockQuote
`variableA * variableB + variableC`
:::

Without operator precedence, Carrot would not know which operation to complete first. If we refer to the table above, we see that multiplication has a higher precedence than addition. Thus, `variableA * variableB` is evaluated first, then the result of that expression is added to `variableC`.

Of course, addition and multiplication are two well known examples of operator precedence in arithmetic, and it works in the same way in Carrot. Just like arithmetic, if you wanted to change the precedence of the above expression, you would use parenthesis as illustrated below.

:::BlockQuote
`variableA * (variableB + variableC)`
:::

In the above expression, we are telling Carrot to explicitly add `variableB` to `variableC` before multiplying the result by `variableA`.


[title] boolean()
[path] Carrot reference/Functions/

Converts supported datatypes into a Boolean, equal to either `true` or `false`.&#x20;

### Syntax

`boolean(value)`

- `value` - the value to be evaluated by the function.
- **Return type:** [Boolean](docId\:kdvwA4oPcqWedHpYCTH4L).

### Sample usage

`boolean(0)` returns `false`.

`boolean("yes")` returns `true`.

### Supported data types

| **Input type**                              | **Return type**                          | **Logic**                                                                                                             |
| ------------------------------------------- | ---------------------------------------- | --------------------------------------------------------------------------------------------------------------------- |
| ****[String](docId\:Ujw2AQAktel5uukLuP73S)  | [Boolean](docId\:kdvwA4oPcqWedHpYCTH4L)  | `String` values that start with `y` or `t` return `true`. `String` values that start with `n` or `f` return `false`.  |
| [Number](docId\:ucI5tCTfVBhonEJ6ZQijg)      | [Boolean](docId\:kdvwA4oPcqWedHpYCTH4L)  | `Number` values equal to `0` return `false`. Non-zero `Number` values return `true`.                                  |
| [Boolean](docId\:kdvwA4oPcqWedHpYCTH4L)     | [Boolean](docId\:kdvwA4oPcqWedHpYCTH4L)  | `Boolean` values remain unchanged.                                                                                    |
| *Unsupported type*                          | **[Null](docId\:N9trVqonnBknqL9DrNBP6)   | Unsupported data types return `Null`.                                                                                 |


[title] month()
[path] Carrot reference/Functions/

Returns the ordinal number of the month of a particular date, from 1-12, where 1 is January, 2 is February, and so on.

### Syntax

`month(date)`

- `date` - the `Date` value to be evaluated by the function.
- **Return type:** [Number](docId\:ucI5tCTfVBhonEJ6ZQijg)&#x20;

### Sample usage

`month('2020-05-12')` returns `5`.

### Supported data types

| **Input type**                           | **Return type**                         | **Logic**                                                                                          |
| ---------------------------------------- | --------------------------------------- | -------------------------------------------------------------------------------------------------- |
| ****[Date](docId\:xTAQdzvLBTAKjxRnpFwe9) | [Number](docId\:ucI5tCTfVBhonEJ6ZQijg)  | If a `Date` value is passed, the ordinal number of the month will be returned as a `Number` value. |
| *Unsupported data types*                 | **[Null](docId\:N9trVqonnBknqL9DrNBP6)  | Unsupported data types return `Null`.                                                              |


[title] diffQuarters()
[path] Carrot reference/Functions/

Returns the number of whole calendar quarters between two dates. The result is positive when `date2` is after `date1`, and negative when `date2` is before `date1`.

### Syntax

`diffQuarters(date1, date2)`

### Parameters

| **Parameter** | **Type**                             | **Description**                     |
| ------------- | ------------------------------------ | ----------------------------------- |
| `date1`       | [Date](docId\:xTAQdzvLBTAKjxRnpFwe9) | The date from which counting begins |
| `date2`       | [Date](docId\:xTAQdzvLBTAKjxRnpFwe9) | The date at which counting ends     |

### Return Type

[Number](docId\:ucI5tCTfVBhonEJ6ZQijg)

The number of whole quarters between the two dates. Partial quarters are not counted.

### Examples

`diffQuarters('2025-01-01', '2025-12-31')`

- Returns `3` because there are 3 full quarters between January 1 and December 31.

`diffQuarters('2025-01-01', '2026-01-01')`

- Returns `4` because there are exactly 4 quarters in a full year.

### Related Carrot

- [diffDays()](docId\:pRprI026iiuEbPHKNZw8U) - Returns the number of days between two dates
- [diffWeeks()](docId\:hUGMmHjqhZBnHOH3NjTfY) - Returns the number of whole weeks between two dates
- [diffMonths()](docId\:Jo2UBEInT1Mtnw1xnl7_2) - Returns the number of whole months between two dates
- [diffYears()](docId\:XtaGbzq7NGAiKtSG0pAOm) - Returns the number of whole years between two dates

[title] abs()
[path] Carrot reference/Functions/

Returns the absolute value of a given value.

### Syntax

`abs(value)`

- `value` - the value to be evaluated by the function.
  - Input `value` must be of type [Number](docId\:ucI5tCTfVBhonEJ6ZQijg).
- **Return type:&#x20;**[Number](docId\:ucI5tCTfVBhonEJ6ZQijg).&#x20;

### Sample usage

`abs(-10)` returns `10`.

### Supported data types

| **Input type**                              | **Return type**                         | **Logic**                                                           |
| ------------------------------------------- | --------------------------------------- | ------------------------------------------------------------------- |
| ****[Number](docId\:ucI5tCTfVBhonEJ6ZQijg)  | [Number](docId\:ucI5tCTfVBhonEJ6ZQijg)  | No type conversion.                                                 |
| *Unsupported data types*                    | **[Null](docId\:N9trVqonnBknqL9DrNBP6)  | Unsupported data types return [Null](docId\:N9trVqonnBknqL9DrNBP6). |


[title] day()
[path] Carrot reference/Functions/

Returns the day of the month of a particular date.

### Syntax

`day(date)`

### Parameters

| **Parameter** | **Type**                               | **Description**                       |
| ------------- | -------------------------------------- | ------------------------------------- |
| `date`        | [Date](docId\:xTAQdzvLBTAKjxRnpFwe9)   | The date to get the day-of-month from |

### Return Type

[Number](docId\:ucI5tCTfVBhonEJ6ZQijg)&#x20;

The day of the month. For example, May 12th will return `12`

### Examples

`day('2025-05-12')`

- Returns `12`


[title] stockPrice()
[path] Carrot reference/Functions/

Given a `Date`, returns the value of shares on that date.

### Syntax

`stockPrice([date][, symbol])`

- `date` - (optional) the date of the returned stock price
- `symbol` - (optional) the ticker symbol of the stock
- **Return type:** [Number](docId\:ucI5tCTfVBhonEJ6ZQijg)&#x20;

### Sample usage

`stockPrice('2019-01-01')` returns the value of the stock price on 01/01/2019.

### Supported data types

| **Input type**                            | **Return type**                         | **Logic**                                                                 |
| ----------------------------------------- | --------------------------------------- | ------------------------------------------------------------------------- |
| ****[Date](docId\:xTAQdzvLBTAKjxRnpFwe9)  | [Number](docId\:ucI5tCTfVBhonEJ6ZQijg)  | If a Date value is passed, the stock price on that date will be returned. |
| *Unsupported data types*                  | **[Null](docId\:N9trVqonnBknqL9DrNBP6)  | Unsupported data types return `Null`.                                     |


[title] findFormTasksByAssessment()
[path] Carrot reference/Functions/

Returns form-completion Tasks related to a particular Form within a particular Assessment.

This is particularly useful for reporting on completion rates.

### Syntax

`findFormTasksByAssessment(assessment[, form])`

### Parameters

| **Parameter** | **Type**                                | **Description**                    |
| ------------- | --------------------------------------- | ---------------------------------- |
| `assessment`  | [String](docId\:Ujw2AQAktel5uukLuP73S)  | Name or ID of the Review or Survey |
| `form`        | [String](docId\:Ujw2AQAktel5uukLuP73S)  | Name or ID of the Form             |

### Return Type

[List](docId\:xWH_cUkHj9waqaEfb7H71) \<[Task](docId:1nEEnToGeYECUAAhFwNNZ)>

### Examples

`findFormTasksByAssessment('1H Performance Review', 'Manager Review').countPercent{status:done}`

Returns the percentage of Manager Review submissions that were completed in the "1H Performance Review" assessment.

`findFormTasksByAssessment('Engagement Survey').count()`

Returns the number of Engagement Survey submissions that were sent out.

[title] compHistory()
[path] Carrot reference/Functions/

Returns the value of `base` or `variable` compensation on a given date.

### Syntax

`compHistory([date]).comp`

- `date` - (optional) the date to be evaluated. The default value is the current date.
- `comp` - the type of compensation to be returned.&#x20;
  - Accepted values are `base` and `variable`
- **Return type:&#x20;**[Comp](docId\:H_73YLW2UsTscC_TjerlF)&#x20;

### Sample usage

`compHistory('2017-07-01').base` returns the value of `base` compensation on the given date.

`compHistory().variable` returns the value of `variable` compensation on the current date.

### Supported data types

| **Input type**                            | **Return type**                         | **Logic**                                                                            |
| ----------------------------------------- | --------------------------------------- | ------------------------------------------------------------------------------------ |
| ****[Date](docId\:xTAQdzvLBTAKjxRnpFwe9)  | [Money](docId:_kS5D2xbfoR9d8WfRIVnY)    | Function will return the value of the specified compensation type on the input date. |
| *Unsupported data types*                  | **[Null](docId\:N9trVqonnBknqL9DrNBP6)  | Unsupported data types return `Null`.                                                |


[title] monthStart()
[path] Carrot reference/Functions/

Returns the first day of a given month.

### Syntax

`monthStart([date])`

- `date` - (optional) the date from which to derive the first day of that date's month
- **Return type:&#x20;**[Date](docId\:xTAQdzvLBTAKjxRnpFwe9)&#x20;

### Sample usage

`monthStart('2020-05-12')` returns `2020-05-01`.

### Supported data types

| **Input type**                            | **Return type**                         | **Logic**                                                                                                    |
| ----------------------------------------- | --------------------------------------- | ------------------------------------------------------------------------------------------------------------ |
| ****[Date](docId\:xTAQdzvLBTAKjxRnpFwe9)  | [Date](docId\:xTAQdzvLBTAKjxRnpFwe9)    | The input date specifies the desired month. The month is then used to determine the first day in that month. |
| *Unsupported data types*                  | **[Null](docId\:N9trVqonnBknqL9DrNBP6)  | Unsupported data types return `Null`.                                                                        |




[title] < (less-than)
[path] Carrot reference/Operators/

Returns all records where the value of one expression or field is less than the value of another expression or field.

### Syntax

`expression < expression`

### Sample usage

`tenure < 3` returns all records where `tenure` is less than `3`.

`('2021-01-01') < ('2020-01-01')` evaluates to `false`.

`base < 100000` returns all records where `base` is less than $100,000.

### Supported data types

- Number
- Percent
- Money
- Date
- String
- Shares

**Note**: When a Money value is compared to a Number, the Money value is compared as an amount in the Org's primary currency.

### See also

- [> (greater-than)](docId\:KC0htlkxUvbamz_X6QFT9)&#x20;
- [>= (greater-than-equals)](docId\:YE9GwBz-iTgpXtBDzxD_A)&#x20;
- [\<= (less-than-equals)](docId\:IBS4w-l1PwA6xMSwyvUjq)&#x20;


[title] max()
[path] Carrot reference/Functions/

Returns the highest of all `values` passed as parameters.

### Syntax

`max(value, value2, ...,)`

- `value` - the first value.
- `value2` - the second value.

**Return type:&#x20;**[Number](docId\:ucI5tCTfVBhonEJ6ZQijg) , [Percent](docId\:FbN7bFaHlFPV4f1C53DxA) , [Money](docId:_kS5D2xbfoR9d8WfRIVnY).

### Sample usage

`max(-2, 3, 4)` returns `4`.

### Supported data types

| **Input type**                             | **Return type**                          | **Logic**                                                                                             |
| ------------------------------------------ | ---------------------------------------- | ----------------------------------------------------------------------------------------------------- |
| ****[Number](docId\:ucI5tCTfVBhonEJ6ZQijg) | [Number](docId\:ucI5tCTfVBhonEJ6ZQijg)   | If a set of Number values is passed, the highest Number value will be returned as a Number value.     |
| [Percent](docId\:FbN7bFaHlFPV4f1C53DxA)    | [Percent](docId\:FbN7bFaHlFPV4f1C53DxA)  | If a set of Percent values is passed, the highest Percent value will be returned as a Percent value.  |
| [Money](docId:_kS5D2xbfoR9d8WfRIVnY)       | [Money](docId:_kS5D2xbfoR9d8WfRIVnY)     | If a set of Money values is passed, the highest Money value will be returned as a Money value.        |
| *Unsupported data types*                   | **[Null](docId\:N9trVqonnBknqL9DrNBP6)   | Unsupported data types return `Null`.                                                                 |


[title] number()
[path] Carrot reference/Functions/

Given a value, returns that value as a `Number`.&#x20;

### Syntax

`number(value)`

- `value` - the `Number`, `Money`, `Percent`, `Enum`, `Boolean`, or `String` value to be converted by the function.
- **Return type:** [Number](docId\:ucI5tCTfVBhonEJ6ZQijg)&#x20;

### Sample usage

`number($100)` returns `100`.

`number(string(base))` returns the original value of `base`.

### Supported data types

| **Input type**                              | **Return type**                         | **Logic**                                                                                                                                                                                                                                                                                                                                                                                            |
| ------------------------------------------- | --------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| ****[Number](docId\:ucI5tCTfVBhonEJ6ZQijg)  | [Number](docId\:ucI5tCTfVBhonEJ6ZQijg)  | If a Number value is passed, the same Number value will be returned.                                                                                                                                                                                                                                                                                                                                 |
| [Money](docId:_kS5D2xbfoR9d8WfRIVnY)        | [Number](docId\:ucI5tCTfVBhonEJ6ZQijg)  | If a Money value is passed, the amount will be returned as a Number.                                                                                                                                                                                                                                                                                                                                 |
| [Percent](docId\:FbN7bFaHlFPV4f1C53DxA)     | [Number](docId\:ucI5tCTfVBhonEJ6ZQijg)  | If a Percent value is passed, the amount will be returned as a Number of subtype Decimal where `50%` is equivalent to `.5`.                                                                                                                                                                                                                                                                          |
| [Enum](docId\:UnTq2eAL5RMIpNYczvfw1)        | [Number](docId\:ucI5tCTfVBhonEJ6ZQijg)  | If a numeric scale Enum value is passed, the numeric value is returned as a Number.                                                                                                                                                                                                                                                                                                                  |
| [Boolean](docId\:kdvwA4oPcqWedHpYCTH4L)     | [Number](docId\:ucI5tCTfVBhonEJ6ZQijg)  | If a Boolean value is passed, `true` will return the Number value `1`, and `false` will return the Number value `0`.                                                                                                                                                                                                                                                                                 |
| [String](docId\:Ujw2AQAktel5uukLuP73S)      | [Number](docId\:ucI5tCTfVBhonEJ6ZQijg)  | If a String value is passed, its constituent characters will be evaluated for compatibility with the Number data type. Characters which are compatible will be returned as a Number value. If two or more sets of compatible characters are separated by non-compatible characters (ex. `"121yes121"`), the compatible sets of characters will be returned as comma-separated values (ex. `121,121`) |
| *Unsupported data types*                    | **[Null](docId\:N9trVqonnBknqL9DrNBP6)  | Unsupported data types return `Null`.                                                                                                                                                                                                                                                                                                                                                                |


[title] money()
[path] Carrot reference/Functions/

Converts a given value to datatype `Money`, including currency conversion.&#x20;

### Syntax

`money(value[, currency])`

- `value` - the value to be evaluated by the function.
- `currency` - (optional) the currency type of the returned `Money` value.
- **Return type:** [Money](docId:_kS5D2xbfoR9d8WfRIVnY)&#x20;

### Sample usage

`money(10)` returns `$10` if `USD` is the primary currency.

### Supported data types

| **Input type**                              | **Return type**                         | **Logic**                                                                                                                                      |
| ------------------------------------------- | --------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------- |
| ****[Number](docId\:ucI5tCTfVBhonEJ6ZQijg)  | [Money](docId:_kS5D2xbfoR9d8WfRIVnY)    | If a `Number` value is passed, the amount will be returned as a `Money` value with the specified currency type (default: `org.currency`).      |
| [Money](docId:_kS5D2xbfoR9d8WfRIVnY)        | [Money](docId:_kS5D2xbfoR9d8WfRIVnY)    | If a `Money` value is passed, the amount will be converted to the specified currency value if it is different from the original currency type. |
| *Unsupported data types*                    | **[Null](docId\:N9trVqonnBknqL9DrNBP6)  | Unsupported data types return `Null`.                                                                                                          |


[title] nextAnniversary()
[path] Carrot reference/Functions/

Given a date, returns the next upcoming anniversary of that date.

### Syntax

`nextAnniversary(anniversaryDate, fromDate)`

- `anniversaryDate` - the `Date` value to be evaluated by the function.
- `fromDate` - (optional) the `Date` from which to find the next instance of anniversaryDate.
- **Return type:** [Date](docId\:xTAQdzvLBTAKjxRnpFwe9)&#x20;

### Sample usage

`nextAnniversary(birthDate)` returns the date one year after birthDate.

`nextAnniversary('2018-05-24', '2021-01-01')` returns `2021-05-24`.

### Supported data types

| **Input type**                            | **Return type**                         | **Logic**                                                                                                                                                                                                                                                             |
| ----------------------------------------- | --------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| ****[Date](docId\:xTAQdzvLBTAKjxRnpFwe9)  | [Date](docId\:xTAQdzvLBTAKjxRnpFwe9)    | If a Date value is passed, the year will be incremented by 1. If the optional `fromDate` parameter is passed, the year will either increment or decrement by the difference in the year values, depending on whether `fromDate` is before or after `anniversaryDate`. |
| *Unsupported data types*                  | **[Null](docId\:N9trVqonnBknqL9DrNBP6)  | Unsupported data types return `Null`.                                                                                                                                                                                                                                 |

### Aliases

`birthday` returns the equivalent of `nextAnniversary(birthDate)`.

`anniversary` returns the equivalent of `nextAnniversary(startDate)`.




[title] findTimeOff()
[path] Carrot reference/Functions/

Returns time off over a period of time, either for one individual person or across the org. Any time off that overlaps part of the date range being queried will be returned.

### Syntax

`findTimeOff(from, until[, person])`

### Parameters

| **Parameter** | **Type**                                | **Description**                                                                           |
| ------------- | --------------------------------------- | ----------------------------------------------------------------------------------------- |
| `from`        | [Date](docId\:xTAQdzvLBTAKjxRnpFwe9)    | Starting point of the date range to traverse (inclusive)                                  |
| `until`       | [Date](docId\:xTAQdzvLBTAKjxRnpFwe9)    | Ending point of the date range to traverse (exclusive)                                    |
| `person`      | [Person](docId\:BZrX1MTDjk8CgkAW7UjQJ)  | The person's time off to query. If not passed, returns all time off across the whole org. |

### Return Type

[Sequence](docId\:JG4itlQWafzLpArttFo67) \<[TimeOff](docId\:raHsIHytvR1NsKqtdfkJA)>&#x20;

### Examples

`findTimeOff(date, "+1m").count()`

Returns the number of time off requests (including those pending and not approved) that are occurring in the next 30 days.

`findTimeOff("2025-10-01", "2025-11-01").filter{status:approved}.count()`

Returns the number of time off requests that have been approved that occur in the month of October.

`findTimeOff("2025-10-01", "2025-11-01", person).filter{status:approved}.sum{days}`

Returns the total number of days off for a particular person for time off overlapping the month of October.

`findTimeOff("2025-01-01", "2026-01-01").filter{status:approved and policy.name:"UK Sick Policy"}.sum{days}`

Returns the total number of days off taken for approved time off requests for the "UK Sick Policy" that overlap the calendar year 2025.

[title] roundDown()
[path] Carrot reference/Functions/

Rounds a given `value` to the next smallest `integer`.

### Syntax

`roundDown(number[, places])`

- `number` - the `Number` value to be evaluated.
- `places` - (optional) the number of places of the returned `Number` value.
- **Return type:** [Number](docId\:ucI5tCTfVBhonEJ6ZQijg)&#x20;

### Sample usage

`roundDown(4.5678, 2)` returns `4.56`

`roundDown(4.5678)` returns `4`

### Supported data types

| **Input type**                              | **Return type**                         | **Logic**                                                                                                                                     |
| ------------------------------------------- | --------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------- |
| ****[Number](docId\:ucI5tCTfVBhonEJ6ZQijg)  | [Number](docId\:ucI5tCTfVBhonEJ6ZQijg)  | If a Number value is passed, that Number value will be rounded down to the defined number of decimal places. Defaults to zero decimal places. |
| *Unsupported data types*                    | **[Null](docId\:N9trVqonnBknqL9DrNBP6)  | Unsupported data types return `Null`.                                                                                                         |


[title] Methods
[path] Carrot reference/

# Methods

Methods are special types of [Functions](docId\:IZsyKLqFBEtmslMltBMay) that apply to a [List](docId\:xWH_cUkHj9waqaEfb7H71) or Sequence of data. Usually, methods are used to aggregate data – such as counting or summing List values.

### Syntax

Methods are called like this, where `subject` is the subject of the method, such as the List or Sequence that is being aggregated:

`subject.methodName(parameter1, parameter2)`

If the method is passed an Expression as a parameter, you can use either of the following syntaxes -- they both mean the same thing:

`subject.methodName({expression})`
` subject.methodName{expression}`

The second is often preferred, for clarity and brevity.

Methods can be chained together to form a pipeline of evaluations -- for example:

` subject.methodName1{expression1}.methodName2{expression2}`

### Example Usages

Methods can be used anywhere in Carrot.

Most commonly, methods will operate on a List – for example, to calculate the total number of shares from the [Grants](docId\:Lpx5L8w1t54iPBqq8Eqjv) field, only counting grants that have a strike price of less than 10 cents, one could write:

`grants.filter{price < .1}.sum{shares}`

### Method List

| **Method**                                 | **Description**                                                                                                      |
| ------------------------------------------ | -------------------------------------------------------------------------------------------------------------------- |
| `.all()`                                   | Returns true if all of the items match an expression                                                                 |
| `.any()`                                   | Returns true if at least one of the items matches an expression                                                      |
| \`.count()                                 | Returns the number of items matching an expression                                                                   |
| \`.filter()                                | Returns a list of items that match an expression                                                                     |
| [.find()](docId:6Mwj2HJZ9ljkHmBfK0VVo)     | When called against a Table, queries for entities in that table matching the expression                              |
| \`.groupBy()                               | *Generally only used in Dashboards*. Groups the items by key, returning a SequenceGroupedBy, that can be aggregated. |
| \`.join()                                  | Returns a string that joins the items together.                                                                      |
| \`.limit()                                 | Returns a list of items, with the number of the items limited to a certain number.                                   |
| \`.map()                                   | Returns a list of items that have been transformed using the mapping expression passed in.                           |
| \`.max()                                   | Returns the maximum value of the items in the list, excluding nulls.                                                 |
| \`.mean()                                  | Returns the arithmetic mean (average) of the items in the list, excluding nulls.                                     |
| \`.min()                                   | Returns the minimum value of the items in the list, excluding null.                                                  |
| \`.none()                                  | Returns true if none of the items matches an expression.                                                             |
| \`.sort()                                  | Returns a list of items, sorted by an expression.                                                                    |
| \`.sortDesc()                              | Returns a list of items, sorted in descending order.                                                                 |
| `.sum()`                                   | Returns the sum of the items (optionally transformed with an expression).                                            |
| [.unique()](docId\:OYypYkrFY06bRSVJBFETI)  | Returns a list filtered down to its unique items                                                                     |

# Aggregators (deprecated)

Aggregators are special expressions used to aggregate values over time, only used in ChartHop Dashboards. However, **aggregators are now deprecated.**

We recommend that you replace their use with the corresponding ChartHop methods above. The Dashboards UI will be migrated to use Methods instead.

### Syntax

An aggregator in Carrot appears as a word followed by curly brackets, which contain an expression.&#x20;

`aggregator{expression}`

An aggregator performs a calculation on the parameter expression and returns a [Number](https://docs.charthop.com/ucI5-number) value based on the aggregator's logic.

All aggregators are case-insensitive.

### Usage

Aggregators are only available in Dashboards.

### Migration

To replace the use of an Aggregator currently used in a Dashboard with a Method call instead, use the following syntax:

`db.job.find(jobFilter).aggregator{expression}`&#x20;

For example, this aggregator call:

`count{headcount if department:engineering}`&#x20;

Becomes:

`db.job.find{department:engineering}.count{headcount}`

### Aggregator List

| **Aggregator**                                 | **Description**                                                                                                                                                   |
| ---------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| [count\{}](https://docs.charthop.com/count)    | Counts the number of times a given expression evaluates to a truthy value. All non-truthy values, such as `null`, an empty string, `0`, or `false` are discarded. |
| [max\{}](https://docs.charthop.com/max)        | Returns the largest value of a given expression. All non-numeric values are discarded.                                                                            |
| [mean\{}](https://docs.charthop.com/yOFs-mean) | Returns the average of all values of a given expression. All non-numeric values are discarded.                                                                    |
| [min\{}](https://docs.charthop.com/exqD-min)   | Returns the smallest value of a given expression. All non-numeric values are discarded.                                                                           |
| [sum\{}](https://docs.charthop.com/sum)        | Returns the sum of all values of a given expression. All non-numeric values are discarded.                                                                        |


[title] turnoverRate()
[path] Carrot reference/Functions/

Calculates a turnover rate (also known as attrition rate), used to measure the rate of employee departures.

Turnover is calculated as the number of departures that occurred over a period of time, divided by the average of headcount at the start of the period and the headcount at the end of the period.

- For example, if measuring turnover in calendar year 2025, if the organization:
  - began the year on with 100 people on Jan 1
  - saw 20 departures through the course of the year
  - ended the year at 150 people on Dec 31
  - Then turnover rate is 20 / ((100 + 150) / 2) = 16%.

### Syntax

`turnoverRate(fromDate, untilDate[, jobFilter][, departFilter][, groupBy])`&#x20;

### Parameters

| **Parameter**  | **Types**                                                                       | **Description**                                                                                                                                                                             |
| -------------- | ------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `fromDate`     | [Date](docId\:xTAQdzvLBTAKjxRnpFwe9) or [String](docId\:Ujw2AQAktel5uukLuP73S)  | The starting-point date (inclusive) of the interval being measured for turnover. For example if measuring turnover in the calendar year 2025, this would be `2025-01-01`                    |
| `untilDate`    | [Date](docId\:xTAQdzvLBTAKjxRnpFwe9) or [String](docId\:Ujw2AQAktel5uukLuP73S)  | The ending date (exclusive) of the interval being measured for turnover. For example, if measuring turnover in the calendar year 2025, this would be `2026-01-01`.                          |
| `jobFilter`    | @Expression                                                                     | An expression to filter which jobs will be included in the calculation. For example, if excluding contract roles or interns from the calculation, could use `{!employment:contract,intern}` |
| `departFilter` | @Expression                                                                     | An expression to filter what types of departures will be included in the calculation. For example, if only including voluntary departures, could use `{depart:voluntary}`                   |
| `groupBy`      | @Expression                                                                     | If used, will group the results by the expression. For example, if calculating turnover rate broken down by gender, you could pass `{gender}`                                               |

### Returns

[Number](docId\:ucI5tCTfVBhonEJ6ZQijg) if the groupBy parameter was not used, or an @AggregatedResult if the groupBy parameter was used.

The result will be the calculated turnover value over the period of time.

### Examples

Within a dashboard, overall annual turnover:

\`turnoverRate('-1y+1d',&#x20;



`date()` returns the current date.

`date("-3m")` returns the date three months ago

`date(1744206569)` returns the date of April 9, 2025 (by converting from a unix timestamp)

`date("2025-12-25")` returns the exact date of Dec 25, 2025

`date("+6w", createDate)` returns a date six weeks from the value of `createDate`.

[title] replace()
[path] Carrot reference/Functions/

Replaces all substrings within a [String](docId\:Ujw2AQAktel5uukLuP73S) with a different string.

### Syntax

`replace(string, search, replace)`

- `string` - the String value to operate on
- `search` - the String value to search for
- `replace` - the String value to replace in place of any instances of `search`
- **Return type:** [String](docId\:Ujw2AQAktel5uukLuP73S)&#x20;

### Examples

- `replace("hello hello world", "hello", "hi")` returns `hi hi world`


[title] nearestLocation()
[path] Carrot reference/Functions/

Returns the nearest geographic Location to a particular person, group, or address.

### Syntax

`nearestLocation(entity[, list])`

### Parameters

| **Parameter** | **Type**                                                                                                                  | **Description**                                                                                                                                                                                               |
| ------------- | ------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `entity`      | [Person](docId\:BZrX1MTDjk8CgkAW7UjQJ), [Group](docId:7kUM4sl_wT2Y_lDfMO6qb), or [Address](docId\:khI0D64Z7Evk0DsM_gJWf)  | The starting point to measure distance from                                                                                                                                                                   |
| `list`        | [List](docId\:xWH_cUkHj9waqaEfb7H71)                                                                                      | Optionally, a list of groups, addresses, or persons, to compare against. The one that is the nearest geographically will be returned.<br />If this parameter is not provided, all Locations will be compared. |

### Return Type

[Person](docId\:BZrX1MTDjk8CgkAW7UjQJ), [Group](docId:7kUM4sl_wT2Y_lDfMO6qb), or [Address](docId\:khI0D64Z7Evk0DsM_gJWf)

Whichever entity provided in the `list`, or whichever [Group](docId:7kUM4sl_wT2Y_lDfMO6qb) Location is closest geographically, will be returned.

### Examples

`nearestLocation(person)`

Returns the nearest Location Group to the person, inclusive of remote locations and offices.

`nearestLocation(person, person.managers)`

Returns which of the person's manager chain lives closest to the person.

`nearestLocation(person, db.group.find{type:location and name:atlanta,boston,orlando})`

Returns which of the locations matching "Atlanta", "Boston" or "Orlando" is closest to the current person.

[title] dayOfWeek()
[path] Carrot reference/Functions/

Returns the day of the week of a particular date, where 1 = Monday and 7 = Sunday.

### Syntax

`dayOfWeek(date)`

### Parameters

| **Parameter** | **Type**                               | **Description**                      |
| ------------- | -------------------------------------- | ------------------------------------ |
| `date`        | [Date](docId\:xTAQdzvLBTAKjxRnpFwe9)   | The date to get the day-of-week from |

### Return Type

[Number](docId\:ucI5tCTfVBhonEJ6ZQijg)&#x20;

The day of the week. For example, passing in a date that is on a Monday will return `1`

### Examples

`dayOfWeek('2025-05-12')`

- Returns `1` because Monday, May 12, 2025 was a Monday.



### Related  Carrot&#x20;

- [formatDate()](docId\:SjKW09Yi2EekUQemddOAL) - Can also be used to display the full name of the data such as "Monday, May 12, 2025"&#x20;




[title] VariableComp
[path] Carrot reference/Fields/Data Types/

A datatype used to represent target variable comp, typically paid on an annual basis.

Variable comp comes in two pay types, denoted by the `compType` property:

- **Amount** - a fixed monetary amount (for example, a $100,000 target commission)
- **Percent** - a percentage, usually of base salary (for example, a 10% bonus)

### Properties

| **Property** | **Type**                                  | **Description**                                                                                 |
| ------------ | ----------------------------------------- | ----------------------------------------------------------------------------------------------- |
| `amount`     | [Number](docId\:ucI5tCTfVBhonEJ6ZQijg)    | The amount of money, without the currency (same as `pay.amount`), or`null` for percentage comp. |
| `compType`   | [String](docId\:Ujw2AQAktel5uukLuP73S)    | The pay type of the variable comp (either `Amount` or `Percent`)                                |
| `currency`   | [Currency](docId\:HYeq9EU9e7La_RvHQTFvG)  | The currency being paid (same as `pay.currency`), or`null` for percentage comp.                 |
| `interval`   | [String](docId\:Ujw2AQAktel5uukLuP73S)    | The interval being paid -- currently must be `year`                                             |
| `pay`        | [Money](docId:_kS5D2xbfoR9d8WfRIVnY)      | The amount of variable pay, or `null`for percentage comp.                                       |
| `percent`    | [Percent](docId\:FbN7bFaHlFPV4f1C53DxA)   | The percentage of base comp, or `null` for fixed monetary amount comp.                          |
| `type`       | [Enum](docId\:UnTq2eAL5RMIpNYczvfw1)      | The type of the variable comp, either `Bonus` or `Commission`                                   |

### Type Conversions and Money Math

If VariableComp is used together with Money in a formula, the VariableComp is automatically converted to its `pay` value.


[title] length()
[path] Carrot reference/Functions/

Returns the number of items in a list or set, or the length of a `String`.&#x20;

### Syntax

`length(value)`

- `value` - the list or String to be evaluated.

**Return type:&#x20;**[Number](docId\:ucI5tCTfVBhonEJ6ZQijg)&#x20;

### Sample usage

`length("hello there")` returns `11`

`length(favouriteEmployees)` returns `5` if the number of `Person` values in the field is `5`.

### Supported data types

| **Input type**                                               | **Return type**                         | **Logic**                                                                   |
| ------------------------------------------------------------ | --------------------------------------- | --------------------------------------------------------------------------- |
| ****[String](docId\:Ujw2AQAktel5uukLuP73S)  or list of items | [Number](docId\:ucI5tCTfVBhonEJ6ZQijg)  | Returns the number of items in a list or set, or the length of a `String`.  |
| *Unsupported data types*                                     | **[Null](docId\:N9trVqonnBknqL9DrNBP6)  | Unsupported data types return `Null`.                                       |


[title] compBetween()
[path] Carrot reference/Functions/

Calculates the base, variable or cash compensation of a person over a specified period of time including all jobs the person has held.

## compBetween()

Returns the compBetween calculation excluding data from Primary.

### Syntax

**baseCompBetween**- Calculates the **Base** compensation of a person over a specific time period, including internal transfers and moves.

`baseCompBetween( startDate: Date, endDate: Date, Multiplier: BigDecimal)`

- `startDate` - The start date of the checked time period.
- `endDate` - The end date of the checked time period.
- `Multiplier`- Optional multiplier. Defaults to `1.0`.
- **Return type:&#x20;**[Comp](docId\:H_73YLW2UsTscC_TjerlF)&#x20;

| **Code sample**                                    | **Result**                                                                           |
| -------------------------------------------------- | ------------------------------------------------------------------------------------ |
| `baseCompBetween('2017-07-01', '2022-08-01", 1.0)` | Returns the `base` comp of a person between January 7th, 2017 and January 8th, 2022. |

***

**variableCompBetween** - Calculates the **Variable** compensation of a person over a specific time period, including internal transfers and moves.

`variableCompBetween( startDate: Date, endDate: Date, Multiplier: BigDecimal)`

- `startDate` - The start date of the checked time period.
- `endDate` - The end date of the checked time period.
- `Multiplier`- Optional multiplier. Defaults to `1.0`.
- **Return type:&#x20;**[Comp](docId\:H_73YLW2UsTscC_TjerlF)

| **Code sample**                                         | **Result**                                                                                                                |
| ------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------- |
| `variableCompBetween('2017-07-01', '2022-08-01", 2.5)`  | Returns the `variable`comp of a person between January 7th, 2017 and January 8th, 2022 and multiplies the value by `2.5`. |

***

**cashCompBetween** - Returns the **Base** + **Variable** compensation of a person over a specific time period, including internal transfers and moves.

`cashCompBetween( startDate: Date, endDate: Date, Multiplier: BigDecimal)`

- `startDate` - The start date of the checked time period.
- `endDate` - The end date of the checked time period.
- `Multiplier`- Optional multiplier. Defaults to `1.0`.
- **Return type:&#x20;**[Comp](docId\:H_73YLW2UsTscC_TjerlF)&#x20;

| **Code sample**                                    | **Result**                                                                                            |
| -------------------------------------------------- | ----------------------------------------------------------------------------------------------------- |
| `cashCompBetween('2017-07-01', '2022-08-01", 1.0)` | Returns the **base** + **variable** comp of a person between January 7th, 2017 and January 8th, 2022. |


[title] ! (not)
[path] Carrot reference/Operators/

Invalidates the truthiness of an evaluated expression.

### Syntax

`!expression`

### Sample usage

`!department:engineering` returns all records where `department` does not match `engineering`.

### See also

- [> (greater-than)](docId\:KC0htlkxUvbamz_X6QFT9)&#x20;
- [= (equals)](docId:50o8vwTa5Zp6SV8DQdwjl)&#x20;
- [!= (not-equals)](docId\:G6PRxUTGM2VRCNW7HcqrY)&#x20;


[title] findFormTasks()
[path] Carrot reference/Functions/

Returns form-completion Tasks related to a particular Form.

This is particularly useful for reporting on completion rates.

### Syntax

`findFormTasks(form[, from][, until])`

### Parameters

| **Parameter** | **Type**                                   | **Description**                                          |
| ------------- | ------------------------------------------ | -------------------------------------------------------- |
| `form`        | [String](docId\:Ujw2AQAktel5uukLuP73S)     | Name or ID of the form                                   |
| `from`        | [Timestamp](docId\:j1uFZtC3_yprDI3uCIn3u)  | Starting point of the date range to traverse (inclusive) |
| `until`       | [Timestamp](docId\:j1uFZtC3_yprDI3uCIn3u)  | Ending point of the date range to traverse (exclusive)   |

### Return Type

[List](docId\:xWH_cUkHj9waqaEfb7H71) \<[Task](docId:1nEEnToGeYECUAAhFwNNZ)>

### Examples

`findFormTasks('1:1 Form', '-30d').countPercent{status:done}`

Returns the percentage of 1:1 Form Tasks that have been completed in the past 30 days.

`findFormTasks('Manager Review', '2024-01-01', '2025-01-01').count()`

Returns the number of Manager Review Form Tasks that were assigned in the 2024 calendar year.

[title] User
[path] Carrot reference/Fields/Data Types/

A *Carrot* datatype used by fields that store a user value.&#x20;

:::hint{type="info"}
The `User` datatype is not currently supported in Custom Fields. Supported uses for the `User` datatype are currently limited to users with access to ChartHop.
:::

### Properties

The `User` datatype does not support any user retrievable properties.


[title] Functions
[path] Carrot reference/

Functions in ChartHop work just like functions in spreadsheets -- they perform calculations on particular data (passed in as *parameters*) and return a *return value*. Some functions also retrieve data from the ChartHop database.

### Syntax

A function in Carrot appears as the function name followed by parentheses, which accepts one or several parameter values.

`function(parameter1, [parameter2])`

All function names are case-insensitive.

### Usage

Functions can be used in any Carrot expression, anywhere Carrot is used (in Smart Calc or Smart Bucket field types, when filtering the Data Sheet, configuring charts within Dashboards, building out custom content for the Homepage or Profiles, etc.)

## Function list

| **Function**                                                   | **Description**                                                                                                                                                                   |
| -------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| [abs()](https://docs.charthop.com/abs)                         | Returns the absolute value of a given value.                                                                                                                                      |
| [asOf()](https://docs.charthop.com/asof)                       | Returns the result of a Carrot expression on a particular date using either only Primary data, or both Primary and Scenario based data.                                           |
| [boolean()](https://docs.charthop.com/boolean)                 | Converts supported datatypes into a Boolean, equal to either `true `or `false`.                                                                                                   |
| [compHistory()](https://docs.charthop.com/comphistory)         | Returns the value of base or variable compensation on a given date.                                                                                                               |
| [compBetween()](https://docs.charthop.com/compbetween)         | Calculates the base, variable or cash compensation of a person over a specified period of time including all jobs the person has held.                                            |
| [costBetween()](https://docs.charthop.com/costbetween)         | Calculates the cost of a job over a specified period of time where the cost of a job includes if multiple people have held that job.                                              |
| [date()](https://docs.charthop.com/grpU-date)                  | Converts input to `Date` including relative `Date` input.                                                                                                                         |
| [day()](https://docs.charthop.com/day)                         | Returns the day of the month of a particular date.                                                                                                                                |
| [daysOffBetween()](https://docs.charthop.com/daysoffbetween)   | Returns the number of days off taken between two given dates.                                                                                                                     |
| [diffYears()](https://docs.charthop.com/diffyears)             | Returns the total number of years between two given dates.                                                                                                                        |
| [diffMonths()](https://docs.charthop.com/diffmonths)           | Returns the total number of months between two given dates.                                                                                                                       |
| [distance()](https://docs.charthop.com/distance)               | Returns the distance between built-in addresses in ChartHop in the specified units.                                                                                               |
| [monthEnd()](https://docs.charthop.com/monthend)               | Returns the last day of a given month.                                                                                                                                            |
| [formatMoney()](https://docs.charthop.com/formatmoney)         | Converts a given value of type `Money` into a `String`, while retaining the currency type in the `String` output. Optionally specify the format and locale of the returned value. |
| [formatRound()](https://docs.charthop.com/formatround)         | Converts a given value into a `String`, rounded to specific decimal place. Accepts `Number`, `Money`, or `Percent` datatypes.                                                     |
| [formatNumber()](https://docs.charthop.com/formatnumber)       | Converts a given value of type `Number` into a `String`.                                                                                                                          |
| [formatPercent()](https://docs.charthop.com/formatpercent)     | Converts a given value of type `Percent` into a `String`.                                                                                                                         |
| [formatDate()](https://docs.charthop.com/formatdate)           | Converts a given value of type `Date` into a `String`.                                                                                                                            |
| [grantedShares()](https://docs.charthop.com/grantedshares)     | Returns all of the shares that were granted between two specified dates.                                                                                                          |
| [length()](https://docs.charthop.com/length)                   | Returns the number of items in a list or set, or the length of a `String`.                                                                                                        |
| [max()](https://docs.charthop.com/k5Dk-max)                    | Returns the highest of all values passed as parameters.                                                                                                                           |
| [mean()](https://docs.charthop.com/mean)                       | Returns the mean value of all the passed parameters, excluding `Nulls`.                                                                                                           |
| [money()](https://docs.charthop.com/money)                     | Converts a given value to datatype `Money`, including currency conversion.                                                                                                        |
| [month()](https://docs.charthop.com/month)                     | Returns the ordinal number of the month of a particular date, from 1-12, where 1 is January, 2 is February, and so on.                                                            |
| [min()](https://docs.charthop.com/min)                         | Returns the lowest of all values passed as parameters.                                                                                                                            |
| [nextAnniversary()](https://docs.charthop.com/nextanniversary) | Given a date, returns the next upcoming anniversary of that date.                                                                                                                 |
| [number()](https://docs.charthop.com/number)                   | Given a value, returns that value as a `Number`.                                                                                                                                  |
| [pluralize()](https://docs.charthop.com/pluralize)             | Given a value of type `String`, returns that value in plural form.                                                                                                                |
| [percent()](https://docs.charthop.com/l3gK-percent)            | Given a value, returns that value as a `Percent`.                                                                                                                                 |
| [random()](https://docs.charthop.com/random)                   | Returns a random `Number` between `0` and `1`.                                                                                                                                    |
| [round()](https://docs.charthop.com/round)                     | Rounds a given value to the defined number of decimal places.                                                                                                                     |
| [roundUp()](https://docs.charthop.com/roundup)                 | Rounds a given value to the next largest integer.                                                                                                                                 |
| [roundDown()](https://docs.charthop.com/rounddown)             | Rounds a given value to the next smallest number.                                                                                                                                 |
| [string()](https://docs.charthop.com/ocDO-string)              | Given a value, returns that value as a `String`.                                                                                                                                  |
| [subString()](https://docs.charthop.com/substring)             | Given a `String` and specified parameters, returns a part of that `String`.                                                                                                       |
| [stockPrice()](https://docs.charthop.com/stockprice)           | Given a `Date`, returns the value of shares on that date.                                                                                                                         |
| [monthStart()](https://docs.charthop.com/monthstart)           | Returns the first day of a given month.                                                                                                                                           |
| [split()](https://docs.charthop.com/split)                     | Divides a `String` into a list of Strings.                                                                                                                                        |
| [vestValue()](https://docs.charthop.com/vestvalue)             | Given a start date and end date, returns the share price value of stock that will vest over that period of time.                                                                  |
| [vestShares()](https://docs.charthop.com/vestshares)           | Given a start date and end date, returns the number of shares that will vest over that period of time.                                                                            |
| [year()](https://docs.charthop.com/year)                       | Returns the Gregorian calendar year of a particular date.                                                                                                                         |


[title] findResponsesByAssessment()
[path] Carrot reference/Functions/

Returns form responses for a specific form submitted within a specific assessment cycle, optionally filtered by date range.

This is useful when you need to scope responses to a particular review or survey cycle, rather than pulling all responses across all time.

### Syntax

`findResponsesByAssessment(form, assessment[, from][, until])`

### Parameters

| **Parameter** | **Type**                                  | **Description**                                          |
| ------------- | ----------------------------------------- | -------------------------------------------------------- |
| `form`        | [String](docId\:Ujw2AQAktel5uukLuP73S)    | Name or ID of the form                                   |
| `assessment`  | [String](docId\:Ujw2AQAktel5uukLuP73S)    | Name or ID of the assessment cycle                       |
| `from`        | [Timestamp](docId\:j1uFZtC3_yprDI3uCIn3u) | Starting point of the date range to traverse (inclusive) |
| `until`       | [Timestamp](docId\:j1uFZtC3_yprDI3uCIn3u) | Ending point of the date range to traverse (exclusive)   |

### Return Type

[List](docId\:xWH_cUkHj9waqaEfb7H71) \<[FormResponse](docId\:lIHL9I6DR0EINbNNDG2ec)>

### Examples

`findResponsesByAssessment('Manager Review', 'Q3 2024 Performance Review').count()`

Counts the total number of manager review submissions within the Q3 2024 performance cycle.

`findResponsesByAssessment('Manager Review', 'Q3 2024 Performance Review').mean{answerValue.reviewScore}`

Returns the average review score across all submissions in the specified assessment cycle.

`findResponsesByAssessment('Self Review', 'Q3 2024 Performance Review').groupBy{target}.count()`

In a Dashboard, shows how many self-reviews were submitted per person in the Q3 2024 cycle.

[title] findResponsesBySubmitPerson()
[path] Carrot reference/Functions/

Returns form responses for a specific form where the **submitter** (the person who filled out the form) matches a given person, optionally filtered by date range.

Useful when you want to see all form submissions *made by* a particular employee — for example, all shoutouts a person has sent, or all self-reviews they've submitted.

### Syntax

`findResponsesBySubmitPerson(form, submitPerson[, from][, until])`

### Parameters

| **Parameter**  | **Type**                                  | **Description**                                          |
| -------------- | ----------------------------------------- | -------------------------------------------------------- |
| `form`         | [String](docId\:Ujw2AQAktel5uukLuP73S)    | Name or ID of the form                                   |
| `submitPerson` | Person                                    | The person who submitted the form responses              |
| `from`         | [Timestamp](docId\:j1uFZtC3_yprDI3uCIn3u) | Starting point of the date range to traverse (inclusive) |
| `until`        | [Timestamp](docId\:j1uFZtC3_yprDI3uCIn3u) | Ending point of the date range to traverse (exclusive)   |

### Return Type

[List](docId\:xWH_cUkHj9waqaEfb7H71) \<[FormResponse](docId\:lIHL9I6DR0EINbNNDG2ec)>

### Examples

`findResponsesBySubmitPerson('Shoutout', person, '-90d').count()`

Counts the number of shoutouts the current person has sent in the past 90 days.

`findResponsesBySubmitPerson('1:1 Notes', person, intervalFrom, intervalUntil).count()`

In a Dashboard, returns the number of 1:1 Notes the current person has submitted over the dashboard's time interval.

[title] if
[path] Carrot reference/Operators/

A logic operator used to return a defined expression based on the truthiness of one or more other expressions.

### Syntax

`expressionOne if expressionTwo`

- `expressionOne` will be evaluated and returned if `expressionTwo` is evaluated to be truthy.

### Sample usage

`base if directs > 0` returns `base` if `directs` is greater than `0`.

### See also

- [|| (or)](docId\:A7wCSbxwsJEwfYJwbuH8z)&#x20;
- [&& (and)](docId\:UVpXLLWGCPZRpr42E2NXm)&#x20;
- [. (dot)](docId\:t8HBpyTpsANh8YfiZ4YJf)&#x20;


[title] * (multiply)
[path] Carrot reference/Operators/

An operator used to multiply two or more expressions.

### Syntax

`valueOne * valueTwo * valueThree * ...`

### Sample usage

`1 * 2 * 3` returns `6`

### Supported data types

- If two `Number`, `Percent`, or `Money` values are multiplied together, the values will be multiplied.
- If a `Number`, `Percent`, or `Money` value is multiplied by a Number or Percent value, the values will be multiplied and retain the `Number`, `Percent`, or `Money` data type.

### See also

- [Number](docId\:ucI5tCTfVBhonEJ6ZQijg)
- [Percent](docId\:FbN7bFaHlFPV4f1C53DxA)
- [/ (divide)](docId\:luJCYaMvfnApFnvX916_K)&#x20;


[title] / (divide)
[path] Carrot reference/Operators/

An operator used to divide one expression by another.

### Syntax

`dividend / divisor`

### Sample usage

`1 / 2` returns `0.5`

### Supported data types

- If a `Number`, `Percent`, or `Money` value is divided by a value of the same type, the quotient will be returned.
- If a `Number`, `Percent`, or `Money` value is divided by a `Number` or `Percent` value, the quotient will be returned with the same data type as the dividend.

### See also

- [Number](docId\:ucI5tCTfVBhonEJ6ZQijg)&#x20;
- [\* (multiply)](docId\:BNPKFAw9igsz2hPk4WXbh)&#x20;


[title] = (equals)
[path] Carrot reference/Operators/

Returns true when the value of a given field and a given expression are the same.&#x20;

### Syntax

`expression1 = expression2`

### Sample usage

`tenure=3` returns all records where `tenure` is `3`.

`department="engineering"` returns all records where `department` is `engineering`.

`startDate=('2021-01-01')` returns all records where `startDate` is `01/01/2021`.

### Supported data types

- Evaluated expressions can be of any type.
- `String` comparisons are case-insensitive.
- If either side of the comparison is a `List` then the comparison will return true if there are any values in common.

### See also

- [: (match)](docId\:ldpiNC46SdrU3oQyN7cb2)&#x20;
- [!= (not-equals)](docId\:G6PRxUTGM2VRCNW7HcqrY)&#x20;
- [?: (elvis)](docId\:X-HM1Bldw8aWd8-byRlZV)&#x20;


[title] . (dot)
[path] Carrot reference/Operators/

Used to retrieve a property of a given field.&#x20;

### Syntax

`field.property`

- `property` - a supported property of the target field's data type, ex. fields of type [Address](docId\:cprKzR-VnOLXIXCms6UGz) have ten supported properties.

### Sample usage

`workAddress.city:"Oak Park"` returns all records where the `city` property of the field `workAddress` is `Oak Park`.

### See also

- [\[ \](array)](docId\:py8sKX3_AquLsnUSBCD5R)&#x20;
- [? (ternary)](docId\:mJPHsJn60Dsm44OO2welJ)&#x20;
- [?: (elvis)](docId\:X-HM1Bldw8aWd8-byRlZV)&#x20;


[title] [ ](array)
[path] Carrot reference/Operators/

Access a given expression as an array, and return a defined position on that array.

### Syntax

`expression[#]`

- `expression` - a value that can be referenced as a list or object.
- `#` - the ordinal index to target within the array.

### Sample usage

`grants[0].shares` accesses `grants` as an array to get the number of `shares` of the **first** `grant` issued.

### See also

- [. (dot)](docId\:t8HBpyTpsANh8YfiZ4YJf)&#x20;
- [ç](docId\:mJPHsJn60Dsm44OO2welJ)&#x20;
- [?: (elvis)](docId\:X-HM1Bldw8aWd8-byRlZV)&#x20;


[title] % (modulus)
[path] Carrot reference/Operators/

An operator used to calculate the remainder of a division operation.

### Syntax

`dividend % divisor`

### Sample usage

`10 % 7 `returns `3`

### Supported data types

- Given two values of type `Number`, the modulus operator will return the remainder of the first value divided by the second value.

### See also

- [Number](docId\:ucI5tCTfVBhonEJ6ZQijg)&#x20;
- [/ (divide)](docId\:luJCYaMvfnApFnvX916_K)&#x20;


[title] ?: (elvis)
[path] Carrot reference/Operators/

Evaluates the truthiness of the first expression, and returns its value if that value is truthy. If the value of the first expression is not truthy, it returns the value of the second expression.

### Syntax

`condition ?: ifFalse`

- `condition` - the conditional expression to be evaluated for truthiness.
- `ifFalse` - the expression to be evaluated if `condition` is not found to be truthy.

### Sample usage

`name.pref ?: name.first` returns someone's preferred first name if available, otherwise returns their formal first name.

### See also

- [= (equals)](docId:50o8vwTa5Zp6SV8DQdwjl)&#x20;
- [!= (not-equals)](docId\:G6PRxUTGM2VRCNW7HcqrY)&#x20;
- [? (ternary)](docId\:mJPHsJn60Dsm44OO2welJ)&#x20;


[title] || (or)
[path] Carrot reference/Operators/

A logic operator used to evaluate the truthiness of at least one expression in a sequence of expressions.

### Syntax

`booleanExpression || booleanExpression || ...`

### Sample usage

`directs>0 || department:engineering` returns all records with `directs` greater than zero **or** where `department` is `engineering`.

### See also

- [&& (and)](docId\:UVpXLLWGCPZRpr42E2NXm)&#x20;
- [= (equals)](docId:50o8vwTa5Zp6SV8DQdwjl)&#x20;
- [> (greater-than)](docId\:KC0htlkxUvbamz_X6QFT9)&#x20;


[title] string()
[path] Carrot reference/Functions/

Given a `value`, returns that value as a `String`.

### Syntax

`string(value)`

- `value` - the value to be converted to a String
- **Return type:** [String](docId\:Ujw2AQAktel5uukLuP73S)&#x20;

### Sample usage

`string(base)` returns the value of `base` as a `String`.

`"Base = " + string(base)` where `base = 100000` returns the value `Base = 100000` as a `String`.


[title] random()
[path] Carrot reference/Functions/

Returns a random `Number` between `0` and `1`.

### Syntax

`random()`

- **Return type:** [Number](docId\:ucI5tCTfVBhonEJ6ZQijg)

### Sample usage

`random()` returns a random `Number` value between `0` and `1`. No arguments are passed by this function. Input arguments will not be considered when returning a random `Number` value between `0` and `1`.

### Examples

- `random()` → `0.7429851` (returns a decimal between 0 and 1)
- `random()` → `0.2891047` (each call returns a different random value)
- `floor(random() * 10) + 1` → `8` (random integer between 1-10)


[title] .count()
[path] Carrot reference/Methods/

Returns the number of items in a [Sequence](docId\:JG4itlQWafzLpArttFo67) or [List](docId\:xWH_cUkHj9waqaEfb7H71).

### Syntax

`.count()`

- Returns the total number of items in the Sequence or List

`.count{expression}`

- Returns the number of items in the Sequence or List where the `expression `evaluates to a truthy value

### Examples

- `[1, 2, 3].count()` returns `3`
- `[1, 2, 3].count{it >= 2}` returns `2`
- `db.job.find{dept:engineering}.count()` returns the number of jobs in the Engineering department.
- `db.job.find{dept:engineering}.count{baseComp > 100000}` returns the number of jobs in the Engineering department where base compensation is at least $100k.


[title] uppercase()
[path] Carrot reference/Functions/

Returns a [String](docId\:Ujw2AQAktel5uukLuP73S) with all characters capitalized.

### Syntax

`uppercase(string)`

- `string` - the String value to be capitalized
- **Return type:** [String](docId\:Ujw2AQAktel5uukLuP73S)&#x20;

### Examples

- `uppercase("Hello world")` returns `HELLO WORLD`
- `uppercase(title)` returns the current job's title, uppercased


[title] personFieldChanges()
[path] Carrot reference/Functions/

Return a sequence of changes for the current person, for the given field.

### Syntax

Single field: `personFieldChanges(fieldCode, fromDate, untilDate)`

Multiple fields: `personFieldChanges(['fieldCode1', 'fieldCode2'], fromDate, untilDate)`



### Parameters

| **Parameter** | **Type**                                   | **Description**                                            |
| ------------- | ------------------------------------------ | ---------------------------------------------------------- |
| `field`       | [String](docId\:Ujw2AQAktel5uukLuP73S)     | The slug or ID of a field or an array of multiple fields.  |
| `from`        | [Timestamp](docId\:j1uFZtC3_yprDI3uCIn3u)  | Starting point of the date range to traverse (inclusive)   |
| `until`       | [Timestamp](docId\:j1uFZtC3_yprDI3uCIn3u)  | Ending point of the date range to traverse (exclusive)     |

### Return

[Sequence](docId\:JG4itlQWafzLpArttFo67) \<[Job Changes](docId\:ciPz7Jxm4WXxPXmDx-uwB)>&#x20;

| **Parameter**      | **Type**                                     | **Description**                                       |
| ------------------ | -------------------------------------------- | ----------------------------------------------------- |
| `change.fieldCode` | [String](docId\:Ujw2AQAktel5uukLuP73S)<br /> | The value of the field that was updated by the change |
| `change.date`      | [Date](docId\:xTAQdzvLBTAKjxRnpFwe9)         | Returns the data the that the change occured.         |
| `change.type`      | [String](docId\:Ujw2AQAktel5uukLuP73S)       | Will return one of `CREATE` `UPDATE` or `DELETE`      |



### Examples

`personFieldChanges(address, '-5y').count()`

Returns how many times the `address` field has changed in the last 5 years for a specific person.&#x20;

Would return `3` if the person had 3 changes to their `address` field in the time period.&#x20;



`personFieldChanges(address, '2024-01-01', '2025-01-01')`

Returns a sequence of changes to the `address` field between 1/1/2024 and 1/1/2025 for a specific person.&#x20;



`personFieldChanges(address).first.update.title`

Returns the original value of the `address` field that was set for a specific person.&#x20;



`personFieldChanges([NDA,PIAA,EmploymentContract], '2020-01-01', '2025-01-01')`

Returns a sequence of all changes to the `NDA, PIAA, EmploymentContract` fields for a specific person.&#x20;



`personFieldChanges(address.state).map{it.update.address.state}`

Example return:  `["TX", "CO"]`

Returns an array of all of the titles across all changes for a specific person.



`personFieldChanges(address.state).map{date}`

Example Return: `[2020-01-01, 2023-01-02]`

Returns an array of all of the dates of that the changes occured on for a specific person.



### CQLT Example Template

This would return a table with the dates and states that the person lived in.&#x20;

:::CodeblockTabs
Function

```javascript
  {% for change in jobFieldChanges('address.state') %}
  <tr>
  <td>{{change.date}}</td>
  <td>{{change.address.state}}</td>
  </tr>
  {% endfor %}
```
:::


[title] pluralize()
[path] Carrot reference/Functions/

Given a value of type `String`, returns that value in plural form.

### Syntax

`pluralize(number, singular[, plural])`

- `number` - the specified number of instances of the evaluated string.
- `singular` - the singular form of the evaluated string.
- `plural` (optional) - the plural form of the evaluated string.
- **Return type:** [String](docId\:Ujw2AQAktel5uukLuP73S)&#x20;

### Sample usage

`pluralize(10, "banana")` returns `"bananas"`.

`pluralize(1, "address", "addresses")` returns `"address"`.

`pluralize(10, "address", "addresses")` returns `"addresses"'`.

### Supported data types

| **Input type**                                                                        | **Return type**                         | **Logic**                                                                                                                                                                                                                                             |
| ------------------------------------------------------------------------------------- | --------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| ****[Number](docId\:ucI5tCTfVBhonEJ6ZQijg), [String](docId\:Ujw2AQAktel5uukLuP73S)    | [String](docId\:Ujw2AQAktel5uukLuP73S)  | If a Number value greater than `1`, or less than `1`, and a single String value are passed, the String value will be returned with an `s` appended to it. If a Number value of `1` is passed, the String value will remain in singular form.          |
| [Number](docId\:ucI5tCTfVBhonEJ6ZQijg) , [String](docId\:Ujw2AQAktel5uukLuP73S)  (x2) | [String](docId\:Ujw2AQAktel5uukLuP73S)  | If a Number value greater than `1`, or less than `1`, and two String value are passed, including the optional parameter, the second String value will be returned. If a Number value of `1` is passed, the String value will remain in singular form. |
| *Unsupported data types*                                                              | **[Null](docId\:N9trVqonnBknqL9DrNBP6)  | Unsupported data types return `Null`.                                                                                                                                                                                                                 |


[title] .countPercent()
[path] Carrot reference/Methods/

Returns the percentage of items in a [Sequence](docId\:JG4itlQWafzLpArttFo67) or [List](docId\:xWH_cUkHj9waqaEfb7H71) that match a criteria.

The result is always returned as a [Percent](docId\:FbN7bFaHlFPV4f1C53DxA), calculated as (number of items that match the criteria) divided by (total number of items).

### Syntax

`.count{expression}`

- Returns the percentage of items in the Sequence or List where the `expression `evaluates to a truthy value

### Examples

- `[1, 2, 3, 4].countPercent{it >= 3}` returns `50%`
- `db.job.find().countPercent{dept:engineering}` returns the percentage of all jobs in the organization that are in the Engineering department.
- `db.job.find{dept:engineering gender:*}.countPercent{gender:female}` returns the percentage of Female-identified people, taken as a percentage of people in the Engineering department who have specified their gender.


[title] February 2022 release notes
[path] Release Notes/Release notes 2022/

## 02.25.22

***

**🎁 &#x20;**<font color="#2166ae">**Added**</font>**&#x20;&#x20;**

-



<font color="#eb144c">**⚒  Fixed**</font>&#x20;

-

## 02.18.22

***

**🎁 &#x20;**<font color="#2166ae">**Added**</font>**&#x20;&#x20;**

- Minor improvements to the **Data Sheet date picker** tool to improve consistency



<font color="#eb144c">**⚒  Fixed**</font>&#x20;

- Fixed a bug causing **Money values to display as USD** regardless of set currency
- Fixed a bug causing **Overall Headcount Per Month to display different numbers** when clicked
- Fixed a bug causing **hidden fields to appear** in the filter dropdown
- Fixed an issue causing the **Lever API to hit the rate limit** during ChartHop syncs
- Fixed a bug causing the **data contained within a report to change** upon refresh
- Fixed a bug **preventing the manager filter from displaying all available options**
- Fixed a bug preventing **pie chart previews** from displaying a scroll bar

## 02.11.22

***

****

**🎁 &#x20;**<font color="#2166ae">**Added**</font>**&#x20;&#x20;**

- Increased the **maximum y-axis** value in Reports
- Added ability to **pull in Gusto custom fields**
- Added **support for new Carta vesting schedule** 2.0
- Added option to **filter out contractors** in Justworks sync



****<font color="#eb144c">**⚒  Fixed**</font>&#x20;

- Fixed a bug **preventing custom color** editing on custom charts in Reports
- Fixed a bug causing **strange search behavior** in Reports
- Fixed a bug causing **duplicate entries in the Measure dropdown** in Reports
- Fixed a bug causing **duplicate backfills** in the Org chart
- Fixed a bug causing **Target Start Date to display as N/A** for all users
- Fixed a bug causing **discrepancy between Reports and Data sheet**
- Fixed a bug preventing **changes made in the Scenario Org Chart** from appearing in an export

## 02.04.22

***

**🎁 &#x20;**<font color="#2166ae">**Added**</font>**&#x20;&#x20;**

- Renamed navigation items to improve context (ex. **Dashboard** is now **Home**)
- Added **improvements to the Delete functionality** in Custom fields



****<font color="#eb144c">**⚒  Fixed**</font>&#x20;

- Fixed an error causing **Sync to Google Sheet to fail** in Google Workspace app
- Fixed a bug causing **area graphs to display a value of 100%** regardless of actual value
- Fixed a bug  preventing **two Scenarios from merging** into one
- Fixed a bug causing **bulk changes** made on the data sheet to be **reverted** if the target person is located in Amsterdam
- Fixed a bug **preventing job description from updating** from the Job Profile
- Fixed a bug causing **line graphs to disappear** unless editing a chart
- Fixed a bug causing **exported charts to look different** from charts in the app
- Fixed **repetitive copy** in tooltips in Reports
- Fixed an issue preventing office-based employees from appearing on the MapFi
- Fixed an export error that appears when exporting to PDF in ChartHop


[title] Release Notes Archive 2022
[path] Release Notes/


[title] Redesigned User Management Settings
[path] Labs/

:::hint{type="info"}
This feature is currently in Beta. We're excited for you to try it and would love your feedback. Send it to the ChartHop team or directly to [product-feedback@charthop.com](mailto\:product-feedback@charthop.com).

### How to set up a Beta Feature

1. From the left sidebar, select **Admin**, then select **Labs**.
2. Use the switch to toggle on the feature, then press the **Save settings** button.
3. Read below for additional setup instructions and context about what will be activated when you save settings.
:::

## What's new

The options in [User management settings](docId\:VvTQ5LLbFMPBtdoRp2u21) have been redesigned to make them simpler and clearer to understand.

## Automated user management

This tab contains controls for automatically inviting and revoking user access.

![](https://api.archbee.com/api/optimize/CXAjUAezd9VEEVQBIYmdw/8QnKYg-hrRnEOiNq-Pe6q-20250917-015552.png)

## Authentication Settings

This tab contains setting for access methods, sessions and notifications.

![](https://api.archbee.com/api/optimize/CXAjUAezd9VEEVQBIYmdw/ZSUGOwmjuT27re1PFUCvj-20250917-015631.png)

[title] Finch Integration
[path] Labs/

:::hint{type="warning"}
This app is currently in Beta.&#x20;

We're really excited about it and it's already being used by multiple organizations.&#x20;

Try it out and send feedback to the ChartHop team or directly to [product-feedback@charthop.com](mailto\:product-feedback@charthop.com). &#x20;

### How to setup a Beta Feature

1. From the left sidebar, select **Admin,&#x20;**&#x74;hen select **Apps & Bundles**.
2. Under "**Payroll and HCM Apps**", select "**Other Payroll & HCM's**"
3. Read below for additional setup instructions and context about what will be activated when you save settings.&#x20;
:::

## Overview

The Finch integration is a one way sync that allows for syncing data into ChartHop from many applications. Offering more integrations empowers our customers by expanding data access, reducing manual work, and improving overall efficiency.

## What integrations does Finch support?

Finch offers an integration with over 200 payroll and HR providers. ChartHop recommends Automated integrations, as HR data can be updated every 24 hours. These integrations are currently:&#x20;

| **Integration** | **Sync Cadence** |
| --------------- | ---------------- |
| AlphaStaff      | 24 hours         |
| ECCA            | 24 hours         |
| Factorial HR    | 24 hours         |
| Humaans         | 24 hours         |
| Insperity       | 24 hours         |
| isolved         | 24 hours         |
| Namely          | 24 hours         |
| OnPay           | 24 hours         |
| Paychex Flex    | 24 hours         |
| Paycom          | 24 hours         |
| Paycor          | 24 hours         |
| Payday Payroll  | 24 hours         |
| Personio        | 24 hours         |
| Rippling        | 24 hours         |
| Sage HR         | 24 hours         |
| Sapling         | 24 hours         |
| Sequoia One     | 24 hours         |
| Sesame          | 24 hours         |
| UKG Ready       | 24 hours         |



## Assisted vs Automated Integrations

The difference between **automated** and **assisted** integrations comes down to how frequently data flows between systems:

- **Automated Integrations**: These are fully API-driven, meaning data moves seamlessly between applications without manual intervention. They sync data automatically every 24 hours and require no extra configuration once set up.&#x20;
- **Assisted Integrations**: These act as a workaround when an API is unavailable or restricted. Instead of direct API access, a third party (like Finch) is granted permission to pull and standardize data from a system. This data is refreshed every 7 days.&#x20;

Find out what integration type your application has [here](https://developer.tryfinch.com/integrations/providers).

## Field Support

Every integration doesn't support the same fields in the source system. These vary based on the platform you are syncing from. The required fields for ChartHop are: `Work Email, Employee contact ID, First name, Last name, Start Date, Title` and `Manager`.&#x20;

The above list of integrations DO support all of ChartHops required fields.You can find out what fields are supported for you integration [here](https://developer.tryfinch.com/integrations/field-support).&#x20;






[title] January 2022 release notes
[path] Release Notes/Release notes 2022/

## 01.28.22

***

**🎁 &#x20;**<font color="#2166ae">**Added**</font>**&#x20;&#x20;**

- Deployed **new design improvements to the&#x20;**[Fields](#) module.
- Deployed **a new&#x20;**[Sync history page](https://app.charthop.com/demo/sync-history)****
- Deployed **new design improvements to the&#x20;**[Apps](#) module featuring a redesigned list page and redesigned detail pages



****<font color="#eb144c">**⚒  Fixed**</font>&#x20;

- Removed the ability to **change ordering of Numeric scale** fields after data has been collected
- Fixed issue **preventing Shares vesting column** from displaying accurately in **Data sheet**
- Fixed an issue causing CSV importer to ignore day values less than or equal to `12`
- Fixed an issue causing **Turnover not to be treated as a percentage**
- Fixed an issue causing comp history table in profile to display incorrect values



## 01.21.22

***

****<font color="#eb144c">**⚒  Fixed**</font>&#x20;

- Fixed an issue causing **profile tab to disappear** when set to Manager only in **Custom profile tabs** page
- Fixed an issue **preventing Turnover from functioning in Pie charts** in Reports
- Fixed an issue **preventing Reviews filters from functioning&#x20;**&#x77;hen paginated
- Fixed an issue **preventing Target start date from displaying values** containing `January 2022`
- Fixed an issue **causing Charts to display random info** in Reports
- Fixed an erro&#x72;**&#x20;caused by cloning a job** with a smart bucket field
- Fixed a bug **disrupting the functionality of the Owner access** level



## 01.14.22

***

**🎁 &#x20;**<font color="#2166ae">**Added**</font>**&#x20;&#x20;**

- Deployed **design improvements to Scenarios: Impact** tab
- Added ability to **drag and drop charts** in Reports
- Added **improved x-axis labeling** on charts where x- and .y-axis have been flipped
- Improved **resizing of pie charts**&#x20;
- Added ability to **measure base as a percentage** of total in Reports
- Added **cancel button when editing a chart** in Reports
- Added **filter by keywords** in Reports list page



****<font color="#eb144c">**⚒  Fixed**</font>&#x20;

- Fixed alignment issue on **Change views** dropdown
- Fixed an issue **preventing the Preview function** from working on new charts in Reports
- Fixed an issue causing **bar charts to flip** if cross-tabs are present
- Fixed an issue **preventing x-axis decimal values from rounding up** to nearest integer in Reports
- Restored functionality of **permissions list modal** on Reports list page
- Fixed an issue causing **monthly totals to run one month ahead** of indicated date on a time series chart in Reports



## 01.07.22

***

**🎁 &#x20;**<font color="#2166ae">**Added**</font>**&#x20;&#x20;**

- Deployed code to **enable tracking of locations&#x20;**&#x77;ith more than 20 characters in ADP while syncing data
- Enabled **sorting Reports list page columns** by clicking on the column header
- Improved **legend tool tip** in Reports
- Added **new hire webhooks** to Lever and Jobvite apps



****<font color="#eb144c">**⚒  Fixed**</font>&#x20;

- Fixed an issue causing **rogue Org Chart** lines to appear at certain zoom levels
- Fixed an issue causing **changes made during the current day** to be omitted from the Scenarios export
- Fixed an issue causing executive assistant **Org Chart lines** not to curve properly
- Fixed an issue preventing Scenarios from **recognizing editable fields** based on the `editable` flag
- Fixed an issue causing a specific **bundle not to import Form questions** correctly
- Fixed an issue **preventing Reports list page column from resizing**
- Fixed an issue causing strange behavior when sorting by **Created by** and **Last changed at** on the Reports list page
- Removed code causing **frequent loading screens** in the Reports list page
- Fixed a bug causing **missing data when viewing reports**
- Fixed a bug **preventing charts from populating** in the Reports module
- Fixed a bug causing **adjacent charts to change format** in Reports module
- Fixed **padding on buttons in Reports** module
- Fixed an issue **preventing ILS currency from functioning** in Data Sheet

****

[title] Google Sheets Inbound Integration
[path] Labs/

:::hint{type="warning"}
This feature is currently in Alpha. Be one of the first customers to try it! Please share any feedback with the ChartHop team.&#x20;

### How to setup a Alpha Feature

1. Contact [ChartHop support](mailto\:support@charthop.com) or your CSM if you have one. They can activate the feature for you.&#x20;
2. Read below for setup instructions and context on how the feature will work.
:::

## Overview

Bring business and other company data into ChartHop with our Google Sheets Integration.&#x20;

Contact the ChartHop team to learn more.&#x20;

### Places to utilize data from Google Sheets:

- Tables
- Home Page
- Profile Tabs
- Dashboards
- Forms (Text blocks)&#x20;
- Resource Pages
- Letter Templates

## Setup instructions

### Installing the application&#x20;

In labs, enable "Google Sheets Integration". You will then see "Google Sheets" display on the apps page under the tab "Other available apps". Once you click install, it will guide you to connect your Google account so we can access the data in the shared sheets. Once installed, you can rename the application to better match the data you are pulling in.&#x20;
**ChartHop cannot access data that you have not explicitly mapped to ChartHop tables or fields.**

**Sync frequency**

You can choose to automate this sync and have it run daily, or you can manually run it at your discretion.

::Image[]{src="https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/mnEj6HTTlwDus0O5fRdyD_image.png" size="60" width="782" height="408" position="center" caption="Sync options" showCaption="true"}

### Mapping to a table in ChartHop

**Note**: The table needs to be created first in ChartHop before you can map to it.

All values must match EXACTLY, including any trailing white spaces. If there is a space, dash, or non alphabet character in the name, wrap the name in` [""]`. You **CAN** wrap any value in the brackets and quotes.&#x20;

To map to a column in a table, you need to know the table code name (see below), and the field code name for the column.&#x20;

::Image[]{src="https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/sjvZsS20LAKr2_hyKC4H2_image.png" size="60" width="678" height="134" position="center" caption="Table code name" showCaption="true"}

::Image[]{src="https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/lh9veo6rQv4JuPi96Mhpr_image.png" size="50" width="253" height="121" position="center" caption="Field code name for column" showCaption="true"}

You can map columns from different sheets within the same Google Sheet. You need to know the name of the sheet, and the name of the column.&#x20;

::Image[]{src="https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/S-yhzN9d3040QF8XNsBT0_image.png" size="60" width="876" height="90" position="center" showCaption="false"}

In this example, the sheet is labeled `Customers` and the columns we want to map are `Customer` and `Contract End.`

:::BlockQuote
*Inbound field mapping example*
:::

| :::BlockQuote
ChartHop Table
:::                                                            | :::BlockQuote
Google Sheet Column
:::              |
| ------------------------------------------------------------------------------------------- | -------------------------------------------------- |
| :::BlockQuote
`Customers.customerName` (this column is marked as `unique` in the table)
::: | :::BlockQuote
`["Customers"].["Customer"]`
:::     |
| :::BlockQuote
`Customers.contractEnd`
:::                                                   | :::BlockQuote
`["Customers"].["Contract End"]`
::: |

- The first field mapped needs to be the unique field. This is a value that does not repeat in its column, and can be as simple as`row number`.&#x20;
- Notice above how the values are wrapped in brackets and quotes. `Contract End `MUST be wrapped in those values to be read by ChartHop. However, you can wrap any other values for consistency.

Once all of your field mappers are set, you can click "save mappers" and run the sync.&#x20;

### Google Sheets Integration access

Initially, only Owners have the ability to install and edit the Google Sheets App.&#x20;

Fields synced from Google Sheets utilize ChartHop's [field settings](docId\:XYrLLTZxiE-BV4ZKzEs_g), so anyone in the organization can be given access to view the data in the corresponding fields.&#x20;


[title] Preboarding setup
[path] Labs/Preboarding/

Before you can invite new hires, you need to complete five setup steps. Do these once when you're first enabling preboarding for your org.

## Step 1: Set your preboarding and onboarding filters

Go to **Admin settings > Onboarding**. Two CQL filters control which employees appear in each view:

- **Preboarding filter** - defines who appears in the Preboarding tab. The default is employees with a start date more than 180 days out. Adjust this to match how early you can see announced new hires into ChartHop.
- **Onboarding filter** - defines who appears in the Onboarding tab. The default is employees who started within the last 360 days. Widen or narrow this to match your onboarding window.

Both filters are CQL expressions. Use the wand icon to edit them.

## Step 2: Install the preboarding bundle

Go to **Bundles**, search for "Preboarding," and install. The bundle gives you a working starting point with the following included:

| Item                       | What it is                                                                                           |
| -------------------------- | ---------------------------------------------------------------------------------------------------- |
| 3 automated actions        | Triggered on hire, on invite, and 3 days before start. Install disabled - customize before enabling. |
| Onboarding essentials form | A demographic info form ready to assign to new hires.                                                |
| NDA letter template        | An e-signature-ready document you can customize for your org.                                        |
| Onboarding profile tab     | The tab new hires land on when they log in. This is the preboarding home page.                       |

**Don't enable bundle actions before customizing them.** They install in a disabled state. Toggling them on without editing first sends uncustomized emails to real new hires.

## Step 3: Configure the onboarding home page

Go to **Profile Content > Onboarding tab > Edit layout**. This is the page new hires see when they log in with their magic link before day one. The bundle installs a starting layout you can edit to match your brand, task information, and any links you want new hires to have.

Sample HTML is available on the next page if you want to build a custom layout from scratch instead of editing the bundle default.

**Important:** This tab must stay named "Onboarding" for the preboarding home page to work. Renaming it breaks the connection.

## Step 4: Customize your actions

Go to **People Ops Tools > Onboarding > Actions tab** and edit each of the three bundle actions before enabling them. At minimum, update the email copy and confirm the recipients and timing are correct for your org. Toggle each action on only after you've tested it.

## Step 5: Setup preboarding invitation email

New hires will receive an email to login to ChartHop to complete their preboarding tasks. &#x20;

To setup the preboarding invitation email:

1. Go to **Access > Settings** page
2. Locate the **Preboarding invitation email** section
3. Add the **subject**, **button copy** and **invitation body**. You can use conditional statements in [Carrot](docId\:fL-eMyhB9F8NzL2Vza9fq) to vary the message by person.
4. Preview the message by sending a test email or going inside the **Invite new hires** flow

![](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/qX3m8kcSyNYOh1e_GvwbE-20251020-125247.png)



##


[title] Events
[path] ChartHop for Developers/

Any alteration to data on ChartHop represents an *event*.

You can retrieve events with the Event API, or set an app web hook to subscribe to an event pattern. Note that events are not exactly the same as *changes* (such as hires or departures), because an event can represent an amendment, or even a cancellation, of a change.

For example, if a new hire is entered, and then the date of that new hire is altered, this is just one new-hire *change*, but it's two *events*: change.create.hire and change.update.hire.

In general an event consists of an *entity* (the thing that is being acted upon), and a *type* (the type of action that is happening to the entity). In some cases the event has a *subtype* which further describes the type of entity. All events have a code that consists of either `entity.type` or `entity.type.subtype`

## Events List

### Changes

| Event                  | Meaning                          |
| ---------------------- | -------------------------------- |
| `change.create.create` | New job created                  |
| `change.create.update` | Job updated                      |
| `change.create.hire`   | New hire                         |
| `change.create.depart` | Departure                        |
| `change.create.move`   | Move/transfer                    |
| `change.create.delete` | Job removed                      |
| `change.create.data`   | Data collected                   |
| `change.update.create` | Amendment to previous new job    |
| `change.update.update` | Amendment to previous job update |
| `change.update.hire`   | Amendment to hire                |
| `change.update.depart` | Amendment to departure           |
| `change.update.move`   | Amendment to move                |
| `change.update.delete` | Amendment to job removal         |
| `change.update.data`   | Amendment to collected data      |
| `change.delete.create` | Cancellation of job creation     |
| `change.delete.update` | Cancellation of job update       |
| `change.delete.hire`   | Cancellation of new hire         |
| `change.delete.depart` | Cancellation of departure        |
| `change.delete.move`   | Cancellation of move             |
| `change.delete.delete` | Cancellation of deletion         |
| `change.delete.data`   | Cancellation of collected data   |

### People & Jobs

| Event                        | Meaning            |
| ---------------------------- | ------------------ |
| `job.create` `person.create` | New person created |
| `person.update`              | Person updated     |
| `job.update`                 | Job updated        |
| `job.delete`                 | Job deleted        |

### Groups

| Event          | Meaning       |
| -------------- | ------------- |
| `group.create` | Group created |
| `group.update` | Group updated |
| `group.delete` | Group deleted |

### Goals

| Event                  | Meaning                       |
| ---------------------- | ----------------------------- |
| `goal.create`          | Goal created                  |
| `goal.update`          | Goal updated                  |
| `goal.delete`          | Goal deleted                  |
| `goal_progress.create` | Goal progress update added    |
| `goal_progress.update` | Goal progress update modified |
| `goal_progress.delete` | Goal progress update deleted  |

### AI

| Event                    | Meaning                  |
| ------------------------ | ------------------------ |
| `ai_chat.create`         | AI chat started          |
| `ai_chat.update`         | AI chat updated          |
| `ai_chat.delete`         | AI chat deleted          |
| `ai_agent.create`        | AI agent created         |
| `ai_agent.update`        | AI agent updated         |
| `ai_agent.delete`        | AI agent deleted         |
| `ai_agent_memory.create` | AI agent memory created  |
| `ai_agent_memory.update` | AI agent memory updated  |
| `ai_agent_memory.delete` | AI agent memory deleted  |
| `ai_config.update`       | AI configuration updated |
| `ai_hint.create`         | AI hint created          |
| `ai_hint.update`         | AI hint updated          |
| `ai_hint.delete`         | AI hint deleted          |
| `ai_prompt.create`       | AI prompt created        |
| `ai_prompt.update`       | AI prompt updated        |
| `ai_prompt.delete`       | AI prompt deleted        |
| `ai_credit_limit.update` | AI credit limit updated  |

### Approvals

| Event                         | Meaning                      |
| ----------------------------- | ---------------------------- |
| `approval_chain.create`       | Approval chain created       |
| `approval_chain.update`       | Approval chain updated       |
| `approval_chain.delete`       | Approval chain deleted       |
| `approval_chain_stage.create` | Approval chain stage created |
| `approval_chain_stage.update` | Approval chain stage updated |
| `approval_chain_stage.delete` | Approval chain stage deleted |
| `approval_request.create`     | Approval request submitted   |
| `approval_request.approve`    | Approval request approved    |
| `approval_request.reject`     | Approval request rejected    |
| `approval_request.update`     | Approval request updated     |
| `approval_delegate.create`    | Approval delegation created  |
| `approval_delegate.update`    | Approval delegation updated  |
| `approval_delegate.delete`    | Approval delegation deleted  |

### Compensation

| Event                | Meaning                        |
| -------------------- | ------------------------------ |
| `comp_band.create`   | Compensation band created      |
| `comp_band.update`   | Compensation band updated      |
| `comp_band.delete`   | Compensation band deleted      |
| `comp_review.create` | Compensation review created    |
| `comp_review.update` | Compensation review updated    |
| `comp_review.delete` | Compensation review deleted    |
| `budget.create`      | Budget created                 |
| `budget.update`      | Budget updated                 |
| `budget.delete`      | Budget deleted                 |
| `budget_pool.create` | Budget pool created            |
| `budget_pool.update` | Budget pool updated            |
| `budget_pool.delete` | Budget pool deleted            |
| `guideline.create`   | Compensation guideline created |
| `guideline.update`   | Compensation guideline updated |
| `guideline.delete`   | Compensation guideline deleted |

### Equity

| Event                | Meaning             |
| -------------------- | ------------------- |
| `stock_grant.create` | Stock grant created |
| `stock_grant.update` | Stock grant updated |
| `stock_grant.delete` | Stock grant deleted |
| `stock_price.update` | Stock price updated |

### Time Off

| Event                   | Meaning                  |
| ----------------------- | ------------------------ |
| `timeoff.create`        | Time off request created |
| `timeoff.update`        | Time off request updated |
| `timeoff.delete`        | Time off request deleted |
| `timeoff_policy.create` | Time off policy created  |
| `timeoff_policy.update` | Time off policy updated  |
| `timeoff_policy.delete` | Time off policy deleted  |

### Calendar

| Event                   | Meaning                |
| ----------------------- | ---------------------- |
| `calendar.create`       | Calendar created       |
| `calendar.update`       | Calendar updated       |
| `calendar.delete`       | Calendar deleted       |
| `calendar_entry.create` | Calendar entry created |
| `calendar_entry.update` | Calendar entry updated |
| `calendar_entry.delete` | Calendar entry deleted |

### Tasks

| Event                | Meaning                    |
| -------------------- | -------------------------- |
| `task.create`        | Task created               |
| `task.update`        | Task updated               |
| `task.delete`        | Task deleted               |
| `task_config.create` | Task configuration created |
| `task_config.update` | Task configuration updated |
| `task_config.delete` | Task configuration deleted |

### Forms

| Event                  | Meaning               |
| ---------------------- | --------------------- |
| `form.create`          | Custom form created   |
| `form.update`          | Custom form updated   |
| `form.delete`          | Custom form deleted   |
| `form.submit`          | Custom form submitted |
| `form_response.create` | Form response created |
| `form_response.update` | Form response updated |
| `form_response.delete` | Form response deleted |

### Policies

| Event           | Meaning        |
| --------------- | -------------- |
| `policy.create` | Policy created |
| `policy.update` | Policy updated |
| `policy.delete` | Policy deleted |

### Roles & Access

| Event                   | Meaning                           |
| ----------------------- | --------------------------------- |
| `role.create`           | Role created                      |
| `role.update`           | Role updated                      |
| `role.delete`           | Role deleted                      |
| `user.create`           | User created                      |
| `user.update`           | User updated                      |
| `user.create.<appname>` | App installed                     |
| `user.update.<appname>` | Installed app settings changed    |
| `user.token.<appname>`  | Token generated for installed app |
| `user.delete.<appname>` | App uninstalled                   |
| `user.update_password`  | User password updated             |
| `user.remove_password`  | User password removed             |
| `user.invite`           | User invited into org             |

### Apps & Integrations

| Event        | Meaning     |
| ------------ | ----------- |
| `app.create` | App created |
| `app.update` | App updated |
| `app.delete` | App deleted |

### Scenarios

| Event             | Meaning          |
| ----------------- | ---------------- |
| `scenario.create` | Scenario created |
| `scenario.update` | Scenario updated |
| `scenario.delete` | Scenario deleted |

### Tables

| Event              | Meaning              |
| ------------------ | -------------------- |
| `table.create`     | Custom table created |
| `table.update`     | Custom table updated |
| `table.delete`     | Custom table deleted |
| `table_row.create` | Table row created    |
| `table_row.update` | Table row updated    |
| `table_row.delete` | Table row deleted    |

### Transcripts

| Event               | Meaning                    |
| ------------------- | -------------------------- |
| `transcript.create` | Meeting transcript created |
| `transcript.update` | Meeting transcript updated |
| `transcript.delete` | Meeting transcript deleted |

### Content & Reports

| Event                 | Meaning              |
| --------------------- | -------------------- |
| `content.create`      | Content created      |
| `content.update`      | Content updated      |
| `content.delete`      | Content deleted      |
| `report.create`       | Report created       |
| `report.update`       | Report updated       |
| `report.delete`       | Report deleted       |
| `report_chart.create` | Report chart created |
| `report_chart.update` | Report chart updated |
| `report_chart.delete` | Report chart deleted |
| `profile_tab.create`  | Profile tab created  |
| `profile_tab.update`  | Profile tab updated  |
| `profile_tab.delete`  | Profile tab deleted  |

### Fields & Configuration

| Event              | Meaning              |
| ------------------ | -------------------- |
| `field.create`     | Custom field created |
| `field.update`     | Custom field updated |
| `field.delete`     | Custom field deleted |
| `job_code.create`  | Job code created     |
| `job_code.update`  | Job code updated     |
| `job_code.delete`  | Job code deleted     |
| `job_level.create` | Job level created    |
| `job_level.update` | Job level updated    |
| `job_level.delete` | Job level deleted    |

### Media & Files

| Event          | Meaning              |
| -------------- | -------------------- |
| `media.create` | Media image uploaded |
| `file.create`  | File uploaded        |
| `file.update`  | File updated         |
| `file.delete`  | File deleted         |

### Org

| Event        | Meaning              |
| ------------ | -------------------- |
| `org.create` | Org created          |
| `org.update` | Org settings updated |

### Processes

| Event                            | Meaning           |
| -------------------------------- | ----------------- |
| `process.create.<processname>`   | Process started   |
| `process.complete.<processname>` | Process completed |
| `process.error.<processname>`    | Process errored   |

### Comments

| Event            | Meaning         |
| ---------------- | --------------- |
| `comment.create` | Comment posted  |
| `comment.delete` | Comment deleted |

***

## Event Notifications

An app can subscribe to a pattern of events and receive them as a webhook.

For example:

You might build an app that takes an action upon a new hire. The app might listen for **change.create.hire** events. Whenever a hire occurs, there will be a POST to the app's event notification URL.

### Matching specific events

The app can match on different types of events via wildcard matching.

A few examples:

To listen for any kind of change:

`change.*`

To listen for any event involving a hire (new hire, amendment, or cancellation):

`change.*.hire`

### Filtering

For events of type `change.*` and `person.*`, you can add additional filtering based on any CQL Filter.

To add the filter, put the filter in `[brackets]` following the wildcard match.

For example, rather than listening for any new hire, you might only want to listen for new hires who are managers in the Engineering department. You could match on:

`change.create.hire [department:engineering directs > 0]`

The particular set of filters that are matched will be passed in the webhook in the matchFilters property.

### Webhook format and payload

You will receive the POST as an HTTP POST containing the following:

```json
{
    "id": <event id>,
    "orgId": <your org id>,
    "userId": <user id who caused the event>,
    "userName": <name of user who caused the event>,
    "appId": <id of app subscribing>,
    "appName": <name of app subscribing>,
    "appUserId": <id of installation of app>,
    "notifyUrl": <url of notification webhook>,
    "type": <event type>,
    "subtype": <event subtype>,
    "entityType": <entity type>,
    "entityId": <entity id>,
    "matchFilters": <list of filters matched>
    "at": <timestamp of event>
    "payload": <payload>,
}
```

The payload will vary depending on the type of event. Generally, for `create` events, the payload will contain the initial entity being created, and for `update` events the payload will contain the fields that were modified.

### Custom payloads

You can define custom payloads to control which specific data gets passed along. For example, you might want a webhook to receive the work email address of new hires.

Custom payloads may currently only be used for `change.*` events.

Define the payload as a JSON object, where the key represents the key element, and the value is a CQL expression containing the data you want to evaluate.

For example, let's suppose you want to pass along a new hire's work email, department name, whether or not they are a manager, and whether they are highly compensated. Set custom payload to:

```json
{
    "email": "contact.workEmail",
    "department": "department.name",
    "isManager": "directs > 0",
    "isHighlyCompensated": "base > 200000"
}    
```

Carefully considered custom payloads can allow you to control the information that leaves the system.

[title] Mobile App Management
[path] Resources/

:::hint{type="info"}
Sign up for our [privacy notifications mailing list](https://docs.google.com/forms/d/e/1FAIpQLSfLgKFsNBiIdZ2LbCx6ys84mKAS6yqpQc-__eAi3F3DkTDN3w/viewform?usp=sf_link) to keep up to date with changes.
:::

# ChartHop Mobile App Users

## I'm using ChartHop Basic and want to delete my account.

We’re sorry to see you go! You can delete your Basic account by following these steps:&#x20;

1. Send an email with your termination request to our support team at [support@charthop.com.](mailto\:support@charthop.com)&#x20;

## I am an Authized User in a company using ChartHop and want to delete our company account.&#x20;

It's been great having you with us! To delete your company account, please refer to your contract for termination steps.&#x20;

## I am an employee of a company using ChartHop and want to delete my account.

Please [click here](docId\:aZK7iwpts_3Yiqt5s2lWA) for information on managing your account in ChartHop.&#x20;




[title] FAQ
[path] Resources/

<font color="#212529">Welcome to the FAQ! Please let us know if you cannot find what you are looking for.</font>&#x20;

## <font color="#212529">**Privacy**</font>

***

### <font color="#212529">**Q: Why can I see data for some individuals and not others?**</font>

<font color="#212529">**A:** If any sensitive information is selected in **Select Columns,** you will only see sensitive data for individuals who report under you and directly under you.</font>

<font color="#212529">If you have the access level to see all sensitive views and still cannot view the data, ensure the eye icon at the top right of the platform is enabled to **visible**. If the eye icon is enabled to **hidden** (slash through eye icon), it prevents sensitive data from being viewed if sharing your screen with others.</font>



## <font color="#212529">**People management**</font>

***

### <font color="#212529">**Q: How can I set a backfill for an open role?**</font>

<font color="#212529">**A:** ChartHop enables your recruiting team to be proactive, not reactive when handling backfills. If there is an anticipated departure of an employee and your team wants to start recruiting, here's how to:</font>

1. <font color="#212529">Find the employee on either the **Org Chart** or the **Data Sheet**</font>
2. <font color="#212529">Click **Backfill**
   *If the rest of the organization should not know of an anticipated departure, set the recruiting sensitivity to* ***Highly Sensitive****. This will ensure that only recruiters with sensitive access are aware that this role is actively being recruited for.*</font>



## <font color="#212529">**Data sheet**</font>

***

### <font color="#212529">**Q: Can I export data from the Data Sheet?**</font>

<font color="#212529">**A:** Yes! When clicking the export icon above the Select Columns button on the right side of the platform. You can export via CSV or export a URL to sync with Google Sheets.</font>

### <font color="#212529">**Q: How can I bulk edit fields in the Data Sheet?**</font>

<font color="#212529">**A:** To bulk edit built-in or custom fields, bulk select by clicking and dragging, or hold down command and select the people for whom you know the values are the same. Then click *bulk edit*. The fields will be under the *custom fields* section of the bulk edit pop up. You may need to first enable the *edit dialog* option in the custom field .</font>

### <font color="#212529">**Q: How can I filter data in the Data Sheet?**</font>

<font color="#212529">**A:** If you only want to see employees who match a specific filter, click the Filter button and select an attribute from the dropdown menu. Enter the value of the attribute you wish to filter in the Data Sheet. Or you can input direct filters in the open text field. For syntax, please see our documentation on Filtering.</font>



## <font color="#212529">**Maps**</font>

***

### <font color="#212529">**Q: Is the map embeddable as an iframe?**</font>

<font color="#212529">**A:** No, unfortunately the map is not currently embeddable as an iframe.</font>



## Scenarios

***

### Q: How can I export a scenario?

**A:&#x20;**&#x57;hen clicking **Actions...** near your profile icon in the top right-hand corner of the platform, you'll have the option to export the scenario as a CSV or as a Powerpoint.

### Q: What if my scenario is finalized / approved?

**A:&#x20;**&#x55;sers with "Primary Editor" permissions can approve your scenario and merge your scenario to primary. After a scenario is merged, its changes are "official", are made public to the organization, and if applicable, are synced to downstream systems of record.

### Q: How is Annual Cost calculated in scenarios?

**A:&#x20;**&#x41;nnual Cost will reflect the total annualized cost of changes made, including new jobs added, adjustments to compensation, and jobs removed (departures without backfill).





<font color="#212529">
</font>


[title] .filter()
[path] Carrot reference/Methods/

### Description

This method, called on a List or Sequence, filters the results to only those results that match the expression.

- Operates on: [List](docId\:xWH_cUkHj9waqaEfb7H71) or [Sequence](docId\:JG4itlQWafzLpArttFo67) &#x20;
- Returns: [List](docId\:xWH_cUkHj9waqaEfb7H71) or [Sequence](docId\:JG4itlQWafzLpArttFo67)&#x20;

### Syntax

`.filter{expression}`

- Returns only those objects that match the expression.

### Examples

`grants.filter{price > 1.50}`

- Of the [Grants](docId\:Lpx5L8w1t54iPBqq8Eqjv) issued to the current person, only return those stock grants where the strike price is over $1.50.


[title] .groupBy()
[path] Carrot reference/Methods/

Given a [Sequence](docId\:JG4itlQWafzLpArttFo67) or a [List](docId\:xWH_cUkHj9waqaEfb7H71), buckets each item into groups, which then can run additional methods to aggregate by group.

This method is primarily used in Dashboards, which understand how to visualize aggregated results. It's foundational for common reporting aggregations to answer questions like "Break down our headcount by department".

The `groupBy` method itself returns a `SequenceGroupedBy` object which is not used directly. Instead, you can chain additional aggregation methods, like [.sum()](docId\:oQLLv6ooaTtUcyGljuF7s) or [.mean()](docId\:yOFsWQHMGjC4C5n2TnYN0) onto it to return `AggregatedResults` that can be visualized in Dashboards.

### Syntax

`.groupBy{expression}`

- Evalutes `expression` on each item in the Sequence or List, and buckets into groups based on the result of that expression

### Examples

- `[1, 2, 3, 4, 5].groupBy{it % 2 ? "Odd Numbers" : "Even Numbers"}.sum()` will return an AggregatedResult of "Odd Numbers" = 9, "Even Numbers" = 4.
- `db.job.find().groupBy{department}.count{gender:female}` returns the number of Female-identified people in each department.
- `db.job.find().groupBy{department:engineering,product ? 'R&D' : department:sales,marketing ? 'S&M' : 'G&A'}.sum{cost}` returns the total cost of all jobs bucketed into three groups of \`R\&D', 'S\&M', and 'G\&A'.
  -


[title] .limit()
[path] Carrot reference/Methods/

Returns a specified number of results from a [List](docId\:xWH_cUkHj9waqaEfb7H71)  or [Sequence](docId\:JG4itlQWafzLpArttFo67) .

### Syntax

`.limit(number)`

### Returns

[List](docId\:xWH_cUkHj9waqaEfb7H71) or [Sequence](docId\:JG4itlQWafzLpArttFo67) - limited to the number of results.

- `number` - the number of results to return.

**Return type:&#x20;**[List](docId\:xWH_cUkHj9waqaEfb7H71)

### Examples

`volunteers.limit(4)` returns the first `4` people from the `volunteers` list.

`db.job.find{dept:engineering}.limit(3)` returns the first three jobs found in the Engineering department.

`findHistoryValues( { checkinScore } ).limit(3).mean()` returns the average of the first 3 values of the `checkinScore` field.


[title] ChartHop Basic
[path] Resources/ChartHop Modules/

**ChartHop Basic** allows you to manage and visualize your organization with ChartHop pages such as the Org Chart, Data Sheet, and Map. You can integrate with one payroll system to sync your data. Several pre-built dashboards are provided.

ChartHop Basic includes the following features:


- Dashboard
- Map 
- Data sheet
- Rich employee profiles
- Calendar
- SSO logins
- Org chart with filters
- Mobile Directory&#x20;



- Standard 1:1 Forms and about me form&#x20;
- Payroll integrations - one integration (more payroll apps are available for an additional fee)
  - BambooHR
  - Gusto
  - Justworks
  - Namely
  - Sapling Onboarding From Kallidus
  - Zenefits
- Slack + Carta integration


[title] Ask ChartHop
[path] ChartHop by ChartHop/

# Ask ChartHop

Ask ChartHop is your AI-powered assistant built right into the platform. It knows your org, understands ChartHop, and can use what you already have to create what you actually want — whether that's a dashboard, an automated action, an answer about your headcount, or a step-by-step walkthrough of a new feature.

Think of it as your always-on guide to the platform: great for getting quick answers, building things on the fly, and learning as you go. Most customers find themselves reaching for it constantly — for data questions, for help configuring a new workflow, for figuring out how something works without having to dig through docs. Your ChartHop CX team (your CSM, Implementation Specialist, or Support) is always here for the bigger conversations, but Ask ChartHop is there for everything in between.

## How to access Ask ChartHop

Ask ChartHop lives in the chat dock inside the ChartHop web app. You can also access it on mobile — including via voice mode, if you prefer to ask your questions out loud.

:::BlockQuote
**Note:** Ask ChartHop is currently in beta and must be enabled by your org's ChartHop admin. If you don't see it yet, reach out to your admin or your ChartHop CX team.
:::

## What to know before you start

A few things worth understanding upfront:

**It only sees what you can see.** Ask ChartHop respects your existing permissions. If a field is sensitive and hidden from your role, Ask ChartHop won't surface it in its responses either. There's no backdoor.

**Your data stays yours.** ChartHop does not use your organization's data to train the underlying AI model. What happens in your org stays in your org.

**It shows its work.** Ask ChartHop will often show you the steps it's taking to answer your question, including which tools it used and how it interpreted your request. You can use this to verify its reasoning before acting on a response.

**Write actions need your approval.** When Ask ChartHop proposes a change — like adding a position to a scenario or building a new chart — it will ask you to approve before anything is saved or modified. Nothing happens in the background without you.

**It's smart, but not perfect.** Always review AI-generated outputs before publishing or sharing them, especially for compensation data, performance results, or anything going to leadership.

## How to write a good prompt

You don't need to learn a special syntax — Ask ChartHop understands plain language. That said, a little context goes a long way.

**Be specific about what you want.** Instead of *"show me headcount,"* try *"How many employees are in the Engineering department right now, broken down by level?"*

**Mention the module or feature if you know it.** If you're trying to build something in Performance Reviews vs. Headcount Planning, say so — it helps Ask ChartHop give you the right instructions.

**Describe your situation.** If you're setting something up for the first time or have a specific constraint (like "we have employees in multiple countries"), include that detail.

**Follow up.** Ask ChartHop is conversational. If the first answer isn't quite right, follow up with a clarifying question instead of starting over.

## ✨ What Ask ChartHop can build for you

In addition to answering questions, Ask ChartHop can actually build things on your behalf — dashboards, charts, automated actions, and more. When you see the **✨ Ask ChartHop can build this for you** callout below, it means you can paste the prompt directly into Ask ChartHop and it will walk you through the build, step by step. You'll review and approve before anything is saved.

## Use cases by module

## HRIS

### *Set up an offboarding action*

**When to use this:** You want automated tasks (like a checklist or manager notification) to trigger whenever someone is marked as departing.

:::BlockQuote
*"I want to set up an automated offboarding action in ChartHop. It should trigger when someone is marked as departing and send a checklist of tasks to HR. Walk me through how to build this step by step."*
:::

**Good follow-ups to try:**

- "Can the action also notify the departing person's manager?"
- "How do I add a form submission step to the action?"
- "Can I trigger different actions based on voluntary vs. involuntary departure?"

:::BlockQuote
**✨ Ask ChartHop can build this for you** — paste the prompt above and Ask ChartHop will guide you through building the action. Once it's built, you'll want to test the trigger manually to confirm it fires correctly.
:::

### *Set up a preboarding experience*

**When to use this:** You want new hires to complete tasks (like signing offer letters or filling out their profile) before their start date.

:::BlockQuote
*"We want new hires to complete a set of tasks before their start date — things like signing offer letters, filling out their profile, and acknowledging our handbook. How do I set up a preboarding experience in ChartHop?"*
:::

**Good follow-ups to try:**

- "Can I assign different preboarding tasks based on department?"
- "How do I make sure the new hire gets a notification?"
- "Can I include a document signature step?"

:::BlockQuote
**Note:** The preboarding portal is currently in Alpha. Check with your ChartHop CX team to confirm it's available for your org before building.
:::

### *Configure a PTO policy*

**When to use this:** You need to set up PTO in ChartHop so employees can submit and track time off.

:::BlockQuote
*"I need to set up our PTO policy in ChartHop. We have unlimited PTO for full-time employees and a separate sick leave policy. How do I configure this so employees can submit and track time off?"*
:::

**Good follow-ups to try:**

- "How does a manager approve a PTO request?"
- "Can I set up different policies for different countries?"
- "How do employees see their upcoming and past time off?"

### *Build a Resources page*

**When to use this:** You want a central place where employees can find your company handbook, PTO policy, benefits info, and other reference materials.

:::BlockQuote
*"I want to create a Resources page in ChartHop where employees can find our company handbook, PTO policy, and benefits information. How do I build and publish a resource page?"*
:::

**Good follow-ups to try:**

- "Can I restrict certain resource pages to specific departments or roles?"
- "Can I embed links or attachments in a resource page?"
- "How does an employee navigate to resource pages?"

:::BlockQuote
**✨ Ask ChartHop can build this for you** — Ask ChartHop can walk you through creating and publishing the page. Note that resource pages are read-only for employees — they can view content but can't interact with it directly.
:::

### *Create a custom profile tab*

**When to use this:** You want to display specific information on employee profiles — like onboarding status, custom data, or performance history — and control who can see it.

:::BlockQuote
*"We want to create a custom profile tab in ChartHop that shows each employee's onboarding checklist status and key personal details. How do I configure a custom profile tab and control who can see it?"*
:::

**Good follow-ups to try:**

- "Can a profile tab show data from a form submission?"
- "How do I control which fields appear on the tab?"
- "Can managers see a different tab than employees?"

:::BlockQuote
**✨ Ask ChartHop can build this for you** — Ask ChartHop can guide you through the tab configuration. Profile tab visibility is controlled by field-level sensitivity settings, so review those before going live.
:::

### *Map custom fields from an integration (e.g., HiBob)*

**When to use this:** You're syncing an HRIS like HiBob into ChartHop and need to map fields between the two systems.

:::BlockQuote
*"We're syncing HiBob into ChartHop and have custom fields in HiBob that need to map to custom fields in ChartHop. Walk me through how custom field mapping works in an integration sync, and what I need to configure on the ChartHop side."*
:::

**Good follow-ups to try:**

- "What happens if a field exists in HiBob but not yet in ChartHop?"
- "How do I review sync errors after the first run?"
- "Can I map a HiBob field to a ChartHop enum field?"

:::BlockQuote
**Note:** Field mapping must be completed directly in the integration settings by a ChartHop admin. Ask ChartHop will guide you through the steps, but it can't execute the configuration for you.
:::

## Performance Reviews

### *Plan your performance cycle*

**When to use this:** You're setting up your first (or next) performance review cycle and want to think through the structure before you build.

:::BlockQuote
*"We're planning our first performance review cycle in ChartHop. We want self-reviews, manager reviews, and a calibration step. We have about 80 employees across 4 departments. Help me think through what we need to configure before we build."*
:::

**Good follow-ups to try:**

- "How long does a typical build take?"
- "Should we use one assessment or multiple?"
- "How do we handle employees who are on leave during the review window?"

### *Build your review forms*

**When to use this:** You're ready to create the actual self-review and manager review forms for your cycle.

:::BlockQuote
*"I want to build a self-review form and a manager review form for our performance cycle. The self-review should ask employees to rate themselves on impact, collaboration, and values. The manager form should include the same ratings plus a compensation recommendation field. Walk me through building these forms in ChartHop."*
:::

**Good follow-ups to try:**

- "How do I add a rating scale question?"
- "Can I make certain questions visible only to managers?"
- "How do I link the self-review and manager review so the manager can see the employee's answers while completing theirs?"

:::BlockQuote
Ask ChartHop will walk you through building your review forms question by question. If you're using complex conditional logic (show/hide based on answers), test thoroughly before launching to employees.
:::

### *Set up calibration groups*

**When to use this:** You want to run a calibration session after manager reviews close, organized by department or team.

:::BlockQuote
*"We want to run a calibration session after manager reviews are complete. Calibration should happen by department, with department heads as facilitators. How do I set up calibration groups in ChartHop?"*
:::

**Good follow-ups to try:**

- "Can one person be in multiple calibration groups?"
- "How do I lock manager review scores before calibration starts?"
- "Can I export calibration results?"

:::BlockQuote
**Note:** Calibration group membership needs to be configured before the assessment launches. Making changes mid-cycle can cause data inconsistencies, so set this up early.
:::

### *Display performance results on employee profiles*

**When to use this:** Your review cycle is complete and you want managers (or employees) to be able to see final ratings on the employee profile page.

:::BlockQuote
*"After our performance review is complete, we want managers to be able to see each employee's final rating, manager comments, and calibrated score on their profile page. How do I set up a profile tab to display performance review results?"*
:::

**Good follow-ups to try:**

- "Can I control which roles can see the performance tab?"
- "How do I show data from the most recent cycle only?"
- "Can employees see their own rating on their profile?"

:::BlockQuote
**Note:** Profile tabs pull from fields, not raw form responses. Performance data needs to be written to fields (via assessment merge) before it will show up on a profile tab.
:::

### *Build a performance analytics dashboard*

**When to use this:** Your cycle has closed and you want to report on completion rates and ratings distribution.

:::BlockQuote
*"Our performance review cycle just closed. I want to build a dashboard that shows (1) form completion rates by department, and (2) the distribution of performance ratings across the company. Help me build this in ChartHop."*
:::

**Good follow-ups to try:**

- "How do I filter the dashboard to just one department?"
- "Can I compare ratings distribution between this cycle and last cycle?"
- "How do I export this data for our board presentation?"

:::BlockQuote
**✨ Ask ChartHop can build this for you** — Ask ChartHop can generate the charts and help you assemble the dashboard. Completion rate data requires that due dates were set on the assessment — if they weren't, completion tracking may be incomplete.
:::

## Headcount Planning

### *Set up an approval chain*

**When to use this:** You want headcount requests in your planning scenario to go through a defined approval process before they're finalized.

:::BlockQuote
*"We want every new headcount request in our planning scenario to go through an approval process: first the hiring manager, then the department head, then Finance. How do I set up a multi-step approval chain in ChartHop?"*
:::

**Good follow-ups to try:**

- "Can approval rules be different by department?"
- "What happens if an approver is out of office?"
- "Can I set conditional approvals — for example, only require Finance approval if the role is above a certain salary?"

:::BlockQuote
**Note:** Approval chains are configured at the scenario level. Make sure your scenario is set up before configuring approvals.
:::

### *Learn the headcount planning workflow*

**When to use this:** You're new to headcount planning in ChartHop and want to understand the end-to-end process.

:::BlockQuote
*"I'm new to headcount planning in ChartHop. Can you walk me through the correct end-to-end workflow? Specifically: how do I create a planning scenario, add or remove positions, submit for approval, and then merge approved changes back to the live org chart?"*
:::

**Good follow-ups to try:**

- "What's the difference between a scenario and the live org?"
- "Can multiple people edit the same scenario at once?"
- "How do I see what changes were made in a scenario before approving?"

:::BlockQuote
**Note:** Merging a scenario back to the live org requires specific permissions. Make sure the right admin and approver roles are configured before training your team on this step.
:::

### *Understand your ATS integration*

**When to use this:** You're connecting an ATS (like Greenhouse or Lever) with ChartHop and want to understand how the sync works.

:::BlockQuote
*"We're integrating our ATS with ChartHop for headcount planning. Walk me through how the ATS sync works — specifically how open jobs in ChartHop push to the ATS, and how hired candidates flow back into ChartHop."*
:::

**Good follow-ups to try:**

- "What data fields sync between ChartHop and the ATS?"
- "How do I handle a job that exists in the ATS but not in ChartHop?"
- "What triggers a candidate to become a person record in ChartHop?"

:::BlockQuote
**Note:** ATS integration behavior varies by provider. Refer to the integration-specific guide in addition to what Ask ChartHop tells you, especially for edge cases like duplicate candidates or partial syncs.
:::

### Engagement Surveys

### *Build and launch an engagement survey*

**When to use this:** You're setting up your first (or next) employee engagement survey and want to get it configured and out the door.

:::BlockQuote
*"I want to create an employee engagement survey in ChartHop with about 15 questions covering topics like manager effectiveness, team culture, and career development. The survey should be anonymous. Walk me through how to build and launch this."*
:::

**Good follow-ups to try:**

- "How do I set up anonymity so individual responses can't be traced?"
- "Can I use a Likert scale for the questions?"
- "How do I control who receives the survey?"

:::BlockQuote
**✨ Ask ChartHop can build this for you** — Ask ChartHop can walk you through survey creation end to end. Before launching, confirm your anonymity threshold settings are appropriate for your org size (see below).
:::

### *Configure survey anonymity*

**When to use this:** You want your survey to be anonymous, but you also need to slice results by group (department, tenure, etc.) without exposing individual responses.

:::BlockQuote
*"We want our engagement survey to be anonymous, but we also want to be able to slice results by department and tenure. How does ChartHop handle anonymity in surveys? What settings do I need to configure to protect individual responses while still seeing group-level insights?"*
:::

**Good follow-ups to try:**

- "What's the minimum group size threshold for anonymous results?"
- "Can I make some questions anonymous and others not?"
- "How do I prevent a manager from identifying a specific employee's response?"

:::BlockQuote
**Note:** ChartHop's anonymity model works by suppressing group-level results when a group falls below a minimum respondent threshold. If a department is small, results for that group won't be shown at all — even if responses came in. Set your thresholds carefully before launch.
:::

### *Build an engagement results dashboard*

**When to use this:** Your survey has closed and you want to analyze response rates, average scores, and breakdowns by team or tenure.

:::BlockQuote
*"Our engagement survey just closed. I want to build a dashboard that shows overall response rates, average scores by question, and a breakdown of results by department and tenure group. Help me build this dashboard in ChartHop."*
:::

**Good follow-ups to try:**

- "How do I filter the dashboard for just one department?"
- "Can I compare this survey cycle to our previous one?"
- "How do I share this dashboard with our leadership team?"

:::BlockQuote
**✨ Ask ChartHop can build this for you** — Ask ChartHop can generate the charts and walk you through assembling the dashboard. Historical comparison requires a previous survey to have been run in ChartHop — if this is your first cycle, trend data won't be available yet.
:::

## Goals

### *Configure your goal types*

**When to use this:** You're setting up your goals framework in ChartHop (OKRs, company objectives, individual goals, etc.) for the first time.

:::BlockQuote
*"I want to set up our goals framework in ChartHop using OKRs. We'll have company-level objectives, department-level key results, and individual goals. How do I configure goal types in ChartHop to support this structure?"*
:::

**Good follow-ups to try:**

- "Can a goal have multiple owners?"
- "How do I cascade a company goal down to individual goals?"
- "Can goal types have different visibility settings?"

:::BlockQuote
**Note:** Goal type configuration requires admin access. Ask ChartHop will walk you through the setup, but your ChartHop admin will need to execute the configuration directly.
:::

Set goal visibility and ownership

**When to use this:** You want to control who can see which goals — for example, company goals visible to all, individual goals visible only to the employee and their manager.

:::BlockQuote
*"We want company goals to be visible to everyone, department goals to be visible to that department only, and individual goals to be private between the employee and their manager. How do I configure goal visibility and ownership in ChartHop?"*
:::

**Good follow-ups to try:**

- "Can an employee see their manager's goals?"
- "How do I assign a goal to a department rather than a person?"
- "Can I change a goal's visibility after it's been created?"

:::BlockQuote
**Note:** Goal sensitivity is set at the time of creation. Bulk-updating sensitivity on existing goals is not currently supported, so set this up correctly before employees start creating goals.
:::

### *Create and track goals as an employee*

**When to use this:** You're an employee submitting goals for the first time and want to know how to get started, add milestones, and update your progress.

:::BlockQuote
*"I'm an employee at a company that uses ChartHop. I need to submit my quarterly goals for the first time. Can you walk me through how to create a goal, add key results or milestones, and update my progress throughout the quarter?"*
:::

**Good follow-ups to try:**

- "How do I link my goal to my team's or company's goal?"
- "How do I mark a milestone as complete?"
- "How does my manager see my goal progress?"

:::BlockQuote
**Note:** If goals aren't showing up for you as an employee, it may be a permissions issue. Reach out to your ChartHop admin to confirm your role has the right access.
:::

## Recruiting

### *Understand the open job workflow*

**When to use this:** Your company uses ChartHop as the source of truth for open jobs, and you want to understand the recruiter's end-to-end workflow — from approval to posting.

:::BlockQuote
*"Our company uses ChartHop as the source of truth for open jobs, which then push into our ATS. Walk me through the correct workflow a recruiter should follow — from when a new headcount request is approved in ChartHop, to when the job is live in the ATS and candidates are being reviewed."*
:::

**Good follow-ups to try:**

- "What fields on the job in ChartHop map to job fields in our ATS?"
- "How does a recruiter get notified when a new job is approved and ready to post?"
- "What happens if someone edits the job in the ATS — does it sync back to ChartHop?"

:::BlockQuote
**Note:** The sync between ChartHop and your ATS is directional — ChartHop pushes to the ATS, not the other way around. Edits made directly in the ATS may not sync back. Make sure your recruiting team knows where the source of truth lives.
:::

### *Configure required fields on open jobs*

**When to use this:** You want to make sure open jobs in ChartHop have all the information a recruiter needs (job description, hiring manager, target start date, etc.) before they push to your ATS.

:::BlockQuote
*"We want to make sure open jobs in ChartHop have all the fields a recruiter needs before the job pushes to our ATS — things like job description, recruiter owner, target start date, and hiring manager. How do I configure required fields on open jobs and make sure they're filled in before a job can be published?"*
:::

**Good follow-ups to try:**

- "Can I make certain fields required before a job moves to 'Active' recruiting status?"
- "How does a recruiter update the recruiting status on a job?"
- "Can I report on which open jobs are missing required fields?"

:::BlockQuote
**Note:** Required field validation on open jobs has some constraints. Test this flow in a scenario before rolling it out to your full recruiting team.
:::

### *Understand how a hired candidate becomes an employee record*

**When to use this:** You want to understand what happens in ChartHop when a candidate is marked as hired in your ATS — what syncs automatically and what needs to be completed manually.

:::BlockQuote
*"When a candidate is marked as hired in our ATS, how does that person get created as an employee record in ChartHop? Walk me through the full data flow — what triggers the sync, what data comes over, and what needs to be manually completed on the ChartHop side after the hire."*
:::

**Good follow-ups to try:**

- "What fields from the ATS automatically populate the person record in ChartHop?"
- "How do I set up a welcome email or preboarding action to trigger on hire?"
- "What happens if the same person applies twice — how does ChartHop handle duplicate detection?"

:::BlockQuote
**Note:** Hired candidate sync behavior varies depending on your ATS. Refer to the integration-specific documentation for your provider to understand exactly what comes over and what doesn't.
:::

## A few things Ask ChartHop can't do (yet)

Ask ChartHop is powerful, but it has some current limitations worth knowing about:

- It can't update goal progress (only goal descriptions) — marking a milestone complete requires a manual update in the UI.
- It can't read uploaded files, PDFs, or images — if you paste in a document, it won't be able to process it.
- It can't modify approval chains or permission settings directly — those require admin action.
- It can't make changes to your live org autonomously — all write actions require your explicit approval first.

If you run into something Ask ChartHop can't answer or gets wrong, your ChartHop CX team is always here to help.




[title] Profile Tabs V2
[path] Labs/

:::hint{type="warning"}
This feature is currently in Alpha. Be one of the first customers to try it! Please share any feedback with the ChartHop team.&#x20;

### How to setup a Alpha Feature

1. Contact [ChartHop support](mailto\:support@charthop.com) or your CSM if you have one. They can activate the feature for you.&#x20;
2. Read below for setup instructions and context on how the feature will work.
:::

### Overview

The new profile tabs allow you to design and configure the tabs to  communicate key information to employees. They allow you to make ChartHop the one place that you send employees.&#x20;

For example, you can create a profile tab that redirects employees to where they need to find their country-specific.&#x20;



# Designing your profile tab

The first thing you'll do is decide who

1. Name your profile tab - `Payroll & benefits`
2. Who's profile should it appear on? - `Everyone`
3. Who should it be displayed to?  - `The person and their manager`

## Layout: Columns & Rows

You have the abilty to add in rows on the tab with a set column layout and then add content into those rows.&#x20;

::Image[]{src="https://archbee-image-uploads.s3.amazonaws.com/zxjhb7-DqnuzAP-lru1l3-jlnS2rnTc8AGdgDAwnQZ6-20250520-182809.png" size="76" width="1280" height="1315" position="center" caption="Row layouts on profile tabs" showCaption="true"}

## Blocks

You are add in 3 types of blocks into columns:

### Content Blocks

The content blocks are great ways to showcase any information

- **Header**
- **Text** - Add the details of all of the text
- **Primary Button** - Can be to any external or specific form link.&#x20;
- **Secondary Button&#x20;**- Can be to any external or specific form link.&#x20;

### Tasks

The same tasks block that shows on the home page.&#x20;

Additional configuration coming in the future.&#x20;

### Calendar

The same "This week" calendar block that shows on the home page.&#x20;

Additional configuration coming in the future.&#x20;



# Examples

### Payroll and Benefits Tab

For example, this tab has 2 rows: One with four columns, One with two columns.

This payroll and benefits tab can be [downloaded as a bundle](https://app.charthop.com/bundles/payroll-benefits-tab).&#x20;

![](https://archbee-image-uploads.s3.amazonaws.com/zxjhb7-DqnuzAP-lru1l3-5SKES0nASTVnQE9s2J2hT-20250520-183106.png)






[title] March 2022 release notes
[path] Release Notes/Release notes 2022/

## 03.25.22

***

**🎁 &#x20;**<font color="#2166ae">**Added**</font>**&#x20;&#x20;**

- Added the ability to reset the **Org chart** view to default.
- Added the ability to change the default **Org chart** view.
- Added a prompt to save unsaved work when closing a modified **Data sheet** view.
- Improved the responsiveness of the **Org chart** zoom function.
- Added usability improvements to **Data sheet&#x20;**&#x76;iews.
- Added logic to prevent reverse ATS syncs from updating closed jobs in ChartHop.



<font color="#eb144c">**⚒  Fixed**</font>&#x20;

- Fixed a bug causing delayed email notifications about new hires in Greenhouse.

## 03.18.22

***

**🎁 &#x20;**<font color="#2166ae">**Added**</font>**&#x20;&#x20;**

- Added logic to change closed Lever requisitions to **Inactive** in ChartHop.
- Added the ability to customize the invitation email.
- Fixed a bug preventing the **Run daily** option from being automatically set once a Sequoia customer sets up their data sync.

<font color="#eb144c">**⚒  Fixed**</font>&#x20;

- Fixed an issue causing Greenhouse pending hire information to be filled into the wrong job.

## 03.11.22

***

****

**🎁 &#x20;**<font color="#2166ae">**Added**</font>**&#x20;&#x20;**

- Added support for **Jobvite** **Reverse sync**, allowing Jobvite to be the system of record when syncing.



****<font color="#eb144c">**⚒  Fixed**</font>&#x20;

- Fixed an issue preventing Google Workspace from syncing Groups.

## 03.04.22

***

**🎁 &#x20;**<font color="#2166ae">**Added**</font>**&#x20;&#x20;**

- Added support for multiple templates by default for all Greenhouse app users.



****<font color="#eb144c">**⚒  Fixed**</font>&#x20;

- Fixed an issue causing Maps to lag in larger orgs.
- Fixed an issue causing uncategorized fields to be hidden from the column chooser.


[title] November 2022 release notes
[path] Release Notes/Release notes 2022/

## 11.21.22

***

## 🎁 <font color="#2166ae">**Added**</font>

- Updated the top banner to list Active Open jobs instead of Total jobs.
- Axis labels are included on the following charts for easier interpretation: 
  - Area graph over time
  - Bar chart
  - Bar chart over time
  - Line chart over time
- Updated when the About Me panel is displayed. If no information has been entered, employees with edit permission are prompted to add information. If the tab is empty and the employee cannot edit it, the About Me tab is not shown.
- Updated when the Job Description panel is shown. If the tab is empty and the employee cannot edit it, the Job Description panel is not shown.
- ChartHop reports have been updated so that scenarios with a scenario type of Compensation planning are categorized as Comp Scenario in the **Scenario** dropdown. 
- New hires from Jobvite are included on the Sync History page.

## ⚒  <font color="#eb144c">**Fixed**</font>

- Fixed an issue where calculated fields were not being summarized correctly on the Data Sheet page.
- Fixed an issue where the two-letter abbreviation for Indiana was not displaying correctly on the Map page.
- Fixed an issue where the currency symbol for the Dinar was not displaying correctly.
- Fixed an issue where duplicate Greenhouse openings were being created.
- Fixed an issue where ChartHop indicated a successful save when app settings failed to save.
- Fixed an issue where Greenhouse and Lever metrics syncs were not finishing.

## 11.08.22

***

## 🎁 <font color="#2166ae">**Added**</font>

### New features

- Update&#x64;**&#x20;Sync history&#x20;**&#x74;o provide more detailed information during sync errors.
- Added support for specifying rounding preferences on comp primitive fields with rounding settings.
- Added new Carrot functions for calculating the compensation of a person between dates:
  - `baseCompBetween()`
  - `variableCompBetween()`
  - `cashCompBetween()`
- Added the ability to bookmark the current dates in the **Org chart**, **Data Sheet**, and **Maps**.
- Added the ability for the format dropdown to auto-select a number format based on the selected measure in the chart builder.
- Added the ability to apply specific filters to charts using the filter tool.

### Integrations

- Updated the **Carta sync** to no longer set a default vesting schedule when synching an unsupported schedule.
- Added support for same day **ATS outbound delete syncs**.

## ⚒  <font color="#eb144c">**Fixed**</font>

- Fixed an issue where `lastRaise` field calculations did not support rehires.
  - **Fields updated:**
    - `Base – last raise %`
    - `Base – last raise amount`
    - `Base – last raise amount (org currency)`
    - `Base – last raise date`
    - `Base – last raise type`
    - `Base – months since last raise`
    - `Target variable - last raise %`
    - `Target variable - last raise amount`
    - `Target variable - last raise date`
    - `Target variable - months since last raise`
  - **Fields deprecated**:
    - `baseRaisePercent`
    - `baseRaiseAmount`
    - `baseRaiseDate`
- Fixed an issue where Lever New Hire Webhook fields were shown as being updated in **Sync history** details despite not being updated.
- Fixed an issue where Greenhouse job creation stepper fields in **Sync history** details were not human readable.&#x20;
- Fixed an issue where `change.baseRaisePercent` in a comp scenario did not retain the hours/week and weeks/year.
- Fixed an issue where updates were being sent to an ATS when a job was filled or had a person starting.
- Fixed an issue where **Lever requisitions outbound sync&#x20;**&#x70;rocesses could not be seen in the **Sync history** list view.
- Fixed an issue where our **SFTP app** field mapper configuration was case sensitive.
- Fixed an issue where the export settings were not being preserved when exporting the **Org chart**.
- Fixed an issue where outbound calls were not being made when jobs were set to Active in Greenhouse.
- Fixed an issue where the About me panel did not display user’s start dates.
- Fixed an issue where columns were not resizing properly on the **Data sheet**.


[title] ChartHop Engagement
[path] Resources/ChartHop Modules/

**ChartHop Engagement&#x20;**&#x69;ncludes the Engagement module and offers various engagement survey features including configurable engagement, eNPS, and pulse surveys. This module also includes customizable onboarding, exit, Self ID, and DEI surveys. It also includes configurable reporting dashboards for managers, executives, and the people team. 

ChartHop’s Engagement Module empowers you to do the following:

- Everything in [ChartHop Basic](https://docs.charthop.com/charthop-basic)
- Choose from a larger selection of payroll integrations
- Manage access according to organizational roles, including custom roles
- Configure mapped and custom fields
- Store documents
- Create custom dashboards
- Engagement Survey Module
- Configure, Manage, and Run Engagement Surveys
- Slack integration for public shoutouts
- Receive assistance from ChartHop to create custom document templates (up to five)












[title] Data Explorer
[path] Labs/

:::hint{type="info"}
This feature is currently in Beta. We're excited for you to try it and would love your feedback. Send it to the ChartHop team or directly to [product-feedback@charthop.com](mailto\:product-feedback@charthop.com).

### How to set up a Beta Feature

1. From the left sidebar, select **Admin**, then select **Labs**.
2. Use the switch to toggle on the feature, then press the **Save settings** button.
3. Read below for additional setup instructions and context about what will be activated when you save settings.
:::

![](https://api.archbee.com/api/optimize/CXAjUAezd9VEEVQBIYmdw/reiYeljqyNWza_uC_Zjy-_image.png "Bubble Chart in Data Explorer")

# Data Explorer

Data Explorer is a new way to explore data in ChartHop with a full screen experience and interactive options to choose fields, categories, date range, and filters. Data Explorer is a powerful way to gain insights quickly.

To access Data Explorer, first ensure that it is active in the account and the desired User is selected for access. *It is recommended to enable this for only users that have access to team or department data as Users with no direct reports and no Admin access will not find the charts very useful.* Once it is enabled, Data Explorer is found in the primary left Menu sidebar, appearing below Dashboards.

## Timeseries Chart Types

### Area Chart

![](https://api.archbee.com/api/optimize/CXAjUAezd9VEEVQBIYmdw/m8TPRE5TojUhvg65MD_NP_image.png)

Area charts show how values change over time, with shaded regions that help highlight trends, patterns, and cumulative totals. They're ideal for tracking growth, comparing categories, and visualizing part-to-whole relationships in your data.

### Line Chart

![](https://api.archbee.com/api/optimize/CXAjUAezd9VEEVQBIYmdw/LewcuRPFXzSBnAWBJmGuf_image.png)

Line charts are perfect for showing trends over time. They connect data points with a continuous line, making it easy to spot changes, patterns, and comparisons across one or more metrics.

### Stacked Chart

![](https://api.archbee.com/api/optimize/CXAjUAezd9VEEVQBIYmdw/d9SUkSnqiWq5J4hjMJPDQ_image.png)

Stacked charts break down totals over time by category, letting you see both overall trends and how individual segments contribute. They're great for visualizing composition and change across multiple groups in a single view.

### Table

![](https://api.archbee.com/api/optimize/CXAjUAezd9VEEVQBIYmdw/nYO_O32TEQbgcLoovJWJi_image.png)

Tables present your data in a clear, structured format—ideal for viewing exact values, comparing details across rows and columns, and exporting for deeper analysis. Best used when precision matters.

## Non-Timeseries Chart Types

### <font color="#A855F7"></font>New! Bubble Chart

![](https://api.archbee.com/api/optimize/CXAjUAezd9VEEVQBIYmdw/B6ShqGwahD-5PIvNpPW6E_image.png)

Bubble Chart is a new chart type introduced with Data Explorer. Bubble charts let you compare people across three data points at once—using the X and Y axes for two variables, and bubble size to represent a third. They're great for visualizing relationships, spotting outliers, and understanding distribution across categories enabled with the color option.

### Horizontal Bar Chart

![](https://api.archbee.com/api/optimize/CXAjUAezd9VEEVQBIYmdw/YYtk7ekzJ35y6MZ1uzOhV_image.png)

Bar charts make it easy to compare values across categories. Each bar represents a data point, so you can quickly spot differences, rank items, and highlight trends across groups.

### Pie Chart

![](https://api.archbee.com/api/optimize/CXAjUAezd9VEEVQBIYmdw/Pcvv4dpFAAVSp_cMhflyq_image.png)

Pie charts show how a whole is divided into parts. Each slice represents a category's share, making it easy to visualize proportions at a glance. Multiple pie charts let you compare part-to-whole relationships across different groups. They're useful when you want to see how proportions shift between segments over time or across categories.

### Single Metric

![](https://api.archbee.com/api/optimize/CXAjUAezd9VEEVQBIYmdw/VIZQXWoPX-QxfLKxVp25a_image.png)

Single metrics highlight one key number—fast. They're great for calling out totals, KPIs, or any standout value you want to keep front and center.

### Table Crosstab

![](https://api.archbee.com/api/optimize/CXAjUAezd9VEEVQBIYmdw/mjyt5Cla_JfYXrAGA0RMt_image.png)

Crosstab tables let you break down data by two dimensions to quickly compare values across categories. Ideal for spotting patterns, drilling into totals, and answering "where" and "who" questions in your data.

### Vertical Bar Chart

![](https://api.archbee.com/api/optimize/CXAjUAezd9VEEVQBIYmdw/bmh8AvXDgg0z4IS-Vd-9Y_image.png)

Vertical bar charts make it easy to compare values across categories using columns. They're great for showing differences, ranking items, and visualizing changes over time or across groups.

## Additional Features

**Date Range** enables you to choose from a multiple of data options.

**Time Slider** (for Non-Timeseries) lets you move along the timeline of the organization to see the chart at different points in time.

**Filter** give you access to ChartHop's powerful filtering capabilities including the ability to filter using ChartHop's Carrot Query Language aka CQL.

**Advanced Options** introduces the ability to create the chart with a Carrot Expression as well as providing access to additional options based on the chart type.

**Copy to Dashboard** button lets you take the current chart and configuration and add it to a Dashboard.

[title] Release Notes
[path] /

## October 14th, 2026

🛠️ Fixed

- **Custom Groups: Parent Group Setting Now Saves Correctly**
  - When saving a parent group setting on a custom group (either manually in the UI or via CSV bulk import), the value was not persisting. This affected orgs with multiple custom group types sharing the same field name, where the wrong group type was being resolved. Both the CSV importer and the UI now correctly resolve the active group type and save parent group relationships as expected.

## October 7th, 2026

🛠️ Fixed

- **Comp Planning: Budget Visualizations Now Respect Non-USD Currencies**
  - When all employees in a budget view were compensated in a non-USD currency (such as INR), the budget usage percentage was being calculated as if the amount were in USD, causing wildly inflated percentages. Budget allocated and used amounts are now correctly compared in the same currency.

## October 5th, 2026

🎉 New!

- **Comp Bands Settings: Consolidated and Expanded**
  - The Comp Bands settings page has been redesigned to bring all configuration into one place. Sections are now organized as: Starting Salary, Compensation Columns, Currency & Rounding, Hourly Configuration, Data Import, and Retire Compensation Bands. Starting Salary configuration has moved here from Org Settings. A new Compensation Columns section lets admins enable or disable Target Equity, Refresh Equity, and Target Variable Bonus columns with inline format selectors (Shares, Flat Money, or % of Base). Disabling a column shows a confirmation dialog with the count of affected bands and requires an effective date before data is removed.
- **Comp Planning: Export Budget Breakdown as CSV**
  - The Budget Breakdown per Job table now has an Export button that downloads the current view as a CSV. Exported columns include job title, person, status, planned start date, total annualized, total applied, and a column per fiscal month for monthly budgets. Rows are scoped to the same comp visibility rules as the on-screen table.

🛠️ Fixed

- **Scenarios: Custom Group Fields Now Appear in Impact Tab Group By**
  - Custom group fields (such as Business Units) were not appearing as options in the Group By dropdown on the Scenario Impact tab for some orgs. All custom group fields now appear correctly.

## August 31st, 2026

🛠️ Fixed

- **"Edit Person" Button Now Displays Correctly**
  - The "Edit person" button on profiles was sometimes displaying as "dit perso" due to a hard-coded width. It now displays the full label correctly.
- **Time Off: Approving Overlapping Requests No Longer Exceeds Policy Balance**
  - Two pending time off requests that each fit within a person's balance could both be approved, pushing them past their policy limit. Approval now checks the remaining balance before confirming and blocks requests that would exceed the policy minimum.

## August 28th, 2026

🛠️ Fixed

- **Comp Review Impact Dashboard: Final Approvers Now See the Full Cycle**
  - Users who are both a reviewer and the final approver on a comp review cycle were seeing only their reviewer scope in the Impact Dashboard. They now see data for the full cycle, consistent with their final approver access.
- **Greenhouse Outbound: Setting a Job to Inactive Now Closes the Opening**
  - When a ChartHop job's recruit status changed from Active to Inactive, the corresponding Greenhouse opening was left open. It is now correctly closed.
- **Goals Screen Now Loads Fully for Large Orgs**
  - The Goals screen was making too many sequential requests for orgs with large numbers of goals, causing slow load times. It now loads in significantly fewer requests.

## July 26th, 2026

🛠️ Fixed

- **Time Off: Delete Adjustment Button Now Appears Correctly**
  - The button to delete a time off adjustment was missing from the time off spreadsheet view. This has been resolved.

## July 16th, 2026

🎉 New!

- **Data Sheet: Filter by "Is Not" for Department and Other Group Fields**
  - The filter picker now shows an operator dropdown for group fields like Department, Location, and Teams, with both "is" and "is not" options. Previously no operator was shown, making "is not" filters impossible to build from the UI.

🛠️ Fixed

- **Org Chart: Group Node Cards Now Display Correctly**
  - Group nodes in the Org Chart view now show all custom positions with member avatars, an overlapping avatar stack with a "+X" count when space is limited.
- **Data Sheet: Calculated Columns No Longer Disappear from Saved Views**
  - An issue where calculated columns would intermittently vanish from a saved Data Sheet view has been resolved.
- **Data Sheet: Filter Modal Now Shows Correct Operator**
  - The "field is not empty" operator (field:\*) now displays correctly in the filter modal instead of reverting to a previously selected value.
- **Scenario Merge: Jobs No Longer Silently Dropped**
  - When merging a scenario, jobs that fail validation are now surfaced as errors instead of being silently dropped.
- **Editing a Person Field No Longer Fails Due to an Unrelated Date Field**
  - Editing a custom field on the Data Sheet could sometimes fail with a validation error referencing a different field the user never touched. This has been resolved.

## July 15th, 2026

🎉 New!

- **Simple Workflows: Edit Scenario Name Before Submitting**
  - When creating a scenario through a simple workflow (Create Job, Update Job, Terminate and Backfill, or Backfill), you can now customize the scenario name on the Review step before submitting.
- **Comp Review Workbook: Numbers Now Paste as Numbers**
  - Copying cells from the comp review workbook and pasting into Excel or Google Sheets now produces proper numbers instead of formatted text strings. Currency values paste with formatting in Excel; percentages and numbers paste as raw values.
- **Field Settings: Owners Can Now Mark Built-in Group Type Fields as Required**
  - Admins with field-update access can now check the "Required" setting on built-in group types (such as Department and Location) without needing ChartHop staff access. Sensitivity and category settings are also now editable.

🛠️ Fixed

- **Comp Band Name Now Reflects the Correct Date**
  - When viewing historical org data, a person's comp band name now shows the name that was in effect on that date. Previously, a renamed band would show the new name even for dates before the rename took effect.
- **Backfill Job Sensitivity Setting Now Works Correctly**
  - The "Default sensitivity for backfill jobs" setting in Admin now correctly applies to open jobs created after a departure.
- **Engagement Survey Charts: Y-Axis Scale Now Consistent**
  - Chart Y-axis scales in Engagement Survey results are now consistent across Group By selections. For questions using a fixed numeric scale (e.g. 1–5), the axis now correctly caps at the question's defined range.
- **Calendar Picker in Bundles Now Shows All Calendars**
  - The "Add calendar" picker in bundles was capped at 20 results, causing recently-created calendars to not appear. It now shows up to 1,000 calendars.

## July 13th, 2026

🛠️ Fixed

- **Scenarios: AI-Created Scenarios Now Open Correctly**
  - Scenarios created through Ask ChartHop previously opened the "Create scenario" workflow instead of the scenario detail view. They now open directly into the scenario changes view as expected.
- **Home Page: People Moves and Open Jobs Now Paginate**
  - The People Moves and Open Jobs blocks on the Home page now load more results as you scroll, and load faster thanks to improved caching. A "no tasks" empty state was also added to the Tasks block.

## July 9th, 2026

🎉 New!

- **Time Off: Configurable Work Days per Policy**
  - Time off policies now support a configurable set of work days (Monday through Sunday). All policies default to Monday through Friday. This enables support for employees in regions like Brazil or the Philippines where weekend days count against time off.

## July 8th, 2026

🎉 New!

- **Budgets in Scenario Header**
  - When planning in a scenario, impacted budgets now appear in the scenario header as color-coded progress bars showing current usage, the net change introduced by the scenario, and the total budget amount.

## July 7th, 2026

🎉 New!

- **AI Sync Log Analysis**
  - On integration sync history pages, a new "Generate insight" button uses AI to explain what went wrong in plain language and suggest next steps. Available for finished syncs that ended with errors or warnings.

## July 6th, 2026

🎉 New!

- **Gauge Chart Type**
  - Dashboards now support a new Gauge chart. It plots a single metric against a defined range, with optional target and danger thresholds and a "lower is better" mode for metrics like attrition or time-to-fill. Configure it in the Format panel of any dashboard.

## July 2nd, 2026

🎉 New!

- **Scenario Changes: Per-Table Saved Column Views**
  - Scenario owners can now save different column configurations for each change type table (Create, Hire, Update, Move, Depart, Delete) independently, rather than a single shared column list.
- **Document Signatures: Name, Title, Date, and Expression Placements**
  - When building a signature layout, you can now drag and place Name, Title, Date, and CQL Expression fields in addition to signature blocks.

## July 1st, 2026

🎉 New!

- **Access: Users Table on Edit Role**
  - The Edit Role screen now includes a Users table showing everyone assigned to that role, with avatars, titles, and department labels. Clicking a name opens the Edit User dialog. The Roles list now defaults to sorting by user count, and a new filter lets you view Assigned or Unassigned roles.

## June 27th, 2026

🎉 New!

- **Empty States: Updated Icons Across the App**
  - Empty state illustrations across tables and lists have been updated to use module-specific icons, making it easier to orient yourself at a glance.

## Jun 26th, 2026

🎉 New!

- **Connect Claude and Claude Code to ChartHop via MCP (AI Pro)**
  - ChartHop now supports MCP connections with Claude and Claude Code, allowing users to query ChartHop data directly from Claude. Admins can configure the Claude agent in ChartHop, copy the MCP server URL from agent settings, and add ChartHop as a custom connector in Claude Team or Enterprise. Each user connects through OAuth, and access can be set to read-only or read and write, while always following that user's ChartHop role and permissions.
- **Agent Role can now manage Actions (AI Pro)**
  - The built-in Agent role now has permission to create and manage Actions, so agents can set up and run automated workflows.
- **Scenario Changes Tab improvements**
  - The changes view inside a scenario has been rebuilt from the ground up. You can now add any field as a column, sort and filter the table, edit values inline, and take row-level actions without leaving the page. Conflicts are clearly flagged in context.
- **Comp Review Export: more control over what you export**
  - When exporting a comp review, you can now filter by column, reviewer, and location before downloading. The reviewer picker shows your full review hierarchy, so selecting a manager automatically pulls in all their direct and indirect reports.
- **Time Off: milestone-based accrual events**
  - Time off policies now support milestones. Admins can grant additional days when employees hit tenure thresholds, or define custom eligibility using CQL. A new Total column shows the projected balance impact of each milestone.
- **Integration Sync History: redesigned for easier troubleshooting**
  - The sync history view for integrations has been rebuilt with a faster, more readable layout. Status tags are color-coded, summaries are richer, and you can search by name or requisition to find a specific sync quickly.
- **Data Sheet: Freeze, Hide, and Remove Columns**
  - Columns in the Data Sheet now support Freeze, Hide, and Remove actions from the column header menu. Freezing a column pins it and everything to its left. Hidden columns show chevron indicators on adjacent columns so they can be unhidden. "Remove column" replaces the old "Hide column" label.
- **Data Sheet: Smart Avatar Column**
  - When a Data Sheet's first column is a person field, a compact avatar column automatically appears once you scroll the name column out of view, so you always know whose row you're on.

🛠️ Fixed

- **Agent permission changes now take effect immediately (AI Pro)**
  - When you update an agent's role or permissions, the change now applies right away instead of taking a few minutes to propagate.
- **Action errors are now visible in the activity log**
  - If an action step fails due to a configuration error, that failure is now recorded in the activity log so you can see what went wrong instead of the step silently doing nothing.
- **Job Codes: page no longer errors after deleting a linked field**
  - If a field linked to your job code configuration was deleted, the Job Codes page would show an error. This is now handled gracefully.
- **CSV Import: clearer error messages for date mismatches**
  - When a CSV import row cannot be matched to a person because of a date mismatch, the error message now explains why, including when the person started or left the role. Makes it easier to spot and fix timing issues.

## Jun 24th, 2026

🎉 New!

- **Ask ChartHop can now read files&#x20;**
  - Attach a CSV, screenshot, or other file directly to an Ask ChartHop message and the assistant will use it as context. You can also direct ChartHop AI or other ChartHop agents to access files stored on ChartHop like offer letters, etc. Useful for referencing information that is visual or found within a file when asking for requests, use them as a reference, evaluations across files, and more.&#x20;
- **Freeze Columns in the Data Sheet**&#x20;
  - You can now freeze one or more of the first three columns so they stay visible as you scroll horizontally. Freeze and unfreeze from the column header menu.
- **ChartHop AI can now move people between jobs in a Scenario&#x20;**
  - Agents working in a scenario can now move a person from one role to another as part of an automated workflow.
- **Approval chains fall back to the filled manager when an approver's role is open**
  - ChartHop automatically routes to the next filled manager in the chain, with a full audit trail showing who acted on behalf of which open role.
- **Delegates can now see who they're covering for**&#x20;
  - Users designated as approval delegates see a "You are a delegate for" section in their Approval Delegates settings.

🛠️ Fixed

- **Change notification emails&#x20;**
  - profile link now works correctly
- **Data Sheet confirm dialog&#x20;**
  - AI Job Code Matcher option no longer appears outside the matcher
- **CSV import&#x20;**
  - clearer error when a person's job date doesn't match the row date

## Jun 23rd, 2026

🎉 New!

- **Build Forms with Ask ChartHop**
  - Describe the form you need in plain language and ChartHop generates a draft with appropriate questions and structure, ready to review and publish.
- **Ask ChartHop is now context-aware**&#x20;
  - Ask ChartHop knows which part of the app you're in when you ask a question or make a request. Whether you're on the Data Sheet, a profile, a scenario, or a report, the assistant uses that context to give more relevant answers and take more targeted actions.

## Jun 16th, 2026

🎉 New!

- **Filter eligible jobs for Group Positions using CQL**&#x20;
  - Admins can now add a CQL eligibility filter to each position in a Group Type. Only matching jobs will be available to assign in the Manage Members drawer.
- **You can now Hide Columns properly in the Data Sheet.**
  - The updated Hide Column no longer removes the column from the Data Sheet, but instead hides it until the user clicks on the carrot arrows **> \<** to unhide it.&#x20;
  - The previous features called Hide Column is now called Remove Column and actually removes the column from the Data Sheet
  - The new Hide Column does not save the columns as hidden when saving a Data Sheet nor does it hide the columns on export.

## Jun 13th, 2026

🛠️ Fixed

- **CSV Import: Open Job deletion now works properly**
  - Deleting an open job via CSV import no longer causes relationship issues. Manager links are now cleaned up correctly, and related changes on the same date are preserved as expected.

## Jun 9th, 2026

🎉 New!

:::Paragraph{listStyleType="disc" indent="2"}
Calibration sessions now support saved views, allowing HR admins and managers to configure and save specific column layouts and filters for calibration. Views can be shared with managers for calibration sessions. Calibration data can now also be exported directly from the calibration page.
:::

## Jun 4th, 2026

🎉 New!

- **Ask ChartHop Access Controls (AI Pro)**
  - AI Pro customers can now configure guardrails for Ask ChartHop directly from AI Settings — including controlling which users have access to the AI assistant based on role or filter criteria.

## May 22nd, 2026

🎉 New!

- **Open Jobs — Department column restored on Home page**
  - The Department column in the Open Jobs section on the Home page was missing. This has been fixed.

🛠️ Fixed

- **Greenhouse field mapper — custom field mappings now work correctly**
  - An issue where custom ATS field mappings to certain built-in fields (like `company`) were being silently dropped has been fixed. Inbound data from Greenhouse now correctly maps to ChartHop custom fields as configured.

## May 21st, 2026

🎉 New!

- **AI-powered Job Code Matching**
  - A new AI-powered matching screen under Data Model → Job Codes lets you automatically suggest job codes for positions that don't yet have one. Run the matcher, review suggestions in a spreadsheet, edit as needed, and apply in bulk — all in one place. Requires AI and Dynamic Fields to be enabled.
- **Scenario Approval — "Relative to" toggle for approver fields**
  - When building scenario approval chains (e.g. Create Job workflows), you can now choose whether a field-based approver (like Hiring Manager) resolves relative to the *job being created* or the *person submitting* the scenario.

## May 20th, 2026

🎉 New!

- **Job Code Description Tab**
  - Job codes now have a dedicated Description tab in the side drawer with a rich text editor.
- **Goals Layout Improvements**
  - The goals tree view has been cleaned up for improved readability and breathing room.
- **Signature Decline Notifications**
  - When a signature request is declined, the requester now always receives an email notification — even when the org uses Slack or Teams as the primary notification channel.

## May 19th, 2026

🎉 New!

- **Compensation Export**
  - A new **Compensation Export** screen under People Ops Tools lets you view and export a full history of compensation changes, with date-range filtering, text search, infinite scroll, and CSV export.

🛠️ Fixed

- **Chart edit preview blank when no scenario selected**
  - Editing a chart with no scenario selected in the dashboard was showing "No data available" instead of rendering the chart preview. This is now resolved.

## May 18th, 2026

🎉 New!

- **Scenario Approval — Auto-approve when submitter is approver**
  - A new option on approval stages automatically approves any stage where the approver is also the submitter, reducing unnecessary approval steps.

## Apr 29th, 2026

🎉 New!

- **Natural Language Filtering is now generally available**
  - You can now type a plain-language description of who you're looking for in any filter field — such as "show me engineering hires from this year" — and ChartHop will automatically translate it to a CQL filter. This feature is now available to all orgs.

## Apr 25th, 2026

🎉 New!

- **Set Person Field for Approvals**
  - Approval chains can now be configured to route approvals based on a person-type field (e.g. send to the hiring manager or HRBP stored on the job), giving admins more flexibility in building dynamic approval workflows.

## Apr 24th, 2026

🎉 New!

- **More control when clearing org data**
  - When clearing org data, admins are now prompted with a choice: remove all user access, or keep it. Previously, clearing org data would silently remove all invited users. The admin who initiates the clear is always preserved.

🛠️ Fixed

- **Scenarios — custom overhead cost fields now display correctly in the changes view**
  - Custom fields that calculate overhead costs were disappearing from the scenario changes table after the header cost updated. Values now persist correctly and update dynamically as you change comp bands.

## Apr 23rd, 2026

🛠️ Fixed

- **Data Sheet Group By — "Copy all data & headers" now copies actual data**
  - When using the Group By feature on the Data Sheet, the Export → "Copy all data & headers" option was only copying column headers with no row data. This is now fixed.
- **Lattice integration — review cycle sync completion now accurate**
  - Fixed two bugs causing Lattice review cycles to show 0% completion in ChartHop.

## Apr 16th, 2026

🎉 New!

- **Org Chart Title Abbreviations Improved**
  - Org chart card titles now abbreviate consistently and intelligently when space is constrained, preventing text from being cut off unexpectedly.

## Apr 10th, 2026

🎉 New!

- **Embedded Org Chart — View Profile Button Control**
  - Admins can now control whether the "View Profile" button appears on the embedded org chart, giving more control over the embedded experience for customers using ChartHop org charts on external sites.

## Apr 9th, 2026

🛠️ Fixed

- **Pie Charts Improved**
  - Pie Charts now start at 12 o'clock and radiate clockwise
  - Pie Chart legends now fit the space better and have improved layout adjustments when browser is resized
  - Legend is scrollable if legend items do not fit in space
  - Improved Legend readability. When color is too light, close to white, the text converts to dark gray instead of slice color
- **Stacked Bar Charts Improved**
  - Stacked Bar Chart legends now fit the space better and have improved layout adjustments when browser is resized
  - Legend is scrollable if legend items do not fit in space

🎉 New!

- **Table Crosstab Improved**
  - The Color Scale default for Table Crosstab now uses white as neutral color instead of yellow/orange for better readability
- **Action Menu Visibility for Charts in Dashboards**
  - The Action Menu on Charts in Dashboards is now visible on rollover for that specific chart instead of being visible on all charts at all times.

## Apr 7th, 2026

⚒ Fixed

- **Preboarding — new hire work email now displays correctly in the Users page**
  - When viewing a preboarding user in the Users page, the work email field was not displaying correctly in some cases. This has been resolved.

## Apr 4th, 2026

🎉 New!

- **Forms Task Tab & Task Filtering**
  - A new Tasks tab within Reviews and Surveys gives admins a centralized place to manage and track form submission tasks. Tasks can now be filtered by type (e.g. signature requests vs. form submissions), making it easier to manage large review cycles.

## Apr 2nd, 2026

🎉 New!

- **New Hire Management — Preboarding & Onboarding now in one place**
  - A new tabbed interface under New Hire Management makes it easier to manage preboarding and onboarding all in one place.

## Mar 31st, 2026

🤖 LLM Model Change

- Moved from Anthropic model Sonnet 4.0 to Sonnet 4.6

## Mar 30th, 2026

🎉 New!

- **Scenario Audit Log**
  - Scenario changes now include a full audit log, giving admins and approvers visibility into who made what changes and when within a scenario.

## Mar 27th, 2026

🎉 New!

- **Conditional Scenario Approval Notifications**
  - Approval notifications for scenarios can now be configured with conditional logic, allowing teams to customize who gets notified based on the content of the scenario.

## Mar 26th, 2026

🎉 New!

- **Custom balance descriptions**
  - Admins can now add custom descriptions to time-off balance entries, improving clarity for employees.
- **New time off policy support**
  - "Next year" time off policies can now be set up in ChartHop.
- **Select "AM" or "PM" if requesting a half day or less**
  - Employees can select "AM" or "PM" to help their coworkers and managers better understand when they'll be out of the office.
- **Same-day deactivation for departures**
  - Added support for same-day deactivation in Okta/Google for voluntary departures.

⚒ Fixed

- Fixed an issue where ADP Data Connector was producing unexpected manager changes.

## Mar 18th, 2026

🎉 New!

- **Stacked rank chart available**
  - Added a stacked rank question option for forms/surveys, expanding available question formats.
- **Process logging for UAM**
  - Added process logging to User Access Management to improve visibility and debugging.
- **Preboarding is in Alpha!**
  - HRIS customers can have their CSM or Support enable preboarding in labs --> alpha features.
- **Actions & magic links for preboarding**
  - Added support for using future job data in preboarding action folders, and added magic link support for tasks sent via actions to preboarding users.
- **Greenhouse V3 Integration**
  - Released the first increment of OAuth-based connection and install flow for the Greenhouse V3 integration.

⚒ Fixed

- Fixed an issue where Turbo Importer failed to send data to two columns sharing the same name.

## Mar 10th, 2026

🎉 New!

- **Preboarding — New Hire Access to Person Information**
  - Preboarding users can now be granted access to view person information in ChartHop before their official start date, enabling a smoother onboarding experience.

## Feb 25th, 2026

🎉 New!

- **Bubble Chart clicks now connect to Profile Side Bar**
  - When you click on people represented in the Bubble Chart in Data Explorer, it now shows the Profile Side Bar for that Person.
- **Greenhouse integration updates**
  - Admins can now select an attribution email, or continue to let ChartHop default to the next admin with the required permissions.
  - We also added an app user setting to choose whether you want jobs in "draft" status to send to ChartHop or stay in Greenhouse

🚀 Improved Performance

- **Core Views load Faster**
  - Core Views including Home, Org Chart, Data Sheet, Calendar, and others load up to 50% faster

## Feb 13th, 2026

🎉 New!

- **Mobile App now Supports Signatures**
  - Complete signatures as part of forms or tasks that have signatures assigned on your mobile device with the ChartHop Mobile App.
- **Create a person from an in progress hire to ADP**
  - This unlocks a huge workflow for our ADP 2-way customers, allowing them to leverage a default template in ADP to create a person from ChartHop
- **Bring ability to sync to sheets/excel to scenario menu**
  - You can now sync to sheets/excel DIRECTLY from a scenario instead of navigating to the datasheet first
- **Job Codes in the Data Sheet**
  - Job codes are now supported in the data sheet, so you can view and manage them alongside other job data in a single place.

## Feb 10th, 2026

🎉 New!

- **Inline editing for Comp Bands**
  - Compensation bands can now be edited directly in the UI, removing the need to navigate to a separate settings page to make updates.
- **Backfill Scenarios new in Simple Workflows**
  - A new scenario type allows users to submit a backfill request, even if a termination has already been processed or submitted.
- **Send Generated Documents for Signature**
  - When generating PDFs from Letter Templates in **People Ops Tools**, you can now send documents directly to employees for signature using ChartHop's native signing experience.
- **Okta updates for reactivation and deactivation profiles**
  - We can now support same-day deactivation for voluntary departures in Okta/Google

⚒ Fixed

- Fixed an issue where the calendar was showing duplicate time off requests

## Jan 30th, 2026

🎉 New!

- **Accruals and carryover with multiple view options!**
  - We now support multiple accrual schedules- biweekly, monthly, semi-monthly etc., and multiple carryover combinations of rolling and fixed expirations.
- **Time off admin can make adjustments in the ledger**
  - Admins can now make an adjustment right on an employees profile tab in the ledger.
- **Search for jobs using custom fields**
  - You can now search and filter jobs using custom field values, making it easier to find the right positions across large org structures.
- **Custom Group tags in profiles**
  - Custom group tags are now surfaced directly in the employee profile header, giving you quick visibility into group membership at a glance.
- **View and Restore Archived Groups**
  - Admins can now filter to view archived departments and custom groups, and restore them directly from the Groups settings page.

⚒ Fixed

- Lattice integration was pulling over duplicate and sometimes empty columns

## Jan 21st, 2026

🎉 New!

- **Time Off Carryover Balance Display**
  - The time off balance tab now correctly shows the remaining carryover balance separately, giving employees and admins clearer visibility into what carryover is still available to use.

## Jan 16th, 2026

🎉 New!

- **AI Usage** dashboard now available in **Admin** > **History** > **AI Usage**
  - Admins can now view aggregated AI adoption, usage trends, top use cases, and activity across the organization.
- **Internationalization updates**
  - Major updates to emails, home pages and form translations to support global teams.
- **Simplify cleaning up your data!** We introduced the ability to remove a person with one click instead of needing to remove the job and then the person, you can remove the person and it will remove the job with it.
- **Group By on Data Sheet**
  - Users can now group rows in the Data Sheet by any built-in or custom field, with summary row counts displayed for each group.
- **Data Sheet Summary for Form Responses**
  - Form response summary data, including record counts and breakdowns by group, are now displayed at the bottom of grouped data sheet views.

⚒ Fixed

- Issue where the Approve/Reject button would appear when Approvals were not enabled

## Jan 14th, 2026

🎉 New!

- **Dashboard Chart Improvements**
  - Pie charts and bar/column charts now have improved label display, better legend readability, and cleaner overall rendering. Admins can now configure charts to show zero values for cleaner data representation.

## Jan 12th, 2026

🔬 New in Labs!

- **Group By and Progressive Loading on Data Sheet** is in Alpha
- **UKG Ready sync updates**
  - Improved our Finch integration to support separation of combined values

⚒ Fixed

- Time Off Requests drawer showing holidays or weekends as "1 day" when they occurred at the start or end of a request range
- Updated an issue with preboarding users who would stay in preboarding once they started

## Jan 7th, 2026

⚒ Fixed

- Issue with time off balance display on profile tab for accrual policies
- Forms crashing due to selections options

## Jan 6th, 2026

🎉 New!

- **Save Dashboard Filters and Date Ranges**
  - Dashboard filters and date range selections can now be saved and shared with viewers, so recipients always see the dashboard in the intended context without needing to re-apply filters manually.

⚒ Fixed

- Issue fixed when Dashboard is shared with a person that is not an owner or and editor, they can now see / use an applied filter
- Updated the daily run toggle for the Deel integration

[title] Comp Reviewers & Approvers
[path] ChartHop by ChartHop/Compensation Planning/

## Overview\#

The Reviewers & Approvers section defines the tree of managers involved in the comp cycle — who is reviewing pay, who is submitting, and who is approving. This is the **least flexible section of the cycle once launched**, so it must be configured correctly before clicking Launch.

:::BlockQuote
This tree is built from the org chart **as of the org data reference date**, not today's date.
:::

## How the Tree Works

By default, the tree includes **all managers** who have at least one eligible employee reporting to them. It is automatically constructed from the org chart.

Each manager in the tree has two columns:

- **Reviewing** — the employees in this manager's pod whose pay they are responsible for evaluating
- **Approving** — the submissions routed to this manager from below for their approval. Frontline managers will always have 0 here, since no one submits up to them.

Clicking on any manager shows you both their reviewing list and their approving list.

## Filtering the Tree

If you don't want all managers in the cycle, switch from the default to **Custom** and apply a filter. Examples:

- Only managers with "Director," "VP," "Vice," or "Chief" in their title
- Only managers at levels 7, 8, or 9
- Any CQL-based filter on data that exists in ChartHop

**Tip:** If the manager list doesn't map cleanly to a title or level pattern, consider creating a custom Yes/No field (e.g., managerInCycle) and setting it to Yes on the relevant managers. Then filter on that field. This gives maximum flexibility for non-standard configurations.

## Manually Adjusting the Tree

Even after applying a filter, you can make individual tweaks:

- **Remove a manager and reassign** — click on a manager, select Remove & Reassign All, and choose who their direct reports should roll up to.
- **Move an individual employee** — click on the manager the person currently sits under, select the person, choose Reassign Reviewer, and pick the new manager.

### Reassignment Error: Same Reporting Line

If you try to reassign someone to a manager in their same reporting line, ChartHop will block it with an error. This is a data visibility safeguard.

**Workaround:** Move the person to a completely different part of the org first (a different reporting line), then move them again to the intended destination.

## The Head of Org & Final Approvers

The CEO (or whoever heads the org) will always appear at the top of the tree and **cannot be removed**. All submissions ultimately flow upward and need a top-level destination.

**Final Approvers** are designated by adding names to the Final Approvers field. They are treated as fully equivalent to the head of the org — when a submission reaches the highest level, it routes to the head of org and all final approvers simultaneously. This means the CEO doesn't need to take any action themselves if final approvers are designated.

## ⚠️ Post-Launch Restrictions — Read This Carefully

This is the least flexible part of the cycle once launched — **even if the cycle is paused**. Communicate this clearly to customers before launch, put it in writing, and reference it in follow-up emails.

### What is locked after launch:

- **You cannot add a manager to the tree.** If someone isn't in the tree at launch, there is no way to insert them. They can be made a collaborator, but not a reviewer/approver.
- **You cannot change who a manager submits to.** Submission paths are locked at launch.
- **You cannot remove a final approver** after launch.

### What is still possible after launch (with a pause):

- **Remove a manager and reassign** their direct reports up
- **Move an individual employee** to a different manager's pod
- **Add additional final approvers**

## What Happens When a Manager in the Tree Terminates

Behavior depends entirely on the **org data reference date**.

- **Termination effective after the reference date:** The cycle ignores it. The manager stays in the tree. Options for the cycle owner:
  1. If they already submitted — no action needed.
  2. If they haven't submitted — an owner can manually skip them within the cycle.
  3. Pause the cycle, remove the manager and reassign their people up, then resume.
- **Termination effective on or before the reference date:** ChartHop automatically removes the manager from the tree and bumps their direct reports up to the next level.

## Resetting Tree Changes

If you've manually removed or reassigned managers and want to undo those changes, there is a **Reset** button. However, this is a **bulk reset** — it undoes all manual changes at once, not individual ones. There is currently no way to undo just a single reassignment.

For this reason, discourage customers from making a large number of manual removals and reassignments. If a lot of manual tweaking is needed, it's a signal to refine the filter at the top instead. Heavy manual edits create risk: if any change needs to be undone later, everything has to be reset and redone from scratch.

[title] Untitled
[path] ChartHop by ChartHop/


[title] Tables
[path] Labs/

:::hint{type="info"}
This feature is currently in Beta. We're excited for you to try it and would love your feedback. Send it to the ChartHop team or directly to [product-feedback@charthop.com](mailto\:product-feedback@charthop.com).

### How to set up a Beta Feature

1. From the left sidebar, select **Admin**, then select **Labs**.
2. Use the switch to toggle on the feature, then press the **Save settings** button.
3. Read below for additional setup instructions and context about what will be activated when you save settings.
:::

### Overview

Business Tables let you store and manage custom structured data in ChartHop — independent of employee or job records. Common use cases include tracking sales targets, headcount plans, cost centers, events, or any org-specific dataset.

### Places to utilize data from Tables

- Home Page
- Profile Tabs
- Dashboards
- Forms (Text blocks)
- Resource Pages
- Letter Templates

### Tables access

Initially only Owners have the ability to create Tables.

Tables utilize ChartHop's [Sharing a dashboard](docId:0i9JBq64ImA6pQFFAXo-K), so anyone in the organization can be given access to a table to edit or view a specific table.

## Creating a Table

**1** Navigate to **Tables** in the left navigation.

**2** Click the **Create** button in the top right corner.

**3** In the **Create Table** dialog, fill in:

- **Code name** — A programmatic identifier used in formulas and the API (e.g., salesTargets). No spaces; use camelCase.
- **Display name** — The human-readable name shown in the UI (e.g., Sales Targets).

**4** Click **Save**. The table is created and opens to an empty state.

The table list shows all tables with their display name, code name, row count, creator, last modifier, creation date, last modified date, and who it's shared with. Use the **Filter by name** search to find tables quickly.

## Creating Columns

A new table starts empty. You must define at least one column before adding or importing data.

- From the empty table view, click **Create column**.
- Fill in the **Create column** form:

| Field                       | Description                                                                                |
| --------------------------- | ------------------------------------------------------------------------------------------ |
| **Label**                   | The display name for the column header.                                                    |
| **Field code**              | The programmatic identifier used in formulas and the API.                                  |
| **Description**             | Optional. Explains what this column stores.                                                |
| **Category**                | Groups the column for organizational purposes. Defaults to *Uncategorized*.                |
| **Sensitivity**             | Controls visibility. *Org Public* = visible to everyone in the org; not shared outside.    |
| **Data type**               | The type of value stored (e.g., Short text, Number, Date, Currency). See data types below. |
| **Unique**                  | Marks this column as the unique identifier for each row. **Required on the first column.** |
| **Track changes over time** | Enables historical tracking for this column's values.                                      |
| **Expire after**            | Optional. Number of days after which a row's value in this column expires.                 |

- Click **Save**. Repeat to add additional columns.

**Important:** The first column of every table must have **Unique** checked. This column acts as the primary key — each row must have a distinct value in this field. This is required for data imports and row matching to work correctly.

### Column Data Types

Business Table columns support the same data types as ChartHop fields, but are not tied to employee or job records. Available types include:

- Short text
- Long text
- Number
- Currency (money)
- Percent
- Date
- Boolean
- Enum (single or multi-select)

## Importing Data from a Spreadsheet

Once your columns are defined, you can populate the table by importing a CSV or spreadsheet file.

**1** Open the table you want to populate.

**2** Click the **download/import icon** in the top right of the table view to open the export/import menu.

**3** Select **Import table from spreadsheet**.

**4** Upload your file. Column headers in the spreadsheet should match the field codes or labels of your table columns.

**5** Review and confirm the import mapping, then complete the import.

**Tips for a clean import:**

- Ensure your spreadsheet has a column matching the **unique** column — this is how ChartHop identifies and deduplicates rows.
- Column headers should match your table's field codes exactly (case-sensitive).
- Remove any summary rows, merged cells, or extra header rows before importing.

### Other Import/Export Options

| Option                            | Description                                                     |
| --------------------------------- | --------------------------------------------------------------- |
| **Export to CSV**                 | Downloads the current table data as a CSV file.                 |
| **Sync to Excel/Sheets**          | Syncs the table to a connected Excel or Google Sheets document. |
| **Import table from spreadsheet** | Uploads a spreadsheet file to populate or update the table.     |
| **Sync from business data**       | Sync from Zendesk, Google Sheets, Salesforce and more!          |

## Maintaining a Table

### Editing Table Structure

- Click the **pencil (edit) icon** in the top right of the table to edit table settings or column definitions.
- Add new columns at any time using the **Create column** button.
- Column data types and unique settings can be modified after creation, but changing the unique column may affect existing row matching.

### Editing Data

- Rows can be edited inline directly in the table view.
- Use **Import table from spreadsheet** to bulk-update rows — rows matching on the unique column will be updated; new rows will be added.
- Use **Export to CSV** to pull data, edit it externally, and re-import.

### Filtering and Finding Tables

- From the Tables list, use the **Filter by name** search bar to find tables by display name.
- Tables are sorted by display name by default. Click any column header to re-sort.

## Sharing Access

The **Shared with** column on the Tables list shows which users or groups currently have access to each table.

To share a table:

- Open the table.
- Click the **share/link icon** or access sharing settings via the table edit menu.
- Add users or groups who should have access.

Column-level sensitivity settings also control visibility. A column set to **Org Public** is visible to all org members with table access, but is not shared outside the organization. Adjust sensitivity per column if certain fields (e.g., salary bands) should be restricted to specific roles.

## Examples of how data from tables are used

Example Salesforce data in a table

![](https://api.archbee.com/api/optimize/CXAjUAezd9VEEVQBIYmdw/FDVDCY8BNRy1aHBc6D000_.blob "salesforce data in a table ")

Once data is in a table in ChartHop, it can be referenced throughout the platform, like in the org chart:

![](https://api.archbee.com/api/optimize/CXAjUAezd9VEEVQBIYmdw/W4IgEfOCN4LaFxPg5qRHe_.blob "quote attainment in the org chart")

Or in profile tabs:

![](https://api.archbee.com/api/optimize/CXAjUAezd9VEEVQBIYmdw/IjkFiUO9Mcf_eEcsuIsLC_.blob "Profile tab for sales team member")

ChartHop is more powerful with more data it has access to. Leveraging AI can help you make decisions faster. With Salesforce and Zendesk data paired with people data, ChartHop AI can help you make a scenario to forecast new headcount based on pipeline growth proactively.

![](https://api.archbee.com/api/optimize/CXAjUAezd9VEEVQBIYmdw/LOUabzRTi68s-33bLpQgB_.blob "Scenario created based on salesforce data")

::Image[]{src="https://api.archbee.com/api/optimize/CXAjUAezd9VEEVQBIYmdw/lmJVXg25OARYepXTh54Wy_.blob" size="56" width="440" height="70" position="center" showCaption="false"}


[title] .nps()
[path] Carrot reference/Methods/

Calculates a [Net Promoter Score](https://en.wikipedia.org/wiki/Net_promoter_score) from a [Sequence](docId\:JG4itlQWafzLpArttFo67) or [List](docId\:xWH_cUkHj9waqaEfb7H71).

Net Promoter Score is calculated by taking the number of Promoters (values of 9 or 10), subtracting the number of Detractors (values of \<= 6), and dividing by the total number. The result is multiplied by 100 and therefore will be between -100 (worst) and 100 (best).

This is especially useful in calculating eNPS (Employee Net Promoter Score).

### Syntax

`.nps()`

- Returns the NPS score of items in the Sequence or List.

`.nps{expression}`

- Returns the NPS score of items in the Sequence or List evaluating`expression` for each item.

### Examples

- `[4, 8, 9, 10].nps()` returns `25`
- `findAnswers('eNPS Question', '-30d').nps{it.value}` returns the eNPS score from all of the responses to the `eNPS Question` question in the past 30 days.
- `findAnswersByAssessment('eNPS Question', '2H Engagement Survey').groupBy{submitPerson.department}.nps{it.value}` returns the eNPS score from all the answers to the `eNPS Question` in the `2H Engagement Survey`, grouped by department.


[title] Ashby Integration
[path] Labs/

:::hint{type="warning"}
This feature is currently in Beta.

We're really excited about it and it's already being used by multiple organizations.

Try it out and send feedback to the ChartHop team or directly to [product-feedback@charthop.com](mailto\:product-feedback@charthop.com).

### How to setup a Beta Feature

1. From the left sidebar, select **Admin,** then select **Labs**.
2. Use the switch to toggle on the feature, then press the **Save settings** button.
3. Read below for additional setup instructions and context about what will be activated when you save settings.
:::

The Ashby integration is a two-way sync that allows for the following:

- Outbound — ChartHop to Ashby — [Open Job ➡️ Opening](./#sync-an-open-job-in-charthop-to-an-opening-in-ashby)
  - ChartHop must be the source of truth for Open Jobs
- Inbound — Ashby to ChartHop — [Offer + Hired Candidate ➡️ Person in Filled Job](./#sync-an-offer-in-ashby-to-a-person-in-charthop)

The Ashby integration is developed by the Ashby team. You can view additional documentation from them: [here](https://ashbyhq.notion.site/Early-Access-ChartHop-5e55a07057a84482a69b44b913bbb996).

## Setup & API Keys

This integration uses two API keys — one for each direction of the sync. During setup, you'll be asked to provide both.

### ChartHop → Ashby API Key (generated by Ashby)

Ashby's setup flow will ask you to paste an API key into ChartHop. This key is generated in Ashby and authorizes ChartHop to connect to your Ashby account.

To generate this key:

1. Go to [app.ashbyhq.com/admin/api/keys](https://app.ashbyhq.com/admin/api/keys) in Ashby.
2. Create a new API key and copy it.
3. Paste it into the field shown during the ChartHop integration setup.
4. Continue following the remaining steps in [Ashby's setup documentation](https://ashbyhq.notion.site/Early-Access-ChartHop-5e55a07057a84482a69b44b913bbb996).

### Ashby → ChartHop API Key (generated by ChartHop)

ChartHop also generates its own API key, which Ashby uses to push data back to ChartHop (e.g., hired candidates). This key is generated automatically by ChartHop during the installation flow and is provided to Ashby as part of the setup.

:::hint{type="info"}
ChartHop's ability to connect directly to Ashby via AI is a newer, experimental capability. If you run into any issues, please contact support.
:::

## Sync an Open Job in ChartHop to an Opening in Ashby

1. Mark the hiring **Recruiting Status** as `Active` in ChartHop
2. Wait for the open to sync to Ashby (The sync runs every 5 minutes)
3. Look for the Job in the list of Openings in Ashby: [app.ashbyhq.com/openings](https://app.ashbyhq.com/openings)
4. The job will be imported with a status of `Approved` — move it to `Open` to start hiring.

::Image[]{src="https://api.archbee.com/api/optimize/CXAjUAezd9VEEVQBIYmdw/8Iq0Z29q8-kP_O9Q75IeS_screenshot-2024-04-30-at-91227-pm.png" size="52" width="792" height="454" position="center" darkWidth="792" darkHeight="454" showCaption="false"}

## Sync an Offer in Ashby to a Person in ChartHop

1. When creating the offer, add relevant fields that will be mapped to ChartHop.
2. After the candidate has accepted the offer and been marked as `Hired` in Ashby, they can be pushed to ChartHop from Ashby.
3. Wait for the sync from Ashby (The sync runs every 5 minutes)
4. View the new hire in ChartHop.

::Image[]{src="https://api.archbee.com/api/optimize/CXAjUAezd9VEEVQBIYmdw/_doyMfH3gKbClDKpV-PBm_screenshot-2024-04-30-at-91738-pm.png" size="66" width="1296" height="1090" position="center" caption="Setting ChartHop Information during offer" darkWidth="1296" darkHeight="1090" showCaption="true"}

::Image[]{src="https://api.archbee.com/api/optimize/CXAjUAezd9VEEVQBIYmdw/mQYH844uUWRs5rQ8gwg1u_screenshot-2024-04-30-at-92456-pm.png" size="80" width="1142" height="396" position="center" caption="Adding candidate to ChartHop" darkWidth="1142" darkHeight="396" showCaption="true"}

## Syncing details & setup

- The sync will run every 5 minutes or whenever you push the sync button
- If you want to manually initiate the sync, press the sync button in Ashby. Running the App in ChartHop will not sync the app.
- The Ashby integration can pull any field *from* ChartHop and will automatically create new fields in Ashby. Simply mark the Checkbox to sync the field.
  - Only Custom fields in ChartHop can be synced.

::Image[]{src="https://api.archbee.com/api/optimize/CXAjUAezd9VEEVQBIYmdw/v_o2WVchmgGRI_2iFWa2n_screenshot-2024-04-30-at-94142-pm.png" size="66" width="2344" height="1200" position="center" caption="ChartHop App Setup in Ashby" darkWidth="2344" darkHeight="1200" showCaption="true"}


[title] Data Sheet: Group By and Progressive Loading
[path] Labs/

:::hint{type="warning"}
This feature is currently in Alpha. Be one of the first customers to try it! Please share any feedback with the ChartHop team.&#x20;

### How to setup a Alpha Feature

1. Contact [ChartHop support](mailto\:support@charthop.com) or your CSM if you have one. They can activate the feature for you.&#x20;
2. Read below for setup instructions and context on how the feature will work.
:::

These new capabilities enhance Data Sheets with powerful grouping functionality and performance improvements for large datasets. Group By allows you to organize and analyze data with pivot table like categories, while Progressive Loading ensures fast performance even with thousands of rows.

## Group By

Group By transforms your Data Sheet into a consolidated view, allowing you to aggregate and analyze data by any field in ChartHop.



![Group By](https://api.archbee.com/api/optimize/CXAjUAezd9VEEVQBIYmdw/9J8oVm4uvaiMLlg-nZEEE_image.png "Group By")

### How to use Group By

1. Open any Data Sheet view
2. Click the "Group By" selector in the toolbar above the table
3. Select the field you want to group by (e.g., Department, Location, Manager, Job Level)
4. The sheet will reorganize to show grouped rows with expandable sections

### What happens when you apply grouping

When you group your data:

- **Rows are organized hierarchically** — All people sharing the same value for the grouped field appear together under a collapsible header
- **Aggregate values are calculated** — Numeric columns automatically show totals or averages for each group (currently only selective fields that can be calculated are aggregated in Group By row). If person or job is not exclusive to a specific Group, they will not be counted more than once in total count or aggregation in the Sum row.&#x20;
- **Navigation becomes easier** — Expand or collapse groups to focus on specific segments of your organization

### Common use cases for Group By

- **Department analysis** — Group by Department to see headcount, total compensation, or average tenure across different parts of your organization.
- **Manager span of control** — Group by Manager to quickly identify direct report counts and team compositions.
- **Location planning** — Group by Location or Office to understand geographic distribution and plan for office space or regional strategies.
- **Compensation equity** — Group by Job Level or Comp Band to identify pay distributions and ensure equitable compensation practices.

### Multi-level grouping

You can apply multiple Group By fields to create nested hierarchies:

1. Apply your first Group By (e.g., Department)
2. Click "Add Group By" to nest a second level (e.g., Job Level within Department)
3. Add one more if desired for a max of three nested GroupBys

This creates views like Department > Job Level > Location, allowing for sophisticated analysis of organizational structure.

### Working with grouped data

- **Expanding and collapsing groups** — Click the arrow icon next to any group header to expand or collapse that section. Use "Expand All" or "Collapse All" to manage all groups at once.
- **Filtering within groups** — Filters continue to work with grouped views, allowing you to group by Department while filtering to only active employees or specific locations.
- **Exporting grouped data** — (coming soon)

## Progressive Loading

Progressive Loading dramatically improves performance for Data Sheets with large datasets by loading data incrementally as you scroll.



![progressive loading](https://api.archbee.com/api/optimize/CXAjUAezd9VEEVQBIYmdw/bLgPZKF-Vl-b1GfkQuR9C_image.png "progressive loading")

### How Progressive Loading works

![]()

Instead of loading all rows at once, Progressive Loading:

1. **Loads an initial batch** — The first 100-200 rows appear immediately when you open the sheet
2. **Loads more as you scroll** — Additional rows are fetched automatically as you scroll down
3. **Maintains full functionality** — All filtering, sorting, and searching work across the entire dataset, not just loaded rows

### Performance benefits

For large organizations, Progressive Loading delivers:

- **Faster initial load times** — Sheets with 5,000+ employees now load in seconds&#x20;
- **Smoother scrolling** — No lag or freezing when navigating through large datasets
- **Reduced browser memory usage** — Only visible rows are rendered in your browser

### Working with progressively loaded data

- **Searching and filtering** — When you apply a search or filter, ChartHop searches the entire dataset (not just loaded rows) and returns all matching results.
- **Sorting** — Sort operations work across the full dataset and will reload the sheet with the new sort order applied.
- **Exports** — Exporting always includes all rows, regardless of how many have been progressively loaded in your browser.

## Group By with Progressive Loading&#x20;

When using Group By on large datasets, groups are loaded progressively as you expand them, maintaining fast performance. These features work seamlessly together for analyzing large organizations:

1. Apply Group By to organize data (e.g., by Department)
2. Progressive Loading ensures each group loads quickly
3. Expand groups as needed to drill into specific segments
4. Navigate through thousands of employees with consistent performance

This combination is particularly powerful for executive dashboards, annual planning reviews, and organization-wide compensation analysis.


[title] Headcount Planning
[path] ChartHop by ChartHop/


[title] AI Usage Policy
[path] Resources/

This policy outlines the guidelines for the use of Artificial Intelligence (AI) within the ChartHop platform. We are committed to transparency and responsible AI practices.

### Purpose

This document aims to clarify how AI is integrated into our platform, its intended uses, and the measures we take to ensure ethical and reliable functionality.

### AI Features

1. **Text Summaries:** When text responses are gathered via forms or surveys, the quantity of results can be challenging to sort through. Text summaries scan through the text responses and highlight trends and themes. 
2. **Analysis and Insight:** In various views across ChartHop, information is collected and displayed in paragraphs, snippets, charts, and graphs. Additionally, these elements often connect to larger stores of information not seen on the page itself. To help the user achieve the best analysis of the information and gain insight into patterns and trends, AI is used to synthesize and summarize a response. 
3. **Chat Based Responses:** An AI powered chatbot named Ask ChartHop is available in some ChartHop products to answer open ended questions from users. The AI powered service auto navigates to various pages, including dashboards, profiles, Resource pages, tables, and Data Sheets, to locate information that could help answer the query. When Ask ChartHop senses that it has found all the information related to a satisfactory answer, it rests on that page and generates an answer within the chat window. 
4. **Generative AI:** In some workflows, AI can be activated to create the proposal itself. For instance, using ChartHop AI to create a Headcount Plan Scenario based on prompts and parameters. 
5. **Natural Language Filtering:** In some views in the ChartHop platform, the user has the opportunity to create a filter to curate the results. In addition to the UI query builder and the query language CQL, ChartHop AI provides the user a way to  use a natural language format to set the type of filter they desire. The ChartHop platform will then convert the results into a CQL format to create the filter.&#x20;

### Data Handling

We prioritize the security and privacy of your organization's data.

1. All data used by AI is handled in accordance with our [privacy policy](https://www.charthop.com/privacy-policy).
2. We do not share or sell user data to third parties for AI training. 
3. ChartHop AI only has access to the data that the user’s role has access to.

### How ChartHop AI Works

ChartHop AI follows the process below to achieve results and protect user and organizational data.&#x20;

1. A dedicated AI LLM from [Anthropic](https://www.anthropic.com/) is used within the ChartHop platform.
2. The AI results and responses are optimized via curated prompts and ChartHop platform specifics, including the ChartHop Query Language, CQL. 
3. When a user initiates an AI response or analysis, the LLM is provided the same access to organizational data that is available to that user. All of the limitations of fields and information that is gated for that user, are also applied to the AI initiated on that user’s behalf. 
4. Every AI session instantiates a new instance of the AI model. No data is retained between sessions.
5. No AI session data from one user is leveraged by another session initiated by another user. 
6. The results provided to the user synthesized by ChartHop AI are never used for training a shared LLM across other ChartHop accounts.
7. The results provided to the user synthesized by ChartHop AI are never shared, sold, or shared externally to the LLM or any other third party.&#x20;

### Ethical Considerations

We are dedicated to ethical AI development and deployment. Anthropic shares these desires and the base model is trained as such, more information on Anthropic’s policies can be found at [trust.anthropic.com](https://trust.anthropic.com/).

1. We strive to mitigate bias in AI algorithms to ensure fair outcomes.
2. Regular audits are conducted to assess the performance and fairness of AI features.
3. Users can provide feedback on AI outputs to help improve accuracy and fairness.

### User Control

Users have control over AI-driven features.

1. Organization's can choose to enable AI functionalities in ChartHop.
2. Users can choose to engage with AI functionalities.
3. Transparency is provided regarding when and how AI is being used.

### Updates and Changes

This policy may be updated periodically to reflect changes in AI technology and practices. Users will be notified of significant updates.

### Contact

For any questions or concerns regarding our AI usage policy, please contact us at [support@charthop.com](mailto\:support@charthop.com).


[title] ChartHop Modules
[path] Resources/

ChartHop offers five highly configurable modules for org leaders, people teams, and managers to power people operations and strategic planning decisions.&#x20;

::::LinkArray{contentSource="CUSTOM"}
:::LinkArrayItem{headerType="COLOR" headerColor="#c8acff"}
[ChartHop HRIS](docId:2vYUu4PxHTYIcMs44k--m)&#x20;
:::

:::LinkArrayItem{headerType="COLOR" headerColor="#c8acff"}
[ChartHop Headcount Planning](docId\:PDrKFG3jXwnHGUrs3nMFj)&#x20;
:::

:::LinkArrayItem{headerType="COLOR" headerColor="#c8acff"}
[ChartHop Compensation Reviews](docId\:bJePwRpVUE8JY2LqmuMrk)
:::

:::LinkArrayItem{headerType="COLOR" headerColor="#c8acff"}
[ChartHop Performance](docId\:S6HsjXzV48Vyn0ga51ugq)&#x20;
:::

:::LinkArrayItem{headerType="COLOR" headerColor="#c8acff"}
[ChartHop Engagement](docId:5NqUkJwkE92Ds_mc9f-mO)&#x20;
:::

:::LinkArrayItem{headerType="COLOR" headerColor="#c8acff"}
[ChartHop Basic](docId\:LLf74n86sMAOLm4IXDVnq)&#x20;
:::
::::




[title] Release Notes Archive 2021
[path] Release Notes/


[title] .unique()
[path] Carrot reference/Methods/

This method returns unique elements from a list or sequence.

- Operates on: [List](docId\:ow-WLH3wkrNDTUVmo-RUe)&#x20;
- Returns: [List](docId\:xWH_cUkHj9waqaEfb7H71)&#x20;

### Syntax

`list.unique()`

- Returns a [List](docId\:xWH_cUkHj9waqaEfb7H71) of the elements in the list, filtered down to only its unique elements.

`list.unique{expression}`

- Returns a [List](docId\:xWH_cUkHj9waqaEfb7H71) of the elements in the list with the given expression applied to each element, and then filtered down to be unique. Functionally equivalent to: `list.map{expression}.unique()`

### Sample usage

- `underJobs.unique{department}` - Returns the unique set of departments that the current job manages


[title] .sum()
[path] Carrot reference/Methods/

Returns the sum of all values of a [Sequence](docId\:JG4itlQWafzLpArttFo67) or [List](docId\:xWH_cUkHj9waqaEfb7H71).

- Operates on: [Sequence](docId\:JG4itlQWafzLpArttFo67) or [List](docId\:xWH_cUkHj9waqaEfb7H71)
- Returns: [Number](docId\:ucI5tCTfVBhonEJ6ZQijg), [Money](docId:_kS5D2xbfoR9d8WfRIVnY), [Percent](docId\:FbN7bFaHlFPV4f1C53DxA)

### Syntax

`.sum()`

- Returns the sum of the numeric elements of the List or Sequence

`.sum{expression}`

- Returns the sum of `expression`, evaluated against each of the elements of the List or Sequence.

### Examples

`db.job.find{dept:engineering}.sum{baseComp}` returns the total base compensation of everyone in the Engineering department.

`[1, 2, 3].sum()` returns `6`

`[1, 2, 3].sum{it * 2}` returns `12`

[title] Examples
[path] Carrot reference/

Carrot can do a lot! So examples are helpful.

This is a growing guidebook of examples of CQL in action for real usecases that we've encountered.


[title] June 2022 release notes
[path] Release Notes/Release notes 2022/

## 06.20.22

***

**🎁 &#x20;**<font color="#2166ae">**Added**</font>**&#x20;&#x20;**

- Added user notification for how future start dates are handled when importing employee data
- Added Help icon for ChartHop Basic&#x20;
- Usability enhancements for payroll apps

****<font color="#eb144c">**⚒  Fixed**</font>&#x20;

- Error when attempting to share report
- Org Chart: Edit window appears behind the employee card
- Remove gap between user list and data sharing buttons
- Base fields - Updates in the billions not allowed&#x20;
- "Next Step" grayed out even though it's clickable in ChartHop Basic spreadsheet importer
- Report chart and edit views are inconsistent for users with custom-filter limited access
- Reports - is\:person filter not limiting results
- Departures not showing involuntary/voluntary/reason for sensitive view.
- Manager is not able to edit compensation through edit job.
- Performance review bundle- Form, Reports, tabs not appearing after installing
- Embeddable Org chart not working as expected.
- Trying to fill a job with a new hire brings up a 404
- Pie Charts getting cut off
- Total comp calculation displaying incorrectly when the combined totals of base and variable are above 2,147,483,647 
- Dashboard - Slowness loading anniversaries and birthdays
- Reports - is\:person filter not limiting results

## 06.06.22

***

**🎁 &#x20;**<font color="#2166ae">**Added**</font>**&#x20;&#x20;**

- New compensation bands feature&#x20;

****<font color="#eb144c">**⚒  Fixed**</font>&#x20;

- Selecting large quantities of employees in datasheet (around 500+) is giving an error
- Remove column from Org chart node indicator tool tips
- Compensation Tab - Unable to clear/remove compensation data for backfill jobs
- Maps: International employees inconsistently appearing
- Map is not showing employees when adding or updating work location
- Message saying 0 imported employees for ChartHop Basic
- User list showing terminated employees
- Some spreadsheet data was importing incorrectly (ChartHop Basic)
- Data import screen appears blank (ChartHop Basic)
- Edit job module - yes/no fields will not save
- Ensure that downloaded filenames match displayed filenames
- Unable to add manager using dropdown in Data Sheet
- Change import spreadsheet text to note that startDate is required for the initial import
- Data sheet - cannot create new view
- Fix avatar on overlapping menu (profile)
- Org Chart - Export of org chart is being cut off
- 'Add Rule' getting cut off when adding multiple filters depending on zoom/window size


[title] Release Notes Archive 2024
[path] Release Notes/

## 2024.12.19

**🎁&#x20;**<font color="#2166ae">**Added**</font>

- Allow viewers to **Download Form Responses** as a **PDF**
  - When enabled, anyone who can view the form responses such as the **Person**, **Manager**, or **Admins** will see a **Download** button and will be able to create a **PDF** of that individual form response.&#x20;
- Request **Half Days** in **Time Off**
  - When requesting Time Off, a new checkbox option to make the day a Half Day now appears.&#x20;
- **Emojis** are now an option to use in **Calendar Titles**
  - Now calendars can be customized with a color and an emoji as part of the title.

**⚒ &#x20;**<font color="#ff0000">**Fixed**</font>

- **Terminate & Backfill&#x20;**&#x77;orkflow now creates **Backfill** immediately&#x20;
  - When a user submits a **Scenario** via **Terminate & Backfill**, the requested **Backfill** will default to the **Create Date** of **Today**, and be created immediately no matter the **End Date** of the termed employee.&#x20;

## 2024.12.16

**🎁&#x20;**<font color="#2166ae">**Added**</font>

- **Scenarios** list table now shows the next **Approver** in the chain for each **Scenario**
  - When looking at the **Planning** list table of **Scenarios**, a new column is there to show who the next **Approver** is in the chain.&#x20;

## 2024.12.12

**🎁&#x20;**<font color="#2166ae">**Added**</font>

- **Approvals&#x20;**&#x63;an now include all **Managers in the Chain**
  - When setting up an approval stage, the Stage Approvers option includes a new selection **This stage represents** which defaults to a single stage. The other new option is the one **Multiple stages, one per manager in the manager chain.** Selecting this will automatically create one stage per manager relative to the requester's hierarchy in the organization.&#x20;
- **Approvers&#x20;**&#x63;an *edit* **Scenarios&#x20;**&#x64;uring their approval phase
  - When a **Scenario** is submitted for **Approval**, the **Approver(s)** whose turn it is to review and approve/reject the scenario can now edit the scenario. Once they approve/reject the scenario is then locked again and can no longer edit.&#x20;

## 2024.12.06

**🎁&#x20;**<font color="#2166ae">**Added**</font>

- **Heatmap Color Scales** now available in **Dashboard Tables**
  - When configuring a (Non-Timeseries) Table in Dashboards, you have new configuration options to show a color on the scale. You can also customize the colors as well as the min and max values to highlight.

## 2024.12.04

## 🎉 <font color="#2166ae">New!</font>

- Introducing a new primary view in ChartHop, the [Calendar](docId\:a9VUAZHm4xlW3TiaQ4mmy) .&#x20;
  - Includes events such as **Birthdays**, **Work Anniversaries**
  - Set up **Holiday Calendars&#x20;**&#x66;or different Countries/Regions
  - Specific Modules will bring in new types of events for Calendar including:
    - Comp **Review Cycles** with the **Comp Review Module**
    - **Performance Review Cycles** with the **Performance Module**
    - **Custom Calendars** and **Time Off&#x20;**&#x77;ith **HRIS**

## 2024.10.28

## 🎁 <font color="#2166ae">**Added**</font>

- **Forms&#x20;**&#x63;an now be **Approved&#x20;**&#x6F;&#x72;**&#x20;Released** in bulk with:
  - **Approve All Form Responses** will move all responses from
    Awaiting Approval --> Approved/Awaiting Release
  - **Release All Form Responses&#x20;**&#x77;ill move all responses from
    Awaiting Release --> Released
- In **Admin > Org Changes History** new capabilities including:&#x20;
  - **Org Changes History** table
    - Select a **Date Range**&#x20;
    - **Edit** and **Delete** moved to icons on the right side of the row
    - Updated visual design & **Field** picker
  - **Export**:
    - Aligned export format to recently updated **Data Sheet&#x20;**&#x61;nd cross-platform CSV export formatting
    - Added and clarified the change detail columns that will appear in the export

## 2024.10.22

## 🎁 <font color="#2166ae">**Added**</font>

- In **Data Sheet**, **Jobs** and **People** tabs now work with **Date Range** filters including day, range presets, and custom ranges

## 2024.09.13

## ⚒  <font color="#ff0000">**Fixed**</font>

- **Saved Filters** that are *relative* in nature, now show data relative to the viewer when **Data Sharing: Full** is applied
  - For example,&#x20;
    - When sharing a Dashboard using Data Sharing: Full ...
    - with a Chart featuring headcount by Ethnicity (by default Ethnicity is normally visible)...
    - And the saved filter is "under\:me"...
    - The viewer will see the Ethncity data in the chart as it relates to their employees that report to them.&#x20;

## 2024.08.08

## 🔐 <font color="#2166ae">**S**</font><font color="#2166ae">ecurity Update</font>

- For users with access to **Multiple ChartHop Accounts**, each account will require independent authentication when switching accounts
  - This includes users with access to a **Sandbox Test Account** for their organization
  - Once authenticated, **Tokens** will last for multiple sessions as set on that account for fast switching convenience

## 2024.07.22

## 🎁 <font color="#2166ae">**Added**</font>

- In **Performance Reviews** and **Engagement Surveys**, the **Participation Tracking Graph** has been updated.&#x20;
  - A single graph displaying the statuses and lists of all participants instead of previous two separate graphs
  - It will display a single percentage that represent the % of people that have reached the “Completed” state.&#x20;
    - The “Completed” state will vary depending on the form setup.
    - These include **Skipped**, **Done** (If it was just submitted), **Approved** (If that is the final state), or **Released**.
  - New statuses reflect the next step in a Form Workflow:
    - **Awaiting Approval** - The form has been submitted, but not approved.
    - **Awaiting Release** - The next step in the workflow is a release. After a submission or approval.
- New built-in **Smart Bucket**:**&#x20;Manager&#x20;**&#x6F;&#x72;**&#x20;IC**
  - This is particularly helpful for **Engagement Survey** reporting.
  - It splits the jobs in an org into **Managers** and **IC** using:
    - <font color="#9900ef">is:manager</font>
    - <font color="#9900ef">is:ic</font>

## 2024.07.18

## 🎁 <font color="#2166ae">**Added**</font>

- Updated **Apps&#x20;**&#x6D;anagement experience so that every active App that is syncing now has its own dedicated **Sync History** tab

## 2024.07.09

## 🎁 <font color="#2166ae">**Added**</font>

- Updated **filter** experience in **Sync History&#x20;**&#x77;ith two updates
  - **Filters** in **Sync History** are maintained after you navigate to details and return to the list
  - You can now send a **link** with any filters in the syncs
- Updated **ATS** syncs with **Greenhouse**, **Lever**, or **Jobvite** so that you can specify the **Announce Date** for **New Hires**

## 2024.06.05

## 🎁 <font color="#2166ae">**Added**</font>

- Updated **Reviews and Surveys** with **Sheet and Individual Views** for **Form Responses**. Three new ways to view **Form Responses:**
  - **Summary:** Automatically generate a summary with every form based on submissions. Look at the form responses in the same order as the questions, with preconfigured response types to match the type of question. For instance, **Single Select&#x20;**&#x74;ype of questions result in a chart showing popularity of answers, wherea&#x73;**&#x20;Short Text&#x20;**&#x74;ype of questions result in a table of responses with optional AI summary.&#x20;
  - **Sheet:&#x20;**&#x56;iew the responses in a Data Sheet like view to scan across all the answers more quickly for a great compatitive view
  - **Individual:** Dive into an individual form response to look at their answers as a complete submission.&#x20;

## 🎁 <font color="#2166ae">**Added**</font>

- Updated **Data Sharing Access** types for **Scenarios** including three new types
  - **Standard Data Access:** The user will only see changes within that scenario that they would be able to see within the current **Organization** (non-Scenario), given their access role.
  - **Limited Data Access:&#x20;**&#x54;he user will only see changes for jobs or people below them in the org chart. They cannot view or edit **Scenario** changes above them or outside their reporting line, regardless of their regular ChartHop access role. Limited editors cannot view the total cost summary.
  - **Full Data Access:** Overrides the individual's current user permissions, allowing them full access to all the changes to data in the scenario, which could potentially include sensitive information (such as compensation) depending on their **ChartHop Access Role**. It is recommended to only assign those **Permissions** to individuals who regularly have access to **Highly Sensitive** information.

## 2024.05.24

## ⚒  <font color="#ff0000">**Fixed**</font>

- **Org Chart Exports** have been updated with four improvements
  - No longer showing Departments or Groups with zero headcount in Summary Table
  - Removed redundant color legend slide (previously followed the summary table)
  - Magnification/zoom level is now more consistent across slides
  - Removed tendency to show CEO on slides when leader of the Department/Group wasn't the CEO

## 2024.05.17

## 🎁 <font color="#2166ae">**Added**</font>

- Expanded **Form** options include **Mobile** compatible **Standalone** format and ability to configure **Form** display name

## 2024.05.16

## 🎁 <font color="#2166ae">**Added**</font>

- New **Core Views** page in **Admin&#x20;**&#x74;o configure default views for **Org Chart**, **Data Sheet**, and **Map**

## 2024.05.13

## 🎁 <font color="#2166ae">**Added**</font>

- Can now schedule **Actions** to run on specific **Months** (for example, every 3 Jan, April, July, and October)

## 2024.05.03

## 🎁 <font color="#2166ae">**Added**</font>

- Improved **Send Form** workflow within **Engagement Surveys** and **Performance Reviews** including ability to select to send forms via **Email** or **Slack**

## 2024.04.22

## 🎁 <font color="#2166ae">**Added**</font>

- In **Org Chart**, improved default organization of **Fields** in **Visualize** dropdown to highlight most popular options at the top
  - Customize which **Fields** are highlighted and visible in **Visualize** dropdown

## 2024.04.17

## 🎁 <font color="#2166ae">**Added**</font>

- Visualize multiple **Fields** in **Org Chart** (up to 3)&#x20;

## 2024.04.11

## 🎁 <font color="#2166ae">**Added**</font>

- New configuration options for **Home Page (**&#x69;&#x6E;**&#x20;Admin)** with options to select or remove elements like Calendar, People Moves, etc&#x20;

## 2024.04.05

## 🎁 <font color="#2166ae">**Added**</font>

- Default **Notification** format now with **All Org** option
- Option to send forms to **Email** or **Slack** when sending via an **Action**
  -

## 2024.04.03

## 🎁 <font color="#2166ae">**Added**</font>

- Automatically generated **Form Response Summaries&#x20;**&#x6E;ow with support for all question types

## 2024.04.02

## 🎁 <font color="#2166ae">**Added**</font>

- **Roles & Permissions page** now with improved design&#x20;

## 2024.03.25

## 🎁 <font color="#2166ae">**Added**</font>

- 3 ne&#x77;**&#x20;Single Change Workflows*****,&#x20;**&#x61;k&#x61;**&#x20;Simple Workflows*****,&#x20;**&#x61;dded t&#x6F;**&#x20;Scenarios** for **Headcount Planning&#x20;**&#x61;n&#x64;**&#x20;HRIS&#x20;**&#x6D;odule&#x73;**:**
  - **Create Job**: add a new job to your organization
  - **Update Job:** edit details on any existing job in your organization
  - **Terminate and Backfill**: submit termination details and optionally request a backfill

## 2024.03.17

## 🎁 <font color="#2166ae">**Added**</font>

- **HRIS Module** is now available for purchase. HRIS is the 5th ChartHop module that works seamlessly with Headcount Planning, Compensation Reviews, Performance Reviews, and Engagement. The HRIS module includes:&#x20;
  - Configure onboarding and onboarding workflows with custom forms, tasks, and messages
    - New **Onboarding** and **Offboarding** views under **People Ops Tools**
    - Track onboarding and offboarding progress from **Employee Profiles**
  - Create and share employee **Resource** pages for the whole company to access
    - Option to limit to specific Employees, **Departments,** and **Groups&#x20;**&#x77;it&#x68;**&#x20;Private&#x20;**&#x6F;ption
  - Manage **Time Off** with configurable request workflows and display who’s out on the dynamic **Calendar** view
    - **Review, Approve,** and **Reject** Time Off requests directly in **Slack**
  - Sync payroll information from ChartHop to your payroll system with a two-way sync option for **ADP Workforce Now**


## 2024.03.08

## 🎁 <font color="#2166ae">**Added**</font>

- Expanded options for recipients of **Actions** including **Onboarding Buddies**, **Peer Reviewers**, **Recruiters**, specific **People**, and any other custom option

## 2024.02.21

## 🎁 <font color="#2166ae">**Added**</font>

- **Tasks Page** is now available on the **Profile** as a **Profile Tab**. This provides more visibility into current and past tasks including state like pending, completed, or skipped.&#x20;

## 2024.02.16

## 🎁 <font color="#2166ae">**Added**</font>

- **Fields&#x20;**&#x74;able in the **Data Model&#x20;**>**&#x20;Fields** view has been upgraded with many new features. It is more performant and with a refined UX including resizable columns, sort options, field types visible, and much more. &#x20;

## 2024.02.07

## 🎁 <font color="#2166ae">**Added**</font>

- **Build-In Fields** are now configurable to tailor them to your organization including changing **name**, **category**, **description**, and **sensitivity type**.&#x20;

## 2024.02.01

## 🎁 <font color="#2166ae">**Added**</font>

- **Field Types** are now enhanced with icons to improve findability and user experience. These icons appear in **create/edit field&#x20;**&#x77;orkflows and when adding **questions to forms**.&#x20;
- Ability to **tag** or reference another person with an **@** symbol through the ChartHop platform. Just start typing @ in a text editor and option to select a person will appear. That tag then creates a link to that person's profile.&#x20;
- **Form Response Summaries** are now available in **Forms**, **Reviews**, and **Surveys**. ChartHop will now automatically create a summary for a form, ordering responses in the same sequence as the form was designed, and generating charts to look at aggregate data for most types.&#x20;

## 2024.01.25

## 🎁 <font color="#2166ae">**Added**</font>

- **Automated Actions** now include ability to set custom subject lines for emails

## 2024.01.22

## 🎁 <font color="#2166ae">**Added**</font>

- New **Navigation** and organization for the ChartHop app including:&#x20;
  - Updated and redesigned left sidebar menu with improved organization of ChartHop capabilities and options
  - Updated top utility bar with company logo, breadcrumb navigation, global search, and buttons to access Help, Notification Center, Hide Sensitive Information filter, and User  Settings.&#x20;
  - New quick Help options include Ask AI option, quick links contextual to page user is on, and quick links to Help Center and Carrot (CQL) Reference.&#x20;
  - Detailed information about the new navigation found [here](https://docs.charthop.com/navigating-charthop).

[title] Guidelines & Thresholds
[path] ChartHop by ChartHop/Compensation Planning/

## Overview

Guidelines & Thresholds are an **optional** feature used in roughly 30% of comp cycles. They allow you to configure rules that automatically pre-populate employees' raises when the cycle launches — most commonly based on performance rating.

## How Guidelines Work

A guideline defines a rule: *when we launch the cycle, pre-populate this field with this value for these employees.* You can create multiple guidelines in a single cycle (e.g., one for merit increases, one for promotions).

Each guideline has a label (e.g., "Merit Increase") for your own reference — this label does not appear inside the live cycle.

## Configuration Options

### Who Does the Guideline Apply To?

Default is all eligible employees, but you can scope it. For example, a merit increase guideline might exclude employees who are being promoted, since their raise will be handled separately.

### What Field Gets Pre-Populated?

Choose the field in the cycle that the guideline should write a value into (e.g., Base Annualized raise %).

### Target Value vs. Target Value and Range

Almost always use **Target Value** only. The target is what gets pre-populated. The range option is rarely used.

### Does the Calculation Depend on Field Values?

**No — same for everyone:**
Pre-populate every eligible employee with the same value. Example: pre-populate everyone at 3%.

**Yes — varies by field value:**
The most common setup. Pre-populate based on performance rating (or another field). Example:

| Rating      | Pre-Populated Raise |
| ----------- | ------------------- |
| Outstanding | 5%                  |
| Effective   | 3%                  |
| Under       | 1%                  |

### Pre-Populate Checkbox

You must check the **Pre-Populate** checkbox for the guideline to actually write values into the cycle at launch. If unchecked, the guideline is configured but won't do anything.

## Flags (Thresholds)

You can optionally set a flag value on a guideline. The flag defines an acceptable range around the pre-populated value.

**Example:** Pre-populated raise is 3%, flag is set to 2. Managers can enter any value, but if they go below 1% or above 5% (3% ± 2), the cell will be highlighted to signal the entry is outside the recommended range.

Flags **do not block** the entry — they only surface a visual indicator. Managers can still save whatever value they choose.

## Multiple Guidelines

A cycle can have more than one guideline. A common pattern is:

- One guideline for merit employees
- A separate guideline for promoted employees

Each guideline can have its own scope, field, and calculation logic.

## ⚠️ Important: Guidelines Only Run Once at Launch

When you click Launch, the guideline runs immediately — pre-populating values based on the data as it exists at that exact moment. After launch, the guideline effectively no longer exists. The cycle will not re-run it or automatically update any values.

**What this means in practice:**

- If an employee doesn't have a performance rating at the time of launch, they won't get pre-populated. Adding the rating after launch will not trigger a pre-population — that value will need to be entered manually.
- If a rating changes after launch (e.g., Outstanding is revised down to Effective), the pre-populated raise will **not** automatically update from 5% to 3%. The guideline already ran.
- Managers may have already edited values by the time any data changes happen, so auto-updating would create conflicts.

Always confirm that the data the guideline depends on (e.g., performance ratings) is finalized before clicking Launch.

[title] Syncing data to/from ChartHop
[path] ChartHop for Developers/

One of the most common use-cases of the ChartHop API is to pull and push data, such as the current organizational roster or perhaps you have your own payroll system and want to write your own payroll sync to automatically update the ChartHop roster from the payroll system.

## Syncing From ChartHop

### Querying the organization

The best API call to make open-ended queries to the organizational roster is the [findJobs](https://api.charthop.com/swagger#/job/findJobs) call. This API call lets you retrieve both open jobs as well as people, and lets you retrieve whichever fields you choose (using the `fields` parameter) or apply filters (using the `q` parameter).

For example, if you wanted to retrieve the entire roster's first name, last name, title, work email, and work country:

`https://api.charthop.com/v2/org/{orgId}/job?fields=name.first,name.last,title,contact.workEmail,workAddress.country`

You can filter with the `q` parameter, using Carrot filtering. For example, if you only wanted people who have been at the company at least 12 months (`tenure >= 12`), you could query:

`https://api.charthop.com/v2/org/{orgId}/job?fields=name.first,name.last,contact.workEmail&q=tenure>=12`

- If you want to filter only for people, not open positions, you can use q=open\:filled
- For a list of fields that you can query, see Built In Fields. You can also query for any custom fields.
- For more about Carrot filtering, review Filtering.
- To try out filtering in the application, use the Data Sheet and type the filters in the search bar.

### Live-syncing via webhook

Often, it is sufficient to query on a regular interval. However, you may want to automatically update your system as soon as something happens on ChartHop.

If so, your app can use a Webhook to subscribe to event notifications. You will want to set up an endpoint URL to receive the webhook, and subscribe to change.\* events.

When you receive a notification that a change has occurred, the change payload should contain a jobId. You can query for that job using the queryJobs endpoint. (You can filter for a single person or job via `q=jobId:jobId`)

### Permissions

Like everything else on ChartHop, the data that you fetch via API will be filtered according to the app's specific permissions. If you don't receive data that you're expecting, be sure to check the app's permission.

***

## Syncing to ChartHop

### Importing data

The best API call to use to update data in bulk in ChartHop is the [importDataCsv](https://api.charthop.com/swagger#/import/importDataCsv) API call `https://api.charthop.com/v1/org/{orgId}/import/csv/data`

This call lets you post a multipart/form-upload of the CSV file to push a large amount of data into ChartHop.

This call has lots of optional parameters. For most purposes we'd recommend using:

- `upsert` - set this to true if you expect to add new people or jobs that aren't in ChartHop already. Don't use it if you're just updating existing people in the roster.
- `createGroups` - set this to true if you want to create departments and locations on the fly if they are in the source system. If you are not creating departments and locations, no need to use it.
- `notifyUserIds` - set this to a list of user-ids (you can retrieve these ids via the [findUsers](https://api.charthop.com/swagger#/user/findUsers) API call) to send an email following the completion of the API call.
- `notifyAppName` - set this to the name of the app that you want to show up in the notify email

### Checking on the status of the import

The `importDataCsv` call runs asynchronously. Depending on the size of the import, it can take anywhere from a few seconds to an hour. It returns a `Process` object. You can check on the status of the process by calling the [getProcess](https://api.charthop.com/swagger#/process/getProcess) call.

### Interacting with the ChartHop Apps UI

If your sync is for your own private use, then run the above API call whenever you please, on your own schedule. It's your world!

But, if you are building a sync that is intended for distribution for other ChartHop users, those users will expect the sync to run when they press the "Sync Now" button from the app configuration page in ChartHop.

When the user presses "Sync Now", this starts an asynchronous "sync process" for your app that you, the app developer, are expected to manage the state of. We'll ping your webhook URL to tell you that the user has hit sync, and you ping us back when you're done syncing.

To implement this, you will want to use the following flow:

- Set up an Event Notification Webhook on your own URL, matching on the `process.create.{appname}` event.
- When your Webhook URL receives this event, the entityId will contain the sync process id.
- Run your sync, implementing calls to `importDataCsv` or whatever else you need to complete the sync.
- When your sync is complete (or errors out), call the [updateProcess](https://api.charthop.com/swagger#/process/updateProcess) API call to mark the sync process as complete.
  - For bonus points and a nicer user experience, call `updateProcess` periodically during your sync, passing a `progress` value from 0 to 1 and a `message` with the last status message. This will control the state of the progress bar the user will see as your sync runs.

### Permissions

Your app will need Primary Editor permissions to sync data into ChartHop.


[title] December 2022 release notes
[path] Release Notes/Release notes 2022/

## 12.19.22

***

## 🎁 <font color="#2166ae">**Added**</font>﻿

### New features

- Added new costBetweenPrimary functions that calculate the cost of jobs over a specific time period, including future roles with announced start dates:
  - baseCostBetweenPrimary
  - variableCostBetweenPrimary
  - cashCostBetweenPrimary
- Added the ability for users to specify the calculation type for data values in the top row of tables shown in reports. The following options are now supported: sum, avg., min, max.

## ⚒  <font color="#eb144c">**Fixed**</font>

- Fixed an issue where the total organization member count in the **Map&#x20;**&#x64;id not match the total organization member count in the **Data Sheet**.
- Fixed an issue where the Greenhouse integration did not match on existing jobs when the **Match by Job Codes** option was toggled on and the **Group by Job Openings** option was set to *none*.
- Fixed an issue where Greenhouse “Recruiting Status” emails incorrectly triggered when changing the announce date.
- Fixed an issue where the Source field was incorrect when using a custom rate in the **Currencies and Costs** section of **Org settings**.
- Fixed an issue where custom short text fields would clear when saved.
- Fixed an issue where Y-axis tick marks were not properly aligned in scenario charts.

## 12.05.22

***

## 🎁 <font color="#2166ae">**Added**</font>

### New features

- Added the ability for compensation review owners to select their launched compensation reviews from the **Scenario** dropdown in ChartHop reports. This enables owners to visualize updated compensation reviews data in reports.
- When a chart in a report is cloned, the settings and filters for that chart are maintained in the duplicated chart.&#x20;
- Updated the way that **Org Chart** nodes display in PowerPoint exports so that members of unselected departments or teams display as faded.&#x20;

### Integrations

- Updated the Sync History page with improved and more actionable outbound error messages to make it easier to identify issues.&#x20;
- Updated error handling for outbound ATS syncs to better accommodate bulk actions/changes in ChartHop.&#x20;

## ⚒  <font color="#eb144c">**Fixed**</font>

- Fixed an issue where the second line in an address prevented the location for an employee from displaying in the correct location.&#x20;
- Fixed an issue where deleting an open job in a ChartHop scenario incorrectly sent an outbound delete request to the ATS.&#x20;
- Fixed an issue where the top row of a data table only showed the sum of the data in the columns, even when another calculation (for example, mean) was selected.&#x20;
- Fixed an issue where a PowerPoint export of the **Org Chart** displayed certain nodes incompletely in the PowerPoint slides.&#x20;
- Fixed an issue where selecting the **Export** button from the Impact tab of a scenario did not export the reports.&#x20;
- Fixed an issue in the embeddable **Org Chart** where users could only search by department.
- Fixed an issue where a reporting line did not display correctly in the **Org Chart**.
- Fixed an issue where a repair warning displayed in PowerPoint for reports that were exported.&#x20;
- Fixed an issue where editing an employee’s salary caused the currency to default to USD, even when the previous salary value was not defined in USD.&#x20;


[title] ChartHop Performance
[path] Resources/ChartHop Modules/

**ChartHop Performance&#x20;**&#x69;ncludes the performance module and offers various performance cycle features including configurable forms for performance cycles and continuous performance management,  live reporting dashboards for cycles indicating completion rates, the ability to collect and access historical performance data alongside key employee history, and allows visibility into historic performance data available to employee, manager, and leadership based on permissions. 

ChartHop’s Performance Module empowers you to do the following:

- Everything in [ChartHop Basic](https://docs.charthop.com/charthop-basic)
- Choose from a larger selection of payroll integrations
- Manage access according to organizational roles, including custom roles
- Configure mapped and custom fields
- Store documents
- Create custom dashboards
- Configure, Manage, and Run Performance Reviews
- Receive assistance from ChartHop to create custom document templates (up to six)




[title] Beta Features
[path] /


[title] Lattice Integration
[path] Labs/

:::hint{type="warning"}
This feature is currently in Alpha. Be one of the first customers to try it! Please share any feedback with the ChartHop team.&#x20;

### How to setup a Alpha Feature

1. Contact [ChartHop support](mailto\:support@charthop.com) or your CSM if you have one. They can activate the feature for you.&#x20;
2. Read below for setup instructions and context on how the feature will work.
:::

The Lattice integration is a one way sync that allows the syncing of forms and reviews from Lattice into ChartHop.&#x20;

## What information is synced from Lattice

The Lattice app will import and sync the following pieces of information:

1. Lattice Updates → ChartHop Forms
2. Lattice Feedback → ChartHop Forms
3. Lattice Review Cycles → ChartHop Forms & Performance Reviews

Imports will align to the following details:

- Rating scale questions in Lattice are imported as numeric scale fields with Manager Only access in ChartHop
- All other questions are mapped as questions in the form, not fields.
- Access levels will align to the similar strucutre in Lattice. See full mapping below.
- All forms are imported as “Archived”
- You can identify forms and fields and reviews created by the app because they will list "Lattice" as the "Created by".
- Changing the name of the form or review in ChartHop will break a continuous sync.

:::hint{type="info"}
If you would like any additional or different information synced from Lattice, please let the ChartHop team know.&#x20;
:::



## How to setup the Lattice App

1. Go to **Apps & Bundles > Apps**
2. Navigate to the **Other Availible Apps** and search for **Lattice**
3. Install the **App** and add in your **API key from Lattice&#x20;**
   1. To generate an [API key in Lattice:](https://help.lattice.com/hc/en-us/articles/360059449534-Lattice-s-Public-API#:~\:text=request%20additional%20approval.-,Create%20an%20API%20key,-Navigate%20to%20Admin)
      1. Navigate to Admin > Platform > API keys.
      2. Click **Generate API key.**
      3. After the key is generated, click **Copy.**



## Lattice Updates & Feedback

Updates and feedback will be imported with the following access levels that align with the access in Lattice.&#x20;

| Forms	                             | Access level in ChartHop |
| ---------------------------------- | ------------------------ |
| Lattice Private Updates            | Manager shared           |
| Lattice Public Updates             | Org Public               |
| Lattice Public Feedback            | Org Public               |
| Lattice Manager Only Feedback      | Manager only             |
| Lattice Private + Manager Feedback | Manager shared           |
| Lattice Private Feedback           | Personal                 |



## Review Cycles

[Performance reviews](docId\:pgai8TVrVYWmDcEAnerwg) will be created for every review cycle in Lattice. Separate ChartHop [Forms](docId\:QR76GaDOskC1RlC_S0jes) will be created for each direction or type of review.&#x20;

For example — A 360 review named `2023 Q1 Review Cycle` will contain forms for each direction of feedback:&#x20;

- 2023 Q1 Review Cycle - Self
- 2023 Q1 Review Cycle - Downward
- 2023 Q1 Review Cycle - Upward
- 2023 Q1 Review Cycle - Peer



If you have mutliple cycles in Lattice with similar names that you would like to combine in ChartHop list the name you would like to combine in the  **Condense Cycle Names** setting. For example, you would write `2024 Q3 Review Cycle` if you had 2 review in Lattice named: `2024 Q3 Review Cycle: Retail` & `2024 Q3 Review Cycle: Office` that you wanted to combine into one review called `2024 Q3 Review Cycle.`

### Import ratings as fields

All Rating Scale questions in Lattice will be imported as Numeric Scale questions in ChartHop. All fields will be imported with a sensitivity of `Manager Only` at this time.  The fields will be named:&#x20;

- **Label:&#x20;**&#x54;he question such as: "How did this employee perform to their 90 day objectives?"
- **Code:&#x20;**`lattice` + `TheQuestionsFirstCharacters`  ex.`latticeHowDidThisEmployeePerfo`

All other field types are not able to be imported as fields at this time.&#x20;



:::hint{type="warning"}
Changing the code of the field will throw off the sync and cause an additional field to be created.&#x20;
:::



## How imported form responses will appear to employees

Imported form responses are not immediately visible to employees, but can be surfaced on [Custom profile tabs](docId\:Kiuev47LOf6QTLVjlujlr).&#x20;

Imported form responses will display **"Imported from Lattice"** on the form response. &#x20;

::Image[]{src="https://app.archbee.com/api/optimize/zxjhb7-DqnuzAP-lru1l3-piEQMunK11f8QYK9U_lY3-20250521-134713.png" size="94" width="1886" height="168" position="center" showCaption="false"}


[title] October 2021 release notes
[path] Release Notes/Untitled/

## 10.29.21

***

**🎁 &#x20;**<font color="#2166ae">**Added**</font>**&#x20;&#x20;**

- Launched **improved Justworks app** using Justworks ID
- Added **support for custom field mapping** in Justworks app
- Added **support for filtering out people** by Justworks ID in new Justworks app
- Added functionality to **retain req / job codes from all ATS platforms**, even when an open job is filled
- Added functionality to **match Greenhouse jobs by a common string** within the job title, instead of the entire job title - reach out to your CSM if interested
- Added functionality to **support multiple Greenhouse job templates&#x20;**&#x62;ased on Carrot logic - reach out to your CSM if interested



****<font color="#eb144c">**⚒  Fixed**</font>&#x20;

- Fixed bug preventing users from **changing the&#x20;**`currency`**&#x20;type** by clicking into the Currency column in a Scenario
- Restored functionality that **closes openings in Lever when they are closed in ChartHop** and subsequently synced



📗  <font color="#2c9300">**Documentation**</font>&#x20;

- Released new [Apps documentation](https://docs.charthop.com/apps) providing **reference content** on the functionality of many Payroll, ATS, Equity, and other apps
- Introduced the **Product updates section** - check back bi-weekly to see what's new!



## 10.22.21

***

**🎁 &#x20;**<font color="#2166ae">**Added**</font>**&#x20;&#x20;**

- Modernized the **form builder used in Reviews**
- Modernized the **Scenarios avatar popover**



****<font color="#eb144c">**⚒  Fixed**</font>&#x20;

- Fixed bug preventing `Planned Grant` and `Title` columns from being **removed in Scenarios**
- Restored functionality of some **Org Chart export filters**
- Fixed bug preventing the value of `Date` being set to `Start Date` if `Start Date` is after the value of `Date` in a given scenario.
- Fixed `Cost` column not displaying data in Compensation Reviews.
- Fixed bug causing the Sapling integration to sync the value of `Hourly` as `Base`
- Restored functionality of `Change` column in Scenarios.
- Restored ability of users with `Owner` access to view sensitive entries in Custom Profile Tabs
- Fixed bug causing Paylocity fields to render `unknown error` when syncing
- Stopped Sequoia XHOP sync from failing when given an invalid phone number
- Corrected error message for inability to modify job creation date
- Fixed functionality of the back button from Data Sheets to Reports



## 10.15.21

***

**🎁 &#x20;**<font color="#2166ae">**Added**</font>**&#x20;&#x20;**

- Enabled pulling Lever custom fields into ChartHop, and changing the default field mapping
- Increased allowed maximum range of `Start Date`  from the previous default



****<font color="#eb144c">**⚒  Fixed**</font>&#x20;

- Fixed bug preventing date picker in filter bar from indicating invalid date inputs
- Fixed bug causing Performance Reviews PDF export to leave out certain people
- Removed `ethnicity` field from Zenefits app description because the integration does not sync it
- Fixed login HTML parsing errors in the Justworks app
- Swapped out the old Data Sheet link in the new Scenarios copy
- Matched exported and in-app time series visualizations in Scenarios
- Fixed formatting of Legend slide in PPT Org export
- Fixed Ultipro `employment-details` endpoint not adding termination dates correctly
- Ensured that template matcher failure won't cause failure in creation of job



## 10.08.21

***

**🎁 &#x20;**<font color="#2166ae">**Added**</font>**&#x20;&#x20;**

- Added navigation to global search
- Added correct handling of jobs without managers on Org Chart export
- Added several Admin Console improvements



****<font color="#eb144c">**⚒  Fixed**</font>&#x20;

- Fixed bug causing the privacy toggle to hide data with Org Public sensitivity
- Fixed bug causing Scenario Changes tab not to update UI when archiving a change
- Fixed bug causing Custom Profile Tabs not to display long-text fields
- Fixed bug in Custom Forms caused by undefined Percent Min
- Fixed bug in Custom Forms causing incorrect field count in admin form search




[title] October 2022 release notes
[path] Release Notes/Release notes 2022/

## 10.24.22

***

## 🎁 <font color="#2166ae">**Added**</font>

### New features

- Added an updated version of [App sync history](https://docs.charthop.com/sync-history), which allows you to view the data sync history of all payroll, equity, and ATS apps installed in your ChartHop organization.
- Added support for decimal rounding for Base values in ChartHop.
- Added the new `asOfPrimary` function to return data as of a specific date only from an organization’s primary branch.
- Updated window size so that **Org Chart** exports are clearer and more legible.

### Integrations

- Added the option to export all Greenhouse jobs, including those that are closed, to a .csv file.
- Added the ability to send `Delete` outbound ATS requests to both Greenhouse and Lever from ChartHop.&#x20;
- Added a new spinning indicator that displays when process events are loading for inbound hire webhooks and outbound event-based syncs.&#x20;

## ⚒  <font color="#eb144c">**Fixed**</font>

- Fixed an issue where users could not update the target variable currency in compensation reviews.&#x20;
- Fixed an issue where compensation bands did not display alphabetically in the **Compensation bands** column dropdown in the **Data Sheet**.
- Fixed an issue where compensation bands were not sorting properly in the **Data Sheet**.&#x20;
- Fixed an issue where changes were incorrectly combined in the primary branch of an organization.
- Fixed an issue in a compensation review preview where editing a field in the reviewer workbook cleared pre-populated values.&#x20;
- Fixed an issue where the employee count did not accurately reflect visible employees when the time slider or additional filters were applied.&#x20;
- Fixed an issue where the map placed people in the middle of the US when their location or address only contained a state and country.&#x20;
- Fixed an issue where hidden fields continued to display in the **Visualize** dropdown.&#x20;
- Fixed an issue in the Cash compensation history where the **Change** column displayed a value incorrectly.&#x20;
- Fixed an issue where errors occurred when syncing to Sequoia One.&#x20;
- Fixed an issue where ChartHop tried to match by job code even though no job code was provided during an ATS sync.&#x20;
- Fixed an issue where reports did not reflect all scenario changes. 
- Fixed an issue where headcount numbers and totals did not match when the org chart was exported as a Powerpoint.&#x20;
- Fixed an issue where filters that were applied to a report did not carry over when the report was downloaded to a .csv file.&#x20;
- Fixed an issue where the **Impact** tab in Scenarios did not display forecasting information correctly.
- Fixed an issue where the **Base Raise Amount** and **Base Raise %** columns displayed incorrect amounts when the pay interval was changed to yearly in the reviewer workbook during a compensation review preview.&#x20;
- Fixed an issue where the default views in the **Data Sheet** kept including deprecated fields.

## 10.11.22

***

## 🎁 <font color="#2166ae">**Added**</font>

### New features

- Added the ability to link to compensation review fields in ChartHop templates, which allows you to generate content including letters that inform your employees about a raise.&#x20;
- Made cross-tabs optional in bar chart reports. The option to add them defaults to ‘None.’&#x20;
- Added new language on the Reports page that reads ‘Duplicate’ instead of ‘Clone.’&#x20;

### Integrations

- Updated the ChartHop Workday app to adjust job statuses based on how you set them in the Workday ATS. When you close formerly open jobs, the app sets those jobs to 'Inactive'. When you fill open jobs, the app sets those jobs to 'Pending'.
- Added a Recruiter Actions bundle that allows you to notify users by Slack or email about new Active jobs or existing jobs that are now Active.

## ⚒  <font color="#eb144c">**Fixed**</font>

- Fixed an issue where new hires appeared early in ChartHop despite having their announce dates manually updated.&#x20;
- Fixed an issue where custom views in scenarios did not load correctly.&#x20;
- Fixed an issue where reports with a Y-axis displayed duplicate measures.&#x20;
- Fixed an issue where Org Chart groups did not display correctly for people with multiple groups.&#x20;
- Fixed an issue where the ChartHop logo did not display correctly in Powerpoint report exports.&#x20;
- Fixed an issue where reports with scenarios did not add their proposed new jobs to the organization’s headcount.&#x20;
- Fixed an issue where reports exported to Powerpoint improperly displayed tooltips and scrollbars.&#x20;
- Fixed an issue where some open jobs weren’t received during a sync of the ChartHop Workday app.&#x20;
- Fixed an issue where contractors weren't properly recognized in the ChartHop Workday app.&#x20;
- Fixed an issue where the ChartHop Workday app did not sync both employee information and open jobs simultaneously.&#x20;
- Fixed an issue where ‘Additional fields’ did not appear in the tooltip displayed when hovering over fields in the ‘Select columns’ dropdown menu on the Data Sheet.&#x20;
- Fixed an issue where including ‘file’ type fields would prevent a .csv upload from being read correctly by ChartHop.&#x20;


[title] ADP Outbound Payroll Sync
[path] Labs/

:::hint{type="warning"}
This feature is currently in Alpha. Be one of the first customers to try it! Please share any feedback with the ChartHop team.&#x20;

### How to setup a Alpha Feature

1. Contact [ChartHop support](mailto\:support@charthop.com) or your CSM if you have one. They can activate the feature for you.&#x20;
2. Read below for setup instructions and context on how the feature will work.
:::

ChartHop now allows you to sync certain fields from ChartHop back to ADP. This allows you to make ChartHop your source of truth for employee date while keeping ADP up to date.&#x20;

The sync can run on a scheduled basis or immediately after changes take place.&#x20;

## Install and purchase ADP Data connector

To configure the field mapping for Outbound fields:

## Configure Outbound field mappers

To configure the field mapping for Outbound fields:

1. From the left sidebar select **Apps & Bundles**
2. Select the [ADP Date Connector App](docId\:Hij0yqV02zXpb29MuH-kK) if you have already installed it.
3. Select the **Outbound Field Mapper&#x20;**&#x74;ab
4. Toggle on or off any field mappers for the built in fields that you would like to setup.&#x20;

If you would like to map custom fields, please contact the ChartHop team at this time.&#x20;

![](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/eHk2nlzpyBdMoPQQ2e-mR_screenshot-2024-07-26-at-105630-am.png)

## Activating the Outbound Sync

To activate the outbound sync:

1. From the left sidebar select **Apps & Bundles**
2. Select the [ADP Date Connector App](docId\:Hij0yqV02zXpb29MuH-kK) if you have already installed it.
3. Select the **Settings&#x20;**&#x74;ab
4. Locate the **App status & sync settings** card on the right hand side & select **Edit**.
5. Check the **Automated Outbound Sync** checkbox
6. Select if you want a&#x6E;**&#x20;Event-based** or **Daily Sync.**
7. Press **Save**.&#x20;

### Sync type options

**Event-based Sync -&#x20;**&#x57;ill run every time a change is made in ChartHop. For example: If an employee adds their Birth Date to their profile in ChartHop, that information will automatically sync after they save it.&#x20;

**Daily Sync -&#x20;**&#x57;ill run every day and update information in ADP each morning.&#x20;

![](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/UtbzTjy2hNidF1Be0w_7O_screenshot-2024-07-26-at-110006-am.png)

## Current Limitations

- Access to fields depends on where it lives in ADP.
- All compensation must be in USD
- Base compensation is only supported for employees whose compensation in ChartHop is annual and whose pay schedule in ADP is monthly, semimonthly or biweekly.
- You can't make past dated changes that are different from today
  - Valid: Adam's current pay is $90, the effective date for this pay was 6 months ago, 7/1/23. Today, on 1/15/24 we give Adam a raise to $100 with the effective date of 2 weeks ago, 1/1/24.&#x20;
  - Not valid: Adam's current pay is $90, the effective date for this pay was 1 week ago, 1/7/24.  Today, on 1/15/24 we give Adam a raise to $100 with the effective date of 2 weeks ago, 1/1/24. This is not a valid change because the effective date of the change is before the most recent change.&#x20;
- You can't make future dated changes ahead of time, but we will make the update when the sync runs on the current date.
  - **Not valid:&#x20;**&#x41;dam's current pay is $90, the effective date for this pay was 1 week ago, 1/7/24. Today, on 1/15/24 we give Adam a raise to $100 with the effective date of 2 weeks in the future, 2/1/24.&#x20;
- Compensation fields can be effective dated.&#x20;

## Workflows

A two-way sync with ADP enables ChartHop to be your source of truth for employees, managers, and administrators.&#x20;

Examples:&#x20;

:::BlockQuote
An employee is moving! They spoke with HR and now need to update their contact information. They can login to ChartHop and change it right from their profile without having to dig into ADP. Administrators can even set up actions to be notified when an employee does this if needed.

Their home address, phone number, and other personal information will be sent to ADP for payroll automatically.
:::

:::BlockQuote
We successfully wrapped up our compensation cycle in ChartHop. Updated compensation will update in ADP on the effective date in to simplify payroll, no need to export or upload data.&#x20;
:::

:::BlockQuote
Our permissioning relies on ChartHop groups. ChartHop syncs with Okta and ADP so we can reflect our organization structure as it is, and the information will flow to Okta and ADP for automatic access management.&#x20;
:::

:::BlockQuote
We hired a new employee! Their information came in from Greenhouse, and our recruiting team can input the rest of their onboarding information in ChartHop, all data will flow to ADP for payroll.&#x20;
:::

:::BlockQuote
A manager recieved a letter of resignation. They submitted a terminate and backfill scenario, which utilized ChartHop's approval workflows. Once approved and merged, the termination information will sync to ADP to update payroll and employee records.&#x20;
:::

![](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/zIvjwipcq0CyRNmCBF7eh_.blob)



![](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/H_-gW1zbgkOgdMuE7wDmi_.blob)




[title] Hiring workflows with ADP
[path] Labs/ADP Outbound Payroll Sync/

# ADP Outbound Workflows

## What this covers

As part of your ChartHop HRIS onboarding, you're enabling the ADP Data Connector. This allows ChartHop to automatically send approved new hires to ADP as **in-progress hires**, so your team doesn't have to re-enter data manually.

There are three things your team needs to complete before we can go live:

1. Identify and confirm the fields you want ChartHop to send to ADP
2. Validate that your Greenhouse hiring workflows connect correctly to ChartHop if applicable
3. Confirm your team understands the in-progress hire handoff in ADP

## How the hire flow works

ChartHop's role is to create the in-progress hire record in ADP. ADP does not consider the hire complete until your team finishes it there.

| **Step 1**<br /><br />Candidate accepted<br /><br />    ATS | → | **Step 2**<br /><br />New hire created in ChartHop<br />ChartHop HRIS | → | **Step 3**<br /><br />ChartHop sends hire to ADP<br /> ADP Data           Connector<br /><br />*Only triggers when all 5 required fields are populated* | → | **Step 4 —**<br />**Customer action required**<br />Finish in-progress hire in ADP<br />ADP Workforce Now<br />*No fields sync to this employee until this step is done* |
| ----------------------------------------------------------- | - | --------------------------------------------------------------------- | - | ------------------------------------------------------------------------------------------------------------------------------------------------------- | - | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |



| **Two things to know before go-live**<br />**Step 3 is conditional.** ChartHop will only send the hire to ADP once all five required fields are populated: **given name, family name, hire date, ADP Onboarding Template Code, and ADP Payroll Group Code**. If any of these are missing, nothing is sent. Make sure every new hire record in ChartHop has all five before expecting it to appear in ADP. *This includes any other fields you set as required on your onboarding template in ADP as well.*<br />****<br />**Step 4 is a hard blocker for all ongoing syncs.** Until your team completes the in-progress hire in ADP, **no fields will sync to that employee's ADP record** - including any updates made in ChartHop after the hire was sent. The employee is on hold in ADP until your team submits them. |
| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

## Field mapping: ChartHop → ADP

You decide which fields ChartHop sends to ADP when a hire is created. Fields not included here will need to be entered manually when your team completes the in-progress hire in ADP.

| **How to fill this in**<br />For each field you want ChartHop to send, provide the exact ADP field code name. If you're unsure, your ADP admin can find it under **Setup → HR → User-Defined Fields** in ADP Workforce Now. Leave it blank and we'll work through it together. *Here's a list of all available fields ChartHop can send to ADP.* |
| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |

### Fields ChartHop will send to ADP

**★ Required** - Step 3 will not trigger until all five required fields are populated.

Filling out a list of the fields you want to send to ADP is the first step in your workflows. This will ensure all of those fields are mapped and marked as required.&#x20;

| **ChartHop field**                                                    | **ADP field / code name** | **Notes**                    |
| --------------------------------------------------------------------- | ------------------------- | ---------------------------- |
| **★ First name**                                                      | Given name                | Required to send hire to ADP |
| **★ Last name**                                                       | Family name               | Required to send hire to ADP |
| **★ Hire date**                                                       |                           | Required to send hire to ADP |
| **★ ADP Onboarding Template Code**                                    |                           | Required to send hire to ADP |
| **★ ADP Payroll Group Code**                                          |                           | Required to send hire to ADP |
| *Any additional fields that are required in your onboarding template* |                           |                              |

### Fields your team will complete manually in ADP

Anything not in the table above will need to be entered when your team finishes the in-progress hire in ADP. Document them in a separate sheet so your HR or payroll team knows what to expect.

| **ADP field**                                           | **Who enters it** | **Notes** |
| ------------------------------------------------------- | ----------------- | --------- |
| *Any fields you want ADP to be the source of truth for* |                   |           |

## The ADP in-progress hire handoff

When ChartHop sends a hire to ADP, ADP holds it as an in-progress hire until a human completes it. ChartHop does not finalize the hire in ADP - that belongs to your team.

| **No sync will occur for this employee until this step is complete**<br />Until the in-progress hire is finished in ADP, **no data will sync to that employee's ADP record** - including any updates made in ChartHop after the hire was sent. The employee is on hold in ADP until your team completes and submits them. This also means they will not be set up for payroll. Completing this step promptly after each hire is sent is critical. |
| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

### What your team needs to do in ADP when a hire is sent

1. Log in to **ADP Workforce Now**
2. Navigate to **People → New Hires → In Progress**
3. Locate the hire sent by ChartHop (it will appear with the name and start date ChartHop provided)
4. Review the pre-populated fields and complete any remaining required fields
5. Submit the hire to move it from in-progress to active

### Define your internal process before go-live

- **Who owns the ADP in-progress hire completion step?**
- **What is your SLA for completing a hire in ADP once it's sent from ChartHop?**
- **How will the ADP owner know a hire is waiting for them?**
  Consider: a Slack notification, a ChartHop action alert, or a recurring ADP in-progress hire queue review.
- **Who is the backup owner if the primary is out?**











[title] ADP Outbound supported fields
[path] Labs/ADP Outbound Payroll Sync/

## Supported Fields

The following fields are supported. For details on the exact field names, codes and their mappings please look at the **Outbound Field Mappers** tab in the ADP Data Connector App.&#x20;

### Ongoing syncs/updating employees

| **Field**                                                  | **Status**                 |
| ---------------------------------------------------------- | -------------------------- |
| Legal name                                                 | Supported                  |
| Preferred name                                             | Supported                  |
| Home address                                               | Supported                  |
| Birthday                                                   | Supported                  |
| Gender                                                     | Supported                  |
| Work Email Address                                         | Supported                  |
| Work Phone number                                          | Supported                  |
| Personal/Home Email Address                                | Supported                  |
| Personal Mobile Phone number                               | Supported                  |
| Home Phone number                                          | Supported                  |
| Manager                                                    | Supported                  |
| Base Compensation                                          | Supported with limitations |
| Title                                                      | To valid title list        |
| Department                                                 | ADP Bug                    |
| Business Unit                                              | Supported                  |
| EEO Establishment                                          | Supported                  |
| Custom Fields on the worker endpoint                       | Supported                  |
| Set rehire eligibility, severance eligibility, reason code | Supported                  |

### In-progress hires

| **Field**                                           | **Status**                      |
| --------------------------------------------------- | ------------------------------- |
| Hire date / Start date                              | Supported *(Required for hire)* |
| Legal first name                                    | Supported *(Required for hire)* |
| Legal last name                                     | Supported *(Required for hire)* |
| Birth date                                          | Supported                       |
| Home address (street, city, state, postal, country) | Supported                       |
| Tax ID                                              | Supported                       |
| Tax ID type                                         | Supported                       |
| Tax ID status                                       | Supported                       |
| Federal filing status                               | Supported                       |
| State tax jurisdiction                              | Supported                       |
| SUI/SDI tax jurisdiction                            | Supported                       |
| Worked-in-jurisdiction indicator                    | Supported                       |
| Pay frequency                                       | Supported                       |
| Payroll group                                       | Supported *(Required for hire)* |
| Payroll schedule group                              | Supported                       |
| Onboarding template code                            | Supported *(Required for hire)* |
| Onboarding status                                   | Supported                       |
| Position ID                                         | Supported                       |








[title] Preboarding
[path] Labs/

:::hint{type="warning"}
This feature is currently in Alpha. Be one of the first customers to try it! Please share any feedback with the ChartHop team.&#x20;

### How to setup a Alpha Feature

1. Contact [ChartHop support](mailto\:support@charthop.com) or your CSM if you have one. They can activate the feature for you.&#x20;
2. Read below for setup instructions and context on how the feature will work.
:::

## Overview

Preboarding lets you invite new hires to ChartHop before their start date. They get a limited-access view of the platform where they can complete tasks, fill out forms, sign documents, and see what they need to know before day one.

This page covers how the preboarding system works, how to invite new hires, and what to check before your first cohort goes out.

## How ChartHop models a person's identity

Every person in ChartHop has two separate records:

- **Org member record** - their job, title, department, and manager. This is what appears in the org chart and data sheet.
- **User record** - their login credentials and access role. This controls whether they can log in to ChartHop.

A person can be an org member without being a user. When you add a new hire to ChartHop, they appear as an org member immediately. They don't become a user until you invite them to preboarding.

## User statuses during preboarding

When you invite a new hire, ChartHop creates a user record and assigns them the status **PREBOARDING**. On their start date, their status automatically transitions to **ACTIVE**. For this transition to succeed, the new hire's work email must be populated on their profile before their start date. If it's missing, they'll stay in PREBOARDING.

| Status          | What it means                                                                                                                                                                                               | Login method             |
| --------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------ |
| **PREBOARDING** | New hire has been invited but hasn't started yet. They have limited access to ChartHop.                                                                                                                     | Magic link only          |
| **ACTIVATION**  | Transitional state. Occurs if a start date is changed after an invite is sent, or in certain edge cases. The new hire can still use magic links until they log in with their work email for the first time. | Magic link or work email |
| **ACTIVE**      | New hire has reached their start date. Full access per their assigned role.                                                                                                                                 | SSO or work email        |

**Note:** Preboarding users can only enter ChartHop via magic link. They can't use SSO or password login until their status moves to ACTIVE.

## Magic links

Magic links are single-use, time-limited login links sent to a new hire's home (personal) email address. They're how preboarding users access ChartHop before they have a work email.

- Magic links expire based on your org's token duration setting, found in Access > Settings.
- If a link expires, the new hire can request a new one from the ChartHop login page. No admin action is needed.
- Every email sent to a preboarding user (including task notifications and form assignments) contains a magic link.

## What new hires see

When a preboarding user clicks their magic link, they land on the Onboarding profile tab. This tab is their home page during preboarding. It's where you surface the information, tasks, and forms they need before day one.

What they can access depends on their preboarding role. By default, preboarding users have limited access: they can see their own profile, complete assigned tasks, and interact with the onboarding home page. They can't see the org chart, headcount data, or anything outside their preboarding scope.

**Note:** The Onboarding profile tab must stay named "Onboarding" for the preboarding home page to work correctly. Renaming it breaks the connection.



::Image[]{src="https://app.archbee.com/api/optimize/CXAjUAezd9VEEVQBIYmdw/Au2qbIpcpYxXrBu6K6SjB-20251020-130337.png" size="70" width="2520" height="4664" position="center" caption="Example preboarding portal" darkWidth="2520" darkHeight="4664" showCaption="true"}

## Inviting new hires

To invite new hires, go to **People Ops Tools > Onboarding > Preboarding tab**. This view shows all announced new hires whose start date matches your preboarding filter. From here, click **Invite new hires** to open the 4-step invite flow.

**Before you invite:** Each new hire must have a home email on their profile. This is the address the magic link is sent to. If home email is missing, the invite can't be delivered. Audit your upcoming hire roster before sending.

### Step 1: Select people

Filter or manually select which new hires to invite. The table shows home email, start date, and manager for each person. Start date is visible for reference but doesn't gate the invite - you can invite someone any time before their start date.

### Step 2: Review roles

This screen shows the preboarding role each person will be assigned (limited access while in PREBOARDING status) and the active role they'll switch to automatically on their start date. You can adjust roles and apply department-limited or filter-limited access here before sending. Preboarding users still use the ChartHop portal, but their access is limited to only information about themselves, their onboarding screen and tasks they can do about themseleves.&#x20;

### Step 3: Customize the invitation

Write the welcome message the new hire will receive. A few things to know:

- Choose delivery by email or Slack.
- CQL variables work in the message body. Common examples: \{\{org.name}}, \{\{formatDate(startDate, "MMMM d, yyyy")}}.
- CQL does not work in the subject line. Use static text there.
- The invite is sent to the new hire's home email. The magic link is embedded in the button in the email body.

### Step 4: Review and send

Review your selections and confirm. Clicking send fires the user invite event, which can trigger any automated actions you've configured to run on that event.

## What happens after you send

What happens next depends on whether **Send welcome email** is enabled in your org settings.

| Setting                          | What happens                                                                                                                                                                                                                                               |
| -------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Send welcome email: enabled**  | The new hire receives a welcome email at their home email address. The email contains a magic link. Clicking it logs them in and sets their status to PREBOARDING. They can access tasks, forms, and the onboarding home page immediately.                 |
| **Send welcome email: disabled** | No email is sent automatically. The new hire's status is set to PREBOARDING, so they can receive and use magic links from task and form emails. Use this option when you want to control the welcome experience through a custom action or separate email. |

## FAQs

**If it is before a new hire's announce date, can they go through preboarding?**

Preboarding consists of several steps and some are currently supported and some are not.&#x20;

| **Preboarding Step**                            | **Supported for Unannounced New Hires**                                 |
| ----------------------------------------------- | ----------------------------------------------------------------------- |
| Invite new hire                                 | ✅ The new hire should show up in the list of people that can be invited |
| Actions triggered by inviting new hire          | ✅ These should still trigger when invited                               |
| Actions triggered by X days before a start date | ❌ These actions will not trigger before the person's announce date.     |














[title] Automated Actions
[path] Labs/

## Overview

Automated Actions allow you to automatically send messages, forms and tasks based on time or event-based triggers.

Automated actions are highly versatile and can reduce the manual work required by your people team. It's often useful to look at some use cases from other customers, but if you have ideas for something you want to automate, just let ChartHop staff know.

### Our favorite use cases

**Recognition**

- Sending Shoutouts to a Slack channel
- Sending Birthday or Work Anniversary notification to a Slack channel

**Planning**

- Notify the recruiter or a Slack channel when their job officially moves to "Active" and is ready to start recruiting.
- Notify a person's HRBP any change is made to their information.

**Performance**

- Automatically prompting 1:1 forms every week
- Send Peer Reviewers their forms after they are selected
- Send ad-hoc feedback to a person after they receive peer feedback

**Onboarding**

- Sending messages & forms to a new hire on their first day
- Introduce new hires with a message to the Slack channel whenever they submit an "About me" form
- Notify an Onboarding buddy of expectations after they've been selected
- Send tasks to a new hire's manager to prepare for their first day.

**Surveys**

- Send an Onboarding Survey automatically after 90 days
- Send an exit survey 3 days before the person's last day

**Time Off**

- Notify a manager or HR team via Slack or email when a time off request is submitted

## Actions Structure

Actions consist of 2 primary elements:

- Triggers. Defines when the steps should happen
- Steps. Define what should happen when a trigger occurs.

### Triggers

There are 2 types of triggers:

- **On a schedule**
  - The action steps will happen at the same time on a schedule when the filter matches.
  - Example schedules
    - 9:00 AM. Everyday
    - 12:00 PM. Every Monday, Wednesday & Friday
    - 2:00 PM. First day of every month
    - 9:00 PM. First day of first day for the months of Jan, Apr, Aug, Dec
- **When an event occurs**
  - The action steps will happen immediately after the event occurs.
  - Examples:
    - Form submissions
    - Employee lifecycle events *(like hires or terminations)*
    - Job updates *(like recruiting status changes)*
    - Time off events *(like a time off request being submitted)*

## Steps

There are 3 types of steps:

### Send Messages

- Sends a notification via Slack or Email

### Send Forms

- Sends a form with attached Tasks and notification

### Send Tasks

- Sends a task that can be completed in the app
- Tasks will appear with their description in a modal

::Image[]{src="https://app.archbee.com/api/optimize/CXAjUAezd9VEEVQBIYmdw/qvhUWlicK7G9z4PFc8L7D-20251020-131832.png" size="78" width="2098" height="1344" position="center" caption="Task sent from an action" showCaption="true" darkWidth="2098" darkHeight="1344"}

### Send Documents for Signature

- See [Signatures](docId:-APezeKDHAACHAZcCuAem) documentation for details.

## Add Categories to Actions

[Categories](docId\:TPKhVeXrOv1C9Jv2x6vDv) allow you to organize your actions and the tasks that they create.

You are able to create custom Categories, but two built in Categories: [Onboarding & Offboarding Pages](docId\:ePwhC52aP9PJNauBSHamL) should be used to assing tasks that you would like to see appear in the Onboarding and Offboarding views.

To add a category to an action:

1. Open the action that you would like to edit
2. At the top of the action, select a category from the **Category** dropdown.
3. **Save** the action.

## Linking Actions to Reviews and Surveys

Linking Actions to Reviews and Surveys allows you to specify that a certain automated action should only run if the event occurs in the context of Reviews and Survey. It also allows you to track the form sends and responses in the context of the Survey.

This is great for use cases like:

- **Reviews.** Automatically send a Peer Review Form when the peer reviewer selections have been approved.
- **Reviews.** Add custom notifications when forms within a review are submitted, approved or released.
- **Surveys.** Set up recurring pulse surveys and view the results inside Surveys.
- **Surveys.** Aggregate triggered survey feedback

## Form Configuration: Due Dates and Skip

You are able to set up forms to have Due Dates or to be Skipped if they are optional.

**To set up Due Dates and Skipping:**

1. Edit the action
2. Add a Send Form step
3. Set a due date (Read more in [Managing tasks](docId\:AUgK05IqTO-acrgCmfF60))
   - With Actions, you can set a Relative due date which will set the date relative to when the action is triggered. For example, 30 days after someone's start date.
4. Indicate if the form can be Skipped
   - This is great if forms are not essential, like a 1:1 form and may need to be skipped for occasions like a vacation or holiday.

![Skipping Forms](https://api.archbee.com/api/optimize/zxjhb7-DqnuzAP-lru1l3-YDOblv4JspewtnBo8tW67-20240814-191439.png)

**Recurring Tasks for Forms Behavior**

- If an action is associated with a Review or Survey, then a person can only have one *open* task at a time.
  - If a person has completed the previous instance of the form, then they will receive a task with the new due date.
  - If a person has *not* completed the previous instance of the form, then they will not receive a new task and will have the previous task with the previous due date.
- If the action is *not* associated with a Review or Survey, the action will continue to send the person tasks every time the action runs.
  - *Ex. Receive 1:1 requests for every week*

![Exam](https://api.archbee.com/api/optimize/zxjhb7-DqnuzAP-lru1l3-4SkIS5s25rx-kJTkrTPBj-20240814-192134.png "Example Task list showing skip options with due dates")

[title] Key Dates
[path] ChartHop by ChartHop/Compensation Planning/

## Overview

The Key Dates section is one of the quickest parts of a comp cycle configuration. Most of the dates here are purely for reference and have no system functionality tied to them — with one important exception.

## Timeline Dates

You'll see four timeline dates in this section:

- **Review Start**
- **All Reviews Due**
- **Final Approval Due**
- **Payroll Effective Date**

These dates populate the cycle timeline for reference purposes only. They do not drive any system behavior. For example, if the Review Start date passes and no one has clicked Launch, the cycle will not launch itself. After a cycle is launched, these dates can still be edited.

## Skip Incomplete Reviews After Due Date

This is an optional checkbox tied to the **All Reviews Due** date. When enabled, any manager who has not submitted their review by that date will have their review automatically skipped — not just to the next approver level, but **all the way to the top of the cycle**. This happens at approximately **9:30 AM UTC** the day after the due date.

**We generally do not recommend using this setting.** Within the cycle, you can manually skip individual reviews up one level at a time, which gives far more control. The auto-skip is all-or-nothing — everyone who hasn't submitted gets escalated to the very top simultaneously, with no ability to be selective.

If a customer does use this setting, the All Reviews Due date becomes functionally important, as the auto-skip triggers based on it.

## ⚠️ Org Data Reference Date — Most Important Field

This is the most important date on the entire Key Dates screen. It determines what org data the comp cycle will use.

**Any data effective on or before this date will be recognized by the cycle. Any data effective after this date will be ignored.**

**Example:** If an employee is in the Product department on August 14th (the reference date) and moves to Engineering on August 20th, the comp cycle will show them as being in Product — because that's where they were as of the reference date.

### Why This Date Exists\#

Once the comp cycle ends, all pay changes are written back to the org with an effective date. Without a reference date cutoff, those new pay values would get pulled back into the cycle and it would appear as though no changes occurred. The reference date prevents this by locking what data the cycle sees.

### How to Set It Correctly

Confirm with the customer: *when this cycle ends and pay changes go into effect, what will the effective date of those changes be?* The org data reference date must be set to a date **before** that payroll effective date.

**Example:** If pay changes will be effective September 1st, the reference date can be set anywhere up to August 31st — but not September 1st or later, or the incoming pay changes will corrupt the cycle. A warning flag will appear in the UI if the reference date is set on or after the payroll effective date.

### ⚠️ This Date Cannot Be Changed After Launch

Once the cycle is launched, the org data reference date is **locked and cannot be modified**. It must be confirmed and set correctly before clicking Launch.

### Edge Cases to Keep in Mind

- **Retroactive pay changes:** If a cycle runs in August but pay changes are retroactively effective to August 1st, the reference date may need to be set to July 31st — even though the cycle spans all of August.
- **Backdating data changes mid-cycle:** If a customer needs to update a field (e.g., a CSV-uploaded performance rating) after the cycle has launched, they must backdate that change to on or before the reference date for the cycle to recognize it.
- **Unreleased performance data:** If the customer uses ChartHop's Performance module and form responses have not yet been released, that unreleased data can still be pulled into the comp cycle. Since unreleased data doesn't carry an effective date, the reference date does not apply to it.

[title] Eligible Employees
[path] ChartHop by ChartHop/Compensation Planning/

## Overview

The Eligible Employees section determines who is included in the comp cycle at all. If someone is eligible, they appear in the cycle and their pay will be reviewed. If they are ineligible, they are not in the cycle in any capacity.

## How the Rules Work

The page defaults to **all employees** being eligible. The rules you configure here are about **filtering people out**, not filtering people in. Each rule you add removes a subset of employees from eligibility.

### Built-In Exclusion Options

ChartHop provides several pre-built rule types:

- **Start date on or after** a specified date (e.g., exclude anyone who started on or after January 1, 2026)
- **Last raise date on or after** a specified date — this pulls from the **Raise Date** field, which is based on any cash comp raise (base + variable). Note: this is not customizable directly, but see the Custom Filter section below.
- **Employment type** — exclude part-time, contract, intern, etc.
- **Department, team, or location** — remove entire groups from eligibility

As you configure rules, the eligible/ineligible list updates in real time.

### Custom Filter

In addition to the built-in options, there is a **custom filter field** that accepts any CQL expression. This is where you can handle anything the built-in rules don't cover.

**Example:** Exclude anyone who does not have a comp band assigned.

You can also combine multiple conditions in the custom filter — for instance, filtering by base raise date specifically, or combining tenure with raise date logic. The custom filter essentially allows you to express any eligibility rule the built-in options can't.

:::BlockQuote
**Note on the Raise Date field:** The built-in "last raise" rule uses the raiseDate field, which reflects any cash comp change. If a customer wants to filter based only on base comp raise date, they should use the custom filter with baseComp.lastRaise.date instead.
:::

## Previewing the Eligible / Ineligible List

At the bottom of the screen is a table showing all employees and their current eligibility status. You can:

- **Toggle between eligible and ineligible views** to see exactly who falls into each bucket
- **Search for a specific person** to check their status
- **Click "View on Data Sheet"** to open the filtered list in a full data sheet view — useful for adding columns and exporting the list for stakeholder review and sign-off

## Include & Exclude Overrides

Once your rules are set, there will almost always be exceptions. Rather than rewriting your rules to carve out individual cases, use the two override boxes:

- **Include Specific People** — regardless of the rules, anyone added here is eligible
- **Exclude Specific People** — regardless of the rules, anyone added here is ineligible

Think of these as "I don't care about the rules" overrides. They make it easy to handle one-off exceptions without touching the broader configuration.

### ⚠️ Important: Switching Someone Between Lists

If someone is in the Exclude box and you want to make them eligible, you must:

1. Remove them from the Exclude box **and**
2. Add them to the Include box

Simply removing them from Exclude is not enough — it will not automatically make them eligible. Once someone is on one of these lists, you must explicitly move them to the other.

## Post-Launch Behavior

Once the cycle is launched, **the bulk eligibility rules are locked and cannot be edited**. This is intentional — a misconfigured bulk change on a live cycle could accidentally make hundreds of employees ineligible.

If eligibility changes are needed after launch:

1. **Pause the cycle**
2. Use the **Include or Exclude boxes** (these remain editable even after launch)
3. Add the employee to the appropriate box
4. **Resume the cycle**

The bulk rule settings will be read-only, but the individual override boxes will still function throughout the cycle's life.

## What Happens When an Eligible Employee Terminates Mid-Cycle

This is a common scenario and the behavior is entirely governed by the **org data reference date**.

- **If the termination is effective after the reference date:** The cycle ignores it. The employee remains in the cycle as if they are still active, because as of the reference date they existed in the org.
- **If the termination is effective on or before the reference date:** The cycle automatically pulls them out, because as of the reference date they did not exist in the org.

### What to Do When Someone Terms After the Reference Date

By default, they stay in the cycle. The customer has two options:

1. **Leave them in** — this is sometimes intentional. If budgets are calculated as a percentage of eligible salaries, removing a termed employee also removes their budget contribution. Some customers prefer to keep them in so that money stays in the pool.
2. **Remove them** — pause the cycle, add the employee to the **Exclude** box, then resume.

There is no automatic removal in this case — it requires a deliberate decision and action from the cycle owner.

[title] Team-based Org Chart
[path] Labs/

:::hint{type="warning"}
This feature is currently in Beta.&#x20;

We're really excited about it and it's already being used by multiple organizations.&#x20;

Try it out and send feedback to the ChartHop team or directly to [product-feedback@charthop.com](mailto\:product-feedback@charthop.com). &#x20;

### How to setup a Beta Feature

1. From the left sidebar, select **Admin,&#x20;**&#x74;hen select **Labs**.
2. Use the switch to toggle on the feature, then press the **Save settings&#x20;**&#x62;utton.&#x20;
3. Read below for additional setup instructions and context about what will be activated when you save settings.&#x20;
:::

Activating this feature will show the groups org charts in your org as soon as you save the setting in labs. We recommend that you [revise your groups data](docId:1YVNimXcWobSB0iY_XFz1) before turning this option on.&#x20;

## Rollout process

We suggest that you follow the following rollout process:

1. Add the people who will be setting up the view in the box labeled **Limit which users can see the team-based org chart.&#x20;**&#x54;he view will then only be visible to thse people
2. Preview the data, determine your uses cases and plan your setup.
3. Clean up or update any of group data.
4. Remove the user limitation and release the view to your the whole org!

![Limit which users can see view](https://archbee-image-uploads.s3.amazonaws.com/zxjhb7-DqnuzAP-lru1l3-x1bcNTNwA3zjw62lWHLc_-20240814-144758.png)

## Select group types to visualize

ChartHop allows you to visualize your Department & Team Together, Departments, Teams, or Locations on the org chart.

![](https://archbee-image-uploads.s3.amazonaws.com/zxjhb7-DqnuzAP-lru1l3-Mki8QILjPm6S_YHB6TLGV-20240730-200854.png "Org chart type switcher")

After turning on the option, select which group types you want to display.&#x20;

![](https://archbee-image-uploads.s3.amazonaws.com/zxjhb7-DqnuzAP-lru1l3-Q2Q8UUyh2Pp0WY9-K-DVo-20240730-201102.png)

## Revise your groups data

They group org chart works best when you configure it with data that make sense to your organization. In particular we recommend 2 actions:

- Ad&#x64;**&#x20;Parent Groups** to organize your Departments or Teams. A few tips:
  - Use th&#x65;**&#x20;Departments and Teams** view — Use Departments for your to level grouping then nest sub-groups under that. For example:
    - Customer Department
      - Customer Support Team
      - Implementation Team
      - Customer Success Team
      - Professional Services Team
  - Create **Teams** that only act as team Parents. Maybe you have a setup like this:
    - "Product Teams" Team — Organizational parent group&#x20;
      - "iOS Team" — Actual team
      - "Android Team" — Actual team
      - "Mac OS Team" —  Actual team
      - "Windows Team" —  Actual team
    - "Sales" Team — Parent Group with Sales Leadership
      - "East Coast" — Actual team
      - "Midwest" — Actual team
      - "Southeast" — Actual team
      - "West Coast" —  Actual team
- Revise the **names** of your groups to be more "Public-facing" rather than "Admin-facing."
  - If you are syncing your team names in from another system, make sure to add the name in the source system as an `alias` to ensure that group syncing continues to work properly.&#x20;

To edit your group data:

1. From the left sidebar, select **Data Model,&#x20;**&#x74;he&#x6E;**&#x20;Department, Team or Location.**
2. Select a group using the checkbox, then select **Edit** from the list of actions.&#x20;
3. From the **Edit group** drawer, you can update the name, add a parent group, and more.&#x20;

More information can be found in [Managing groups](docId:1B7KsAAQrS5bpcOg3CXc6).&#x20;

### Deleting Groups

We know that a big part of cleaning up your groups data may involve deleting groups. A few things to note:

- If you are syncing groups from your payroll system, you will want to first make updates to the groups in the payroll system.&#x20;
- If you want to delete a group, you must first remove all of the members of the group.&#x20;
- If you delete a group, historical data on the job history is preserved.

### Synced Groups

If groups are synced from a payroll system and you want to make revise the display of your data, here are a few things to keep in mind: &#x20;

- Make updates to the groups in the payroll system first
- If you want to update the name in ChartHop, be sure to add the name in the payroll system as an `alias` on the group to ensure that group syncing continues to work properly.&#x20;
- Make sure the groups are empty in the payroll system before deleting them in ChartHop or they will be recreated with the next sync.&#x20;




[title] Security statement 
[path] Resources/

:::hint{type="info"}
Sign up for our [privacy notifications mailing list](https://docs.google.com/forms/d/e/1FAIpQLSfLgKFsNBiIdZ2LbCx6ys84mKAS6yqpQc-__eAi3F3DkTDN3w/viewform?usp=sf_link) to keep up to date with changes.
:::

ChartHop’s mission is to organize your people data. As part of that mission, protecting your sensitive data is one of our core values. You are entrusting us with sensitive data about your most critical resource, and we do our best to earn that trust.

This document describes the mechanisms and procedures we use to keep your data safe.

### 1. Infrastructure

1. ChartHop is hosted on Amazon Web Services (AWS), in us-east-1 (Virginia datacenter), in a Virtual Private Cloud (VPC) in EC2 (Elastic Compute Cloud).
2. All application servers are on private IP addresses and are not exposed on the public internet.
3. All servers are configured from the official hardened AlamaLinux, using automated configuration management software (Ansible) that ensures consistency across the infrastructure. Security patches are automatically applied multiple times a week.
4. All servers use AWS Security Group firewall rules to minimally restrict ingress.
5. A bastion host is used as the only point of SSH ingress.
6. Access to the bastion host is secured via SSH key (no password logins).
7. Access to the bastion host is firewalled such that only specifically whitelisted IP addresses can SSH to the port.
8. All servers use IAM EC2 roles and fine-grained least-privilege-access custom IAM policies to access AWS resources.
9. Administrative access to the AWS account is only permitted via Single Sign-On, which leverages multi-factor authentication including either a physical hardware token or biometric, to a limited number of ChartHop employees.
10. Credentials are encrypted using AWS Key Management Service, and the keys are rotated yearly. For information about AWS’s physical security and procedures, please refer to their Compliance page at: [https://aws.amazon.com/compliance/](https://aws.amazon.com/compliance/)

### 2. Data Storage

1. ChartHop’s production data is stored using MongoDB Atlas, MongoDB’s hosted database service.
2. Data storage is multi-tenant within ChartHop, but ChartHop does not share data storage resources with any other company. All data is tagged by customer organization id at every level, throughout the lifecycle. The primary Atlas servers are also hosted in us-east-1 and use peering, such that the appservers communicate privately with Atlas within the VPC.
3. In addition to the fact that normal communication is within the VPC, the appservers only communicate with the database servers using TLS/SSL.
4. The production databases are firewalled such that only the appservers can communicate with them.
5. The production databases use authentication with strong passwords; these credentials are encrypted using AWS Key Management Service.
6. All data in the database is stored encrypted-at-rest on encrypted volumes.
7. MongoDB Atlas provides point-in-time backup restore capabilities, and the backups are retained for a period of one year.
8. Administrative access to the MongoDB Atlas console is only permitted via Single Sign-On, which leverages multi-factor authentication including either a physical hardware token or biometric, to a limited number of ChartHop employees.
9. For more information about MongoDB’s security capabilities, please refer to their Security Controls white paper at: [https://webassets.mongodb.com/\_com\_assets/collateral/Atlas\_Security\_Controls.pdf](https://webassets.mongodb.com/_com_assets/collateral/Atlas_Security_Controls.pdf)

### 3. Other Key Vendors

1. ChartHop uses Datadog for centralized logging of the platform. Our customers’ sensitive data is stripped from the logs, and access to Datadog is restricted to multi-factor authenticated users with a business need to access logs. Information about Datadog’s security compliance procedures is available here: [https://www.datadoghq.com/security/](https://www.datadoghq.com/security/)
2. ChartHop uses Google’s G Suite product for corporate data storage and email. All ChartHop employees and contractors are required to use multi-factor authentication including either a physical hardware token or biometric. Information about Google’s security compliance procedures is available here: [https://gsuite.google.com/security/](https://gsuite.google.com/security/)
3. ChartHop uses GitHub for private code repositories. All ChartHop employees and contractors are mandated to use multi-factor authentication, including either a physical hardware token or biometric, and under no circumstances are private keys of any kind checked into the repositories. Information about GitHub’s security compliance procedures is available here: [https://help.github.com/articles/github-security/](https://help.github.com/articles/github-security/)
4. ChartHop uses Slack for internal communication and system monitoring. Information about Slack's security compliance procedures is available here: [https://slack.com/security](https://slack.com/security)

### 4. Application Security

1. TLS/SSL is mandatory for all web requests made to ChartHop. Amazon’s Certificate Management service manages certificates, which are automatically rotated yearly.
2. ChartHop’s appservers use Jetty and JAX-RS, expose a minimum surface area, and apply regular security patches.
3. The appservers use Amazon’s Web Application Firewall rules to block known bot attackers.
4. SQL injection attacks are not possible, as ChartHop does not use an SQL database. That said, all user input is sanitized, including using OWASP's HTML sanitization libraries.
5. ChartHop supports and strongly encourages the use of Single Sign-On rather than passworded logins and supports SAML, Google Workspace, and other methods. As a best practice, we further recommend that our customers use multi-factor authentication.
6. Our Single Sign-On does not provide automatic access to anyone with a customer-domain email; they must still have an authorized ChartHop user account.
7. For those customers who are not using SSO, strong passwords are required for user accounts.
8. Passwords are one-way hashed using bcrypt and are not recoverable; they can only be reset.
9. Authentication requests are protected against brute-force attacks; they are limited to 5 failed attempts before the account is disabled.

### 5. Customer Security Controls

1. ChartHop treats all data as confidential to each customer, but has additional controls around data designated “Sensitive”. This category of data includes:
   - Employee Compensation
   - Future Hires and Departures (not yet announced)
   - Voluntary / Involuntary status of Departures
   - Birth Year and Ethnicity
   - Employee Home Email, Phone Number, and Home Address
   - Private Scenarios, Comments, and Notes
   - Custom fields that can be designated Sensitive at your option.
2. ChartHop provides several user access levels which allow customers to control which of their users have access to Sensitive data. These levels currently include:
   - Owner (allows setting user privileges and enabling integrations)
   - Technical Owner (allows configuring integrations without direct access to sensitive data)
   - People Ops Admin (allows making official changes to primary org chart)
   - Sensitive View (allows viewing all employees’ sensitive data)
   - All Compensation View (allows viewing compensation, but not other sensitive data)
   - Cash Compensation View (allows viewing cash, but not equity compensation)
   - Equity Compensation View (allows viewing equity, but not cash compensation)
   - Personal Contact View (allows viewing personal contact information)
   - Time Off View (allows viewing time off information)
   - Recruiting Editor (allows making official changes to open roles only)
   - Recruiting View (allows viewing sensitive data of open roles only)
   - Member View (allows viewing employees who report into the user)
   - Limited View (no sensitive data visible)
3. ChartHop allows restricting of the above access by department or team, or by customer-defined rules.
4. All users are allowed to create Scenarios (proposals for changes to the org chart), but only Primary Editors or Owners are allowed to “merge”, or approve/finalize, those changes.
5. Therefore, ChartHop’s recommendation is that, depending on the organization:
   - No more than 1-3 people receive Owner access
   - If needed, a very limited number of IT staff receive Technical Owner access
   - No more than a small number of people receive Primary Editor access
   - Sensitive View is only offered to individuals who have a business need to view sensitive information across the whole organization (for example, senior members of the executive team, or HR / Finance / Strategy roles)
   - Some members of the recruiting team receive Recruiting View or Recruiting Editor access
   - Most members of the organization, including department heads, receive Member View access
   - Limited View is offered to low-level members of the organization or consultants / contractors / temps.
6. ChartHop provides a “View Sensitive Data” button in the user interface which can be toggled. When that button is toggled off, no sensitive data will be retrieved from the API or displayed in the user interface.
7. ChartHop's API is available for customers to use and build applications on top of, using access-scoped tokens. Access levels can be set for API applications and tokens in the same way as users.
8. All data access and changes made to data in ChartHop are logged, authenticated, and auditable.

### 6. Employee Access and Procedures

1. ChartHop employees and contractors sign confidentiality agreements and undergo annual security training.
2. ChartHop employees and contractors are all required to use multi-factor authentication, including either a physical hardware token or biometric.
3. ChartHop laptops and mobile devices are configured to wipe remotely if they are misplaced.
4. ChartHop customer-facing staff are only granted access to accounts that they directly interface with.&#x20;
5. Many ChartHop engineers do not receive access to the production environment or data. They work strictly off of development or demo accounts.
6. Some ChartHop engineers have access to the production environment in the course of their duties. Such access is strictly controlled and periodically audited.
7. ChartHop engineers are issued credentials and keys specific to that engineer with minimal access required for that engineer’s duties. These keys are revoked upon offboarding.
8. ChartHop maintains strict separation of the production data and environment from local and development environments.

### 7. Data Sharing

1. ChartHop does not share your data with third parties except at your explicit request.
2. For example, we offer integrations that synchronize your data with other authenticated systems. Those integrations can only be enabled by a ChartHop customer with Owner or Technical Owner access, and the list of enabled integrations is visible on the Apps and Integrations page. We will not synchronize with any external service that you do not explicitly turn on.
3. Similarly, ChartHop offers an API, which you can make use of, given appropriate access controls, to share ChartHop data with your other internal systems.
4. To the extent we can, ChartHop offers you data portability - via API and export. You can leave and take your data with you.
5. Upon termination, ChartHop will retain your data a period of up to one year, after which it will all be irrevocably hard-deleted and cannot be recovered. If you wish your data to be irrevocably deleted immediately upon termination, notify us and we will do so.
6. ChartHop plans to offer anonymous, aggregated network insights to our members, such as industry benchmarks.
   - When ChartHop offers this service, (1) no information attributable to an individual, or an individual company, will ever be shared and (2) you will be notified, and will receive the option to opt out of inclusion in aggregation.

### 8. Breach Notification

1. If ChartHop becomes aware of a data breach, we will notify our affected customers as soon as we have an understanding of the extent of the breach, but in any case no later than within 72 hours.
2. ChartHop follows postmortem procedures in the event of any security or system failures and will publish and distribute postmortems to our customers.


[title] .find()
[path] Carrot reference/Methods/

### Description

This method, called on a @Table, returns a [Sequence](docId\:JG4itlQWafzLpArttFo67)  of results matching the filter.

- Operates on: [Sequence](docId\:JG4itlQWafzLpArttFo67) &#x20;
- Returns: [Sequence](docId\:JG4itlQWafzLpArttFo67)&#x20;

### Syntax

`db.table.find()`

- Returns a Sequence of all of the objects in the Table.

`db.table.find{expression}`

- Returns a Sequence of all of the objects in the Table that match `expression`

### Examples

`db.job.find{startDate >= '2025-01-01'}`

- Returns a Sequence of all [Job](docId:09AD2ikREIzwa-J0dFOBM)s with a start-date from Jan 1 2025 and on.

`db.opportunity.find{type:new stage:"closed won"}`

- Returns a Sequence of all Opportunity objects (if you have an `opportunity` Table), which are of Type "new" and Stage "Closed Won"

### Find and Aggregations in Dashboards

Often, `find()` is combined with other methods to calculate aggregations in Dashboards. For example:

- `db.job.find{startDate >= '2025-01-01}.mean{baseComp}`
  - Calculates the mean average base compensation for all jobs that started from 2025-01-01 on.
- `db.job.find{jobFilter}.groupBy{department}.sum{cost}`
  - Calculates the total cost of jobs matching the `jobFilter` filter, grouped by each department.


[title] December 2021 release notes
[path] Release Notes/Untitled/

## 12.03.21

***

**🎁 &#x20;**<font color="#2166ae">**Added**</font>**&#x20;&#x20;**

- Added logic to **allow syncing of new hires** from the chosen ATS, even if there's no personal email
- Enabled **contractor data to sync from Gusto** to ChartHop
- **Remove truncation** from Org Chart Powerpoint Export
- Added an option to **break up slides** in the Org Chart Powerpoint export
- Increased the **maximum job title string length** supported by the Org Chart Powerpoint&#x20;



****<font color="#eb144c">**⚒  Fixed**</font>&#x20;

- Fixed an issue causing **opened jobs in ChartHop to appear in Greenhouse** even when the reverse sync is on
- Fixed an issue with the **Custom field limited&#x20;**&#x66;ilter

## 12.10.21

***

<font color="#eb144c">**⚒  Fixed**</font>&#x20;

- Fixed an issue causing the **Hourly Compensation field** not to display while viewing the Compensation History tab
- Fixed an issue causing **duplicate** **emails** to be sent when an HRIS sync has failed
- Fixed an issue causing Org members with **Sensitive View (Limited Comp)** to lose access to custom fields
- Fixed an issue preventing the **Primary Editor of a Scenario from merging** it to the primary Org
- Fixed an issue with **modal** **transparency** on the login screen

## 12.17.21

***

**🎁 &#x20;**<font color="#2166ae">**Added**</font>**&#x20;&#x20;**

- Improved the **design of the Org settings page** to bring it in line with other design changes in the platform
- Improved the **design of the Manage users page** to bring it in line with other design changes in the platform
- Improved the **design of the Reset password page** to bring it in line with other design changes in the platform



<font color="#eb144c">**⚒  Fixed**</font>&#x20;

- Fixed an issue causing **file uploads to fail** on a Custom form
- Fixed an issue causing random employees to **lose** **access** **to the Scenarios module**

## 12.24.21

***

<font color="#eb144c">**⚒  Fixed**</font>&#x20;

- Fixed an issue causing **duplicate teams** to be displayed in the Teams dropdown when creating a job


[title] Release Notes Archive 2023
[path] Release Notes/

## 2023.12.19

## 🎁 <font color="#2166ae">**Added**</font>

- Reports is now called **Dashboards** in the ChartHop navigation and throughout the app.
- **Surveys** now have a dedicated page within ChartHop called **Engagement** and no longer share the same page with Reviews. It is also possible to move any current or historic Surveys to Engagement for better organization. &#x20;

## 2023.12.07

## 🎁 <font color="#2166ae">**Added**</font>

- The **ADP Data Connector** app is now available for all customers. Connect your **ADP Workforce Now** instance to ChartHop in a matter of minutes.
- The **Workday Reports** app is now available for all customers. ChartHop can ingest people and job data from a configured **Workday Report**, to make data integration easier than ever.
- The **backfillFor** field now behaves the same way that an automatic backfill behaves, when looking at **Job History**.&#x20;
- Now, if a new job is created as a backfill for an old job, the Job History for the old job will show up in the Job History of the new job, so ChartHop users can see the history of the job over time.

## 2023.12.06

## 🎁 <font color="#2166ae">**Added**</font>

- **Carta** app now supported in **Sync History**.&#x20;
- **E-Trade** app now supported in **Sync History**.&#x20;

## 2023.11.17

## 🎁 <font color="#2166ae">**Added**</font>

- Support for **Forms** to use some of the Built-in Person fields like **Gender**, **Ethnicity**, **Birth Date** and more

## 2023.11.13

## 🎁 <font color="#2166ae">**Added**</font>

- Custom mapping to **Department** and **Office** fields now supported in Greehouse sync

## 2023.11.09

## 🎁 <font color="#2166ae">**Added**</font>

- Two variations for the built-in **Role**, People Ops Admin:
  - People Ops Admin (No comp data)&#x20;
  - People Ops Admin (No sensistive data)

## 2023.11.01

## 🎁 <font color="#2166ae">**Added**</font>

- SFTP now supported in **Sync History**
- New built-in **Role**, People Ops Admin, which is an admin level role with access to sensitive data and workflow management

## ⚒  <font color="#ff0000">**Fixed**</font>

- Syncing **Profile** images with Slack now more reliable

2023.10.25

🎁 <font color="#2166ae">**Added**</font>
-----------------------------------------

- Ability to access **Profiles** of departed employees

2023.10.23

🎁 <font color="#2166ae">**Added**</font>
-----------------------------------------

- Ability to uninstall **Bundles&#x20;**&#x69;ncluding ability to uninstall associated fields as part of the uninstall process

2023.10.13

⚒  <font color="#ff0000">**Fixed**</font>
-----------------------------------------

- Bug Fixed with **Filters** when selecting Field Category, it now generates the correct selectable list to choose from

2023.10.12

🎁 <font color="#2166ae">**Added**</font>
-----------------------------------------

- Updated **Forms** and **Reports** tables

2023.10.10

⚒  <font color="#ff0000">**Fixed**</font>
-----------------------------------------

- Bug Fixed with Images syncing from ADP integration

2023.09.29

🎁 <font color="#2166ae">**Added**</font>
-----------------------------------------

- Ability to share **Reports**, **Scenarios**, and **Datasheets&#x20;**&#x77;ith Departments and Teams
-

2023.09.28

🎁 <font color="#2166ae">**Added**</font>
-----------------------------------------

- Updated **Tasks** list on the home page
- Added ability to add “soft” or “hard” deadlines to a form within a **Review**
- Added ability to allow forms to be skipped within a **Review**
- Added new graph for monitoring progress within a **Review**

2023.09.20

🎁 <font color="#2166ae">**Added**</font>
-----------------------------------------

- &#x20;**View As** now supports viewing as a person not yet invited to the organization

2023.09.19

🎁 <font color="#2166ae">**Added**</font>
-----------------------------------------

- &#x20;Updated design of **Forms** settings page so it is better organized and easier to understand

2023.09.18

🎁 <font color="#2166ae">**Added**</font>
-----------------------------------------

- &#x20;New **Scenarios** view consolidates all scenarios into one unified, sortable table. Update includes new bulk actions for combining, archiving, unarchiving, and deleting. &#x20;

2023.09.14

🎁 <font color="#2166ae">**Added**</font>
-----------------------------------------

- &#x20;New `scenario.merge` event that can be used to trigger **Actions**, such as notifications, when a scenario is merged
- Ability to close a form within &#x61;**&#x20;Review**

2023.04.25

🎁 <font color="#2166ae">**Added**</font>
-----------------------------------------

- Added error handling when selecting ineligible user to notify after approval
- Added the "Powered by Carta" logo in the Equity tab
- New Carta App - UI Improvements &#x20;
- Updated Sapling logo
- Show collaborators in reviews/approver config panel
- Performance improvements&#x20;

## ⚒  <font color="#ff0000">**Fixed**</font>

- Bug Fixed Comp Reviews Status tag does not change color&#x20;
- ERROR for missing workdayID
- Restore spacing between person and job title on the history page
- Fixed issue with tabbing out of search box sets a "q" in the path resulting in a blank screen on refresh
- Formatting improvements for Rich Text Editor



## 2023.04.24

## 🎁 <font color="#2166ae">**Added**</font>

### New features

- Added the ability to mark fields as "Required" when opening and modifying jobs. [Learn more.](https://docs.charthop.com/requiring-fields-when-opening-jobs)&#x20;
- Added related comments to the email sent when a compensation review is rejected.&#x20;
- Added the ability to select a fallback approver for scenarios in **Org settings**.



## ⚒  <font color="#ff0000">**Fixed**</font>

- Fixed an issue where multipliers weren’t showing when configuring compensation bands.
- Fixed an issue where the head of an org chart could not be edited in the **Job edit** dialog.
- Fixed an issue where updates to persons would falsely validate required fields.&#x20;
- Fixed an issue where required fields were not enforced for the department field.&#x20;

**ATS App Integrations**:

- Fixed an issue where the currency and interval fields from Lever would not map to the would not map to Lever's `compensationBand` object.&#x20;
- Fixed an issue where the Lever-API failed when `compensationBand_Max` had a value.&#x20;
- Fixed an issue where patch requests to re-open jobs were sent before deleting the opening in Greenhouse.
- Fixed an issue where pre-mapped jobs were transferred when matched to the job grouping criteria.
- Fixed an issue where newly generated req codes didn’t appear in confirmation emails.
- Fixed an issue where multiple openings were created when setting jobs to active status.

***

## 2023.04.10

## ⚒  <font color="#ff0000">**Fixed**</font>

- Fixed an issue where total compensation displayed the incorrect org currency in the **Compensation** tab in the employee profile.&#x20;
- Fixed an issue where all grants associated with an employee did not display in the **Personal history** and **Equity grants** tabs in the employee profile.&#x20;
- Fixed an issue where interval and currency values were not sent successfully to outbound integrations when compensation bands were updated.&#x20;
- Fixed an issue where the **Equity grants** tab in the employee profile did not display the correct message when equity grants were not found.&#x20;
- Fixed an issue where **Job history** tabs did not render correctly.&#x20;

***

## 2023.03.27

## 🎁 <font color="#2166ae">**Added**</font>

### New features

- Added the ability to export compensation information in multiple columns. Provides the ability to make more detailed bulk edit compensation changes with a spreadsheet upload. 
- Changed the Create and Edit field dialogs to use checkboxes instead of sliders.
- Added the ability to view the Slack ID for ChartHop users in the Data Sheet. Can help troubleshoot which ChartHop users have Slack IDs or not. 
- Added the ability to map compensation band information from an external system to fields in ChartHop.

**Scenarios:**

- Added the ability to export comments from a Scenario.

**Compensation reviews:**

- Updated the Comp reviews module to require typing the word “launch” before confirming that you want to launch a Compensation review.

## ⚒  <font color="#eb144c">**Fixed**</font>

- Fixed an issue where exported data was not reflecting the same values as shown in the Comp Review page. 

***

## 2023.03.13

## 🎁 <font color="#2166ae">**Added**</font>

### New features

- Added support for using `variableTarget` sub-fields in CSV uploads and custom field mapping.
- Added the `BaseCompChanges` field which returns a list of the changes to a job’s base compensation over time in chronological order.
- Added the ability to set effective dates for retired bands.
- Added a new **Stock Price Rolling Average** org option to support the ability to configure the number of days used in the average stock price calculation.

**Org chart:**

- Added improved color logic in the **Org chart** to help with readability.
- Added the ability to omit sensitive data when exporting an **Org chart**.

**Scenarios:**

- Selecting a collaborator’s photo in **Scenarios&#x20;**&#x6F;r **Compensation Reviews**  opens sharing settings.
- Updated sharing options in **Scenarios&#x20;**&#x74;o be parallel in both name and order.

**Compensation Reviews:**

- Updated the **All Reviews** **due** date option to have the auto-skip checkbox unchecked by default on the **Key Dates** tab.
- Added the ability to export comments from a compensation review.
- Cycle owners have been relabeled as "Compensation Review Owner(s)”.&#x20;
- Added the ability for reviewers and approvers to be able to reject skipped proposals.&#x20;

## ⚒  <font color="#eb144c">**Fixed**</font>

- Fixed an issue where exporting `variableTarget` from the **Data sheet** with a `variableTargetPercent` would export the wrong `variableTarget` value.
- Fixed an issue where the **Save&#x20;**&#x62;utton would not activate in the **Edit Job** modal when Hours Per Week, Weeks Per Year, hourly, or base were changed.
- Fixed an issue where even though `HoursPerWeek` and `WeeksPerYear` existed in the spreadsheet import wizard, they couldn’t be used in uploads.
- Fixed an issue where `stockGrants` would return null when used in a template.
- Fixed an issue where **Smart Default Currencies** were not properly set when importing employee data syncs with non-US countries.
- Fixed an issue where `baseComp` or `baseComp.pay` fields would not have the same display settings as their parent fields when set in **Compensation Reviews** or **Scenarios**.
- Fixed an issue where ATS outbound syncs would take longer to complete for non-US clients.

***

## 2023.02.27

## 🎁 <font color="#2166ae">**Added**</font>﻿

### New features

- Added the ability to enter an effective date when retiring compensation bands.
- Added the ability to edit Start Date at Org `startDateOrg` from the **Data Sheet** and through spreadsheet import.&#x20;
- Added the ability to configure the number of days used to calculate average public stock price.&#x20;
- Added the ability to edit Planned Start Date `startDatePlanned` through spreadsheet import and data sync.&#x20;
- Added an option to export th&#x65;**&#x20;Org Chart** without employee names. Deselecting the new **Include employee names** option when exporting removes employee names from exported slides.&#x20;
- Added an option to export the **Org Chart** with sensitive data (for example, certain open jobs). The new **Include sensitive data&#x20;**&#x6F;ption is selected by default when the sensitive data eye icon is toggled to visible. When sensitive data is hidden, you must select the **Include sensitive data&#x20;**&#x6F;ption to include sensitive data in the export.&#x20;
- Added support for up to three linear approvers in scenario approvals (currently in Beta).&#x20;
- Added ability for Basic ChartHop customers to disable birthday and anniversary actions.&#x20;
- Added option to display and configure the number of decimal places used in tooltip labels for charts.&#x20;
- Added the ability to edit hours and weeks directly within the Base `baseComp` field.&#x20;

## ⚒  <font color="#eb144c">**Fixed**</font>

- Fixed an issue where there was a discrepancy in calculations between stock valuation in Org Settings and in employee equity grant profile tabs.

***

## 2023.02.13

## 🎁 <font color="#2166ae">**Added**</font>﻿

### New features

- Improved the error message that a user receives if a form won’t load. 
- Improved the naming convention for downloaded files to better indicate what is contained in the file: 
  - **Reports (CSV format):** \[org-name]-\[chartName]-\[timestamp].csv
  - **Reports:** \[org name]-\[reportName]-\[timestamp].pptx
  - **Org charts:** \[org name]-\["org-chart"]-\[timestamp].pptx
- Adjusted the table chart settings to include a more easily understood Show Total Column option.
- Adjusted where missing location information is shown on the Map page.

**Compensation reviews:**

- Added support for a custom effective date for primary data used for a compensation review. Setting an effective date for primary data allows compensation review owners to control the date that employee data, including compensation and reporting structure, is used as a basis for a compensation review.
- Added the ability to manually skip a reviewer during a compensation review.
- Added the ability for reviewers and approvers to choose a different currency in budget visualizations for a compensation review.

## ⚒  <font color="#eb144c">**Fixed**</font>

- Fixed an issue where users could not visualize the Org chart by base salary.
- Fixed an issue where not all data was displaying for Compensation bands.

***

## 2023.01.31

## 🎁 <font color="#2166ae">**Added**</font>﻿

### New features

- To better reflect current functionality, the **Delete compensation bands** button has been renamed to **Retire compensation bands**
- Added support for reports to allow y-axis ticks to include smart maximums and evenly spaced tick intervals.
- Added the ability for ATS inbound job data syncs to fully process jobs without complete data.

**Compensation reviews:**

- Added the new **Reviewer** dropdown in the **Full team overview&#x20;**&#x74;ab, which allows you to view all employee pods that a reviewer/approver is responsible for in a compensation review.
- Added support for the department, manager, reviewer and Carrot filters to be applied to the budget visualizations on the **Full team overview** tab.

**Carrot:**

- Changed the `startDate()` function to update from the "planned" start date to the "actual" start date once the job has been filled.
- Changed the `startDateOrg()` function to update from a "NULL" start date to the "actual" start date once the job has been filled.
- Updated the Planned grant field by splitting it into three distinct fields:
  - Planned grant
  - Planned grant (shares)
  - Planned grant (value) 

## ⚒  <font color="#eb144c">**Fixed**</font>

- Fixed an issue in the **Greenhouse ATS integration** **app&#x20;**&#x77;here job codes matched using the 'Group Job Openings'  setting when "Title” was set to “None” would not create job openings under their respective matched jobs.
- Fixed an issue where the custom conversion rate would not allow any value above four characters in the **Currencies and Costs&#x20;**&#x74;ab of **Org settings**.
- Fixed an issue where spreadsheets for  bands with custom job levels were missing the “Delete” column in the job levels tab when exported.
- Fixed an issue where “base” would not display for employees when selected from the **Visualize&#x20;**&#x64;ropdown in the **Org chart**.
- Fixed an issue where point markers were being incorrectly cropped in line and area charts.
- Fixed an issue where cloning a report with the **Ignore report filters** option toggled on, would result in the new report having the feature toggled off.
- Fixed an issue where tier values couldn’t be duplicated between band tiers.
- Fixed an issue where job cards in PowerPoints would not have any color applied to them when exporting an org chart to PowerPoint if the **Highlight boxes** option was set to the default value of "Department and Team”.
- Fixed an issue where text content in the **Compare&#x20;**&#x66;ield in **Reports&#x20;**&#x63;ould not be deleted.
- Fixed an issue where the **About&#x20;**&#x74;ab in employee profiles did not properly display start dates for upcoming new hires.
- Fixed an issue where comp band job groupings did not display in the same format they were uploaded in.
- Fixed an issue where creating new bands with previously used job level IDs would result in errors.
- Fixed an issue where downloaded spreadsheet templates for bands with multipliers were missing their multipliers.
- Fixed an issue where band locations would not update when using the wizard.
- Fixed an issue where failed ATS webhooks did not show error messages in the **Sync History&#x20;**&#x70;age.
- Fixed an issue where org charts wouldn’t generate when applying filters to the embeddable org chart app.

***

## 2023.01..17

## 🎁 <font color="#2166ae">**Added**</font>﻿

### New features

- Added the ability to edit the `baseComp` field so that users can update hourly and annual compensation from the same field when performing budget allocations in compensation reviews or in the **Data Sheet**.
- Compensation bands graphs have been updated to display band levels more clearly.

**Compensation reviews:**

- Added the ability to automatically skip incomplete approvals and mark them as **Skipped** after the All reviews due date passes. This clears any remaining To-dos for lower-level approvers and allows final approvers to complete their final approval.
- When the new **Skip incomplete reviews after due date** option is selected, the **All reviews due** field is disabled automatically once a cycle has been launched to prevent changes from being made.
- To prevent any errors, the Final approvals due date cannot be edited after the compensation review has been launched.&#x20;
- To better align with its functionality, the **Send Reminder&#x20;**&#x6F;ption is available only from the **Cycle Overview** tab for compensation review owners.&#x20;
- Added a more streamlined Final Approvals page for final approvers.
- Added the ability to use custom column header colors in the reviewer workbook.&#x20;

### Integrations

- Outbound error messages on the **App Sync History** page have been updated to display more helpful and informative error messages.
- Added the ability for the Workday Adaptive Planning app to automatically have access to all scenarios, compensation reviews, performance reviews, and headcount plans that are configured to be available for import in the app.&#x20;
- Added support for multi-select fields for custom field mapping.
- Added the ability for Greenhouse users to be notified of any sync failures.

## ⚒  <font color="#eb144c">**Fixed**</font>

- Fixed an issue where loading anniversaries and birthdays on the dashboard prevented users from clicking links on the page.
- Fixed an issue where compensation bands data did not display completely when the Table view was selected.&#x20;
- Fixed an issue where changes were not saved when trying to update a single-select custom field using the **Edit job** option.&#x20;
- Fixed an issue where template filters were interpreting commas incorrectly.&#x20;
- Fixed an issue where statuses in th&#x65;**&#x20;App Sync History** page displayed inconsistently.&#x20;
- Fixed an issue where the **History** page was not refreshing after changes were made based on filter and display selections.
- Fixed an issue where custom fields displayed with incorrect capitalization and multi-select fields were truncated incorrectly in Edit dialogs.
- Fixed an issue where users could not select a value within a field because the value had an extra space at the end, which caused errors.&#x20;
- Fixed an issue where the Workday Adaptive Planning app would display an error when it did not have access to a scenario or compensation review that was not shared with the app.&#x20;
- Fixed an issue in reports charts where selecting the **% of total** option as an aggregation caused an error with the value formatting in the chart.&#x20;
- Fixed an issue where payroll syncs did not sync images correctly to ChartHop.
- Fixed an issue where indicators on the x-axis were incorrectly cropped in horizontal bar charts.&#x20;
- Fixed an issue where the ATS Req ID value was not updated after outbound job creation failed.&#x20;
- Fixed an issue where manually hiring a person in ChartHop did not update the recruit status to **Pending**.&#x20;
- Fixed an issue where adding a new job to a scenario and exporting the **Org Chart** in the scenario caused an error.&#x20;

### &#xA;[Release Notes from 2022](https://docs.charthop.com/december-2022-release-notes)


[title] Resources
[path] /


[title] Salesforce Integration
[path] Labs/

:::hint{type="warning"}
This feature is currently in Alpha. Be one of the first customers to try it! Please share any feedback with the ChartHop team.&#x20;

### How to setup a Alpha Feature

1. Contact [ChartHop support](mailto\:support@charthop.com) or your CSM if you have one. They can activate the feature for you.&#x20;
2. Read below for setup instructions and context on how the feature will work.
:::

## Overview

Bring your CRM and other company data into ChartHop with our Salesforce Integration. This integration allows you to pull key data—such as account details, contact information, and pipeline status—directly from Salesforce into your ChartHop account.

### Places to utilize data from Google Sheets:

- Tables
- Home Page
- Profile Tabs
- Dashboards
- Forms (Text blocks)&#x20;
- Resource Pages
- Letter Templates

## Setup instructions

### Installing the application&#x20;

In Labs, enable "Alpha apps and integrations." You will then see "Salesforce" display on the apps page under the tab "Other available apps." Once you click install, it will guide you to connect your Salesforce account so we can access the data in your Salesforce account. Once installed, you can rename the application to better match the data you are pulling in. ChartHop cannot access data that you have not explicitly mapped to ChartHop tables or fields.
**ChartHop cannot access data that you have not explicitly mapped to ChartHop tables or fields.**

**Sync frequency**

You can choose to automate this sync and have it run daily, or you can manually run it at your discretion.

::Image[]{src="https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/mnEj6HTTlwDus0O5fRdyD_image.png" size="60" width="782" height="408" position="center" caption="Sync options" showCaption="true"}

### Mapping to a table in ChartHop

**Note**: The table needs to be created first in ChartHop before you can map to it.

All values must match EXACTLY, including any trailing white spaces. If there is a space, dash, or non alphabet character in the name, wrap the name in` [""]`. You **CAN** wrap any value in the brackets and quotes.&#x20;

To map to a column in a table, you need to know the table code name (see below), and the field code name for the column.&#x20;

::Image[]{src="https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/sjvZsS20LAKr2_hyKC4H2_image.png" size="60" width="678" height="134" position="center" caption="Table code name" showCaption="true"}

::Image[]{src="https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/lh9veo6rQv4JuPi96Mhpr_image.png" size="50" width="253" height="121" position="center" caption="Field code name for column" showCaption="true"}

You can map columns from different objects in Salesforce. You need to know the name of the object and the name of the field. The first field mapped needs to be the unique field. This is a value that does not repeat in its column, and is typically the Salesforce ID for the object (e.g., `Id, Contact.Id`).

In this example, the Salesforce object is labeled `Account`, and the fields we want to map are `AccountID` and `Name`.

:::BlockQuote
*Inbound field mapping example*
:::

| :::BlockQuote
ChartHop Table
:::                                                    | :::BlockQuote
Salesforce object and field
:::    |
| ----------------------------------------------------------------------------------- | ------------------------------------------------ |
| :::BlockQuote
`Customers.SFId` (this column is marked as `unique` in the table)
::: | :::BlockQuote
`["Account"].["Account.id"]`
:::   |
| :::BlockQuote
`Customers.customerName`
:::                                          | :::BlockQuote
`["Account"].["account.name"]`
::: |

- The first field mapped needs to be the unique field. This is a value that does not repeat in its column, and can be as simple as`row number`.&#x20;
- Notice above how the values are wrapped in brackets and quotes. Any field with more than 1 word or special characters MUST be wrapped in those values to be read by ChartHop. However, you can wrap any other values for consistency.

Once all of your field mappers are set, you can click "save mappers" and run the sync.&#x20;

### Salesforce Integration access

Initially, only Owners have the ability to install and edit the Salesforce App.&#x20;

Fields synced from Salesforce utilize ChartHop's [field settings](docId\:XYrLLTZxiE-BV4ZKzEs_g), so anyone in the organization can be given access to view the data in the corresponding fields.&#x20;


[title] Microsoft Teams Integration
[path] Labs/

:::hint{type="warning"}
This feature is currently in Alpha. Be one of the first customers to try it! Please share any feedback with the ChartHop team.&#x20;

### How to setup a Alpha Feature

1. Contact [ChartHop support](mailto\:support@charthop.com) or your CSM if you have one. They can activate the feature for you.&#x20;
2. Read below for setup instructions and context on how the feature will work.
:::

## Overview

Import pictures from Microsoft Teams. If you would like to have notifications send out, please reach out to support\@charthop.com or your CSM for more information.

## Setup instructions

### Installing the application&#x20;

In labs, enable "Microsoft Teams". You will then see "Microsoft Teams" display on the apps page under the tab "Other available apps". Once you click install, it will guide you to connect your Microsoft account so we can access images.

## Interacting with Ask ChartHop

Ask ChartHop responds to many commands, all starting with @charthop.&#x20;

- **Find people & data** — headcount, compensation, tenure, org structure
- **Answer questions** about ChartHop features & how things work
- **Analyze trends** — hires, departures, promotions, and more
- **Help with CQL** — build and test queries for reports or filters
- **Planning scenarios** — model org changes

**You can ask things like:&#x20;**

`@charthop, what's our current headcount?`

`@charthop, when's my next time off?`

`@charthop, help me with my prompt`


[title] Notion
[path] Labs/

# Using the Notion App in ChartHop

The Notion app connects your Notion workspace to ChartHop so the information your team keeps in Notion is available alongside your people data. This guide covers how to connect Notion, how the app behaves once connected, and what to know if you want to build your own Notion app instead of using ChartHop's.

## 1. Choose a connection type

You can connect Notion to ChartHop in two ways. Pick the one that matches how your organization uses Notion.

### Individual user connection

Each person authorizes ChartHop against their own Notion account. ChartHop respects the access level that a user already has in Notion: if you can't see a page in Notion, you won't see it through ChartHop either. Use this option when access to Notion content varies from person to person and you want those permissions enforced.

### Shared organization connection

One connection is set up for the whole organization, scoped to the Notion content your team has agreed to share. This makes shared information (team wikis, process docs, org-wide pages) available in ChartHop without provisioning a Notion seat or connection for every user. Use this option when you want broad access to shared content without managing individual authorizations.

:::hint{type="info"}
**Which should you pick?** If your Notion permissions matter (sensitive pages, restricted teamspaces), use individual user connections. If you mainly want company-wide content accessible to everyone in ChartHop, use the shared organization connection.
:::

## 2. Installing the app

Go to Apps, Bundles and Agents → Apps → Other available apps and open Notion. Click **install** to start the process. 

### Provide your OAuth credentials

| **Field**         | **Required**                   | **Notes**                                                                                                 |
| ----------------- | ------------------------------ | --------------------------------------------------------------------------------------------------------- |
| Client ID         | Yes                            | From your Notion integration settings.                                                                    |
| Client secret     | Yes                            | From your Notion integration settings. Store it only in the app definition; never share it elsewhere.     |
| Token URL         | Yes, always                    | From your Notion integration settings. This is the endpoint ChartHop uses to exchange and refresh tokens. |
| Authorization URL | During user authorization only | From your Notion integration settings. Used to send the user through Notion's consent flow.               |

:::hint{type="info"}
**Tip:** The token URL and authorization URL serve different steps. Authorization happens once per user; token exchange happens on an ongoing basis. Only the token URL is permanent in your app definition.
:::

## 3. How the app is configured

Configuration for this app is defined on the app level:

- **Authentication:** how the app authenticates against Notion (OAuth credentials and token exchange)
- **Retries and rate limiting:** how the app handles Notion's API limits and transient failures, so requests are retried automatically and you stay within Notion's rate limits without manual intervention
- **Available operations:** the set of actions the app can perform (for example, reading pages, querying databases, searching content)
- **Pagination:** how the app pages through large result sets from Notion so complete data is returned even when Notion responds in batches
- **Entity mapping:** what each operation means on the ChartHop side, in other words, how Notion objects (pages, databases, users) map back to ChartHop entities

You don't need to configure any of this to use ChartHop's built-in Notion app; it's already defined.


[title] Preboarding Templates
[path] Labs/Preboarding/

# Setting up your home page shouldn't be hard!&#x20;

Here are some template ideas you are welcome to copy, paste, and make your own.&#x20;

## Before go-live

All profile tabs need to be named "Onboarding" to be accessible for preboarding users. To be able to leverage customized JSON, check "V2". When you are ready for users, check "Active".&#x20;

## Example 1:&#x20;

![](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/wVOB2DDQmE6qOPJIpDhwP_image.png)

### What to paste:&#x20;

:::BlockQuote{indent="1"}
\{
&#x20; "rows": \[
&#x20;   \{
&#x20;     "columns": \[
&#x20;       \{
&#x20;         "blocks": \[
&#x20;           \{
&#x20;             "type": "CONTENT",
&#x20;             "content": "Welcome to ChartHop! 🎉 We are so excited you're joining us.\n\nThe first few weeks are all about getting settled, meeting your team, and learning how we work — no pressure to know everything on day one. This page has the essentials. Bookmark it and check back anytime.\n\nQuestions before you start? Email onboarding\@charthop.com — we're here to help."
&#x20;           }
&#x20;         ]
&#x20;       }
&#x20;     ],
&#x20;     "format": "12"
&#x20;   },
&#x20;   \{
&#x20;     "columns": \[
&#x20;       \{
&#x20;         "blocks": \[
&#x20;           \{
&#x20;             "type": "CONTENT",
&#x20;             "height": "stretch",
&#x20;             "title": "📅 Your First Day",
&#x20;             "content": "Start time: 9:00 AM\n\nLocation: Boston office or remote — both work!\n\nBring: Government-issued ID for I-9 verification."
&#x20;           }
&#x20;         ]
&#x20;       },
&#x20;       \{
&#x20;         "blocks": \[
&#x20;           \{
&#x20;             "type": "CONTENT",
&#x20;             "height": "stretch",
&#x20;             "title": "💻 Tech Setup",
&#x20;             "content": "Your laptop ships 3 days before your start date.\n\nIT will email setup instructions to your personal address the day before you start.\n\nStuck? Ping it\@charthop.com."
&#x20;           }
&#x20;         ]
&#x20;       },
&#x20;       \{
&#x20;         "blocks": \[
&#x20;           \{
&#x20;             "type": "CONTENT",
&#x20;             "height": "stretch",
&#x20;             "title": "🤝 Who to Know",
&#x20;             "content": "Your manager will reach out before day one to introduce themselves.\n\nYour onboarding buddy will message you on Slack during week one.\n\nPeople team: people\@charthop.com"
&#x20;           }
&#x20;         ]
&#x20;       }
&#x20;     ],
&#x20;     "format": "4,4,4"
&#x20;   },
&#x20;   \{
&#x20;     "columns": \[
&#x20;       \{
&#x20;         "blocks": \[
&#x20;           \{
&#x20;             "type": "CONTENT",
&#x20;             "height": "stretch",
&#x20;             "title": "Day 1 at a Glance",
&#x20;             "content": "- 9:00 AM — Welcome coffee with the People team\n- 10:00 AM — IT onboarding and laptop setup\n- 11:00 AM — I-9 verification and paperwork\n- 12:00 PM — Lunch with your manager\n- 2:00 PM — Team intros and office tour\n- 3:30 PM — 1:1 with your manager\n- 4:30 PM — Wrap-up and Q\&A\n\nCalendar invites land in your personal inbox the Wednesday before you start. If you don't see them, email onboarding\@charthop.com."
&#x20;           }
&#x20;         ]
&#x20;       },
&#x20;       \{
&#x20;         "blocks": \[
&#x20;           \{
&#x20;             "type": "CONTENT",
&#x20;             "height": "stretch",
&#x20;             "title": "Office & Dress Code",
&#x20;             "content": "Boston Office is at 123 Main Street. The front desk will have your name on the list.\n\nDress code is casual — jeans, sneakers, and a comfortable shirt are the norm. Wear what makes you feel good.\n\nWorking remote? Make sure your camera works and find a quiet spot for your team intros."
&#x20;           }
&#x20;         ]
&#x20;       }
&#x20;     ],
&#x20;     "format": "6,6"
&#x20;   }
&#x20; ]
}
:::

## Example 2:&#x20;

![](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/NlpKOvgXxgSlrN0c5xWu__image.png)

### What to paste:

:::BlockQuote{indent="1"}
\{
&#x20; "rows": \[
&#x20;   \{
&#x20;     "columns": \[
&#x20;       \{
&#x20;         "blocks": \[
&#x20;           \{
&#x20;             "type": "CONTENT",
&#x20;             "content": "Welcome to ChartHop! 🎉\n\nThis page is color-coded so you can find what you need fast. 🔵 Blue blocks are logistics. 🟡 Yellow blocks are people. 🟢 Green blocks are culture and vibe.\n\nQuestions? Reach out anytime: onboarding\@charthop.com"
&#x20;           }
&#x20;         ]
&#x20;       }
&#x20;     ],
&#x20;     "format": "12"
&#x20;   },
&#x20;   \{
&#x20;     "columns": \[
&#x20;       \{
&#x20;         "blocks": \[
&#x20;           \{
&#x20;             "type": "CONTENT",
&#x20;             "height": "stretch",
&#x20;             "title": "🔵 When & Where",
&#x20;             "content": "📅 Monday, 9:00 AM\n\n📍 Boston Office\n\n💻 Or your home office — both work\n\n🆔 Bring a government-issued ID for I-9"
&#x20;           }
&#x20;         ]
&#x20;       },
&#x20;       \{
&#x20;         "blocks": \[
&#x20;           \{
&#x20;             "type": "CONTENT",
&#x20;             "height": "stretch",
&#x20;             "title": "🟡 Who You'll Meet",
&#x20;             "content": "👋 Your manager — emails you 48 hours ahead\n\n🤝 Your buddy — Slacks you on day one\n\n💛 The People team — people\@charthop.com\n\n☕ Your skip-level — coffee in week two"
&#x20;           }
&#x20;         ]
&#x20;       },
&#x20;       \{
&#x20;         "blocks": \[
&#x20;           \{
&#x20;             "type": "CONTENT",
&#x20;             "height": "stretch",
&#x20;             "title": "🟢 The Vibe",
&#x20;             "content": "👕 Dress is casual — jeans and sneakers welcome\n\n🐕 Dogs allowed at lunch\n\n☕ Kitchen stocked with snacks and cold brew\n\n🎧 Headphones-on culture is respected"
&#x20;           }
&#x20;         ]
&#x20;       }
&#x20;     ],
&#x20;     "format": "4,4,4"
&#x20;   },
&#x20;   \{
&#x20;     "columns": \[
&#x20;       \{
&#x20;         "blocks": \[
&#x20;           \{
&#x20;             "type": "CONTENT",
&#x20;             "height": "stretch",
&#x20;             "title": "🔵 Day 1 Agenda",
&#x20;             "content": "🌅 9:00 — Welcome coffee\n\n💻 9:30 — IT setup\n\n📝 10:30 — Paperwork & I-9\n\n🥗 12:00 — Lunch with manager\n\n👥 2:00 — Team intros\n\n💬 3:30 — 1:1 with manager\n\n🎉 5:00 — Wrap and head home"
&#x20;           }
&#x20;         ]
&#x20;       },
&#x20;       \{
&#x20;         "blocks": \[
&#x20;           \{
&#x20;             "type": "CONTENT",
&#x20;             "height": "stretch",
&#x20;             "title": "🟡 Before You Start",
&#x20;             "content": "📬 Watch your personal inbox for calendar invites (Wednesday)\n\n📦 Your laptop ships 3 days before — don't open it yet\n\n🆔 Gather your I-9 documents\n\n😴 Get a good night's sleep — we mean it"
&#x20;           }
&#x20;         ]
&#x20;       }
&#x20;     ],
&#x20;     "format": "6,6"
&#x20;   }
&#x20; ]
}
:::

## Example 3:&#x20;

![](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/MzaXna1LhniYQNaB3dXss_image.png)

### What to paste:

:::BlockQuote{indent="1"}
\{
&#x20; "rows": \[
&#x20;   \{
&#x20;     "columns": \[
&#x20;       \{
&#x20;         "blocks": \[
&#x20;           \{
&#x20;             "type": "CONTENT",
&#x20;             "content": "🎊 Welcome to ChartHop! 🎊\n\nWe're so excited to have you joining us. This page has everything you need to know before Monday — laid out so you can scan it in 60 seconds or read every word, your call."
&#x20;           }
&#x20;         ]
&#x20;       }
&#x20;     ],
&#x20;     "format": "12"
&#x20;   },
&#x20;   \{
&#x20;     "columns": \[
&#x20;       \{
&#x20;         "blocks": \[
&#x20;           \{
&#x20;             "type": "CONTENT",
&#x20;             "height": "stretch",
&#x20;             "title": "✨ Your First Day",
&#x20;             "content": "⏰ Start time → 9:00 AM\n\n📍 Location → Boston Office\n🏠 Or remote → both totally fine\n\n🆔 Bring → government-issued ID for I-9\n\n👕 Wear → whatever's comfortable, jeans and sneakers are the norm"
&#x20;           }
&#x20;         ]
&#x20;       },
&#x20;       \{
&#x20;         "blocks": \[
&#x20;           \{
&#x20;             "type": "CONTENT",
&#x20;             "height": "stretch",
&#x20;             "title": "📋 Day 1 Schedule",
&#x20;             "content": "☕ 9:00 — Welcome coffee\n\n🖥️ 9:30 — IT setup\n\n📝 10:30 — I-9 paperwork\n\n🥗 12:00 — Lunch with manager\n\n👋 2:00 — Team introductions\n\n💬 3:30 — 1:1 with your manager\n\n🎉 5:00 — Done! Head home"
&#x20;           }
&#x20;         ]
&#x20;       }
&#x20;     ],
&#x20;     "format": "6,6"
&#x20;   },
&#x20;   \{
&#x20;     "columns": \[
&#x20;       \{
&#x20;         "blocks": \[
&#x20;           \{
&#x20;             "type": "CONTENT",
&#x20;             "height": "stretch",
&#x20;             "title": "💛 Your People",
&#x20;             "content": "👤 Your manager — emails you 48 hours before\n\n🤝 Your buddy — Slacks you day one\n\n💼 People team — people\@charthop.com\n\n💻 IT support — it\@charthop.com\n\n🩺 Benefits help — benefits\@charthop.com"
&#x20;           }
&#x20;         ]
&#x20;       },
&#x20;       \{
&#x20;         "blocks": \[
&#x20;           \{
&#x20;             "type": "CONTENT",
&#x20;             "height": "stretch",
&#x20;             "title": "🎁 What's Waiting",
&#x20;             "content": "💻 A pre-configured MacBook Pro\n\n⌨️ Magic Mouse + Keyboard\n\n🎧 Noise-cancelling headphones\n\n👕 ChartHop welcome swag\n\n💌 A handwritten note from your manager"
&#x20;           }
&#x20;         ]
&#x20;       }
&#x20;     ],
&#x20;     "format": "6,6"
&#x20;   }
&#x20; ]
}
:::

## Example 4:

![](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/EEy9SeBtx5R1qXrbgRKMq_image.png)

### What to paste:

:::BlockQuote{indent="1"}
\{
&#x20; "rows": \[
&#x20;   \{
&#x20;     "columns": \[
&#x20;       \{
&#x20;         "blocks": \[
&#x20;           \{
&#x20;             "type": "CONTENT",
&#x20;             "content": "═══════════════════════════════════════\n             WELCOME TO CHARTHOP\n═══════════════════════════════════════\n\nYou start Monday. This page tells you everything you need to know — and nothing you don't.\n\n→ → →   onboarding\@charthop.com   ← ← ←"
&#x20;           }
&#x20;         ]
&#x20;       }
&#x20;     ],
&#x20;     "format": "12"
&#x20;   },
&#x20;   \{
&#x20;     "columns": \[
&#x20;       \{
&#x20;         "blocks": \[
&#x20;           \{
&#x20;             "type": "CONTENT",
&#x20;             "height": "stretch",
&#x20;             "title": "▎ THE BASICS",
&#x20;             "content": "┌─────────────────────────┐\n│  WHEN  →  Monday, 9 AM  │\n│  WHERE →  Boston Office     │\n│  BRING →  Government ID │\n│  WEAR  →  Whatever       │\n└─────────────────────────┘\n\nThe front desk will be expecting you."
&#x20;           }
&#x20;         ]
&#x20;       },
&#x20;       \{
&#x20;         "blocks": \[
&#x20;           \{
&#x20;             "type": "CONTENT",
&#x20;             "height": "stretch",
&#x20;             "title": "▎ THE PEOPLE",
&#x20;             "content": "┌─────────────────────────────┐\n│  MANAGER →  Emails you Fri  │\n│  BUDDY   →  Slacks you Mon  │\n│  PEOPLE  →  Always around   │\n└─────────────────────────────┘\n\nThe People team lives at people\@charthop.com. They answer fast."
&#x20;           }
&#x20;         ]
&#x20;       }
&#x20;     ],
&#x20;     "format": "6,6"
&#x20;   }
&#x20; ]
}
:::

## Example 5:&#x20;

![](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/UP9Ge_5cJVlPywFwAlE4s_image.png)

### What to paste:&#x20;

:::BlockQuote{indent="1"}
\{
&#x20; "rows": \[
&#x20;   \{
&#x20;     "columns": \[
&#x20;       \{
&#x20;         "blocks": \[
&#x20;           \{
&#x20;             "type": "CONTENT",
&#x20;             "content": "📖 The ChartHop Glossary\n\nA dictionary for your first week. Look up anything that confuses you. Ignore the rest.\n\nNot here? Ask your buddy. Not sure who your buddy is? See B."
&#x20;           }
&#x20;         ]
&#x20;       }
&#x20;     ],
&#x20;     "format": "12"
&#x20;   },
&#x20;   \{
&#x20;     "columns": \[
&#x20;       \{
&#x20;         "blocks": \[
&#x20;           \{
&#x20;             "type": "CONTENT",
&#x20;             "height": "stretch",
&#x20;             "title": "A — D",
&#x20;             "content": "ALL-HANDS\nThe weekly company meeting, Fridays at 11.\n\nBUDDY\nThe person assigned to answer your dumb questions for 30 days. They'll Slack you Monday.\n\nCOMP\nShorthand for compensation. We talk about it openly.\n\nDOGS\nWelcome at lunch. Not in meetings."
&#x20;           }
&#x20;         ]
&#x20;       },
&#x20;       \{
&#x20;         "blocks": \[
&#x20;           \{
&#x20;             "type": "CONTENT",
&#x20;             "height": "stretch",
&#x20;             "title": "E — L",
&#x20;             "content": "EQUITY\nYou have some. Details in your offer letter.\n\nFRIDAYS\nMeeting-light by default. Protect them.\n\nGOAL\nSet quarterly. Discussed in 1:1s.\n\nI-9\nThe form that proves you're allowed to work here. Bring ID Monday.\n\nLUNCH\nYour manager pays on day one."
&#x20;           }
&#x20;         ]
&#x20;       },
&#x20;       \{
&#x20;         "blocks": \[
&#x20;           \{
&#x20;             "type": "CONTENT",
&#x20;             "height": "stretch",
&#x20;             "title": "M — Z",
&#x20;             "content": "MANAGER\nYour first 1:1 is Monday at 3:30.\n\nPTO\nUnlimited. 15-day minimum. We mean both.\n\nSLACK\nWhere most work conversations happen.\n\nSWAG\nIn the welcome box. The hoodie is the good one.\n\nWFH\nFine, common, supported. Just tell your team."
&#x20;           }
&#x20;         ]
&#x20;       }
&#x20;     ],
&#x20;     "format": "4,4,4"
&#x20;   }
&#x20; ]
}
:::

## Want to tweak the content?&#x20;

**Block types**

- CONTENT&#x20;

**Block properties**

- type — required
- title — optional, renders as a bolded heading above content
- content — the body text
- height — accepts "stretch" (matches sibling block heights) or a number like 200 (fixed pixel height)

**Layout**

- Format controls column widths within a row, using a 12-column grid
  - "12", "6,6", "4,4,4"
  - &#x20;"3,3,3,3"

**Text formatting in content**

- Plain text ✅
- Line breaks via \n ✅
- Numbered lists via 1. 2. ✅
- Bullet lists via - ✅
- Emojis ✅
- Email addresses auto-link ✅

[title] Refreshed Profile Page
[path] Labs/

:::hint{type="info"}
This feature is currently in Beta. We're excited for you to try it and would love your feedback. Send it to the ChartHop team or directly to [product-feedback@charthop.com](mailto\:product-feedback@charthop.com).

### How to set up a Beta Feature

1. From the left sidebar, select **Admin**, then select **Labs**.
2. Use the switch to toggle on the feature, then press the **Save settings** button.
3. Read below for additional setup instructions and context about what will be activated when you save settings.
:::

## How to add your branding

To update your organization's branding:

1. Navigate to the **Admin > General**
2. Find the **Branding** header
3. Add in your brand colors and logos

**If you want to find your company's branding, we recommend you:**

1. Check your intranet, internal resources or your marketing team.
   1. Ask for *"A brand background color and a logo that would look good on top of that color. For example, a dark purple background and a white logo."*
2. Check your company website for a brand guidelines page.
3. Check your company LinkedIn or social media page for square logos. Right-click and "Save image as" then upload that image.
4. Search for your company on [Brandfetch](https://brandfetch.com/).

### Branding recommendations

**Primary brand color** — This will be used as a background on the home page and mobile app. We suggest selecting a brand color that is darker and will look good as a compliment to your logo.

**Secondary brand color** — This color is currently not used by default, but more options of how to use this color will come in the future.

**Square logo** — This logo will appear in the top right corner of your ChartHop account and many other places. We suggest you add a logo where a color other than white takes up the entire square. Circular logos or logos with clear backgrounds are not recommend.

**Horizontal logo** — This logo will primarily be used set against your primary brand color so make sure they work together well. We recommend a logo with a transparent background. For example, the white ChartHop logo set against dark purple.

## How to add branding to the profile page

After you have added your branding in settings, you will want to turn on the **Refreshed Profile** toggle in **Admin > Labs**.

### Profile Example

![](https://api.archbee.com/api/optimize/zxjhb7-DqnuzAP-lru1l3-XD9_VUKxdRhH5yUhcXBB9-20250314-185438.png)

[title] Calibrations
[path] Labs/

:::hint{type="warning"}
This feature is currently in Alpha. Be one of the first customers to try it! Please share any feedback with the ChartHop team.&#x20;

### How to setup a Alpha Feature

1. Contact [ChartHop support](mailto\:support@charthop.com) or your CSM if you have one. They can activate the feature for you.&#x20;
2. Read below for setup instructions and context on how the feature will work.
:::

# Overview

Calibrations let you compare and align ratings across your organization by meeting with different groups- like a department or team- to review and adjust employee assessments together.

## What are calibration views?

When you click the **Calibration** tab in a performance review, you land on a list of views. Each view is a focused workspace showing the employees and data relevant to a specific calibration meeting. For example, one view for Sales, another for Engineering, another for your direct reports.

Every review starts with two default views:

- **Full team overview**: every employee in the review. This works exactly like the calibration screen did before, so reviews already running aren't affected.
- **My Team**: employees who roll up to you.

![](https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/zQirnGZaiC0fTJIbbATf8_image.png)

### Set up your views before the meeting

Create views for each calibration meeting you'll run. We recommend doing this before your sessions start so you can simply click to load the right view during each meeting. Anyone who is an OWNER or EDITOR of a **performance review** can create calibration views.

### Create a view

1. From the view list, click **New View**.
2. Choose a filter to define which employees appear (for example, department\:Sales or under\:jsmith).
3. Pick the columns you want to display, like manager rating, pre-calibrated value, and compensation band.
4. Choose who you want to share that view with.
5. Name the view and save it.

Views are data sheet views, so you can sort, filter, and adjust columns the same way you do elsewhere in ChartHop.

### Edit, duplicate, and delete views

- Open a view and adjust its filter, columns, or name, then save your changes.
- Duplicate a view to use it as a starting point for a new audience.
- Select multiple views from the list to delete them in bulk.

## Share a view

Share a view with the people running calibration sessions with you, like department heads or calibration facilitators. Sharing supports two access levels:

- **Owner**: can change the view's name, filter, and who it's shared with.
- **Limited viewer**: can open and work in the view, but can't change the name, the filter, or the share list.

### Sharing a view doesn't grant data access

View sharing controls who can open the view. It doesn't change what anyone can see or edit in ChartHop. If someone doesn't have permission to edit an employee's review responses, sharing a calibration view with them won't change that. Set up the appropriate access roles for anyone who needs to make calibration edits.

## Calibration-only access

You can share a calibration view with someone who isn't a participant in the review itself. When they open the review, they'll see the review's name and only the calibration views shared with them-nothing else from the review.

This is useful for calibration facilitators or leaders who need to run a session without access to the full review.

## Data in your calibration view

The calibration view combines ChartHop fields and data from forms submitted as part of this review. Unlike the data sheet, this view pulls data that hasn't been released yet, allowing you to run calibrations before ratings go live.

Only employees with submitted responses appear in the view. If you don't see someone listed, check the Form responses sheet to confirm their review form was completed.

### Default columns

- Person
- Title
- Department
- Compensation band
- All single-select, multi-select, or numeric scale questions from forms used in the review (for example, "Manager Review" or "Self Rating")
- When multiple people submit the same form about one person (like peer reviews), all values appear in the same cell

### Add more columns

You can add any additional ChartHop fields, like Manager, Tenure, or Last Promotion Date.

### Choose which fields are editable

By default, all form questions and ChartHop fields in your view are editable during calibration. You can highlight the columns you want calibrators to focus on or change during this cycle.&#x20;

Click the **settings** icon in any column header to select what fields you want highlighted.&#x20;

### Smart calculations

Any smart calculations or smart bucket fields that use fields updated during the review will reflect the new data.

## Run your calibration meeting

1. Everyone invited to the meeting can open the calibration view shared with them.
2. Discuss ratings and make adjustments as a group.

## View and edit form responses

During calibration, you may need to drill into the specific responses submitted for an employee.

1. Click the **expand** icon in a person's row to see their form responses.
2. View which responses have been approved or released.
3. If you have access, you can approve or release directly from this view.

To update a rating or other data, click the expand icon, find the form with the rating, and edit it. Note that any form edits will show as edited by the person who made the change. If you want to avoid displaying an admin edit, have the original submitter make the change instead.

![](https://archbee-image-uploads.s3.amazonaws.com/zxjhb7-DqnuzAP-lru1l3-z5c136gCUsKefA7goinM--20250212-154517.png "View responses")

## Download a view as a CSV

Export any calibration view to a CSV to work with the data offline or share a snapshot outside ChartHop. Open the view and click the download option in the toolbar.

## FAQs

**Will this change anything for reviews we're running right now?** No. The Full team overview view is the same calibration experience you had before. Nothing about existing functionality changed.

**Who can create views?** Anyone who has OWNER or EDITOR access in a review can create views. What they can see and edit inside a view is still governed by their ChartHop permissions.

**Can a limited viewer edit employee responses?** Only if their ChartHop permissions already allow it. The limited viewer role restricts changes to the view itself, not calibration edits.

**Do I still need to use browser bookmarks?** No. Views are now saved in ChartHop, so you don't need browser bookmarks anymore. Just create your views in advance and click to load them during your meetings.&#x20;

:::hint{type="info"}
[Modules](https://www.charthop.com/pricing/)**:&#x20;**<font color="#000000">HRIS | </font>Engagement | Goals | **Performance** | <font color="#000000">Compensation Reviews | </font>Headcount Planning
:::




[title] Leveraging table data
[path] Labs/Untitled/

# Sales Profile Tab: Setup Guide with Salesforce

This profile tab displays a rep's sales performance — win rates, closed ARR, and quota attainment — pulled live from an `opportunity` table.

## Prerequisites

### Opportunity Table

You need a table named `opportunity` in your ChartHop account with the following fields:

| Field               | Type            | Description                                                                                                               |
| ------------------- | --------------- | ------------------------------------------------------------------------------------------------------------------------- |
| `owner`             | Person          | The rep who owns the opportunity                                                                                          |
| `name`              | Text            | Opportunity/company name                                                                                                  |
| `stage`             | Text            | Deal stage (e.g. "Closed Won", "Closed Lost")                                                                             |
| `arr`               | Currency/Number | Annual Recurring Revenue                                                                                                  |
| `closeDate`         | Date            | Expected or actual close date                                                                                             |
| `contractStartDate` | Date            | Optional. When the contract starts; used as the primary close date for attainment calculations, falls back to `closeDate` |

### Closed Stage Convention

The template uses `stage:closed` to find all closed deals regardless of outcome (won or lost). Make sure your closed stages are tagged or named consistently so
this filter works. Deals with `stage="Closed Won"` are counted separately for win rate.

### Quota Field on the Person

Each rep must have a `quota` field on their person record. This is used for attainment calculations. The template uses `asOf()` to look up what their quota was
in a past quarter.

## What It Shows

- **This Quarter** — Win rate, closed won logo count and ARR, and quota attainment for the current fiscal quarter.
- **Last Quarter** — Same metrics for the previous fiscal quarter, using `asOf()` to retrieve the rep's quota at that time.
- **All Time by Quarter** — A summary table of logos won, ARR, quota, and attainment % for every quarter with at least one closed won deal.
- **All Time Logos Won** — A full list of every closed won deal, sorted by ARR descending.

## How to Add the Tab

1. In ChartHop, go to **Profile** settings and create a new custom tab.
2. Set the tab to use a **Rich Text / Template** field type.
3. Paste the template code into the editor.
4. Customize as needed (see below).

## Customization

### Deal links

All opportunity names link to a shared Google Sheet. To update the destination, replace the URL directly in the template:

````liquid
<a href="YOUR_GOOGLE_SHEET_URL">{{opp.name}}</a>

Extend the quarter date list

The all-time quarterly breakdown uses a hardcoded array of quarter start dates. Add future quarters by appending to quarterDates:
{% assign quarterDates = ['2019-07-01', ..., '2027-04-01'] %}
Each date should be the first day of a fiscal quarter.

Change the closed stage filter

If your closed stages use different naming, update the stage:closed filter. To use explicit stage names instead:
table.opportunity.find{owner=person and (stage="Closed Won" or stage="Closed Lost") and ...}

Use contractStartDate vs closeDate

The template prefers contractStartDate for quarterly bucketing and falls back to closeDate:
(contractStartDate ?: closeDate) >= fiscalQuarterStart()
If your team only tracks closeDate, you can simplify to just closeDate throughout.

---
Key Template Functions

┌───────────────────────────────────────────┬────────────────────────────────────────────────────────┐
│                 Function                  │                      What it does                      │
├───────────────────────────────────────────┼────────────────────────────────────────────────────────┤
│ fiscalQuarter()                           │ Returns the current fiscal quarter number              │
├───────────────────────────────────────────┼────────────────────────────────────────────────────────┤
│ fiscalQuarterStart() / fiscalQuarterEnd() │ Start and end dates of a fiscal quarter                │
├───────────────────────────────────────────┼────────────────────────────────────────────────────────┤
│ date("-3m")                               │ A date 3 months in the past                            │
├───────────────────────────────────────────┼────────────────────────────────────────────────────────┤
│ asOf(date, { field })                     │ Returns the value of a field as it was on a given date │
├───────────────────────────────────────────┼────────────────────────────────────────────────────────┤
│ table.opportunity.find{...}               │ Queries the opportunity table with filters             │
├───────────────────────────────────────────┼────────────────────────────────────────────────────────┤
│ .count() / .sum{field}                    │ Aggregates on a result set                             │
├───────────────────────────────────────────┼────────────────────────────────────────────────────────┤
│ .sortDesc{field}                          │ Sorts results by a field descending                    │
├───────────────────────────────────────────┼────────────────────────────────────────────────────────┤
│ formatPercent() / formatDate()            │ Formatting helpers                                     │
├───────────────────────────────────────────┼────────────────────────────────────────────────────────┤
│ ```                                       │                                                        │
└───────────────────────────────────────────┴────────────────────────────────────────────────────────┘
````


[title] Collaborators
[path] ChartHop by ChartHop/Compensation Planning/

## Overview

Collaborators were designed with **HR Business Partners** in mind. They allow a customer to give a specific person access to one or more managers' pods in the cycle — so they can view, edit, and potentially submit on behalf of those managers.

**Example:** An HRBP assigned to the Engineering department gets collaborator access to all Engineering managers' pods, so they can assist or act on their behalf during the cycle.

## The Super User Recommendation

A common misconception: customers often assume that being an **Owner** of the cycle means they can edit anyone at any time. This is not true. Cycle ownership allows you to pause, conclude, and edit settings — but it does not grant blanket edit access to all pods.

**The only way to guarantee a user can edit anyone at any time is to make them a collaborator on the entire tree.**

:::BlockQuote
**Best practice:** At least one cycle admin should hold all three roles simultaneously — **Owner**, **Final Approver**, and **Collaborator on everyone**. This makes them the effective "superuser" of the cycle.
:::

## Assignment Options

There are three options for how collaborators are assigned. **Whichever option you choose locks upon launch** and cannot be changed while the cycle is live.

### Option 1: No Collaborators

Not recommended. At minimum, you need at least one admin as a collaborator on everyone (see super user recommendation above). Avoid this option.

### Option 2: Yes — Same Collaborators for Everyone

The simplest option. Add collaborator names at the top and they are automatically assigned to every manager in the tree. Great for cycles where a small group of admins should have visibility across the whole org.

**Things to note with this option:**

- You cannot assign a collaborator to the CEO/head of org — that's what Final Approvers are for. Final Approvers are effectively collaborators on the top of the tree.
- **You cannot collaborate on yourself.** If an HR admin is also a reviewer in the tree, they will not see collaborator-only fields in their own pod. This is a minor edge case but worth knowing.

### Option 3: Yes — Different Collaborators for Different Parts of the Org

Use this when collaborators are assigned based on a specific attribute like department, location, or team. ChartHop will surface a field selector — choose the field you want to assign by (must be a single-select or enumerated field, not a free-text field), and it will list all the possible values.

For each value (e.g., each department), you assign a collaborator. ChartHop then looks through every reviewer and approver in the tree and assigns that collaborator to any manager who has at least one eligible employee with that attribute in their pod.

**Example:** Assigning Ace to Marketing — ChartHop finds every manager with at least one Marketing employee in their pod and makes Ace a collaborator on them.

⚠️ Watch Out at Higher Org Levels

As you go higher up the org chart, managers often have multiple departments, locations, or teams under them. When a collaborator is assigned to a manager, **they see everyone that manager sees** — there is no way to say "assign them to this manager but hide these people."

**Example:** If Engineering and Product both roll up to the same VP, assigning an Engineering collaborator to that VP means they'll also see the Product employees in that VP's view.

Always **double-check the highest levels of the tree** with the customer to confirm they're comfortable with the full scope of what each collaborator will see. Sometimes the right call is to manually remove a collaborator from a specific high-level manager rather than have them see everyone under that person.

Manual Overrides#

Regardless of how collaborators are assigned programmatically, you can always click on any individual manager in the tree and manually add or remove a collaborator on a one-off basis. This is useful for handling exceptions after the bulk assignment logic has run.

## Collaborator Permissions

There are three permission levels for collaborators:

- **View Only** — can see the pod but cannot make changes
- **Edit** — can make edits to that manager's pod
- **Edit & Submit** — can edit and also submit on the manager's behalf

**Important:** The permission you select applies to **all collaborators** — you cannot have some collaborators on view-only and others on edit. It is a single setting for everyone.

We recommend **Edit** or **Edit & Submit** at minimum. View-only is not useful for the super user admin who needs to be able to act on anyone's behalf.

**This permission setting locks upon launch** and cannot be changed while the cycle is live.

## Post-Launch Behavior

Once the cycle is launched:

- The **assignment option** (None / Same for Everyone / Different by Group) is locked
- The **permission level** is locked
- The **bulk assignment fields** are locked

However, you **can still add and remove individual collaborators** while the cycle is live. To do so:

1. **Pause the cycle**
2. Navigate to the Collaborators section
3. Click on the specific manager in the tree and manually add or remove a collaborator
4. **Resume the cycle**

The bulk configuration is read-only after launch, but one-off changes at the manager level remain available throughout the cycle.

[title] Budget Pools
[path] ChartHop by ChartHop/Compensation Planning/

## Overview

Budget Pools allow you to configure spending budgets within a comp cycle. Budgets are **optional** — a cycle can have none, one, or multiple budget pools. Each budget is independent and can be configured with its own scope, calculation logic, and visibility rules.

Common examples: a base salary increase budget, a promotion budget, a bonus budget, an equity budget.

## Budget Scope: Who Does the Budget Apply To?

When creating a budget pool, you first define which employees it applies to. The default is all eligible employees, but you can narrow it:

- By department, location, or team
- Using a custom CQL filter (e.g., only employees where a "Promotion" field is set to Yes, or only employees outside the USA)

If an employee does not apply to a budget:

- They do **not** contribute to that budget's total
- Any raise they receive does **not** count against that budget's spend

Scope affects both the total and the allocation simultaneously.

## Budget Currency

You can set a default display currency for the budget. In practice, this almost never needs to be changed from the org default (USD for most orgs).

ChartHop's currency logic:

- If all employees in a pod are paid in the **same non-USD currency**, the budget defaults to that currency
- If there are **mixed currencies** in a pod, the budget always defaults to **USD**

Managers can also switch the budget currency themselves at any time using the currency dropdown within the cycle view.

## Budget Visibility: Who Can See the Budget?

By default, anyone with an employee who applies to the budget can see it. If no employees in your pod apply to a budget, that budget simply won't appear for you.

You can restrict visibility further:

- **By role** — e.g., only Final Approvers, Owners, and Collaborators see it (reviewers/approvers do not)
- **By specific people** — name specific individuals who can see the budget
- **Custom filter** — any CQL-based rule
- **Role + filter combination** — e.g., Final Approvers, Owners, and Collaborators, plus anyone in the tree matching a specific filter

## How Budget Allocation is Tracked

This setting tells ChartHop how to count spend against the budget — i.e., when someone receives a raise or change, how much does that count toward the budget?

### Option 1: Change and Track Field

Select a field (e.g., Base Annualized). ChartHop calculates:

**New value of the field − Current value of the field = Amount counted against the budget**

For a straightforward base salary budget, this works well.

:::BlockQuote
**Always use Base Annualized (not Base Comp)** when tracking base salary budgets. Using Base Comp on hourly employees would count their hourly rate (e.g., $25) instead of their annualized salary, producing meaningless budget numbers.
:::

### Option 2: Custom Formula

Write a formula directly to define what counts against the budget. This is the most flexible option and is now the recommended approach for complex scenarios.

**Examples:**

- Reference a specific field in the cycle: whatever that field's value is counts as the spend
- Combine fields: 3% of new base + one-time bonus amount
- Use ternaries for conditional logic: if department is Marketing, count 4% of new base; otherwise count 3%

This allows precise control over what gets counted per employee without relying on the change-minus-current calculation.

## How the Budget Total is Calculated

This section defines the total pool of money available. There are a few approaches:

### Calculated Budget (Same for Everyone)

The most common setup. Define a percentage or fixed amount per employee and ChartHop sums it up across everyone who applies to the budget.

**Examples:**

- 3.5% of Base Annualized for every eligible employee
- $2,000 flat per eligible employee
- Custom formula if the logic is more complex

### Calculated Budget (Varies by Field Value)

The budget percentage or amount varies based on one or more field values, such as department, location, or performance rating — all within a single budget pool.

**Examples:**

- Engineering: 4% of base | Marketing: 2% of base | People: 3.5% of base
- Outstanding rating: 5% | Meets Expectations: 3% | etc.
- Multiple fields combined: department + location (e.g., Chicago + CX = 5%, Dallas + CX = 3%)

This is very common and avoids needing to create a separate budget pool per department or rating tier.

### Static Budget (Based on Reviewer Pods)

Use this when your finance team has defined a fixed dollar amount per manager rather than a formula-based total.

You manually enter the budget amount for each reviewer/approver in the tree. There is no import for this — it must be entered manually.

:::BlockQuote
**Important:** When entering budgets for higher-level approvers, remember they **inherit** the budget totals from everyone submitting to them. If you want a manager to have $10,000 of their own to allocate on top of what rolls up to them, their entered budget must equal $10,000 **plus** the sum of all budgets submitting up to them. You need to account for rollups all the way up the tree.
:::

This method is the most flexible (any number goes) but the most manual.

## The Calculate Button

Every budget pool has a **Calculate** button that generates a preview of the budget — showing the total and how much each reviewer/approver would see based on the current configuration. Use this to:

- Verify the setup is working as expected before launch
- Help customers sanity-check totals against their finance targets
- Quickly iterate on percentages if the total is coming in too high or low

## Multiple Budget Pools

A cycle can have multiple budget pools, each configured independently with its own scope, calculation logic, visibility, and label. Common combinations include a base increase budget, a promotion budget, a bonus budget, and an equity budget running simultaneously within the same cycle.

[title] .sumPercent()
[path] Carrot reference/Methods/

Sums each grouped item in a [Sequence](docId\:JG4itlQWafzLpArttFo67) or [List](docId\:xWH_cUkHj9waqaEfb7H71), and returns each group's sum, as as a percentage of the overall total sum of all items.

Typically this is only used together with a [.groupBy()](docId:-ljO-INA1ggCdfQJrWvAf)  expression, and returns an AggregatedResult that contains each group and its percentage of the total.

(If used without a groupBy, it will always return 100%)

### Syntax

`.sumPercent{expression}`

- Evalutes `expression` on each item in the Sequence or List, then returns its percentage of the overall total

### Examples

- `[1, 2, 3, 4, 5].groupBy{it % 2 ? "Odd Numbers" : "Even Numbers"}.sumPercent{it}` will return an AggregatedResult of "Odd Numbers" = 60%, "Even Numbers" = 40% (because (1 + 3 + 5) / 15 = 60%, and (2 + 4) / 15 = 40%)
- `db.job.find().groupBy{department}.sumPercent{baseComp.annualized}` returns all departments in the organization, grouped by by what percentage of total annualized base comp base is paid to that department.


[title] Quick Reference: Common Filters
[path] Carrot reference/

Carrot features a list of commonly used built-in filters to help you view your data in your ChartHop organization.

### Management

A collection of filters for capturing data about managers and their direct reports.

| **Name**          | **Function**                                                                                  |
| ----------------- | --------------------------------------------------------------------------------------------- |
| `is:person`       | Matches by people only (not jobs).                                                            |
| `is:ic`           | Matches by people if they are an "individual contributor" (does not have any direct reports). |
| `is:manager`      | Matches by people who have direct reports.                                                    |
| `is:grandmanager` | Matches by people who have direct reports who are managers.                                   |

### Job and hire status

A collection of filters for capturing job and hiring status data.

| **Name**                      | **Function**                                                                                                                                           |
| ----------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `is:open`                     | Matches if the job state is "open".                                                                                                                    |
| `is:hire`                     | Matches any job state of "open" or "depart" to denote that the job is currently hiring. The filter used for the open roles view on the **Data Sheet**. |
| `is:start` or `is:starting`   | Matches people who have an `announceDate` that is today or earlier, and a `startDateOrg` that is in the future.                                        |
| `is:depart` or `is:departing` | Matches if the job state is "depart" for people who departed during the defined period.                                                                |
| `is:former`                   | Matches all people with a `endDateOrg` during the defined period.                                                                                      |
| `is:current`                  | Matches all people with a `startDateOrg` that is in the past and no `endDate`.                                                                         |
| `is:recentTransfer`           | Calculates the number of jobs that were filled via an internal transfer based on the end of the selected date range and interval.                      |
| `is:recentHire`               | Calculates the number of jobs that were filled by a hire at the end of the selected date range and interval.                                           |


[title] .min()
[path] Carrot reference/Methods/

Returns the smallest value of a [Sequence](docId\:JG4itlQWafzLpArttFo67) or [List](docId\:xWH_cUkHj9waqaEfb7H71), optionally evaluating an expression.

### Syntax

`.min()`

- Returns the smallest numeric value in the Sequence or List.

`.min{expression}`

- Returns the smallest value, after evaluating the Carrot expression on each element of the Sequence or List.

### Examples

- `[1, 2, 3].min()` returns `1`
- `[1, 2, 3].min{it * 3}` returns `3`
- `db.job.find{dept:engineering}.min{baseComp}` returns the smallest base compensation in the Engineering department.


[title] Creating a dashboard of top submitters
[path] Carrot reference/Examples/

**Problem:** you want a dashboard of, "who have submitted the most Shoutouts over a period of time.

**Solution**: use the [findFormTasksByAssessment()](docId\:V9Gsmlazj0bqw_RJRKSsh)&#x20;

[title] .max()
[path] Carrot reference/Methods/

Returns the largest value of a [Sequence](docId\:JG4itlQWafzLpArttFo67) or [List](docId\:xWH_cUkHj9waqaEfb7H71), optionally evaluating an expression.

### Syntax

`.max()`

- Returns the largest numeric value in the Sequence or List.

`.max{expression}`

- Returns the largest value, after evaluating the Carrot expression on each element of the Sequence or List.

### Examples

- `[1, 2, 3].max()` returns `3`
- `[1, 2, 3].max{it * 3}` returns `9`
- `db.job.find{dept:engineering}.max{baseComp}` returns the highest base compensation in the Engineering department.


[title] .mean()
[path] Carrot reference/Methods/

Returns the mean average value of a [Sequence](docId\:JG4itlQWafzLpArttFo67) or [List](docId\:xWH_cUkHj9waqaEfb7H71), optionally evaluating an expression.

### Syntax

`.mean()`

- Returns the mean average numeric value in the Sequence or List.

`.mean{expression}`

- Returns the mean average, after evaluating the Carrot expression on each element of the Sequence or List.

### Examples

- `[1, 2, 3, 4].mean()` returns `2.5`
- `[1, 2, 3, 4].mean{it * 3}` returns `7.5`
- `db.job.find{dept:engineering}.mean{baseComp}` returns the mean average base compensation in the Engineering department.


[title] ChartHop for Developers
[path] /

Search the [ChartHop Help Center](https://docs.charthop.com/) by pressing Ctrl+K (PC) or Command-K (Mac).



::::LinkArray{contentSource="CUSTOM"}
:::LinkArrayItem{headerType="COLOR" headerColor="#c8acff"}
[Developer basics](docId\:VZ7v6irFqTzx_3hPXSbzr)&#x20;
:::

:::LinkArrayItem{headerType="COLOR" headerColor="#c8acff"}
[Events](docId:7O2axxT39WhRmiZgBTAud)&#x20;
:::

:::LinkArrayItem{headerType="COLOR" headerColor="#c8acff"}
[Syncing data to/from ChartHop](docId:8unq_cAtytBhm5ne5iEjb)&#x20;
:::
::::


[title] August 2022 release notes
[path] Release Notes/Release notes 2022/

## 08.29.22

***

## 🎁  <font color="#2166ae">**Added**</font> &#x20;

### New features

- Added the ability for the `recruiter` and `hireMgr` fields to persist after the person has been hired. You can use these fields to identify people hired by a specific recruiter.&#x20;
- For increased transparency, the Job History, Personal History, History, and Org Chart history more clearly indicate when ChartHop has made changes to your organization’s data.&#x20;
- Enum data types with 0 values are treated as a numeric 0 and considered false.

## <font color="#eb144c">**⚒  Fixed**</font>

- Fixed an issue where the list of saved views in the Data Sheet remained hidden when the browser window was resized and increased.
- Fixed an issue where the date picker continued to display even after you clicked outside the focus area.&#x20;
- Entering an Other Location address and then toggling between the Office and Home tabs no longer deletes the Other Location address in the **Set work location** dialog.&#x20;
- Changing compensation bands within a Compensation Planning scenario no longer causes the horizontal scroll bar to jump to the far left.&#x20;
- Fixed an issue where the columns in an exported .csv did not match the order of the columns in the Data Sheet.

## 08.15.22

***

## 🎁  <font color="#2166ae">**Added**</font> &#x20;

### New features

- ChartHop forms support the use of Carrot Query Language templates. 
- Added the `historicBackfill` field, with which users can view all previous backfills for a position on the Job history page.  
- ChartHop built-in and custom fields support percentage data types expressed in decimals as well as whole numbers. 
- Launched expanded functionality in the Currencies & costs tab in Org settings to allow you to better manage multiple currencies, view currency  rates, and set custom rates.

### Integrations

- The ADP app syncs the date of compensation changes into ChartHop.  
- Updated Slack app permissions require an app reinstall in order to send direct messages.&#x20;

## <font color="#eb144c">**⚒  Fixed**</font>&#x20;

- Fixed an issue where departure status (voluntary or involuntary) as well as departure reason was not synced from the ADP app. 
- Fixed an issue that caused some payroll app syncs to fail. 
- Addressed issues that caused some ATS app syncs to display in multiple rows and ATS .csv exports to incorrectly appear on the Sync History page. 
- Fixed an issue that caused Greenhouse app syncs to use the job creation date instead of the sync date.
- Addressed multiple issues where field rounding settings did not save correctly. 
- The correct currency options appear when editing fields on the Data Sheet. 
- Org editors and Sensitive data viewers can use *View as* on other user profiles.

## 08.01.22

***

## 🎁  <font color="#2166ae">**Added**</font> &#x20;

### New integrations

- Launched our first FP\&A integration, our Workday Adaptive Planning app.
- Continued support for Rippling integration. Deprecated the legacy Rippling app and added a new one.

### Enhancements

- Ability to ensure imported data matches a ChartHop field before importing
- Added the ability to ensure data matching between import fields and ChartHop fields before importing data.
- Added ability to clear date and percentage field values from the Data Sheet page and Edit job dialog.
- Added the ability to configure money field values to display as either rounded or exact.
- Made usability enhancements for the Slack app.
- Made usability enhancements to the E\*Trade app and the Carta app.
- The right side of the About tab on the Employee Profile is divided into three areas: About Me, Personal Data, and Manager-Shared.
- Supports integrating with a Lever sandbox for easier app testing during implementation.
- Added a more intuitive status message for on-demand sync operations.

## <font color="#eb144c">**⚒  Fixed**</font>&#x20;

- Fixed an issue that caused rounding when exporting hourly compensation information.


[title] April 2022 release notes
[path] Release Notes/Release notes 2022/

## 04.25.22

***

**🎁 &#x20;**<font color="#2166ae">**Added**</font>**&#x20;&#x20;**

- The ability to use Job codes in the Greenhouse ATS App
- The ability to trigger Reconciliations both manually and automatically in the Greenhouse ATS and Lever Requisition Apps
- New and improved User management and Invite to Org features

****<font color="#eb144c">**⚒  Fixed**</font>&#x20;

- Not all fields were available in the Filter dropdown list.
- Fixed an issue that prevented saving changes to some Groups.
- OR operator was not working for some queries
- Data Sheet filters were not changing when you switched views

## 04.16.22

***

****<font color="#eb144c">**⚒  Fixed**</font>&#x20;

- Fixed an issue that disallowed special characters in the Group Name field in the Google Workspaces app.
- Fixed an issue that prevented saving changes to some Groups.

## 04.08.22

***

**🎁 &#x20;**<font color="#2166ae">**Added**</font>**&#x20;&#x20;**

- Org chart enhancements including refined zoom and Org chart node indicators
- The ability to trigger Reconciliations both manually and automatically in the Greenhouse ATS and Lever Requisition Apps
- New and improved User management and Invite to Org features

****<font color="#eb144c">**⚒  Fixed**</font>&#x20;

- Fixed an issue causing BambooHR sync not to pull the **Depart** value in ChartHop.
- Fixed a bug preventing the **Filter out Contractors** option from working in the JustWorks app.
- Saving and leaving multiple unsaved views only saves one views change.


[title] November 2021 release notes
[path] Release Notes/Untitled/

## 11.26.21

***

**🎁 &#x20;**<font color="#2166ae">**Added**</font>**&#x20;&#x20;**

- Added basic **new vesting schedule support** to ChartHop



## 11.19.21

***

**🎁 &#x20;**<font color="#2166ae">**Added**</font>**&#x20;&#x20;**

- Hid **Filter by Group** option when already filtered to **Departed Employees** to prevent filter conflict
- Added exhaustive **Charthop to Greenhouse** status mapping options
- Increased the **total number of errored records** viewable in the CSV importer



<font color="#eb144c">**⚒  Fixed**</font>&#x20;

- Fixed an issue preventing birth dates before `1/1/71` from **saving when the org date format** is `m/d/yy`
- Restored the ability for **Sensitive View (Limited Comp) Org members to add filters**
- Fixed an issue causing an **error on sync** in the E\*Trade app
- Fixed an issue causing **configuration duplicates** in Apps & Integrations
- Fixed an issue **preventing the Slack app from connecting** and sending form updates from ChartHop



## 11.12.21

***

**🎁 &#x20;**<font color="#2166ae">**Added**</font>**&#x20;&#x20;**

- Added logic that ensures new jobs created using the Greenhouse webhook always have a **start date that is in the future** if it is not provided
- Added support for **offers send outside of Lever**
- Added logic that prevents **blank ChartHop fields** from being synced to the selected ATS



****<font color="#eb144c">**⚒  Fixed**</font>&#x20;

- Fixed an issue preventing **form headers** from updating correctly
- Fixed an issue preventing **powerpoint export filters** from displaying all applicable departments
- Fixed an issue preventing the **Todo form response email** from displaying any information
- Fixed an issue preventing **hourly compensation** from showing up in the data sheet
- Fixed a bug causing the **Start Date to be inaccurate for Terminated Employees** when using the Export CSV feature from the Data Sheets module
- Fixed an issue preventing **filters applied to the Powerpoint Export** from displaying all applicable departments



## 11.05.21

***

**🎁 &#x20;**<font color="#2166ae">**Added**</font>**&#x20;&#x20;**

- Added a new **Lever Requisitions** description
- Moved the **Delighted survey** so that it doesn't block UI buttons



****<font color="#eb144c">**⚒  Fixed**</font>&#x20;

- Fixed an issue preventing **Open Jobs** from displaying on a merged Scenario
- Fixed an issue preventing the **= (equals)** operator from working for groups with codes in the Reports and Data Sheets modules
- Fixed a bug causing the **Scenarios filter** to glitch
- Fixed an issue preventing the **Embeddable Org Chart** to filter




[title] July 2022 release notes
[path] Release Notes/Release notes 2022/

## 07.18.22

***

**🎁 &#x20;**<font color="#2166ae">**Added**</font>**&#x20;&#x20;**

- Usability enhancements for identity apps
- Usability enhancements for equity apps

## 07.05.22

***

**🎁 &#x20;**<font color="#2166ae">**Added**</font>**&#x20;&#x20;**

- Added equity sync information to the sync history page
- Added ATS sync information to the sync history page

****<font color="#eb144c">**⚒  Fixed**</font>&#x20;

- Updated validation rules around max values for fields
- Fixed issues with sharing reports


[title] May 2022 release notes
[path] Release Notes/Release notes 2022/

## 05.12.22

***

**🎁 &#x20;**<font color="#2166ae">**Added**</font>**&#x20;&#x20;**

- The functionality of the Base Comp field has been changed in the import spreadsheet tool and will now support yearly and annual compensations.
  - **Annual Example:** 100,000 or 100,000/year
  - **Yearly Example**: 25.75/hour&#x20;
- When you perform a one-time sync from a payroll app, you can choose to sync to your primary org, an scenario, or to a new scenario.

****<font color="#eb144c">**⚒  Fixed**</font>&#x20;

- Issues completing data import for Gusto (ChartHop Basic)
- Category doesn't persist in the column chooser
- Issues completing data import for Gusto (ChartHop Basic)
- 'Add Rule' getting cut off when adding multiple filters depending on zoom/window size

## 05.03.22

***

**🎁 &#x20;**<font color="#2166ae">**Added**</font>**&#x20;&#x20;**

- User access roles were updated to reduce complexity and better reflect how these roles are used. Roles were renamed and two roles were deprecated. Learn more.
  - Deprecated roles include Time Off Viewer and Personal Contact Viewer.

| **Old role**                  | **New role&#x20;**                 |
| ----------------------------- | ---------------------------------- |
| Member View                   | Employee                           |
| Member View (Limited Comp)    | Employee (Limited)                 |
| Primary Editor                | Org Editor                         |
| Owner                         | Owner                              |
| Recruiting Editor             | Recruiting Editor                  |
| Recruiting View               | Recruiter                          |
| Sensitive View                | Sensitive Data Viewer              |
| Cash Comp                     | Cash Compensation Viewer           |
| Equity Comp                   | Equity Comp Viewer                 |
| Sensitive View (Limited Comp) | Sensitive Data View (Limited Comp) |
| Technical Owner               | Technical Owner                    |



<font color="#eb144c">**⚒  Fixed**</font>&#x20;

- Org Chart sometimes does not export any employees to PowerPoint
- Attrition reports not loading
- Multiple issues on the Scenarios page where the Org Chart does not export
- Scenarios page - Error exporting org chart to PowerPoint
- In the Groups details page, can't add/assign or remove people/open jobs to that group.


[title] ChartHop Standard Terms and Conditions 
[path] Resources/

PLEASE READ THESE TERMS AND CONDITIONS (“TERMS”) CAREFULLY BEFORE PURCHASING AND/OR USING THE SERVICES OFFERED BY CHARTHOP, INC. (“CHARTHOP”).  BY SIGNING AN ORDER FORM WHICH REFERENCES THESE TERMS (AN “ORDER FORM”), YOU AND THE ENTITY YOU REPRESENT (“CUSTOMER”) ARE UNCONDITIONALLY CONSENTING TO BE BOUND BY AND TO BECOME A PARTY TO THESE TERMS (TOGETHER WITH ALL ORDER FORMS, THE “AGREEMENT”) TO THE EXCLUSION OF ALL OTHER TERMS.  THESE TERMS INCLUDE AND INCORPORATE ANY APPLICABLE ORDER FORM MUTUALLY EXECUTED BY CHARTHOP AND CUSTOMER.

1. ACCESS TO THE SERVICE
   Subject to Customer’s compliance with the terms and conditions of this Agreement (including any limitations and restrictions set forth on the applicable Order Form) ChartHop grants Customer the right to access and use the services specified in each Order Form (collectively, the “Service,” or “Services”) during the applicable Order Form Term (as defined below) for the internal business purposes of Customer, only as provided herein and only in accordance with ChartHop’s applicable official user documentation (the “Documentation”).

2. IMPLEMENTATION
   Upon payment of any applicable fees set forth in each Order Form, ChartHop agrees to use reasonable commercial efforts to provide standard implementation assistance for the Service only if and to the extent such assistance is set forth on such Order Form (“Implementation Assistance”). If ChartHop provides Implementation Assistance in excess of any agreed-upon hours estimate, or if ChartHop otherwise provides additional services beyond those agreed in an Order Form, Customer will pay ChartHop at its then-current hourly rates for consultation.

3. CUSTOMER CONTACT
   Customer will designate an employee who will be responsible for all matters relating to this Agreement (“Primary Contact”). Customer may change the individual designated as Primary Contact at any time by providing written notice to ChartHop. The Primary Contact shall designate “Owners” and “Technical Owners” who have the ability to create and distribute accounts and login credentials. Customer shall be responsible for the use and activity in connection with all such accounts.

4. SERVICE UPDATES
   From time to time, ChartHop may provide upgrades, patches, enhancements, or fixes for the Services to its customers generally without additional charge (“Updates”), and such Updates will become part of the Services and subject to this Agreement; provided that ChartHop shall have no obligation under this Agreement or otherwise to provide any such Updates. Customer understands that ChartHop may cease supporting old versions or releases of the Services at any time in its sole discretion; provided that ChartHop shall use commercially reasonable efforts to give Customer sixty (60) days prior notice of any major changes.

5. FEEDBACK
   Customer may from time to time provide suggestions, comments, or other feedback to ChartHop with respect to the Service (“Feedback”). Feedback, even if designated as confidential by Customer, shall not create any confidentiality obligation for ChartHop notwithstanding anything else. Customer shall, and hereby does, grant to ChartHop a nonexclusive, worldwide, perpetual, irrevocable, transferable, sublicensable, royalty-free, fully paid-up license to use and exploit the Feedback for any purpose.

6. OWNERSHIP
   As between the parties, ChartHop retains all right, title, and interest in and to the Services, and all software, products, works, and other intellectual property and moral rights related thereto or created, used, or provided by ChartHop for the purposes of this Agreement, including any Updates, improvements, modifications, copies, and derivative works of the foregoing. Any software which is distributed or otherwise provided to Customer hereunder (including without limitation any software identified on an Order Form) shall be deemed a part of the “Services” and subject to all of the terms and conditions of this Agreement. No rights or licenses are granted except as expressly and unambiguously set forth in this Agreement. Nothing in this Agreement will impair ChartHop’s right to develop, acquire, license, market, promote or distribute products, software or technologies that perform the same or similar functions as, or otherwise compete with any products, software, or technologies that Customer may develop, produce, market, or distribute.

7. CONFIDENTIALITY
   Each party (the “Receiving Party”) understands that the other party (the “Disclosing Party”) may disclose business, technical or financial information that is designated in writing as confidential, or is disclosed in a manner that a reasonable person would understand to be confidential (“Proprietary Information”).  Proprietary Information of ChartHop includes non-public information regarding features, functionality, and performance of the Service, and the Documentation.  Proprietary Information of Customer includes Customer Data (as defined below).  The Receiving Party agrees: (i) to take commercially reasonable precautions to protect Disclosing Party’s Proprietary Information, (ii) except as requested by Customer (including to those integration partners chosen by Customer, if any) or as otherwise permitted herein, not to disclose the Disclosing Party’s Proprietary Information to any third party other than the Receiving Party’s employees, consultants or subcontractors on a need-to-know basis and subject to confidentiality obligations at least as protective of the Disclosing Party’s Proprietary Information as those imposed herein, (iii) except in performance of the Services or as otherwise permitted herein, not to use any of Disclosing Party’s Proprietary Information, (iv) promptly notify the Disclosing Party upon discovery of any unauthorized use or disclosure of Disclosing Party’s Proprietary Information, reasonably assist the Disclosing Party to prevent further unauthorized use or disclosure, and provide the Disclosing Party with information about the incident as the Disclosing Party may reasonably request in writing, and (v) upon the Disclosing Party’s written request, at the Receiving Party’s option, either destroy or return the Disclosing Party’s Proprietary Information to the Disclosing Party, provided the Receiving Party may retain copies of the Disclosing Party’s Proprietary Information disclosed or derived hereunder in order to comply with applicable law, rule, or regulation or pursuant to internal document retention policies.  “Proprietary Information” shall not include any information that (a) is or becomes generally available to the public, (b) was in the Receiving Party’s possession or known by the Receiving Party prior to receipt from the Disclosing Party, (c) was rightfully disclosed to the Receiving Party without known restriction by a third party, or (d) was independently developed without use of any Proprietary Information of the Disclosing Party. Nothing set forth in this Agreement will prevent the Receiving Party from complying with any law, rule, regulation, court order or other legal requirement that compels disclosure of any Proprietary Information.  ChartHop reserves the right to use Customer’s name as a reference for marketing or promotional purposes on ChartHop’s website and in other communication with existing or potential ChartHop customers without the prior consent of Customer.

8. FEES; PAYMENT
   Customer shall pay ChartHop fees for the Service as set forth in each Order Form (“Fees”). All invoices issued under this Agreement are payable in U.S. dollars within the number of calendar days as specified by the Payment Term (as set forth in the applicable Order Form) from date of invoice. Past due invoices are subject to interest on any outstanding balance of the lesser of 1.5% per month or the maximum amount permitted by law. Customer shall be responsible for all taxes associated with Service (excluding taxes based on ChartHop’s net income). All Fees paid are non-refundable and are not subject to set-off.

9. RESTRICTIONS
   Except as expressly set forth in this Agreement, Customer shall not (and shall not permit any third party to), directly or indirectly: (i) reverse engineer, decompile, disassemble, or otherwise attempt to discover the source code, object code, or underlying structure, ideas, or algorithms of the Service (except to the extent applicable laws specifically prohibit such restriction), (ii) modify, translate, or create derivative works based on the Service, (iii) copy, rent, lease, distribute, pledge, assign, or otherwise transfer or encumber rights to the Service, (iv) use the Service for the benefit of a third party, (v) remove or otherwise alter any proprietary notices or labels from the Service or any portion thereof, (vi) use the Service to build an application or product that is competitive with any ChartHop product or service, (vii) interfere or attempt to interfere with the proper working of the Service or any activities conducted on the Service, (viii) bypass any measures ChartHop may use to prevent or restrict access to the Service (or other accounts, computer systems or networks connected to the Service), or (ix) use the Services for timesharing or service bureau purposes or otherwise for the benefit of a third party. Customer is responsible for all of Customer’s activity in connection with the Service, including but not limited to the use and distribution of login credentials by the Customer’s employees or agents and uploading Customer Data (as defined below) onto the Service.
   Customer represents, covenants, and warrants that Customer shall (i) use the Service in compliance with all applicable local, state, national and foreign laws, treaties, and regulations , and all compulsory industry self-regulations, whether now existing or hereafter enacted, including without limitation those related to advertising, data privacy, international communications, export and the transmission of technical or personal data, state licensing, tax reporting, UDAAP and other laws related to unfair or deceptive acts or practices, the Federal USA PATRIOT Act, the Payment Card Industry Data Security Standard Requirements, the Federal Gramm-Leach-Bliley Act, Federal Telephone Consumer Protection Act, the Federal CAN-SPAM Act, and the EU General Data Protection Regulation, as they may be amended from time to time, and (ii) not use the Service in a manner that violates any third-party intellectual property, contractual or other proprietary rights.

10. CUSTOMER DATA
    For purposes of this Agreement, “Customer Data” shall mean any data, information or other material provided, uploaded, or submitted by Customer, its employees or agents to the Service in the course of using the Service. Customer shall retain all right, title, and interest in and to the Customer Data, including all intellectual property rights therein. Customer, not ChartHop, shall have sole responsibility for the accuracy, quality, integrity, legality, reliability, appropriateness, and intellectual property ownership or right to use of all Customer Data. Customer represents and warrants to ChartHop that Customer owns all rights, title, and interest in and to the Customer Data, or that Customer has otherwise secured all necessary rights and consents in the Customer Data as may be necessary to permit the access, use and distribution thereof as contemplated by this Agreement, including all rights and consents necessary under any applicable privacy laws for ChartHop to process consumer Personal Data in accordance with this Agreement.  “Personal Data” means any information that identifies or relates to a particular individual and also includes information referred to as “personally identifiable information” or “personal information” under applicable data privacy laws, rules or regulations. ChartHop shall use commercially reasonable efforts to maintain the security and integrity of the Service and the Customer Data, including through the mechanisms and procedures described in the ChartHop Security Statement available at [https://docs.charthop.com/security-statement](https://docs.charthop.com/security-statement) (as may be updated from time to time). ChartHop is not responsible to Customer for unauthorized access to Customer Data or the unauthorized use of the Service unless such access is due to ChartHop’s gross negligence or willful misconduct. Customer is responsible for the use of the Service by any person to whom Customer has given access to the Service, even if Customer did not authorize such use. Customer agrees and acknowledges that Customer Data may be irretrievably deleted if Customer’s account is ninety (90) days or more delinquent. Notwithstanding anything to the contrary, Customer acknowledges and agrees that ChartHop may (i) internally use and modify (but not disclose) Customer Data for the purposes of (A) providing the Service to Customer, and (B) generating Aggregated Anonymous Data (as defined below), and (ii) freely use and make available Aggregated Anonymous Data for ChartHop’s business purposes (including without limitation, for purposes of improving, testing, operating, promoting and marketing ChartHop’s products and services). “Aggregated Anonymous Data” means data submitted to, collected by, or generated by ChartHop in connection with Customer’s use of the Service, but only in aggregate, anonymized form which can in no way be linked specifically to Customer or any individuals. ChartHop shall own any Aggregated Anonymous Data. ChartHop shall maintain all Customer Data for six (6) months following termination or expiration of this Agreement to enable the Customer to reference such Customer Data.  The Parties will each comply with applicable portions of the Data Protection Addendum available at [https://docs.charthop.com/data-processing-addendum](https://docs.charthop.com/data-processing-addendum)

11. THIRD PARTY SERVICES
    Customer acknowledges and agrees that the Services have the ability to operate with or use application programming interfaces (APIs) and/or other services operated or provided by third parties (“Third Party Services”). ChartHop is not responsible for the operation of any Third-Party Services nor the availability or operation of the Services to the extent such availability and operation is dependent upon Third Party Services. Customer is solely responsible for procuring any and all rights necessary for it to access Third Party Services and for complying with any applicable terms or conditions thereof. ChartHop does not make any representations or warranties with respect to Third Party Services or any third-party providers. Any exchange of data or other interaction between Customer and a third-party provider is solely between Customer and such third-party provider and is governed by such third party’s terms and conditions and privacy policies.

12. TERM; TERMINATION
    This Agreement shall commence upon the start date set forth in the first Order Form, and, unless earlier terminated in accordance herewith, shall last until ninety (90) days following the expiration of all Order Form Terms. For each Order Form, the “Order Form Term” shall consist of the Initial Term and any subsequent Renewal Terms as set forth in that Order Form. In the event of a material breach of this Agreement by either party, the non-breaching party may terminate this Agreement by providing written notice to the breaching party, provided that the breaching party does not materially cure such breach within thirty (30) days of receipt of such notice. Without limiting the foregoing, ChartHop may suspend or limit Customer’s access to or use of the Service if (i) Customer’s account is more than sixty (60) days past due, or (ii) Customer’s use of the Service results in (or is reasonably likely to result in) damage to or material degradation of the Service which interferes with ChartHop’s ability to provide access to the Service to other customers; provided that in the case of subsection (ii): (a) ChartHop shall use reasonable good faith efforts to work with Customer to resolve or mitigate the damage or degradation in order to resolve the issue without resorting to suspension or limitation, (b) prior to any such suspension or limitation, ChartHop shall use commercially reasonable efforts to provide notice to Customer describing the nature of the damage or degradation, and (c) ChartHop shall reinstate Customer’s use of or access to the Service, as applicable, if Customer remediates the issue within thirty (30) days of receipt of such notice. All provisions of this Agreement which by their nature should survive termination shall survive termination, including, without limitation, accrued payment obligations, ownership provisions, warranty disclaimers, indemnity, and limitations of liability.

13. INDEMNIFICATION
    a.	Customer: Customer shall defend, indemnify, and hold harmless ChartHop, its affiliates and each of its and its affiliates’ employees, contractors, officers, directors, suppliers and representatives from all liabilities, claims, and expenses paid or payable to an unaffiliated third party (including reasonable attorneys’ fees) (“Losses”), that arise from or relate to the Customer Data or Customer’s use of the Service.
    b.	ChartHop: ChartHop shall defend, indemnify, and hold harmless Customer, its affiliates and each of its and its affiliates’ employees, contractors, officers, directors, suppliers, and representatives from all Losses that arise from or relate to claims that the Service infringes, violates, or misappropriates any third-party intellectual property or proprietary right. The foregoing obligations of ChartHop do not apply with respect to the Service or any information, technology, materials or data (or any portions or components of the foregoing) to the extent (i) not created or provided by ChartHop (including without limitation any Customer Data), (ii) made in whole or in part in accordance to Customer specifications, (iii) modified after delivery by ChartHop, (iv) combined with other products, processes or materials not provided by ChartHop (where the alleged Losses arise from or relate to such combination), (v) where Customer continues allegedly infringing activity after being notified thereof or after being informed of modifications that would have avoided the alleged infringement, or (vi) Customer’s use of the Service is not strictly in accordance herewith.
    c.	Procedure: Each indemnitor’s indemnification obligations hereunder shall be conditioned upon the indemnitee providing the indemnitor with: (i) prompt written notice of any claim (provided that a failure to provide such notice shall only relieve the indemnitor of its indemnity obligations if the indemnitor is materially prejudiced by such failure), (ii) the option to assume sole control over the defense and settlement of any claim (provided that the Indemnitee may participate in such defense and settlement at its own expense), and (iii) reasonable information and assistance in connection with such defense and settlement (at the Indemnitor’s expense).

14. REPRESENTATIONS AND WARRANTIES
    Each party represents and warrants that (a) it is a duly organized and validly existing under the laws of the jurisdiction in which it is organized, (b) it has full power and authority to enter into this Agreement and to perform its obligations hereunder, (c) this Agreement is legally binding upon it and enforceable in accordance with its terms, and (d) the execution, delivery and performance of this Agreement does not and will not conflict with any agreement, instrument, judgment or understanding, oral or written, to which it is a party or by which it may be bound.

15. DISCLAIMER
    EXCEPT AS EXPRESSLY SET FORTH HEREIN, THE SERVICE IS PROVIDED “AS IS” AND “AS AVAILABLE” AND ARE WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, AND ANY WARRANTIES IMPLIED BY ANY COURSE OF PERFORMANCE, USAGE OF TRADE, OR COURSE OF DEALING, ALL OF WHICH ARE EXPRESSLY DISCLAIMED.

16. LIMITATION OF LIABILITY
    IN NO EVENT SHALL CHARTHOP, NOR ITS DIRECTORS, EMPLOYEES, AGENTS, PARTNERS, SUPPLIERS OR CONTENT PROVIDERS, OFFICERS OR REPRESENTATIVES BE LIABLE UNDER CONTRACT, TORT, STRICT LIABILITY, NEGLIGENCE OR ANY OTHER LEGAL OR EQUITABLE THEORY WITH RESPECT TO THE SUBJECT MATTER OF THIS AGREEMENT (I) FOR ANY LOST PROFITS, DATA LOSS, COST OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES (HOWEVER ARISING), OR SPECIAL, INDIRECT, INCIDENTAL, PUNITIVE, OR CONSEQUENTIAL DAMAGES OF ANY KIND WHATSOEVER, OR (II) FOR ANY DIRECT DAMAGES IN EXCESS OF (IN THE AGGREGATE) THE FEES PAID AND/OR PAYABLE BY CUSTOMER TO CHARTHOP HEREUNDER IN THE TWELVE (12) MONTHS PRIOR TO THE EVENT GIVING RISE TO A CLAIM HEREUNDER.

17. ARBITRATION AGREEMENT.
    Please read the following ARBITRATION AGREEMENT carefully because it requires Customer to arbitrate certain disputes and claims with ChartHop and limits the manner in which Customer can seek relief from ChartHop.  Both Customer and ChartHop acknowledge and agree that for the purposes of any dispute arising out of or relating to the subject matter of this Agreement, ChartHop’s officers, directors, employees and independent contractors (“Personnel”) are third-party beneficiaries of this Agreement, and that upon Customer’s acceptance of this Agreement, Personnel will have the right (and will be deemed to have accepted the right) to enforce this Agreement against Customer as the third-party beneficiary hereof.
    a.	Arbitration Rules; Applicability of Arbitration Agreement. The parties shall use their best efforts to settle any dispute, claim, question, or disagreement arising out of or relating to the subject matter of this Agreement directly through good-faith negotiations, which shall be a precondition to either party initiating arbitration. If such negotiations do not resolve the dispute, it shall be finally settled by binding arbitration in New York County, New York. The arbitration will proceed in the English language, in accordance with the JAMS Streamlined Arbitration Rules and Procedures (the “Rules”) then in effect, by one commercial arbitrator with substantial experience in resolving intellectual property and commercial contract disputes. The arbitrator shall be selected from the appropriate list of JAMS arbitrators in accordance with such Rules. Judgment upon the award rendered by such arbitrator may be entered in any court of competent jurisdiction.
    b.	Infringement. Notwithstanding the foregoing obligation to arbitrate disputes, each party shall have the right to pursue injunctive or other equitable relief at any time, from any court of competent jurisdiction, to prevent the actual or threatened infringement, misappropriation or violation of a party's copyrights, trademarks, trade secrets, patents or other intellectual property rights.
    c.	Waiver of Jury Trial. CUSTOMER AND CHARTHOP WAIVE ANY CONSTITUTIONAL AND STATUTORY RIGHTS TO GO TO COURT AND HAVE A TRIAL IN FRONT OF A JUDGE OR JURY. Customer and ChartHop are instead choosing to have claims and disputes resolved by arbitration. Arbitration procedures are typically more limited, more efficient, and less costly than rules applicable in court and are subject to very limited review by a court. In any litigation between Customer and ChartHop over whether to vacate or enforce an arbitration award, CUSTOMER AND CHARTHOP WAIVE ALL RIGHTS TO A JURY TRIAL, and elect instead to have the dispute be resolved by a judge.
    d.	Waiver of Class or Consolidated Actions. ALL CLAIMS AND DISPUTES WITHIN THE SCOPE OF THIS ARBITRATION AGREEMENT MUST BE ARBITRATED OR LITIGATED ON AN INDIVIDUAL BASIS AND NOT ON A CLASS BASIS. CLAIMS OF MORE THAN ONE CUSTOMER OR USER CANNOT BE ARBITRATED OR LITIGATED JOINTLY OR CONSOLIDATED WITH THOSE OF ANY OTHER CUSTOMER OR USER. If however, this waiver of class or consolidated actions is deemed invalid or unenforceable, neither Customer nor ChartHop is entitled to arbitration; instead all claims and disputes will be resolved in a court as set forth in (e) below.
    e.	Exclusive Venue. In any circumstances where the foregoing arbitration agreement permits either Customer or ChartHop to litigate any dispute arising out of or relating to the subject matter of this Agreement in court, then the foregoing arbitration agreement will not apply to either party, and both Customer and ChartHop agree that any judicial proceeding will be brought in the state or federal courts located in, respectively, New York County, New York, or the federal district in which that county falls.
    f.	Severability. If the prohibition against class actions and other claims brought on behalf of third parties contained above is found to be unenforceable, then all of the preceding language in this Arbitration Agreement section will be null and void. This arbitration agreement will survive the termination of your relationship with ChartHop.

18. MISCELLANEOUS
    This Agreement represents the entire agreement between Customer and ChartHop with respect to the subject matter hereof and supersedes all prior or contemporaneous communications and proposals (whether oral, written, or electronic) between Customer and ChartHop with respect thereto. In the event of a conflict between these Terms and an Order Form, these Terms shall control unless otherwise expressly agreed upon by Customer and ChartHop in the applicable Order Form through language that references these Terms and communicates the parties’ intent to modify one or more specific provisions of these Terms with respect to such Order Form. The Agreement shall be governed by and construed in accordance with the laws of the State of New York excluding its conflicts of law rules. All notices under this Agreement shall be in writing and shall be deemed to have been duly given when received. Notices must be sent to the contacts for each party set forth on the Order Form. Either party may update its address set forth in an Order Form by giving notice in accordance with this section. Except as otherwise provided herein, this Agreement may be amended only by a writing executed by both parties. Except for payment obligations, neither party shall be liable for any failure to perform its obligations hereunder where such failure results from any cause beyond such party’s reasonable control, including, without limitation, the elements; fire; flood; severe weather; earthquake; vandalism; accidents; sabotage; power failure; denial of service attacks or similar attacks; Internet failure; acts of God and the public enemy; acts of war; acts of terrorism; riots; civil or public disturbances; strikes lock-outs or labor disruptions; any laws, orders, rules, regulations, acts or restraints of any government or governmental body or authority, civil or military, including the orders and judgments of courts. Neither party may assign any of its rights or obligations hereunder without the other party’s consent; provided that (i) either party may assign all of its rights and obligations hereunder without such consent to a successor-in-interest in connection with a sale of substantially all of such party’s business relating to this Agreement, and (ii) ChartHop may utilize subcontractors in the performance of its obligations hereunder. No agency, partnership, joint venture, or employment relationship is created as a result of this Agreement and neither party has any authority of any kind to bind the other in any respect. In any action or proceeding to enforce rights under this Agreement, the prevailing party shall be entitled to recover costs and attorneys’ fees. If any provision of this Agreement is held to be unenforceable for any reason, such provision shall be reformed only to the extent necessary to make it enforceable.  The failure of either party to act with respect to a breach of this Agreement by the other party shall not constitute a waiver and shall not limit such party’s rights with respect to such breach or any subsequent breaches. Customer agrees that the parties may undertake certain transactions contemplated by this Agreement via electronic signatures.  Customer agrees that by executing any documents with an electronic signature, Customer is creating a legally valid and enforceable signature just as if the relevant document was signed by Customer in hardcopy.


[title] ChartHop Headcount Planning
[path] Resources/ChartHop Modules/

**ChartHop Headcount Planning** includes the Scenarios module, and offers various employee management features such as customizable approval workflows, live reporting dashboards to visualize budget, team, and DEI impact, and real-time budget impact calculation. With our Headcount Planning module, you can easily build plans for growth, reduction, or reorganization, without spreadsheets

ChartHop's Headcount Planning Module empowers you to do the following:

- Everything in [ChartHop Basic](https://docs.charthop.com/charthop-basic)
- Choose from a larger selection of payroll integrations
- Manage access according to organizational roles, including custom roles
- Configure mapped and custom fields
- Store documents
- Create custom dashboards
- Configure, Manage, and Run Headcount Planning Scenarios
  - [Simple Workflows](https://docs.charthop.com/create-a-scenario) — Guided, single-job workflows for quick changes:
    - Create Job
    - Update Job
    - Terminate & Backfill
  - **Other Scenario Types:**
    - Promotion Planning
    - Budget Scenario
    - Custom Scenario
  - Configure, Manage, and Run Approval Workflows
- Receive assistance from ChartHop to create custom document templates (up to three)

[title] ChartHop HRIS
[path] Resources/ChartHop Modules/

**ChartHop HRIS** includes many capabilities to ensure you can run your org from a single source of truth. Capabilties include People Ops tools including Onboarding and Offboarding, Time Off management, Employee Resources, Custom Calendars, Simple Job Request Workflows, Push to Okta/Google, and much more.&#x20;

ChartHop’s HRIS empowers you to do the following:

- Everything in [ChartHop Basic](https://docs.charthop.com/charthop-basic)
- Choose from a larger selection of payroll integrations
- Manage access according to organizational roles, including custom roles
- Configure mapped and custom fields
- Store documents
- Create custom dashboards
- Configure, Manage, and Run Simple Headcount Planning Scenarios
  - Includes the following Scenario types:
    - Create Job
    - Update Job
    - Terminate & Backfill&#x20;
  - Configure, Manage, and Run Approval Workflows
- Create Resources (Intranet style organizational documents)
- Create Custom Calendars
- Configure, Manage, and Run Onboarding and Offboarding Workflows
- Manage Time-Off
- Integrate with Okta / Google&#x20;
  - Provision single sign-on with accurate org groups and roles
-





-


[title] Data Processing Addendum
[path] Resources/

The Data Processing Addendum outlines the rights and obligations of each party concerning the protection of personal data. The Addendum outlines ChartHop’s accordance with GDPR, and outlines the company’s strict privacy regulations for processing customer data.

::File{src="https://archbee-doc-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/h0lGx8dqwdGx4ht7MZFtN_2026-charthop-data-processing-agreement.docx" label="2026 ChartHop - Data Processing Agreement.docx" isUploading="false"}


[title] Subprocessors
[path] Resources/

:::hint{type="info"}
Sign up for our [privacy notifications mailing list](https://docs.google.com/forms/d/e/1FAIpQLSfLgKFsNBiIdZ2LbCx6ys84mKAS6yqpQc-__eAi3F3DkTDN3w/viewform?usp=sf_link) to keep up to date with changes.
:::

ChartHop relies on a number of vendor subprocessors to provide the service, some of whom may receive access to our customer data.

We evaluate these vendors for their reliability and adherence to strong security and privacy practices, and do our best to minimize sensitive data that is sent to these vendors, depending on their business need.

For transparency, here are the vendors we use, with their business purpose. This list will be updated whenever we add or remove subprocessors. If you have questions about any of our subprocessors, please email us at [privacy@charthop.com](mailto\:privacy@charthop.com).

| **Vendor**                           | **Primary Purpose**                                 |
| ------------------------------------ | --------------------------------------------------- |
| Amazon Web Services, Inc.            | Core infrastructure and backup                      |
| Google, Inc.                         | Email, data storage, and tracking analytics         |
| MongoDB, Inc.                        | Database storage and backup                         |
| Datadog, Inc.                        | Centralized logging, system monitoring, and metrics |
| Slack, Inc.                          | System monitoring and internal communications       |
| Functional Software, Inc. dba Sentry | Web app error reporting                             |
| Stripe, Inc.                         | Payment and invoice processing                      |
| Automatic Data Processing, Inc.      | HRIS data writeback (if applicable)                 |
| Zendesk, Inc.                        | Support tickets                                     |
| Salesforce.com, Inc.                 | Customer contact information                        |
| Shortcut, Inc.                       | Support tickets                                     |
| Planhat, Inc.                        | Customer Success management                         |
| Amplitude, Inc.                      | Customer surveys and product analytics              |
| Hubspot, Inc.                        | CRM and marketing automation                        |
| 6sense Insights, Inc.                | Account-based marketing                             |




[title] ChartHop Basic Agreement
[path] Resources/

The following is intended for anyone interested in ChartHop’s Basic package, which provides access to the Org Chart, Employee Directory, and more. The Agreement outlines general terms such as associated fees, service updates, and customer data. By signing up for ChartHop Basic, you have agreed to the terms and conditions outlined in this document.All other ChartHop packages (e.g., Standard, Premium) are covered by an Order Form and associated Terms & Conditions which supersede the statements and documentation below.

::File{src="https://archbee-doc-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/-m0eWAVIaSamTjkGZtS70_charthop-basic-agreement.pdf" label="charthop-basic-agreement.pdf" uploadAsPublic="false"}


[title] ChartHop Compensation Reviews
[path] Resources/ChartHop Modules/

**ChartHop Compensation Reviews**, includes the Compensation Reviews module, and offers various employee management features such as flexible budgets, guidelines, and approval workflows tailored for your organization, configurable compensation bands including base, variable, equity, and currencies and live budget updates.

ChartHop’s Compensation Reviews Module empowers you to do the following:

- Everything in[ ChartHop Basic](https://docs.charthop.com/charthop-basic)
- Choose from a larger selection of payroll integrations
- Manage access according to organizational roles, including custom roles
- Configure mapped and custom fields
- Store documents
- Create custom dashboards
- Configure, Manage, and Run Compensation Reviews










[title] 15Five Integration
[path] Labs/

:::hint{type="warning"}
This feature is currently in Alpha. Be one of the first customers to try it! Please share any feedback with the ChartHop team.&#x20;

### How to setup a Alpha Feature

1. Contact [ChartHop support](mailto\:support@charthop.com) or your CSM if you have one. They can activate the feature for you.&#x20;
2. Read below for setup instructions and context on how the feature will work.
:::

The 15Five integration is a one way sync that allows the syncing of forms and reviews from 15Five into ChartHop.&#x20;

## What information is synced from 15Five

The 15Five app will import and sync the following pieces of information:

1. 15Five Review Cycles → ChartHop Forms & Performance Reviews

Imports will align to the following details:

- Competency questions in 15Five are imported as numeric scale fields with Manager Only access in ChartHop. If the competency scale was changed, it will create a new field.
- All other questions are mapped as fields in the form, and will have a corresponding share access that most closely aligns from 15five.&#x20;
- All forms are imported as “Archived”
- You can identify forms and fields and reviews created by the app because they will list "15five" as the "Created by".
- Changing the name of the form or review in ChartHop will break a continuous sync.

:::hint{type="info"}
If you would like any additional or different information synced from 15Five, please let the ChartHop team know.&#x20;
:::



## How to setup the 15Five App

1. Go to **Apps & Bundles > Apps**
2. Navigate to the **Other Available Apps** and search for **15Five**
3. Install the **App** and add in your **API key from 15Five&#x20;**
   1. To generate an [API key in 15Five:](https://success.15five.com/hc/en-us/articles/360002699631-API)
      - Click the **Settings gear** in the bottom-left corner of the 15Five account
      - Select **Integrations** from the dropdown menu
      - Click **Enable** to the right of the Public API option
      - Once enabled, you'll land on the **Company API keys** page
      - Click **Create new key**
      - Add a short name for the API key (something identifiable server-side)
      - Copy the **access token** and use it to authenticate

## Review Cycles

[Performance reviews](docId\:pgai8TVrVYWmDcEAnerwg) will be created for every Best-Self Review cycle in 15Five. Separate ChartHop [Forms](docId\:QR76GaDOskC1RlC_S0jes) will be created for each direction or type of review.&#x20;

For example — A 360 review named `2023 Q1 Review Cycle` will contain forms for each direction of feedback:&#x20;

- 2023 Q1 Review Cycle - Self
- 2023 Q1 Review Cycle - Downward
- 2023 Q1 Review Cycle - Upward
- 2023 Q1 Review Cycle - Peer

Not all review types are required. A 15Five cycle can include any combination of Self, Manager, Peer, and Upward reviews. Only the review types that were enabled for a given cycle will produce corresponding forms in ChartHop.&#x20;

If you have multiple cycles in 15Five with similar names that you would like to combine in ChartHop list the name you would like to combine in the  **Condense Cycle Names** setting. For example, you would write `2024 Q3 Review Cycle` if you had 2 review in 15Five named: `2024 Q3 Review Cycle: Retail` & `2024 Q3 Review Cycle: Office` that you wanted to combine into one review called `2024 Q3 Review Cycle.`

**NOTE:** We will only import completed cycles, and forms and fields that have responses saved to them. For example, if a review is in DRAFT status, it will not sync over. We also won't sync over a question without responses.&#x20;

### Import ratings as fields

All Opinion Scale questions in 15Five will be imported as Numeric Scale questions in ChartHop. This includes standard opinion-scale questions as well as competency and company value rating questions. All fields will be imported with a sensitivity of `Manager Only` at this time. The fields will be named:

:::Paragraph{indent="1"}
**Label**: The question text, such as: "Rate \[Name]'s contribution to the company value: Always Be Learning & Growing"
**Code**: `fifteenfive` + `TheQuestionsFirstCharacters — e.g., fifteenfiveRateNamesContributionTo`
:::



:::hint{type="warning"}
Changing the code of the field will throw off the sync and cause an additional field to be created.&#x20;
:::



## How imported form responses will appear to employees

Imported form responses are not immediately visible to employees, but can be surfaced on [Custom profile tabs](docId\:Kiuev47LOf6QTLVjlujlr).&#x20;

Imported form responses will display **"Imported from 15Five"** on the form response. &#x20;

[title] Events in Actions
[path] Labs/Automated Actions/

When an Action is triggered **by an event**, ChartHop makes the event's data available as variables you can use in your trigger conditions and message templates.

Understanding the structure of those variables helps you write precise conditions — especially when you only want an Action to fire when a *specific field* changed.

## Event types

Every event has a type that describes what happened. Update events follow this format:

```javascript
change.update.<entity>
```

For example:

- `change.update.hire` — a hire record was updated
- `change.update.job` — a job record was updated

You can see the event type that fired an Action in its run log.

## event.before and event.update

When an update event fires, two variables give you access to the field values involved in that specific change:

| Variable               | What it contains                             |
| ---------------------- | -------------------------------------------- |
| `event.before.<field>` | The value of the field *before* this update  |
| `event.update.<field>` | The new value being written *by* this update |

These variables are scoped to the specific fields touched by this event. If a field wasn't part of the update, `event.update.<field>` will be empty.

## Example: Only trigger when startDate changes

Suppose you have an Action on `change.update.hire` and want it to fire only when `startDate` is modified — not when other fields like `announceDate` are updated.

Use this condition:

```javascript
event.update.date != event.before.date
```

This checks whether the `startDate` (stored as `date` on the event) was part of this update and has a different value than before. If `startDate` wasn't touched, the condition won't match and the Action won't fire.

## Tip: Print event values to debug

If you're not sure what an event contains, add a **Send Message** step that prints the before and after values. For example:

```javascript
Before: {{event.before.date}}
After: {{event.update.date}}
```

Trigger the event manually, then check the message to see exactly what values ChartHop captured. This is the fastest way to understand what's in the event before writing your condition.

[title] Alpha Apps and Integrations
[path] Labs/

:::hint{type="warning"}
This feature is currently in Alpha. Be one of the first customers to try it! Please share any feedback with the ChartHop team.&#x20;

### How to setup a Alpha Feature

1. Contact [ChartHop support](mailto\:support@charthop.com) or your CSM if you have one. They can activate the feature for you.&#x20;
2. Read below for setup instructions and context on how the feature will work.
:::

We're introducing the **Alpha Apps & Integrations** page to give you early access to new features and integrations designed to improve your experience and enhance how your data works in ChartHop.

By enabling this page, you’ll get a sneak peek at what we’re building—and a chance to help shape the future of the platform.

## 🚀 How to Enable Alpha Access

Please reach out to your CSM or our [support team](mailto\:support@charthop.com)  to unlock the **Alpha Apps & Integrations** page.&#x20;

## 🧪 What to Expect

Features in this section are:

- **In early development**: You may encounter bugs or incomplete functionality.
- **Evolving rapidly**: Features may change, be renamed, or temporarily disappear.
- **Not yet supported**: These are not covered by standard support.

## 💡 How to Give Feedback

We *want* your thoughts! There are a few ways you can send us your feedback:

- Share feedback directly with your customer success manager.
- Email our [support team](mailto\:support@charthop.com) with the subject line: “Alpha Feedback: \[Feature Name]”.

## 🛠️ Disabling Alpha Access

You can turn off access at any time by returning to **Settings** > **Labs** and toggling **Alpha Apps & Integrations** to **off**. This will hide alpha features from your interface.

## 🙋‍♀️ FAQ

**Q: Are Alpha features available to all users?**
A: Access to Alpha features depends on your ChartHop plan—you’ll see the applications and integrations that are included with your current package.

**Q: Will Alpha features become GA?**
&#x20;A: Many do—but we can’t guarantee a timeline or final inclusion. Once a feature is moved to beta or GA, you can untoggle Alpha apps if you want and you'll have access to that app  under its corresponding tab.

[title] Impact Dashboard
[path] Labs/

:::hint{type="info"}
This feature is currently in Beta. We're excited for you to try it and would love your feedback. Send it to the ChartHop team or directly to [product-feedback@charthop.com](mailto\:product-feedback@charthop.com).

### How to set up a Beta Feature

1. From the left sidebar, select **Admin**, then select **Labs**.
2. Use the switch to toggle on the feature, then press the **Save settings** button.
3. Read below for additional setup instructions and context about what will be activated when you save settings.
:::

The **Impact Dashboard** is a finance-oriented view built into Custom Scenarios. It gives planners and finance stakeholders a real-time summary of the cost and headcount impact of any changes modeled in a scenario without having to export data or build a separate report.

The Impact Dashboard is accessed via the **Impact** tab inside a Custom Scenario.

***

![](https://api.archbee.com/api/optimize/CXAjUAezd9VEEVQBIYmdw/Oh2bnkdZoG0ayNKJyeRVN_image.png)

## Layout

The Impact Dashboard is organized into three sections:

### 1. Key metrics

At the top, four summary tiles give you an at-a-glance view of the scenario's impact:

- **Planned Headcount** — the total headcount if all scenario changes are applied
- **New Jobs** — the number of new positions added in the scenario
- **Departures** — the number of positions removed in the scenario
- **Cost Delta** — the net change in annualized compensation cost between the current org and the scenario

### 2. Waterfall chart

Below the key metrics, a waterfall chart visualizes how cost moves from your current state to the proposed state. The chart shows:

- **Current Total Cost** — your baseline
- **New Jobs** — cost added by new hires
- **Departures** — cost removed by departures
- **Comp Changes** — cost impact of compensation adjustments
- **Proposed Total Cost** — the net result

### 3. Pivot Table

Below the waterfall, a pivot table breaks down cost changes by organizational dimension (Department by default). For each group, the table shows:

- Current Cost
- New Jobs cost impact
- Departures cost impact
- Comp Changes cost impact
- Proposed Cost

Expanding a row in the pivot table reveals the individual changes that make up that group's numbers.

***

## View modes

A toggle in the top-right of the Impact Dashboard lets you switch between three ways to view the data:

| Mode           | Description                                                                                                                                  |
| -------------- | -------------------------------------------------------------------------------------------------------------------------------------------- |
| **By Type**    | Groups changes into categories: New Jobs, Departures, and Comp Changes. This is the default view.                                            |
| **By Quarter** | Breaks changes out across fiscal quarters, from the current quarter through however many quarters are needed to capture all planned changes. |
| **By Month**   | Breaks changes out month by month, extending as far forward as needed to show the full impact of all planned changes.                        |

In Quarter and Month views, the dashboard dynamically extends its window. It will show as many quarters or months as necessary to reflect the last date of any change in the scenario, rather than cutting off at a fixed horizon.

***

## Analysis and insights (AI)

At the top of the Impact tab, an **Analysis and insights** button opens ChartHop AI with the scenario's cost and headcount data already in context. It summarizes the scenario's cost impact for a Finance or HR audience: which departments or teams drive the largest cost changes, whether the plan is tracking over or under budget, which individual changes carry the highest cost impact, and any notable patterns or risks. The analysis is grounded in the figures on the dashboard and the scenario's changes.

This button appears only when your organization has **AI Impact Buttons** enabled (Admin > AI). Because it lives inside scenario planning, the **AI Scenario Planner** feature must also be turned on. Access Guard applies as it does everywhere in ChartHop AI, so a viewer without compensation visibility will not see cost figures in the response.

***

## Group By dimensions

The pivot table and breakdown views let you group results by organizational dimensions. The available dimensions are limited to field types that produce meaningful categories:

- **Organizational groups** — Department, Location, Band/Level, Teams, and any custom group types your organization has configured
- **Single-select fields** — fields like Employment Type, Exempt status, or Departure Type
- **Calculated ranges** — fields that bucket continuous values into categories, such as Age Range, Tenure Range, and Generation
- **Scale fields** — ordered categorical fields, such as Recruiting Priority

Fields that are unique per person (like employee IDs or free-text fields) are excluded, since they don't produce useful groupings.

###

![Excluding a dimension](https://api.archbee.com/api/optimize/CXAjUAezd9VEEVQBIYmdw/Kc9D6t6hOpiIdv-nkbrax_image.png "Excluding a dimension")

### Excluding dimensions (Admin configuration)

If your organization wants to restrict which dimensions are available in the Impact Dashboard — for example, to exclude Age Range or Ethnicity from planning conversations — an administrator can configure this.

1. Go to **Admin** > **Configuration**.
2. Under the **Modules** section, find the **Impact Dashboard** settings.
3. Select any Group By dimensions you want to exclude from the list.

Excluded dimensions will be hidden from the Group By picker for all users in your organization.

***

## Number formatting

The Impact Dashboard uses **accounting-style formatting** for all financial figures:

- Reductions in cost are shown with parentheses, e.g. **($40,000)** rather than -$40,000
- Numbers are not colored red or green — all figures appear in black regardless of whether they represent an increase or decrease

This keeps the dashboard consistent with standard financial reporting conventions.

***

## Who can see it

The Impact Dashboard is visible to anyone with access to the Custom Scenario. Financial data (compensation costs) is governed by each viewer's role and data access permissions — users without compensation visibility will see headcount changes but not cost figures.

***

## How to access it

1. Navigate to **Planning** and open a Custom Scenario.
2. Select the **Impact** tab at the top of the scenario view.

[title] Customizing translations
[path] Labs/Untitled/

## Overview

### What is translated automatically 

- Built in ChartHop fields labels and response options
- Native ChartHop text 

### What can be translated via AI or manually edited 

- Custom field labels 
- Form questions 
- Written form responses

### What is on the roadmap for translations 

- User-entered dashboard names, data sheet names, engagement survey, performance review and compensation cycle names. 
- Dates on people moves and anniversaries widget  

### How does CQL work with translations? 

All field code names will stay in the original language they were written. This makes it easier for ChartHop support to help your teams leverage the power of CQL, as well as ensure that custom fields can continue to work with bundles and apps as originally intended. Therefore, we will not translate CQL and we do not recommend changing the code name in a way that could introduce inconsistency 

## Field translations

### Adding translations to existing custom fields

1. Open the field from the field edit dialog
2. Click “Translations” 
3. Choose the language you want to translate in
4. Click “AI translate” or enter your own translation.

### Changing translations for built-in fields

1. Open the field from the field edit dialog
2. Click “Translations” 
3. Choose the language you want to translate in
4. Click “AI translate” or enter your own translation.

### Creating a new custom field 

1. Create a new field 
2. Save field 
3. AI will automatically translate in all languages your company is supporting. You can then go in and edit the translation if needed.

### How can I determine what language a field was originally created in? 

All built in fields are built in English, as that is the default administrative language of ChartHop. A custom field can be written in any language, and that language would NOT show up as a translation option on the translate tab. 

I.e. I created this custom field in English, so when I go to the translation tab, “English” does not show up as an option. 

## Form translations 

### Translating questions

When you create a form, you can start writing your questions on the main tab. Then go to “Translations” and you can choose the language you want to translate into. 

Selecting “AI Translation” will translate ALL form questions and response options automatically, and then you can edit the translations as desired. 

### What if a question is a field? 

The translation is the same! You can translate the field question and response options in the form translation, and also edit it as a field in the data model tab. 

## Form Responses

### Are form responses automatically translated? 

No. Responses can be translated per form by clicking the “translate” button. The button will only show up if the form response text was written in a language that is DIFFERENT than the users selected language. 

### Are responses AI translated? Can I change it? 

Right now responses are AI translated, and the translation will be the same each day that you translate that response. You cannot change these response translations currently. 

### Can I see the original user entered text even if it’s not in my user language? 

Yes! You have the ability to translate the text, and then revert and see the original text as well. 

[title] Zendesk Integration
[path] Labs/

:::hint{type="warning"}
This feature is currently in Alpha. Be one of the first customers to try it! Please share any feedback with the ChartHop team.&#x20;

### How to setup a Alpha Feature

1. Contact [ChartHop support](mailto\:support@charthop.com) or your CSM if you have one. They can activate the feature for you.&#x20;
2. Read below for setup instructions and context on how the feature will work.
:::

## Overview

Bring your customer support data and other company data into ChartHop with our Zendesk Integration. This integration allows you to pull key data—such as ticket status, requester details, and satisfaction ratings—directly from Zendesk into your ChartHop account.

### Places to utilize data from Google Sheets:

- Tables
- Home Page
- Profile Tabs
- Dashboards
- Forms (Text blocks)&#x20;
- Resource Pages
- Letter Templates

## Setup instructions

### Installing the application&#x20;

In Labs, enable "Alpha apps and integrations." You will then see "Salesforce" display on the apps page under the tab "Other available apps." Once you click install, it will guide you to connect your Zendesk account so we can access the data in your objects. Once installed, you can rename the application to better match the data you are pulling in. ChartHop cannot access data that you have not explicitly mapped to ChartHop tables or fields.


**ChartHop cannot access data that you have not explicitly mapped to ChartHop tables or fields.**

**Sync frequency**

You can choose to automate this sync and have it run daily, or you can manually run it at your discretion.

::Image[]{src="https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/mnEj6HTTlwDus0O5fRdyD_image.png" size="60" width="782" height="408" position="center" caption="Sync options" showCaption="true"}

### Mapping to a table in ChartHop

**Note**: The table needs to be created first in ChartHop before you can map to it.

All values must match EXACTLY, including any trailing white spaces. If there is a space, dash, or non alphabet character in the name, wrap the name in` [""]`. You **CAN** wrap any value in the brackets and quotes.&#x20;

To map to a column in a table, you need to know the table code name (see below), and the field code name for the column.&#x20;

::Image[]{src="https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/sjvZsS20LAKr2_hyKC4H2_image.png" size="60" width="678" height="134" position="center" caption="Table code name" showCaption="true"}

::Image[]{src="https://archbee-image-uploads.s3.amazonaws.com/CXAjUAezd9VEEVQBIYmdw/lh9veo6rQv4JuPi96Mhpr_image.png" size="50" width="253" height="121" position="center" caption="Field code name for column" showCaption="true"}

You can map fields from different objects within Zendesk. You need to know the name of the object and the name of the field.

In this example, the Zendesk object is `Tickets`, and the fields we want to map are `TicketID` and `Subject`.

:::BlockQuote
*Inbound field mapping example*
:::

| :::BlockQuote
ChartHop Table
:::                                                             | :::BlockQuote
Zendesk object and field
::: |
| -------------------------------------------------------------------------------------------- | ------------------------------------------ |
| :::BlockQuote
`SupportTickets.ticketId` (this column is marked as `unique` in the table)
::: | :::BlockQuote
`["Tickets.id"]`
:::         |
| `SupportTickets.ticketSubject`                                                               | :::BlockQuote
`"`Tickets.Subject`]`
:::    |

- The first field mapped needs to be the unique field. This is a value that does not repeat in its column, and can be as simple as`row number`.&#x20;
- Notice above how the values are wrapped in brackets and quotes. Any field with more than 1 word or special characters MUST be wrapped in those values to be read by ChartHop. However, you can wrap any other values for consistency.

Once all of your field mappers are set, you can click "save mappers" and run the sync.&#x20;

### Salesforce Integration access

Initially, only Owners have the ability to install and edit the Zendesk App.&#x20;

Fields synced from Salesforce utilize ChartHop's [field settings](docId\:XYrLLTZxiE-BV4ZKzEs_g), so anyone in the organization can be given access to view the data in the corresponding fields.&#x20;


[title] Language Selection
[path] Labs/

## Overview

Language selection allows you to view ChartHop pages in selected languages. Currently, this applies to all non-user entered text in ChartHop.

## How to choose what languages employees can select

This can be done after enabling language selection in labs.

- In Admin --> general
- Under "Language translations", select your languages
- Click "Save" at the top

## How to set your preferred language

Once language selection is enabled, you can set your preferred language in your user settings.

::Image[]{src="https://api.archbee.com/api/optimize/CXAjUAezd9VEEVQBIYmdw/F1IO7JOyLqildsdPt8q_V_image.png" size="58" width="426" height="348" position="center" showCaption="false"}

In "My user settings", you can select your preferred language, and click save.

::Image[]{src="https://api.archbee.com/api/optimize/CXAjUAezd9VEEVQBIYmdw/XYmVfxdZvibKEo_W-b_0u_image.png" size="64" width="392" height="514" position="center" caption="Choose your language to display" showCaption="true"}

[title] Job Codes & Dynamic Fields (Alpha)
[path] ChartHop by ChartHop/Headcount Planning/

# Setting Up Job Codes & Dynamic Fields

Job codes give you a single, standardized way to tie a title to everything that goes with it. Once a job code is set up, selecting it can automatically pull in the data you've linked to it, like compensation bands, department, cost center, or job descriptions, so your team spends less time re-entering the same information and more time making good hiring decisions.



This article walks you through setting up job codes and dynamic fields from scratch, in the order we recommend doing it.

## What is a job code?

A job code is a unique identifier you assign to a role in your organization. It's distinct from the job title itself: a job code is the anchor, and the title is what it's tied to.



Job code and title are the only two pieces of information a job code strictly requires. At its simplest, a job code is a way to standardize titles across your org, so the same role is described and tracked consistently everywhere, even if variations of that title show up in different departments or levels.



Beyond that, a job code can also act as a hub for other data. You can link additional fields to a job code, like a compensation band, department, cost center, or job description, so that selecting a job code automatically brings all of that linked data along with it. How much you link is up to you: some teams use job codes purely for title standardization, while others use them to drive a much wider set of auto-populated data.

## Before you begin

Job codes work best when you set them up in the right order. Turning on features out of sequence, especially before your existing people are matched to job codes, can leave your team looking at blank fields where they expect data. Here's the order we recommend:



1. Turn on Job Codes & Dynamic Fields
2. Confirm your compensation bands are already set up (if you plan to link them)
3. Build your job code table
4. Set up compensation auto-population, if you want it
5. If you sync employee data from an HRIS, map job code and choose your sync behavior
6. Match your existing people to job codes
7. Turn on the new job creation experience and set up your filters



We'll walk through each of these below.

## Step 1: Turn on Job Codes & Dynamic Fields

Turning this on unlocks the Job Codes Data Model page, where you'll build out your job codes and decide what data should be tied to each one.



If you plan to link compensation bands to your job codes, make sure your comp bands are already created and configured first. You'll need them in place before you can add "Comp Band" as one of your linked fields.



**A quick note on scope:** Job Code and Title are the only two fields you're required to fill in. Everything else, comp band, department, job description, custom fields, is optional. Before you build out your table, it's worth deciding how much you actually want job code to drive. Some teams use it purely to standardize titles across the org. Others use it to auto-populate a lot of downstream data. Either is fine, just know that every field you link is a commitment to keeping that data current.

## Step 2: Understand how job code, title, and linked fields work together

A few core concepts to keep in mind as you build your table:

- **Job code is your unique identifier.** Title is what it's tied to. Every job code must be unique, but the same title can absolutely be tied to multiple different job codes. This is useful when the same title exists in different contexts across your org. For example, if "Associate" exists in multiple departments at different levels, each department and level combination can get its own job code, even though the title people see is the same.
- **Any additional column you add becomes a linked field.** Built-in fields, custom fields, single-select fields, boolean fields, job descriptions, comp bands, whatever you choose. When someone selects a job code, ChartHop automatically pulls in the values tied to it.
- **Each job code can only point to one value per linked field.** If you link comp band, for instance, each job code maps to exactly one comp band. That said, the reverse is completely fine: the same comp band can be linked to as many different job codes as you need. Three different sales rep job codes can all point to the same sales rep comp band.

## Step 3: Build and upload your job code table

You have two ways to get your job codes into ChartHop:

**Bulk upload**

1. On the Job Codes Data Model page, add every field you want linked to job code as a column header.
2. Download the blank template, which will already have your chosen column headers in place.
3. Fill it in: one row per job code, with the job code, title, and any linked field values you want populated.
4. Upload the completed file.



**One at a time** Use the Create Job Code option to add individual job codes directly, without a bulk upload.



**Best practice:** If you're setting up a large number of job codes, start with the bulk upload template rather than adding codes one by one. Getting your column headers right from the start saves you from mismatched formatting later.



**Export your table**

You can export your full job code table at any time from the Job Codes Data Model page. This gives you a spreadsheet with every job code and its linked field values, which is useful for offline review, audits, or preparing a bulk update you want to re-upload later.



**Updating job codes after setup**

Once your table is built, you don't need a spreadsheet to make changes. You can edit any job code directly in the Job Codes Data Model page by selecting the cell you want to update and entering a new value.



Use this for things like renaming a title, reassigning a comp band, updating a cost center, or adding a value to a field you left blank during initial setup. You can also add new job codes one at a time using the Create Job Code option.



Good to know: Changes to a job code update the table itself, but they don't retroactively update roles that already have that job code assigned. Existing roles keep whatever values they had when they were created or last edited. The updated values will apply the next time someone selects that job code for a new or edited role.

## Step 4: Set up compensation auto-population (optional)

If you want selecting a job code to also populate compensation, there are two pieces to set up, and it's worth understanding how they relate.



**Linking comp band to your job code table** This is what determines which comp band is associated with a given job code (covered in Step 3).



**Starting Salary settings** This determines what value gets pulled from that comp band once it's populated. You'll find this in your financial settings.



- Choose what value to pull from the band: minimum, first quartile, midpoint, or a custom percentage (for example, setting all new open roles to the 20th percentile of the band).
- This setting applies the same way across all of your comp bands.
- Set an effective date, since comp bands themselves carry effective dates.
- Choose whether to also pull in equity and variable compensation from the band.



**Good to know:** Compensation auto-population from comp bands works whether or not you're using job codes. You can set this up through financial settings alone if you'd rather not tie it to job codes at all.



**Good to know:** This only applies to open roles. If a role is already filled with a real person and a real salary, ChartHop will never overwrite that with data from a job code or comp band.

## Step 5: Estimate cost for open roles with no compensation set (optional)

If an open role has no compensation entered at all, you can turn on a setting that estimates its cost using the midpoint of its linked comp band, rather than showing that role as costing nothing. You can use this setting on its own, without configuring Starting Salary, as a simple way to make sure your open role costs are never reported as zero.



Like Starting Salary, this only affects open roles, never filled roles with a real salary.

## Step 6: How sensitive compensation data is handled

If someone doesn't have permission to view compensation fields, they won't see them, even when a comp band is linked to a job code they're working with. The underlying data is still stored on the record, so it's there for anyone with the right permissions later in the process, such as during approvals.

## Step 7: What you'll see when you select a job code

When you select a job code while creating or updating a role, you'll see a box showing all of the linked field values tied to that job code, whatever you chose to include when building your table.



If you need to change one of those values, for example, you know a role needs a different starting salary than what auto-populated, you can enter a new value directly. The box will show both the original default and your updated value, with the changed field visually highlighted so it's clear something was manually adjusted. That override stays visible as the role moves through your approval process.



Fields with longer content, like a linked job description, won't display in full inside this box. Instead you'll see an icon you can click to jump to the full description.

## Step 8: Syncing job codes from your HRIS

If you bring employee data into ChartHop through an HRIS sync, job code doesn't match automatically on its own. You'll need to:

1. Map the job code field from your HRIS to ChartHop's Job Code field, so it populates correctly as records sync over.
2. Choose how the rest of your linked fields behave during sync. You have two options:
   - **Apply all associated fields:** every sync updates the job code and all of its linked fields, so everything stays fully aligned with your job code table.
   - **Update job code only:** the sync updates the job code but leaves your other fields as they are. If those fields don't match what the job code would normally populate, they'll show up as overrides.



**Best practice:** Before turning on job codes for an account with an active HRIS sync, decide up front whether you want every synced field to fully match your job code table, or whether you want to preserve whatever comes from your HRIS even if it diverges. Getting this decision made ahead of time avoids surprises once new hires start flowing in.



**Syncing job codes from your ATS**

If you bring requisition or candidate data into ChartHop through an ATS integration, you can also map job codes from your ATS to ChartHop's Job Code field. The same enrichment behavior applies: when a job code comes in through the sync, ChartHop can populate the linked fields tied to that code.

Like the HRIS sync, you'll find a setting to control whether linked fields are applied during ATS syncs. If you'd rather the sync only bring in the job code without overwriting other field values, you can turn enrichment off.

## Step 9: Match your existing people to job codes

Building your job code table doesn't automatically apply codes to the people and open roles already in ChartHop. You have two ways to do this:



**Use the matching tool (recommended)**

1. Go to the job code matching tool.
2. ChartHop will suggest a job code for each unmatched role, along with a confidence level.
3. Review and apply the suggested matches. High-confidence suggestions can be applied in bulk, and anything lower-confidence is worth a manual check.
4. You can re-run the matching process at any time.



**Match manually** Use your data sheet to assign job codes directly, row by row.



**Best practice:** Get most, if not all, of your org matched before moving on to the next step. If you turn on the new job creation experience before matching is mostly done, your team will open it up and see largely blank fields, since it pulls from the new job code data, not your existing unmatched records.



**Good to know:** There's currently no way to bulk-delete job codes, so plan your setup carefully, especially in a testing environment.

## Step 10: Turn on the new job creation experience and set up filters

Once most of your org is matched to job codes, you're ready to turn on the redesigned job creation experience. This will apply everywhere a new role is created, not just going forward.

You can also set up to three fields to filter your job code list by (for example, department or location), so your team can quickly narrow down a long list to what's relevant to them.

**Best practice:** Choose filter fields based on how your managers actually think about your org, not just the default option. If your team commonly filters by position and location, set those up rather than defaulting to department alone.

**What your team sees**

Once filters are configured, anyone creating or editing a role will see the filter options at the top of the job code dropdown. They can narrow the list by the fields you chose, for example selecting a department and location first, so they're only picking from the job codes that are actually relevant. This is especially useful for orgs with a large number of job codes where scrolling through the full list isn't practical.

## What this feature doesn't cover

Job codes and dynamic fields are focused on standardizing titles and linking supporting data to them. A few related but separate capabilities:

- Month-over-month cost or budget forecasting
- Budget roll-ups across a hierarchy
- Allocations tied to group membership
- Complex custom financial modeling (fully burdened cost calculations, pay-period-based conversions, currency exchange adjustments)

If you're looking for any of these, reach out to your ChartHop CX team (CSM, IS, or Support) to talk through the right approach for your org.

## Known limitations

- Turbo Importer does not currently create new fields automatically. If your import file includes a column that doesn't match an existing field, that field needs to be created manually before importing.
- There's currently no bulk delete for job codes.


[title] Reviewer Workbook
[path] ChartHop by ChartHop/Compensation Planning/

## Overview

The Reviewer Workbook is where you configure what the comp cycle actually looks like for managers — which columns are shown, which are editable, who can see what, and how the workbook is structured. Everything in this section is editable while the cycle is live (with a pause).

## Adding & Ordering Columns

Click **Select Columns** to add any ChartHop field to the workbook. Once added, columns can be reordered by dragging.

### Regular Fields vs. Changed Fields

For most fields, you'll notice two versions available — for example, **Title** and **Title - Changed**. These are the same underlying field, but they behave differently:

- **Title** — displays the current value (read-only context)
- **Title - Changed** — the editable version, intended for entering a change to that field within the cycle

For fields you don't expect managers to edit in the cycle (e.g., Department), you only need the regular version. For fields where managers will be making changes (e.g., Title, Base Annualized), include the changed version.

Changed fields are referenced in CQL and formulas with a change.after. prefix — e.g., change.after.title.

:::BlockQuote
**Heads up:** If someone enters a value in a changed field that is identical to the employee's current value in primary, the value will appear to disappear after they type it in. This is expected behavior — since the entered value isn't technically a change from the current value, ChartHop treats it as no change and clears the field.
:::

## Column Settings

Each column in the workbook has the following configurable properties, accessible by clicking the diagonal arrows on that column:

### Label (Alias)

Override the default field label with a custom header name. Example: rename "Base Annualized" to "Current Salary."

### Editable

Three options:

- **Editable** — anyone who can see the column can edit it
- **View Only** — no one can edit it
- **Edit Only If** — editable only when a condition is met (see below)

### Edit Only If

Define conditions that control when a field is editable. There are two types of conditions and they can be combined:

1. **Data condition (about the employee being reviewed):** The field is editable only if certain data is true about that employee. Example: only editable if the employee's Promotion field is Yes.
2. **Role condition (about the cycle user):** The field is only editable by certain roles. Example: only Final Approvers, Owners, and Collaborators can edit this field. Commonly used for sensitive fields like Comp Band.

You can combine both: e.g., only Final Approvers/Owners/Collaborators can edit this field, and only if the employee is being promoted.

### Visible To

Control who sees the column. Default is everyone. Options:

1. **Data condition (about the reviewer/approver looking at the column):** The column is only visible to users whose own data matches a condition. Example: only show this column to reviewers whose department is Engineering.
2. **Role condition:** Only certain roles can see this column (e.g., Final Approvers, Owners, and Collaborators only).
3. **"Under jobs" count condition:** Show the column only if the reviewer has at least one employee beneath them that meets a condition. Example: only show a local currency column if the reviewer has at least one employee with a non-USD base currency.The CQL pattern for this:

:::BlockQuote
(underJobs.count\{.currency!="USD"} > 0)
:::

This is useful when visibility isn't cleanly tied to the reviewer's own attributes, but rather to the makeup of their pod.

Conditions can be combined with or (||) or and (&&). Example: show this column if the reviewer has a non-USD employee beneath them **or** their name is Joe or Kate.

### Collaborator Visibility

Collaborators always see at least everything the manager sees — they will never see less. If there are columns restricted to collaborators only, those will appear for the collaborator but not the manager. Think of collaborator visibility as an overlay: manager view + any collaborator-only columns.

### Budget & Guidelines

Indicates whether a budget or guideline interacts with this field. Informational only — not something that typically needs to be configured manually.

### Color

Optionally color-code the column header. Clients can configure this themselves — no need for CSMs to set it up.

## Workbook-Level Settings

### Frozen Columns

Specify how many columns should stay fixed as managers scroll horizontally. Configured at the top of the workbook settings. Avoid freezing too many columns (5–6 is roughly the limit before the frozen area takes up the whole view).

### URL & Label

Add a hyperlink that appears in the top-left corner of the workbook for all reviewers. Useful for linking to a reviewer guide, comp philosophy doc, or any reference resource.

### Allow Reviewers & Approvers to View the Audit Log

The audit log tracks every edit made in the cycle — what field was changed, who changed it, and for which employee. By default, the audit log is only visible to cycle owners.

Toggling this setting on allows reviewers and approvers to see the audit log as well, scoped to only the employees and fields they can already see in the cycle.

**Most clients leave this off.** The main consideration: managers would be able to see that they gave someone a 5% raise and that it was later changed to 2% by an approver. Customers should decide whether that level of transparency is appropriate for their culture before enabling it.

This setting can be toggled on and off even after the cycle is launched — no pause required.

## Post-Launch Flexibility

The Reviewer Workbook is the **most flexible** section of the cycle after launch. Almost everything can be changed while the cycle is live by pausing and making edits:

- Add or remove columns
- Reorder columns
- Add, edit, or remove editability and visibility conditions
- Change aliases/labels
- Adjust frozen columns

:::BlockQuote
**One important caution:** Do not remove an editable column that already has data entered in it. Removing it would delete whatever managers have already entered for that field in the cycle.
:::


[title] ChartHop by ChartHop
[path] /

Welcome to ChartHop by ChartHop — the ultimate guide built from the front lines of customer experience. This isn't theoretical documentation written in a vacuum. These are the real scenarios, solutions, and step-by-step processes our Customer Success, Implementation and Support teams use every single day when working with customers just like you.

When you're facing a complex integration, we've been there. When you need to configure a custom compensation workflow, we've built it. When you're troubleshooting data sync issues or planning a tricky org restructure, we've walked hundreds of customers through it. This collection represents hundreds of implementations, thousands of customer conversations, and countless "here's exactly how to do this" moments that our CX team has documented to help you succeed faster.

Think of this as your ChartHop cheat code — the institutional knowledge from the people who live and breathe customer use cases, distilled into clear, actionable guidance. These are the proven playbooks, the configuration recipes that actually work, and the troubleshooting wisdom we wish we could clone and send to every customer. Because at the end of the day, nobody knows how to make ChartHop work better than the team that makes it work for everyone else.

In this section of the knowledge base, we're taking the Use Case approach and cover topics like Performance Reviews, Engagement Surveys, Headcount Planning, Dashboard Building and more.&#x20;

[title] Conditional data display
[path] Carrot reference/Examples/

You can use if statements to conditionally display data within: [Automated Actions](docId:6k2uHP22MlgnhaOvzQ0yX), [Custom profile tabs](docId\:Kiuev47LOf6QTLVjlujlr), [welcome emails,](docId:9ZAl8YH3qvRWZk70pORmO)  [Home page](docId:3bBPrW-EGBg1YxIa0fL0C), [Forms](docId\:QR76GaDOskC1RlC_S0jes) or [Resources](docId\:JXOtOCIQ2GhvvBxyOu6jP).&#x20;



```none
We're so excited for you to start on: {{startDate}}

{% if employment:”Part Time” %}
Your contract will run until: {{contractEndDate}} 
{% endif %}

{% if employment:”Full Time” %}
Your benefits will begin on {{startDate}}. 
{% endif %}
```


[title] Developer basics
[path] ChartHop for Developers/

ChartHop, by design, is an extensible data platform. All of your organization's information can be accessed or updated programmatically via API.

## Apps and integrations

In order to programmatically extend ChartHop, you will want to create a **ChartHop App**.

An App, once installed, functions as a special type of user with access permissions that you control.&#x20;

An App can also do the following:

- Take actions and retrieve data just like a normal user via the REST API.
- Can listen for events that occur on ChartHop, such as organizational changes, via a webhook notification endpoint.&#x20;
  - Events that match the criteria you select will be sent via HTTPS POST to your endpoint, within a few seconds of occurring on ChartHop.

An App can be just for your organization, or you can build an App that can be installed by any organization in ChartHop after being subject for approval.

## Getting started

To get started, email [support@charthop.com](#) with the subject line: **New App Request**.

Then include the following information:

- The name of the App
- The name of the org the App is for
- A description of the App you want to create
- Which permission levels the App requires (see [Access levels](https://docs.charthop.com/user-roles-and-permissions#1Z9ow))
- If the App is for your organization only, or if it is to be distributed to other orgs
- If the app be using the REST API, event notifications via webhook, or both&#x20;
  - If you are using a webhook endpoint, and if so, the URL for that endpoint

Pending approval, ChartHop will create and install an app in your org's account which will include:

- An API Authorization Token that can be used to access the REST API on behalf of the app
- Your webhook URL

## REST API

ChartHop's API is described using the Swagger/OpenAPI specification at: [https://api.charthop.com/swagger](https://api.charthop.com/swagger).&#x20;

We recommend [Swagger Codegen](https://swagger.io/tools/swagger-codegen/) to generate a client library in the language of your choice.

Please email [support@charthop.com](#) for questions or assistance working against the API.


[title] Release Notes Archive 2025
[path] Release Notes/

## 2025.12.28

🎉 <font color="#2166AE">New!</font>

- Bulk edit jobs in the data sheet
- Added 429 error screen
- Time Off Accruals & Carryover options added to time off policies
- Added a "Copy all data & headers" button to the New Data Sheet
- Added invite token for Preboarding users
- A new "Action" column within the time off ledger view&#x20;

⚒ <font color="#B91C1C">Fixed</font>

- New Hires with Future Announce Dates were not able to be invited
- New Hires with Future Announce Dates were not receiving tasks

## 2025.12.23

🎉 <font color="#2166AE">New!</font>

- **Qualified Electronic Signatures** - ChartHop now supports Qualified Electronic Signatures (QES) for organizations that require a higher standard of signature verification, particularly for European compliance requirements.

## 2025.12.15

🎉 <font color="#2166AE">New!</font>

- New and improved Data Sheet with pro capabilities including
  - Navigate with spreadsheet keyboard commands
  - Quickly add columns including custom calculations (like spreadsheet formulas)
  - Copy out of Data Sheet and paste into spreadsheets
  - Much more!
- Option in Time Off to make Notes optional&#x20;
- Time off Export updated with all entry types
- Carryover and following year added to Time Off profile tab
- [Troubleshooting time off](docId\:yS8WAGQbtjmK9vwA3Nr-Q)&#x20;
- [Calendar](docId\:a9VUAZHm4xlW3TiaQ4mmy)&#x20;
- [Data Sheet](docId\:XTd4DG4I_4_nMwjfEsq0S)&#x20;

⚒ <font color="#B91C1C">Fixed</font>

- Date picker issues with min/max values on data sheet
- Multi-select overflow formatting on data sheet
- Added kebab menu to data sheet
- Editing job code on data sheet
- Smart bucket column header summary preview for on data sheet
- Display issue with Action descriptions
- Lever Requisitions App renamed to Lever

## 2025.11.03

🎉 <font color="#2166AE">New!</font>

- [Preboarding](docId\:o84lTFv6kh2imp46wNwZP) users can now be invited and then request a new access refresh.&#x20;
- Added 429 error screen
- Time Off Accruals & Carryover options added to time off policies
- Added a "Copy all data & headers" button to the New Data Sheet

⚒ <font color="#B91C1C">Fixed</font>

- Display sensitivity of files on Files page
- Show Other in de-identified survey if there are not enough responses to group.
- Approver error message within Time Off Policy
- How forms handle the deletion of a field with a questions contained in it
- Permission errors within forms
- Weekend & holidays can not be selected conflicts with partial days
- Fixed copy and paste for managers on the data sheet
- Data shee pulls up job panel for people and jobs

## 2025.10.20

🎉 <font color="#2166AE">New!</font>

- [Signatures](docId:-APezeKDHAACHAZcCuAem) - You can now have users sign any PDF that you upload to ChartHop triggered from an automated action

⚒ <font color="#B91C1C">Fixed</font>

- Display sensitivity of files on Files page
- Show Other in de-identified survey if there are not enough responses to group.
- Approver error message within Time Off Policy
- How forms handle the deletion of a field with a questions contained in it
- Permission errors within forms
- Weekend & holidays can not be selected conflicts with partial days

## 2025.10.06

🎉 <font color="#2166AE">New!</font>

- &#x20;[Configuring the Home page](docId:3bBPrW-EGBg1YxIa0fL0C) - Logos and colors in the header released for all organization
- [Form responses](docId\:qbDlkA-YzjmOZHsqLFW-K) - Added one-click "Create as Dashboard" button to form responses in Forms, Surveys & Reviews
- [Form responses](docId\:qbDlkA-YzjmOZHsqLFW-K) - Added "Copy to Dashboard" button for built-in Charts within in Forms, Surveys & Reviews
- **PDF Document Templates** - Users can now upload existing PDFs directly as templates for signatures
- **Copy All Data + Headers&#x20;**&#x77;ithin Comp Reviews - Added "Copy All Data + Headers" button to workbooks within comp reviews
- **Signature Title Option&#x20;**- Added option to exclude job titles from signatures

⚒ <font color="#B91C1C">Fixed</font>

- Fixed incorrect chart graphs in dashboard exports
- Fixed inability to scroll through employee list when changing managers on data sheet
- Fixed display issue with uneditbale fields in Custom tab of people dialog
- Fixed percentage and money formatting for smart calculations in the data sheet
- Fixed overlapping text when submitting large numbers of changes on the data sheet
- Fixed "today" in the data sheet not pulling data and the all time view not saving.
- Fixed time off policy guidelines only being visible to owners and admins
- Fixed missing form data in Review task list

## 2025.10.01

🎉 <font color="#2166AE">New!</font>

- **ATS Integration Enhancement** - Added ability to default all jobs coming from ATS inbound syncs to manager-shared visibility rather than organization-wide, giving better control over job posting visibility.
- **Translation Coverage** - Increased translation of data sheet fields, calendar views, and profile sections for improved international user experience.
- **Time Off Policy Display** - Removed unlimited balance indicators from employee-facing interfaces for unlimited time off policies, allowing organizations to customize messaging through policy display names.

⚒ <font color="#B91C1C">Fixed</font>

- Fixed grants dropping off unexpectedly from equity profile charts before actual vesting completion dates
- Updated custom field mapping for Deel integrations
- Balance adjustment screens show accurate previous values when using effective dates other than today

## 2025.09.23

🎉 <font color="#2166ae">New!</font>

- Newly redesigned [Inviting users](docId\:geKO2l3uNeTWyIDSysJfG)  and [Managing users](docId\:uJhZC5s2MyR-mPfvcw_Aj).&#x20;
- Added ability to request [Time off policy settings](docId\:YxUkGCUu6tev3qgeLyYxs) in increments as low as one hour. &#x20;

**⚒ &#x20;**<font color="#ff0000">Fixed</font>

- Clicking twice would sent duplicate taks in Reviews and Surveys

## 2025.09.16

🎉 <font color="#2166ae">New!</font>

- [Ask ChartHop](docId\:Ey_nPQlPouWcmB1LsvUF7)**&#x20;&#x20;**- an AI-first experience with Ask ChartHop prominently displayed on the homepage, complete with suggested prompts for quick access to AI assistance.
- **Preview images in File Preview** - Image files now display as previews alongside PDF
- **Task Type Labels** - Added a column for task type on the [Managing tasks](docId\:AUgK05IqTO-acrgCmfF60) and  throughout the platform (e.g., "Submit Form" instead of generic labels)
- [startDateLifetime](docId\:a1_ef8JYH0spf5w8U0nqQ) - A new `startDateLifetime` field captures the very first hire date for employees who may been rehired
- [.nps()](docId:_04IEPDcqz22LuMwt6YOq)  - Added .nps() method in CQL for simpler employee Net Promoter Score calculations.
- **File Upload Names** - Original filenames are now preserved when uploading files to custom fields instead of being renamed.
- Added ability to edit home email for preboarding users

**⚒ &#x20;**<font color="#ff0000">Fixed</font>

- Issue where scheduled actions were triggering duplicate notifications

## 2025.08.26

🎉 <font color="#2166ae">New!</font>

- **Show miscellaneous option in Files dropdown** - Show files that are not attached to a field. &#x20;

## 2025.08.19

🎉 <font color="#2166ae">New!</font>

- ****[Managing tasks](docId\:AUgK05IqTO-acrgCmfF60) - Pending tasks for form submissions, signature, time off request and general tasks can now be reassigned both within a survey or review or on the general tasks page.&#x20;
- ****[Time off for employees](docId\:y6XnkAgvcyDoWNxdbFuvt)**&#x20;for employees&#x20;**&#x20;- Employees can now edit their own future time off requests, automatically triggering re-approval workflow when needed
- **Enhanced Search** - Main search bar now supports searching by first name, preferred name, last name, middle name, and email for improved employee discovery.&#x20;
- **Onboarding & Offboarding built in categories** - categorize fields and actions with built in categories for onboarding and offboarding
- [Automated Actions](docId:6k2uHP22MlgnhaOvzQ0yX) - Apply a [Categories](docId\:TPKhVeXrOv1C9Jv2x6vDv) to [Automated Actions](docId:6k2uHP22MlgnhaOvzQ0yX) which will then translate to tasks created by those actions.&#x20;
- [Automated Actions](docId:6k2uHP22MlgnhaOvzQ0yX) - is now available to all customers. Previously it was only available to our ChartHop HRIS customers
- [AI Summaries](docId\:n7l6ftD6WH1VLu9OXfB_Y) are out of Beta and generally available. They still must be turned on in AI settings.&#x20;

**⚒ &#x20;**<font color="#ff0000">Fixed</font>

- Issue where Yes/No field values would briefly appear then disappear when set in data tables
- Issue where clicking away from edited cells didn't always save changes for certain field types
- Microsoft SSO login issues resolved with a clearly loading state
- Renamed Field Categories to Categories
- Open on org chart button didn't open to person on people data sheet

🤖 <font color="#2166ae">LLM Model Change</font>

- Moved from Anthropic model Sonnet 3.7 to Sonnet 4.0

## 2025.08.12

🎉 <font color="#2166ae">New!</font>

- **Demo Account Integration** - Users can populate accounts with sample data when trialing or using a self-serve account
- **Time Off Policy Display Controls** - Separate internal and employee-facing policy names
- **Time Off Policy Sorting** - Customizable sorting for time off policies on profiles
- **Control time off policy display to employees&#x20;**- Added display name and guidelines fields for time off policies with employee visibility controls

**⚒ &#x20;**<font color="#ff0000">Fixed</font>

- Any fields written in markdown in ChartHop will translate to HTML in your Jobvite integration so job postings show as designed.

## 2025.07.28

🎉 <font color="#2166ae">New!</font>

- **Change History Functions** - New CQL functions for retrieving job and person change history: [jobFieldChanges()](docId\:zdzyOu19MgDt_iQTTUzyx) and [personFieldChanges()](docId\:HVUgZZQmJwqOyKWOtx2ec)&#x20;
- Policy Year Settings UI - Dropdown for setting policy year start dates&#x20;
- Adjustment Management API - Create, update, delete endpoints for time off adjustments
- **Time Off Export Filters** - Policy, entry type, approval status filters
- **Time Off Policy Bundles** - Bundle policies for cross-account installation
- **Holiday Calendar Bundles&#x20;**- Bundle calendars for sharing between accounts
- **Admin Time Off Request Editing&#x20;**- Admins can edit request dates and policiess
- **Files Export Screen** - Export all files functionality for admin users

**⚒ &#x20;**<font color="#ff0000">Fixed</font>

- Imported images from Bamboo should no longer be blurry.

## 2025.07.24

🎉 <font color="#2166ae">New!</font>

- **Display Full Page Form on Profile Tab** - Forms assigned to a profile tab now render as a full-page experience, giving managers and employees more room to view and complete form content directly from the profile.
- **Delete Profile Option** - Admins can now remove a person's profile directly from the UI without needing to remove the job first. Deleting the person automatically removes the associated job.

## 2025.07.14

🎉 <font color="#2166ae">New!</font>

- Balance page for [Time off policy settings](docId\:YxUkGCUu6tev3qgeLyYxs)&#x20;
- Added search and filter to time off policies page
- [Time off policy settings](docId\:YxUkGCUu6tev3qgeLyYxs) rounding for time off policies
- Ability to filter on user events inside of [Automated Actions](docId:6k2uHP22MlgnhaOvzQ0yX) For example `user.invite` with a filter of `event.entity.status:preboarding`

**⚒ &#x20;**<font color="#ff0000">Fixed</font>

- `person.update` were throwing when they shouldn't have been
- Fire both `user.create` and `user.invite` events when a user is both invited and created&#x20;
- Updated visibility note on unreleased forms.
- An issue where signature options couldn't be disabled in forms.&#x20;
- An issue with mobile business cards
- Added [Move a person to a new job](docId\:kYNbbhfAsSRo_fSj7Bmsx) option to job panel on data sheet.&#x20;
- Issue with overflow of the [Data Sheet](docId\:XTd4DG4I_4_nMwjfEsq0S) right click menu
- Improved loading on Time off exports page
- Issue with edit charts page not loading
- Form names were not displaying for `RESUBMIT` form tasks
- Issue with exporting of data sheet
- Icons shrinking on data sheet header
- Announce data issue for [Rippling (licensed API only)](docId\:MDbJW0ckCmTJAUw1Yv5r2) app installs.&#x20;

## 2025.07.11

🎉 <font color="#2166ae">New!</font>

- View time off balance details on policy and profile pages
- Employees and admin can edit pending and approved time off requests&#x20;
- Added Policy column on Time Off table
- Added ability to create bundles and automatically share between sandbox and production accounts
- Support for nested asOf() expressions

**⚒ &#x20;**<font color="#ff0000">Fixed</font>

- Total issued grants no longer include planned grants

## 2025.07.09

🎉 <font color="#2166ae">New!</font>

- New findTimeOff function now available

**⚒ &#x20;**<font color="#ff0000">Fixed</font>

- Removal of indirect managers shows as expected on Home page & People Moves
- Fixed average caluclations on Data Sheet
- Small view pie charts now load correctly
- Time-tracked person fields now usable to generate Tasks
- Calendar count discrepancies for Time Off have been fixed
- Empty space in some Dashboard formatting removed

## 2025.07.02

🎉 <font color="#2166ae">New!</font>

- Hover on Data Sheet shows "Other" signifier if more than ten options are listed
- Added Screenshot Mode on Org Chart option to remove light gray background and PTO information when taking screenshots
- Org option for Time Off added to enable showing Time Off more than 30 days out

## 2025.07.01

🎉 <font color="#2166ae">New!</font>

- New Financial Settings to set rounding parameters for field types across application

**⚒ &#x20;**<font color="#ff0000">Fixed</font>

- Rounding in Letter Templates consistently matches Comp Reviews

## 2025.06.30

🎉 <font color="#2166ae">New!</font>

- Customers can now create Bundles
- Each individual can now see AI chat history
- Scenario comments can be edited & deleted
- Scenario comments can be added post-Merge

**⚒ &#x20;**<font color="#ff0000">Fixed</font>

- Past approval chains show the correct person from approval, even if they have departed the company or changed roles

## 2025.06.23

🎉 <font color="#2166ae">New!</font>

- Allow for customizable turnover function to calculate using monthly averages
- AI chat UI updates
- Multi-language options and Finch integrations are now in beta

## 2025.06.13

🎉 <font color="#2166ae">New!</font>

- Allow for `intervalFrom` and `intervalUntil` to be read in a content block
- Copy charts to another Dashboard
- Easily see percentage used of each budget in Comp Reviews
- Paused Comp Reviews will show managers a read-only state of the review
- Added button to remove sort order on new Data Sheet
- Allowed view only access to forms, reviews and surveys if you have forms, review or survey data, but do not have access in your plan.&#x20;
- Announce Date is now supported in CSV imports & syncs for departures & hires

**⚒ &#x20;**<font color="#ff0000">Fixed</font>

- More easily drag & drop charts to rearrange a Dashboard
- An issue where charts weren't showing the "None" totals even when checked
- Group images not appearing on initial load of new Data Sheet
- An issue where the date picker was being cut off on the new Data Sheet
- Editing of phone and email on the new Data Sheet
- Blocked duplicate columns from being added on the new Data Sheet
- An issue where forms that were "Identified" and about "No one specifically" would allow you to hide the identity of the respondent. The proper way to do this is a [Anonymous and De-Identified Surveys & Forms](docId\:kExBcKK0PLhmiFv1NPCqF)&#x20;

## 2025.06.10

🎉 <font color="#2166ae">New!</font>

- [dayOfWeek()](docId\:tBKTQGp6QjLKKEEwk-10n) added as a new carrot function to return the day of the week for a given dates
- The [Managers](docId\:pUP93f-_7bcs0fsqn19sJ) field can be selected to be used in de-identified surveys.&#x20;
- [Data Sheet (New)](docId:64tKPF4I0Muwo400TIrZM) allows you to open files without downloading them.&#x20;

**⚒ &#x20;**<font color="#ff0000">Fixed</font>

- An issue where the new data sheet would require two clicks to open.
- An issue where the new data sheet where adding columns would distort the layout.
- An issue where the new data sheet where pressing delete wouldn't initiate edit mode

## 2025.06.09

🎉 <font color="#2166ae">New!</font>

- You can now unlock access to all of our apps and integrations that are in alpha with the toggle "Alpha apps and integrations". This gives customers early access to in-development integrations to bring more data into ChartHop!
- A new table in the tasks tab within Reviews and Surveys.&#x20;
- Added support for rich text editing on the New Data Sheet.&#x20;

**⚒ &#x20;**<font color="#ff0000">Fixed</font>

- An issue with the loading of tasks and displaying dates on the home page.&#x20;
- Incorrect due dates displaying on tasks on the home page.
- A display issue with field category groupings

## 2025.06.04

🎉 <font color="#2166ae">New!</font>

- Users without access to a job's compensation can now submit scenarios for approval, while maintaining data access rules & not revealing compensation

**⚒ &#x20;**<font color="#ff0000">Fixed</font>

- Ability to delete Groups if a child group had previously been deleted
- Ability to create and delete a Group on the same day

## 2025.06.03

🎉 <font color="#2166ae">New!</font>

- Multiple signatures now supported in documents

**⚒ &#x20;**<font color="#ff0000">Fixed</font>

- Resolved issue with options being reset when trying to change colors and labels in chart editor
- Weeks per year and Hours per week are editable in the Base field on Data Sheet
- Comp bands are now editable on the New Data Sheet V2
- Groups (Department, custom groups, etc) are editable in Data Sheet V2
- Departed employees who are Collaborators in Comp Reviews now get removed
- Fixed UI issue with date picker in Edit job modal

## 2025.05.28

🎉 <font color="#2166ae">New!</font>

- Added ability to compare 2 scenarios on the Impact Tab to see financials, headcount, and more side by side

**⚒ &#x20;**<font color="#ff0000">Fixed</font>

- Added validation for Dashboards labels to prevent odd display issues with duplicate labels
- Columns and headers alignment fix for Data Sheet v2 (in Beta)
- Time off requests where an employee reports to an Open Job now get routed to their skip-level manager

## 2025.05.20

**⚒ &#x20;**<font color="#ff0000">Fixed</font>

- Made home page task loading more reliable

🎉 <font color="#2166ae">New!</font>

- Welcome emails can now be customized with [Carrot reference](docId\:fL-eMyhB9F8NzL2Vza9fq)&#x20;
- Added AI Settings page
- Added Module Settings page
- Lattice App Alpha release
- Password reset email updated

📱 <font color="#2166ae">Updated!</font>

- iOS version of ChartHop Mobile App updated&#x20;
  - Restored AI Chat feature (if enabled)
  - Improved session token timeout so that active sessions will extend time window
    - Previously, every 30 days regardless of activity, the mobile app required a login. Now, active sessions will extend the requirement 30 days. This means active use will prevent app from requiring frequent logins.&#x20;
  - Android App will be updated shortly

## 2025.04.29

**⚒ &#x20;**<font color="#ff0000">Fixed</font>

- **baseComp.lastRaise.percent** field now takes into account any and all base increases whether they're isolated or attached to a job change
- Form surveys now allow a new Task to be sent after a user skips the original Task
- Fixed issue with filtering by Groups on Form Responses
- UI tweak to allow editing NPS charts in Dashboards
- **variableTarget** now editable in new Data Sheet
- Filters on Org changes history export now apply when exporting
- Restriction on uploading single-select values removed Comp Bands importer

🎉 <font color="#2166ae">New!</font>

- Time Off policies now support **half days**
- Task name can now be edited when creating **Actions**

## 2025.04.25

🎉 <font color="#2166ae">New!</font>

- **Group Mapping via SFTP/RAAS/Google Sheets** - Admins can now populate group mappings (departments, locations, custom groups) via SFTP, RAAS, or Google Sheet imports, making it easier to keep group structures in sync with external data sources.

## 2025.01.13

🎉 <font color="#2166ae">New!</font>

- Native **Mobile ChartHop App** now available for download
  - Great companion app for ChartHop users
    - [ChartHop Mobile App](docId\:tCRB-vPbsJ99CMlsxV8N3) for quick contact info on-the-go
  - App Store links:&#x20;
    - iPhone: [https://apps.apple.com/us/app/charthop-directory/id6717590153](https://apps.apple.com/us/app/charthop-directory/id6717590153)
    - Android: [https://play.google.com/store/apps/details?id=com.charthop.mobile\&pcampaignid=web\_share](https://play.google.com/store/apps/details?id=com.charthop.mobile\&pcampaignid=web_share)

## 2025.01.08

**⚒ &#x20;**<font color="#ff0000">Fixed</font>

- **Greenhouse App Settings** UI has been updated for clarity
  - The language changed from Source of Truth to **Inbound/Outbound**
  - Reduced complexity with options that now simply show or hide depending on if they are valid

[title] September 2022 release notes
[path] Release Notes/Release notes 2022/

## 09.28.22

***

## 🎁  <font color="#2166ae">**Added**</font> &#x20;

### New features

- Added the ability to set [smart currency defaults](https://docs.charthop.com/set-smart-currency-defaults) for monetary values that are imported into ChartHop without a specified currency.

## 09.26.22

***

## 🎁 <font color="#2166ae">**Added**</font>&#x20;

### New features

- Added new fields to allow more flexibility for tracking start and end dates. You can track transfers and moves more easily by tracking start and end dates in particular jobs as well as when an employee starts or ends employment in your organization as a whole.
  - The following new fields were added:
    - *Start Date in Job*
    - *End Date in Job*
    - *Start Date at Org*
    - *End Date at Org*
    - *Tenure in Job*
    - *Tenure in Org*
    - *Planned Start Date*
    - *Start Date*
  - The following fields were deprecated:
    - *Job Start Date*
    - *Person End Date*
    - *Person Start Date*
    - *Tenure*
- Added the ability of users to duplicate reports and re-assign ownership of the duplicate report. This makes it easier to keep reports when the report owner leaves the company.
- Moved chart legends to be centered at the bottom of the respective chart.
- When creating a chart, you can toggle between a basic and advanced mode. This allows you to more easily choose when to write specific queries in Carrot, ChartHop's query language.

## ⚒ <font color="#eb144c">**Fixed**</font>

- Fixed an issue where hourly compensation rounding was not displaying consistently.
- Fixed an issue where smart calculations were not showing decimals when used in the Scenario Data Sheet page.
- Fixed an issue where users could not rearrange series data when creating a new chart.

## 09.15.22

***

## 🎁  <font color="#2166ae">**Added**</font> &#x20;

### New features

- Released a new and revamped version of [Compensation reviews](https://docs.charthop.com/compensation-reviews).&#x20;

## 09.12.22

***

## 🎁  <font color="#2166ae">**Added**</font> &#x20;

### New features

- Added the ability to set the Data Sheet view to the current date. You can share dynamic views that retain the current date.
- Added a metric/KPI field Time to Fill which is measured by the difference between the start date for recruiting and the end date when a candidate accepts an offer.
- Added a field baseCompChanges which contains a list of compensation history, starting from a person's start date.
- Added a new Carrot filter of is\:NewTransfer to filter for internal transfers.
- Added a new Carrot filter is\:recentHire to filter for a person’s job start date.
- Added the new org option hideEquityValuation. You can hide your org’s company valuation alongside the value calculator in the Equity Grants tab.&#x20;
- Bar charts display a legend when two dimensions are added.
- The following new compensation fields were added:
  - Base&#x20;
  - Variable
  - Compa ratio

## <font color="#eb144c">**⚒  Fixed**</font>

- Fixed an issue where not selecting ‘Include Open Jobs’ when exporting a PowerPoint from the Org chart resulted in a presentation where the slides only showed one employee each.
- Fixed an issue where ISOs and NSOs were not split into individual stock grant options.
- Graphs that contain either long labels or more than 11 labels now correctly flip in orientation.
- Fixed an issue where removing Cross tab or Compare options in the Chart builder would not remove the series and break the chart.
- Fixed an issue where in managed groups, the color swatches in the list did not match what was available in the Org chart.


[title] Security of Third-Party Integrations: Finch
[path] Labs/Untitled/

## Overview

Finch is a subcontracted service provider used by ChartHop to deliver certain HR and payroll integrations. We perform due diligence and ongoing security reviews of Finch as part of our vendor management program. While each organization's procurement and security requirements differ, many customers rely on our vendor assessment process rather than conducting a separate review of Finch.

If your internal policies require direct review of subprocessors or third-party service providers, we're happy to discuss Finch's role and provide available documentation.

## Finch's role in the integration

Finch operates as a unified API that connects to HR and payroll systems on behalf of the integration. When an integration is powered by Finch, employer and employee data flows through Finch's infrastructure as part of delivering the connection.

## Finch's security and compliance posture

Finch maintains a third-party-audited security program. Its publicly attested compliance frameworks include *(as of Jun 1, 2026)*:

| Framework                                         | Status                                      |
| ------------------------------------------------- | ------------------------------------------- |
| SOC 2 Type II                                     | Audited annually by a certified third party |
| HIPAA                                             | Compliant                                   |
| GDPR                                              | Compliant                                   |
| CCPA                                              | Compliant                                   |
| EU-U.S. / Swiss-U.S. Data Privacy Framework (DPF) | Self-certified                              |

Finch's program covers the areas customers most often assess, including access controls and encryption, vulnerability management with regular third-party penetration testing, incident response, vendor risk management, availability and business continuity, and change management.

## Accessing Finch's documentation

### Detailed documentation (NDA required)

Finch's detailed security materials are available through Finch's Trust Center under NDA. To request access, please submit a request directly at the Trust Center so the NDA can be processed with your organization:

[https://finch.secureframetrust.com](https://finch.secureframetrust.com)

### General overview (no NDA required)

For a high-level overview of Finch's security program that is not gated, see Finch's security whitepaper:

[https://www.tryfinch.com/resources/whitepapers/security](https://www.tryfinch.com/resources/whitepapers/security)



:::hint{type="info"}
**How to proceed:** If your security or procurement team requires a direct review of Finch as a subprocessor, we recommend requesting the gated documentation through Finch's Trust Center so the NDA can be handled directly between your organization and Finch. For a general understanding of Finch's posture, the security whitepaper above is the best starting point. Reach out to your ChartHop contact with any questions about Finch's role in your integration.
:::


[title] What's new in CQL?
[path] ChartHop by ChartHop/Carrot (CQL)/

Coming soon...

[title] Manager Reviews
[path] ChartHop by ChartHop/Performance Reviews/

# How to Configure a Manager Review (Downward Review) in ChartHop

**What is a Manager Review?** A Manager Review (also called a Downward Review) is a performance evaluation that managers complete about their direct reports. This is typically the primary review document used in performance conversations.

## Before You Start: Key Decisions

### Decision 1: Questions vs. Custom Fields

You have two options when building your form:

**Option A: Questions Only**

- Responses are stored only within the form
- Simpler to set up
- Query or report on responses across the platform using ID's rather than fields

**Option B: Questions Connected to Custom Fields**

- Responses are stored as custom fields in ChartHop
- Can be queried, filtered, and reported on across the platform
- Best for tracking performance data over time
- Can be referenced in smart calculations

**Need help deciding?** Contact your Customer Success Manager to discuss which approach fits your organization's needs.

### Decision 2: When Should Employees See Their Reviews?

This is a critical decision for Manager Reviews:

**Option A: Release Step (Controlled Timing)**

- Managers write reviews, then manually release them to employees when ready
- Best for coordinating review conversations across the organization
- Ensures reviews are discussed in 1:1s before employees see written feedback
- **Field Sensitivity Setting:** Manager-Shared

**Option B: Bulk Releasing Unreleased Reviews (Controlled Timing)**

- Admins can release all pending reviews at the end of the review cycle or release all reviews at once
- **Field Sensitivity Setting:** Manager-Shared

**Option C: Bulk Release (not using Release functionality)**

- All reviews are released to employees at the same time (typically after all are completed)
- Best for structured review cycles with specific release dates
- Requires admin action to release all reviews at once
- Admins must update each field/question in the form from Manager Only sensitivity to Manager Shared
- **Field Sensitivity Setting:** Manager Only

**Option D: Immediate Visibility**

- Employees see reviews as soon as managers submit them
- Best for continuous feedback cultures
- No release step needed
- **Field Sensitivity Setting:** Manager-Shared

**Recommendation:** Most organizations use the Release Step approach for better coordination and to ensure managers discuss feedback before employees read it.

## Step 1: Build Your Manager Review Form

### Navigate To

People Ops Tools → Forms → Create Form → Manager Review

### Add a Header (Optional but Recommended)

Provide guidance to managers, such as:

- Your rating scale definitions and examples
- Links to your company values or competency framework
- Tips for writing effective, actionable feedback
- Calibration guidelines
- Reminder to focus on specific examples and behaviors

### Add Your Questions

Choose question types that capture the evaluation dimensions you need:

:::BlockQuote

:::

| Question Type | Best Used For                                            |
| ------------- | -------------------------------------------------------- |
| Long Text     | Detailed feedback, accomplishments, development areas    |
| Short Text    | Brief summaries or comments                              |
| Single Select | Overall performance ratings, promotion readiness         |
| Multi-Select  | Skills demonstrated, competencies met                    |
| Numeric Scale | Performance ratings by category (1-5, 1-10, etc.)        |
| Yes/No        | Binary assessments (meets expectations, promotion ready) |
| Number Value  | Quantitative goals (% attainment, numeric ratings)       |

**Common Manager Review Questions:**

- Overall performance rating
- Key accomplishments this period
- Areas for development
- Goals for next period
- Promotion readiness
- Flight risk assessment

### If Using Custom Fields

For questions connected to custom fields:

- **Applies to:** Select "People"
- **Track changes over time:** Check this box (maintains historical performance data)
- **Sensitivity:** Choose based on your release approach:
  - **Manager-Shared:** If using Release Step (managers release individually)
  - **Manager Only:** If using Bulk Release (admin releases all at once)

## Step 2: Configure Form Settings

### Status

- **Start with:** "Inactive" (draft mode while building)
- **When ready to launch:** "Active"

### Distribution Settings

**1. Who is this form about?**

- Select: "Another Person"
- *Managers are reviewing their direct reports, not themselves*

**2. Who can complete this form?**

- Select: "Their Manager"
- *Only the direct manager can complete reviews for their reports*

**3. Should this form automatically appear on profiles?**

Choose based on your review process:

- **Task-Based (Recommended):** "Only if there is a pending task"
  - *Gives you control over when reviews happen and who participates*
  - *You create review tasks for managers*
- **Self-Guided:** "Yes, on everyone's profile"
  - *Managers can write reviews anytime without tasks*
  - *Best for continuous feedback approaches*
- **Custom Group:** "Only specific people's profiles (Custom)"
  - *For specific teams or levels only*

### Access & Anonymity

**1. How should the identity of the respondent be recorded?**

- Select: "Identified"
- *Employees should know their manager wrote the review*

**2. Who can see the identity of the respondent?**

- Select: "Anyone who can view the form response"

**3. Who can view the form responses?**

- Select: "The person the form is about"
- *This ensures the employee being reviewed can see their review (once released, if using Release)*

### Form Completion

**1. Allow saving drafts?**

- Select: "Yes" (Recommended)
- *Managers can save progress and return to complete reviews later*

**2. Populate form with previous responses?**

- Select: "No, start with a blank form every time"
- *Ensures fresh evaluation each review cycle*

**3. How would you like your form to display?**

- Choose: Pop-up or Standalone page (based on preference)

### After Submission Settings

**Approval**

- Optional: Require approval based on your process
- *Some organizations require skip-level approval or HR review before release*
- *Common for promotions or performance improvement situations*

**Release (Optional but Recommended)**

If you want managers to control when employees see their reviews:

- Enable: "Require release before the person can view"
- **Who can release:** Select "Submitter or Admins" (Recommended)
  - *Submitter = the manager who wrote the review*
  - *Admins = HR or system administrators*
- *This ensures reviews are discussed in 1:1 meetings before employees read them*

**If you're using Bulk Release instead:** Skip enabling individual release and plan to release all reviews at once using admin controls.

**Editing**

- Select: Allow respondent to edit "Until it's approved" OR "For a period of time" (Recommended)
- *Gives managers flexibility to refine reviews before finalizing*
- *Consider timing: "Until approved" or set a specific deadline*

**Export**

- Optional: Allow export as PDF based on preference
- *Useful if managers want to keep copies or share offline*

### Notifications

**Email responses to:**

Choose who should be notified when reviews are submitted:

- "The person who completed the form" (the manager)
- "The manager of the person the form is about" (skip-level manager)

**Recommendation:** Enable notification to the manager who completed the form so they have confirmation of submission.

**Note:** Employees are typically notified separately when reviews are *released*, not when they're submitted.

## Step 3: Create the Profile Tab

Profile tabs display manager review responses on employee profiles.

### Navigate to Profile Tabs

Navigate to **Admin → Profile Content**.

**To create a new tab:**

1. Click the + icon
2. Name the tab "Performance Reviews"
3. Name the column "Manager Review"

**To add to an existing tab:**

1. Click into the existing tab
2. Add a new column
3. Name the column header "Manager Review"

### Configure the Downward Review Tab

**1. Display on the profile of:**

- If all employees receive manager reviews: Select "Everyone in the org" (Recommended)
- If only specific employees: Use "Custom" and create a filter

**2. Visible to:**

This is where you control visibility timing:

**During the Review Period (Before Release):**

- Select: "The person's manager" (Recommended)
- *Only managers see in-progress and completed reviews*
- *Employees cannot see reviews until they're released*

**After the Review Period (Post-Release):**

- Select: "The person, and the person's managers" (Recommended)
- *Employees can now see their reviews*
- *Managers retain access*

**Pro Tip:** You can adjust this setting at different points in your review cycle. Start with "Manager only" during writing, then change to "Person and managers" after all reviews are released.

**3. Columns:**

- Under "Form Responses History," select your Manager Review form
- *This displays review responses on the profile*

## Step 4: Activate Everything

### Activate the Form

1. Set Status to "Active"
2. Test by completing a sample review yourself

### Activate the Profile Tab

1. Scroll to top of Profile Tab settings
2. Toggle to "Active"

## How the Manager Review Process Works

Here's the typical flow once the form is active:

### With Release Step:

1. **Create review tasks** for managers (or managers access reviews on profiles if self-guided)
2. **Managers complete** reviews and submit them
3. **Managers conduct** 1:1 performance conversations with employees
4. **Managers release** reviews during or after the conversation
5. **Employees can view** their written reviews on their profile
6. **Profile tab visibility** can be updated to show employees their reviews

### With Bulk Release (by Updating Field Sensitivity):

1. **Create review tasks** for managers
2. **Managers complete** reviews and submit them (employees cannot see yet)
3. **All reviews are completed** and calibrated
4. **Admin releases all reviews** at a designated time
5. **Employees can view** their reviews simultaneously
6. **Managers conduct** 1:1 conversations (typically scheduled around release)

### Without Release (Immediate Visibility):

1. **Create review tasks** for managers
2. **Managers complete** reviews
3. **Employees see reviews** immediately upon submission
4. **Managers follow up** with 1:1 conversations

## Testing Your Manager Review Setup

Before launching organization-wide:

1. **Complete a test review** - Have a manager write a sample review
2. **Check visibility** - Verify the employee cannot see it yet (if using Release)
3. **Test the release function** - Release the review and confirm visibility changes
4. **Check the profile tab** - Verify the review appears correctly
5. **Test notifications** - Ensure emails go to the right people
6. **Review with HR** - Get sign-off on settings before rolling out
7. **Test approval workflow** - If using approval, verify it works as intended

## Common Questions

**What's the difference between Release and Bulk Release?**

- **Release Step:** Managers individually release each review when they're ready (usually after the 1:1 conversation)
- **Bulk Release:** An admin releases ALL reviews at the same time organization-wide by updating field sensitivity
- Choose based on whether you want individual flexibility or coordinated timing

**Should I require approval for manager reviews?** Most organizations don't require approval for standard reviews, but consider approval for:

- Promotion recommendations
- Performance improvement plans
- Reviews by new managers
- Organizations wanting HR oversight

**Can managers edit reviews after submission?** Yes, if you enable the editing setting. Common options:

- Allow editing "Until it's approved" (if using approval)
- Allow editing "For a period of time" (set a deadline)
- No editing after submission (for strict review processes)

**What if a manager doesn't complete a review on time?** You can:

- Send reminder emails through the task system
- Monitor completion rates in reporting
- Have HR or admins follow up directly

**Can skip-level managers see reviews?** Yes, managers up the reporting chain can see reviews based on your access settings. The "Default" access setting typically allows the full management chain to view.

**When should I change the profile tab visibility from "Manager only" to "Person and managers"?**

- **If using individual Release:** Keep it "Manager only" during review writing, then change after most reviews are released
- **If using Bulk Release:** Change it right after you execute the bulk release
- **If not using Release:** Set it to "Person and managers" from the start

**How do employees know when their review is released?** ChartHop sends an automatic notification email when a review is released to them. You can also communicate the release timing in advance should you be using fields to toggle.

**Can I disable email notifications when releasing reviews?** You can only disable notifications when bulk releasing.

**What if I want an employee's previous manager to complete the manager review form?&#x20;**&#x41;s long as the task is still pending, you can reassign a task. Go to the Task tab within the Performance Review and select the pending task you would like to reassign and click Reassign.&#x20;

##


[title] Budgets (Alpha)
[path] ChartHop by ChartHop/Headcount Planning/

# Budgets (Alpha)

Budgets give you a dedicated way to track planned spend against actual cost, right alongside your headcount planning. Set a budget once, and ChartHop shows you how you're tracking on the Budgets page and inside any scenario that touches it.

Budgets is an early-access feature in Alpha, so some of what's below may shift as it evolves. This article walks you through turning it on, creating a budget, and seeing it come to life in a scenario.

:::BlockQuote
**Budgets vs. Budget Scenarios:** These are two different features. A Budget Scenario is a scenario type in Headcount Planning built around a single fixed budget number. Budgets is a standalone feature with its own list and detail pages and its own cost tracking over time, and it also shows up inside your scenarios. If you already use Budget Scenarios, nothing changes: Budgets is an addition, not a replacement. To learn about Budget Scenarios, see *Use Case: Budget Scenario*.
:::

## Before you start

- Budgets is part of the Headcount Planning module (or ChartHop Premium).
- The Budgets page is visible to users with one of these access roles by default: Cash Comp Viewer, Comp Viewer, Equity Comp Viewer, Org Editor, or People Ops Admin. If someone on your team can't see Budgets after it's turned on, their access role is the first place to look.
- Because Budgets is in Alpha, your ChartHop CX team (CSM, IS, or Support) is the best place to bring questions, feedback, or anything that looks off.

## Turn on Budgets

1. Go to **Settings > Labs**.
2. Turn on **Budgets**.
3. Go to **Planning > Budgets**.

If you don't see Budgets in Labs, reach out to your ChartHop CX team (CSM, IS, or Support) and they'll get you set up.

## The Budgets list

The Budgets list shows every budget in your org, with:

- **Budget Name**
- **Status:** Draft or Active (the Status filter defaults to "Active and Draft")
- **Usage %:** a progress bar showing how much of the budget has been used
- **Amount Used**
- **Budget:** the total budgeted amount
- **Variance** and **Variance %:** how far usage is from budget, in dollars and as a percent
- **Groups:** the departments or teams the budget applies to
- **Owners**

Filter the list by **Period** (defaults to Current), **Status**, **Created by**, or by typing a budget name.

## Create a budget

1. Go to **Planning > Budgets** and select **Create**.
2. Fill in the budget details:

| Field             | Required? | What it does                                                                                      |
| ----------------- | --------- | ------------------------------------------------------------------------------------------------- |
| Budget Name       | Yes       | A label that identifies the budget across ChartHop                                                |
| Budget Date Range | Yes       | Choose a range type (such as Custom date range) and set the start and end dates                   |
| Owners            | No        | The people accountable for this budget. You can add more than one                                 |
| Groups            | Yes       | The departments or teams whose jobs count toward this budget. You can add more than one           |
| Cost basis        | Yes       | How the budget's cost is measured: Org default, Annualized, or Total cost over period (see below) |
| Active            | No        | Unchecked by default. Leave it unchecked to keep the budget as a Draft, or check it to activate   |

1. Select **Save changes**.

### Draft vs. Active

A new budget saves as a **Draft** unless you check **Active**. Drafts show usage and budget numbers for reference, but they don't appear in any scenario until you activate them. When you're ready for a budget to start tracking variance and showing up in scenarios, edit it and check **Active**.

### Choosing a cost basis

The cost basis controls how ChartHop measures the cost that counts against a budget. You have three choices:

- **Org default:** Follows your organization's default cost basis. The option label shows what that default currently resolves to, for example "Org default (Total cost over period)."
- **Annualized:** The ongoing yearly run-rate for everyone in scope, no matter how long the budget itself runs. Use this to track the standing cost of a team.
- **Total cost over period:** The cost that actually falls inside the budget's start and end dates. ChartHop prorates each person's run-rate month by month across that range, and counts open roles only from their planned start date. Use this when you want spend to match the real cost of a fixed time window.

Here's how that plays out. A role with a $120,000 annual run-rate, filled all year, shows as $120,000 on an Annualized budget. On a Total cost over period budget that runs for six months, the same role contributes about $60,000, because only half the year falls inside the budget's dates.

## Your budget's detail page

Open any budget from the list to see:

- **Budget Usage:** Amount Used, Budget, and Budget Remaining, with a progress bar and usage percentage.
- **Budget Usage Over Time:** A chart plotting Budget, Usage, and Forecast across the timeline. While a budget is a Draft, a banner reminds you to activate it to capture a baseline and start tracking variance.
- **Details panel:** Owners, Groups, Timeline (shown as a fiscal year, such as FY 2026), and Cost basis.
- **Header actions:** Edit Budget, plus icons to add collaborators, archive, or delete the budget.

### Budget Breakdown Per Job

Below the usage chart, the Budget Breakdown Per Job table gives you a per-job, per-month view of what's counting toward the budget:

- **Header stats:** Total jobs in the budget's groups, how many are filled vs. open, and a count of jobs missing comp data (with a toggle to show only those).
- **Columns:** Job, Person, Total Annualized, a column for each month, and Total Applied to Budget.
- **View on Data Sheet:** Jumps to the same jobs in Data Sheet view.

This is a great place to answer team-level or line-of-business questions about where budget dollars are going.

## Share a budget

Budget figures are compensation-adjacent, so it's worth a quick look at sharing before you invite others in. From the budget's detail page, select the share icon and choose a **Sensitivity** setting:

- **Org Public:** Visible to everyone in your org.
- **Highly Sensitive (default):** Visible only to org owners and users who already have access to view sensitive data.

The share dialog also lists the people who currently have access and their role, such as Owner.

## Budgets in scenarios

Once a budget is **Active**, it shows up in any Headcount Planning scenario that touches the budget's groups. In the scenario's Data Sheet view, under the changes and annual cost summary, you'll see a chip for each applicable budget.

A budget appears in the scenario header only if it is Active, its groups overlap with the groups affected by the scenario, and you have permission to view it.

Each chip is built from three figures:

- **Current usage:** How much of the budget is used in your live org today, before any scenario changes.
- **Scenario impact:** The net cost change the scenario would add to, or remove from, the budget.
- **Total amount:** The full budget limit.

Visually, each chip shows the budget name, a progress bar for amount used against the budget (for example, "$45M / $50M"), and a status badge:

- **Under budget:** A green checkmark with the percentage under, such as "10% under."
- **Over budget:** The bar turns red, and the badge shows a warning icon with the dollar amount over, such as "$219k over."

If your scenario spans groups with different budgets, you'll see one chip per budget, and each one can independently show under or over. Going over budget doesn't block **Submit for approval**. Think of the red chip as a heads-up for whoever is building the plan.

Hover over the small **(i)** icon next to a budget chip to see the formula behind its cost calculation, such as totalComp. It's a handy check if a number looks different from another view of the same jobs.

### Scenario cost view

The scenario's own cost summary, next to **Submit for approval**, has a dropdown to view the scenario's cost as **Annual cost**, **Fiscal year**, or **Quarter**. These totals prorate automatically based on each job's start and end dates and update as soon as you switch views. Your scenario's cost always starts from an annualized total, so this setting is separate from a budget's cost basis.

## Good to know

- Budgets is in Alpha. Expect ongoing improvements, and share what you'd love to see with your ChartHop CX team (CSM, IS, or Support).
- A budget must be **Active**, not Draft, before it shows up in scenarios or tracks variance.
- Who can see a budget depends on access role, budget owners, and sharing settings, so double-check these if a teammate can't find a budget.
- Budget usage is calculated using your org's Scenario Cost Calculation, which you can configure under **Admin > Financial Settings**. If you change it, review your budgets so your amounts and usage figures stay on the same basis.

[title] Building HTML Tables in Text Blocks
[path] ChartHop by ChartHop/Dashboards/

Text blocks in ChartHop dashboards support raw HTML, which means you can build a fully formatted, styled table using a `<table class="ch-table-1">` element combined with CQLT (template expressions). This is especially useful when you need a custom multi-row table that responds to dashboard filters — but where the native chart types don't give you exactly the layout you want.
## When to Use This
- You want a table that displays computed metrics side by side (e.g., review scores across multiple categories)
- You need 20+ versions of the same dashboard with different filters — and want one flexible text block that adapts to `jobFilter`, rather than rebuilding native chart tables for each version
- The data you're displaying comes from long or complex CQL expressions (like custom scoring calculations) that don't map cleanly to a native chart formula
## How It Works
Inside a Text Block, you can write HTML directly. ChartHop will render it as formatted content. Wrap any CQL expression in `{{ }}` to have it evaluated dynamically — just like you would in any other template expression.
The class `ch-table-1` applies ChartHop's standard table styling, so your table visually matches the rest of the dashboard.
## Basic Structure
```html
<table class="ch-table-1">
  <thead>
    <tr>
      <th>Category</th>
      <th>Score</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Overall Performance</td>
      <td>{{ findAnswersByAssessment('managerReviewRating', 'H1 Performance Review').filter{target.department=jobFilter}.mean{value} }}</td>
    </tr>
    <tr>
      <td>Values Alignment</td>
      <td>{{ findAnswersByAssessment('valuesRatingManager', 'H1 Performance Review').filter{target.department=jobFilter}.mean{value} }}</td>
    </tr>
  </tbody>
</table>
```

## Available Variables

Text blocks have access to three key dashboard variables that make your table dynamic and filter-aware:

| Variable        | What It Represents                                                                                                           |
| --------------- | ---------------------------------------------------------------------------------------------------------------------------- |
| `jobFilter`     | The audience/filter the dashboard viewer has currently applied (e.g., filtered to Engineering, or a specific manager's team) |
| `intervalFrom`  | The start of the reporting period selected on the dashboard (inclusive)                                                      |
| `intervalUntil` | The end of the reporting period selected on the dashboard (exclusive — i.e. the day *after* the last day in the period)      |

Using all three means your table responds fully to whatever the viewer has configured — both in terms of *who* is in scope and *when*.

These are the same variables used in time-series chart formulas, so if you're already familiar with `intervalFrom`/`intervalUntil` from building charts, they work exactly the same way here.

### Example: using all three variables

```html
<td>{{ findHires(intervalFrom, intervalUntil).filter{jobFilter}.count() }}</td>
```

This counts new hires within the selected date range, scoped to the active filter.

## Using `jobFilter` Inside the Table

Because this is a Text Block, the `jobFilter` variable is available — it reflects whatever filter the dashboard viewer has currently applied (e.g., filtered to Engineering, or a specific manager's team).

You can pass `jobFilter` directly into your CQL expression:

```html
<td>{{ db.job.find(jobFilter).mean{baseComp.annualized} }}</td>
```

This means a single text block table can power 20+ filtered dashboard versions without any changes — just apply a different audience or department filter on the dashboard itself.

## Real-World Example: Multi-Score Review Summary Table

This example displays average scores across several review dimensions, filtered to whoever is in scope:

```html
<table class="ch-table-1">
  <thead>
    <tr>
      <th>Review Dimension</th>
      <th>Avg Score</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Overall Performance</td>
      <td>{{ findAnswersByAssessment('managerReviewRating', 'H1 2025 Review').filter{jobFilter}.mean{value} }}</td>
    </tr>
    <tr>
      <td>Impact</td>
      <td>{{ findAnswersByAssessment('impactCompetency', 'H1 2025 Review').filter{jobFilter}.mean{value} }}</td>
    </tr>
    <tr>
      <td>Collaboration</td>
      <td>{{ findAnswersByAssessment('collaborationCompetency', 'H1 2025 Review').filter{jobFilter}.mean{value} }}</td>
    </tr>
    <tr>
      <td>Knowledge</td>
      <td>{{ findAnswersByAssessment('knowledgeCompetency', 'H1 2025 Review').filter{jobFilter}.mean{value} }}</td>
    </tr>
  </tbody>
</table>
```

## Tips

- **Always use&#x20;**`ch-table-1` as the class — this applies ChartHop's built-in table styling and keeps it visually consistent with native chart tables.
- **Column headers are static HTML** — only the cell values need template expressions. Keep headers as plain text in `<th>` tags.
- **Expressions are evaluated server-side** — if a formula returns no data (e.g., no responses exist for a filter), the cell will render as empty rather than erroring.
- **This does not replace native Table charts** for most use cases — if the built-in Table chart type works for you, use it. This approach shines when you need custom layouts, multi-source data in one table, or highly specific expression logic that the native chart type can't express.

[title] Customize your Forms
[path] ChartHop by ChartHop/Customizing ChartHop with AI/

# Using AI to Write Form Text Blocks

Form Text Blocks are the instructional and contextual content you add inside a ChartHop form. They're not fields — they're the copy that helps employees understand what a form is asking them to do.

Used well, they reduce confusion, set expectations, and make forms feel less like bureaucracy and more like a conversation. AI can write all of it. You just need to know what each section needs to say.

## What Form Text Blocks support

Form Text Blocks accept **HTML** or **Markdown**. Both work. Which one you use depends on how much formatting you need.

Use **Markdown** when you want clean, simple text: a short intro, a bulleted list of instructions, a section divider. It's faster to write and easier to update.

Use **HTML** when you need branded styling: a callout box with a background color, a header that matches your visual identity, or a more structured layout.

Both support \{\{fieldCode}} syntax to pull in live employee data.

No JavaScript. No external stylesheets. HTML must use inline CSS only.

## Common uses

- An intro block at the top of a form explaining its purpose and what happens after submission
- Section headers that divide a long form into logical parts
- Instructional callouts ("All responses are confidential" or "This section is for managers only")
- Contextual notes that appear mid-form ("Your answer here will be shared with your manager during calibration")
- A closing block with next steps or a timeline

## Before you start

Collect these inputs before you open an AI tool.

| What to collect               | Example                                                           |
| ----------------------------- | ----------------------------------------------------------------- |
| Form name                     | "Q1 Performance Review," "New Hire Onboarding Checklist"          |
| Where the block appears       | Top of form, mid-form section header, closing block               |
| What it needs to communicate  | Purpose, instructions, deadlines, confidentiality note            |
| Tone                          | Warm and encouraging, clear and direct, neutral and informational |
| Any dynamic fields to include | \{\{first.name}}, \{\{manager.name}}                              |
| Output format preference      | Markdown (simple) or HTML (branded)                               |

## Dynamic fields you can use

| Field                 | What it shows         |
| --------------------- | --------------------- |
| \{\{first.name}}      | Employee's first name |
| \{\{last.name}}       | Last name             |
| \{\{job.title}}       | Job title             |
| \{\{manager.name}}    | Manager's name        |
| \{\{department.name}} | Department            |

## The prompt to give your AI

### For Markdown output (simple, fast)

:::BlockQuote
You are helping me write a text block for a ChartHop form.

Output format: Markdown only. No HTML.

This block will appear \[at the top of / as a section header in / at the bottom of] a form called "\[YOUR FORM NAME]."

It should:
\- \[DESCRIBE WHAT YOU NEED: intro paragraph, bulleted instructions, confidentiality note, next steps, etc.]
\- Be short — this is a form, not a document. 3–5 sentences max unless I ask for more.
\- Use \{\{first.name}} if it makes sense to address the employee directly

Tone: \[warm and encouraging / clear and direct / neutral]

Output only the Markdown. No explanation.
:::

### For HTML output (branded styling)

:::BlockQuote
You are helping me write a styled text block for a ChartHop form.

Rules:
\- Use only inline CSS — no \<style> tags, no external stylesheets
\- No JavaScript
\- Dynamic fields use \{\{fieldCode}} syntax — keep these exactly as written

My brand details:
\- Primary color: \[YOUR PRIMARY HEX]
\- Accent / background color for callout boxes: \[YOUR ACCENT HEX or a light tint]
\- Font: \[YOUR FONT NAME], with Arial as fallback

This block will appear \[at the top of / as a section header in / at the bottom of] a form called "\[YOUR FORM NAME]."

It should:
\- \[DESCRIBE WHAT YOU NEED: a styled intro box, a callout with an icon or colored border, a section divider with a label, etc.]
\- Be short — forms need to feel approachable, not overwhelming
\- Use \{\{first.name}} if it makes sense

Output only the HTML. No explanation.
:::

## Tips for better results

**Shorter is almost always better.** A text block that takes 30 seconds to read is a text block employees will skip. Ask the AI to keep it tight and cut anything that isn't load-bearing.

**Tell the AI the context.** "This appears at the top of a performance review form that employees complete about themselves" gives it everything it needs to get the tone and content right.

**Use Markdown for most things.** Unless you specifically need brand colors or a callout box, Markdown is faster and easier to maintain. It also tends to look cleaner inside ChartHop's form UI.

**Ask for a Markdown and HTML version.** If you're not sure which you want, ask the AI to give you both. Pick the one that looks better when you preview the form.

## Conditional logic

If a form serves multiple employee types or roles, you can show or hide text blocks based on employee data. ChartHop uses \{% if %} / \{% endIf %} blocks for this.

:::BlockQuote
\{% if \{\{employment.type}} == 'Full-time' %}
&#x20; This section applies to full-time employees only.
\{% endIf %}
:::

:::BlockQuote
\{% if \{\{department.name}} == 'Sales' %}
&#x20; Your commission structure is outlined in your comp agreement on file.
\{% endIf %}
:::

Give the AI the condition and the content you want shown:

:::BlockQuote
Add a conditional block that only shows if \{\{department.name}} equals 'Sales'.
When it does, show: \[YOUR CONTENT]
Use ChartHop's conditional syntax: \{% if \[condition] %} ... \{% endIf %}
:::

## Adding it to ChartHop

1. Open the form you're editing
2. Add a **Text Block** element where you want the content to appear
3. Paste your HTML or Markdown into the editor
4. Preview the form to check layout and confirm field codes render correctly
5. Save the form

[title] Launch Email Templates
[path] ChartHop by ChartHop/ChartHop for All-(Org-Rollouts)/

# ChartHop Launch Email Templates

Use these templates as a starting point — but please customize them before sending. Fill in the bracketed sections, remove any features your organization hasn't purchased, and make it sound like you. The more personal it feels, the more likely employees are to actually log in.

## Email 1: For the Whole Team (Option One)

**Subject:** We're launching ChartHop — here's your invitation

Hi team,

Starting today, \[Company] is rolling out ChartHop — and we're really excited about this one.

We brought ChartHop in because \[insert your why — e.g., "we wanted one place for everything people-related instead of five different systems" / "we wanted to give every employee more visibility into the org" / "we wanted a better way to run performance reviews and actually act on engagement feedback"]. After using it on the HR side for a while now, we can't wait for you to get your hands on it.

You'll receive your invitation to log in shortly. When you do, start by updating your profile — it takes five minutes and it makes a real difference in how connected we feel as a team.

More to come as we get rolling. Questions? Just reply to this email.

\[Your name] \[Title]

## Email 2: For the Whole Team (Option Two)&#x20;

**Subject:** Something we've been working on for you 💙

Hi \[Company] team,

We've been building toward this for a while, and we're really happy it's finally here.

Today we're launching ChartHop — a platform we chose specifically because \[insert your why]. Whether you're looking up a colleague, completing a performance review, sharing feedback, or requesting time off \[remove if not applicable], it's all going to live in one place now.

We know a new tool can feel like one more thing. But we genuinely think this one will make your day-to-day easier — and we wouldn't be rolling it out if we didn't believe that.

Your invitation is on its way. When it arrives, log in, look around, and send a Shoutout to someone who deserves one. That's it for now.

\[Your name] \[Title]

## Email 3: For Launching with a Contest / Scavenger Hunt

**Subject:** 🎉 ChartHop is live — log in and you could win

Hi team,

ChartHop is officially live — and to celebrate, we're making it a little competitive.

**Here's the challenge:**

1. Log in using your invitation
2. Complete your About Me profile (photo, fun fact, name pronunciation)
3. Reply to this email with your favorite thing you found

**First \[X] people to do all three win \[gift card / prize].**

ChartHop is where \[Company]'s people operations will live — from \[performance reviews and goal setting] to \[engagement surveys] to simply finding out who does what across the org \[customize to your features]. We'll share more about everything it can do over the coming weeks.

For now — go explore.

\[Your name] \[Title]

## Email 4: For Managers

**Subject:** ChartHop is live — a quick note for managers

Hi \[managers / team],

We're launching ChartHop to the full company this week, and we wanted to give you a heads up on what this means for you specifically.

As a manager, ChartHop gives you a real home base for your team. You'll have your org chart, your team's profiles, and your HR processes — \[performance reviews, goal tracking, engagement results, compensation planning, headcount planning — remove what doesn't apply] — all in one place instead of scattered across emails and spreadsheets.

We think it's going to make your job easier. And your team is going to love having access to it too.

Your invitation is on its way. Start by exploring your team in the org chart — and if you have questions, we're hosting office hours every \[day] at \[time] for the first few weeks.

\[Your name] \[Title]

[title] Use Case: Budget Scenario
[path] ChartHop by ChartHop/Headcount Planning/

A Budget Scenario lets you model planned headcount changes and track their cost against a fixed budget in real time. It's a way to give your Finance team or department leads a sandbox to plan hiring — while making sure everyone is working against the same number and the same definition of what "cost" means for your organization.

This article walks through the full workflow end to end, starting with cost configuration, because getting that right before you build your scenario is what makes the budget tracker meaningful.

## Before you start: who can create a Budget Scenario?

Budget Scenario creation is permission-controlled in ChartHop. By default, the following built-in roles can create Budget Scenarios: **Cash Comp Viewer, Comp Viewer, Equity Comp Viewer, Org Editor,** and **People Ops Admin**.

Other roles, including managers, can create other scenario types (like Create Job or Promotion Planning) but cannot create Budget Scenarios unless their access role is updated. If you have users with custom access roles who need to create Budget Scenarios, a ChartHop admin will need to add the **Allow Create Budget Scenarios** policy to their role.

## Step 1: Understand how cost works — and decide what it should mean for your org

Before building your scenario, it's worth understanding how ChartHop calculates cost and where that calculation lives, because it directly affects what your budget tracker shows.

### The default cost formula

By default, ChartHop calculates cost using:

**(Base Salary × Org Cost Multiplier) + Variable Pay**

The org cost multiplier is configured in **Admin → Financial**. If your org hasn't set one, it defaults to 1, making the effective default simply base salary + variable pay.

This formula powers two built-in cost fields:

- **cost** — calculates cost for any job, whether filled or open
- **budgetCost** — only returns a value for currently filled roles; returns null for open roles

This distinction matters for Budget Scenarios: if you're planning new open headcount, budgetCost won't contribute to your tracker — only cost will.

### Why open roles often show $0

When you add a new open role to a scenario, ChartHop needs data on the role to calculate against. If the role has no base salary entered and no compensation data assigned, there's nothing to run the formula on — so cost comes back as $0.&#x20;

To get cost to populate for open roles, make sure each role has the data your formula depends on. For example:

- If your formula uses base salary, enter a base salary when creating the role.
- If your formula uses comp band fields, assign a comp band to the role so those fields have a value to return.

The right approach depends on how your organization defines cost for planned headcount.

### Deciding whether to use the default formula or a custom one

The default formula works well for many organizations. Consider configuring a custom formula if:

- Your org calculates cost differently — for example, using a loaded cost that accounts for benefits, taxes, or overhead
- You want cost to reflect something other than actual base salary — for example, a band-based value used for planning purposes
- You want to calculate monthly or quarterly cost instead of annualized cost
- You want to apply fiscal year date logic to your cost figures

The formula is configured at the org level in **Admin → Financial → Cost Calculations** and applies to all scenarios, not just Budget Scenarios.

### Configure a custom cost formula

1. Go to **Admin → Financial**.
2. Under **Cost Calculations**, select **Custom formula**.
3. Enter a CQL expression in the **Formula** field. Some examples:

| Formula                                     | What it calculates                                                           |
| ------------------------------------------- | ---------------------------------------------------------------------------- |
| compBand.baseMid                            | The midpoint of the assigned compensation band                               |
| baseComp.annualized \* 1.2 + variableTarget | Annualized base with a 1.2x loaded cost multiplier, plus variable pay target |
| baseComp.annualized + variableTarget        | Annualized base salary plus variable pay target                              |

1. Optionally update the **Cost label**. This short label is displayed in scenarios and defaults to *Annual Cost*. Only change it if your formula doesn't represent annual cost — for example, if you're calculating a loaded or monthly figure — so collaborators know what the number means.
2. Optionally add a **Cost description** — a plain-language explanation of what the formula includes, visible to anyone with access to the scenario. Supports rich text and markdown.
3. Select **Save**.

:::BlockQuote
**If your formula uses comp band fields:** Comp bands need to be uploaded and applied to roles before comp band fields will return values. For open roles, you can apply a comp band when creating the job inside your scenario. For existing roles, comp bands need to be applied — either inside or outside of a scenario — before you build your plan. See Compensation bands.
:::

## Step 2: Create a Budget Scenario

Once you've confirmed your cost formula reflects how your org thinks about headcount spend, you're ready to build your scenario.

1. From the left navigation, select **Planning**.
2. Select **Create scenario**.
3. Select **Budget scenario** — *Associate your changes with a fixed budget.*
4. Enter a **Scenario name** — something clear and specific, like *Q3 2026 Delivery Headcount Plan*.
5. Enter a **Start date** — the date the proposed changes are intended to go into effect.
6. Enter your **Budget amount**. This is the total spend you're planning against, measured using your configured cost formula.
7. Select **Create**.

:::BlockQuote
**On setting your budget amount:** Make sure your budget amount and your cost formula are using the same basis. If your formula calculates annualized cost, your budget should be an annualized figure. If you've configured a monthly formula, your budget should be monthly. Mismatching these will make the tracker misleading.
:::

You can update the budget amount at any time after creation by selecting **Edit scenario details** from the dropdown in the scenario header.

## Step 3: Add roles to your scenario

Once the scenario is created, you'll land on the **Changes** tab. This is where you add and manage the roles you're planning for. Every change you make automatically updates the budget tracker in the scenario header.

### Make sure each role has the data your formula needs

Roles without the right data will show $0 in your tracker and won't count against your budget even though you're planning for them. Before adding roles, make sure you know what your formula depends on.

A few things to keep in mind:

- **Be careful when cloning existing roles.** Cloned jobs carry over all data from the original, including base salary. If your formula uses band-based data for planning purposes, an existing salary on the role may produce unexpected cost figures. Creating roles from scratch gives you a clean starting point.
- **Apply any required comp bands when creating the role.** If your formula references comp band fields, assign the band at role creation. A comp band field can't return a value if no band is assigned.
- **Set a Planned Start Date on each role.** This affects how ChartHop treats the role. Jobs without a future planned start date are treated as open; setting a future date is what converts a role to a "new hire" in terms of how it's counted in headcount and cost calculations. This date is also used in forecast reports — when you view the scenario using *Primary, with Forecast* as the data source, roles with a Planned Start Date are projected as filled on that date.

## Step 4: Track spend against your budget

The **budget tracker** lives in the scenario header, next to the scenario name and status. It shows:

- The annualized cost of all changes in the scenario so far
- Your total approved budget amount (for example, *$0 / $15,000,000*)
- A progress bar showing how much of your budget has been used

The tracker updates in real time as you add and edit roles. If a new role pushes you over budget, you'll see it immediately.

For a deeper breakdown, select the **Impact** tab inside your scenario. This surfaces reports that slice headcount cost by dimensions like team, location, department, or role type — useful for presenting the plan to Finance or department leads.

## Step 5: Share your scenario

When you're ready to bring in collaborators, use the sharing controls in the scenario header to add them. Each person gets a permission level that combines what they can **do** with what data they can **see**.

| Permission                        | What it means                                                                                             |
| --------------------------------- | --------------------------------------------------------------------------------------------------------- |
| **Viewer - limited data access**  | Read-only; can only see changes to people below them in the org chart; cannot view the total cost summary |
| **Viewer - standard data access** | Read-only; can only see what they'd normally have access to on Primary                                    |
| **Viewer - full data access**     | Read-only; can see all scenario data including compensation, regardless of their normal access role       |
| **Editor - limited data access**  | Can make changes; limited to people below them in the org chart; cannot view the total cost summary       |
| **Editor - standard data access** | Can make changes; limited to data they'd normally have access to on Primary                               |
| **Editor - full data access**     | Can make changes; full access to all scenario data including compensation                                 |
| **Owner - full data access**      | Full access, including the ability to merge the scenario to Primary                                       |

**Choosing the right level:**

For a Finance team or department lead who is actively building out the plan, **Editor - full data access** is usually the right choice — they need to add roles and see compensation data to plan meaningfully. If they're reviewing rather than building, **Viewer - full data access** gives them visibility without edit rights.

Use **standard data access** when someone should only see what they'd normally see on Primary. Use **limited data access** when you want a manager to plan their own part of the org without visibility into the full cost picture or other teams' data.

:::BlockQuote
**Note:** Full data access overrides a person's normal ChartHop access role for the scope of this scenario. Use it for people who genuinely need to see sensitive compensation data to do their planning work.
:::

## Step 6: Submit for approval and merge to Primary

### Setting up an approval chain

Budget Scenarios support their own dedicated approval chain, separate from other scenario types. If your org requires approval before a headcount plan goes live, you can configure an approval chain specifically for Budget Scenarios in **Admin → Approval Chains**. This lets you route Budget Scenario approvals to Finance, leadership, or a different set of approvers than, say, a promotion planning scenario.

### Submitting and the approval flow

When your scenario is ready for review, select **Submit for approval** in the scenario header.

Once submitted, the active approver can make edits to the scenario — for example, adjusting a planned start date or updating compensation. Once they approve or reject, the scenario locks and they can no longer edit it.

:::BlockQuote
**Note:** There are currently no in-platform notifications sent when an approver makes edits. Anyone with access to the scenario maintains visibility as always.
:::

If a scenario is **rejected**, it enters a locked state. The submitter should select **Edit Scenario** from the **Actions** dropdown to unlock it, return it to Draft status, make revisions, and resubmit.

### Merging to Primary

Once approved, select **Merge to Primary** to bring your planned changes into the live org chart.

Merging works well for open roles you're adding. If your scenario includes changes to existing employees' fields — like title or salary — keep in mind that any fields synced from your HRIS will be overwritten at the next sync. For those changes, the recommended approach is to export a CSV from the scenario and import those changes directly into your HRIS source system first, then merge.

[title] Org Rollout Toolkit
[path] ChartHop by ChartHop/ChartHop for All-(Org-Rollouts)/

# All-Org Rollout Toolkit

Everything you need to launch ChartHop to your entire organization — from executive sponsorship and talking points to day-one employee communications. Download, customize, and go.

## 🗂 Start Here: Core Planning

Align your messaging and prepare your project sponsor before anything goes out to the org.

**📋 Talking Points**

The foundation for all rollout communications. Core messaging on what ChartHop is, why you're rolling it out, and audience-specific talking points for every group.

[↓ Download PDF](https://drive.google.com/uc?export=download\&id=1wtS5uUeT-o5l1P_uw-X5p8k5L5zsPKhM)

**🎬 Project Sponsor Video Script**

Fill-in-the-blank scripts for your executive announcement. Includes a 60–90 sec pre-launch version and a 30–45 sec go-live version, plus recording tips.

[↓ Download PDF](https://drive.google.com/uc?export=download\&id=1ZDuBEzRUb6-UIzz6d_p_lPACcOys4fg6)

## 📣 Announcement Communications

Build awareness early — post across multiple channels 3–4 weeks before go-live.

**✉️ Announcement Email Templates**

Project Sponsor email templates for five audiences — internal team, leaders, HR admins, managers, and all employees. Each answers the key questions your audience will have.

[↓ Download PDF](https://drive.google.com/uc?export=download\&id=1HuHm5M8Wq3tDnhIGzFjxtAryLQq4Zq0I)

**📢 Announcement Communication Templates**

Ready-to-use copy for your intranet/employee portal, Slack or Teams, and company newsletter. Spark interest and reduce uncertainty before go-live.

[↓ Download PDF](https://drive.google.com/uc?export=download\&id=1I7rSTrd5S5pwatLgmtqF4JeN2kb2plL1)

## 🚀 Pre-Launch Enablement

Send these 1–2 weeks before go-live to drive training and build launch-day confidence.

**⚡ Enablement Communication Templates**

The full countdown kit: manager readiness email (T-14), employee readiness email (T-7), go-live day email, intranet portal copy, Slack/Teams countdown messages, and an internal newsletter block.

[↓ Download PDF](https://drive.google.com/uc?export=download\&id=1eu11DJ4WJJMPiYVYAzxoPUUlAz91Sr0b)

***

## How to Use This Toolkit

1. **Start with the Talking Points.** This is your messaging foundation — fill in your company name, goals, timeline, and audience-specific benefits first.
2. **Prepare your Project Sponsor.** Send them the email templates and ask them to send the leader and all-employee emails on your announcement date.
3. **Post announcement communications 3–4 weeks before go-live** across your intranet, Slack/Teams, and company newsletter.
4. **Send enablement comms 1–2 weeks out.** Manager email at T-14, employee email at T-7, and countdown Slack messages at T-3 and T-1.
5. **Launch!** Send the go-live day email and Slack message first thing in the morning. Have your People team standing by.

:::BlockQuote
**Before distributing:** All templates include highlighted placeholders for your organization's specifics. Delete all instruction boxes before sending anything externally. Questions? Contact your ChartHop CSM or email [support@charthop.com](mailto\:support@charthop.com).
:::


[title] Cheat Sheet
[path] ChartHop by ChartHop/Carrot (CQL)/

# ChartHop CQL (Carrot) Formula Cheat Sheet

:::BlockQuote
CQL (Carrot Query Language) is ChartHop's built-in expression language for searching, filtering, calculating, and displaying people data. The same logic works everywhere — only the syntax wrapper changes.
:::

## 🧩 Where Are You Writing This?

| Context                            | Syntax                        | Example                           |
| ---------------------------------- | ----------------------------- | --------------------------------- |
| Smart Calc / Smart Bucket          | Plain expression              | base \* fieldCode1                |
| Data Sheet calculated column       | Plain expression              | diffYears(startDate, today())     |
| Form content block                 | \{\{ }}                       | \{\{formatMoney(base)}}           |
| Form (live answer from same form)  | formAnswers\['fieldCode']     | formAnswers\['fieldCode1'] \* 100 |
| Document / letter template         | \{\{ }}                       | \{\{name}}                        |
| Markdown (profile tabs, home page) | \{\{ }} values · \{% %} logic | See Markdown section              |
| Dashboard chart (Advanced mode)    | \{\{ }}                       | \{\{base / fieldCode1}}           |

## ⚡ Operators

| Symbol           | Meaning                                | Example                                                  |
| ---------------- | -------------------------------------- | -------------------------------------------------------- |
| =                | Exact match                            | department.func='Engineering'                            |
| !=               | Not equal                              | status!='Inactive'                                       |
| :                | Contains / fuzzy match                 | title:'Director'                                         |
| > \< >= \<=      | Comparison                             | base>100000                                              |
| && or and        | AND (interchangeable in most cases)    | department.func='Sales' && base>80000                    |
| \|\|             | OR                                     | department.func='Sales' \|\| department.func='Marketing' |
| !                | NOT                                    | !department:'Sales'                                      |
| fieldCode:\*     | Has any value                          | fieldCode1:\*                                            |
| ?                | Ternary — if/then/else                 | base > 100000 ? 'High' : 'Low'                           |
| ?:               | Elvis — value if exists, else fallback | fieldCode1 ?: 0                                          |
| dateOf.fieldCode | Date the field was last written        | dateOf.base                                              |

:::BlockQuote
**&& vs and:** These work interchangeably in most filter and Smart Field contexts. If a formula behaves unexpectedly, try switching to &&.
:::

## 📐 Performance & Goals

**Weight an individual goal's rating by its assigned weight**

:::BlockQuote
fieldCode1 \* (fieldCode2 ?: 0)
:::

:::BlockQuote
fieldCode1 = goal rating · fieldCode2 = goal weightage · ?: 0 prevents a blank weight from breaking the formula. Create one Smart Calc per goal, then sum them for the total.
:::

**Total weighted goal score**

:::BlockQuote
round(fieldCode1 + fieldCode2 + fieldCode3, 2)
:::

:::BlockQuote
Each fieldCode = a per-goal weighted rating Smart Calc field. Add a term for each goal your org uses. Keeping this as its own field makes it easy to reference in forms and the final rating calc.
:::

**Total performance rating (goals + values)**

:::BlockQuote
round((fieldCode1 \* 0.80) + (fieldCode2 \* 0.20), 2)
:::

:::BlockQuote
fieldCode1 = total weighted goal score · fieldCode2 = values/brand score. Adjust the 0.80/0.20 split to match your org's weighting — multipliers must sum to 1.0.
:::

**Average only the goals that were actually used (skip zeros and blanks)**

:::BlockQuote
mean(  fieldCode1 > 0 ? fieldCode1 : null,
&#x20; fieldCode2 > 0 ? fieldCode2 : null,
&#x20; fieldCode3 > 0 ? fieldCode3 : null
)
:::

:::BlockQuote
Extend with fieldCodeN > 0 ? fieldCodeN : null for each additional goal. mean() skips nulls but not zeros — this pattern ensures unused goals don't drag the average down.
:::

**Combine multiple rating categories into one weighted score**

:::BlockQuote
((fieldCode1 ?: 0) \* 0.50) +((fieldCode2 ?: 0) \* 0.30) +
((fieldCode3 ?: 0) \* 0.20)
:::

:::BlockQuote
Weights must sum to 1.0. ?: 0 ensures a missing rating doesn't nullify the entire formula.
:::

**Count how many times an employee hit a specific rating in recent cycles**

:::BlockQuote
findHistoryValues(\{fieldCode1}).reversed.limit(6).count\{it='Meets Expectations'}
:::

Full history (no limit):

:::BlockQuote
findHistoryValues(\{fieldCode1}).count\{it='Exceeds Expectations'}
:::

:::BlockQuote
.reversed = most recent first · .limit(N) = last N cycles · Always use it inside .count\{} — not the original field code. Gives reviewers a consistency signal, not just the most recent result.
:::

**Show a rating only if it was submitted before a review cutoff date**

:::BlockQuote
\{\{dateOf.fieldCode1\<='2024-11-10' ? fieldCode1 : null}}
:::

:::BlockQuote
Use in a form content block. Repeat for each rating field. Prevents backdated or late entries from surfacing during calibration.
:::

## 💰 Compensation

**Compa-ratio** — where someone sits relative to their band midpoint

:::BlockQuote
base / fieldCode1
:::

:::BlockQuote
fieldCode1 = band midpoint. Result of 1.0 = at midpoint. Format as percent for display. Foundation for pay equity analysis, merit planning, and outlier flagging.
:::

**Salary range penetration** — how far through the band (0 = min, 1 = max)

:::BlockQuote
(base - fieldCode1) / (fieldCode2 - fieldCode1)
:::

:::BlockQuote
fieldCode1 = band min · fieldCode2 = band max. Useful alongside compa-ratio when bands are wide.
:::

**Total cash compensation** (base + target bonus)

:::BlockQuote
base + ((fieldCode1 ?: 0) \* base)
:::

:::BlockQuote
fieldCode1 = target bonus percentage field.
:::

**New base after a merit increase**

:::BlockQuote
base + (base \* fieldCode1)
:::

:::BlockQuote
fieldCode1 = merit percentage field. Best used as a Data Sheet calculated column during comp planning — no permanent field needed.
:::

**Prorated salary for a mid-year hire**

:::BlockQuote
base \* (diffDays(startDate, '2026-01-01') / 365)
:::

:::BlockQuote
Replace '2026-01-01' with your fiscal year-end date.
:::

**Prorated annual cost with start and end date logic (full fiscal year)**

:::BlockQuote
startDateJob > date('2026-01-01') ?  (endDateJob ?
&#x20;   monthlyCost \* 12 \* (endDateJob - startDateJob + 1) / 365 :
&#x20;   monthlyCost \* 12 \* (date('2026-12-31') - startDateJob + 1) / 365
&#x20; ) :
&#x20; (endDateJob && endDateJob \< date('2026-12-31') ?
&#x20;   monthlyCost \* 12 \* (endDateJob - date('2026-01-01') + 1) / 365 :
&#x20;   monthlyCost \* 12
&#x20; )
:::

:::BlockQuote
Use this for scenario planning and headcount cost forecasting. Handles mid-year starts, mid-year terms, and full-year employees in one expression. To show proration as a % of annual cost: proratedFyCost / (monthlyCost \* 12) \* 100. Update the year dates each cycle.
:::

**Prior salary** — what someone earned before their last increase

:::BlockQuote
asOfPrimary(dateOf.base - 1, \{base})
:::

:::BlockQuote
dateOf.base = date of last base change. Subtracting 1 day retrieves the value just before it. No custom fields needed.
:::

**Year-over-year base salary change**

As a percentage:

:::BlockQuote
(base - asOfPrimary('2025-01-01', \{base})) / asOfPrimary('2025-01-01', \{base})
:::

As a dollar amount:

:::BlockQuote
base - asOfPrimary('2025-01-01', \{base})
:::

:::BlockQuote
Replace '2025-01-01' with your baseline date. Use asOfPrimary — not asOf — to exclude draft scenario data.
:::

**Total comp including equity vesting**

:::BlockQuote
cashComp + vestValue(today(), nextAnniversary(startDate))
:::

:::BlockQuote
Built-in fields only. Adds total cash to the value of equity vesting in the next 12 months.
:::

## 📅 Tenure, Dates & Eligibility

| Question                                       | Formula                                        |
| ---------------------------------------------- | ---------------------------------------------- |
| How long has someone been here?                | diffYears(startDate, today())                  |
| How long in their current role?                | diffDays(titleDate, today())                   |
| When is their next work anniversary?           | nextAnniversary(startDate)                     |
| How old is this employee?                      | diffYears(birthdate, today())                  |
| Did their manager change recently?             | diffDays(dateOf.manager, today()) \<= 90       |
| When were they last eligible for a raise?      | dateOf.base                                    |
| When will they next be eligible?               | dateOf.base + 365                              |
| How long has this req been open?               | diffDays(openDate, today())                    |
| When did this person become a manager?         | dateOf.directReports                           |
| Did they become a manager in the last 30 days? | diffDays(dateOf.directReports, today()) \<= 30 |

## 🪣 Smart Bucket Templates

:::BlockQuote
Smart Buckets assign a color-coded label based on CQL conditions. Use them on the org chart, Data Sheet, and dashboards for instant visual grouping.
:::

**Performance tiers** · fieldCode1 = weighted score field

| Label              | Expression                             |
| ------------------ | -------------------------------------- |
| High Performer     | fieldCode1 >= 4.5                      |
| Strong Performer   | fieldCode1 >= 3.5 && fieldCode1 \< 4.5 |
| Meets Expectations | fieldCode1 >= 2.5 && fieldCode1 \< 3.5 |
| Needs Improvement  | fieldCode1 \< 2.5                      |

**Compa-ratio bands** · fieldCode1 = compa-ratio Smart Calc field

| Label      | Expression                                |
| ---------- | ----------------------------------------- |
| Below Band | fieldCode1 \< 0.80                        |
| In Range   | fieldCode1 >= 0.80 && fieldCode1 \<= 1.20 |
| Above Band | fieldCode1 > 1.20                         |

**Tenure bands** · Uses built-in startDate

| Label                  | Expression                                                               |
| ---------------------- | ------------------------------------------------------------------------ |
| New Hire (\<1 yr)      | diffYears(startDate, today()) \< 1                                       |
| Early Career (1–3 yrs) | diffYears(startDate, today()) >= 1 && diffYears(startDate, today()) \< 3 |
| Established (3–5 yrs)  | diffYears(startDate, today()) >= 3 && diffYears(startDate, today()) \< 5 |
| Veteran (5+ yrs)       | diffYears(startDate, today()) >= 5                                       |

**Merit eligibility** · fieldCode1 = performance rating field

| Label                | Expression                                             |
| -------------------- | ------------------------------------------------------ |
| Eligible             | diffMonths(startDate, today()) >= 6 && fieldCode1 >= 3 |
| Ineligible – Too New | diffMonths(startDate, today()) \< 6                    |
| Ineligible – Rating  | fieldCode1 \< 3                                        |

**Flight risk** · fieldCode1 = band minimum field

| Label       | Expression                                                   |
| ----------- | ------------------------------------------------------------ |
| High Risk   | diffMonths(titleDate, today()) >= 24 && base \< fieldCode1   |
| Medium Risk | diffMonths(titleDate, today()) >= 18 \|\| base \< fieldCode1 |
| Low Risk    | diffMonths(titleDate, today()) \< 18 && base >= fieldCode1   |

**Span of control** · Uses built-in directReports · Apply to Jobs

| Label                 | Expression                                                |
| --------------------- | --------------------------------------------------------- |
| Under-leveraged (1–3) | length(directReports) >= 1 && length(directReports) \<= 3 |
| Healthy (4–8)         | length(directReports) >= 4 && length(directReports) \<= 8 |
| Over-leveraged (9+)   | length(directReports) >= 9                                |

**Open req age** · Uses built-in openDate

| Label               | Expression                                                             |
| ------------------- | ---------------------------------------------------------------------- |
| Fresh (\<30 days)   | diffDays(openDate, today()) \< 30                                      |
| Active (30–60 days) | diffDays(openDate, today()) >= 30 && diffDays(openDate, today()) \< 60 |
| Aging (60–90 days)  | diffDays(openDate, today()) >= 60 && diffDays(openDate, today()) \< 90 |
| Stale (90+ days)    | diffDays(openDate, today()) >= 90                                      |

## 📋 Forms: Embedding Live CQL Data

### How to add a CQL content block to a form

1. Go to **People Ops Tools → Forms** → open or create a form
2. Click **+ Add Question / Block** → select **Content** block type
3. Type your text and embed CQL using \{\{expression}} syntax
4. Save and preview — expressions render live against the employee the form is about

:::BlockQuote
Content blocks are read-only. They display data but cannot be edited by the reviewer. Use formAnswers\['fieldCode'] (instead of just fieldCode) when reading a value entered earlier in the same form session.
:::

**Employee context card** — put this at the top of any review or comp form

:::BlockQuote
Name: \{\{name}}  |  Title: \{\{title}}  |  Dept: \{\{department.name}}Tenure: \{\{formatRound(diffYears(startDate, today()), 1)}} years
Current Base: \{\{formatMoney(base)}}
Band: \{\{formatMoney(fieldCode1)}} – \{\{formatMoney(fieldCode2)}}
Compa-Ratio: \{\{formatRound(base / fieldCode3, 2)}}
Last Rating: \{\{asOfPrimary('2024-07-01', \{fieldCode4})}}
:::

:::BlockQuote
Replace fieldCode1–4 with your band min, band max, midpoint, and rating fields.
:::

**Compensation flag** — auto-surface outliers to the reviewer

:::BlockQuote
\{\{(base / fieldCode1) \< 0.80 ? '⚠️ Below band minimum — flag for discussion.' : '✅ Within compensation band.'}}
:::

**Prior vs. current salary**

:::BlockQuote
Prior Base: \{\{formatMoney(asOfPrimary(dateOf.base - 1, \{base}))}}Current Base: \{\{formatMoney(base)}}
:::

**YoY salary change**

:::BlockQuote
YoY Base Change: \{\{formatPercent((base - asOfPrimary('2025-01-01', \{base})) / asOfPrimary('2025-01-01', \{base}))}}
:::

**Total weightage validation** — confirm goal weights sum to 100%

:::BlockQuote
Total Weightage: \{\{(fieldCode1\*100)+(fieldCode2\*100)+(fieldCode3\*100)}}%
:::

:::BlockQuote
Extend with +(fieldCodeN\*100) for each additional goal weightage field.
:::

**List a manager's direct reports inline** — useful for manager attestation forms

:::BlockQuote
\{% assign directs = db.job.find\{it.manager=person && is\:person} %}\{% for direct in directs %}
\{\{direct.name}} — \{\{direct.title}}
\{% endfor %}
:::

:::BlockQuote
Great for single manager attestation forms where you want the reviewer to see all their reports in one place without submitting separately per person.
:::

## 📝 Markdown: Conditional Display

:::BlockQuote
Use in profile tabs, the home page, and document templates. \{\{ }} renders a value. \{% %} controls show/hide logic.
:::

**Show a block only if a condition is true**

:::BlockQuote
\{% if fieldCode1 >= 4 %}⭐ High performer — eligible for promotion discussion.
\{% endIf %}
:::

**Show different content based on a condition**

:::BlockQuote
\{% if diffYears(startDate, today()) >= 1 %}Eligible for annual review.
\{% else %}
Not yet eligible — less than 1 year of tenure.
\{% endIf %}
:::

**Show content only if a field was set on or before a specific date**

:::BlockQuote
\{% if ((fieldCode1:\* && dateOf.fieldCode1='2024-11-15') ? asOfPrimary('2024-11-15', \{fieldCode1}) : null) %}Rating (as of Nov 15): \{\{asOfPrimary('2024-11-15', \{fieldCode1})}}
\{% endIf %}
:::

:::BlockQuote
fieldCode1:\* confirms a value exists · dateOf.fieldCode1 confirms when it was written · asOfPrimary retrieves the locked value.
:::

**Nested conditions**

:::BlockQuote
\{% if department.func='Engineering' %}  \{% if fieldCode1 >= 4 %}
&#x20; High-performing engineer — flag for promotion discussion.
&#x20; \{% endIf %}
\{% endIf %}
:::

## 🔍 Common Filter Queries

| Expression                                     | What it returns                  |
| ---------------------------------------------- | -------------------------------- |
| is\:active                                     | All active employees             |
| is\:manager                                    | People managers only             |
| !is\:manager                                   | Individual contributors only     |
| department.func='Engineering'                  | Specific department              |
| !department:'Sales'                            | Exclude a department             |
| startDate\<'2022-01-01'                        | Started before a date            |
| !fieldCode1:\*                                 | Missing a specific field value   |
| fieldCode1>=4                                  | Field at or above a threshold    |
| (base / fieldCode1) \< 0.90                    | Below 90% compa-ratio            |
| diffYears(startDate, today()) >= 3             | 3+ years tenure                  |
| diffMonths(titleDate, today()) >= 18           | No title change in 18+ months    |
| diffDays(dateOf.manager, today()) \<= 90       | Manager changed in last 90 days  |
| diffDays(dateOf.directReports, today()) \<= 30 | Became a manager in last 30 days |
| is\:open && daysOpen>90                        | Stale open reqs                  |
| !location:\*                                   | Missing location                 |
| fieldCode1 >= 4 && (base / fieldCode2) \< 0.90 | High performer, underpaid        |
| anniversary=today                              | Work anniversary is today        |
| endDateOrg=today+11                            | Departing in exactly 11 days     |

## ⚙️ Actions & Approval Chains

:::BlockQuote
Carrot powers both the filters that determine who receives an action and the conditional logic that controls whether an approval stage fires. These are some of the most common patterns.
:::

**Trigger an action on a specific date relative to end date**

:::BlockQuote
endDateOrg=today+11
:::

:::BlockQuote
Use = not \<= for scheduled actions. Using \<= causes the action to fire every day until the date arrives. Replace 11 with however many days of lead time you need.
:::

**Trigger an action on work anniversary**

:::BlockQuote
anniversary=today
:::

:::BlockQuote
For orgs that use a custom hire date field instead of the built-in startDate, create a Smart Calc using nextAnniversary(customHireDateField) and filter on that field equaling today instead.
:::

**Filter action audience to people who have not yet completed a form**

:::BlockQuote
findFormTasksByAssessment('Review Name', 'Form Name').filter\{with(person,jobFilter) && status\:pending}.count() > 0
:::

:::BlockQuote
Use this as a scheduled action filter to send reminders only to people who still have outstanding tasks. Swap status\:pending for status\:done to target completers instead.
:::

### Conditional Approval Stage Expressions

:::BlockQuote
The expressions below go in the **"Only include stage if"** field on an approval stage. They control whether a given stage fires at all. Always test your expression as a filter on the scenario Changes tab first — if it returns results there, it will fire in the approval chain.
:::

**Trigger only if a specific field changed**

:::BlockQuote
change.before.base != change.after.base
:::

:::BlockQuote
Combine multiple fields with ||: (change.before.base != change.after.base) || (change.before.fieldCode1 != change.after.fieldCode1)
:::

**Trigger only if manager changed**

:::BlockQuote
change.before.manager != change.after.manager
:::

**Trigger based on total cost impact across all changes in a scenario**

:::BlockQuote
scenarioChanges.sum\{change.cost} > 500000
:::

:::BlockQuote
Use when you want approval based on the combined salary impact of all changes, not just a single job. For example: require VP approval when the total cost of a scenario exceeds $500,000.
:::

**Trigger if any change in the scenario affects a specific department**

:::BlockQuote
scenarioChanges.any\{department='Engineering'}
:::

:::BlockQuote
Use when at least one change in the batch needs to match — even if others don't. Good for routing Engineering Director approval whenever any Engineering job is touched.
:::

**Trigger only if every change in the scenario is in a specific department**

:::BlockQuote
scenarioChanges.all\{department='Engineering'}
:::

:::BlockQuote
Stricter than .any\{} — the stage only fires if the entire scenario batch is within that department. Skip it if the batch is mixed.
:::

**Trigger based on both scenario content and who is submitting**

:::BlockQuote
scenarioChanges.all\{department='Engineering'} && title='CEO'
:::

:::BlockQuote
Combines a condition about the changes with a condition about the submitter. In this example: only include this stage when all changes are in Engineering AND the person submitting is the CEO. Mix and match to build precise routing logic.
:::

**Trigger only when a specific person submits a scenario**

:::BlockQuote
name:'First Last'
:::

:::BlockQuote
Set the condition type to **Custom** and use name: with the person's name. Confirmed working pattern for conditional routing based on the submitter's identity.
:::

## 📊 Reporting & Survey Queries

:::BlockQuote
These functions are used in dashboard charts (Advanced mode) to report on form completion, survey responses, and headcount metrics.
:::

**Form completion rate for a review cycle**

:::BlockQuote
findFormTasksByAssessment('Review Name', 'Form Name').countPercent\{status\:done}
:::

:::BlockQuote
One of the most common dashboard queries for performance and engagement reporting. If the form name contains a colon (:) or has a trailing space, use the form and assessment IDs instead of names — special characters in names can break the query.
:::

**Count responses above a threshold for a specific question**

:::BlockQuote
findAnswers('fieldCode').count\{value>=4}
:::

:::BlockQuote
Use for single-metric charts on engagement or pulse surveys. fieldCode is the field code of the question, not the form name.
:::

**Count responses to a form question filtered by org**

:::BlockQuote
findResponsesByAssessment('Assessment Name', 'Survey Name').filter\{with(submitPerson,jobFilter)}.count()
:::

:::BlockQuote
Adding .filter\{with(submitPerson,jobFilter)} applies your current org chart filter so the chart respects department, location, or other slices.
:::

**Survey completion rate with org filter**

:::BlockQuote
findFormTasksByAssessment('Assessment Name', 'Form Name').filter\{with(person,jobFilter)}.countPercent\{status\:done}
:::

**Rollup a field value across a manager's entire team** — apply to manager jobs

:::BlockQuote
cost + underJobs.sum\{it.cost}
:::

Average a field across the team:

:::BlockQuote
underJobs.mean\{it.fieldCode1}
:::

:::BlockQuote
underJobs traverses the full org tree below a person, not just direct reports. Great for manager scorecards, team cost rollups, and org chart visualizations. Use directJobs instead if you only want one level down.
:::

**Multi-level manager chain** — display reporting levels as separate fields

Level 3 (manager's manager's manager):

:::BlockQuote
manager.manager.manager
:::

Level 4:

:::BlockQuote
manager.manager.manager.manager
:::

:::BlockQuote
Create one Smart Calc field per level. Built-in fields cover levels 1 and 2. Many employees at higher levels will return blank — that's expected. Use ?: '' to suppress null display if needed.
:::

**Count number of manager changes during tenure**

:::BlockQuote
findHistoryValues(\{manager}).count() - 1
:::

:::BlockQuote
Subtracts 1 to exclude the original hire assignment. Counts across all jobs the person has held at the org.
:::

## 🔗 Person Field Resolution

**Assign a linked person (e.g., talent partner, buddy) based on conditions**

Step 1 — **Smart Bucket:** Each condition outputs a personId value Step 2 — **Smart Calc:** Expression is just the bucket field code:

:::BlockQuote
smartBucketFieldCode
:::

Step 3 — Set **expected return type to Person** in the Smart Calc settings

:::BlockQuote
Use personId — not email. Email does not reliably resolve to the Person type in ChartHop. To find a personId: use the ChartHop API, or reference manager.id as a pattern example.
:::

## 🕰️ asOf vs asOfPrimary

|                              | asOf                        | asOfPrimary                                         |
| ---------------------------- | --------------------------- | --------------------------------------------------- |
| Includes scenario/draft data | ✅                           | ❌                                                   |
| Use for                      | What-if / scenario planning | Baselines, historical lookups, audit-safe reporting |

:::BlockQuote
asOfPrimary('2025-01-01', \{base})         base salary on Jan 1 (primary data only)asOfPrimary('2024-07-01', \{fieldCode1})   rating confirmed as of July 1
:::

## 🧮 Utility Functions

| Function                     | What it does                   | Example                                        |
| ---------------------------- | ------------------------------ | ---------------------------------------------- |
| round(x, 2)                  | Round to decimal places        | round(fieldCode1, 2)                           |
| formatRound(x, 1)            | Round + format as string       | formatRound(fieldCode1, 1)                     |
| formatMoney(x)               | Format as currency             | formatMoney(base)                              |
| formatPercent(x)             | Format as percent              | formatPercent(fieldCode1)                      |
| formatDate(d, 'pattern')     | Format date as string          | formatDate(startDate, 'MMMM d, yyyy')          |
| abs(x)                       | Absolute value                 | abs(base - fieldCode1)                         |
| max(a, b)                    | Larger of two values           | max(base, fieldCode1)                          |
| min(a, b)                    | Smaller of two values          | min(base, fieldCode1)                          |
| mean(a, b, c)                | Average, excluding nulls       | mean(fieldCode1, fieldCode2, fieldCode3)       |
| length(list)                 | Count items in list            | length(directReports)                          |
| diffYears(d1, d2)            | Years between dates            | diffYears(startDate, today())                  |
| diffMonths(d1, d2)           | Months between dates           | diffMonths(startDate, today())                 |
| diffDays(d1, d2)             | Days between dates             | diffDays(openDate, today())                    |
| nextAnniversary(d)           | Next anniversary date          | nextAnniversary(startDate)                     |
| asOf(date, \{expr})          | Value on date (incl. scenario) | asOf('2024-07-01', \{fieldCode1})              |
| asOfPrimary(date, \{expr})   | Value on date (primary only)   | asOfPrimary('2025-01-01', \{base})             |
| findHistoryValues(\{field})  | All historical values as list  | findHistoryValues(\{fieldCode1})               |
| vestValue(d1, d2)            | Equity vesting value in window | vestValue(today(), nextAnniversary(startDate)) |
| distance(addr1, addr2, unit) | Distance between two addresses | distance(address, location.address, 'miles')   |
| db.job.find\{condition}      | Query jobs across the org      | db.job.find\{it.startDate >= today}            |

## 💡 Quick Reference: Common Mistakes

| ❌ Mistake                                                           | ✅ Fix                                                                                          |
| ------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------- |
| Field is blank and breaks formula                                   | Add ?: 0 — e.g., fieldCode1 ?: 0                                                               |
| mean() averaging zeros as if they're real scores                    | Use fieldCode1 > 0 ? fieldCode1 : null                                                         |
| Using field code inside .count\{}                                   | Use it — e.g., .count\{it='Value'}                                                             |
| asOf pulling in draft scenario data                                 | Switch to asOfPrimary for baselines                                                            |
| Person field returning blank                                        | Check Smart Bucket outputs personId, not email                                                 |
| Formula breaks after renaming a field                               | Field codes don't auto-update — fix references manually                                        |
| and not working in a specific context                               | Switch to &&                                                                                   |
| findHistoryValues returning oldest values first                     | Add .reversed before .limit()                                                                  |
| Dashboard query breaks when form name has a colon or trailing space | Use the form/assessment ID instead of the name                                                 |
| Scheduled action fires every day instead of once                    | Use = not \<= for date-based action filters                                                    |
| Approval chain stage fires even when condition isn't met            | Test the expression as a filter on the scenario Changes tab first                              |
| findFormTasksByAssessment chart breaks when adding a filter         | Use .filter\{with(person,jobFilter)} — not with(submitPerson,jobFilter) for task-based queries |


[title] Performance Review Question Bank
[path] ChartHop by ChartHop/Performance Reviews/

# Performance Review Question Bank

Use these proven questions as a starting point for building your performance review forms in ChartHop. Customize them to align with your company values, competencies, and performance framework.

## Self Review Questions

### Reflection & Self-Assessment

**Open-Ended Questions (Long Text):**

- What are your most significant accomplishments this review period? Please provide specific examples.
- What challenges did you face, and how did you address them?
- What are 2-3 areas you'd like to develop or improve?
- What support or resources would help you be more successful in your role?
- What aspects of your role energize you most?
- What aspects of your role do you find challenging or frustrating?
- How have you demonstrated our company values this period? Please provide specific examples.
- Looking ahead 3-5 years, what does career success look like for you?

**Rating Questions (Numeric Scale or Single Select):**

- Overall, how would you rate your performance this period? (1-5 scale: Does Not Meet Expectations to Exceeds Expectations)
- How effectively did you demonstrate \[Company Value]? (1-5 scale for each value)
- Rate your performance in the following areas:&#x20;
  - Technical Knowledge & Expertise
  - Problem Solving & Critical Thinking
  - Autonomy & Ownership
  - Collaboration & Communication
  - Impact & Results Delivery
  - Leadership & Influence (for senior roles)

**Multiple Choice Questions:**

- Which company values do you feel you most strongly embodied this period? (Multi-select)
- What type of development would be most valuable to you? (Options: Technical skills, Leadership development, Cross-functional exposure, Mentorship, etc.)

## Manager Review (Downward Review) Questions

### Performance Evaluation

**Open-Ended Questions (Long Text):**

- What are this employee's most significant accomplishments this review period? Please provide specific examples.
- What are 2-3 areas where this employee can develop or improve? Be specific and actionable.
- How has this employee grown or developed since the last review period?
- What support, resources, or development opportunities would help this employee be more successful?
- What are this employee's greatest strengths?
- How does this employee demonstrate our company values? Please provide specific examples.
- Is this employee ready for promotion or increased responsibilities? Why or why not?
- What are this employee's career goals, and how can we support their growth?

**Rating Questions (Numeric Scale or Single Select):**

- Overall, how would you rate this employee's performance? (1-5 scale: Does Not Meet Expectations to Exceeds Expectations)
- Rate this employee's performance in the following areas:&#x20;
  - Technical Knowledge & Expertise
  - Quality of Work & Attention to Detail
  - Problem Solving & Critical Thinking
  - Autonomy & Ownership
  - Collaboration & Communication
  - Impact & Results Delivery
  - Adaptability & Learning Agility
  - Leadership & Influence (for senior roles)
  - People Management & Team Development (for managers)

**Multiple Choice Questions:**

- Which company values does this employee most strongly embody? (Multi-select)
- What is this employee's promotion readiness? (Options: Ready now, Ready within 6 months, Ready within 1 year, Not ready - needs development, Not interested in promotion)
- What is this employee's flight risk? (Options: Low, Medium, High)
- Performance trend: (Options: Improving, Consistent, Declining)

## Peer Review Questions

### Collaboration & Impact Assessment

**Open-Ended Questions (Long Text):**

- What are this colleague's greatest strengths? Please provide specific examples.
- What is one area where this colleague could improve or develop further?
- Describe a specific situation where this colleague contributed positively to a project or team goal.
- What should this colleague START doing to be more effective in their role?
- What should this colleague CONTINUE doing to be effective in their role?
- What should this colleague STOP doing to be more effective in their role?
- How does this colleague demonstrate our company values in their daily work?
- What makes this colleague an effective collaborator?

**Context Questions (Short Text or Single Select):**

- Which projects or initiatives have you collaborated with this colleague on? (Short Text)
- How frequently do you work with this colleague? (Options: Daily, Weekly, Monthly, Occasionally, Rarely)
- In what capacity do you work with this colleague? (Options: On the same team, Cross-functional projects, Company-wide initiatives, Indirectly, etc.)

**Rating Questions (Numeric Scale or Single Select):**

- How would you rate your collaboration with this colleague? (1-5 scale: Unsuccessful to Highly Successful)
- Rate this colleague's effectiveness in the following areas:&#x20;
  - Communication & Transparency
  - Collaboration & Teamwork
  - Reliability & Follow-Through
  - Quality of Work
  - Problem Solving & Innovation
  - Responsiveness & Availability
  - Knowledge Sharing & Support

**Multiple Choice Questions:**

- Which company values does this colleague most strongly demonstrate? (Multi-select)

## Peer Selection Questions

**For the Peer Selection Form:**

- Select 3-5 colleagues who can provide meaningful feedback on your work this review period. (Person Value field with min/max limits)
- Please select peers who: (Add this as guidance text)&#x20;
  - You've worked closely with this review period
  - Can speak to your contributions and collaboration
  - Represent different perspectives (cross-functional partners, project teammates, etc.)

## Upward Review Questions

### Manager Effectiveness Assessment

**Open-Ended Questions (Long Text):**

- What does your manager do particularly well? Please provide specific examples.
- What is one area where your manager could improve or develop further?
- What should your manager START doing to be more effective?
- What should your manager CONTINUE doing as a manager?
- What should your manager STOP doing to be more effective?
- How does your manager support your professional development and career growth?
- How could your manager better support you or the team?
- Please share any additional feedback for your manager.

**Rating Questions (Numeric Scale or Single Select):**

- Overall, how effective is your manager? (1-5 scale: Not Effective to Very Effective)
- Rate your manager's effectiveness in the following areas:&#x20;
  - Day-to-Day Operations & Execution
  - Strategic Thinking & Alignment to Company Goals
  - Communication & Transparency
  - Providing Feedback & Coaching
  - Supporting Professional Development
  - Team Building & Morale
  - Decision Making
  - Advocacy & Support for Team Members
  - Creating Psychological Safety
  - Fostering Inclusion & Belonging

**Agreement Scale Questions (Yes/No/Sometimes or Strongly Disagree to Strongly Agree):**

- My manager communicates clear expectations and goals.
- My manager provides regular, actionable feedback on my performance.
- My manager provides the right level of autonomy and support.
- My manager cares about my wellbeing and career development.
- My manager advocates for me and the team.
- My manager makes fair and thoughtful decisions.
- My manager creates a positive and inclusive team environment.
- My manager creates psychological safety where I feel comfortable sharing ideas and concerns.
- My manager leads by example and demonstrates our company values.
- I would recommend my manager to others.

## Goal Setting & Future Planning Questions

**For Any Review Type:**

- What are your top 3 priorities or goals for the next review period? (Long Text)
- What skills or competencies do you want to develop? (Long Text or Multi-Select)
- What type of projects or responsibilities interest you for future growth? (Long Text)
- What resources or support would help you achieve your goals? (Long Text)

## Question Design Best Practices

### Writing Effective Questions

**Do:**

- Ask for specific examples and behaviors
- Use clear, simple language
- Focus on observable actions and outcomes
- Ask open-ended questions that encourage thoughtful responses
- Align questions to your company values and competencies
- Include both strengths and development areas
- Make questions actionable (feedback should lead to growth)

**Don't:**

- Ask leading questions that suggest a "right" answer
- Use vague or ambiguous language
- Ask questions that can be answered with yes/no when you want details
- Create questions that are too similar to each other
- Ask for opinions on things outside the respondent's knowledge
- Make questions overly complex or multi-part

### Balancing Question Types

**Long Text Questions:**

- Best for: Detailed feedback, examples, suggestions
- Limit to: 3-5 per form to avoid survey fatigue
- Use when: You need qualitative insights and specific examples

**Rating Scale Questions:**

- Best for: Quantifiable performance metrics, trending over time
- Use consistent scales: (e.g., always use 1-5, not mixing 1-3 and 1-5)
- Provide clear definitions: Label what each number means

**Multiple Choice Questions:**

- Best for: Categorization, values alignment, standardized options
- Ensure options are: Mutually exclusive and comprehensive
- Use when: You want structured, comparable data

### Recommended Form Length

- **Self Review:** 5-8 questions (mix of ratings and open-ended)
- **Manager Review:** 6-10 questions (more detailed assessment)
- **Peer Review:** 4-6 questions (focused on collaboration)
- **Upward Review:** 5-8 questions (focused on leadership effectiveness)

**Remember:** Quality over quantity. Fewer, well-crafted questions yield better feedback than lengthy forms that create survey fatigue.

## Customization Tips

### Align to Your Framework

If your organization uses a specific performance framework, map questions to it:

- **Competency-Based:** Create rating questions for each competency
- **OKR-Based:** Ask about goal achievement and outcomes
- **Values-Based:** Include questions about demonstrating each value
- **Level-Based:** Adjust question difficulty based on seniority

### Include Your Company Values

Replace generic questions with value-specific ones:

- Generic: "What did this person do well?"
- Value-Specific: "How did this person demonstrate \[Innovation/Collaboration/Ownership]?"

### Scale Appropriately

Adjust question complexity based on:

- **Entry-Level Roles:** Focus on learning, execution, collaboration
- **Mid-Level Roles:** Add autonomy, problem-solving, influence
- **Senior Roles:** Emphasize strategic thinking, leadership, impact
- **Manager Roles:** Include people development, team effectiveness

## Need Help?

Contact your Customer Success Manager for:

- Reviewing your custom questions before launch
- Mapping questions to custom fields
- Creating conditional logic for role-specific questions
- Analyzing response patterns and data quality
- Best practices for your industry or company size


[title] Customizing ChartHop with AI
[path] ChartHop by ChartHop/

# Customize ChartHop with AI

You don't need to know how to code to make ChartHop feel like yours.

The platform supports HTML and Markdown in several key areas — your homepage, employee profiles, document templates, and forms. That means you can customize layouts, add your brand colors and fonts, and surface the right information for every employee.

AI makes this fast. You describe what you want, share your brand details, and paste the output directly into ChartHop. The guides in this section walk you through exactly how to do it.

**Pro tip:&#x20;**&#x42;efore you start prompting, give your AI some context. Link it to docs.charthop.com or paste in the articles most relevant to what you're building. An AI that knows how ChartHop works will get you further, faster.

## How it works

ChartHop's customizable areas support dynamic field expressions — \{\{fieldCode}} — that pull in live employee data automatically. You write the layout once, and ChartHop personalizes it for every person in your org.

Every guide includes:

- What to collect before you start (colors, fonts, field codes)
- A copy-paste prompt you can take straight to Claude, ChatGPT, or any other AI tool
- Tips for getting better output
- Step-by-step instructions for adding it to ChartHop

## Guides in this section

### Profile Tab Config

Add custom tabs to employee profile pages. Use them to surface role-specific resources, display custom data fields, or organize information that doesn't have a home anywhere else in ChartHop.

**Supports:** HTML with inline CSS, \{\{fieldCode}} expressions

### Letter Templates

Generate branded, personalized documents directly from ChartHop — offer letters, comp review letters, total rewards statements, PIIAs, proof of employment letters, and more. Templates have a dedicated Stylesheet tab, so you can define your brand styles once and reuse them across every document.

**Supports:** HTML, CSS classes via Stylesheet tab, \{\{fieldCode}} expressions, PDF generation

### Form Text Blocks

Add instructional and contextual content to your ChartHop forms. Intro blocks, section headers, callouts, closing notes — anything that helps employees understand what a form is asking and what happens next.

**Supports:** HTML with inline CSS, Markdown, \{\{fieldCode}} expressions

## Before you open any guide

Gather these basics first. You'll need them for every prompt.

| What to collect                | Why                                         |
| ------------------------------ | ------------------------------------------- |
| Primary brand color (hex)      | Used for headers, accents, and CTAs         |
| Secondary / accent color (hex) | Used for backgrounds, borders, callouts     |
| Font name                      | Applied to all text in the layout           |
| Logo URL                       | Used in document headers (letter templates) |
| Company name and address       | Used in document headers (letter templates) |

Not sure where to start? Head to the **Form Text Blocks** guide first. It's the quickest win and gives you a feel for how field expressions work before you tackle more complex layouts.

[title] Build your ChartHop Homepage
[path] ChartHop by ChartHop/Customizing ChartHop with AI/

# Give your ChartHop homepage a real upgrade

**Using AI to Build Your ChartHop Homepage**

The ChartHop homepage is one of the most visible things you can customize. It's the first thing your team sees when they log in, so it's worth making it feel like yours.

Good news: you don't need to know how to code to make it look great. You just need to know your brand and how to give an AI the right instructions.

**What the homepage supports**

The Homepage Config in ChartHop accepts HTML with inline CSS. That means you can use:

- Custom layouts (columns, banners, cards)
- Your brand colors and fonts
- Images and logos
- Dynamic fields that pull in live employee data (more on that below)
- Links to internal resources
- Gradients, box shadows, and positioned elements
- CSS grid and flexbox layouts

No JavaScript. No external stylesheets. Everything needs to be self-contained in the HTML you paste in.

**Before you start**

Gather these things before you open an AI tool. The more specific you are, the better your output will be.

| What to collect                   | Example                                                 |
| --------------------------------- | ------------------------------------------------------- |
| Primary brand color               | #6E37FF                                                 |
| Secondary brand color             | #3C137C                                                 |
| Accent or background color        | #F5F0FF                                                 |
| Font name                         | Inter, Montserrat, Arial                                |
| Logo URL                          | A publicly hosted image link                            |
| What you want to greet users with | First name, job title, department                       |
| Links you want featured           | Handbook, benefits portal, org chart                    |
| Tone/vibe                         | Clean and minimal, warm and welcoming, bold and branded |

**Dynamic fields you can use**

ChartHop uses \{\{fieldCode}} syntax to pull in live data for the logged-in user. Drop these directly into your HTML.

| Field                 | What it shows           |
| --------------------- | ----------------------- |
| \{\{name}}            | Employee's full name    |
| \{\{first.name}}      | Employee's first name   |
| \{\{last.name}}       | Employee's last name    |
| \{\{title}}           | Current job title       |
| \{\{department.name}} | Department name         |
| \{\{manager.name}}    | Manager's name          |
| \{\{location.name}}   | Office or work location |
| \{\{startDate}}       | Start date              |

You can use these anywhere in your HTML — inside headings, paragraphs, cards, or anywhere text would go.

:::BlockQuote
**Note:** \{\{name}} is the field code for full name on the homepage. \{\{title}} is the correct field code for job title — not \{\{job.title}}. If a field renders blank, check Settings > Fields to confirm the exact field code for your org.
:::

**The prompt to give your AI**

Copy the template below, fill in your details, and paste it into Claude, ChatGPT, or any AI tool you use.

:::BlockQuote
You are helping me build HTML for ChartHop, an HR platform.
Rules:
\- Use only inline CSS (no \<style> tags, no external stylesheets)
\- No JavaScript
\- All HTML must be self-contained
\- Dynamic fields use \{\{fieldCode}} syntax — keep these exactly as written

My brand details:
\- Primary color: \[YOUR PRIMARY HEX]
\- Secondary color: \[YOUR SECONDARY HEX]
\- Background color: \[YOUR BACKGROUND HEX or "white"]
\- Font: \[YOUR FONT NAME] — use it as the font-family, with Arial as fallback
\- Logo URL: \[YOUR LOGO URL, or "no logo"]

I want to build a ChartHop homepage that:
\- Greets the logged-in employee by name using \{\{name}}
\- Shows their job title using \{\{title}}
\- \[DESCRIBE ANYTHING ELSE: quick links, announcements, a welcome message, etc.]

Design notes:
\- \[ADD YOUR PREFERENCES: minimal, full-width banner, card layout, etc.]
\- Keep it clean and scannable
\- Use my primary color for headings and key accents

Output only the HTML. No explanation.
:::

**Tips for better results**

**Be specific about layout.** "A banner at the top with my logo and a welcome message, then two columns below with quick links" gives the AI a lot more to work with than "make it look nice."

**Ask for one section at a time.** If you want a homepage with a banner, a resource grid, and an announcement area, prompt for each one separately, then combine them.

**Use grid for two-column layouts.** The homepage renderer supports display\:grid — use grid-template-columns: 1fr 1fr for two-column sections. This gives you more control than flex alone.

**Test your field codes.** Paste the HTML into ChartHop and preview it as a real employee to confirm the dynamic fields are rendering correctly. If a field shows up blank, go to Settings > Fields and search for the right field code.

**Iterate fast.** If the first output isn't right, paste it back into the AI and describe what you want changed. You don't have to start from scratch.

**Pasting it into ChartHop**

1. Go to Settings > Homepage Config
2. Paste your HTML into the editor
3. Preview the page to check how it looks for different employees
4. Save when you're happy with it

That's it. Your whole team will see the updated homepage the next time they log in.

[title] Profile Tabs
[path] ChartHop by ChartHop/Performance Reviews/

# How to Configure Profile Tabs in ChartHop

Profile tabs allow you to create custom views on employee profiles to display important information like performance reviews, compensation history, or any other data you want to track. This guide walks through the complete setup process.

## Getting Started

Navigate to **Admin > Profile Tab Configuration** to begin creating your custom profile tab.

## Step 1: Create Your Tab

Click to create a new tab and give it a meaningful name like "Performance" or whatever best describes the information you'll be displaying. This name will appear as a tab on employee profiles.

## Step 2: Add Columns

Add the columns you want to display in your tab. These will organize the information shown to users viewing the profile.

## Step 3: Configure Sensitivity Settings

Sensitivity settings control who can view this profile tab. Our recommended starting point is to allow the person and their managers to view the tab, but you can customize this based on your organization's needs.

### Standard Sensitivity Settings

For most use cases, you can use the built-in sensitivity options to control access by role or relationship to the employee.

### Custom Sensitivity for Forms with Share Settings

If you're displaying forms that have their own share settings, you'll need to use the custom sensitivity dropdown with the following filter:

:::BlockQuote
target.proxyReviewer=me or target.managers=me or target=me
:::

This filter ensures that:

- The employee can view their own information (target=me)
- The employee's managers can view it (target.managers=me)
- Anyone filling out a form on behalf of the employee can view it (target.proxyReviewer=me)

You can adjust these permissions at any time as your needs change.

## Step 4: Choose Your Content Type

Profile tabs can display three types of content:

### Form Response History (Recommended)

This option displays historical responses from specific forms, making it ideal for tracking performance reviews, feedback, or any recurring form submissions. This is the recommended approach for most use cases.

### Field History

Use this option when you want to show changes to specific fields over time rather than complete form submissions. Select the applicable fields you want to track in the field history section.

### Static Content with Markdown

You can use markdown formatting to display static information or create custom layouts within your profile tab.

## Tips for Success

- Start with high sensitivity settings and refine / broaden them based on feedback and testing from your team
- Use clear, descriptive names for your tabs that make it obvious what information they contain
- Test your configuration by viewing it from different user perspectives (as an employee, as a manager, etc.)
- Remember that you can always come back to **Admin > Profile Tab Configuration** to modify your settings

[title] ChartHop for All-(Org-Rollouts)
[path] ChartHop by ChartHop/

# ChartHop All-Org Rollout Guide

Launching ChartHop to your full organization is an exciting milestone. This guide walks you through everything you need to configure, test, and communicate before your employees log in for the first time.

## Phase 1: Review Your Privacy & Visibility Settings

Before rollout, take time to review what your employees will see and adjust any settings that don't match your organization's preferences. All visibility settings live under **Admin > Configuration**.

ChartHop is highly customizable — if there's something you want to hide, restrict, or limit, there's almost always a way to do it. Want to hide the Equity tab from member view? You can. Want to make compensation data only visible to managers? You can do that too. Want to suppress gender or location from public profiles? Easy. Want to mark specific fields as sensitive so only certain roles can see them? Done.

Review your data and think through what each employee type should and shouldn't see. Most of these settings live under **Admin > Configuration**. If you can't find a setting for something specific, reach out to your CSM — custom access controls can typically be configured for edge cases.

## Phase 1b: Configure Core Views

Also under **Admin > Configuration**, you can control how key views look and behave for your employees. Work through each view and confirm the defaults are right before rollout.

**Org Chart**

- **Default fields to visualize** — Choose which field appears on org chart cards by default. Department is the default, but you can change this.
- **Fields to highlight in the visualize menu** — Control which fields employees can toggle on in the visualization menu (e.g., Department, Location, Teams, Tenure, Gender, Directs, Base – Annualized). Only surface fields that are relevant and appropriate for your members to explore.
- **Card appearance** — Choose whether to show downward and sibling indicators, downward indicators only, or no indicators on org chart cards.
- **Export** — Decide who can export the org chart: Everyone, or only users with Sensitive Data Access.

**Profile**

- **Header group tags** — Choose which tags display in the profile header (e.g., Department, Location, Business Unit, Product Vertical).
- **Built-in tabs** — Control which tabs are visible on employee profiles. Available tabs include: About, Tasks, Personal History, Job History, Compensation, Equity, Time Off, and Files. Hide any tabs that aren't relevant or shouldn't be visible to members.&#x20;
  - Within **Compensation**, you can toggle vesting history and currency conversion visibility.
  - Within **Equity**, you can enable the equity value calculator, show company valuation in the calculator, and add a custom About Equity Compensation message.

**Data Sheet**

- **Export** — Decide who can export data from the Data Sheet, Scenarios, Home page widgets, and Dashboards: Everyone, or only users with Sensitive Data Access.

**Job Details Panel**

The job details panel appears when an employee clicks on someone in the org chart. Choose which fields are displayed in the panel. Available fields include: Manager, Indirect Manager, Managed Jobs, Directs, Employment Status, Comp Band, Department, Teams, Location, Work Phone, Tenure, Base, Target Variable, Annual Total Comp, and more. Only include fields that are appropriate for your members to see.

## Phase 2: Build Out the Employee Experience

With your settings confirmed, focus on making ChartHop useful and welcoming from day one.

**Profiles**

- **Enable name pronunciations** so employees can record how their name is said. It's a small feature with a big impact on inclusion.
- **Install the About Me Bundle** — a pre-built profile section that gives employees a structured way to introduce themselves. Download it, customize it to fit your culture, and activate it before rollout.
- **Build any custom profile tabs and fields** you want displayed on individual employee pages.
- **Enable Shoutouts** so employees can recognize each other directly on their profiles.

**Teams**

- **Configure Teams, team forms, and team tabs** so managers and team members have the right tools ready at launch.

**Forms**

- **Set up 1:1 and performance review note forms** so employees and managers can capture notes during conversations. Make sure they're assigned to the right roles.
- **Decide how employees access forms on day one.** You have two options:&#x20;
  - Make forms available in ChartHop for employees to find when they log in.
  - Use Actions to push forms to employees automatically on their start date.

**Automated touchpoints**

- **Set up Actions for anniversaries and shoutouts** to automatically send emails or messages when employees hit work milestones. These run in the background without any manual effort.

## Phase 3: Configure Access & Invitations

Go to **Access > Settings** to configure how employees are invited and how they log in.

**Set up SSO**

SSO (Single Sign-On) allows employees to log into ChartHop using your organization's existing identity provider — no separate ChartHop password required. This is strongly recommended as it's easier for employees and more secure.

Two things need to happen for SSO to work:

1. **Enable SSO in ChartHop** — Under **Access > Settings > SSO**, check the box for your organization's identity provider (Google, Microsoft, Okta, OneLogin, Azure Active Directory, SAML v2, or ADP).
2. **Configure SSO on your IT side** — Your IT team will need to set up ChartHop as an application within your identity provider. Loop in your IT team early so this is ready before invitations go out.

Until SSO is configured end-to-end, employees won't be able to log in. Don't send invitations until both sides are confirmed.

**Configure automatic invitations**

Under **Access > Settings > Automatically Invite Users**, configure how ChartHop handles invitations and access:

1. Check **"Automatically invite new employees and revoke access on departure"** to keep access in sync with your HRIS automatically.
2. Set the **role** new employees are assigned — the default is *Employee*, which is the standard access level for most members of the organization.
3. Under **Advanced Options**:&#x20;
   - When you're ready to launch, enable **"Send invitations and revoke access once daily"** (recommended). Leave this unchecked until you're ready for invitations to go out.
   - Configure **"Revoke access when employee departs"** based on your offboarding preferences.
   - Use the **"Only invite employees that match this filter"** field to limit the rollout to a specific group (e.g., dept\:sales) — useful for running a pilot before going org-wide.
   - Add anyone who should be **notified when a user is invited or access is revoked**.

**Customize your invitation email**

Under **Access > Settings > Invitation Email**, customize what employees receive when they're invited:

- Update the **subject line** and **button text** to match your company's voice.
- Edit the **invitation body** to add context about why you're rolling out ChartHop and what employees should do first.
- Use **"Send test email"** to preview what employees will receive before going live.

**Make it fun 🎉**

A great launch drives curiosity and gets people to actually log in on day one. Consider pairing your invitation email with a launch moment — whether that's a separate email from HR, a Slack announcement, or a kick-off at your next all-hands. Here are some ideas customers have used successfully:

- **Scavenger hunt** — Challenge employees to find something specific in ChartHop (a teammate's fun fact, a hidden org chart detail, a shoutout) and reply to HR to win a gift card. First 5 to respond wins.
- **Profile completion contest** — Ask employees to fill out their About Me profile within the first week. Raffle a prize among everyone who completes it.
- **Shoutout challenge** — Encourage employees to send their first Shoutout to a teammate. Highlight a few of the best ones in your next all-hands or company newsletter.
- **Trivia** — Hide a fun fact somewhere in ChartHop and ask employees to find it. First one to email HR with the answer gets a prize.

The goal is to give employees a reason to log in and poke around on day one — the more they explore, the more value they get out of the platform.

**Configure user management settings**

Also under **Access > Settings > User Management**, set:

- **Require sign-in every X days** — how often employees must re-authenticate.
- **Sign out after inactivity** — automatic sign-out after a period of inactivity.
- **New user invitations expire after X days** — how long an invitation link stays valid.
- **Notify these people of user access level changes** — who on your team should be alerted when access changes.

## Phase 4: Customize the Home Dashboard

The home dashboard is the first thing employees see when they log in — make it feel like yours. There are two things to configure: your welcome message and your home page widgets.

**Welcome message**

Go to **Org Settings** (gear icon, bottom left) to update the welcome message. Consider including:

- A welcome note from HR or leadership
- Quick links to key resources (e.g., SharePoint, employee handbook, benefits portal)
- An image of your company values or a team photo

**Home page widgets**

Choose which widgets appear on the home page and configure each one to match what's relevant for your organization. The available widgets are:

- **People Moves** — Surfaces recent org changes. Choose which change types to display (Hires, Departures, Moves, Manager Changes, Title Changes) and set the time window for how many days in the past and future to show.
- **Open Jobs** — Displays open roles from your ATS. You can opt to only show jobs that match each employee's location.
- **Milestones** — Highlights upcoming Birthdays and Anniversaries. Set the time window for how far in the future and past to surface events.
- **Weekly Calendar** — Shows the week at a glance. Toggle on weekends if your organization works a non-standard week.

Turn off any widgets that aren't relevant for your employees — a clean, focused dashboard makes a better first impression than one that's cluttered with information they don't need.

## Phase 5: Test Before You Launch

1. **Validate your data.** Review the primary fields employees will see: org hierarchy, department, job title, and personal information. Email support\@charthop.com if anything looks inaccurate.
2. **Test visibility using "View As."** This is one of the most important things you can do before rollout. Click your profile picture in the top right of your screen and select an employee to impersonate — you'll see ChartHop exactly as they see it. Use this to confirm employees can access what they should and, just as importantly, that they *can't* access what they shouldn't. Test a few different people across roles, levels, and departments to get a complete picture. If something looks off, head back to **Admin > Configuration** and adjust before invitations go out.
3. **Run a pilot with 3–5 people.** Invite a small group of trusted employees before the full rollout. Give them a few days to explore and share feedback — this is your safety net for catching any issues before go-live.
4. **Email support\@charthop.com** if anything is visible that shouldn't be.

## Phase 6: Communicate & Launch

**Prepare your communications**

- Draft your rollout email to employees. Your CSM has sample templates you can use or adapt.
- Create introductory collateral — a slide deck, a recorded demo, or both. Before recording, use the eye icon in the sidebar to hide any sensitive information from your screen.

**Schedule Launch Office Hours**

Plan 30-minute sessions for the first 3–4 weeks after go-live. These give employees a place to ask questions and give HR a venue to share tips. Bring any questions you can't answer to support\@charthop.com or your CSM.

**Go live**

When everything above is confirmed, go to **Access > Settings > Automatically Invite Users**, check **"Send invitations and revoke access once daily"**, and your invitations will go out. 🎉

## Pre-Launch Checklist

| Task                                                                                          | Done? |
| --------------------------------------------------------------------------------------------- | ----- |
| Visibility settings reviewed in Admin > Configuration                                         | ☐     |
| Dashboard people moves configured                                                             | ☐     |
| Name pronunciations enabled                                                                   | ☐     |
| About Me Bundle installed and customized                                                      | ☐     |
| Custom profile tabs and fields built                                                          | ☐     |
| Shoutouts enabled                                                                             | ☐     |
| Teams, team forms, and tabs configured                                                        | ☐     |
| 1:1 and performance review note forms built                                                   | ☐     |
| Day-one forms configured (self-serve or Actions-triggered)                                    | ☐     |
| Anniversary and shoutout Actions set up                                                       | ☐     |
| SSO enabled in ChartHop (Access > Settings > SSO)                                             | ☐     |
| SSO configured on IT/identity provider side                                                   | ☐     |
| Auto-invite configured in Access > Settings (role, filters, daily send unchecked until ready) | ☐     |
| Invitation email customized or ChartHop email turned off                                      | ☐     |
| User management settings configured (sign-in frequency, invitation expiration)                | ☐     |
| Dashboard welcome message updated                                                             | ☐     |
| Data validated and "View As" tested                                                           | ☐     |
| Pilot group completed                                                                         | ☐     |
| Rollout email drafted and approved                                                            | ☐     |
| Launch Office Hours scheduled                                                                 | ☐     |


[title] Dashboards
[path] ChartHop by ChartHop/

Dashboards are ChartHop's reporting tool — a flexible way to visualize, monitor, and share people data across your organization. Whether you're tracking headcount trends, measuring turnover, or surfacing performance review results, dashboards bring your data together in one place.

## What You Can Do with Dashboards

- **Monitor workforce metrics** like headcount, attrition, and compensation in real time
- **Track changes over time** with time series charts showing trends month over month or quarter over quarter
- **Slice data by any dimension** — department, location, level, employment type, and more
- **Analyze form and survey responses** from performance reviews and engagement surveys
- **Personalize the experience** so each employee sees data relevant to them
- **Add AI-generated summaries** that translate chart data into plain-language narratives

## How Dashboards Are Structured

A dashboard is made up of three types of content blocks that you arrange on a canvas:

**Charts** display your people data visually. You choose the chart type (bar, line, pie, etc.) and write a formula that defines what data is shown. Charts can display a single value, a breakdown across groups, or a trend over time.

**Text Blocks** display written content alongside your charts. They can include static text, AI-generated summaries of chart data, or dynamic fields that populate with information specific to the person viewing the dashboard.

**Headers** organize your dashboard into sections, making it easier to navigate.

## How Data Is Calculated

ChartHop calculates dashboard charts by evaluating your formula across the time period you've selected. For time series charts, it breaks the period into individual intervals (e.g., each month) and calculates each one independently — the same way the Data Sheet would if you looked up that date directly. This ensures your dashboard results are always consistent with what you see elsewhere in ChartHop.

Charts that track changes — like new hires or departures — are calculated within each interval's window, so every bar or data point reflects only what happened during that specific period.

## Who Can See What

Dashboards can be shared across your organization or scoped to specific audiences. Because text blocks and chart filters can be tied to the viewer's own profile data, a single dashboard can surface personalized, relevant information for every employee without needing to build separate versions for each team or role.

## Where to Go Next

- **Building your first chart** → See the "How to Build & Customize"
- **Tracking hires, departures, and promotions** → See Change Tracking
- **Reporting on performance reviews or surveys** → See Form & Survey Responses
- **Adding AI summaries and personalized text** → See Text Blocks

[title] Self Reviews
[path] ChartHop by ChartHop/Performance Reviews/



# How to Configure a Self Review in ChartHop

**What is a Self Review?** A Self Review allows employees to evaluate their own performance. The responses are typically shared with their manager.

## Before You Start: Key Decisions

### Decision 1: Questions vs. Custom Fields

You have two options when building your form:

**Option A: Questions Only**

- Responses are stored only within the form
- Simpler to set up
- Query or report on responses across the platform using ID's rather than fields

**Option B: Questions Connected to Custom Fields**

- Responses are stored as custom fields in ChartHop
- Can be queried, filtered, and reported on across the platform
- Best for tracking performance data over time

**Need help deciding?** Contact your Customer Success Manager to discuss which approach fits your organization's needs.

### Decision 2: Who Can See Responses?

For Self Reviews, we recommend **Manager-Shared** access:

- The employee can see their own responses
- The employee's manager can see the responses
- Promotes transparency and enables better performance conversations

## Step 1: Build Your Form

**Navigate to:&#x20;**&#x50;eople Ops Tools → Forms → Create Form → Self Review

### Add a Header (Optional but Recommended)

Add helpful context at the top of your form to guide employees. Examples:

- An image of your rating scale (e.g., 1-5 scale definitions)
- Links to your company values or competency framework
- Brief instructions on how to complete the review

### Add Your Questions

Choose the question type that fits what you're asking:

| Question Type   | Best Used For                           |
| --------------- | --------------------------------------- |
| Long Text       | Open-ended responses, detailed examples |
| Short Text      | Brief answers, single sentences         |
| Single Select   | One choice from multiple options        |
| Multi-Select    | Multiple choices from a list            |
| Numeric Scale   | Rating questions (1-5, 1-10, etc.)      |
| Yes/No          | Binary questions                        |
| Number Value    | Numerical data (goals completed, etc.)  |
| Person Value    | Selecting a person from your org        |
| File Attachment | Supporting documents                    |

### If Using Custom Fields

For each question connected to a custom field, configure:

- **Applies to:** Select "People"
- **Track changes over time:** Check this box (preserves historical data)
- **Sensitivity:** Select "Manager-Shared"

## Step 2: Configure Form Settings

### Status

- **Start with:** "Inactive" (draft mode while building)
- **When ready to launch:** "Active"
- **When finished:** "Archived"

### Distribution Settings

**1. Who is this form about?**

- Select: "The person completing the form"

**2. Should this form automatically appear on profiles?**

Choose based on how you'll manage your review process:

- **Task-Based (Recommended):** Select "Only if there is a pending task"&#x20;
  - *Use this if you'll create review tasks for employees*
  - *Gives you control over who completes reviews and when*
- **Self-Guided:** Select "Yes, on everyone's profile"&#x20;
  - *Use this if employees should access reviews anytime*
  - *Reviews are always available without tasks*
- **Custom Group:** Select "Only specific people's profiles (Custom)"&#x20;
  - *Use this for specific teams or roles*
  - *Requires setting up a custom filter*

### Access & Anonymity

**1. How should the identity of the respondent be recorded?**

- Select: "Identified" (people know who completed the review)

**2. Who can see the identity of the respondent?**

- Select: "Anyone who can view the form response"

**3. Who can view the form responses?**

- Select: "Default"

### Form Completion

**1. Allow saving drafts?**

- Select: "Yes" (Recommended)
- *Employees can save progress and return later*

**2. Populate form with previous responses?**

- Select: "No, start with a blank form every time"
- *Ensures fresh reflection for each review cycle*

**3. How would you like your form to display?**

- **Pop-up:** Opens in a modal window
- **Standalone page:** Opens in a full page view
- *Choose based on your preference - both work well*

### After Submission Settings

**Approval**

- Decide if managers need to approve self reviews before they're finalized
- This is optional - choose based on your review process

**Editing**

- **Recommended:** Allow respondent to edit "Until it's approved" OR "For a period of time"
- *Gives employees flexibility to refine their responses*

**Export**

- Decide if employees can export their review as a PDF
- *Useful if employees want to keep personal copies*

### Notifications

**Email responses to:** (Recommended)

- ☑ The person who completed the form
- ☑ The manager of the person who completed the form

*This ensures both parties know when the self review is submitted*

## Step 3: Create the Profile Tab

Profile tabs display review responses on employee profiles. This makes it easy to view current and historical review data.

### Navigate to Profile Tabs

Navigate to **Admin → Profile Content**.

**To create a new tab:**

1. Click the + icon
2. Name the tab "Performance Reviews"
3. Name the column "Self Review"

**To add to an existing tab:**

1. Click into the existing tab
2. Add a new column
3. Name the column header "Self Review"

### Configure the Self Review Tab

**1. Display on the profile of:**

- If all employees complete this review: Select "Everyone in the org"
- If only specific employees: Use "Custom" and create a filter

**2. Visible to:**

- Select: "The person, and the person's managers" (Recommended)
- *Maintains transparency between employee and manager*

**3. Columns:**

- Under "Form Responses History," select your Self Review form
- *This pulls in the responses from your form*

## Step 4: Activate Everything

### Activate the Form

1. Set Status to "Active"
2. Test the form yourself before rolling out

### Activate the Profile Tab

1. Scroll to the top of the Profile Tab settings
2. Toggle the profile tab to "Active"

## Testing Your Self Review

Before launching to your organization:

1. **Complete the form yourself** - Check that all questions appear correctly
2. **Check the profile tab** - Verify responses display as expected
3. **Test notifications** - Confirm emails are sent properly
4. **Review with a colleague** - Get a second set of eyes on the setup

## Common Questions

**Can I edit the form after it's active?** Yes, but be careful. Changes will affect any in-progress reviews. If reviews are underway, consider creating a new version for the next cycle.

**What if I want different questions for different teams?&#x20;**&#x59;ou have two options depending on your needs:

**Option 1: Completely different question sets** - Create separate Self Review forms for each team and use the "Custom" distribution option to target specific groups.

**Option 2: Mostly similar questions with a few differences** - Use conditional questions within a single form. Select "Conditional" on any question that should only appear for certain people, then add a filter to specify who should see it.

**Can employees see past self reviews?** Yes, if you've set up the Profile Tab. All historical responses will appear on their profile (visible to them and their managers).

**What happens if someone's manager changes mid-review?** The new manager will automatically have access to the review responses based on the current reporting structure.

##


[title] Carrot (CQL)
[path] ChartHop by ChartHop/

# Understanding CQL (Carrot): ChartHop's Formula Language

ChartHop has a built-in expression language called CQL, short for Carrot Query Language (we call it Carrot). It's the engine behind some of ChartHop's most powerful capabilities: searching, filtering, calculating, and displaying people data exactly the way your organization needs it. Once you get the hang of it, you'll start noticing it everywhere in the platform.

## Where Carrot Lives

The great thing about Carrot is that the logic works the same no matter where you're writing it. Dashboards, forms, the org chart, data sheets, markdown profile tabs — same expressions, just a slightly different wrapper depending on context. Learn it once and it clicks everywhere.

| Where You're Working              | How You Write It                                |
| --------------------------------- | ----------------------------------------------- |
| Dashboard charts (Advanced mode)  | \{\{base / fieldCode1}}                         |
| Form content blocks               | \{\{formatMoney(base)}}                         |
| Smart Calcs and Smart Buckets     | Plain expression: base \* fieldCode1            |
| Data Sheet calculated columns     | Plain expression: diffYears(startDate, today()) |
| Markdown profile tabs / home page | \{\{ }} for values · \{% %} for logic           |

## What Carrot Can Do

**Calculate anything.** Compa-ratio, tenure, weighted performance scores, prorated salary — if the data lives in ChartHop, Carrot can work with it. A couple of quick examples:

:::BlockQuote
base / fieldCode1                 (compa-ratio)diffYears(startDate, today())     (tenure in years)
:::

**Filter with real precision.** Carrot is what powers search and filtering across the platform. Want every active manager in Engineering with more than three years of tenure? One expression handles it.

:::BlockQuote
is\:manager && department.func='Engineering' && diffYears(startDate, today()) >= 3
:::

**Label and categorize automatically.** Smart Buckets use Carrot conditions to color-code employees across the org chart and data sheet. No manual work, no spreadsheets on the side.

**Surface context right inside forms.** One of our favorite use cases: embedding live Carrot expressions into review and comp forms so reviewers see everything they need without leaving the page.

:::BlockQuote
Current Base: \{\{formatMoney(base)}}
Tenure: \{\{formatRound(diffYears(startDate, today()), 1)}} years
:::

**Show or hide content based on data.** In markdown tabs and the home page, Carrot's logic blocks let you control what people see based on their actual profile data.

:::BlockQuote
\{% if diffYears(startDate, today()) >= 1 %}Eligible for annual review.
\{% else %}
Not yet eligible — less than 1 year of tenure.
\{% endIf %}
:::

## A Few Things Worth Knowing

Carrot references fields by their field code, not their display name, so if a field gets renamed in ChartHop, you'll want to update any references manually. If a field might be empty, get in the habit of adding ?: 0 to your formula so it doesn't break on blank values. And when you're pulling historical data for reporting or baselines, use asOfPrimary rather than asOf — it keeps draft scenario data out of the picture.

If you want to go deeper, the CQL Cheat Sheet has the full formula reference. And as always, your ChartHop admin or CSM is happy to help you get started.

[title] Create a Letter Template
[path] ChartHop by ChartHop/Customizing ChartHop with AI/

# Using AI to Build Letter Templates in ChartHop

Letter templates in ChartHop let you generate polished, branded documents for employees — offer letters, compensation statements, promotion letters, and more. You can build them once and generate them on demand for any employee.

You don't need to write the code yourself. You just need to know what you want the document to say and give an AI the right instructions.

## What letter templates support

ChartHop's Letter Templates feature uses two tabs: a **Content tab** and a **Stylesheet tab**.

| Tab        | What goes here                                                           |
| ---------- | ------------------------------------------------------------------------ |
| Content    | Your HTML, including \{\{fieldCode}} expressions and class="" attributes |
| Stylesheet | Your CSS class definitions — this is where all styling lives             |

This separation matters. Unlike profile tabs and the homepage, letter templates do not support inline styles for layout-critical properties. All CSS must be defined in the Stylesheet tab and applied via class names in the Content tab.

## Common document types

| Document type          | What it typically includes                           |
| ---------------------- | ---------------------------------------------------- |
| Offer letter           | Name, title, start date, base salary, manager        |
| Compensation statement | Current salary, bonus target, equity, effective date |
| Promotion letter       | New title, new salary, effective date, manager       |
| Termination letter     | Name, last day, severance details                    |
| Leave confirmation     | Name, leave type, start and return dates             |

## Dynamic fields you can use

ChartHop uses \{\{fieldCode}} syntax to pull in live data for the employee the letter is being generated for.

| Field                 | What it shows            |
| --------------------- | ------------------------ |
| \{\{first.name}}      | First name               |
| \{\{last.name}}       | Last name                |
| \{\{title}}           | Job title                |
| \{\{department.name}} | Department               |
| \{\{manager.name}}    | Manager's name           |
| \{\{location.name}}   | Work location            |
| \{\{startDate}}       | Start date               |
| \{\{base}}            | Base salary              |
| \{\{org.name}}        | Your organization's name |
| \{\{org.image}}       | Your organization's logo |

If you've created custom fields in ChartHop, you can use those field codes here too. Find them in Settings > Fields.

## The prompt to give your AI

Copy the template below, fill in your details, and paste it into Claude, ChatGPT, or any AI tool you use.

:::BlockQuote
You are helping me build a letter template for ChartHop's Letter Templates feature.
Rules:
\- Use only CSS classes defined in a separate Stylesheet tab — no inline styles for layout-critical properties
\- No JavaScript
\- All HTML must be self-contained
\- Wrap all content in \<body> tags
\- Use \<table> for all multi-column layouts — flexbox and CSS Grid are not supported
\- No emoji or non-standard Unicode characters
\- Dynamic fields use \{\{fieldCode}} syntax — keep these exactly as written

My brand details:
\- Primary color: \[YOUR PRIMARY HEX]
\- Secondary color: \[YOUR SECONDARY HEX]
\- Font: \[YOUR FONT NAME], with Arial as fallback
\- Logo URL: \[YOUR LOGO URL, or "no logo"]

I want to build a letter template for: \[DESCRIBE THE DOCUMENT TYPE]

It should include:
\- \[FIELD 1 — e.g., "Employee name using \{\{first.name}} \{\{last.name}}"]
\- \[FIELD 2 — e.g., "Their job title using \{\{title}}"]
\- \[FIELD 3 — e.g., "Their base salary using \{\{base}}"]

Design notes:
\- \[YOUR PREFERENCES: formal, clean, branded header, etc.]
\- Use my primary color for headings and key accents

Output two things separately:
1\. The stylesheet (CSS classes only — no inline styles)
2\. The HTML content (uses those class names via class="" attributes, wrapped in \<body> tags)
:::

## HTML rendering rules

ChartHop's PDF renderer supports a limited subset of HTML. Keep these constraints in mind when building your letter template.

- **Always wrap content in \<body> tags.** Without \<body>, the renderer treats your content as plain text and outputs raw HTML tags literally in the PDF.
- **Avoid inline style attributes for layout-critical properties.** Inline styles are sometimes ignored by the renderer. Define CSS classes in the Stylesheet tab instead and apply them via class="".
- **Use \<table> for all multi-column layouts.** Flexbox and CSS Grid are not supported. Any side-by-side layout must be built with nested \<table> elements using width percentages.
- **The stylesheet applies globally.** ChartHop's default stylesheet adds border: 1px solid gray to all table, tr, and td elements. If you don't want borders on your tables, explicitly override this in your stylesheet: table, tr, td, th \{ border: none; }
- **Avoid emoji and non-standard Unicode characters.** The PDF renderer's font set does not include emoji glyphs — they render as # or a blank box. Use text or standard ASCII characters instead.
- **Keep table nesting to 2 levels where possible.** Nested \<table> closing tags can leak as visible text in some rendering contexts. Always verify with a downloaded PDF, not just the preview panel.

## Adding page breaks

To force content onto a new page, add this class to your Stylesheet tab:

css

:::BlockQuote
.pagebreak \{  page-break-after: always;}
:::

Then place \<div class="pagebreak">\</div> in your content exactly where you want the break.

Do not use inline styles for page breaks — \<div style="page-break-after\:always;"> is ignored by the renderer. The class-based approach is the only method that works reliably.

## Tips for better results

**Prompt for the stylesheet first, then the content.** Ask your AI to generate the stylesheet in one pass, then the HTML content in a second pass that references those class names. This keeps the output clean and easier to troubleshoot.

**Name your custom fields clearly.** If you're using a custom field code, tell the AI what it represents. For example: "\{\{cf\_bonus\_target}} is a custom field called Bonus Target — it contains a percentage."

**Always verify with a downloaded PDF.** The preview panel in ChartHop doesn't always match the final rendered PDF. Download the document before signing off on the template.

**Keep table nesting shallow.** If you need columns inside columns, restructure the layout rather than going three levels deep. Deeply nested tables are the most common source of rendering artifacts.

**Iterate fast.** If the first output isn't right, paste it back into the AI and describe what to change. You don't have to start over.

**Pro tip:** Before you start prompting, give your AI some context. Link it to docs.charthop.com or paste in the articles most relevant to what you're building. An AI that knows how ChartHop works will get you further, faster.

## Adding it to ChartHop

1. Go to **Settings > Letter Templates**
2. Create a new template or open an existing one
3. Paste your CSS into the **Stylesheet tab**
4. Paste your HTML into the **Content tab**
5. Generate a test letter for a real employee
6. Download the PDF to verify rendering
7. Save when you're happy with it

Once saved, the template is available to generate documents from any employee's profile or through a workflow.

[title] Use Case: Manager Moves
[path] ChartHop by ChartHop/Headcount Planning/

# Moving a Manager to a New Team in a Scenario

When you're planning a reorg in a scenario, you might need to move a manager from one part of the org to another - sometimes without bringing their current team along. ChartHop handles this cleanly using the Fill Job workflow, and the good news is that the previous team will stay put automatically.

## When to use this workflow

Use this workflow when you want to:

- Move a manager to report to a new leader (including a suggested/open role)
- Keep the manager's current direct reports on their original team
- Have the vacated seat become an open backfill role

## How to do it

### Step 1: Create or identify the new parent role

If the role the manager will report to doesn't exist yet in the scenario, you'll need to add it first.

1. In your scenario, find the role that the new parent role will report to
2. Click the dropdown on that role's profile and select **Add direct report**
3. Fill in the job details for the new role and save to the scenario

The new role just needs to exist in the scenario as an open position before you can place someone under it.

### Step 2: Create a new job under the new role for the manager

1. Click the dropdown next to **Edit job** on the new role to add a direct report job
2. Fill in the job details to match the manager's new role
3. Save to the scenario

This is the job you'll fill with the manager in the next step.

### Step 3: Fill the new job with the manager

1. Select the new job you just created
2. Click the dropdown arrow next to **Edit job** and select **Fill job**
3. In the Fill job modal, select the manager from the **Person** dropdown
4. Set the **Start date** and **Announce date**
5. Set the **Move type** to **Transfer** (though you can also select one of the other options)
6. Add a note if needed
7. Click **Save to Scenario**

:::BlockQuote
**Move type options:** Hire, Transfer, Promotion, Demotion. Use Transfer when an existing employee is moving to a new role or part of the org.
:::

## What happens to the manager's previous team

When you fill the new job as a Transfer, the manager's previous seat becomes an open backfill role. Their direct reports stay where they are, reporting up through that backfill role. You don't need to manually reassign anyone.

If you want the previous direct reports to roll up to a different manager instead of an open backfill, you have a few options:

- **Drag and drop** them on the org chart to a new manager
- **Edit job** on each person and update the Reports To field
- **Bulk edit** via the Data Sheet: select a group of people, right-click, and choose bulk edit to update their manager all at once

## Moving a job and person together (when position IDs are in use)

If your org uses position IDs and you want the job and the person to move together, keeping the same position intact, the workflow is a bit different. Instead of creating a new job and filling it, you'll reassign the existing job's reporting line directly.

Do this in two stages:

**Stage 1: Clear the team**

Before moving the job, reassign the manager's current direct reports so the role has no team. You have a few options:

- **Drag and drop** the direct reports on the org chart to a new manager
- **Edit job** on each person and update the Reports To field
- **Bulk edit** via the Data Sheet: select the group of direct reports, right-click, and choose bulk edit to update their manager all at once

**Stage 2: Move the job**

Once the directs are cleared:

1. Open the manager's job and click **Edit job**
2. Update the **Reports To** field to the new parent role
3. Save to the scenario

Because you're updating the reporting line on the existing job rather than creating a new one, the position ID, job details, and person all move together as a unit. No backfill is created.

## Tips

- You can complete this entire workflow without leaving the scenario. Nothing affects your live org until the scenario is merged or approved.
- If the manager you're moving has a large team, the bulk edit path via the Data Sheet is the fastest way to reassign multiple direct reports at once.
- The Transfer move type will be reflected in the person's job history once the scenario is applied.

[title] Dashboards: How to Build & Customize
[path] ChartHop by ChartHop/Dashboards/

# ChartHop Dashboards: How to Build & Customize

## What You Can Add to a Dashboard

| Block Type     | What It Does                                                  |
| -------------- | ------------------------------------------------------------- |
| **Chart**      | Visualizes data (bar, line, pie, etc.)                        |
| **Text Block** | Displays dynamic text, AI summaries, or personalized messages |
| **Header**     | Organizes sections with a title                               |

## Key Concepts & Definitions

**jobFilter** — The combination of filters a user has selected on the dashboard (e.g., filtered to Engineering, or New York). Always include this in your formula so your chart responds to those selections.

**intervalStart / intervalUntil** — When a chart displays data over time (e.g., month by month), each bar or data point represents one interval. intervalStart is the first day of that period, and intervalUntil is the first day of the *next* period. These are dynamic variables automatically set by the reporting engine for each period — you don't type dates manually here.

:::BlockQuote
Example: For the January bar on a chart, intervalStart = '2026-01-01' and intervalUntil = '2026-02-01'. For February, they shift automatically to '2026-02-01' and '2026-03-01'.
:::

**target** — The person a form response is *about* (e.g., the employee being reviewed).

**submit** — The person who *submitted* the form response (e.g., the manager filling out a review).

**groupBy\{}** — Groups results by a field (like department or location), automatically updating as your org changes. No manual edits needed when teams are added or renamed.

**value** — The actual response value from a form (a score, rating, or text answer).

## Chart Types

When adding a chart to your dashboard, you can choose how the data is displayed. The formula you write determines what data shows up — the chart type determines how it looks.

| Chart Type             | Best Used For                                                                                                                      |
| ---------------------- | ---------------------------------------------------------------------------------------------------------------------------------- |
| **Bar / Column Chart** | Comparing values across groups (e.g., headcount by department)                                                                     |
| **Line Chart**         | Showing trends over time (e.g., headcount growth month over month)                                                                 |
| **Pie / Donut Chart**  | Showing proportional breakdown (e.g., workforce by employment type)                                                                |
| **Single Value**       | Displaying one number or metric prominently (e.g., total headcount, current turnover rate)                                         |
| **Gauge**              | Visualizing a metric against a target or range (e.g., turnover rate vs. goal)                                                      |
| **Table**              | Showing detailed, multi-column data side by side                                                                                   |
| **Crosstab Table**     | Comparing two dimensions at once (e.g., headcount by department and gender)                                                        |
| **NPS Chart**          | Displaying Net Promoter Score breakdowns from survey data                                                                          |
| **Bubble Chart**       | Exploring individual-level people data across up to four dimensions (X axis, Y axis, size, and color) — available in Data Explorer |

### Time Series Charts

Any chart can be displayed as a **time series** — meaning ChartHop will calculate your formula for each time period (monthly, quarterly, etc.) and plot them together. This is what powers over-time reports like headcount growth, monthly new hires, or rolling turnover rate.

To make a chart work correctly as a time series, use intervalStart and intervalUntil in your change or form response functions. The engine automatically substitutes the correct dates for each period.

:::BlockQuote
Example: A bar chart using findHires(intervalStart, intervalUntil).count() will show a separate bar for each month, each reflecting only the hires from that month.
:::

### Data Explorer

Data Explorer is an interactive, full-screen environment for exploring your people data. Unlike standard dashboard charts that display aggregate data, Data Explorer surfaces individual-level data points — making it ideal for spotting patterns across your workforce. Clicking on a person opens their side panel so you can drill directly into their profile. Charts built in Data Explorer can be added directly to any dashboard. One of its most powerful uses is building a **Nine Box** visualization by plotting two performance or potential rating fields against each other.

## How Chart Formulas Work

Every chart formula follows the same pattern:

:::BlockQuote
db.job.find(jobFilter).\[optional: groupBy\{field}].\[calculation]
:::

| Part                          | What It Does                           |
| ----------------------------- | -------------------------------------- |
| db.job                        | Look in the jobs table                 |
| .find(jobFilter)              | Respect the dashboard's active filters |
| .groupBy\{field}              | (Optional) Break results into groups   |
| .sum\{} / .count() / .mean\{} | Calculate the number                   |

### Brackets & syntax

Use \{ } curly braces around filters and expressions (e.g., \{department="Engineering"}), and ( ) parentheses only for function call parameters (e.g., find(jobFilter)). Mixing these up is one of the most common formula errors.

## Common Chart Formulas

| Goal                       | Formula                                                             |
| -------------------------- | ------------------------------------------------------------------- |
| Total headcount            | db.job.find(jobFilter).sum\{headcount}                              |
| Number of employees        | db.job.find(jobFilter).count()                                      |
| Average base salary        | db.job.find(jobFilter).mean\{baseComp.annualized}                   |
| Headcount by department    | db.job.find(jobFilter).groupBy\{department}.sum\{headcount}         |
| Headcount by location      | db.job.find(jobFilter).groupBy\{location}.sum\{headcount}           |
| Avg salary by level        | db.job.find(jobFilter).groupBy\{level}.mean\{baseComp.annualized}   |
| Headcount by dept & gender | db.job.find(jobFilter).groupBy\{department, gender}.sum\{headcount} |

## Tracking Hires, Departures & Promotions

Use these functions to report on workforce changes. Use intervalStart and intervalUntil as the date parameters in dashboard charts — the engine automatically substitutes the correct dates (e.g., '2026-01-01', '2026-02-01') for each period.

| Goal                 | Formula                                                                         |
| -------------------- | ------------------------------------------------------------------------------- |
| New hires            | findHires(intervalStart, intervalUntil).count()                                 |
| Departures           | findDepartures(intervalStart, intervalUntil).count()                            |
| Promotions           | findPromotions(intervalStart, intervalUntil).count()                            |
| Hires in Engineering | findHires(intervalStart, intervalUntil).filter\{dept\:engineering}.count()      |
| Hires by department  | findHires(intervalStart, intervalUntil).groupBy\{department}.count()            |
| Voluntary departures | findDepartures(intervalStart, intervalUntil).filter\{depart\:voluntary}.count() |

### Turnover Rate

:::BlockQuote
turnoverRate(fromDate, untilDate\[, jobFilter]\[, departFilter])
:::

Calculated as: departures ÷ average(headcount at start, headcount at end)

| Goal                                 | Formula                                                                           |
| ------------------------------------ | --------------------------------------------------------------------------------- |
| Overall turnover (rolling 12 months) | turnoverRate('-1y+1d', intervalUntil)                                             |
| Voluntary turnover only              | turnoverRate('-1y+1d', intervalUntil, jobFilter, \{depart\:voluntary})            |
| Voluntary turnover in Engineering    | turnoverRate('-1y+1d', intervalUntil, \{dept\:engineering}, \{depart\:voluntary}) |

## Analyzing Form & Survey Responses

**Terminology reminder**

- **target** = the person the form is *about* (e.g., the employee being reviewed)
- **submit** = the person who *submitted* the form (e.g., the reviewing manager)

### Finding your question field ID

Every form question in ChartHop is linked to a field ID (e.g., managerReviewRating). You'll need this to write chart formulas for survey or review data. To find it, open the form editor and look for the **Copy question ID to clipboard** button on the question you want to report on.

### Pull responses from any form

:::BlockQuote
findAnswers('fieldName', fromDate, untilDate)
:::

| Goal                                                    | Formula                                                                                                                               |
| ------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------- |
| Average rating score                                    | findAnswers('managerReviewRating', intervalStart, intervalUntil).mean\{value}                                                         |
| Avg rating grouped by reviewee's department             | findAnswers('managerReviewRating', intervalStart, intervalUntil).groupBy\{target.department}.mean\{value}                             |
| Ratings submitted by Engineering, about people in Sales | findAnswers('rating', intervalStart, intervalUntil).filter\{submit.department\:engineering and target.department\:sales}.mean\{value} |

### Pull responses from a specific review or survey

:::BlockQuote
findAnswersByAssessment('fieldName', 'Assessment Name')
:::

The assessment name must match exactly as it appears in ChartHop, including capitalization.

| Goal                                                          | Formula                                                                                                                                                                                                                                             |
| ------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Avg rating from a specific review, grouped by reviewee's dept | findAnswersByAssessment('downwardRating', '1H Performance Review').groupBy\{target.department}.mean\{value}                                                                                                                                         |
| Favorable response % for an engagement question               | (findAnswersByAssessment('questionId', 'Engagement Survey').count\{value="Agree"} + findAnswersByAssessment('questionId', 'Engagement Survey').count\{value="Strongly Agree"}) / findAnswersByAssessment('questionId', 'Engagement Survey').count() |
| eNPS score grouped by team                                    | findAnswersByAssessment('questionId', 'Q4 Engagement Survey').groupBy\{submit.team}.nps\{value}                                                                                                                                                     |

### Calculating NPS

Instead of manually writing out promoter and detractor counts, use the built-in .nps\{} method:

:::BlockQuote
findAnswersByAssessment('questionId', 'Assessment Name').groupBy\{target.department}.nps\{value}
:::

This calculates NPS automatically based on response values (9–10 = promoters, 7–8 = passives, 0–6 = detractors).

### Fields available for filtering or grouping

| Field             | Definition                               |
| ----------------- | ---------------------------------------- |
| value             | The response value (score, rating, text) |
| target            | The person the form is about             |
| target.department | Department of the person being reviewed  |
| submit            | The person who submitted the form        |
| submit.department | Department of the person who submitted   |
| date              | Date the response was submitted          |

## Customizing Chart Labels & Display Options

**Editing labels** — Chart labels appear greyed out but are editable. Click directly on a label to rename it. A reset icon appears once you've made a change, which reverts it back to the default.

**Controlling what groups appear** — In the chart's Sort/Show settings, two checkboxes let you control grouping behavior:

- **Group remaining as "Other"** — rolls up any groups outside your top N into a single "Other" bucket
- **Include "None" in results** — shows records where the grouped field has no value

**Chart-level filters vs. formula filters** — If you add a filter at the top of the chart AND inside your groupBy\{} formula, they work independently and won't override each other. Use the chart-level filter for broad audience scoping and the formula-level filter for specific calculation logic.

## Sharing Dashboards

| Access Level | What They Can Do                                                                          |
| ------------ | ----------------------------------------------------------------------------------------- |
| **Owner**    | Full edit access, can share with others                                                   |
| **Editor**   | Can edit charts and content                                                               |
| **Viewer**   | Can view the dashboard; can apply filters if the dashboard does not use full data sharing |

:::BlockQuote
**Note on filtering:** Viewers can only use dashboard filters if the dashboard is set to **normal data access**. If a dashboard uses full data sharing (exposing all org data regardless of the viewer's permissions), filters are intentionally disabled as a privacy safeguard.
:::

## Text Blocks: Dynamic & Personalized Content

Wrap any field in \{\{ }} and it populates with the viewer's own data:

:::BlockQuote
You are part of the \{\{department}} department.Your manager is \{\{reportsTo}}.
:::

Every employee sees their own information — no need to duplicate dashboards by team.

### Add an AI Summary of any chart

:::BlockQuote
\{\{summarizeChart(reportId, 'Chart Name Exactly As It Appears')}}
:::

The chart name must match exactly, including capitalization.

## Quick-Reference Cheat Sheet

:::BlockQuote
\# Headcount snapshotdb.job.find(jobFilter).sum\{headcount}

\# Headcount by department (auto-updates)
db.job.find(jobFilter).groupBy\{department}.sum\{headcount}

\# New hires this period by department
findHires(intervalStart, intervalUntil).groupBy\{department}.count()

\# Voluntary turnover rate (rolling 12 months)
turnoverRate('-1y+1d', intervalUntil, jobFilter, \{depart\:voluntary})

\# Average performance rating by reviewee's department
findAnswers('performanceRating', intervalStart, intervalUntil).groupBy\{target.department}.mean\{value}

\# eNPS by team
findAnswersByAssessment('questionId', 'Assessment Name').groupBy\{submit.team}.nps\{value}

\# Favorable response % for an engagement question
(findAnswersByAssessment('questionId', 'Engagement Survey').count\{value="Agree"} + findAnswersByAssessment('questionId', 'Engagement Survey').count\{value="Strongly Agree"}) / findAnswersByAssessment('questionId', 'Engagement Survey').count()

\# AI summary of a chart
\{\{summarizeChart(reportId, 'Headcount')}}

\# Personalized text for the viewer
You are in the \{\{department}} department, reporting to \{\{reportsTo}}.
:::

## Tips & Known Behaviors

- **Building a column-style table?** Temporarily disable the reporting engine, create your chart, then re-enable it.
- **Comparing to a prior period?** Use asOf('-1m', \{...}) to pull data from a past point in time and subtract from the current value.
- **Chart not responding to filters?** Make sure jobFilter is included in your .find() call.
- **Chart showing 0 values?** Bar and column charts suppress zero results by default. If you need zeros to appear, use a Crosstab Table instead.
- **AI summaries not respecting dashboard filters?** The AI summary reflects the underlying chart data. Make sure your charts include jobFilter so the summary reflects the filtered view.
- **Currency in charts:** All monetary values are converted to your organization's primary currency. If your org spans multiple countries, be aware that dashboard charts normalize everything to the org-level currency.
- **"Other" grouping and filters:** The "Other" bucket is calculated at submission time, not dynamically. Applying a manager-level or audience filter after the fact will not re-calculate what falls into "Other."
- **Filtering out specific groups:** You can filter out a specific group value using \{field!="Value"} in your formula. However, for multi-select fields like Teams, filtering out one value may remove a person from all groups they belong to — not just the filtered one. In those cases, build each group as a separate formula line rather than using exclusion filters.
- **De-identified survey dashboards:** Use findAnswersByAssessment() to pull results. Groupings like department or location are calculated at submission time, not dynamically per manager filter — this can occasionally surface small group results unexpectedly.

[title] CQL in Approval Chains: Reference Guide
[path] ChartHop by ChartHop/Carrot (CQL)/

:::BlockQuote
Approval chains in ChartHop control who needs to sign off on a scenario before it's merged. Carrot expressions are used in two places: the **"Only include stage if"** condition on a stage (to control whether the stage fires at all) and the **approver definition** itself (to route to the right person dynamically). This guide covers both.
:::

## How Approval Chain CQL Is Evaluated

Before building conditional logic, it helps to understand how ChartHop evaluates these expressions:

- Conditional stage expressions are evaluated against each **change** in the scenario, not the scenario as a whole — unless you use scenarioChanges, which operates at the scenario level.
- **Approver** expressions (the "Custom CQL expression" approver option) are evaluated differently from inclusion conditions: a bare change / change.after is **not** in scope there. To route an approver based on what changed, you must reach the change through scenarioChanges (see [Custom CQL Approver Expressions](./#custom-cql-approver-expressions) below).
- The best way to test a change.before / change.after expression is to use it as a **filter on the scenario Changes tab**. If it returns results there, it will fire in the approval chain.
- If a stage's approver resolves to nobody and no fallback approver is set, the chain will stall. Always configure a fallback approver for any stage that uses dynamic routing.
- **Per-change filter (no wrapper needed):** In a stage's "Only include stage if" field, `change` is an implicit per-change context variable. ChartHop evaluates each change individually, so you write the condition directly (e.g., `change.type="create" && levelAuto=["IC0","IC1"]`). Wrapping in `scenarioChanges.filter{}` is not valid in this context and will throw an "Unknown field scenarioChanges" error.
- **When to use each pattern:** If the condition is "does *this* change meet a condition?" write it directly using `change.field=value`. If the condition is "do *all applicable changes together* meet a condition?" use `scenarioChanges.filter{}.aggregation{} > threshold` (see [scenarioChanges Expressions](./#scenariochanges-expressions) below).

## Stage Approver Options

When setting up a stage, the **Stage Approvers** field supports several modes:

| Option                                        | What it does                                                                                           |
| --------------------------------------------- | ------------------------------------------------------------------------------------------------------ |
| Manager                                       | Routes to the direct manager of the job being changed                                                  |
| Grand Manager                                 | Routes to the manager's manager                                                                        |
| Specific Person                               | Routes to a named individual — always fires for that person                                            |
| Person Field                                  | Routes to whoever is in a custom Person-type field (e.g., Hiring Manager, Talent Partner)              |
| Multiple stages, one per manager in the chain | Creates a dynamic stage for every manager in the hierarchy, all the way up — each approves in sequence |
| Custom CQL expression                         | Define your own routing logic                                                                          |

:::BlockQuote
If you use a Person field as the approver and the field is blank on a given job, the fallback approver will be used instead.
:::

## Conditional Stage Expressions

These go in the **"Only include stage if"** field. The stage only fires when the expression evaluates to true.

**Trigger only if a specific field changed**

:::BlockQuote
change.before.base != change.after.base
:::

:::BlockQuote
Works for any field. Combine multiple fields with ||: (change.before.base != change.after.base) || (change.before.fieldCode1 != change.after.fieldCode1)
:::

**Trigger only if manager changed**

:::BlockQuote
change.before.manager != change.after.manager
:::

**Trigger only if a specific person submits the scenario**

:::BlockQuote
name:'First Last'
:::

:::BlockQuote
Set the condition type to **Custom** and use name: with the person's full name. This is the confirmed working pattern for submitter-based routing.
:::

## scenarioChanges Expressions

scenarioChanges operates at the **scenario level** rather than per-change. Use it when the approval decision should be based on the combined contents of the scenario rather than any individual change. These are called **Approval Group Inclusion Expressions** in the platform.

**Trigger based on total cost impact across all changes**

:::BlockQuote
scenarioChanges.sum > 500000
:::

Use when you want approval based on the total cost of all changes combined.

Example: Require VP approval when the combined salary impact of all changes exceeds $500,000. Replace the number with your org's threshold.

**Trigger if any change in the scenario affects a specific condition**

:::BlockQuote
scenarioChanges.any\{department='Engineering'}
:::

Use when you want approval if at least one change matches a condition.

Example: Include the Engineering Director as an approver whenever any change in the batch affects an Engineering employee — even if the rest of the scenario touches other departments.

**Trigger only if every change in the scenario matches a condition**

:::BlockQuote
scenarioChanges.all\{department='Engineering'}
:::

Use when you want approval only if every change matches a condition.

Example: Route to a specialized Engineering approval chain only when the entire batch contains Engineering changes. Skip it if the scenario is mixed across departments.

**Combine scenario content with submitter identity**

:::BlockQuote
scenarioChanges.all\{department='Engineering'} && title='CEO'
:::

Use when you want to combine a condition about the changes with a condition about who is submitting the request.

Example: Only include this approval stage when all changes are in Engineering AND the person submitting the request is the CEO. This lets you create different approval flows based on both what's changing and who's requesting it.

## Custom CQL Approver Expressions

The **Custom CQL expression** approver option lets you compute the approver(s) dynamically instead of picking a manager or a named person. The expression must resolve to a **person** (or a list of people) — for example a Person-type field on the job, or a value looked up from a table. ChartHop routes the request to that person's job.

:::BlockQuote
If the expression resolves to nobody — or to a person with no active job — the stage uses the fallback approver. Always set one for a stage that routes dynamically.
:::

**Referencing the change being approved (important)**

When the approver depends on *what changed* — for example, routing to the owner of the department, region, or cost center a job is moving into — you must reach the change through scenarioChanges. A bare change / change.after is empty when an approver expression is evaluated, so the expression resolves to nobody and the stage **silently falls back** to the fallback approver.

Wrap the lookup in scenarioChanges.filter.map:

:::BlockQuote
scenarioChanges.filter\{change.after.region:\*}.map\{db.regionOwner.regionName\[change.after.region].owner}
:::

This reads: for each change that sets a region, look up that region in the regionOwner table and return its owner (a Person). Each matching owner is added as an approver.

:::BlockQuote
This is the same reason scenarioChanges is required for scenario-level inclusion conditions: change / change.after are only in scope **inside** a scenarioChanges.any / all / filter / map block. In the **"Only include stage if"** field a bare change.after works because that field is evaluated per change; in a **Custom CQL approver** it is not, so you must use scenarioChanges.
:::

**Route to an owner looked up from a table**

1. Store the mapping in a table — for example, regionOwner with a unique key column (regionName) and a Person owner column (owner).
2. Add the key to the job as a field — for example, a single-select region field.
3. Set the stage's Stage Approvers to a Custom CQL expression that filters scenarioChanges to the changes that set the key, then maps each to the table's owner column (see the expression above).
4. Set a fallback approver — the stage falls back if a change's key has no matching row, or if the resolved owner has no active job.

## Common Approval Chain Patterns

**Route to a Talent Partner or custom role via a Person field**

1. Create a custom Person-type field (e.g., talentPartner) on the job
2. In the approval stage, set Stage Approvers to that Person field
3. ChartHop will route to whoever is in that field for each job — different jobs can route to different people automatically
4. Set a fallback approver for jobs where the field is blank

:::BlockQuote
This is one of the most common ways teams handle talent partner or HRBP approval routing without hardcoding names.
:::

**Route to the owner of the value a job is moving into**

Use a Custom CQL approver with a table lookup wrapped in scenarioChanges when the approver isn't stored on the job itself but in a lookup table keyed by a field the change sets (region, cost center, department owner, etc.):

:::BlockQuote
scenarioChanges.filter\{change.after.region:\*}.map\{db.regionOwner.regionName\[change.after.region].owner}
:::

:::BlockQuote
Remember the change data must come through scenarioChanges — a bare change.after in an approver expression resolves to nobody and falls back. Always configure a fallback approver.
:::

**Send approvals up the entire manager chain**

In the Stage Approvers dropdown, select **"Multiple stages, one per manager in the manager chain"**. ChartHop will dynamically create one approval stage per manager level, from the direct manager up to the top of the org. Each approves in sequence.

:::BlockQuote
This feature was built specifically for customers who need every manager in the hierarchy to sign off before a scenario is merged.
:::

**Route differently based on department**

Create separate conditional stages, each with its own "Only include stage if" condition:

:::BlockQuote
Stage 1 (Engineering Director): change.after.department='Engineering'Stage 2 (Finance Lead): change.after.department='Finance'
Stage 3 (Final approver): always fires
:::

:::BlockQuote
Each stage only fires for changes in the relevant department. The final stage can be set without a condition so it always fires as the last step regardless of department.
:::

**Require approval only above a cost threshold**

:::BlockQuote
scenarioChanges.sum > 100000
:::

:::BlockQuote
Add this as a conditional stage for senior leadership. Changes below the threshold skip the stage entirely and route only through the standard chain.
:::

## Key Things to Know

**Test before you configure.** Use the expression as a filter on the scenario Changes tab first. If it returns the changes you expect, it will behave the same way in the approval chain.

**Fallback approver matters.** Any stage that uses dynamic routing — Person fields, custom CQL, manager chain — should have a fallback approver configured. If the expression resolves to nobody, the chain falls to the fallback. If there's no fallback, the chain stalls.

**Change data in a custom approver needs scenarioChanges.** In a Custom CQL *approver* expression, a bare change / change.after is empty and the stage will fall back. Wrap change references in scenarioChanges.filter.map. Inclusion conditions in "Only include stage if" don't need this — they already run per change.

**One scenario, one approval chain.** A single scenario routes through one approval chain. You can build a lot of conditional logic within that chain, but you can't branch a scenario into two separate chains simultaneously.

**Approvers can edit during their stage.** Once it's their turn in the chain, approvers can edit the scenario before approving or rejecting. Once they act, the scenario is locked for that stage.

**The Changes tab is your best debugging tool.** If a conditional stage isn't firing as expected, check whether your expression returns results there. If it doesn't, the expression syntax or field reference needs adjustment.

[title] Build Custom Profile Tabs
[path] ChartHop by ChartHop/Customizing ChartHop with AI/

# Using AI to Build Custom Profile Tabs

Profile tabs let you add structured, branded content directly to an employee's profile page. You can use them to surface role-specific resources, display custom data, or organize information that doesn't have a home anywhere else in ChartHop.

You don't need to write the code yourself. You just need to know what you want to show and give an AI the right instructions.

**What Profile Tabs support**

Profile tabs accept HTML with inline CSS. That means:

- Custom layouts (columns, cards, tables)
- Your brand colors and fonts
- Images and links
- Dynamic fields that pull in live employee data

No JavaScript. No external stylesheets. Everything needs to be self-contained in the HTML you paste in.

**Common uses**

- A "My Role" tab with responsibilities, level, or team context
- A resource tab with links scoped to a department or location
- A quick-reference tab for policies, contacts, or tools
- A custom display for fields you've added to your ChartHop instance

**Before you start**

Collect these inputs before you open an AI tool.

| What to collect          | Example                                   |
| ------------------------ | ----------------------------------------- |
| Primary brand color      | #6E37FF                                   |
| Secondary / accent color | #3C137C                                   |
| Background color         | #FFFFFF or a light tint                   |
| Font name                | Inter, Lato, Arial                        |
| Tab name                 | "My Resources," "Role Info," "Team Hub"   |
| What data to show        | Title, manager, department, custom fields |
| Links to include         | Benefits portal, team wiki, org chart     |

**Dynamic fields you can use**

ChartHop uses \{\{fieldCode}} syntax to pull in live data for the employee whose profile is being viewed.

| Field                 | What it shows   |
| --------------------- | --------------- |
| \{\{first.name}}      | First name      |
| \{\{last.name}}       | Last name       |
| \{\{title}}           | Job title       |
| \{\{department.name}} | Department      |
| \{\{manager.name}}    | Manager's name  |
| \{\{location.name}}   | Work location   |
| \{\{startDate}}       | Start date      |
| \{\{employment.type}} | Employment type |

If you've created custom fields in ChartHop, you can use those field codes here too. Find them in Settings > Fields.

**The prompt to give your AI**

Copy the template below, fill in your details, and paste it into Claude, ChatGPT, or any AI tool you use.

:::BlockQuote
You are helping me build HTML for a custom profile tab in ChartHop, an HR platform.
Rules:
\- Use only inline CSS — no \<style> tags, no external stylesheets
\- No JavaScript
\- All HTML must be self-contained
\- Dynamic fields use \{\{fieldCode}} syntax — keep these exactly as written

My brand details:
\- Primary color: \[YOUR PRIMARY HEX]
\- Accent color: \[YOUR ACCENT HEX]
\- Background: \[YOUR BACKGROUND HEX or "white"]
\- Font: \[YOUR FONT NAME], with Arial as fallback

I want to build a profile tab called "\[TAB NAME]" that shows:
\- \[FIELD 1 — e.g., "The employee's job title using \{\{title}}"]
\- \[FIELD 2 — e.g., "Their manager using \{\{manager.name}}"]
\- \[FIELD 3 — e.g., "Quick links: list them here"]

Design notes:
\- \[YOUR PREFERENCES: card layout, two columns, minimal, etc.]
\- Use my primary color for section headers
\- Keep it scannable — this is reference content, not a marketing page

Output only the HTML. No explanation.
:::

**Tips for better results**

**Think about who's viewing the tab.** Profile tabs can be seen by the employee, their manager, or teammates depending on your permissions setup. Write your prompt with the right audience in mind.

**Name your custom fields clearly.** If you're using a custom field code, tell the AI what it represents. For example: "\{\{cf\_role\_focus}} is a custom field called Role Focus — it contains a short description of the employee's main area of work."

**Keep each tab focused.** A tab with 12 sections is harder to navigate than two focused tabs. One purpose per tab.

**Check field visibility.** Make sure the fields you're pulling in are visible to the people viewing the tab, based on your ChartHop permissions settings.

**Iterate fast.** If the first output isn't right, paste it back into the AI and describe what to change. You don't have to start over.

**Paste carefully.** ChartHop's content area renders a mix of markdown and inline HTML. A few rules that matter:

- Use #### markdown headings for section titles instead of \<h4> tags
- Use display: flex; flex-wrap: wrap for multi-column layouts — CSS grid isn't supported
- Don't leave blank lines inside HTML blocks — blank lines cause the renderer to break out of HTML mode and display raw code instead

**Conditional logic**

You can show or hide sections of a profile tab based on employee data. This is useful when a tab serves multiple roles or locations and certain content only applies to some employees.

ChartHop uses \{% if %} / \{% endIf %} blocks for this.

:::BlockQuote
\{% if \{\{employment.type}} == 'Full-time' %}  \<p>You're eligible for the full benefits package. Find details in the links below.\</p>
\{% endIf %}

\{% if \{\{location.name}} == 'Remote' %}
&#x20; \<p>Your home office stipend information is managed through \[LINK].\</p>
\{% endIf %}
:::

Tell your AI exactly what condition you need and what content should appear when it's true:

:::BlockQuote
Add a section that only appears if \{\{location.name}} equals 'Remote'.When it does, show: \[YOUR CONTENT]
Use ChartHop's conditional syntax: \{% if \[condition] %} ... \{% endIf %}
:::

**Adding it to ChartHop**

1. Go to Settings > Profile Tab Config
2. Create a new tab or open an existing one
3. Paste your HTML into the content area
4. Preview on a real employee profile
5. Set visibility permissions
6. Save

The tab will appear on every employee profile where your settings apply.

[title] Engagement Surveys
[path] ChartHop by ChartHop/

ChartHop's Engagement module gives you a privacy-first way to collect honest feedback from your team. Whether you're running a company-wide pulse, measuring eNPS, or targeting specific groups with conditional questions, this guide walks you through everything from setup to analysis.

## How engagement surveys work

Before you build anything, it helps to understand the two-piece model.

Every engagement survey in ChartHop is made up of a **Form** and a **Survey** (also called an assessment). The Form is where you build your questions and configure privacy settings. The Survey is the cycle — it's what you attach the form to, define your audience and timeline, send tasks from, and use to track participation.

You always build the form first, then create the Survey and attach it.

### Questions vs. fields

When building an engagement survey form, you'll add **questions** — not fields. This is an important distinction. Fields are ChartHop data points tied to a person's record (like department or title). Questions are standalone form inputs that capture responses without writing to anyone's profile.

For engagement surveys, always use question types: short text, long text, single select, multiple choice, numeric scale, yes/no. The distinction matters for reporting too — responses to questions are accessed via answerValue\['questionId'] in dashboards, not via field codes.

### Choosing your privacy level

The privacy level you set on a form controls how responses are stored and who can see what. This decision shapes everything downstream — what demographic reporting is available, whether individual respondents can be identified, and what happens to the data permanently. Choose before you launch, because some changes are irreversible.

| Privacy level       | Individual responses visible? | Demographic reporting available?               |
| ------------------- | ----------------------------- | ---------------------------------------------- |
| **Identified**      | Yes                           | Yes, full                                      |
| **De-identified**   | No                            | Yes, by configured demographic fields only     |
| **Fully Anonymous** | No                            | Only if the respondent provides it in the form |

**De-identified** is the right choice for most engagement surveys. Identity is stored internally but never displayed — what admins and managers see is responses grouped by demographic attributes like department, location, or tenure. This gives you meaningful reporting while protecting employee trust.

**Fully anonymous** stores no identity at all. Once a response is submitted anonymously, it cannot be attributed to anyone — including by a ChartHop administrator — and this cannot be reversed. Anonymous is the right choice when you want the absolute lowest barrier to honest feedback and don't need demographic breakdowns. If you want to report by group, you'd need to add demographic questions directly to the form.

[title] Actions
[path] ChartHop by ChartHop/Performance Reviews/

# Setting Up Automated Actions

### Automating Manager Reviews After Self-Review Completion

To automatically trigger the Manager Review when an employee submits their Self Review, configure an automated action with the following settings:

**Event Type:** Form Submitted

**Configuration Steps:**

1. Navigate to Automated Actions
2. Create a new action
3. Select "Form Submitted" as the triggering event
4. Specify the Self Review form as the trigger source
5. Set the Manager Review form as the automated action to send

**Result:** When an employee completes and submits their Self Review, the system will automatically send the corresponding Manager Review without manual intervention.

**Use Case:** This automation streamlines the performance review workflow by eliminating delays between review stages and ensuring managers receive review requests promptly after employee submissions.

### Automating Peer Reviews After Selection

To automatically trigger the Peer Review when an employee submits their Peer Selection, configure an automated action with the following settings:

**Event Type:** Form Submitted

**Configuration Steps:**

1. Navigate to Automated Actions
2. Create a new action
3. Select "Form Submitted" as the triggering event
4. Specify the Peer Selection form as the trigger source
5. Set the Peer Review form as the automated action to send
6. Set the Send Form To field to the Peer Reviewer field

**Result:** When the Peer Selection form is submitted, the system will automatically send the Peer Review form to selected peers without manual intervention.


[title] Planning Your Performance Review Cycle
[path] ChartHop by ChartHop/Performance Reviews/

# Planning Your Performance Review Cycle

Running a performance review cycle in ChartHop involves more moving parts than it might first appear — and the order you build them in matters. This guide walks you through the full picture before you dive into setup, so nothing surprises you mid-cycle.

## How the pieces fit together

Every performance cycle in ChartHop is built from four components, and they have a dependency order:

**Forms** → **Automated Actions** → **Profile Tabs** → **Review Cycle**

Build your forms first — one per review direction (self, manager, peer, upward). Then configure automated actions so downstream forms trigger at the right moment. Then set up profile tabs so managers can approve and release feedback from employee profiles. Only then create the review cycle and attach everything together.

Skipping steps or building out of order is the most common cause of cycle issues. Map your full flow before you build anything.

## Before you build: key decisions

A few decisions should be made before you touch a single form. Get these wrong and you'll be reconfiguring mid-cycle.

**Start with a clean org chart**

ChartHop pulls review assignments directly from your reporting structure. Before any cycle begins, make sure recent transfers, dotted-line reports, and manager assignments are accurate. This is one of the most common causes of reviews going to the wrong people — and it's much harder to fix mid-cycle than before launch.

**Questions vs. fields**

Every form item is either a question or a field — and this distinction matters more than it first appears.

|                                  | Field                                                                                                    | Question                                           |
| -------------------------------- | -------------------------------------------------------------------------------------------------------- | -------------------------------------------------- |
| What it is                       | A ChartHop data point tied to a person's record                                                          | A standalone form input — not tied to any record   |
| Lives on profile?                | Yes — written to the employee's profile                                                                  | No — only exists within the form response          |
| Queryable in datasheets/reports? | Yes — accessible via field code across ChartHop                                                          | No — only accessible via answerValue in dashboards |
| Best for                         | Rating scales, performance scores, any data you want to surface, track over time, or use in comp reviews | Open-ended comments, supplementary narrative       |

The rule: if you ever want to display a rating on a profile tab, filter by it in a datasheet, use it in a compensation review, or track it over time — it must be a field, not a question. A "Manager Performance Rating" that feeds into a comp cycle should be a field. A "Please share any additional context" text box can be a question.

Fields are created and managed in **Settings → Fields**. Before building any form, confirm whether the fields you need already exist or whether new custom fields need to be created. Custom fields support single-select, multi-select, yes/no, date, text, numeric, and calculated (expression-based) types.

**Visibility and release**

When can employees see their own reviews? Some organizations release feedback immediately on submission. Others hold it until after calibration, or until managers have had a 1:1 conversation. ChartHop supports both — but you need to decide upfront and configure your form sensitivity settings accordingly. One of the most common regrets after a cycle launches is "we didn't think through who sees what, and when."

**Data flow downstream**

If performance ratings will feed into a compensation review, promotion workflow, or succession planning process — map those connections before you build your forms. Fields that need to flow downstream must be set up as custom fields from the start. Questions don't flow anywhere.

## Step 1: Build your forms

Navigate to **People Ops Tools → Forms**. Only users with Owner or Technical Owner access can create or edit forms.

You'll need a separate form for each review direction you're running:

- Self review
- Manager review (downward)
- Peer review — requires two forms: a peer selection form and a peer feedback form
- Upward review (if applicable)

Build and fully configure each form before moving on. The decisions that differ by type — sensitivity settings, anonymity, release configuration — are covered in the individual setup guides for each review type.

### Form settings: what they mean

Once your form is built, go to the **Settings** tab. Here's what each setting controls:

**Status**

- **Active** — the form can collect responses, appear on profiles, and be used in review cycles
- **Inactive** — the form cannot collect responses and won't appear anywhere
- **Archived** — hidden from the forms list; use for retired cycles

Set forms to Inactive until you're ready to launch. Don't leave test forms Active.

**Approvals** Toggle on if a form response needs to be reviewed and approved before it's finalized. You can set the approver as the manager or manager's manager. Use this for workflows like manager reviews that need HR sign-off before ratings are released.

**Anonymity** Controls whether respondent identity is visible. For performance reviews this is typically off. Note: ChartHop Performance Reviews is not designed for fully anonymous deidentified feedback — that belongs in the Engagement module.

**Save/Edit After Submission** Controls whether forms can be edited after submission. For multi-stage cycles where a self-review should be locked before the manager review opens, turn this off.

**Release** Toggle on if you want managers or leaders to manually release form responses to employees at a time of their choosing, rather than employees seeing results immediately. This is critical for cycles where managers need to deliver feedback in a 1:1 before results go live. Release is managed from the employee's profile tab.

**Email Notifications** Configure who gets notified and when. Use thoughtfully — over-notifying causes employees to ignore communications.

### Sensitivity levels

Field sensitivity settings override form response visibility. If a field on a form is set to Manager-Only, an employee will not see that field even if they have access to view the form response.

| Level            | Who can see it                                                                |
| ---------------- | ----------------------------------------------------------------------------- |
| Org Public       | The entire organization                                                       |
| Manager-Shared   | The employee, anyone they report to, and users with sensitive access          |
| Manager-Only     | Only people the employee reports to and users with sensitive access           |
| Personal         | Only the employee themselves and users with sensitive access                  |
| Highly Sensitive | Completely hidden (including field name) from anyone without sensitive access |

### Before finalizing any form

Preview the form before launching: click **Preview** in the header, select a real employee to preview as, and verify that all fields, conditional logic, and visibility settings work as expected.

## Step 2: Set up automated actions

Automated actions are what make a multi-stage cycle actually work. Without them, you're manually coordinating every handoff — and things get missed.

Navigate to **People Ops Tools → Automated Actions** to configure your triggers.

Each action has three parts: a **trigger** (what causes it to fire), a **trigger source** (the specific form or event), and an **action** (what happens as a result).

**Common actions to configure:**

**Self review → Manager review** Trigger on Form Submitted from the self-review form, then send the manager review form to the employee's manager. This ensures manager reviews only open after self reviews are complete.

**Peer selection → Peer reviews** Trigger on Form Submitted from the peer selection form, then send the peer review form to the selected reviewers. Without this action, peer review forms don't go anywhere automatically.

**Approval-triggered forms** You can configure whether a downstream form fires on submission or on approval of the prior form. For example: the manager review launches only after HR approves the self-review.

**Conditional downstream forms** If a manager selects "Yes, recommend for promotion" in their review form, a Promotion Justification form is automatically sent to that manager. This uses conditional logic within the form combined with an action trigger.

**Reminder automations** Set up timed reminders for incomplete submissions at key intervals (e.g., 3 days before deadline). Reduces manual chasing.

Map your entire cycle end-to-end before configuring actions — what triggers what, at what point, and under what conditions. Adding automations retroactively mid-cycle can cause missed sends or double-sends.

## Step 3: Configure profile tabs

Profile tabs are required for a performance cycle — they're where managers go to approve and release reviews. Without a configured profile tab, there's nowhere for that to happen.

Navigate to **Admin → Profile Tab Configuration**.

Create a new tab, name it clearly (e.g., "Performance"), set whose profile it appears on, then set who it's displayed to using sensitivity levels. Add your forms as **Form Response History** content — this is the recommended content type for performance reviews, as it displays historical responses over time.

For tabs that mix field data and form response data, use the custom sensitivity filter:

:::BlockQuote
target.proxyReviewer=me or target.managers=me or target=me
:::

This ensures the employee sees their own data, their managers see it, and anyone filling out a form on their behalf can see it.

**Sensitivity guidance by audience:**

- Employees should see their own self-review responses and any released manager feedback
- Managers should see self-review responses and be able to complete and release their own review
- HR/Admins should have visibility into all responses
- Use Manager-Only sensitivity for rating fields that should not be visible to the employee prior to release

Admins can also manage approvals and releases in bulk from the form's Responses tab → Sheet View. But the profile tab is the primary interface for managers.

Test your profile tab from the perspective of an employee, a manager, and an admin before launching.

## Step 4: Create the review cycle

With forms built, actions configured, and profile tabs ready, create the actual review cycle.

From the left sidebar, select **Performance**, then create a new review. From there:

- Link each form to the appropriate stage of the cycle
- Define which employees the cycle applies to (full org or a specific group)
- Set staggered deadlines for multi-stage cycles — each phase should close before the next opens, with buffer time built in

**Reporting relationships during the cycle**

Because ChartHop's org chart is live and continuously updated, you need to decide what happens if someone changes managers, transfers, or a manager goes on leave mid-cycle. Two approaches exist: freezing relationships to the org chart at cycle launch, or keeping them live so they reflect real-time changes. A company going through a reorg mid-cycle almost certainly wants them frozen; a stable org may be fine either way. Check with your ChartHop admin or the in-product documentation for the exact location of this setting.

**Pilot before full launch**

Scope the cycle to 3–5 trusted employees first. Give them a few days to go through the experience and flag anything off. Use **View As** (click your profile picture in the top right, select an employee) to test visibility from different perspectives — ChartHop renders exactly what that person sees. Test across different roles, levels, and departments. Fix anything in Admin before sending invitations to the full org. Catching a misconfiguration in a pilot of 5 is very different from catching it after it's live for 500.

## Step 5: Launch, track, and monitor

Send forms from within the Reviews page. Track completion rates and send reminders from the same place.

In the form's Responses tab, use **Sheet View** to monitor Approval Status and Release Status across all employees. Use **Individual View** for direct admin actions — approve, reject, or release individual form responses.

## Step 6: Calibration (Alpha)

Calibration is available as an alpha feature and needs to be enabled before use. Calibration happens after ratings are submitted — it is not a pre-launch step.

**Before your calibration sessions:**

Map out your sessions in advance — who is being calibrated in each meeting and who the facilitator is. Navigate to the **Calibrations** tab within the review cycle and configure the calibration table, adding or removing columns to show the mix of ChartHop fields and form data most relevant to each session. Only employees who have had a form completed about them will appear.

Apply the appropriate filter for each session (e.g., filter by department), then copy and save the URL. ChartHop encodes filters directly into the URL, so the filtered view is fully preserved in the link. Paste each saved URL into a shared doc or calendar invite — when the session arrives, whoever is running calibration just clicks the link and lands directly in the pre-filtered view, with no fumbling with filters in the room.

Repeat for every scheduled session before any of them begin.

**During sessions:**

Pull up the pre-saved filtered URL and share your screen. Click the expand icon on any employee's row to drill into their specific form responses. Lock manager review scores before the session begins to prevent changes during calibration. You can approve or release responses directly from this view if you have the appropriate access.

**After calibration:**

Final ratings surface on employee profiles via the profile tabs configured in Step 3. Export calibration results as needed before closing the cycle.

## How performance data connects across ChartHop

Performance data in ChartHop doesn't live in isolation — it connects across the platform:

- **Compensation reviews** — ratings stored as fields can directly inform compensation recommendations in a comp cycle
- **Scenarios** — planning decisions can be informed by performance data alongside headcount and comp
- **Employee profiles** — ratings and review history surface on profile tabs, visible based on sensitivity settings
- **Org chart** — review relationships are driven by the live reporting structure
- **Datasheets** — any rating stored as a field is queryable and filterable across the org

This integration only works if ratings are stored as custom fields. Questions don't flow anywhere.

## Common setup mistakes

| Mistake                                       | Why it matters                                                        |
| --------------------------------------------- | --------------------------------------------------------------------- |
| Using questions instead of fields for ratings | Ratings won't be queryable, reportable, or usable in comp reviews     |
| Not configuring profile tabs before launch    | Managers can't approve or release reviews                             |
| Skipping actions setup                        | Peer reviews never get sent; downstream forms don't trigger           |
| Not cleaning the org chart first              | Reviews go to the wrong managers                                      |
| Designing visibility after launch             | Employees see things they shouldn't — or can't see things they should |
| Tight timelines with no buffer                | Every phase runs late; the cycle collapses                            |
| Leaving test forms Active                     | Employees receive accidental form assignments                         |


[title] Ask ChartHop for Org Rollouts
[path] ChartHop by ChartHop/ChartHop for All-(Org-Rollouts)/

You can use **Ask ChartHop** to help with your Org Rollout!

[title] Contact support
[path] /

## Employees&#x20;

If your company uses ChartHop and you have a question about how to use the product or access information please contact your HR, People Operations, Finance or Recruting teams.&#x20;

If you are experiencing technical difficulties, please contact [support@charthop.com](mailto\:support@charthop.com) with as much context as possible.&#x20;



## Administrators&#x20;

If you're a current ChartHop customer, please reach out to ChartHop support at [support@charthop.com](mailto\:support@charthop.com).

Subscribe to our Status Page for platform alerts at [status.charthop.com](https://status.charthop.com/).&#x20;


[title] Upward Reviews
[path] ChartHop by ChartHop/Performance Reviews/

# How to Configure an Upward Review in ChartHop

**What is an Upward Review?** An Upward Review (also called Manager Feedback or 360 Feedback from Direct Reports) allows employees to provide feedback about their manager. This helps managers understand how they're perceived by their team and identify areas for leadership development.

## Before You Start: Key Decisions

### Decision 1: Questions vs. Custom Fields

You have two options when building your form:

**Option A: Questions Only**

- Responses are stored only within the form
- Simpler to set up
- Cannot query or report on responses across the platform

**Option B: Questions Connected to Custom Fields**

- Responses are stored as custom fields in ChartHop
- Can be queried, filtered, and reported on across the platform
- Best for tracking leadership effectiveness over time

**Need help deciding?** Contact your Customer Success Manager to discuss which approach fits your organization's needs.

### Decision 2: Who Can See the Feedback?

For Upward Reviews, we recommend **Manager Only** access:

- Only the manager being reviewed sees the feedback from their direct reports
- The manager's skip-level (their manager) may also see responses
- Direct reports do NOT see each other's feedback or aggregated results
- This protects employee anonymity and encourages honest feedback

**Important:** Upward reviews are sensitive. Most organizations keep this feedback visible only to the manager receiving it and potentially their skip-level manager for coaching purposes.

### Decision 3: Anonymous or Identified Feedback?

**Identified (Recommended):** Skip-level managers can see who provided feedback, but the manager being reviewed typically cannot

- Allows for accountability in feedback quality
- Useful for skip-level managers coaching the manager
- The manager receiving feedback sees responses but not necessarily who wrote them

**Note:** ChartHop allows you to control who sees the identity separately from who sees the responses, giving you flexibility in how you handle anonymity.

## Step 1: Build Your Upward Review Form

### Navigate To

People Ops Tools → Forms → Create Form → Upward Review

### Add a Header (Optional but Recommended)

Provide guidance to employees giving feedback to their manager:

- Your rating scale definitions
- Links to leadership competencies or values
- Tips for providing constructive, actionable feedback
- Reminder about the confidentiality of their responses
- Encouragement to be honest and specific

### Add Your Questions

Choose question types that capture leadership effectiveness:

:::BlockQuote

:::

| Question Type | Best Used For                                       |
| ------------- | --------------------------------------------------- |
| Long Text     | Open-ended feedback, specific examples, suggestions |
| Short Text    | Brief comments                                      |
| Single Select | Leadership effectiveness ratings                    |
| Multi-Select  | Leadership behaviors demonstrated                   |
| Numeric Scale | Rating on leadership dimensions (1-5, 1-10)         |
| Yes/No        | Binary leadership questions                         |

**Common Upward Review Questions:**

- How effectively does your manager communicate expectations?
- Does your manager provide regular feedback and coaching?
- How well does your manager support your professional development?
- Does your manager foster an inclusive team environment?
- What should your manager start doing, stop doing, or continue doing?
- Overall effectiveness rating
- Leadership strengths and development areas

### If Using Custom Fields

For questions connected to custom fields:

- **Applies to:** Select "People"
- **Track changes over time:** Check this box (tracks leadership effectiveness over time)
- **Sensitivity:** Select "Manager Only" (Recommended)&#x20;
  - *Keeps feedback confidential to the manager and their leadership chain*

## Step 2: Configure Form Settings

### Status

- **Start with:** "Inactive" (draft mode while building)
- **When ready to launch:** "Active"
- **When finished:** "Archived"

### Distribution Settings

**1. Who is this form about?**

- Select: "Another Person"
- *Direct reports are reviewing their manager, not themselves*

**2. Who can complete this form?**

- Select: "Their Direct Reports"
- *Only people who report directly to the manager can complete the review*

**3. Should this form automatically appear on profiles?**

Choose based on your review process:

- **Task-Based (Recommended):** "Only if there is a pending task"&#x20;
  - *Gives you control over when upward reviews happen*
  - *You create tasks for direct reports to review their managers*
- **Self-Guided:** "Yes, on everyone's profile"&#x20;
  - *Direct reports can provide feedback to their manager anytime*
  - *Best for continuous feedback cultures*
- **Custom Group:** "Only specific people's profiles (Custom)"&#x20;
  - *For specific managers or levels only*
  - *Example: Only managers with 3+ direct reports*

### Access & Anonymity

**1. How should the identity of the respondent be recorded?**

- Select: "Identified"
- *The system records who provided feedback, but you control who can see that identity*

**2. Who can see the identity of the respondent?**

- Select: "Manager's in the person's reporting line"
- *Skip-level managers can see who provided feedback (for coaching purposes)*
- *The manager being reviewed typically cannot see individual identities*
- *This protects direct reports while maintaining some accountability*

**3. Who can view the form responses?**

- Select: "Managers of the person the form is about"
- *The manager being reviewed sees the feedback content*
- *Their skip-level manager can also see feedback to support coaching*

### Form Completion

**1. Allow saving drafts?**

- Select: "Yes" (Recommended)
- *Direct reports can save progress and return later*

**2. Populate form with previous responses?**

- Select: "No, start with a blank form every time"
- *Ensures fresh feedback each review cycle*

**3. How would you like your form to display?**

- Choose: Pop-up or Standalone page (based on preference)

### After Submission Settings

**Approval**

- Select: "No" (Recommended)
- *We don't recommend requiring approval for upward reviews*
- *Approval could compromise the confidentiality of feedback*

**Release**

- Select: "No" (Recommended)
- *We don't recommend using a release step for upward reviews*
- *Release is typically used for downward reviews, not upward feedback*
- *Feedback should be available to the manager once submitted*

**Editing**

- Select: "No" (Recommended)
- *Once submitted, upward feedback should remain unchanged*
- *This maintains integrity of the feedback process*
- *Prevents second-guessing or pressure to change responses*

**Export**

- Optional: Allow export as PDF based on preference
- *Managers may want to save their feedback for personal development*

### Notifications

**Email responses to:**

Choose based on your preference:

- **Option 1:** "The manager of the person the form is about" (the skip-level manager)&#x20;
  - *Useful if skip-level managers are coaching managers through feedback*
- **Option 2:** "None" (Recommended for many organizations)&#x20;
  - *Reduces notification fatigue*
  - *Managers can check their profile tab to see feedback*

**Note:** We typically don't notify the manager being reviewed for each individual submission (to maintain some anonymity during the collection period). Managers can view aggregated feedback on their profile once all responses are in.

## Step 3: Create the Profile Tab

Profile tabs display upward review feedback on manager profiles.

### Navigate to Profile Tabs

Navigate to **Admin → Profile Content**.

**To create a new tab:**

1. Click the + icon
2. Name the tab "Performance Reviews"
3. Name the column "Upward Review"

**To add to an existing tab:**

1. Click into the existing tab
2. Add a new column
3. Name the column header "Upward Review"

### Configure the Upward Review Tab

**1. Display on the profile of:**

Upward reviews only apply to people who have direct reports, so use a filter:

- Select: "Custom"
- **Filter:** "Directs >= 1" (Recommended)
- *This displays the tab only on profiles of people who manage at least one person*

**Why this matters:** Individual contributors don't need an Upward Review tab since they don't have direct reports providing feedback.

**2. Visible to:**

- Select: "The person's manager" (Recommended)
- *The manager being reviewed sees their own feedback*
- *Their skip-level manager can also see it (for coaching)*
- *Direct reports cannot see aggregated results or others' feedback*

**Alternative:** Some organizations choose "The person, and the person's managers" if they want managers to access their own feedback, but this is implicit in most access settings.

**3. Columns:**

- Under "Form Responses History," select your Upward Review form
- *This displays upward feedback on the manager's profile*

## Step 4: Activate Everything

### Activate the Form

1. Set Status to "Active"
2. Test by having a direct report complete a review

### Activate the Profile Tab

1. Scroll to top of Profile Tab settings
2. Toggle to "Active"

## How the Upward Review Process Works

Here's the typical flow once the form is active:

1. **Create review tasks** for direct reports (or enable self-guided access)
2. **Direct reports complete** upward reviews about their manager
3. **Feedback is submitted** and appears on the manager's profile
4. **Manager reviews** their aggregated feedback
5. **Skip-level manager** (optional) reviews feedback to coach the manager
6. **Manager creates** a development plan based on feedback
7. **Manager follows up** with team (optional) on actions they'll take

**Best Practice:** Consider holding a team discussion where managers share key themes from their upward feedback and commitments to improvement (without revealing individual responses).

## Testing Your Upward Review Setup

Before launching organization-wide:

1. **Complete a test review** - Have a direct report write sample feedback
2. **Check visibility** - Verify the manager sees feedback but not necessarily individual identities
3. **Check the profile tab** - Confirm feedback appears on the manager's profile
4. **Verify filtering** - Ensure the profile tab only appears for people with direct reports
5. **Test notifications** - Verify emails go to the right people (if enabled)
6. **Review anonymity settings** - Confirm identity protections work as intended
7. **Check skip-level access** - Verify skip-level managers can see feedback if intended

## Common Questions

**How many direct reports should participate for meaningful feedback?** Most organizations require at least 3-4 direct reports for upward reviews to protect anonymity. With fewer respondents, individual feedback can be too easily identified. Consider setting a minimum threshold for participation.

**Can managers see who wrote each piece of feedback?** By default with our recommended settings, no. The manager sees the feedback content but not who wrote it. Skip-level managers (the manager's manager) can see identities for coaching purposes, but this can be adjusted based on your needs.

**Should upward reviews be anonymous?** Most organizations use "Identified" in the system for accountability, but control visibility so the manager being reviewed doesn't see individual identities. This balances honest feedback with quality control.

**When should upward reviews happen?** Common timing:

- As part of annual or bi-annual performance review cycles
- After a manager has been in role for 90-180 days
- Regularly (quarterly/semi-annually) for leadership development
- After major team changes or reorganizations

**What if a manager only has 1-2 direct reports?** Consider whether upward reviews are appropriate for this situation, as feedback can be too easily identified. Alternatives:

- Skip the formal upward review for small teams
- Combine feedback from multiple review periods to aggregate more responses
- Focus on 1:1 conversations instead of formal reviews

**Should managers share upward review results with their team?** This is a cultural decision. Some organizations encourage managers to:

- Share high-level themes (not individual comments)
- Discuss actions they'll take based on feedback
- Thank the team for honest input

This transparency can build trust, but it's not required.

**Can a manager's skip-level boss see the upward feedback?** Yes, with our recommended settings. Skip-level managers can see upward feedback to help coach the manager through development areas. If you prefer to keep feedback private to the manager only, you can adjust the visibility settings.

**What if someone writes inappropriate feedback?** This is rare, but if it happens:

- HR should review the feedback
- Address the issue directly with the respondent
- Consider whether the feedback should be removed
- Reiterate guidelines for constructive feedback in future cycles

## Best Practices for Upward Reviews

**Communication is Key:**

- Explain the purpose and confidentiality measures to employees before launch
- Set expectations about how feedback will be used (development, not punishment)
- Provide guidelines for constructive feedback
- Reassure employees about anonymity protections

**Minimum Participation:**

- Consider requiring at least 3-4 respondents before sharing results
- Aggregate feedback to protect individual identities
- Skip upward reviews for managers with very small teams

**Follow-Through:**

- Managers should create action plans based on feedback
- Skip-level managers should coach managers through development
- Follow up in future cycles to show progress

**Frequency:**

- Start with annual or bi-annual cycles
- Consider more frequent feedback as your culture matures
- Balance thoroughness with survey fatigue

##


[title] Peer Reviews
[path] ChartHop by ChartHop/Performance Reviews/

# How to Configure a Peer Review in ChartHop

**What is a Peer Review?** A Peer Review allows employees to receive feedback from their colleagues. This provides managers with additional perspectives on an employee's performance and collaboration skills.

## Before You Start: Key Decisions

### Decision 1: Questions vs. Custom Fields

You have two options when building your form:

**Option A: Questions Only**

- Responses are stored only within the form
- Simpler to set up
- Query or report on responses across the platform using ID's rather than fields

**Option B: Questions Connected to Custom Fields**

- Responses are stored as custom fields in ChartHop
- Can be queried, filtered, and reported on across the platform
- Best for tracking performance data over time

**Need help deciding?** Contact your Customer Success Manager to discuss which approach fits your organization's needs.

### Decision 2: Who Can See Responses?

For Peer Reviews, we recommend **Manager Only** access:

- Only the manager of the person being reviewed can see responses
- Protects peer anonymity and encourages honest feedback
- The employee being reviewed does NOT see individual peer responses

**Note:** If you plan to release peer feedback to employees later, you can use **Manager-Shared** access, but this requires careful communication about when feedback becomes visible.

### Decision 3: Anonymous or Identified Peer Feedback?

**Identified:** Managers can see who provided each piece of feedback

- Best for building accountability
- Useful for follow-up conversations

**De-identified:** Managers see feedback but not who provided it

- Encourages more honest, direct feedback
- Protects peers from potential concerns about candid responses

## Important: Peer Reviews Require TWO Forms

Unlike other review types, Peer Reviews need two separate forms:

1. **Peer Selection Form** - Employees select which colleagues will review them
2. **Peer Review Form** - Selected peers complete feedback about the employee

You'll set up both forms in the steps below.

## Step 1: Build Your Peer Selection Form

This form allows employees to nominate peers who will provide feedback about them.

### Navigate To

People Ops Tools → Forms → Create Form → Peer Selection

### Add a Header (Optional but Recommended)

Provide guidance to employees, such as:

- How many peers to select
- Criteria for selecting peers (cross-functional colleagues, frequent collaborators, etc.)
- Deadline for submitting selections

### Add Your Question

**Question Type:** Use "Person Value" field

- This allows employees to select individuals from your organization
- You can set a minimum and maximum number of peers to select

**Example Question:** "Select 3-5 colleagues who can provide meaningful feedback on your work this year."

**You must convert the "Peer Reviewer" question into a field**

- **Applies to:** Select "People"
- **Track changes over time:** Check this box
- **Sensitivity:** Select "Manager-Shared" (so managers can see who was selected)

## Step 2: Configure Peer Selection Form Settings

### Status

- **Start with:** "Inactive" (draft mode while building)
- **When ready to launch:** "Active"

### Distribution Settings

**1. Who is this form about?**

- Select: "The person completing the form"
- *Employees are selecting peers to review themselves*

**2. Should this form automatically appear on profiles?**

Choose based on your review process:

- **Task-Based (Recommended):** "Only if there is a pending task"
- **Self-Guided:** "Yes, on everyone's profile"
- **Custom Group:** "Only specific people's profiles (Custom)"

### Access & Anonymity

**1. How should the identity of the respondent be recorded?**

- Select: "Identified"

**2. Who can see the identity of the respondent?**

- Select: "Anyone who can view the form response"

**3. Who can view the form responses?**

- Select: "Default"

### Form Completion

**1. Allow saving drafts?**

- Select: "Yes" (Recommended)

**2. Populate form with previous responses?**

- Select: "No, start with a blank form every time"

**3. How would you like your form to display?**

- Choose: Pop-up or Standalone page (based on preference)

### After Submission Settings

**Approval**

- Select: "Yes" (Recommended)
- *Allows managers to review and approve peer selections before feedback requests go out*

**Editing**

- Select: "Yes" (Recommended)
- *Employees can adjust their peer selections if needed*

**Export**

- Optional: Allow export as PDF based on preference

### Notifications

**Email responses to:**

- Recommended: "The manager of the person the form is about" or "None"
- *Typically, you'll notify managers through the approval workflow rather than automatic emails*

## Step 3: Build Your Peer Review Form

This is the actual feedback form that selected peers will complete.

### Navigate To

People Ops Tools → Forms → Create Form → Peer Review

### Add a Header (Optional but Recommended)

Guide peer reviewers with context like:

- Your rating scale definitions
- Company values or competencies being evaluated
- Tips for providing constructive feedback
- Reminder about confidentiality

### Add Your Questions

Choose question types that fit the feedback you want:

:::BlockQuote

:::

| Question Type | Best Used For                              |
| ------------- | ------------------------------------------ |
| Long Text     | Open-ended feedback, examples, suggestions |
| Short Text    | Brief comments                             |
| Single Select | One choice (e.g., rating levels)           |
| Multi-Select  | Multiple skills or behaviors               |
| Numeric Scale | Performance ratings (1-5, 1-10, etc.)      |
| Yes/No        | Binary questions                           |

### If Using Custom Fields

For questions connected to custom fields:

- **Applies to:** Select "People"
- **Track changes over time:** Check this box
- **Sensitivity:** Choose based on your release plan:&#x20;
  - **Manager Only:** If feedback stays with managers only (Recommended)
  - **Manager-Shared:** If you'll release feedback to employees later

## Step 4: Configure Peer Review Form Settings

### Status

- **Start with:** "Inactive" (draft mode)
- **When ready:** "Active"

### Distribution Settings

**1. Who is this form about?**

- Select: "Another person"
- *Peers are reviewing someone else, not themselves*

**2. Who can complete this form?**

- Select: "Selected peers"
- **Input the field name** from your Peer Selection Form where employees chose their reviewers
- *Example: If your field is called "Peer Reviewers," enter that exact name here*

**3. Should this form automatically appear on profiles?**

- Choose based on your review process:&#x20;
  - **Task-Based (Recommended):** "Only if there is a pending task"
  - **Self-Guided:** "Yes, on everyone's profile"

### Access & Anonymity

**1. How should the identity of the respondent be recorded?**

Choose your anonymity approach:

- **"Identified"** - Managers can see who provided each response
- **"De-identified"** - Managers see responses but not who wrote them

**2. Who can see the identity of the respondent?**

- Select: "Manager's in the person's reporting line"
- *This ensures only relevant managers see peer identities (if identified)*

**3. Who can view the form responses?**

- Select: "Managers of the person the form is about"
- *Keeps peer feedback visible only to the reviewee's manager*

### Form Completion

**1. Allow saving drafts?**

- Select: "Yes" (Recommended)

**2. Populate form with previous responses?**

- Select: "No, start with a blank form every time"

**3. How would you like your form to display?**

- Choose: Pop-up or Standalone page

### After Submission Settings

**Approval**

- Select: "No" (Recommended)
- *Peer reviews typically don't need approval - they go directly to managers*

**Release**

- We do NOT recommend using a release step for Peer Reviews
- *Release is typically used for manager reviews, not peer feedback*

**Editing**

- Select: "No" (Recommended)
- *Once submitted, peer feedback should remain unchanged*

**Export**

- Optional: Allow export as PDF based on preference

### Notifications

**Email responses to:**

- Recommended: "The manager of the person the form is about" or "None"
- *Decide if managers should be notified each time a peer submits feedback*

## Step 5: Create the Profile Tab

Profile tabs display peer review responses on employee profiles.

### Navigate to Profile Tabs

Navigate to **Admin → Profile Content**.

**To create a new tab:**

1. Click the + icon
2. Name the tab "Performance Reviews"
3. Name the column "Peer Review"

**To add to an existing tab:**

1. Click into the existing tab
2. Add a new column
3. Name the column header "Peer Review"

### Configure the Peer Review Tab

**1. Display on the profile of:**

- If all employees receive peer reviews: Select "Everyone in the org"
- If only specific employees: Use "Custom" and create a filter

**2. Visible to:**

- Select: "The person's manager" (Recommended)
- *Keeps peer feedback confidential to managers only*

**3. Columns:**

- Under "Form Responses History," select your Peer Review form
- *This displays peer feedback responses on the profile*

## Step 6: Activate Everything

### Activate the Peer Selection Form

1. Set Status to "Active"
2. Test by selecting peers yourself

### Activate the Peer Review Form

1. Set Status to "Active"
2. Test by completing a peer review

### Activate the Profile Tab

1. Scroll to top of Profile Tab settings
2. Toggle to "Active"

## How the Peer Review Process Works

Here's the typical flow once both forms are active:

1. **Employees select their peers** using the Peer Selection Form
2. **Managers approve** the peer selections (if approval is enabled)
3. **ChartHop creates tasks** for the selected peers
4. **Peers complete** the Peer Review Form about their colleague
5. **Managers view** peer feedback on the employee's profile
6. **Managers incorporate** peer feedback into performance discussions

## Testing Your Peer Review Setup

Before launching organization-wide:

1. **Complete the peer selection process** - Have a test employee select peers
2. **Approve the selections** - Test the manager approval workflow
3. **Complete a peer review** - Verify the selected peer receives and can complete the form
4. **Check the profile tab** - Confirm feedback appears correctly on the profile
5. **Test anonymity settings** - Verify identified vs. de-identified works as intended
6. **Review notifications** - Ensure emails go to the right people

## Common Questions

**How many peers should employees select?** This is up to you! Common ranges are 3-5 peers. You can set minimum and maximum limits in the Person Value field.

**Can I select peers on behalf of employees?** Yes, managers can complete the Peer Selection Form on behalf of their direct reports if needed.

**What if someone selects a peer who doesn't complete the review?** You can send reminders through the task system or manually follow up. Incomplete peer reviews won't block the overall review process.

**Should peer reviews be anonymous?** Most organizations use "Identified" for accountability, but "De-identified" can encourage more candid feedback. Discuss with your CSM about what works best for your culture.

**Can employees see their own peer review feedback?** Not by default with our recommended settings. Managers typically summarize peer feedback during performance conversations. If you want employees to see raw peer feedback, you'll need to adjust visibility settings or use a release step.

**What's the difference between Manager Only and Manager-Shared sensitivity?**

- **Manager Only:** Only managers see the feedback (recommended for most peer reviews)
- **Manager-Shared:** Both manager and employee can see feedback (use if you plan to share peer feedback with employees)

**Do I need to use the Release feature?** No, we don't recommend using Release for peer reviews. It's typically used for manager-written reviews that need to be shared with employees at a specific time.

[title] Performance Reviews
[path] ChartHop by ChartHop/

Performance reviews in ChartHop can be as simple or as sophisticated as you need them to be. We've seen everything from lightweight manager check-ins with three questions to elaborate 360-degree cycles with calibration workflows and competency matrices. The platform flexes to match your process — the key is designing intentionally for what actually works for your organization.

## Understanding What Performance Reviews Are For

Performance reviews in ChartHop are designed for feedback that's *about specific people* — whether that's self-reviews, manager reviews of direct reports, peer feedback, or upward reviews. The key principle: if you're asking someone to provide feedback about a specific reviewer or another identified person, that belongs in Performance Reviews.

**What belongs in Performance Reviews:**

- Manager reviews of direct reports
- Self-assessments
- Peer feedback (360-degree reviews)
- Upward feedback (reports reviewing their managers)

**What doesn't belong here:** If you're sending a form that's about no one in particular or is a deidentified survey (like pulse surveys, engagement feedback, or anonymous team health checks), use the Engagement module instead. Performance Reviews is built for identified, person-specific feedback that ties to your org chart.

## Setup Principles That Work Across Any Cycle

**Start with clean org chart data.** Whether you're running a simple or complex cycle, ChartHop pulls review relationships from your reporting structure. Recent transfers, dotted-line reports, managers covering multiple teams — handle these scenarios before launch, not during.

**Be realistic about timelines.** Build in buffer time. If you want reviews completed by a specific date, set your deadline a few days earlier. If you're running multi-stage reviews (self + manager + peer), stagger those deadlines so each phase completes before the next begins.

**Design your visibility intentionally.** When can employees see their reviews? What can they see? This varies wildly by company — some share everything immediately, others wait until after calibration. Either approach works in ChartHop, just decide upfront and configure accordingly.

**Think through your data flow.** If performance ratings connect to compensation, promotions, or succession planning, map those connections early. The more integrated your processes, the more valuable your review data becomes.

## What Makes Cycles Run Smoothly

**Pilot before full launch.** Whether you're running something simple or complex, test with a small group first. They'll catch configuration issues and process questions you didn't anticipate.

**Automate communications.** Set up reminders at key intervals. Create clear documentation for managers. The more you can automate and systematize, the less ad-hoc support you'll need to provide.

**Plan for edge cases.** New hires, employees on leave, recent transfers, open roles — decide how to handle these situations before they become questions.

**Keep forms focused.** Even in complex cycles, less is often more. Every question should serve a clear purpose. More questions don't automatically mean better data.

## Common Challenges (Regardless of Complexity)

**The surprise launch:** Always coordinate your ChartHop launch with your internal communications.&#x20;

**Visibility mishaps:** Test your settings thoroughly. Make sure people see what they're supposed to see, when they're supposed to see it.

**Mid-cycle changes:** Reporting relationships shift, people transfer, managers go on leave. Decide upfront how you'll handle these situations — freezing relationships at cycle launch versus allowing real-time updates.

Performance reviews in ChartHop work for everyone from 50-person startups running their first structured review to 15,000-person enterprises with sophisticated multi-rater cycles. The platform adapts to your process. Your job is designing something that fits your culture, your capacity, and your goals — then letting ChartHop handle the execution.

[title] Running a Survey
[path] ChartHop by ChartHop/Engagement Surveys/

## Step 1: Before you build — configure de-identified reporting&#x20;

:::BlockQuote
(Step 1 Only Applies to De-Identified Surveys)
:::

If you're running a de-identified survey, do this before you create your form. The demographic fields available as reporting dimensions need to be configured in org settings first.

1. Go to **Admin > Configuration > Modules**.
2. Under the **Engagement** section, find **De-identified forms** and add the fields you want to slice results by under **Recorded fields** — for example, Department, Location, Employment Status, Tenure Range, or Gender. Supported field types are single-select, multi-select, and group fields.
3. Set your **Minimum group size**. The default is **5**. Groups below this threshold are rolled up into an "Other" bucket so no individual can be identified from a small group. The hard floor is **3** and this is configurable per org.

One thing worth knowing: demographic data is captured at the moment of submission, not at the start of the survey cycle. If someone's department changes mid-cycle, their response is tied to their department at the time they submitted.

## Step 2: Build your form

1. Navigate to **People Ops Tools** and open the **Forms** section.
2. Click **New Form**. Give your form an **internal name** (how it appears to admins and in CQL expressions) and a **display name** (what participants see). Keep the internal name consistent — it's what your dashboard charts will reference, so changing it later will break any charts already built against it.
3. Add your questions in the **Form Builder** tab. Use question types — short text, long text, single select, multiple choice, numeric scale, yes/no.
4. Open the **Settings** tab to configure the following:

### Distribution

**Who is this form about?** Select **No one specifically**. This is the correct setting for engagement surveys — the UI describes it as "For surveys or polls where the response isn't stored on a person's profile." This setting also determines how conditional logic works: because the form isn't about a particular person, you'll use me.fieldcode syntax in question filters rather than unprefixed field references (more on that below).

**Who can complete this form?** Choose **Anyone in the org** for a standard company-wide engagement survey, or **Custom** if you want to restrict to a specific group.

### Access and Anonymity

**How should the identity of the respondent be recorded and displayed?** Choose one of three options:

- **Identified** — Linked to a person and their demographic information. Use this only when individual attribution is needed and expected by respondents.
- **De-Identified** — Hides identity but allows demographic information and limits reporting. This is the right choice for most engagement surveys.
- **Anonymous** — Not linked to any personally identifiable information. Use when you want zero attribution and no demographic reporting.

### Who can view the form responses?

This controls who can access the Form Responses page for this form. Leave this set to **Default** for engagement surveys.

Default means form responses are visible to the user who submitted the form, admins with formResponse\:read permission, and anyone the survey has been explicitly shared with. For engagement surveys that use questions rather than fields, this setting is what determines access — so Default keeps results appropriately restricted to admins and whoever the survey is shared with, rather than the broader org.

The other options (The person the form is about, Managers of the person the form is about, etc.) are intended for performance review forms where responses need to be released to the subject or their manager. They aren't applicable to engagement surveys set to "No one specifically."

1. Add any conditional logic (see below if needed).

### Adding conditional logic

You can show or hide individual questions and text blocks based on conditions. Every question block supports a CQL filter — if the filter evaluates to true, the block is shown; otherwise it's hidden.

Engagement surveys work differently from other form types like performance reviews, because they aren't "about" a particular person. This changes the syntax for conditions based on the respondent's own attributes.

To write a condition based on who is filling out the form, use:

:::BlockQuote
me.\<fieldcode>\:value
:::

For example:

- me.department\:Engineering — only show to respondents in Engineering
- me.employment\:FULL — only show to full-time employees
- me.is\:manager — only show to managers

If you've used conditional logic in performance reviews before, note that unprefixed references like department\:Engineering won't work in engagement surveys. The me. prefix is required here. This syntax has been validated by the ChartHop product team.

You can also show or hide a question based on how someone answered an earlier question in the same form. For field-backed questions, use dot notation:

:::BlockQuote
answerValue.fieldName:\["value"]
:::

For non-field yes/no questions (not backed by a ChartHop custom field), use bracket notation with single quotes around the question ID:

:::BlockQuote
answerValue\['\<questionId>']="true"
:::

The single quotes inside the brackets are required — without them, the expression won't evaluate correctly.

## Step 3: Launch your survey

Once your form is ready, create a **Survey** (assessment) to manage the cycle.

1. Create a new Survey and attach your form to it.
2. Configure your audience — who should receive a task to complete the survey.
3. Set a due date. If you add a hard deadline, be aware that tasks are automatically removed when it passes. The form may still accept responses via direct link after that point, but those responses won't be counted in the Survey's participation tracking. If you need to extend a survey, re-send on a new Survey without a hard deadline.
4. Send tasks to participants. Every participant receives an initial notification when tasks are sent.

## Step 4: Track participation and send reminders

To monitor who has completed the survey and send reminders to those who haven't, go to the **Tasks** tab within the Survey. From there you can filter tasks by status to see who still has an open or pending task, and send a reminder to just that group. People who've already submitted won't be included.

One important nuance for anonymous surveys: the Tasks tab shows who was **asked** to complete the form — not who submitted a response. Tasks are assigned to people before they respond, so names are visible in the task list regardless of the anonymity setting. This doesn't compromise response anonymity, but it does mean an admin can see that a specific person has or hasn't completed their task. If your org needs stricter participation privacy, keep this in mind when deciding who has access to the Survey.

For full detail on tracking participation, see Monitoring participation in a review.

## Step 5: Analyze your results

### The Form Responses page

Open the form and navigate to **Responses**. You'll see three views.

**Summary** shows auto-generated charts for each question, a participation count, and a Group by dropdown that lets you segment results by any of your configured demographic fields. The built-in **Manager or IC** smart bucket is also available as a grouping option. For open-text questions, if AI Summaries are enabled for your org, you'll also see a synthesized written overview of what respondents said.

**Sheet** shows a list of all responses. For de-identified surveys, only the configured demographic data appears alongside answers — no names or identifying information.

**Individual** lets you drill into a single response.

When a manager views engagement results filtered to their team (using under\:me), the same minimum group size threshold applies. A group that meets the threshold org-wide may still show as "Other" within a manager's slice if their team is small.

Results can be exported from the Form Responses page. For de-identified surveys, the export respects the de-identification rules — the "Other" rollup applies and no individual identities are included.

### AI Summaries

When AI Summaries are enabled for your org, ChartHop generates written summaries of responses on the Form Responses Summary page — for every question type, including long-text and short-text. For open-ended questions, this turns a wall of individual responses into a concise overview of themes and sentiment across the group, without reading every response individually.

AI Summaries can also be added to dashboards as text blocks. When placed on a manager dashboard, these blocks re-render based on who's viewing, so each manager sees a summary scoped to their own team's responses. This is the foundation of the Action Plan Insights Dashboard pattern: managers land on a dashboard with AI-generated summaries per question, already filtered to their org, that they can use as a starting point for taking action.

If you don't see summaries appearing on your Summary page, reach out to your ChartHop team to confirm the feature is enabled for your org.

[title] Engagement Survey Question Bank
[path] ChartHop by ChartHop/Engagement Surveys/

# Engagement Survey Question Bank

## Overall Sentiment & Experience

**Open-Ended Questions (Short/Long Text)**

- What motivated you to join this organization?
- What matters most to you in your work?
- How would you describe working here to someone considering joining?
- What has exceeded your expectations since you joined?
- Describe our culture in three words.
- What is this company doing exceptionally well?
- What is one area where we could improve?

**Rating Scale Questions (Select a Value)**

- I feel connected to this organization.
- I have the resources and tools I need to succeed in my role.
- I am proud to work here.
- My work gives me a sense of personal accomplishment.
- This organization inspires me to go above and beyond.
- I am confident this survey will lead to meaningful action.
- I can achieve my career goals at this organization.
- I would recommend this organization as a great place to work. *(eNPS)*
- I have received adequate training to perform my job effectively.
- I rarely consider looking for opportunities elsewhere.
- Our work processes enable me to be as productive as possible.

## Management & Leadership

**Rating Scale Questions (Select a Value)**

- I trust my manager.
- My manager fosters collaboration within our team.
- My manager keeps me informed about what I need to know.
- I am encouraged to suggest improvements and new approaches.
- I am empowered to make decisions that best serve our customers.
- I have confidence in the CEO's leadership.
- People are held accountable for their performance at this organization.
- Leadership clearly communicates our organization's direction and strategy.
- Leadership demonstrates that employees are valued and essential to our success.
- I receive constructive feedback that helps me improve.
- I trust the leadership team to make sound decisions for our organization.
- I receive meaningful recognition for good work.

## Strategic Alignment & Future Outlook

**Rating Scale Questions (Select a Value)**

- I am confident in this organization's future.
- I understand how my work contributes to our strategic objectives.
- Our daily decisions reflect that customer satisfaction is a priority.

## Team Dynamics & Collaboration

**Rating Scale Questions (Select a Value)**

- I can collaborate effectively with my team members.
- Communication is open and honest, and I feel comfortable sharing my thoughts.
- I feel safe voicing my ideas and opinions, even when they differ from others.
- I am treated with respect at work.
- Communication across the organization is transparent and honest.
- We treat mistakes as learning opportunities.
- Teams collaborate effectively across the organization.
- We share knowledge effectively across different parts of the business.

**Survey Design Tips**

- Mix question types to balance quantitative data with qualitative insights
- Keep rating scale questions focused on a single concept
- Use consistent language throughout the survey
- Consider survey length and respondent fatigue when selecting questions

[title] Engagement Dashboards
[path] ChartHop by ChartHop/Engagement Surveys/

# Building a reporting dashboard

For persistent charts and deeper analysis, build a dashboard using ChartHop's dashboard builder. The core function for pulling engagement survey data is findResponsesByAssessment, which scopes results to a specific survey cycle:

:::BlockQuote
findResponsesByAssessment('Survey Name', 'Form Name').mean\{answerValue\['\<questionId>']}
:::

You can group by demographic:

:::BlockQuote
findResponsesByAssessment('Survey Name', 'Form Name').groupBy\{submitPerson.department}.mean\{answerValue\['\<questionId>']}
:::

Charts using answerValue need to be created and saved through the ChartHop UI using **Advanced Query Mode** — they can't be saved via the API due to a current CQL validation limitation. See the Ask ChartHop section below for how to use AI to scaffold the dashboard for you.

### eNPS (Employee Net Promoter Score)

eNPS is not a separate question type. It's a standard numeric scale question with 11 options (0–10). ChartHop automatically applies eNPS scoring logic and displays an NPS indicator on any numeric-scale chart with 11 options.

Scoring: Promoters = 9–10, Passives = 7–8, Detractors = 0–6. Formula: (Promoters − Detractors) / Total respondents.

Add a numeric scale question to your form with 11 options (0–10). A common prompt: *"On a scale of 0–10, how likely are you to recommend \[Company] as a place to work?"*

ChartHop's CQL includes a built-in .nps() method for calculating eNPS in dashboard charts:

:::BlockQuote
findAnswers('Your eNPS Question Name').nps\{it.value}
:::

Scoped to a specific cycle and grouped by demographic:

:::BlockQuote
findAnswersByFormAssessment('\<formId>', '\<surveyName>', '\<formName>').groupBy\{submitPerson.team}.nps\{value}
:::

You can also run NPS scoring on any individual question scored 0–10, not just your eNPS question. Use findAnswers with the specific question name, and you get a separate NPS score per question:

:::BlockQuote
findAnswers('My Question Name').nps\{it.value}
:::

### Using Ask ChartHop to build your dashboard

Once your survey has launched — or even before responses come in — you can use Ask ChartHop to scaffold your reporting dashboard. Describe what you want, and it will build the chart structure with the CQL expressions you need.

A good starting prompt:

:::BlockQuote
"Build me an engagement survey dashboard for our \[Survey Name] survey. Include overall participation rate, average score per question, scores broken down by department, and an eNPS chart."
:::

For more detail:

:::BlockQuote
"Create an engagement dashboard for \[Survey Name]. I want a participation chart using findFormTasksByAssessment, average scores for each question grouped by department, an eNPS chart using the .nps() method, and a heatmap showing scores across all questions by manager."
:::

Ask ChartHop will create placeholder text blocks containing complete, correct CQL expressions. To activate each chart, open the placeholder, change the chart type to the one specified, enable **Advanced Query Mode**, and paste in the expression. The hard work is done — you're just switching the chart type and saving.

### Using Ask ChartHop to explore and compare results

Ask ChartHop can also answer natural language questions about your survey results without building anything. Once responses are in, try:

- "Summarize the engagement survey results for the Engineering department."
- "Which department had the lowest average score on the Q1 engagement survey?"
- "What were the most common themes in open-text responses from the April engagement survey?"
- "How did eNPS change between the December 2025 and April 2026 engagement surveys?"
- "Which questions had the biggest score differences between managers and individual contributors?"

Be specific about the survey name, time period, and what you want to know. Ask ChartHop respects the same access rules as the rest of ChartHop — for de-identified surveys, it won't surface individual identity even if asked.

Ask ChartHop is best for on-the-fly exploration and quick reads on results. For persistent charts and saved dashboards, use the dashboard builder.

## Comparing results across survey cycles

How you compare cycles depends on how you set up your surveys.

**The recommended approach: reuse the same form, create a new Survey each cycle.** Since findResponsesByAssessment is scoped by assessment name, each cycle's data is already separated. To compare, duplicate the chart and update the assessment name to the prior cycle. Side-by-side charts give you a clean before/after view:

:::BlockQuote
// This cyclefindResponsesByAssessment('Q1 2026 Engagement Survey', 'Engagement Survey').mean\{answerValue\['\<questionId>']}

// Last cycle — on a second chart
findResponsesByAssessment('Q4 2025 Engagement Survey', 'Engagement Survey').mean\{answerValue\['\<questionId>']}
:::

**If you duplicate the form each cycle** (for example, to update questions), be aware that every dashboard chart references the form by name. If the form name changes, every chart that referenced the old name will break and return no data. Before you launch a new cycle with a duplicated form, update the form name reference in every chart on your engagement dashboard.

If charts break and you can't identify why, switching to IDs instead of names is the most reliable fix:

:::BlockQuote
findResponsesByAssessment('\<assessmentId>', '\<formId>').mean\{answerValue\['\<questionId>']}
:::

IDs are in the URL when editing a form or survey in ChartHop. They don't change when names do, so they're the safest reference for long-lived dashboards.

**The key rule: form names in charts must exactly match the form name in ChartHop.** Any rename — even adding a year — breaks every chart that references it until updated.

[title] FAQ
[path] ChartHop by ChartHop/Engagement Surveys/

## Common questions

**Can I add a new demographic field after responses have already come in?** Yes, but it requires a form-response migration run by ChartHop. Contact your ChartHop Support team to request this. Any migration requires written approval from your organization's MPOC and should be handled carefully, since it modifies existing response data.

**Why did survey tasks disappear before the deadline?** A hard deadline on a Survey removes tasks automatically when it passes. The form may still accept responses via direct link, but those responses won't count toward the Survey's participation tracking. To extend a survey, re-send on a new Survey.

**How is demographic data captured for de-identified surveys?** At the moment of submission. If a respondent's department, location, or other attribute changes mid-cycle, their response is tied to the value in ChartHop at the time they submitted.

**Can respondents save a draft and come back to it?** Drafts are not supported on anonymous forms. Participants complete the form in one session.

**Can I change a survey from de-identified to anonymous after responses are collected?** Yes, but it's irreversible. Once responses are migrated to anonymous, the demographic data cannot be recovered. Contact your ChartHop team before making this change.

**Can I change a survey from anonymous to de-identified or identified?** No. Anonymous responses contain no identity data to restore.

## FAQ

**What's the difference between anonymous and de-identified?** De-identified responses are stored with identity internally but that information is never displayed. Admins see aggregated results by demographic group. Anonymous responses store no identity at all. Neither can be attributed to an individual in the product, but de-identified supports richer demographic reporting.

**What's the difference between a question and a field in a form?** Fields are ChartHop data points tied to a person's record. Questions are standalone form inputs that don't write to anyone's profile. For engagement surveys, always use questions. Responses are accessed via answerValue\['questionId'] in dashboards.

**Who can create and manage engagement surveys?** Survey creation and management is available to users with admin-level roles in ChartHop — typically Owner, People Ops Admin, or Org Editor. The exact permissions depend on your org's access policy configuration.

**What plan includes Engagement surveys?** The Engagement module is a paid package. It's also included in legacy ChartHop Scale and ChartHop Premium plans. Check with your ChartHop contact if you're unsure what's included in your plan.

**Can I run a recurring or pulse survey?** Yes. Attach your form to a new Survey each cycle and use ChartHop Actions to automate sending on a schedule. Many teams run eNPS on a quarterly cadence.

**Does ChartHop automatically notify participants?** Yes. When you send tasks through a Survey, every participant receives an initial notification. To send follow-up reminders to only those who haven't completed the survey, go to the **Tasks** tab within the Survey, filter by open or pending status, and send a reminder to that group. Completed respondents won't be included.

For more detail, see Monitoring participation in a review.

**Can managers see their team's engagement results?** Yes, through a dashboard that's been shared with them. The typical setup is for an admin to build a manager-facing engagement dashboard, then share it out. Charts on that dashboard are built with under\:me as a saved filter, so when a manager opens it they automatically see results scoped to their own team. Managers don't have a separate built-in results view — the dashboard is how they access their data.

The minimum group size threshold still applies, so a manager with a very small team may see limited breakdowns.

**What's the minimum number of responses before results appear?** The default minimum group size is **5** per demographic group. Groups below this threshold roll into "Other." Your org's minimum can be configured as low as **3** in **Admin > Configuration > Modules** under the Engagement section.

**What does the "Other" bucket mean in reporting?** "Other" represents demographic groups that fell below the minimum group size threshold. To prevent the Other bucket itself from being too small, ChartHop automatically pulls in the smallest qualifying group and relabels it — for example, "Brazil + Other."

[title] FAQ
[path] ChartHop by ChartHop/Performance Reviews/

**Can I change a deadline date after it is set?&#x20;**&#x4E;o. Once a deadline date is set, it cannot be changed. However, if a *soft deadline&#x20;*&#x77;as set, users can still submit their form after the deadline date.

**Can I customize the approval chain?** No, not at this time. Only the person's manager or manager's manager can approve.&#x20;

**When can I generate a link to the form?** The option to populate a link in a form only appears when the form is about the person themselves (i.e., self-reporting). If it's something like a downward or manager review, you would need to generate the task for the specific person completing it or go to the employee's profile.

**How do conditional questions work?&#x20;**&#x43;onditional questions allow you to show or hide questions dynamically. You can create conditions based on:

- **Previous answers** – Show questions based on how someone responded to a different question in the form
- **Profile data** – Show questions based on information about the person the form is about (e.g., their department, role, or hire date), not the person filling out the form


[title] ChartHop Academy Schedule
[path] ChartHop Academy/

## Spring 2026 Schedule 🌸 🐰 🗓️

**Live Training Sessions** drop every other Tuesday at 1:00pm ET (10:00am PT). Sessions run 45–60 minutes.

| Date              | Session                                              |
| ----------------- | ---------------------------------------------------- |
| Tuesday, March 31 | Admin Training 1: Basic Navigation & Helpful Tools   |
| Tuesday, April 14 | Admin Training 2: Data Model & Custom Fields         |
| Tuesday, April 28 | Performance Reviews: Setup to Launch                 |
| Tuesday, May 12   | Engagement Surveys: Setup and Measuring What Matters |
| Tuesday, May 26   | Headcount Planning: Build Smarter Hiring Plans       |
| Tuesday, June 9   | What's New, ChartHop? (feat. our Product team)       |

**Office Hours** run every Thursday at 11:30am ET (8:30am PT). Open Q\&A with a ChartHop Customer Success Manager, and a member of our Support team. Breakout rooms available for more focused help.

::Iframely{originalUrl="https://calendar.google.com/calendar/embed?src=c_98a33bb07014712adf737cf49e1348eb22ae5ae835faacd5dcb881f94dc92811%40group.calendar.google.com&ctz=America%2FNew_York" embedUrl="https://calendar.google.com/calendar/embed?src=c_98a33bb07014712adf737cf49e1348eb22ae5ae835faacd5dcb881f94dc92811@group.calendar.google.com" title="ChartHop Academy" html="<div style=&#x22;left: 0; width: 100%; height: 0; position: relative; padding-bottom: 75%;&#x22;><iframe src=&#x22;https://calendar.google.com/calendar/embed?src=c_98a33bb07014712adf737cf49e1348eb22ae5ae835faacd5dcb881f94dc92811@group.calendar.google.com&#x22; style=&#x22;top: 0; left: 0; width: 100%; height: 100%; position: absolute; border: 0;&#x22; allowfullscreen></iframe></div>"}


[title] ChartHop Academy
[path] /

**Your home for learning ChartHop, on a regular cadence, with our team in your corner.**

ChartHop Academy is a Customer Success-led training program built for admins like you. Live sessions, weekly office hours, and on-demand recordings, all designed to help you get confident in the platform and stay that way.

## What's included

**📅 Bi-weekly Training Sessions** Expert-led sessions covering the features and workflows you use most. 45–60 minutes, every other Tuesday at 1:00pm ET.

**💬 Weekly Office Hours** Open Q\&A with a ChartHop Customer Success Manager and a member of our Support team, every Thursday at 10:00am ET. Bring questions, get answers.

**🎥 On-Demand Recordings** Can't make it live? Every session is recorded and available in the Academy Hub whenever you're ready.

## Get started

👉 View the full schedule and session recordings in the ChartHop Academy Hub

📧 Questions? Reach us at successteam\@charthop.com

[title] ChartHop Academy Hub
[path] ChartHop Academy/

Welcome to ChartHop Academy, your go-to resource for becoming the ChartHop expert on your team.

Academy is a Customer Success-led training program built for ChartHop admins. You'll find live training sessions, weekly office hours, and on-demand recordings all in one place. Whether you're just getting started or looking to go deeper, there's always something here for you.

**Office Hours** run every Thursday at 11:30am ET (8:30am PT). Open Q\&A with a Customer Success Manager, and a member of our Support team. Breakout rooms available for more focused help.

## Join Live 🎙️&#x20;

All sessions are hosted on Zoom.

👉[ Link to register](https://charthop.zoom.us/meeting/register/e8wHdu9eSyK7bujxr_85Dg) - Office Hours



## ChartHop Academy Session Recordings 🎥

**

| Session               | Recording                                                                                               | Resources                                                                 |
| --------------------- | ------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------- |
| Admin Training 1      | [Recording Link](https://drive.google.com/file/d/1_yQlm1vFL4XmL145_blo4kzqbJZUF0dl/view?usp=sharing)    | [ChartHop for Admins](https://docs.charthop.com/implementing-charthop)    |
| Admin Training 2      | [Recording Link](https://drive.google.com/file/d/1KArE8Wn2g-6KFRgeVbZT0Lnp8dQTGEO3/view?usp=drive_link) | [Managing Data](https://docs.charthop.com/managing-data)                  |
| Performance Reviews   | [Recording Link](https://drive.google.com/file/d/1N5UsbOw9h83UyY5aSJMMekhbDXREc-c9/view?usp=sharing)    | [Performance Reviews](https://docs.charthop.com/wj49-performance-reviews) |
| Engagement Surveys    | [Recording Link](https://drive.google.com/file/d/1WZc5YIAz4CDzz1KtxlebP21AVWdzXSrS/view?usp=drive_link) | [Engagement Surveys](https://docs.charthop.com/Mfegor8u38boJ14VfCdtz)     |
| Headcount Planning    | [Recording Link](https://drive.google.com/file/d/1NpXOVRkn60Q52cah3VtvE8Q1Caarh6uL/view?usp=sharing)    | [Headcount Planning](https://docs.charthop.com/headcount-planning)        |
| What's New, ChartHop? | [Recording Link](https://drive.google.com/file/d/1uyD_tZ7_U0dg69MbVhDU1MZYi7rbx6Ij/view?usp=sharing)    | [Release Notes](https://docs.charthop.com/release-notes)                  |

## Questions?

Reach out to your Success Team anytime.

📧 successteam\@charthop.com
