# Gestión de turnos

Esta guía explica cómo gestionar turnos en un TPV Integrado con la operación `Shift`: configurar la cantidad de turnos, cambiar al turno siguiente o recuperar el recuento actual. La gestión de turnos funciona de forma idéntica en conexiones USB y de red (Network).

## ¿Qué es un turno?

Un **turno** representa un período operativo en el terminal TPV. Las transacciones ejecutadas durante un turno se agrupan para informes y conciliación. La función `Shift` permite al sistema de automatización configurar la cantidad de turnos disponibles, cambiar al turno siguiente o recuperar el recuento actual. Los turnos se gestionan de forma programática a través del Connector. El TPV puede pedirle los datos al operador cuando falta información obligatoria.

## Antes de comenzar

Antes de gestionar turnos:

* Debes crear y validar un Connector con `Polling`
* El Modo TPV Integrado debe estar activo

## Paso 1: Ejecutar una operación de turno

Para realizar una acción relacionada con los turnos, llama a la operación `Shift` y usa el enum `ShiftOperation` para definir la tarea deseada. Si falta un valor obligatorio, como la cantidad de turnos, el TPV le pide al operador que lo ingrese manualmente.

La siguiente tabla enumera los parámetros de la operación `Shift`:

| Parámetro | Tipo | Obligatorio | Descripción |
| :--- | :--- | :--- | :--- |
| `ShiftOperation` | Enum | Sí | **Configuration**: establece la cantidad de turnos disponibles. **Change**: avanza al turno siguiente. **GetShifts**: recupera el recuento actual. |
| `NumberOfShifts` | Int | Condicional | **Obligatorio solo** para **Configuration**, para definir la nueva cantidad de turnos (máx. 2 dígitos). Cuando se omite, el TPV muestra la pantalla de entrada correspondiente. |
| `SkipConfirmation` | Boolean | No | Si es `true`, omite la pantalla de confirmación en el TPV. |
| `PrintOnPos` | Boolean | No | Si es `true`, el TPV imprime el informe de turno. Si es `false`, el informe se devuelve en `ReportDetails` (solo para la operación **Change**). |

El siguiente ejemplo muestra cómo iniciar un cambio de turno a través del Connector:

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

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

Una vez iniciada la solicitud, el TPV maneja la lógica interna y actualiza el período operativo.

## Paso 2: Manejar la respuesta

Al finalizar, el TPV devuelve una respuesta estructurada con el estado de la operación y el recuento de turnos actual. A continuación se muestra un ejemplo de objeto de respuesta exitosa:

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

<Callout type="note">

La respuesta contiene solo `Code`, `Message`, `TotalOfShifts` y `ReportDetails`. `ReportDetails` es un `String` que se completa solo para la operación **Change** cuando `PrintOnPos` es `false`. Es `null` para **Configuration** y **GetShifts**, o cuando `PrintOnPos` es `true`.

</Callout>

Verifica siempre el `Code` y el `Message` antes de procesar el recuento de turnos actual.

## Restricciones relacionadas con los turnos

Se aplican las siguientes restricciones a la gestión de turnos:

* Solo puede haber un turno activo a la vez.
* Algunos informes requieren un turno cerrado o dependen del estado del turno.
* El cambio de turno puede desencadenar la impresión automática cuando `PrintOnPos` es `true`. El manual describe el manejo de la falta de papel en el flujo de cambio de turno (Shift Change Flow).

## Siguientes pasos

* [Informes: totales, detalles y turnos](/es/integrated-pos/operational-guides/get-reports) — GetReports y el tipo de informe Shift.