# Integração Servidor Comandas

Documento de integração para utilizar as API's do servidor comandas.

# API para buscar comanda a ser faturada.

# 📌 API – Iniciar Faturamento de Comandas

**Endpoint:**  
`POST /api/v1/mesas-comandas/iniciar-faturamento`

---

## 🎯 Objetivo da API

Esta API permite que um **PDV** solicite ao **Servidor de Comandas** o início do faturamento de **uma ou mais comandas**, possibilitando que elas sejam pagas juntas em uma única venda.

O Servidor de Comandas:

- valida cada comanda solicitada;
- **trava** (coloca em `conferencia`) apenas as comandas que podem ser faturadas;
- retorna os **itens da comanda** para o PDV montar a venda;
- retorna também as comandas que **não puderam ser faturadas**, com o motivo.

⚠️ **Importante:**  
A API permite **sucesso parcial**.  
Se 3 comandas forem enviadas e apenas 2 puderem ser faturadas, **essas 2 serão liberadas para faturamento** e a outra será retornada como bloqueada.

---

## 🧠 Conceitos importantes (antes de integrar)

### Status da comanda

<div class="TyagGW_tableContainer" id="bkmrk-status-significado-c"><div class="group TyagGW_tableWrapper flex flex-col-reverse w-fit" tabindex="-1"><table class="w-fit min-w-(--thread-content-width)" data-end="1544" data-start="1276"><thead data-end="1300" data-start="1276"><tr data-end="1300" data-start="1276"><th data-col-size="sm" data-end="1285" data-start="1276">Status</th><th data-col-size="md" data-end="1300" data-start="1285">Significado</th></tr></thead><tbody data-end="1544" data-start="1323"><tr data-end="1373" data-start="1323"><td data-col-size="sm" data-end="1335" data-start="1323">`consumo`</td><td data-col-size="md" data-end="1373" data-start="1335">Comanda em uso, com itens lançados</td></tr><tr data-end="1436" data-start="1374"><td data-col-size="sm" data-end="1390" data-start="1374">`conferencia`</td><td data-col-size="md" data-end="1436" data-start="1390">Comanda travada para faturamento em um PDV</td></tr><tr data-end="1485" data-start="1437"><td data-col-size="sm" data-end="1447" data-start="1437">`livre`</td><td data-col-size="md" data-end="1485" data-start="1447">Comanda sem itens ou já finalizada</td></tr><tr data-end="1544" data-start="1486"><td data-col-size="sm" data-end="1504" data-start="1486">`transferencia`</td><td data-col-size="md" data-end="1544" data-start="1504">Comanda em processo de transferência</td></tr></tbody></table>

</div></div>### Regras gerais

- **Nunca existe faturamento parcial de itens**: ou a comanda entra inteira ou não entra.
- **Itens cancelados sempre são retornados**, mas **não entram no total**.
- O PDV **não recalcula valores**: deve confiar nos valores retornados pela API.

---

## 🔐 Autenticação

Segue o **padrão de autenticação do Servidor de Comandas** (definido pelo projeto).

> Caso a autenticação falhe, a API retornará erro HTTP (401/403).

---

## 📥 Request

### Body (JSON)

<div class="TyagGW_tableContainer" id="bkmrk-campo-tipo-obrigat%C3%B3r"><div class="group TyagGW_tableWrapper flex flex-col-reverse w-fit" tabindex="-1"><table class="w-fit min-w-(--thread-content-width)" data-end="2312" data-start="2024"><thead data-end="2066" data-start="2024"><tr data-end="2066" data-start="2024"><th data-col-size="sm" data-end="2032" data-start="2024">Campo</th><th data-col-size="sm" data-end="2039" data-start="2032">Tipo</th><th data-col-size="sm" data-end="2053" data-start="2039">Obrigatório</th><th data-col-size="md" data-end="2066" data-start="2053">Descrição</th></tr></thead><tbody data-end="2312" data-start="2107"><tr data-end="2185" data-start="2107"><td data-col-size="sm" data-end="2123" data-start="2107">`numeroMesas`</td><td data-col-size="sm" data-end="2136" data-start="2123">`number[]`</td><td data-col-size="sm" data-end="2140" data-start="2136">✅</td><td data-col-size="md" data-end="2185" data-start="2140">IDs das comandas que o PDV deseja faturar</td></tr><tr data-end="2251" data-start="2186"><td data-col-size="sm" data-end="2200" data-start="2186">`numeroPdv`</td><td data-col-size="sm" data-end="2211" data-start="2200">`string`</td><td data-col-size="sm" data-end="2215" data-start="2211">✅</td><td data-col-size="md" data-end="2251" data-start="2215">Identificação do PDV solicitante</td></tr><tr data-end="2312" data-start="2252"><td data-col-size="sm" data-end="2268" data-start="2252">`operador_id`</td><td data-col-size="sm" data-end="2279" data-start="2268">`string`</td><td data-col-size="sm" data-end="2283" data-start="2279">✅</td><td data-col-size="md" data-end="2312" data-start="2283">Identificação do operador</td></tr></tbody></table>

</div></div>### Exemplo de requisição

<div class="contain-inline-size rounded-2xl corner-superellipse/1.1 relative bg-token-sidebar-surface-primary" id="bkmrk--4"><div class="sticky top-[calc(--spacing(9)+var(--header-height))] @w-xl/main:top-9"><div class="absolute end-0 bottom-0 flex h-9 items-center pe-2"><div class="bg-token-bg-elevated-secondary text-token-text-secondary flex items-center gap-4 rounded-sm px-2 font-sans text-xs">  
</div></div></div><div class="overflow-y-auto p-4" dir="ltr">  
</div></div>```
{
  "numeroMesas": [4069, 4070, 4075],
  "numeroPdv": "12",
  "operador_id": "1275"
}

```

---

## ⚙️ O que o servidor faz ao receber a requisição

Para **cada comanda enviada**, o servidor avalia:

<div class="TyagGW_tableContainer" id="bkmrk-situa%C3%A7%C3%A3o-da-comanda-"><div class="group TyagGW_tableWrapper flex flex-col-reverse w-fit" tabindex="-1"><table class="w-fit min-w-(--thread-content-width)" data-end="2987" data-start="2547"><thead data-end="2582" data-start="2547"><tr data-end="2582" data-start="2547"><th data-col-size="sm" data-end="2569" data-start="2547">Situação da comanda</th><th data-col-size="md" data-end="2582" data-start="2569">Resultado</th></tr></thead><tbody data-end="2987" data-start="2618"><tr data-end="2663" data-start="2618"><td data-col-size="sm" data-end="2631" data-start="2618">Não existe</td><td data-col-size="md" data-end="2663" data-start="2631">Bloqueada (`NAO_ENCONTRADA`)</td></tr><tr data-end="2721" data-start="2664"><td data-col-size="sm" data-end="2689" data-start="2664">Já está em conferência</td><td data-col-size="md" data-end="2721" data-start="2689">Bloqueada (`EM_CONFERENCIA`)</td></tr><tr data-end="2765" data-start="2722"><td data-col-size="sm" data-end="2735" data-start="2722">Está livre</td><td data-col-size="md" data-end="2765" data-start="2735">Bloqueada (`STATUS_LIVRE`)</td></tr><tr data-end="2846" data-start="2766"><td data-col-size="sm" data-end="2809" data-start="2766">Está em consumo e há PDVs lançando itens</td><td data-col-size="md" data-end="2846" data-start="2809">Bloqueada (`EM_LANCAMENTO_ITENS`)</td></tr><tr data-end="2905" data-start="2847"><td data-col-size="sm" data-end="2871" data-start="2847">Está em transferência</td><td data-col-size="md" data-end="2905" data-start="2871">Bloqueada (`EM_TRANSFERENCIA`)</td></tr><tr data-end="2987" data-start="2906"><td data-col-size="sm" data-end="2940" data-start="2906">Está em consumo (sem bloqueios)</td><td data-col-size="md" data-end="2987" data-start="2940">✅ Elegível → status muda para `conferencia`</td></tr></tbody></table>

</div></div>---

## Response – Sucesso (200)

### Estrutura do retorno

<div class="contain-inline-size rounded-2xl corner-superellipse/1.1 relative bg-token-sidebar-surface-primary" id="bkmrk--7"><div class="sticky top-[calc(--spacing(9)+var(--header-height))] @w-xl/main:top-9"><div class="absolute end-0 bottom-0 flex h-9 items-center pe-2"><div class="bg-token-bg-elevated-secondary text-token-text-secondary flex items-center gap-4 rounded-sm px-2 font-sans text-xs">  
</div></div></div><div class="overflow-y-auto p-4" dir="ltr">  
</div></div>```json
{
  "comandasParaFaturar": [],
  "comandasBloqueadasParaFaturar": []
}

```

---

## ✅ `comandasParaFaturar`

Lista das comandas que **foram liberadas para faturamento**.

### Campos

<div class="TyagGW_tableContainer" id="bkmrk-campo-descri%C3%A7%C3%A3o-idme"><div class="group TyagGW_tableWrapper flex flex-col-reverse w-fit" tabindex="-1"><table class="w-fit min-w-(--thread-content-width)" data-end="3594" data-start="3332"><thead data-end="3353" data-start="3332"><tr data-end="3353" data-start="3332"><th data-col-size="sm" data-end="3340" data-start="3332">Campo</th><th data-col-size="sm" data-end="3353" data-start="3340">Descrição</th></tr></thead><tbody data-end="3594" data-start="3374"><tr data-end="3402" data-start="3374"><td data-col-size="sm" data-end="3385" data-start="3374">`idMesa`</td><td data-col-size="sm" data-end="3402" data-start="3385">ID da comanda</td></tr><tr data-end="3451" data-start="3403"><td data-col-size="sm" data-end="3421" data-start="3403">`codigoComanda`</td><td data-col-size="sm" data-end="3451" data-start="3421">Código exibido ao operador</td></tr><tr data-end="3499" data-start="3452"><td data-col-size="sm" data-end="3475" data-start="3452">`statusAlteradoPara`</td><td data-col-size="sm" data-end="3499" data-start="3475">Sempre `conferencia`</td></tr><tr data-end="3554" data-start="3500"><td data-col-size="sm" data-end="3517" data-start="3500">`totalComanda`</td><td data-col-size="sm" data-end="3554" data-start="3517">Soma dos itens **não cancelados**</td></tr><tr data-end="3594" data-start="3555"><td data-col-size="sm" data-end="3565" data-start="3555">`itens`</td><td data-col-size="sm" data-end="3594" data-start="3565">Lista de itens da comanda</td></tr></tbody></table>

</div></div>### Regras do total

- `totalComanda` = soma de `preco_total` **somente dos itens com `cancelado = false`**

---

### Estrutura de um item

<div class="contain-inline-size rounded-2xl corner-superellipse/1.1 relative bg-token-sidebar-surface-primary" id="bkmrk--10"><div class="sticky top-[calc(--spacing(9)+var(--header-height))] @w-xl/main:top-9"><div class="absolute end-0 bottom-0 flex h-9 items-center pe-2"><div class="bg-token-bg-elevated-secondary text-token-text-secondary flex items-center gap-4 rounded-sm px-2 font-sans text-xs">  
</div></div></div><div class="overflow-y-auto p-4" dir="ltr">  
</div></div>```json
{
  "id": 34,
  "usuario_lancamento": "1275895",
  "produto_id": 9381649,
  "ean": "00000000100700",
  "descricao_resumida": "PROD TESTE 01",
  "quantidade": 1,
  "valorTotalAcrescimo": 10,
  "valorTotalDesconto": 0,
  "cancelado": false,
  "cancelado_por": null,
  "preco_unitario": 15,
  "preco_total": 25,
  "data_hora": "27/01/2026, 11:03:12"
}

```

### ⚠️ Itens cancelados

- `cancelado = true`
- **Não entram no total**
- Servem apenas para **auditoria/relatórios**
- `preco_total` é apenas informativo

---

## 🚫 `comandasBloqueadasParaFaturar`

Lista das comandas que **não puderam ser faturadas**.

### Campos

<div class="TyagGW_tableContainer" id="bkmrk-campo-descri%C3%A7%C3%A3o-idme-1"><div class="group TyagGW_tableWrapper flex flex-col-reverse w-fit" tabindex="-1"><table class="w-fit min-w-(--thread-content-width)" data-end="4740" data-start="4360"><thead data-end="4381" data-start="4360"><tr data-end="4381" data-start="4360"><th data-col-size="sm" data-end="4368" data-start="4360">Campo</th><th data-col-size="md" data-end="4381" data-start="4368">Descrição</th></tr></thead><tbody data-end="4740" data-start="4402"><tr data-end="4447" data-start="4402"><td data-col-size="sm" data-end="4413" data-start="4402">`idMesa`</td><td data-col-size="md" data-end="4447" data-start="4413">ID da comanda (quando existir)</td></tr><tr data-end="4487" data-start="4448"><td data-col-size="sm" data-end="4466" data-start="4448">`codigoComanda`</td><td data-col-size="md" data-end="4487" data-start="4466">Código da comanda</td></tr><tr data-end="4531" data-start="4488"><td data-col-size="sm" data-end="4504" data-start="4488">`statusAtual`</td><td data-col-size="md" data-end="4531" data-start="4504">Status atual da comanda</td></tr><tr data-end="4565" data-start="4532"><td data-col-size="sm" data-end="4543" data-start="4532">`motivo`</td><td data-col-size="md" data-end="4565" data-start="4543">Código do bloqueio</td></tr><tr data-end="4600" data-start="4566"><td data-col-size="sm" data-end="4579" data-start="4566">`mensagem`</td><td data-col-size="md" data-end="4600" data-start="4579">Texto explicativo</td></tr><tr data-end="4680" data-start="4601"><td data-col-size="sm" data-end="4628" data-start="4601">`numeroPdvEmConferencia`</td><td data-col-size="md" data-end="4680" data-start="4628">PDV que está usando a comanda (quando aplicável)</td></tr><tr data-end="4740" data-start="4681"><td data-col-size="sm" data-end="4698" data-start="4681">`pos_lancando`</td><td data-col-size="md" data-end="4740" data-start="4698">PDVs lançando itens (quando aplicável)</td></tr></tbody></table>

