---
url: https://docs.ouvixpro.ai/visoes/venda.md
description: >-
  Protocolo: Cada conversa de venda no balcão: objetivo, estrutura, escada de
  planos e fechamento no recorrente. Campos, exemplo e a tela pronta em
  painel.tela.venda.
---

# Protocolo

Cada conversa de venda no balcão: objetivo, estrutura, escada de planos e fechamento no recorrente.

Os números abaixo estão em `painel` na resposta de `GET /v1/painel`. A chamada sempre leva `Id_unidade` e o período. Toda lista de atendimentos vem em ordem de data e horário, do mais cedo para o mais tarde.

```bash
curl "https://api.ouvixpro.ai/v1/painel?Id_unidade=375&de=2026-10-06&ate=2026-10-06" \
  -H "Authorization: Bearer $OUVIX_API_KEY"
```

::: tip Quer a tela pronta?
Esta mesma visão já vem montada em `painel.tela.venda` (cards com texto, cor e lista de evidências) e, mais leve, em `GET /v1/tela?tela=venda`. O guia [Montando a tela](/guia/telas#venda) mostra bloco a bloco.
:::

| Campo | Tipo | O que é |
| --- | --- | --- |
| `motivosNaoFechou` | array | Por que o aluno novo saiu sem fechar, com quantidade. Valores em "Motivos de não fechar". |
| `protocolo` | object | Venda e renovação: funil (conversas → apresentou o recorrente → fechou), listas fechadas / abertas / semDesfecho, passos do protocolo, planos e objeções. Campos na tabela "Dentro de protocolo". |

## Como ler o desfecho

Cada conversa de plano com visitante cai em uma, e só uma, destas três listas de `painel.protocolo`:

| Lista | Regra | Na tela |
| --- | --- | --- |
| `fechadas` | `fechou === true` ou `protocolo.plano_fechado` preenchido | "Fechou · Recorrente R$ 129,90" |
| `abertas` | `fechou === false` (saiu sem fechar e isso aparece no áudio) | "Não fechou", com `motivo_nao_fechou` |
| `semDesfecho` | `fechou === null` (o áudio corta antes do fim) | "Sem desfecho no áudio" |

`vendasN = fechadas.length + abertas.length + semDesfecho.length` e `fechouN = fechadas.length`.

Regras que o leitor de desfecho aplica, na ordem:

* Fechou só com sinal forte na fala: link do contrato, cadastro do cartão, "fechou", liberação do acesso. A frase vem em `desfecho_venda.evidencia`.
* Diária avulsa (R$ 49,90) não é plano: `fechou=false`, `motivo_nao_fechou="diaria"`.
* Cadastro digital ou ativação de quem já pagou antes não é venda: fica fora de `vendas` (`desfecho_venda.eh_venda=false`).
* Quem entra por Gympass/Wellhub ou TotalPass fica fora de `vendas` (`agregador` preenchido).
* Áudio cortado sem despedida nem combinado: `fechou=null`.

## Dentro de `protocolo`

| Campo | Tipo | O que é |
| --- | --- | --- |
| `vendasN` | number | Conversas de plano com visitante no período (fechadas + abertas + sem desfecho). |
| `recorrenteN` | number | Quantas dessas conversas tiveram o recorrente (R$ 129,90) apresentado. |
| `fechouN` | number | Quantas fecharam um plano. Igual a fechadas.length. |
| `fechadas` | array | Atendimentos que fecharam plano (fechou=true ou protocolo.plano\_fechado). Cada item tem id. |
| `abertas` | array | Atendimentos que saíram sem fechar e isso aparece no áudio (fechou=false). Veja motivo\_nao\_fechou e desfecho\_venda.proximo\_passo. |
| `semDesfecho` | array | Atendimentos em que o áudio corta antes do fim (fechou=null). Não contam nem como fechada nem como aberta. |
| `vendas` | array | Todas as conversas de plano, em ordem de horário. União de fechadas, abertas e semDesfecho. |
| `objetivoPct` | number / null | Percentual das conversas em que a recepção perguntou o objetivo. |
| `escadaPct` | number / null | Percentual com a escada de planos na ordem (Prime → Recorrente → Anual → Quadrimestral). |
| `recorrentePct` | number / null | Percentual em que o recorrente foi apresentado. |
| `registroPct` | number / null | Percentual com nome, contato e origem registrados. |
| `fechamentoPct` | number / null | Percentual em que a recepção pediu o fechamento ou fechou. |
| `avaliacaoPct` | number / null | Percentual em que a avaliação física foi oferecida. |
| `experimentacaoN` | number | Quem não fechou e saiu com visitas de experimentação marcadas. |
| `passosVenda` | array | Os 7 passos do protocolo de venda: id, label, meta, feitos, total, pct e as listas fez / faltou (atendimentos com id). |
| `planos` | array | Planos fechados no período: plano, label e qtd. |
| `objecoes` | array | Objeções ditas por quem não fechou: tipo, label e qtd. |
| `renovacoesN` | number | Conversas de renovação (aluno no Prime Mensal que podia ir pro Recorrente). |
| `oferecidas` | number | Renovações em que o recorrente foi oferecido. |
| `migradas` | number | Renovações que migraram para o recorrente. |
| `renovacoes` | array | Conversas de renovação, em ordem de horário, com id. |
| `migradasLista` | array | Renovações que migraram, com id. |
| `ficaramLista` | array | Renovações que ficaram no plano antigo, com id. |
| `passosRenovacao` | array | Passos do protocolo de renovação, no mesmo formato de passosVenda. |
| `motivosRenovacao` | array | Por que não migrou: motivo (cartao, pensar, totalpass, outro), label e qtd. |

## Dentro de `desfecho_venda`

Vem em cada atendimento de `vendas`, `fechadas`, `abertas` e `semDesfecho`.

| Campo | Tipo | O que é |
| --- | --- | --- |
| `eh_venda` | boolean | Verdadeiro quando é uma conversa de plano com visitante. Falso em cadastro digital, ativação de quem já pagou e check-in de agregador. |
| `fechou` | boolean / null | true fechou um plano; false saiu sem fechar; null o áudio corta antes do fim. Só vem preenchido quando eh\_venda=true. |
| `plano_fechado` | string / null | Plano fechado: prime, recorrente, anual, quadrimestral, familia ou melhor\_idade. Sempre null quando fechou=false. |
| `evidencia` | string | A fala literal que prova o desfecho ("vou mandar o link do contrato", "eu fecho amanhã"). |
| `proximo_passo` | string | O que ficou combinado quando não fechou (volta amanhã, WhatsApp, avaliação). |

## Motivos de não fechar

Valores possíveis de `motivo_nao_fechou` e de `motivosNaoFechou[].motivo`.

| Valor | Rótulo na tela | Quando |
| --- | --- | --- |
| `volta_depois` | Volta outro dia pra fechar | Disse que volta amanhã ou outro dia para fechar (sem documento, sem cartão, vai trazer alguém). |
| `diaria` | Pagou só a diária | Pagou a diária avulsa (R$ 49,90) e não entrou em plano. |
| `preco` | Preço | Achou caro ou comparou preço. |
| `caro` | Tá caro | Disse explicitamente que está caro. |
| `horario` | Horário | O horário da academia ou da aula não serve. |
| `vai_pensar` | Vai pensar | Vai pensar, sem data para voltar. |
| `vou_pensar` | Disse que ia ver | "Vou ver", sem compromisso. |
| `conjuge` | Vou ver com marido/esposa | Depende de outra pessoa. |
| `totalpass` | TotalPass | Prefere ou já tem TotalPass. |
| `cartao` | Não quer cartão | Não quis deixar o cartão no recorrente. |
| `pix` | Quer pagar no Pix | Quer pagar à vista no Pix. |
| `so_olhando` | Só olhando | Veio só conhecer. |
| `sem_oferta` | Sem oferta da recepção | A recepção não ofereceu plano. |
| `outro` | Outro | Qualquer outro motivo. |

## Exemplo

```json
{
  "Id_unidade": "375",
  "visao": "recepcao",
  "de": "2026-10-06",
  "ate": "2026-10-06",
  "turno": "todos",
  "painel": {
    "motivosNaoFechou": [
      {
        "motivo": "volta_depois",
        "label": "Volta outro dia pra fechar",
        "qtd": 2
      },
      {
        "motivo": "diaria",
        "label": "Pagou só a diária",
        "qtd": 1
      }
    ],
    "protocolo": {
      "vendasN": 10,
      "recorrenteN": 8,
      "fechouN": 6,
      "fechadas": [
        {
          "id": "2026-10-06:atend_35",
          "horario": "17:40:28",
          "fechou": true,
          "protocolo": {
            "cena": "venda_nova",
            "plano_fechado": "recorrente"
          }
        }
      ],
      "abertas": [
        {
          "id": "2026-10-06:atend_27",
          "horario": "13:16:41",
          "fechou": false,
          "motivo_nao_fechou": "volta_depois",
          "desfecho_venda": {
            "eh_venda": true,
            "fechou": false,
            "plano_fechado": null,
            "evidencia": "sem documento sem nada nem cartão mas eu fecho amanhã",
            "proximo_passo": "Volta amanhã para fechar o quadrimestral."
          }
        }
      ],
      "semDesfecho": [
        {
          "id": "2026-10-06:atend_4",
          "horario": "06:36:20",
          "fechou": null,
          "truncado": true
        }
      ],
      "objetivoPct": 0,
      "escadaPct": 40,
      "recorrentePct": 80,
      "registroPct": 10,
      "fechamentoPct": 60,
      "planos": [
        {
          "plano": "recorrente",
          "label": "Recorrente R$ 129,90",
          "qtd": 2
        },
        {
          "plano": "quadrimestral",
          "label": "Quadrimestral R$ 99,90",
          "qtd": 2
        }
      ],
      "objecoes": [],
      "renovacoesN": 0,
      "oferecidas": 0,
      "migradas": 0,
      "motivosRenovacao": []
    }
  }
}
```
