# Gerenciamento de turnos

Este guia explica como gerenciar turnos em um POS Integrado com a operação `Shift`. Você configura o número de turnos, muda para o próximo turno ou recupera a contagem atual de turnos. O gerenciamento de turnos funciona de forma idêntica nas conexões USB e Network.

## O que é um turno

Um **turno** representa um período operacional no terminal POS. As transações executadas durante um turno são agrupadas para relatórios e conciliação. A função `Shift` permite que o sistema de automação defina o número de turnos disponíveis, mude para o próximo turno ou recupere a contagem atual de turnos. Os turnos são gerenciados programaticamente pelo Connector; o POS pode solicitar dados ao operador quando falta uma informação obrigatória.

## Antes de começar

Antes de gerenciar turnos:

* Um Connector deve ser criado e validado com `Polling`
* O modo POS Integrado deve estar ativo

## Passo 1: Execute uma operação de turno

Para executar uma ação relacionada a turnos, chame a operação `Shift` e use o enum `ShiftOperation` para definir a tarefa desejada. Se faltar um valor obrigatório — como o número de turnos —, o POS solicita a digitação manual ao operador.

A tabela a seguir lista os parâmetros da operação `Shift`:

| Parâmetro | Tipo | Obrigatório | Descrição |
| :--- | :--- | :--- | :--- |
| `ShiftOperation` | Enum | Sim | **Configuration**: define a quantidade de turnos disponíveis. **Change**: avança para o próximo turno. **GetShifts**: recupera a contagem atual. |
| `NumberOfShifts` | Int | Condicional | **Obrigatório somente** em **Configuration**, para definir a nova quantidade de turnos (máx. 2 dígitos). Quando omitido, o POS exibe a tela de digitação correspondente. |
| `SkipConfirmation` | Boolean | Não | Se `true`, ignora a tela de confirmação no POS. |
| `PrintOnPos` | Boolean | Não | Se `true`, o POS imprime o relatório do turno. Se `false`, o relatório é retornado em `ReportDetails` (somente na operação **Change**). |

O exemplo a seguir mostra como iniciar uma troca de turno pelo Connector:

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

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

Depois que a requisição é iniciada, o POS trata a lógica interna e atualiza o período operacional.

## Passo 2: Trate a resposta

Ao concluir, o POS retorna uma resposta estruturada com o status da operação e a contagem atual de turnos. Veja a seguir um exemplo de objeto de resposta bem-sucedida:

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

<Callout type="note">

O retorno contém somente `Code`, `Message`, `TotalOfShifts` e `ReportDetails`. `ReportDetails` é uma `String` preenchida somente na operação **Change** quando `PrintOnPos` for `false`; é `null` em **Configuration** e **GetShifts**, ou quando `PrintOnPos` for `true`.

</Callout>

Sempre verifique o `Code` e a `Message` antes de processar a contagem atual de turnos.

## Restrições relacionadas a turnos

As restrições a seguir se aplicam ao gerenciamento de turnos:

* Somente um turno pode estar ativo por vez.
* Alguns relatórios exigem um turno fechado ou dependem do estado do turno.
* A troca de turno pode disparar a impressão automática quando `PrintOnPos` for `true`; o tratamento de falta de papel está descrito no Shift Change Flow do manual.

## Próximos passos

* [Relatórios: Totais, Detalhes e Turnos](/pt/integrated-pos/operational-guides/get-reports) — GetReports e o tipo de relatório Shift.