</div></div>---

## 🧾 Enum `motivo`

<div class="TyagGW_tableContainer" id="bkmrk-motivo-significado-e"><div class="group TyagGW_tableWrapper flex flex-col-reverse w-fit" tabindex="-1"><table class="w-fit min-w-(--thread-content-width)" data-end="5168" data-start="4768"><thead data-end="4792" data-start="4768"><tr data-end="4792" data-start="4768"><th data-col-size="sm" data-end="4777" data-start="4768">Motivo</th><th data-col-size="sm" data-end="4792" data-start="4777">Significado</th></tr></thead><tbody data-end="5168" data-start="4816"><tr data-end="4869" data-start="4816"><td data-col-size="sm" data-end="4835" data-start="4816">`EM_CONFERENCIA`</td><td data-col-size="sm" data-end="4869" data-start="4835">Comanda já está sendo faturada</td></tr><tr data-end="4919" data-start="4870"><td data-col-size="sm" data-end="4887" data-start="4870">`STATUS_LIVRE`</td><td data-col-size="sm" data-end="4919" data-start="4887">Comanda está livre/sem itens</td></tr><tr data-end="4962" data-start="4920"><td data-col-size="sm" data-end="4939" data-start="4920">`NAO_ENCONTRADA`</td><td data-col-size="sm" data-end="4962" data-start="4939">Comanda inexistente</td></tr><tr data-end="5018" data-start="4963"><td data-col-size="sm" data-end="4987" data-start="4963">`EM_LANCAMENTO_ITENS`</td><td data-col-size="sm" data-end="5018" data-start="4987">Existem PDVs lançando itens</td></tr><tr data-end="5068" data-start="5019"><td data-col-size="sm" data-end="5040" data-start="5019">`EM_TRANSFERENCIA`</td><td data-col-size="sm" data-end="5068" data-start="5040">Comanda em transferência</td></tr><tr data-end="5113" data-start="5069"><td data-col-size="sm" data-end="5089" data-start="5069">`STATUS_INVALIDO`</td><td data-col-size="sm" data-end="5113" data-start="5089">Status não permitido</td></tr><tr data-end="5168" data-start="5114"><td data-col-size="sm" data-end="5128" data-start="5114">`SEM_ITENS`</td><td data-col-size="sm" data-end="5168" data-start="5128">Comanda sem itens (quando aplicável)</td></tr></tbody></table>

</div></div>## Response – Sucesso (200) <span class="text-big">contendo apenas comandas aptas a faturar.</span>

```json
{
 "comandasParaFaturar": [
   {
     "idMesa": 4069,
     "codigoComanda": "21",
     "statusAlteradoPara": "conferencia",
      "totalComanda": 31.50,  
     "itens": [
       {
         "id": 34,
         "usuario_lancamento": "1275895",
         "produto_id": 9381649,
         "ean": "00000000100700",
         "descricao_resumida": "PROD TESTE 01",
         "quantidade": 1,
         "valorTotalAcrescimo": 10, 
         "valorTotalDesconto": 0,    
         "cancelado": false,
         "cancelado_por": null,
         "preco_unitario": 15,     
         "preco_total": 25,       
         "data_hora": "27/01/2026, 11:03:12"
        
       },
       {
         "id": 35,
         "usuario_lancamento": "1275895",
         "produto_id": 9381647,
         "ean": "00000000100670",
         "descricao_resumida": "PROD TESTE 40",
         "quantidade": 1,
         "valorTotalAcrescimo": 0,
         "valorTotalDesconto": 0,
         "cancelado": false,
         "cancelado_por": null,
         "preco_unitario": 6.5,
         "preco_total": 6.5,    
         "data_hora": "27/01/2026, 11:03:12"
       },
       {
         "id": 36,
         "usuario_lancamento": "1275895",
         "produto_id": 8104916,
         "ean": "00000001267532",
         "descricao_resumida": "10 OVO",
         "quantidade": 1,
         "valorTotalAcrescimo": 0,
         "valorTotalDesconto": 0,
         "cancelado": true,
         "cancelado_por": "1275895",
         "preco_unitario": 50,
         "preco_total": 50,
         "data_hora": "27/01/2026, 11:07:01"         
       }
     ]
   }
 ],
 "comandasBloqueadasParaFaturar": []
}


```

## Response – Sucesso (200) <span class="text-big">contendo comandas aptas e não aptas a faturar</span><span class="text-big">.</span>

```json
{
 "comandasParaFaturar": [
   {
     "idMesa": 4069,
     "codigoComanda": "21",
     "statusAlteradoPara": "conferencia",
      "totalComanda": 31.50,       
     "itens": [
       {
         "id": 34,
         "usuario_lancamento": "1275895",
         "produto_id": 9381649,
         "ean": "00000000100700",
         "descricao_resumida": "PROD TESTE 01",
         "quantidade": 1,
         "valorTotalAcrescimo": 10,  
         "valorTotalDesconto": 0,    
         "cancelado": false,
         "cancelado_por": null,
         "preco_unitario": 15,     
         "preco_total": 25,         
         "data_hora": "27/01/2026, 11:03:12"
        
       },
       {
         "id": 35,
         "usuario_lancamento": "1275895",
         "produto_id": 9381647,
         "ean": "00000000100670",
         "descricao_resumida": "PROD TESTE 40",
         "quantidade": 1,
         "valorTotalAcrescimo": 0,
         "valorTotalDesconto": 0,
         "cancelado": false,
         "cancelado_por": null,
         "preco_unitario": 6.5,
         "preco_total": 6.5,   
         "data_hora": "27/01/2026, 11:03:12"
       },
       {
         "id": 36,
         "usuario_lancamento": "1275895",
         "produto_id": 8104916,
         "ean": "00000001267532",
         "descricao_resumida": "10 OVO",
         "quantidade": 1,
         "valorTotalAcrescimo": 0,
         "valorTotalDesconto": 0,
         "cancelado": true,
         "cancelado_por": "1275895",
         "preco_unitario": 50,
         "preco_total": 50,
         "data_hora": "27/01/2026, 11:07:01"         
       }
     ]
   }
 ],
 "comandasBloqueadasParaFaturar": [
   {
     "idMesa": 4070,
     "codigoComanda": "22",
     "statusAtual": "conferencia",
     "motivo": "EM_CONFERENCIA",
      "numeroPdvEmConferencia": "12",
     "mensagem": "Comanda já está em conferência."  
   },
   {
     "idMesa": 4071,
     "codigoComanda": "23",
     "statusAtual": "livre",
     "motivo": "STATUS_LIVRE",
     "mensagem": "Comanda está livre e sem itens a faturar."
   },
   {
     "codigoComanda": "23",
     "mensagem": "Comanda não encontrada"
	}
 ]
}


```

##   
  
 Response – 200 - Nenhuma comanda apta a faturar. 

### Quando acontece?

Quando **nenhuma comanda** enviada pode ser faturada.

### Comportamento esperado do PDV

- **Não montar a venda**
- Exibir os motivos ao operador
- Encerrar o fluxo

### Exemplo

<div class="contain-inline-size rounded-2xl corner-superellipse/1.1 relative bg-token-sidebar-surface-primary" id="bkmrk--14"><div class="sticky top-[calc(--spacing(9)+var(--header-height))] @w-xl/main:top-9"><div class="absolute end-0 bottom-0 flex h-9 items-center pe-2"><div class="bg-token-bg-elevated-secondary text-token-text-secondary flex items-center gap-4 rounded-sm px-2 font-sans text-xs">  
</div></div></div><div class="overflow-y-auto p-4" dir="ltr">  
</div></div>```json
{
"comandasParaFaturar": [],
"comandasBloqueadasParaFaturar": [
   {
     "idMesa": 4070,
     "codigoComanda": "22",
     "statusAtual": "conferencia",
     "motivo": "EM_CONFERENCIA",
      "numeroPdvEmConferencia": "12",
     "mensagem": "Comanda já está em conferência."  
   },
   {
     "idMesa": 4072,
     "codigoComanda": "23",
     "statusAtual": "livre",
     "motivo": "STATUS_LIVRE",
     "mensagem": "Comanda está livre e sem itens a faturar."
   },      
   {
     "idMesa": 4073,
     "codigoComanda": "24",
     "statusAtual": "consumo",
     "motivo": "EM_LANCAMENTO_ITENS",
     "pos_lancando": [1,2]
     "mensagem": "Comanda está em consumo tendo lançamento de itens."
   },
   {
     "idMesa": 4071,
     "codigoComanda": "25",
     "statusAtual": "transferencia",
     "motivo": "EM_TRANSFERENCIA",
     "mensagem": "Comanda está em transferência de itens."
   },
      
    {
     "codigoComanda": "1231",
     "motivo": "NAO_ENCONTRADA",
     "mensagem": "Comanda não encontrada."
    }
 ]
}
```

---

## ✅ Boas práticas para quem integra (PDV)

- Sempre trate **sucesso parcial**
- Nunca recalcular valores
- Não tente faturar comandas bloqueadas
- Guarde localmente as comandas que entraram em `conferencia`
- Use essa lista depois para:
    
    
    - `confirmar-faturamento`
    - `cancelar-faturamento`

# API para liberar as comandas após finalizar a venda.

# 📌 API – Confirmar Faturamento (Liberar/Resetar Comandas)

**Endpoint:**  
`POST /api/v1/mesas-comandas/confirmar-faturamento`

---

## 🎯 Objetivo da API

Esta API é utilizada pelo **PDV** ao final do atendimento para **liberar (resetar)** uma ou mais comandas que estavam em **`conferencia`**, tornando-as **`livre`** novamente para um novo cliente.

✅ O que essa API faz no Servidor de Comandas (para cada comanda liberada):

- apaga **itens** associados à comanda;
- apaga **pagamentos** associados (se existirem);
- limpa/zera informações associadas à mesa/comanda (mesma lógica do `liberar-mesa`);
- altera o status para **`livre`**.

🚫 O que essa API **NÃO faz**:

- não recebe dados fiscais;
- não recebe pagamentos;
- não valida NFC-e/NF-e;
- não emite documento fiscal.

> Pagamento e emissão fiscal são responsabilidades do PDV e não são enviados ao Servidor de Comandas.

---

## 🧠 Quando usar (fluxo do integrador)

Use esta API **apenas após** o PDV ter:

1. chamado `POST /api/v1/mesas-comandas/iniciar-faturamento` (e recebido comandas em `conferencia`), e
2. finalizado o atendimento no PDV.

📌 **Recomendação prática**:  
Envie em `confirmar-faturamento` **somente as comandas que o servidor retornou em `comandasParaFaturar`** (ou seja, as que realmente entraram em `conferencia`).

---

## 🔐 Autenticação

Segue o **padrão de autenticação do Servidor de Comandas** (não detalhado no cartão).

> Quando você definir/passar o padrão, incluo aqui (JWT, x-api-key, etc.).

---

## 📥 Request

### Body (JSON)

<div class="TyagGW_tableContainer" id="bkmrk-campo-tipo-obrigat%C3%B3r"><div class="group TyagGW_tableWrapper flex flex-col-reverse w-fit" tabindex="-1"><table class="w-fit min-w-(--thread-content-width)" data-end="2078" data-start="1789"><thead data-end="1831" data-start="1789"><tr data-end="1831" data-start="1789"><th data-col-size="sm" data-end="1797" data-start="1789">Campo</th><th data-col-size="sm" data-end="1804" data-start="1797">Tipo</th><th data-col-size="sm" data-end="1818" data-start="1804">Obrigatório</th><th data-col-size="md" data-end="1831" data-start="1818">Descrição</th></tr></thead><tbody data-end="2078" data-start="1851"><tr data-end="1939" data-start="1851"><td data-col-size="sm" data-end="1867" data-start="1851">`numeroMesas`</td><td data-col-size="sm" data-end="1880" data-start="1867">`number[]`</td><td data-col-size="sm" data-end="1884" data-start="1880">✅</td><td data-col-size="md" data-end="1939" data-start="1884">Lista de mesas/comandas a serem liberadas/resetadas</td></tr><tr data-end="2005" data-start="1940"><td data-col-size="sm" data-end="1954" data-start="1940">`numeroPdv`</td><td data-col-size="sm" data-end="1965" data-start="1954">`string`</td><td data-col-size="sm" data-end="1969" data-start="1965">✅</td><td data-col-size="md" data-end="2005" data-start="1969">Identificação do PDV solicitante</td></tr><tr data-end="2078" data-start="2006"><td data-col-size="sm" data-end="2022" data-start="2006">`operador_id`</td><td data-col-size="sm" data-end="2033" data-start="2022">`string`</td><td data-col-size="sm" data-end="2037" data-start="2033">✅</td><td data-col-size="md" data-end="2078" data-start="2037">Identificação do operador solicitante</td></tr></tbody></table>

</div></div>### Exemplo

