# Gerenciar Turnos e Sessões

Este guia explica como gerenciar turnos operacionais e sessões utilizando o `ShiftRepository` e o `SessionRepository`. Estas operações permitem segmentar períodos de transação e realizar a conciliação de lotes com o host.

## Abrindo um Turno

Os turnos são períodos operacionais locais que permitem agrupar transações (ex: por funcionário ou período do dia). Para iniciar um novo turno, use o método `openShift`.

**Repositório**: `ShiftRepository`  
**Função**: `openShift`

**Parâmetros**:
* `number`: Um número inteiro representando o número do turno.
* `date`: O objeto `Date` indicando quando o turno foi aberto.

**Exemplo**:

```kotlin
suspend fun startShift(shiftNumber: Int) {
    val result = shiftRepository.openShift(
        number = shiftNumber,
        date = Date() // Current time
    )

    when (result) {
        is RepositoryResult.Success -> {
            val isSuccess = result.data
            if (isSuccess) {
                println("✅ Shift $shiftNumber opened successfully")
            } else {
                println("❌ Failed to open shift")
            }
        }
        is RepositoryResult.ConnectionError -> println("❌ Connection Error")
        is RepositoryResult.ProtocolError -> println("❌ Error: ${result.type}")
        else -> {}
    }
}
```

## Fechando uma Sessão

Fechar uma sessão (frequentemente chamado de "Fim de Dia" ou "Fechamento de Lote") finaliza o período atual e liquida as transações com o host da Getnet. **Esta é uma operação crítica**: é ela que garante que os pagamentos sejam processados e os fundos sejam depositados.

**Repositório**: `SessionRepository`  
**Função**: `closeSession`

**Parâmetros**:
* `enableBrandDetails` (Opcional, padrão `true`): Se `true`, o resultado incluirá um detalhamento dos totais por bandeira de cartão (Visa, Mastercard, etc.).

### Interpretando o CloseSessionResult

A operação retorna uma interface selada `CloseSessionResult`:

1. **Bem-sucedido (`CloseSessionResult.Successful`)**: A sessão foi fechada corretamente. A propriedade `data` contém um `TotalsCommonModel` com o resumo da sessão fechada (valores, contagem de transações, etc.).
2. **Rejeitado (`CloseSessionResult.Rejected`)**: O host rejeitou a solicitação de fechamento.

**Exemplo**:

```kotlin
suspend fun closeDailySession() {
    val result = sessionRepository.closeSession(enableBrandDetails = true)

    when (result) {
        is RepositoryResult.Success -> {
            when (val sessionOutcome = result.data) {
                is CloseSessionResult.Successful -> {
                    val totals = sessionOutcome.data
                    println("✅ Session Closed. Total: ${totals.totalAmount}")
                }
                is CloseSessionResult.Rejected -> {
                    println("❌ Session Close Rejected by Host")
                }
            }
        }
        is RepositoryResult.ConnectionError -> println("❌ Connection Error")
        is RepositoryResult.ProtocolError -> println("❌ Error: ${result.type}")
        else -> {}
    }
}
```

## Próximos Passos

* [**Visualizar Totais e Relatórios**](/pt/get-smart/get-smart-sdk/integration-guides/business-management/view-totals-and-reports): Consultando totais acumulados para sessões ou turnos específicos.
* [**Histórico de Transações**](): Buscando transações passadas específicas.