# Shift Management

This guide explains how to manage shifts on an Integrated POS using the `Shift` operation: configure the number of shifts, change to the next shift, or retrieve the current shift count. Shift management behaves identically across USB and Network connections.

## What is a shift

A **shift** represents an operational period on the POS terminal. Transactions executed during a shift are grouped for reporting and reconciliation. The `Shift` function lets the automation system set up the number of available shifts, change to the next shift, or retrieve the current shift count. Shifts are managed programmatically via the Connector; the POS may prompt the operator when required information is missing.

## Before you begin

Before managing shifts:

* A Connector must be created and validated using `Polling`
* Integrated POS Mode must be active

## Step 1: Execute a shift operation

To perform a shift-related action, call the `Shift` operation using the `ShiftOperation` enum to define the desired task. If a required value—such as the number of shifts—is missing, the POS will prompt the operator for manual input.

The following table lists the parameters for the `Shift` operation:

| Parameter | Type | Required | Description |
| :--- | :--- | :--- | :--- |
| `ShiftOperation` | Enum | Yes | **Configuration**: Set the available shift count. **Change**: Move to the next shift. **GetShifts**: Retrieve the current count. |
| `NumberOfShifts` | Int | Conditional | **Required only** for **Configuration** to set the new shift quantity (max 2 digits). When omitted, the POS displays the corresponding input screen. |
| `SkipConfirmation` | Boolean | No | If `true`, skips the confirmation screen on the POS. |
| `PrintOnPos` | Boolean | No | If `true`, the POS prints the shift report. If `false`, the report is returned in `ReportDetails` (only for the **Change** operation). |

The following example demonstrates how to initiate a shift change through the Connector:

```csharp
var shiftRequest = new ShiftRequest
{
    ShiftOperation = ShiftOperation.Change,
    SkipConfirmation = false,
    PrintOnPos = false
};

var shiftResult = await connector.ShiftAsync(shiftRequest);
```

Once the request is initiated, the POS handles the internal logic and updates the operational period.

## Step 2: Handle the response

Upon completion, the POS returns a structured response with the operation status and current shift count. Below is an example of a successful response object:

```json
{
  "Code": 0,
  "Message": "APPROVED",
  "TotalOfShifts": 3,
  "ReportDetails": "GETNET\nSHIFT CHANGE\n...\n"
}
```

<Callout type="note">

The return contains only `Code`, `Message`, `TotalOfShifts`, and `ReportDetails`. `ReportDetails` is a `String` populated only for the **Change** operation when `PrintOnPos` is `false`; it is `null` for **Configuration** and **GetShifts**, or when `PrintOnPos` is `true`.

</Callout>

Always verify the `Code` and `Message` before processing the current shift count.

## Shift-related constraints

The following constraints apply to shift management:

* Only one shift can be active at a time.
* Some reports require a closed shift or depend on shift state.
* Shift change may trigger automatic printing when `PrintOnPos` is `true`; out-of-paper handling is described in the Shift Change Flow in the manual.

## Next steps

* [Reports: Totals, Details, and Shifts](/en/integrated-pos/operational-guides/get-reports) — GetReports and Shift report type.