<div class="contain-inline-size rounded-2xl corner-superellipse/1.1 relative bg-token-sidebar-surface-primary" id="bkmrk--4"><div class="sticky top-[calc(--spacing(9)+var(--header-height))] @w-xl/main:top-9"><div class="absolute end-0 bottom-0 flex h-9 items-center pe-2"><div class="bg-token-bg-elevated-secondary text-token-text-secondary flex items-center gap-4 rounded-sm px-2 font-sans text-xs">  
</div></div></div><div class="overflow-y-auto p-4" dir="ltr">  
</div></div>```json
{
  "numeroMesas": [4069, 4070, 4075],
  "numeroPdv": "12",
  "operador_id": "1275"
}

```

---

## ⚙️ Regras de validação (por comanda)

Para cada `idMesa` em `numeroMesas`:

### 1) Comanda não existe

- Vai para `comandasBloqueadasParaConfirmar`
- `motivo = NAO_ENCONTRADA`

### 2) Comanda está em `conferencia`

- Pode liberar, **desde que**:
    
    
    - se existir `numeroPdvEmConferencia` e ele for **diferente** do `numeroPdv` do request → bloquear:
        
        
        - `motivo = EM_CONFERENCIA_OUTRO_PDV`
        - retornar `numeroPdvEmConferencia`
    - caso contrário → liberar com sucesso

### 3) Comanda está `livre`

- Bloquear:
    
    
    - `motivo = STATUS_LIVRE` (já está disponível)

### 4) Comanda está `consumo`

- Se tiver `pos_lancando` → bloquear:
    
    
    - `motivo = EM_LANCAMENTO_ITENS`
    - retornar `pos_lancando`
- Se **não** tiver `pos_lancando` → bloquear:
    
    
    - `motivo = NAO_ESTA_EM_CONFERENCIA`
    - (porque não é uma comanda travada para faturamento do PDV Linux)

### 5) Comanda está `transferencia`

- Bloquear:
    
    
    - `motivo = EM_TRANSFERENCIA`

### 6) Outros status

- Bloquear:
    
    
    - `motivo = STATUS_INVALIDO`

> Observação importante: mesmo parecendo “reset”, a regra do fluxo do PDV Linux é **liberar somente o que estava em conferência**, para reduzir risco de liberar mesa errada.

---

## 📤 Response – Sucesso (200)

### Quando acontece?

Quando **pelo menos 1 comanda** foi liberada/resetada com sucesso.

### Estrutura do retorno

A API sempre retorna duas listas:

<div class="contain-inline-size rounded-2xl corner-superellipse/1.1 relative bg-token-sidebar-surface-primary" id="bkmrk--7"><div class="sticky top-[calc(--spacing(9)+var(--header-height))] @w-xl/main:top-9"><div class="absolute end-0 bottom-0 flex h-9 items-center pe-2"><div class="bg-token-bg-elevated-secondary text-token-text-secondary flex items-center gap-4 rounded-sm px-2 font-sans text-xs">  
</div></div></div><div class="overflow-y-auto p-4" dir="ltr">  
</div></div>```json
{
  "comandasConfirmadasParaFaturar": [],
  "comandasBloqueadasParaConfirmar": []
}

```

---

## ✅ `comandasConfirmadasParaFaturar`

Lista das comandas que foram **liberadas/resetadas** com sucesso.

### Campos

<div class="TyagGW_tableContainer" id="bkmrk-campo-descri%C3%A7%C3%A3o-idme"><div class="group TyagGW_tableWrapper flex flex-col-reverse w-fit" tabindex="-1"><table class="w-fit min-w-(--thread-content-width)" data-end="3954" data-start="3768"><thead data-end="3789" data-start="3768"><tr data-end="3789" data-start="3768"><th data-col-size="sm" data-end="3776" data-start="3768">Campo</th><th data-col-size="sm" data-end="3789" data-start="3776">Descrição</th></tr></thead><tbody data-end="3954" data-start="3800"><tr data-end="3828" data-start="3800"><td data-col-size="sm" data-end="3811" data-start="3800">`idMesa`</td><td data-col-size="sm" data-end="3828" data-start="3811">ID da comanda</td></tr><tr data-end="3877" data-start="3829"><td data-col-size="sm" data-end="3847" data-start="3829">`codigoComanda`</td><td data-col-size="sm" data-end="3877" data-start="3847">Código exibido ao operador</td></tr><tr data-end="3919" data-start="3878"><td data-col-size="sm" data-end="3901" data-start="3878">`statusAlteradoPara`</td><td data-col-size="sm" data-end="3919" data-start="3901">Sempre `livre`</td></tr><tr data-end="3954" data-start="3920"><td data-col-size="sm" data-end="3933" data-start="3920">`mensagem`</td><td data-col-size="sm" data-end="3954" data-start="3933">Texto explicativo</td></tr></tbody></table>

</div></div>### Exemplo — 200 (todas liberadas)

<div class="contain-inline-size rounded-2xl corner-superellipse/1.1 relative bg-token-sidebar-surface-primary" id="bkmrk--9"><div class="sticky top-[calc(--spacing(9)+var(--header-height))] @w-xl/main:top-9"><div class="absolute end-0 bottom-0 flex h-9 items-center pe-2"><div class="bg-token-bg-elevated-secondary text-token-text-secondary flex items-center gap-4 rounded-sm px-2 font-sans text-xs">  
</div></div></div><div class="overflow-y-auto p-4" dir="ltr">  
</div></div>```json
{
  "comandasConfirmadasParaFaturar": [
    {
      "idMesa": 4069,
      "codigoComanda": "21",
      "statusAlteradoPara": "livre",
      "mensagem": "Comanda liberada com sucesso."
    },
    {
      "idMesa": 4070,
      "codigoComanda": "22",
      "statusAlteradoPara": "livre",
      "mensagem": "Comanda liberada com sucesso."
    }
  ],
  "comandasBloqueadasParaConfirmar": []
}

```

---

## 🚫 `comandasBloqueadasParaConfirmar`

Lista das comandas que **não puderam** ser liberadas.

### Campos

<div class="TyagGW_tableContainer" id="bkmrk-campo-descri%C3%A7%C3%A3o-idme-1"><div class="group TyagGW_tableWrapper flex flex-col-reverse w-fit" tabindex="-1"><table class="w-fit min-w-(--thread-content-width)" data-end="5036" data-start="4608"><thead data-end="4629" data-start="4608"><tr data-end="4629" data-start="4608"><th data-col-size="sm" data-end="4616" data-start="4608">Campo</th><th data-col-size="md" data-end="4629" data-start="4616">Descrição</th></tr></thead><tbody data-end="5036" data-start="4640"><tr data-end="4685" data-start="4640"><td data-col-size="sm" data-end="4651" data-start="4640">`idMesa`</td><td data-col-size="md" data-end="4685" data-start="4651">ID da comanda (quando existir)</td></tr><tr data-end="4742" data-start="4686"><td data-col-size="sm" data-end="4704" data-start="4686">`codigoComanda`</td><td data-col-size="md" data-end="4742" data-start="4704">Código da comanda (quando existir)</td></tr><tr data-end="4803" data-start="4743"><td data-col-size="sm" data-end="4759" data-start="4743">`statusAtual`</td><td data-col-size="md" data-end="4803" data-start="4759">Status atual da comanda (quando existir)</td></tr><tr data-end="4849" data-start="4804"><td data-col-size="sm" data-end="4815" data-start="4804">`motivo`</td><td data-col-size="md" data-end="4849" data-start="4815">Código padronizado do bloqueio</td></tr><tr data-end="4887" data-start="4850"><td data-col-size="sm" data-end="4863" data-start="4850">`mensagem`</td><td data-col-size="md" data-end="4887" data-start="4863">Mensagem explicativa</td></tr><tr data-end="4969" data-start="4888"><td data-col-size="sm" data-end="4915" data-start="4888">`numeroPdvEmConferencia`</td><td data-col-size="md" data-end="4969" data-start="4915">Somente quando `motivo = EM_CONFERENCIA_OUTRO_PDV`</td></tr><tr data-end="5036" data-start="4970"><td data-col-size="sm" data-end="4987" data-start="4970">`pos_lancando`</td><td data-col-size="md" data-end="5036" data-start="4987">Somente quando `motivo = EM_LANCAMENTO_ITENS`</td></tr></tbody></table>

</div></div>### Exemplo — 200 (parcial)

<div class="contain-inline-size rounded-2xl corner-superellipse/1.1 relative bg-token-sidebar-surface-primary" id="bkmrk--11"><div class="sticky top-[calc(--spacing(9)+var(--header-height))] @w-xl/main:top-9"><div class="absolute end-0 bottom-0 flex h-9 items-center pe-2"><div class="bg-token-bg-elevated-secondary text-token-text-secondary flex items-center gap-4 rounded-sm px-2 font-sans text-xs">  
</div></div></div><div class="overflow-y-auto p-4" dir="ltr">  
</div></div>```json
{
  "comandasConfirmadasParaFaturar": [
    {
      "idMesa": 4069,
      "codigoComanda": "21",
      "statusAlteradoPara": "livre",
      "mensagem": "Comanda liberada com sucesso."
    }
  ],
  "comandasBloqueadasParaConfirmar": [
    {
      "idMesa": 4070,
      "codigoComanda": "22",
      "statusAtual": "conferencia",
      "motivo": "EM_CONFERENCIA_OUTRO_PDV",
      "numeroPdvEmConferencia": "15",
      "mensagem": "Comanda está em conferência por outro PDV."
    },
    {
      "idMesa": 4073,
      "codigoComanda": "24",
      "statusAtual": "consumo",
      "motivo": "EM_LANCAMENTO_ITENS",
      "pos_lancando": [1, 2],
      "mensagem": "Comanda está em consumo tendo lançamento de itens."
    },
    {
      "codigoComanda": "1231",
      "motivo": "NAO_ENCONTRADA",
      "mensagem": "Comanda não encontrada."
    }
  ]
}

```

---

## Response – (200 Quando **nenhuma comanda** enviada pôde ser liberada/resetada.)

### Quando acontece?

Quando **nenhuma comanda** enviada pôde ser liberada/resetada.

### Comportamento esperado do PDV

- considerar que **nenhuma mesa foi liberada**;
- exibir os motivos ao operador;
- seguir procedimento operacional (ex.: tratativa gerencial/manual quando necessário).

### Exemplo — 200 (nenhuma liberada)

<div class="contain-inline-size rounded-2xl corner-superellipse/1.1 relative bg-token-sidebar-surface-primary" id="bkmrk--13"><div class="sticky top-[calc(--spacing(9)+var(--header-height))] @w-xl/main:top-9"><div class="absolute end-0 bottom-0 flex h-9 items-center pe-2"><div class="bg-token-bg-elevated-secondary text-token-text-secondary flex items-center gap-4 rounded-sm px-2 font-sans text-xs">  
</div></div></div><div class="overflow-y-auto p-4" dir="ltr">  
</div></div>```json
{
  "comandasConfirmadasParaFaturar": [],
  "comandasBloqueadasParaConfirmar": [
    {
      "idMesa": 4070,
      "codigoComanda": "22",
      "statusAtual": "conferencia",
      "motivo": "EM_CONFERENCIA_OUTRO_PDV",
      "numeroPdvEmConferencia": "15",
      "mensagem": "Comanda está em conferência por outro PDV."
    },
    {
      "idMesa": 4073,
      "codigoComanda": "24",
      "statusAtual": "consumo",
      "motivo": "EM_LANCAMENTO_ITENS",
      "pos_lancando": [1, 2],
      "mensagem": "Comanda está em consumo tendo lançamento de itens."
    },
    {
      "idMesa": 4071,
      "codigoComanda": "23",
      "statusAtual": "livre",
      "motivo": "STATUS_LIVRE",
      "mensagem": "Comanda já está livre."
    },
    {
      "codigoComanda": "1231",
      "motivo": "NAO_ENCONTRADA",
      "mensagem": "Comanda não encontrada."
    }
  ]
}

```

---

## 🧾 Enum `motivo` (mínimo)

<div class="TyagGW_tableContainer" id="bkmrk-motivo-significado-n"><div class="group TyagGW_tableWrapper flex flex-col-reverse w-fit" tabindex="-1"><table class="w-fit min-w-(--thread-content-width)" data-end="7661" data-start="7192"><thead data-end="7216" data-start="7192"><tr data-end="7216" data-start="7192"><th data-col-size="sm" data-end="7201" data-start="7192">Motivo</th><th data-col-size="md" data-end="7216" data-start="7201">Significado</th></tr></thead><tbody data-end="7661" data-start="7227"><tr data-end="7268" data-start="7227"><td data-col-size="sm" data-end="7246" data-start="7227">`NAO_ENCONTRADA`</td><td data-col-size="md" data-end="7268" data-start="7246">Comanda não existe</td></tr><tr data-end="7311" data-start="7269"><td data-col-size="sm" data-end="7286" data-start="7269">`STATUS_LIVRE`</td><td data-col-size="md" data-end="7311" data-start="7286">Comanda já está livre</td></tr><tr data-end="7407" data-start="7312"><td data-col-size="sm" data-end="7340" data-start="7312">`NAO_ESTA_EM_CONFERENCIA`</td><td data-col-size="md" data-end="7407" data-start="7340">Comanda não está em conferência (não é do fluxo de faturamento)</td></tr><tr data-end="7482" data-start="7408"><td data-col-size="sm" data-end="7437" data-start="7408">`EM_CONFERENCIA_OUTRO_PDV`</td><td data-col-size="md" data-end="7482" data-start="7437">Comanda está em conferência por outro PDV</td></tr><tr data-end="7532" data-start="7483"><td data-col-size="sm" data-end="7504" data-start="7483">`EM_TRANSFERENCIA`</td><td data-col-size="md" data-end="7532" data-start="7504">Comanda em transferência</td></tr><tr data-end="7616" data-start="7533"><td data-col-size="sm" data-end="7557" data-start="7533">`EM_LANCAMENTO_ITENS`</td><td data-col-size="md" data-end="7616" data-start="7557">Comanda em consumo com lançamento de itens em andamento</td></tr><tr data-end="7661" data-start="7617"><td data-col-size="sm" data-end="7637" data-start="7617">`STATUS_INVALIDO`</td><td data-col-size="md" data-end="7661" data-start="7637">Status não permitido</td></tr></tbody></table>

