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

# Trainings

> Upload and manage employee training records for ESRS S1 social reporting

## What is training data?

Training data records the **professional development activities** completed by your employees. This includes any structured learning activity such as safety courses, technical certifications, language classes, leadership programs, or compliance training.

Under **ESRS S1**, organizations must disclose the average number of training hours per employee, broken down by gender and job category. This data helps demonstrate your investment in employee development and upskilling.

## Why is it needed?

Training metrics are a key indicator of how organizations invest in their workforce. Sustainability reports typically require:

* **Total training hours** across the organization
* **Average training hours per employee** (total hours / headcount)
* **Training hours by gender** to show equitable access to development
* **Training by type** to categorize investment areas (safety, technical, etc.)

## Data structure

Training records are linked to employees via the **External Employee ID**. Each training record is independent -- an employee can have multiple trainings.

```
EMPLOYEE (EMP001)
  |
  +-- TRAINING: Safety course (8h, Jan 15-16, 2024)
  +-- TRAINING: Technical certification (40h, Mar 1-31, 2024)
  +-- TRAINING: Leadership workshop (16h, Sep 10-12, 2024)
```

<Note>
  Employees must already exist in the system before you can upload their training records. Upload contract data first, then trainings.
</Note>

## CSV format

| Column                 | Type    | Required | Description                                         | Example                          |
| ---------------------- | ------- | -------- | --------------------------------------------------- | -------------------------------- |
| `external_employee_id` | String  | Yes      | The employee's ID (must match an existing employee) | `EMP001`                         |
| `hours`                | Decimal | Yes      | Total training hours (must be >= 0)                 | `8.0`                            |
| `start_date`           | Date    | Yes      | When the training started (YYYY-MM-DD)              | `2024-01-15`                     |
| `end_date`             | Date    | Yes      | When the training ended (must be >= start\_date)    | `2024-01-16`                     |
| `description`          | String  | Yes      | Name or description of the training                 | `Workplace Safety Certification` |
| `type`                 | String  | Yes      | Category of the training                            | `safety`                         |

### Training types

You can use any string value for the training type. Common categories include:

| Type         | Description                                                    |
| ------------ | -------------------------------------------------------------- |
| `safety`     | Health and safety training (e.g., fire drills, PPE usage)      |
| `technical`  | Job-specific technical skills (e.g., software, machinery)      |
| `compliance` | Regulatory compliance (e.g., data protection, anti-corruption) |
| `leadership` | Management and leadership development                          |
| `languages`  | Language courses                                               |
| `onboarding` | New employee induction programs                                |
| `other`      | Any other training type                                        |

<Info>
  Training types are free-text fields -- you can use any value that makes sense for your organization. The values listed above are suggestions.
</Info>

### Example CSV

```csv theme={"theme":{"light":"github-light","dark":"github-dark"}}
external_employee_id,hours,start_date,end_date,description,type
EMP001,8.0,2024-01-15,2024-01-16,Workplace Safety Certification,safety
EMP001,40.0,2024-03-01,2024-03-31,Advanced Python Development,technical
EMP002,16.0,2024-02-10,2024-02-12,Leadership Workshop,leadership
EMP003,4.0,2024-04-05,2024-04-05,GDPR Compliance Refresher,compliance
EMP002,8.0,2024-06-01,2024-06-01,Fire Safety Drill,safety
EMP005,24.0,2024-05-01,2024-05-03,UX Design Masterclass,technical
```

## How to upload

<Steps>
  <Step title="Go to Data > Workforce > Trainings">
    Navigate to the **Workforce** section and select the **Trainings** tab.
  </Step>

  <Step title="Click Upload">
    Click the **Upload** button to open the data import interface.
  </Step>

  <Step title="Import your data">
    Paste from a spreadsheet, upload a CSV/Excel file, or enter data manually. The importer maps your columns to the expected fields.
  </Step>

  <Step title="Review and confirm">
    The importer validates that:

    * Each `external_employee_id` matches an existing employee
    * Hours are a valid positive number
    * End date is on or after start date
    * All required fields are filled

    Fix any errors, then confirm the upload.
  </Step>
</Steps>

## Viewing training data

### Training list

The training list shows all uploaded training records with:

* **Employee ID**: Which employee completed the training
* **Description**: Training name/description
* **Type**: Training category
* **Hours**: Duration in hours
* **Dates**: Start and end dates
* **Upload source**: Which file the record came from

You can **search** by Employee ID or description and **filter** by:

* Upload file
* Upload date range

### Employee detail view

From the employee detail page, the **Trainings** section shows all trainings for that specific employee in chronological order.

## How it appears in reports

Training data feeds into these report metrics:

| Metric                           | Calculation                          | Description                              |
| -------------------------------- | ------------------------------------ | ---------------------------------------- |
| Total training hours             | Sum of all training hours            | Organization-wide investment in training |
| Avg. training hours per employee | Total hours / Headcount              | Per-capita training metric               |
| Training hours by gender         | Hours grouped by employee gender     | Equity in training access                |
| Training hours by category       | Hours grouped by employment category | Distribution across job levels           |

<Note>
  Training hours are **prorated** in reports when a training spans multiple months. For example, a 20-hour training from March 15 to April 15 would allocate approximately 10 hours to March and 10 hours to April based on the number of days in each month.
</Note>

## Frequently asked questions

<AccordionGroup>
  <Accordion title="Do employees need to exist before I upload trainings?">
    Yes. The `external_employee_id` in each training record must match an employee already uploaded through the contracts upload. If the employee doesn't exist, the training record will be rejected.
  </Accordion>

  <Accordion title="Can I upload the same training for multiple employees?">
    Yes. Create one row per employee per training. If 10 employees attended the same 8-hour workshop, you'd have 10 rows in your CSV, each with a different `external_employee_id` but the same description, type, hours, and dates.
  </Accordion>

  <Accordion title="What if a training spans multiple days but isn't full-day?">
    Set the `hours` field to the actual hours of instruction, not the calendar duration. For example, a course running 2 hours per day over 5 days would have `hours: 10`, `start_date: 2024-01-06`, `end_date: 2024-01-10`.
  </Accordion>

  <Accordion title="How do I delete training records from a specific upload?">
    Use the filter to select records from a specific upload file, then use the bulk delete option to remove all records from that file.
  </Accordion>
</AccordionGroup>