</div></div>## ✅ Boas práticas para quem integra (PDV)

- Chame `confirmar-faturamento` **somente** para comandas que você recebeu em `comandasParaFaturar` no `iniciar-faturamento`.
- Sempre trate **retorno parcial**:
    
    
    - confirme/libere as que vierem em `comandasConfirmadasParaFaturar`
    - exiba e trate operacionalmente as bloqueadas
- Não tente “forçar” liberação de comanda em conferência de outro PDV via esta API (isso deve ser endpoint administrativo/gerencial).

# API para voltar o status da comanda para consumo após abortar operação.

# 📌 API – Cancelar Faturamento de Comandas

**Endpoint:**  
`POST /api/v1/mesas-comandas/cancelar-faturamento`

---

## 🎯 Para que serve

Esta API é usada quando o PDV **iniciou o faturamento** de uma ou mais comandas (elas ficaram em **`conferencia`**) mas **o atendimento NÃO foi concluído**.

Ao chamar esta API, o Servidor de Comandas:

- remove a trava de faturamento;
- altera o status da comanda de **`conferencia` → `consumo`**;
- registra auditoria do cancelamento.

✅ Use quando:

- o operador cancelou a venda no PDV;
- houve erro antes de concluir o atendimento (ex.: falha de cadastro de item);
- o cliente desistiu antes de finalizar.

🚫 Não use quando:

- a venda foi concluída e você quer liberar a comanda para novo cliente → use **`confirmar-faturamento`**.

---

## 🔁 Onde entra no fluxo do PDV

Fluxo típico:

1. PDV chama **`iniciar-faturamento`** → recebe `comandasParaFaturar` (essas entram em `conferencia`)
2. PDV tenta concluir a venda (pagamento/emissão fiscal são do PDV)
3. Se desistiu/cancelou → chama **`cancelar-faturamento`** enviando **somente as mesas que entraram em conferência**

> ⚠️ Boa prática obrigatória:  
> Envie para `cancelar-faturamento` **somente** as comandas que retornaram em `comandasParaFaturar` no `iniciar-faturamento`.

---

## 🔐 Autenticação

Segue o padrão de autenticação do Servidor de Comandas (definido pelo projeto).

> Se houver falha, o servidor retornará HTTP 401/403.

---

## 📥 Request

### Body (JSON)

<div class="TyagGW_tableContainer" id="bkmrk-campo-tipo-obrigat%C3%B3r"><div class="group TyagGW_tableWrapper flex flex-col-reverse w-fit" tabindex="-1"><table class="w-fit min-w-(--thread-content-width)" data-end="2056" data-start="1774"><thead data-end="1816" data-start="1774"><tr data-end="1816" data-start="1774"><th data-col-size="sm" data-end="1782" data-start="1774">Campo</th><th data-col-size="sm" data-end="1789" data-start="1782">Tipo</th><th data-col-size="sm" data-end="1803" data-start="1789">Obrigatório</th><th data-col-size="sm" data-end="1816" data-start="1803">Descrição</th></tr></thead><tbody data-end="2056" data-start="1836"><tr data-end="1910" data-start="1836"><td data-col-size="sm" data-end="1852" data-start="1836">`numeroMesas`</td><td data-col-size="sm" data-end="1865" data-start="1852">`number[]`</td><td data-col-size="sm" data-end="1869" data-start="1865">✅</td><td data-col-size="sm" data-end="1910" data-start="1869">IDs das comandas a cancelar (em lote)</td></tr><tr data-end="1983" data-start="1911"><td data-col-size="sm" data-end="1925" data-start="1911">`numeroPdv`</td><td data-col-size="sm" data-end="1936" data-start="1925">`string`</td><td data-col-size="sm" data-end="1940" data-start="1936">✅</td><td data-col-size="sm" data-end="1983" data-start="1940">Número/identificação do PDV solicitante</td></tr><tr data-end="2056" data-start="1984"><td data-col-size="sm" data-end="2000" data-start="1984">`operador_id`</td><td data-col-size="sm" data-end="2011" data-start="2000">`string`</td><td data-col-size="sm" data-end="2015" data-start="2011">✅</td><td data-col-size="sm" data-end="2056" data-start="2015">Identificação do operador solicitante</td></tr></tbody></table>

</div></div>### Exemplo

<div class="contain-inline-size rounded-2xl corner-superellipse/1.1 relative bg-token-sidebar-surface-primary" id="bkmrk--4"><div class="sticky top-[calc(--spacing(9)+var(--header-height))] @w-xl/main:top-9"><div class="absolute end-0 bottom-0 flex h-9 items-center pe-2"><div class="bg-token-bg-elevated-secondary text-token-text-secondary flex items-center gap-4 rounded-sm px-2 font-sans text-xs">  
</div></div></div><div class="overflow-y-auto p-4" dir="ltr">  
</div></div>```json
{
  "numeroMesas": [4069, 4070, 4075],
  "numeroPdv": "12",
  "operador_id": "1275"
}

```

---

## ✅ O que o servidor faz (regras por comanda)

O servidor avalia **cada idMesa individualmente** e pode cancelar algumas e bloquear outras (retorno parcial).

### Quando a comanda é cancelada com sucesso

- Se `status = conferencia` **e** (se existir) `numeroPdvEmConferencia == numeroPdv` do request  
    → servidor altera status para `consumo` e retorna em `comandasCanceladasParaFaturar`.

### Quando a comanda é bloqueada

A comanda entra em `comandasBloqueadasParaCancelar` nos casos:

<div class="TyagGW_tableContainer" id="bkmrk-situa%C3%A7%C3%A3o-motivo-camp"><div class="group TyagGW_tableWrapper flex flex-col-reverse w-fit" tabindex="-1"><table class="w-fit min-w-(--thread-content-width)" data-end="3145" data-start="2660"><thead data-end="2695" data-start="2660"><tr data-end="2695" data-start="2660"><th data-col-size="md" data-end="2671" data-start="2660">Situação</th><th data-col-size="sm" data-end="2680" data-start="2671">Motivo</th><th data-col-size="sm" data-end="2695" data-start="2680">Campo extra</th></tr></thead><tbody data-end="3145" data-start="2710"><tr data-end="2755" data-start="2710"><td data-col-size="md" data-end="2731" data-start="2710">Comanda não existe</td><td data-col-size="sm" data-end="2750" data-start="2731">`NAO_ENCONTRADA`</td><td data-col-size="sm" data-end="2755" data-start="2750">—</td></tr><tr data-end="2852" data-start="2756"><td data-col-size="md" data-end="2795" data-start="2756">`status = conferencia` por outro PDV</td><td data-col-size="sm" data-end="2824" data-start="2795">`EM_CONFERENCIA_OUTRO_PDV`</td><td data-col-size="sm" data-end="2852" data-start="2824">`numeroPdvEmConferencia`</td></tr><tr data-end="2907" data-start="2853"><td data-col-size="md" data-end="2874" data-start="2853">`status = consumo`</td><td data-col-size="sm" data-end="2902" data-start="2874">`NAO_ESTA_EM_CONFERENCIA`</td><td data-col-size="sm" data-end="2907" data-start="2902">—</td></tr><tr data-end="2949" data-start="2908"><td data-col-size="md" data-end="2927" data-start="2908">`status = livre`</td><td data-col-size="sm" data-end="2944" data-start="2927">`STATUS_LIVRE`</td><td data-col-size="sm" data-end="2949" data-start="2944">—</td></tr><tr data-end="3003" data-start="2950"><td data-col-size="md" data-end="2977" data-start="2950">`status = transferencia`</td><td data-col-size="sm" data-end="2998" data-start="2977">`EM_TRANSFERENCIA`</td><td data-col-size="sm" data-end="3003" data-start="2998">—</td></tr><tr data-end="3095" data-start="3004"><td data-col-size="md" data-end="3053" data-start="3004">`status = consumo` com lançamento em andamento</td><td data-col-size="sm" data-end="3077" data-start="3053">`EM_LANCAMENTO_ITENS`</td><td data-col-size="sm" data-end="3095" data-start="3077">`pos_lancando`</td></tr><tr data-end="3145" data-start="3096"><td data-col-size="md" data-end="3120" data-start="3096">qualquer outro status</td><td data-col-size="sm" data-end="3140" data-start="3120">`STATUS_INVALIDO`</td><td data-col-size="sm" data-end="3145" data-start="3140">—</td></tr></tbody></table>

</div></div>---

## 📤 Response

### ✅ 200 – Cancelamento total ou parcial

Retorna **200** quando **pelo menos 1 comanda** foi cancelada com sucesso.

#### Estrutura

<div class="contain-inline-size rounded-2xl corner-superellipse/1.1 relative bg-token-sidebar-surface-primary" id="bkmrk--7"><div class="sticky top-[calc(--spacing(9)+var(--header-height))] @w-xl/main:top-9"><div class="absolute end-0 bottom-0 flex h-9 items-center pe-2"><div class="bg-token-bg-elevated-secondary text-token-text-secondary flex items-center gap-4 rounded-sm px-2 font-sans text-xs">  
</div></div></div><div class="overflow-y-auto p-4" dir="ltr">  
</div></div>```json
{
  "comandasCanceladasParaFaturar": [],
  "comandasBloqueadasParaCancelar": []
}

```

---

### `comandasCanceladasParaFaturar[]` (sucesso)

Lista de comandas que foram efetivamente destravadas:

<div class="TyagGW_tableContainer" id="bkmrk-campo-descri%C3%A7%C3%A3o-idme"><div class="group TyagGW_tableWrapper flex flex-col-reverse w-fit" tabindex="-1"><table class="w-fit min-w-(--thread-content-width)" data-end="3708" data-start="3504"><thead data-end="3525" data-start="3504"><tr data-end="3525" data-start="3504"><th data-col-size="sm" data-end="3512" data-start="3504">Campo</th><th data-col-size="sm" data-end="3525" data-start="3512">Descrição</th></tr></thead><tbody data-end="3708" data-start="3536"><tr data-end="3564" data-start="3536"><td data-col-size="sm" data-end="3547" data-start="3536">`idMesa`</td><td data-col-size="sm" data-end="3564" data-start="3547">ID da comanda</td></tr><tr data-end="3618" data-start="3565"><td data-col-size="sm" data-end="3583" data-start="3565">`codigoComanda`</td><td data-col-size="sm" data-end="3618" data-start="3583">Código/identificador da comanda</td></tr><tr data-end="3664" data-start="3619"><td data-col-size="sm" data-end="3642" data-start="3619">`statusAlteradoPara`</td><td data-col-size="sm" data-end="3664" data-start="3642">Sempre `"consumo"`</td></tr><tr data-end="3708" data-start="3665"><td data-col-size="sm" data-end="3678" data-start="3665">`mensagem`</td><td data-col-size="sm" data-end="3708" data-start="3678">Mensagem para exibição/log</td></tr></tbody></table>

</div></div>---

### `comandasBloqueadasParaCancelar[]` (bloqueios)

Lista de comandas que não puderam ser canceladas:

<div class="TyagGW_tableContainer" id="bkmrk-campo-descri%C3%A7%C3%A3o-idme-1"><div class="group TyagGW_tableWrapper flex flex-col-reverse w-fit" tabindex="-1"><table class="w-fit min-w-(--thread-content-width)" data-end="4202" data-start="3817"><thead data-end="3838" data-start="3817"><tr data-end="3838" data-start="3817"><th data-col-size="sm" data-end="3825" data-start="3817">Campo</th><th data-col-size="sm" data-end="3838" data-start="3825">Descrição</th></tr></thead><tbody data-end="4202" data-start="3849"><tr data-end="3894" data-start="3849"><td data-col-size="sm" data-end="3860" data-start="3849">`idMesa`</td><td data-col-size="sm" data-end="3894" data-start="3860">ID da comanda (quando existir)</td></tr><tr data-end="3951" data-start="3895"><td data-col-size="sm" data-end="3913" data-start="3895">`codigoComanda`</td><td data-col-size="sm" data-end="3951" data-start="3913">Código da comanda (quando existir)</td></tr><tr data-end="4001" data-start="3952"><td data-col-size="sm" data-end="3968" data-start="3952">`statusAtual`</td><td data-col-size="sm" data-end="4001" data-start="3968">Status atual (quando existir)</td></tr><tr data-end="4035" data-start="4002"><td data-col-size="sm" data-end="4013" data-start="4002">`motivo`</td><td data-col-size="sm" data-end="4035" data-start="4013">Código do bloqueio</td></tr><tr data-end="4073" data-start="4036"><td data-col-size="sm" data-end="4049" data-start="4036">`mensagem`</td><td data-col-size="sm" data-end="4073" data-start="4049">Mensagem explicativa</td></tr><tr data-end="4145" data-start="4074"><td data-col-size="sm" data-end="4101" data-start="4074">`numeroPdvEmConferencia`</td><td data-col-size="sm" data-end="4145" data-start="4101">Apenas quando `EM_CONFERENCIA_OUTRO_PDV`</td></tr><tr data-end="4202" data-start="4146"><td data-col-size="sm" data-end="4163" data-start="4146">`pos_lancando`</td><td data-col-size="sm" data-end="4202" data-start="4163">Apenas quando `EM_LANCAMENTO_ITENS`</td></tr></tbody></table>

</div></div>---

## ✅ Exemplo — 200 (cancelamento completo)

```json
{
  "comandasCanceladasParaFaturar": [
    {
      "idMesa": 4069,
      "codigoComanda": "21",
      "statusAlteradoPara": "consumo",
      "mensagem": "Faturamento cancelado com sucesso. Comanda retornou para consumo."
    },
    {
      "idMesa": 4070,
      "codigoComanda": "22",
      "statusAlteradoPara": "consumo",
      "mensagem": "Faturamento cancelado com sucesso. Comanda retornou para consumo."
    }
  ],
  "comandasBloqueadasParaCancelar": []
}

```

<div class="contain-inline-size rounded-2xl corner-superellipse/1.1 relative bg-token-sidebar-surface-primary" id="bkmrk--11"><div class="sticky top-[calc(--spacing(9)+var(--header-height))] @w-xl/main:top-9"><div class="absolute end-0 bottom-0 flex h-9 items-center pe-2"><div class="bg-token-bg-elevated-secondary text-token-text-secondary flex items-center gap-4 rounded-sm px-2 font-sans text-xs">  
</div></div></div></div>---

## ✅ Exemplo — 200 (parcial)

<div class="contain-inline-size rounded-2xl corner-superellipse/1.1 relative bg-token-sidebar-surface-primary" id="bkmrk--13"><div class="sticky top-[calc(--spacing(9)+var(--header-height))] @w-xl/main:top-9"><div class="absolute end-0 bottom-0 flex h-9 items-center pe-2"><div class="bg-token-bg-elevated-secondary text-token-text-secondary flex items-center gap-4 rounded-sm px-2 font-sans text-xs">  
</div></div></div><div class="overflow-y-auto p-4" dir="ltr">  
</div></div>```json
{
  "comandasCanceladasParaFaturar": [
    {
      "idMesa": 4069,
      "codigoComanda": "21",
      "statusAlteradoPara": "consumo",
      "mensagem": "Faturamento cancelado com sucesso. Comanda retornou para consumo."
    }
  ],
  "comandasBloqueadasParaCancelar": [
    {
      "idMesa": 4070,
      "codigoComanda": "22",
      "statusAtual": "conferencia",
      "motivo": "EM_CONFERENCIA_OUTRO_PDV",
      "numeroPdvEmConferencia": "15",
      "mensagem": "Comanda está em conferência por outro PDV."
    },
    {
      "idMesa": 4072,
      "codigoComanda": "24",
      "statusAtual": "transferencia",
      "motivo": "EM_TRANSFERENCIA",
      "mensagem": "Comanda está em transferência de itens e não pode ser cancelada."
    }
  ]
}

```

---

## 200 — nenhuma comanda cancelável

Retorna erro quando **0 comandas** puderam ser canceladas.

### Exemplo — 200

<div class="contain-inline-size rounded-2xl corner-superellipse/1.1 relative bg-token-sidebar-surface-primary" id="bkmrk--15"><div class="sticky top-[calc(--spacing(9)+var(--header-height))] @w-xl/main:top-9"><div class="absolute end-0 bottom-0 flex h-9 items-center pe-2"><div class="bg-token-bg-elevated-secondary text-token-text-secondary flex items-center gap-4 rounded-sm px-2 font-sans text-xs">  
</div></div></div><div class="overflow-y-auto p-4" dir="ltr">  
</div></div>```json
{
  "comandasCanceladasParaFaturar": [],
  "comandasBloqueadasParaCancelar": [
    {
      "idMesa": 4070,
      "codigoComanda": "22",
      "statusAtual": "livre",
      "motivo": "STATUS_LIVRE",
      "mensagem": "Comanda está livre e não possui faturamento para cancelar."
    },
    {
      "idMesa": 4073,
      "codigoComanda": "26",
      "statusAtual": "consumo",
      "motivo": "NAO_ESTA_EM_CONFERENCIA",
      "mensagem": "Comanda não está em conferência."
    },
    {
      "codigoComanda": "9999",
      "motivo": "NAO_ENCONTRADA",
      "mensagem": "Comanda não encontrada."
    }
  ]
}

```

---

## 🧾 Enum `motivo` (mínimo)

- `NAO_ENCONTRADA`
- `NAO_ESTA_EM_CONFERENCIA`
- `STATUS_LIVRE`
- `EM_TRANSFERENCIA`
- `EM_LANCAMENTO_ITENS`
- `EM_CONFERENCIA_OUTRO_PDV`
- `STATUS_INVALIDO`

---

## ✅ Boas práticas para integradores (PDV)

- Sempre trate **retorno parcial**.
- Envie apenas as comandas que você recebeu em `comandasParaFaturar` no `iniciar-faturamento`.
- Se vier `EM_CONFERENCIA_OUTRO_PDV`, isso é **tratativa gerencial/manual** (não tente “resolver” pelo PDV).
- Após cancelar, o PDV deve:
    
    
    - limpar o contexto da venda local;
    - permitir que a comanda seja faturada novamente.

# Requisitos Servidor Comandas

**<span style="font-size: 14.0pt; color: #2e6da4;">AVANÇO INFORMÁTICA</span>**

**<span style="font-size: 26.0pt; color: #1a3a5c;">Servidor Comandas</span>**

<span style="font-size: 14.0pt; color: #444444;">Guia de Requisitos para Implantação</span>

<span style="font-size: 10.0pt; color: #666666;">Este documento descreve os requisitos de hardware, sistema operacional e infraestrutura de rede necessários para a instalação e operação do Servidor Comandas em ambiente do cliente.</span>

# 1. Visão Geral da Solução

<span style="color: #444444;">O Servidor Comandas é o componente central responsável por intermediar a comunicação entre os dispositivos do ambiente do cliente. Ele recebe e processa requisições provenientes de:</span>

<span style="mso-list: Ignore;">•<span style="font: 7.0pt 'Times New Roman';"> </span></span><span style="color: #444444;">App de Comandas / PDV Mobile (dispositivos SmartPOS) — comunicação via API REST sobre Wi-Fi.</span>

<span style="mso-list: Ignore;">•<span style="font: 7.0pt 'Times New Roman';"> </span></span><span style="color: #444444;">PDV Legado Desktop (Linux) — comunicação via rede cabeada.</span>

<span style="color: #444444;">Além disso, o Servidor Comandas precisa ter acesso ao servidor do Sistema Integral (ERP Linux), que é a máquina responsável pela gestão central dos dados do cliente.</span>

<span style="color: #444444;">Para que toda a solução funcione corretamente, é fundamental que a infraestrutura de rede e a máquina do Servidor Comandas atendam integralmente aos requisitos descritos neste documento.</span>

# 2. Topologia de Comunicação e Requisitos de Rede

<span style="color: #444444;">A ilustração abaixo representa a topologia de comunicação entre os componentes da solução:</span>

<table border="1" cellpadding="0" cellspacing="0" class="MsoNormalTable" id="bkmrk-componente-tipo-de-c" style="width: 468pt; border-collapse: collapse; border: none; height: 289.922px;" width="624"><thead><tr style="height: 31.1094px;"><td style="width: 140pt; border: 1pt solid rgb(187, 207, 224); background: rgb(31, 78, 121); padding: 5pt 8pt; height: 31.1094px;" valign="top" width="187">**<span style="font-size: 10.0pt; color: white;">Componente</span>**

</td><td style="width: 110pt; border-top: 1pt solid rgb(187, 207, 224); border-right: 1pt solid rgb(187, 207, 224); border-bottom: 1pt solid rgb(187, 207, 224); border-image: initial; border-left: none; background: rgb(31, 78, 121); padding: 5pt 8pt; height: 31.1094px;" valign="top" width="147">**<span style="font-size: 10.0pt; color: white;">Tipo de Conexão</span>**

</td><td style="width: 218pt; border-top: 1pt solid rgb(187, 207, 224); border-right: 1pt solid rgb(187, 207, 224); border-bottom: 1pt solid rgb(187, 207, 224); border-image: initial; border-left: none; background: rgb(31, 78, 121); padding: 5pt 8pt; height: 31.1094px;" valign="top" width="291">**<span style="font-size: 10.0pt; color: white;">Requisito de Rede</span>**

</td></tr></thead><tbody><tr style="height: 47.9062px;"><td style="width: 140pt; border-right: 1pt solid rgb(187, 207, 224); border-bottom: 1pt solid rgb(187, 207, 224); border-left: 1pt solid rgb(187, 207, 224); border-image: initial; border-top: none; padding: 5pt 8pt; height: 47.9062px;" valign="top" width="187"><span style="font-size: 10.0pt; color: #444444;">SmartPOS (App Comandas / PDV Mobile)</span>

</td><td style="width: 110pt; border-top: none; border-left: none; border-bottom: 1pt solid rgb(187, 207, 224); border-right: 1pt solid rgb(187, 207, 224); padding: 5pt 8pt; height: 47.9062px;" valign="top" width="147"><span style="font-size: 10.0pt; color: #444444;">Wi-Fi</span>

</td><td style="width: 218pt; border-top: none; border-left: none; border-bottom: 1pt solid rgb(187, 207, 224); border-right: 1pt solid rgb(187, 207, 224); padding: 5pt 8pt; height: 47.9062px;" valign="top" width="291"><span style="font-size: 10.0pt; color: #444444;">Deve estar conectado à rede Wi-Fi que permita acesso ao Servidor Comandas e também a internet. </span>

</td></tr><tr style="height: 81.5px;"><td style="width: 140pt; border-right: 1pt solid rgb(187, 207, 224); border-bottom: 1pt solid rgb(187, 207, 224); border-left: 1pt solid rgb(187, 207, 224); border-image: initial; border-top: none; padding: 5pt 8pt; height: 81.5px;" valign="top" width="187"><span style="font-size: 10.0pt; color: #444444;">PDV Legado Desktop (Linux)</span>

</td><td style="width: 110pt; border-top: none; border-left: none; border-bottom: 1pt solid rgb(187, 207, 224); border-right: 1pt solid rgb(187, 207, 224); padding: 5pt 8pt; height: 81.5px;" valign="top" width="147"><span style="font-size: 10.0pt; color: #444444;">Cabo de rede (Ethernet)</span>

</td><td style="width: 218pt; border-top: none; border-left: none; border-bottom: 1pt solid rgb(187, 207, 224); border-right: 1pt solid rgb(187, 207, 224); padding: 5pt 8pt; height: 81.5px;" valign="top" width="291"><span style="font-size: 10.0pt; color: #444444;">Deve estar conectado via cabo na rede que permita acesso ao Servidor Comandas e ao servidor do Sistema Integral (ERP) e também a internet.</span>

</td></tr><tr style="height: 81.5px;"><td style="width: 140pt; border-right: 1pt solid rgb(187, 207, 224); border-bottom: 1pt solid rgb(187, 207, 224); border-left: 1pt solid rgb(187, 207, 224); border-image: initial; border-top: none; padding: 5pt 8pt; height: 81.5px;" valign="top" width="187"><span style="font-size: 10.0pt; color: #444444;">Servidor Comandas (Windows)</span>

</td><td style="width: 110pt; border-top: none; border-left: none; border-bottom: 1pt solid rgb(187, 207, 224); border-right: 1pt solid rgb(187, 207, 224); padding: 5pt 8pt; height: 81.5px;" valign="top" width="147"><span style="font-size: 10.0pt; color: #444444;">Cabo de rede (Ethernet)</span>

</td><td style="width: 218pt; border-top: none; border-left: none; border-bottom: 1pt solid rgb(187, 207, 224); border-right: 1pt solid rgb(187, 207, 224); padding: 5pt 8pt; height: 81.5px;" valign="top" width="291"><span style="font-size: 10.0pt; color: #444444;">Deve estar na rede que permita comunicação com: SmartPOS (Wi-Fi), PDV Linux (cabeado) e servidor do Sistema Integral (ERP Linux) como também a internet.</span>

</td></tr><tr style="height: 47.9062px;"><td style="width: 140pt; border-right: 1pt solid rgb(187, 207, 224); border-bottom: 1pt solid rgb(187, 207, 224); border-left: 1pt solid rgb(187, 207, 224); border-image: initial; border-top: none; padding: 5pt 8pt; height: 47.9062px;" valign="top" width="187"><span style="font-size: 10.0pt; color: #444444;">Servidor do Sistema Integral (ERP Linux)</span>

</td><td style="width: 110pt; border-top: none; border-left: none; border-bottom: 1pt solid rgb(187, 207, 224); border-right: 1pt solid rgb(187, 207, 224); padding: 5pt 8pt; height: 47.9062px;" valign="top" width="147"><span style="font-size: 10.0pt; color: #444444;">Cabo de rede (Ethernet)</span>

</td><td style="width: 218pt; border-top: none; border-left: none; border-bottom: 1pt solid rgb(187, 207, 224); border-right: 1pt solid rgb(187, 207, 224); padding: 5pt 8pt; height: 47.9062px;" valign="top" width="291"><span style="font-size: 10.0pt; color: #444444;">Deve estar acessível pelo Servidor Comandas e pelo PDV Legado Linux.</span>

</td></tr></tbody></table>

## 2.1 Requisitos Detalhados de Rede

**<span style="color: #c55a11;">⚠ Atenção: </span>**<span style="color: #7b3f00;">A comunicação entre todos os componentes ocorre pela rede local (LAN) do cliente. O Servidor Comandas deve conseguir se comunicar simultaneamente com os SmartPOS via Wi-Fi e com o PDV Linux e o servidor do ERP via cabo.</span>

<table border="1" cellpadding="0" cellspacing="0" class="MsoNormalTable" id="bkmrk-requisito-descri%C3%A7%C3%A3o-" style="width: 468.0pt; border-collapse: collapse; border: none; mso-border-alt: solid windowtext .5pt; mso-yfti-tbllook: 1184; mso-padding-alt: 0cm .5pt 0cm .5pt; mso-border-insideh: .5pt solid windowtext; mso-border-insidev: .5pt solid windowtext;" width="624"><thead><tr style="mso-yfti-irow: 0; mso-yfti-firstrow: yes;"><td style="width: 160.0pt; border: solid #BBCFE0 1.0pt; mso-border-alt: solid #BBCFE0 .25pt; background: #1F4E79; padding: 5.0pt 8.0pt 5.0pt 8.0pt;" valign="top" width="213">**<span style="font-size: 10.0pt; color: white;">Requisito</span>**

</td><td style="width: 308.0pt; border: solid #BBCFE0 1.0pt; border-left: none; mso-border-left-alt: solid #BBCFE0 .25pt; mso-border-alt: solid #BBCFE0 .25pt; background: #1F4E79; padding: 5.0pt 8.0pt 5.0pt 8.0pt;" valign="top" width="411">**<span style="font-size: 10.0pt; color: white;">Descrição</span>**

</td></tr></thead><tbody><tr style="mso-yfti-irow: 1;"><td style="width: 160.0pt; border: solid #BBCFE0 1.0pt; border-top: none; mso-border-top-alt: solid #BBCFE0 .25pt; mso-border-alt: solid #BBCFE0 .25pt; padding: 5.0pt 8.0pt 5.0pt 8.0pt;" valign="top" width="213"><span style="font-size: 10.0pt; color: #444444;">Padrão de rede</span>

</td><td style="width: 308.0pt; border-top: none; border-left: none; border-bottom: solid #BBCFE0 1.0pt; border-right: solid #BBCFE0 1.0pt; mso-border-top-alt: solid #BBCFE0 .25pt; mso-border-left-alt: solid #BBCFE0 .25pt; mso-border-alt: solid #BBCFE0 .25pt; padding: 5.0pt 8.0pt 5.0pt 8.0pt;" valign="top" width="411"><span style="font-size: 10.0pt; color: #444444;">Ethernet 10/100/1000 Mbps (Gigabit Ethernet recomendado).</span>

</td></tr><tr style="mso-yfti-irow: 2;"><td style="width: 160.0pt; border: solid #BBCFE0 1.0pt; border-top: none; mso-border-top-alt: solid #BBCFE0 .25pt; mso-border-alt: solid #BBCFE0 .25pt; padding: 5.0pt 8.0pt 5.0pt 8.0pt;" valign="top" width="213"><span style="font-size: 10.0pt; color: #444444;">Topologia</span>

</td><td style="width: 308.0pt; border-top: none; border-left: none; border-bottom: solid #BBCFE0 1.0pt; border-right: solid #BBCFE0 1.0pt; mso-border-top-alt: solid #BBCFE0 .25pt; mso-border-left-alt: solid #BBCFE0 .25pt; mso-border-alt: solid #BBCFE0 .25pt; padding: 5.0pt 8.0pt 5.0pt 8.0pt;" valign="top" width="411"><span style="font-size: 10.0pt; color: #444444;">Todos os dispositivos devem estar na mesma rede local (LAN) ou com roteamento adequado entre sub-redes.</span>

</td></tr><tr style="mso-yfti-irow: 3;"><td style="width: 160.0pt; border: solid #BBCFE0 1.0pt; border-top: none; mso-border-top-alt: solid #BBCFE0 .25pt; mso-border-alt: solid #BBCFE0 .25pt; padding: 5.0pt 8.0pt 5.0pt 8.0pt;" valign="top" width="213"><span style="font-size: 10.0pt; color: #444444;">IP estático — Servidor Comandas</span>

</td><td style="width: 308.0pt; border-top: none; border-left: none; border-bottom: solid #BBCFE0 1.0pt; border-right: solid #BBCFE0 1.0pt; mso-border-top-alt: solid #BBCFE0 .25pt; mso-border-left-alt: solid #BBCFE0 .25pt; mso-border-alt: solid #BBCFE0 .25pt; padding: 5.0pt 8.0pt 5.0pt 8.0pt;" valign="top" width="411"><span style="font-size: 10.0pt; color: #444444;">É obrigatório configurar um endereço IP fixo (estático) na máquina do Servidor Comandas, para que os SmartPOS e o PDV Linux sempre consigam localizá-lo.</span>

</td></tr><tr style="mso-yfti-irow: 5;"><td style="width: 160.0pt; border: solid #BBCFE0 1.0pt; border-top: none; mso-border-top-alt: solid #BBCFE0 .25pt; mso-border-alt: solid #BBCFE0 .25pt; padding: 5.0pt 8.0pt 5.0pt 8.0pt;" valign="top" width="213"><span style="font-size: 10.0pt; color: #444444;">Firewall / Bloqueios</span>

</td><td style="width: 308.0pt; border-top: none; border-left: none; border-bottom: solid #BBCFE0 1.0pt; border-right: solid #BBCFE0 1.0pt; mso-border-top-alt: solid #BBCFE0 .25pt; mso-border-left-alt: solid #BBCFE0 .25pt; mso-border-alt: solid #BBCFE0 .25pt; padding: 5.0pt 8.0pt 5.0pt 8.0pt;" valign="top" width="411"><span style="font-size: 10.0pt; color: #444444;">As portas utilizadas pela aplicação Servidor Comandas devem estar liberadas no firewall da rede e no firewall do Windows da máquina. As portas específicas serão informadas pela equipe de implantação.</span>

</td></tr><tr style="mso-yfti-irow: 6;"><td style="width: 160.0pt; border: solid #BBCFE0 1.0pt; border-top: none; mso-border-top-alt: solid #BBCFE0 .25pt; mso-border-alt: solid #BBCFE0 .25pt; padding: 5.0pt 8.0pt 5.0pt 8.0pt;" valign="top" width="213"><span style="font-size: 10.0pt; color: #444444;">Wi-Fi (SmartPOS)</span>

</td><td style="width: 308.0pt; border-top: none; border-left: none; border-bottom: solid #BBCFE0 1.0pt; border-right: solid #BBCFE0 1.0pt; mso-border-top-alt: solid #BBCFE0 .25pt; mso-border-left-alt: solid #BBCFE0 .25pt; mso-border-alt: solid #BBCFE0 .25pt; padding: 5.0pt 8.0pt 5.0pt 8.0pt;" valign="top" width="411"><span style="font-size: 10.0pt; color: #444444;">O roteador ou access point Wi-Fi deve estar na mesma rede ou ter roteamento para o Servidor Comandas. Sinal estável e sem isolamento de cliente (AP Isolation desativado).</span>

</td></tr><tr style="mso-yfti-irow: 7;"><td style="width: 160.0pt; border: solid #BBCFE0 1.0pt; border-top: none; mso-border-top-alt: solid #BBCFE0 .25pt; mso-border-alt: solid #BBCFE0 .25pt; padding: 5.0pt 8.0pt 5.0pt 8.0pt;" valign="top" width="213"><span style="font-size: 10.0pt; color: #444444;">Cabo de rede (PDV Linux)</span>

</td><td style="width: 308.0pt; border-top: none; border-left: none; border-bottom: solid #BBCFE0 1.0pt; border-right: solid #BBCFE0 1.0pt; mso-border-top-alt: solid #BBCFE0 .25pt; mso-border-left-alt: solid #BBCFE0 .25pt; mso-border-alt: solid #BBCFE0 .25pt; padding: 5.0pt 8.0pt 5.0pt 8.0pt;" valign="top" width="411"><span style="font-size: 10.0pt; color: #444444;">Conexão física obrigatória via cabo Ethernet entre o PDV Linux e o switch ou roteador da rede do cliente.</span>

</td></tr><tr style="mso-yfti-irow: 8; mso-yfti-lastrow: yes;"><td style="width: 160.0pt; border: solid #BBCFE0 1.0pt; border-top: none; mso-border-top-alt: solid #BBCFE0 .25pt; mso-border-alt: solid #BBCFE0 .25pt; padding: 5.0pt 8.0pt 5.0pt 8.0pt;" valign="top" width="213"><span style="font-size: 10.0pt; color: #444444;">Velocidade mínima recomendada</span>

</td><td style="width: 308.0pt; border-top: none; border-left: none; border-bottom: solid #BBCFE0 1.0pt; border-right: solid #BBCFE0 1.0pt; mso-border-top-alt: solid #BBCFE0 .25pt; mso-border-left-alt: solid #BBCFE0 .25pt; mso-border-alt: solid #BBCFE0 .25pt; padding: 5.0pt 8.0pt 5.0pt 8.0pt;" valign="top" width="411"><span style="font-size: 10.0pt; color: #444444;">Rede local com pelo menos 100 Mbps entre os dispositivos.</span>

</td></tr></tbody></table>

# 3. Requisitos de Hardware — Máquina do Servidor Comandas

<span style="color: #444444;">A máquina destinada a operar o Servidor Comandas deve atender às especificações mínimas a seguir. Recomendamos fortemente o uso das configurações recomendadas para garantir estabilidade e desempenho adequados.</span>

<table border="1" cellpadding="0" cellspacing="0" class="MsoNormalTable" id="bkmrk-componente-especific" style="width: 468.0pt; border-collapse: collapse; border: none; mso-border-alt: solid windowtext .5pt; mso-yfti-tbllook: 1184; mso-padding-alt: 0cm .5pt 0cm .5pt; mso-border-insideh: .5pt solid windowtext; mso-border-insidev: .5pt solid windowtext;" width="624"><thead><tr style="mso-yfti-irow: 0; mso-yfti-firstrow: yes;"><td style="width: 125.0pt; border: solid #BBCFE0 1.0pt; mso-border-alt: solid #BBCFE0 .25pt; background: #1F4E79; padding: 5.0pt 8.0pt 5.0pt 8.0pt;" valign="top" width="167">**<span style="font-size: 10.0pt; color: white;">Componente</span>**

</td><td style="width: 175.0pt; border: solid #BBCFE0 1.0pt; border-left: none; mso-border-left-alt: solid #BBCFE0 .25pt; mso-border-alt: solid #BBCFE0 .25pt; background: #1F4E79; padding: 5.0pt 8.0pt 5.0pt 8.0pt;" valign="top" width="233">**<span style="font-size: 10.0pt; color: white;">Especificação Mínima</span>**

</td><td style="width: 168.0pt; border: solid #BBCFE0 1.0pt; border-left: none; mso-border-left-alt: solid #BBCFE0 .25pt; mso-border-alt: solid #BBCFE0 .25pt; background: #1F4E79; padding: 5.0pt 8.0pt 5.0pt 8.0pt;" valign="top" width="224">**<span style="font-size: 10.0pt; color: white;">Especificação Recomendada</span>**

</td></tr></thead><tbody><tr style="mso-yfti-irow: 1;"><td style="width: 125.0pt; border: solid #BBCFE0 1.0pt; border-top: none; mso-border-top-alt: solid #BBCFE0 .25pt; mso-border-alt: solid #BBCFE0 .25pt; padding: 5.0pt 8.0pt 5.0pt 8.0pt;" valign="top" width="167"><span style="font-size: 10.0pt; color: #444444;">Sistema Operacional</span>

</td><td style="width: 175.0pt; border-top: none; border-left: none; border-bottom: solid #BBCFE0 1.0pt; border-right: solid #BBCFE0 1.0pt; mso-border-top-alt: solid #BBCFE0 .25pt; mso-border-left-alt: solid #BBCFE0 .25pt; mso-border-alt: solid #BBCFE0 .25pt; padding: 5.0pt 8.0pt 5.0pt 8.0pt;" valign="top" width="233"><span style="font-size: 10.0pt; color: #444444;">Windows 11 — 64 bits</span>

</td><td style="width: 168.0pt; border-top: none; border-left: none; border-bottom: solid #BBCFE0 1.0pt; border-right: solid #BBCFE0 1.0pt; mso-border-top-alt: solid #BBCFE0 .25pt; mso-border-left-alt: solid #BBCFE0 .25pt; mso-border-alt: solid #BBCFE0 .25pt; padding: 5.0pt 8.0pt 5.0pt 8.0pt;" valign="top" width="224"><span style="font-size: 10.0pt; color: #444444;">Windows 11 — 64 bits</span>

</td></tr><tr style="mso-yfti-irow: 2;"><td style="width: 125.0pt; border: solid #BBCFE0 1.0pt; border-top: none; mso-border-top-alt: solid #BBCFE0 .25pt; mso-border-alt: solid #BBCFE0 .25pt; padding: 5.0pt 8.0pt 5.0pt 8.0pt;" valign="top" width="167"><span style="font-size: 10.0pt; color: #444444;">Processador</span>

</td><td style="width: 175.0pt; border-top: none; border-left: none; border-bottom: solid #BBCFE0 1.0pt; border-right: solid #BBCFE0 1.0pt; mso-border-top-alt: solid #BBCFE0 .25pt; mso-border-left-alt: solid #BBCFE0 .25pt; mso-border-alt: solid #BBCFE0 .25pt; padding: 5.0pt 8.0pt 5.0pt 8.0pt;" valign="top" width="233"><span style="font-size: 10.0pt; color: #444444;">Intel Core i3 (ou equivalente), clock mínimo de 2,3 GHz, pelo menos 4 núcleos.</span>

</td><td style="width: 168.0pt; border-top: none; border-left: none; border-bottom: solid #BBCFE0 1.0pt; border-right: solid #BBCFE0 1.0pt; mso-border-top-alt: solid #BBCFE0 .25pt; mso-border-left-alt: solid #BBCFE0 .25pt; mso-border-alt: solid #BBCFE0 .25pt; padding: 5.0pt 8.0pt 5.0pt 8.0pt;" valign="top" width="224"><span style="font-size: 10.0pt; color: #444444;">Intel Core i5 ou superior, 4+ núcleos, clock ≥ 2,5 GHz.</span>

</td></tr><tr style="mso-yfti-irow: 3;"><td style="width: 125.0pt; border: solid #BBCFE0 1.0pt; border-top: none; mso-border-top-alt: solid #BBCFE0 .25pt; mso-border-alt: solid #BBCFE0 .25pt; padding: 5.0pt 8.0pt 5.0pt 8.0pt;" valign="top" width="167"><span style="font-size: 10.0pt; color: #444444;">Memória RAM</span>

</td><td style="width: 175.0pt; border-top: none; border-left: none; border-bottom: solid #BBCFE0 1.0pt; border-right: solid #BBCFE0 1.0pt; mso-border-top-alt: solid #BBCFE0 .25pt; mso-border-left-alt: solid #BBCFE0 .25pt; mso-border-alt: solid #BBCFE0 .25pt; padding: 5.0pt 8.0pt 5.0pt 8.0pt;" valign="top" width="233"><span style="font-size: 10.0pt; color: #444444;">8 GB DDR3</span>

</td><td style="width: 168.0pt; border-top: none; border-left: none; border-bottom: solid #BBCFE0 1.0pt; border-right: solid #BBCFE0 1.0pt; mso-border-top-alt: solid #BBCFE0 .25pt; mso-border-left-alt: solid #BBCFE0 .25pt; mso-border-alt: solid #BBCFE0 .25pt; padding: 5.0pt 8.0pt 5.0pt 8.0pt;" valign="top" width="224"><span style="font-size: 10.0pt; color: #444444;">12 GB DDR3 ou DDR4</span>

</td></tr><tr style="mso-yfti-irow: 4;"><td style="width: 125.0pt; border: solid #BBCFE0 1.0pt; border-top: none; mso-border-top-alt: solid #BBCFE0 .25pt; mso-border-alt: solid #BBCFE0 .25pt; padding: 5.0pt 8.0pt 5.0pt 8.0pt;" valign="top" width="167"><span style="font-size: 10.0pt; color: #444444;">Placa de Rede</span>

</td><td style="width: 175.0pt; border-top: none; border-left: none; border-bottom: solid #BBCFE0 1.0pt; border-right: solid #BBCFE0 1.0pt; mso-border-top-alt: solid #BBCFE0 .25pt; mso-border-left-alt: solid #BBCFE0 .25pt; mso-border-alt: solid #BBCFE0 .25pt; padding: 5.0pt 8.0pt 5.0pt 8.0pt;" valign="top" width="233"><span style="font-size: 10.0pt; color: #444444;">Padrão 10/100/1000 Mbps (Gigabit Ethernet)</span>

</td><td style="width: 168.0pt; border-top: none; border-left: none; border-bottom: solid #BBCFE0 1.0pt; border-right: solid #BBCFE0 1.0pt; mso-border-top-alt: solid #BBCFE0 .25pt; mso-border-left-alt: solid #BBCFE0 .25pt; mso-border-alt: solid #BBCFE0 .25pt; padding: 5.0pt 8.0pt 5.0pt 8.0pt;" valign="top" width="224"><span style="font-size: 10.0pt; color: #444444;">Padrão 10/100/1000 Mbps (Gigabit Ethernet)</span>

</td></tr><tr style="mso-yfti-irow: 5; mso-yfti-lastrow: yes;"><td style="width: 125.0pt; border: solid #BBCFE0 1.0pt; border-top: none; mso-border-top-alt: solid #BBCFE0 .25pt; mso-border-alt: solid #BBCFE0 .25pt; padding: 5.0pt 8.0pt 5.0pt 8.0pt;" valign="top" width="167"><span style="font-size: 10.0pt; color: #444444;">Armazenamento</span>

</td><td style="width: 175.0pt; border-top: none; border-left: none; border-bottom: solid #BBCFE0 1.0pt; border-right: solid #BBCFE0 1.0pt; mso-border-top-alt: solid #BBCFE0 .25pt; mso-border-left-alt: solid #BBCFE0 .25pt; mso-border-alt: solid #BBCFE0 .25pt; padding: 5.0pt 8.0pt 5.0pt 8.0pt;" valign="top" width="233"><span style="font-size: 10.0pt; color: #444444;">SSD SATA ou NVMe de no mínimo 240 GB (Kingston ou similar)</span>

</td><td style="width: 168.0pt; border-top: none; border-left: none; border-bottom: solid #BBCFE0 1.0pt; border-right: solid #BBCFE0 1.0pt; mso-border-top-alt: solid #BBCFE0 .25pt; mso-border-left-alt: solid #BBCFE0 .25pt; mso-border-alt: solid #BBCFE0 .25pt; padding: 5.0pt 8.0pt 5.0pt 8.0pt;" valign="top" width="224"><span style="font-size: 10.0pt; color: #444444;">SSD SATA ou NVMe de no mínimo 240 GB (Kingston ou similar)</span>

</td></tr></tbody></table>

# 4. Requisitos de Sistema Operacional e Configuração da Máquina

## 4.1 Sistema Operacional

<span style="mso-list: Ignore;">•<span style="font: 7.0pt 'Times New Roman';"> </span></span><span style="color: #444444;">Windows 11 — 64 bits</span>

<span style="mso-list: Ignore;">•<span style="font: 7.0pt 'Times New Roman';"> </span></span><span style="color: #444444;">A conta de usuário do Windows utilizada pela aplicação deve ter permissões de Administrador Local.</span>

## 4.2 Configurações Importantes

<span style="mso-list: Ignore;">•<span style="font: 7.0pt 'Times New Roman';"> </span></span><span style="color: #444444;">IP estático configurado na placa de rede (obrigatório — veja seção 2.1).</span>

<span style="mso-list: Ignore;">•<span style="font: 7.0pt 'Times New Roman';"> </span></span><span style="color: #444444;">Atualizações automáticas do Windows: recomendamos que reinicializações automáticas fora do horário de funcionamento sejam configuradas para evitar interrupções no serviço.</span>

<span style="mso-list: Ignore;">•<span style="font: 7.0pt 'Times New Roman';"> </span></span><span style="color: #444444;">Antivírus: caso haja antivírus instalado, os diretórios e processos do Servidor Comandas devem ser adicionados como exceção para evitar bloqueios indesejados.</span>

<span style="mso-list: Ignore;">•<span style="font: 7.0pt 'Times New Roman';"> </span></span><span style="color: #444444;">Firewall do Windows: as portas da aplicação devem ser liberadas (a equipe de implantação orientará sobre quais portas configurar).</span>

<span style="mso-list: Ignore;">•<span style="font: 7.0pt 'Times New Roman';"> </span></span><span style="color: #444444;">Ideal que essa máquina nunca seja desligada, já que ela realiza o envio das vendas ao servidor integral. Ou seja, ela precisa estar sempre em execução contínua.</span>

# 5. Checklist de Pré-Implantação

<span style="color: #444444;">Antes da visita de implantação, o cliente deve confirmar que todos os itens abaixo estão atendidos:</span>

<table border="1" cellpadding="0" cellspacing="0" class="MsoNormalTable" id="bkmrk-%23-item-status-1-m%C3%A1qu" style="width: 468.0pt; border-collapse: collapse; border: none; mso-border-alt: solid windowtext .5pt; mso-yfti-tbllook: 1184; mso-padding-alt: 0cm .5pt 0cm .5pt; mso-border-insideh: .5pt solid windowtext; mso-border-insidev: .5pt solid windowtext;" width="624"><thead><tr style="mso-yfti-irow: 0; mso-yfti-firstrow: yes;"><td style="width: 27.0pt; border: solid #BBCFE0 1.0pt; mso-border-alt: solid #BBCFE0 .25pt; background: #1F4E79; padding: 5.0pt 8.0pt 5.0pt 8.0pt;" valign="top" width="36">**<span style="font-size: 10.0pt; color: white;">\#</span>**

</td><td style="width: 324.0pt; border: solid #BBCFE0 1.0pt; border-left: none; mso-border-left-alt: solid #BBCFE0 .25pt; mso-border-alt: solid #BBCFE0 .25pt; background: #1F4E79; padding: 5.0pt 8.0pt 5.0pt 8.0pt;" valign="top" width="432">**<span style="font-size: 10.0pt; color: white;">Item</span>**

</td><td style="width: 117.0pt; border: solid #BBCFE0 1.0pt; border-left: none; mso-border-left-alt: solid #BBCFE0 .25pt; mso-border-alt: solid #BBCFE0 .25pt; background: #1F4E79; padding: 5.0pt 8.0pt 5.0pt 8.0pt;" valign="top" width="156">**<span style="font-size: 10.0pt; color: white;">Status</span>**

</td></tr></thead><tbody><tr style="mso-yfti-irow: 1;"><td style="width: 27.0pt; border: solid #BBCFE0 1.0pt; border-top: none; mso-border-top-alt: solid #BBCFE0 .25pt; mso-border-alt: solid #BBCFE0 .25pt; padding: 5.0pt 8.0pt 5.0pt 8.0pt;" valign="top" width="36"><span style="font-size: 10.0pt; color: #444444;">1</span>

</td><td style="width: 324.0pt; border-top: none; border-left: none; border-bottom: solid #BBCFE0 1.0pt; border-right: solid #BBCFE0 1.0pt; mso-border-top-alt: solid #BBCFE0 .25pt; mso-border-left-alt: solid #BBCFE0 .25pt; mso-border-alt: solid #BBCFE0 .25pt; padding: 5.0pt 8.0pt 5.0pt 8.0pt;" valign="top" width="432"><span style="font-size: 10.0pt; color: #444444;">Máquina com Windows 11 — 64 bits disponível e ligada.</span>

</td><td style="width: 117.0pt; border-top: none; border-left: none; border-bottom: solid #BBCFE0 1.0pt; border-right: solid #BBCFE0 1.0pt; mso-border-top-alt: solid #BBCFE0 .25pt; mso-border-left-alt: solid #BBCFE0 .25pt; mso-border-alt: solid #BBCFE0 .25pt; padding: 5.0pt 8.0pt 5.0pt 8.0pt;" valign="top" width="156"><span style="font-size: 10.0pt; color: #444444;">☐ Confirmado</span>

</td></tr><tr style="mso-yfti-irow: 2;"><td style="width: 27.0pt; border: solid #BBCFE0 1.0pt; border-top: none; mso-border-top-alt: solid #BBCFE0 .25pt; mso-border-alt: solid #BBCFE0 .25pt; padding: 5.0pt 8.0pt 5.0pt 8.0pt;" valign="top" width="36"><span style="font-size: 10.0pt; color: #444444;">2</span>

</td><td style="width: 324.0pt; border-top: none; border-left: none; border-bottom: solid #BBCFE0 1.0pt; border-right: solid #BBCFE0 1.0pt; mso-border-top-alt: solid #BBCFE0 .25pt; mso-border-left-alt: solid #BBCFE0 .25pt; mso-border-alt: solid #BBCFE0 .25pt; padding: 5.0pt 8.0pt 5.0pt 8.0pt;" valign="top" width="432"><span style="font-size: 10.0pt; color: #444444;">Processador com pelo menos 4 núcleos e 2,3 GHz.</span>

</td><td style="width: 117.0pt; border-top: none; border-left: none; border-bottom: solid #BBCFE0 1.0pt; border-right: solid #BBCFE0 1.0pt; mso-border-top-alt: solid #BBCFE0 .25pt; mso-border-left-alt: solid #BBCFE0 .25pt; mso-border-alt: solid #BBCFE0 .25pt; padding: 5.0pt 8.0pt 5.0pt 8.0pt;" valign="top" width="156"><span style="font-size: 10.0pt; color: #444444;">☐ Confirmado</span>

</td></tr><tr style="mso-yfti-irow: 3;"><td style="width: 27.0pt; border: solid #BBCFE0 1.0pt; border-top: none; mso-border-top-alt: solid #BBCFE0 .25pt; mso-border-alt: solid #BBCFE0 .25pt; padding: 5.0pt 8.0pt 5.0pt 8.0pt;" valign="top" width="36"><span style="font-size: 10.0pt; color: #444444;">3</span>

</td><td style="width: 324.0pt; border-top: none; border-left: none; border-bottom: solid #BBCFE0 1.0pt; border-right: solid #BBCFE0 1.0pt; mso-border-top-alt: solid #BBCFE0 .25pt; mso-border-left-alt: solid #BBCFE0 .25pt; mso-border-alt: solid #BBCFE0 .25pt; padding: 5.0pt 8.0pt 5.0pt 8.0pt;" valign="top" width="432"><span style="font-size: 10.0pt; color: #444444;">Mínimo de 8 GB de RAM instalados.</span>

</td><td style="width: 117.0pt; border-top: none; border-left: none; border-bottom: solid #BBCFE0 1.0pt; border-right: solid #BBCFE0 1.0pt; mso-border-top-alt: solid #BBCFE0 .25pt; mso-border-left-alt: solid #BBCFE0 .25pt; mso-border-alt: solid #BBCFE0 .25pt; padding: 5.0pt 8.0pt 5.0pt 8.0pt;" valign="top" width="156"><span style="font-size: 10.0pt; color: #444444;">☐ Confirmado</span>

</td></tr><tr style="mso-yfti-irow: 4;"><td style="width: 27.0pt; border: solid #BBCFE0 1.0pt; border-top: none; mso-border-top-alt: solid #BBCFE0 .25pt; mso-border-alt: solid #BBCFE0 .25pt; padding: 5.0pt 8.0pt 5.0pt 8.0pt;" valign="top" width="36"><span style="font-size: 10.0pt; color: #444444;">4</span>

</td><td style="width: 324.0pt; border-top: none; border-left: none; border-bottom: solid #BBCFE0 1.0pt; border-right: solid #BBCFE0 1.0pt; mso-border-top-alt: solid #BBCFE0 .25pt; mso-border-left-alt: solid #BBCFE0 .25pt; mso-border-alt: solid #BBCFE0 .25pt; padding: 5.0pt 8.0pt 5.0pt 8.0pt;" valign="top" width="432"><span style="font-size: 10.0pt; color: #444444;">SSD de no mínimo 240 GB disponível.</span>

</td><td style="width: 117.0pt; border-top: none; border-left: none; border-bottom: solid #BBCFE0 1.0pt; border-right: solid #BBCFE0 1.0pt; mso-border-top-alt: solid #BBCFE0 .25pt; mso-border-left-alt: solid #BBCFE0 .25pt; mso-border-alt: solid #BBCFE0 .25pt; padding: 5.0pt 8.0pt 5.0pt 8.0pt;" valign="top" width="156"><span style="font-size: 10.0pt; color: #444444;">☐ Confirmado</span>

</td></tr><tr style="mso-yfti-irow: 5;"><td style="width: 27.0pt; border: solid #BBCFE0 1.0pt; border-top: none; mso-border-top-alt: solid #BBCFE0 .25pt; mso-border-alt: solid #BBCFE0 .25pt; padding: 5.0pt 8.0pt 5.0pt 8.0pt;" valign="top" width="36"><span style="font-size: 10.0pt; color: #444444;">5</span>

</td><td style="width: 324.0pt; border-top: none; border-left: none; border-bottom: solid #BBCFE0 1.0pt; border-right: solid #BBCFE0 1.0pt; mso-border-top-alt: solid #BBCFE0 .25pt; mso-border-left-alt: solid #BBCFE0 .25pt; mso-border-alt: solid #BBCFE0 .25pt; padding: 5.0pt 8.0pt 5.0pt 8.0pt;" valign="top" width="432"><span style="font-size: 10.0pt; color: #444444;">Placa de rede Gigabit (10/100/1000 Mbps).</span>

</td><td style="width: 117.0pt; border-top: none; border-left: none; border-bottom: solid #BBCFE0 1.0pt; border-right: solid #BBCFE0 1.0pt; mso-border-top-alt: solid #BBCFE0 .25pt; mso-border-left-alt: solid #BBCFE0 .25pt; mso-border-alt: solid #BBCFE0 .25pt; padding: 5.0pt 8.0pt 5.0pt 8.0pt;" valign="top" width="156"><span style="font-size: 10.0pt; color: #444444;">☐ Confirmado</span>

</td></tr><tr style="mso-yfti-irow: 6;"><td style="width: 27.0pt; border: solid #BBCFE0 1.0pt; border-top: none; mso-border-top-alt: solid #BBCFE0 .25pt; mso-border-alt: solid #BBCFE0 .25pt; padding: 5.0pt 8.0pt 5.0pt 8.0pt;" valign="top" width="36"><span style="font-size: 10.0pt; color: #444444;">6</span>

</td><td style="width: 324.0pt; border-top: none; border-left: none; border-bottom: solid #BBCFE0 1.0pt; border-right: solid #BBCFE0 1.0pt; mso-border-top-alt: solid #BBCFE0 .25pt; mso-border-left-alt: solid #BBCFE0 .25pt; mso-border-alt: solid #BBCFE0 .25pt; padding: 5.0pt 8.0pt 5.0pt 8.0pt;" valign="top" width="432"><span style="font-size: 10.0pt; color: #444444;">IP estático configurado (ou a ser configurado pela equipe Avanço).</span>

</td><td style="width: 117.0pt; border-top: none; border-left: none; border-bottom: solid #BBCFE0 1.0pt; border-right: solid #BBCFE0 1.0pt; mso-border-top-alt: solid #BBCFE0 .25pt; mso-border-left-alt: solid #BBCFE0 .25pt; mso-border-alt: solid #BBCFE0 .25pt; padding: 5.0pt 8.0pt 5.0pt 8.0pt;" valign="top" width="156"><span style="font-size: 10.0pt; color: #444444;">☐ Confirmado</span>

</td></tr><tr style="mso-yfti-irow: 7;"><td style="width: 27.0pt; border: solid #BBCFE0 1.0pt; border-top: none; mso-border-top-alt: solid #BBCFE0 .25pt; mso-border-alt: solid #BBCFE0 .25pt; padding: 5.0pt 8.0pt 5.0pt 8.0pt;" valign="top" width="36"><span style="font-size: 10.0pt; color: #444444;">7</span>

</td><td style="width: 324.0pt; border-top: none; border-left: none; border-bottom: solid #BBCFE0 1.0pt; border-right: solid #BBCFE0 1.0pt; mso-border-top-alt: solid #BBCFE0 .25pt; mso-border-left-alt: solid #BBCFE0 .25pt; mso-border-alt: solid #BBCFE0 .25pt; padding: 5.0pt 8.0pt 5.0pt 8.0pt;" valign="top" width="432"><span style="font-size: 10.0pt; color: #444444;">Cabo de rede conectando a máquina ao switch/roteador.</span>

</td><td style="width: 117.0pt; border-top: none; border-left: none; border-bottom: solid #BBCFE0 1.0pt; border-right: solid #BBCFE0 1.0pt; mso-border-top-alt: solid #BBCFE0 .25pt; mso-border-left-alt: solid #BBCFE0 .25pt; mso-border-alt: solid #BBCFE0 .25pt; padding: 5.0pt 8.0pt 5.0pt 8.0pt;" valign="top" width="156"><span style="font-size: 10.0pt; color: #444444;">☐ Confirmado</span>

</td></tr><tr style="mso-yfti-irow: 8;"><td style="width: 27.0pt; border: solid #BBCFE0 1.0pt; border-top: none; mso-border-top-alt: solid #BBCFE0 .25pt; mso-border-alt: solid #BBCFE0 .25pt; padding: 5.0pt 8.0pt 5.0pt 8.0pt;" valign="top" width="36"><span style="font-size: 10.0pt; color: #444444;">8</span>

</td><td style="width: 324.0pt; border-top: none; border-left: none; border-bottom: solid #BBCFE0 1.0pt; border-right: solid #BBCFE0 1.0pt; mso-border-top-alt: solid #BBCFE0 .25pt; mso-border-left-alt: solid #BBCFE0 .25pt; mso-border-alt: solid #BBCFE0 .25pt; padding: 5.0pt 8.0pt 5.0pt 8.0pt;" valign="top" width="432"><span style="font-size: 10.0pt; color: #444444;">SmartPOS com acesso à rede Wi-Fi que alcança o Servidor Comandas.</span>

</td><td style="width: 117.0pt; border-top: none; border-left: none; border-bottom: solid #BBCFE0 1.0pt; border-right: solid #BBCFE0 1.0pt; mso-border-top-alt: solid #BBCFE0 .25pt; mso-border-left-alt: solid #BBCFE0 .25pt; mso-border-alt: solid #BBCFE0 .25pt; padding: 5.0pt 8.0pt 5.0pt 8.0pt;" valign="top" width="156"><span style="font-size: 10.0pt; color: #444444;">☐ Confirmado</span>

</td></tr><tr style="mso-yfti-irow: 9;"><td style="width: 27.0pt; border: solid #BBCFE0 1.0pt; border-top: none; mso-border-top-alt: solid #BBCFE0 .25pt; mso-border-alt: solid #BBCFE0 .25pt; padding: 5.0pt 8.0pt 5.0pt 8.0pt;" valign="top" width="36"><span style="font-size: 10.0pt; color: #444444;">9</span>

</td><td style="width: 324.0pt; border-top: none; border-left: none; border-bottom: solid #BBCFE0 1.0pt; border-right: solid #BBCFE0 1.0pt; mso-border-top-alt: solid #BBCFE0 .25pt; mso-border-left-alt: solid #BBCFE0 .25pt; mso-border-alt: solid #BBCFE0 .25pt; padding: 5.0pt 8.0pt 5.0pt 8.0pt;" valign="top" width="432"><span style="font-size: 10.0pt; color: #444444;">PDV Linux (legado) com acesso via cabo à mesma rede do Servidor Comandas.</span>

</td><td style="width: 117.0pt; border-top: none; border-left: none; border-bottom: solid #BBCFE0 1.0pt; border-right: solid #BBCFE0 1.0pt; mso-border-top-alt: solid #BBCFE0 .25pt; mso-border-left-alt: solid #BBCFE0 .25pt; mso-border-alt: solid #BBCFE0 .25pt; padding: 5.0pt 8.0pt 5.0pt 8.0pt;" valign="top" width="156"><span style="font-size: 10.0pt; color: #444444;">☐ Confirmado</span>

</td></tr><tr style="mso-yfti-irow: 10;"><td style="width: 27.0pt; border: solid #BBCFE0 1.0pt; border-top: none; mso-border-top-alt: solid #BBCFE0 .25pt; mso-border-alt: solid #BBCFE0 .25pt; padding: 5.0pt 8.0pt 5.0pt 8.0pt;" valign="top" width="36"><span style="font-size: 10.0pt; color: #444444;">10</span>

</td><td style="width: 324.0pt; border-top: none; border-left: none; border-bottom: solid #BBCFE0 1.0pt; border-right: solid #BBCFE0 1.0pt; mso-border-top-alt: solid #BBCFE0 .25pt; mso-border-left-alt: solid #BBCFE0 .25pt; mso-border-alt: solid #BBCFE0 .25pt; padding: 5.0pt 8.0pt 5.0pt 8.0pt;" valign="top" width="432"><span style="font-size: 10.0pt; color: #444444;">Servidor do Sistema Integral (ERP Linux) acessível na rede.</span>

</td><td style="width: 117.0pt; border-top: none; border-left: none; border-bottom: solid #BBCFE0 1.0pt; border-right: solid #BBCFE0 1.0pt; mso-border-top-alt: solid #BBCFE0 .25pt; mso-border-left-alt: solid #BBCFE0 .25pt; mso-border-alt: solid #BBCFE0 .25pt; padding: 5.0pt 8.0pt 5.0pt 8.0pt;" valign="top" width="156"><span style="font-size: 10.0pt; color: #444444;">☐ Confirmado</span>

</td></tr><tr style="mso-yfti-irow: 11; mso-yfti-lastrow: yes;"><td style="width: 27.0pt; border: solid #BBCFE0 1.0pt; border-top: none; mso-border-top-alt: solid #BBCFE0 .25pt; mso-border-alt: solid #BBCFE0 .25pt; padding: 5.0pt 8.0pt 5.0pt 8.0pt;" valign="top" width="36"><span style="font-size: 10.0pt; color: #444444;">11</span>

</td><td style="width: 324.0pt; border-top: none; border-left: none; border-bottom: solid #BBCFE0 1.0pt; border-right: solid #BBCFE0 1.0pt; mso-border-top-alt: solid #BBCFE0 .25pt; mso-border-left-alt: solid #BBCFE0 .25pt; mso-border-alt: solid #BBCFE0 .25pt; padding: 5.0pt 8.0pt 5.0pt 8.0pt;" valign="top" width="432"><span style="font-size: 10.0pt; color: #444444;">Firewall e antivírus configurados para permitir a aplicação (ou a configurar com apoio Avanço).</span>

</td><td style="width: 117.0pt; border-top: none; border-left: none; border-bottom: solid #BBCFE0 1.0pt; border-right: solid #BBCFE0 1.0pt; mso-border-top-alt: solid #BBCFE0 .25pt; mso-border-left-alt: solid #BBCFE0 .25pt; mso-border-alt: solid #BBCFE0 .25pt; padding: 5.0pt 8.0pt 5.0pt 8.0pt;" valign="top" width="156"><span style="font-size: 10.0pt; color: #444444;">☐ Confirmado</span>

</td></tr></tbody></table>

# 6. Suporte e Contato

<span style="color: #444444;">Em caso de dúvidas sobre os requisitos ou durante o processo de implantação, entre em contato com a equipe da Avanço Informática:</span>

<table border="1" cellpadding="0" cellspacing="0" class="MsoNormalTable" id="bkmrk-avan%C3%A7o-inform%C3%A1tica-%E2%80%94" style="width: 468.0pt; border-collapse: collapse; border: none; mso-border-alt: solid windowtext .5pt; mso-yfti-tbllook: 1184; mso-padding-alt: 0cm .5pt 0cm .5pt; mso-border-insideh: .5pt solid windowtext; mso-border-insidev: .5pt solid windowtext;" width="624"><tbody><tr style="mso-yfti-irow: 0; mso-yfti-firstrow: yes; mso-yfti-lastrow: yes;"><td style="width: 468.0pt; border: solid #BBCFE0 1.0pt; mso-border-alt: solid #BBCFE0 .25pt; background: #D6E8F5; padding: 5.0pt 10.0pt 5.0pt 10.0pt;" valign="top" width="624">**<span style="color: #1a3a5c;">Avanço Informática — Suporte Técnico</span>**

<span style="font-size: 10.0pt; color: #444444;">Site: www.avancoinfo.com.br</span>

<span style="font-size: 10.0pt; color: #444444;">Telefone: (31) 3025-1188</span>

</td></tr></tbody></table>

*<span style="font-size: 9.0pt; color: #aaaaaa;">— Documento gerado pela equipe Avanço Informática —</span>*