Pular para o conteúdo principal

Roteiro de demo completa

Este roteiro segue a jornada de Venda aprovada chamada por chamada, do primeiro passo ao último. Cada etapa está marcada com quem a implementa:

Levfone — já implementado e ao vivo em api.sandbox.levfone.com. Pode ser executado de verdade, agora, pelo console Swagger.

PDV Parceiro — contrato, ainda não implementado por ninguém. É o que o PDV Parceiro precisa construir. Mostrado aqui como referência do que a Levfone vai enviar e do que espera receber de volta — não pode ser executado hoje.

Interno — não é uma chamada de API. Acontece dentro do PDV, dentro da Levfone, ou é uma ação do vendedor.

Está tudo implementado?

Não. A Levfone implementa e já expõe ao vivo os 4 endpoints da Sales Authorization API (oauth/token, sales/authorize, sales/{id}/confirm, sales/{id}/cancel) — isso é o que este projeto entrega. Os 8 endpoints da Partner PDV API são especificados, com OpenAPI completo e exemplos, mas implementados pelo PDV Parceiro, não pela Levfone — é trabalho do time do parceiro, ainda não existe em nenhum ambiente. Uma demonstração 100% ao vivo, ponta a ponta, só é possível depois que o parceiro subir essas 8 rotas em um sandbox próprio.

O que dá pra fazer hoje: rodar ao vivo as chamadas que são da Levfone, e narrar as chamadas do parceiro mostrando exatamente o request que a Levfone vai enviar e o response que espera receber — o contrato que a reunião serve para validar.

Antes de começar​

CampoValor
Sandbox Levfonehttps://api.sandbox.levfone.com/v1
client_id / client_secretsandbox, enviados separadamente
taxId do cliente de demo52184793006
storeId0421
planIdPL-CTRL-25
IMEI do aparelho de demo356938035643809
Proposta pré-aprovadasmartphone R$1.299 + capinha R$49,90 + película R$29,90 + garantia estendida R$199 = R$1.577,80

1. Vendedor inicia o atendimento​

Interno

O vendedor faz login no PDV Parceiro. Nenhuma chamada à Levfone ainda.

2. Levfone identifica o vendedor​

PDV Parceiro · POST /sellers/session

Request (Levfone → PDV Parceiro)
{ "username": "vendedor.1234", "password": "••••••••" }
Response esperado (200)
{
"success": true,
"message": "",
"timestamp": "2026-08-01T14:00:00.000Z",
"data": {
"sellerId": "SL-8891",
"sellerName": "Carlos Pereira",
"taxId": "98765432100",
"storeId": "0421",
"storeName": "Loja Shopping Center Norte",
"storeCnpj": "12345678000199",
"storeAddress": { "street": "Av. Paulista, 1000", "city": "São Paulo", "state": "SP", "zipCode": "01310100" },
"role": "SELLER",
"accessToken": "...",
"expiresAt": "2026-08-01T22:00:00.000Z"
},
"error": null
}

storeId volta aqui e é obrigatório em toda chamada seguinte de catálogo, estoque e venda.

3. Levfone lista os planos da loja​

PDV Parceiro · GET /plans?storeId=0421

Response esperado (200)
{ "success": true, "message": "", "timestamp": "...", "data": { "plans": [
{ "planId": "PL-CTRL-25", "name": "Controle 25GB", "monthlyPrice": { "amount": 8990, "currency": "BRL" } }
] }, "error": null }

4. Vendedor seleciona o plano​

Interno

5. Levfone lista os smartphones elegíveis ao plano​

PDV Parceiro · GET /products?storeId=0421&planId=PL-CTRL-25

Response esperado (200)
{ "success": true, "message": "", "timestamp": "...", "data": { "products": [
{ "sku": "SKU-9912", "productType": "SMARTPHONE", "name": "Smartphone 128GB", "brand": "Marca", "model": "Modelo X", "storage": "128GB", "price": { "amount": 129900, "currency": "BRL" }, "stock": 4 }
], "pagination": { "page": 1, "pageSize": 50, "totalItems": 1, "totalPages": 1 } } }

6. Vendedor seleciona o aparelho​

Interno

7. Levfone lista as garantias/seguros aplicáveis ao SKU​

PDV Parceiro · GET /services?storeId=0421&sku=SKU-9912

Response esperado (200)
{ "success": true, "message": "", "timestamp": "...", "data": { "services": [
{ "serviceId": "SV-EW12", "name": "Garantia Estendida 12 meses", "type": "EXTENDED_WARRANTY", "price": { "amount": 19900, "currency": "BRL" } }
] }, "error": null }

8. Vendedor lê o IMEI do aparelho físico​

Interno

9. Levfone resolve o IMEI para produto e disponibilidade​

PDV Parceiro · GET /imei/validate?storeId=0421&imei=356938035643809

Response esperado (200)
{ "success": true, "message": "", "timestamp": "...", "data": {
"imeiValid": true, "inStock": true, "sku": "SKU-9912",
"name": "Smartphone 128GB", "brand": "Marca", "model": "Modelo X", "storage": "128GB"
}, "error": null }

Não vinculante — não reserva nada. Serve só pra Levfone saber qual produto está sendo financiado antes do carrinho existir (ADR-007).

10. Levfone faz a pré-análise e a análise de crédito​

Interno

Acontece dentro da Levfone (Plataforma), não é uma chamada do Connect. No sandbox de demo, esse resultado — a proposta aprovada — já está pré-carregado (seed), pra pular direto pra parte que importa hoje: a autorização.

11. Vendedor monta o carrinho e escolhe "Levfone" como pagamento​

Interno

12. PDV pede a autorização — o passo que trava tudo​

Levfone · POST /sales/authorize — execute isto ao vivo no console

Request (PDV Parceiro → Levfone)
{
"clientName": "Mariana Alves",
"clientTaxId": "52184793006",
"clientPhoneNumber": "11900000000",
"sellerId": "SL-8891",
"sellerTaxId": "98765432100",
"sellerName": "Carlos Pereira",
"storeId": "0421",
"planId": "PL-CTRL-25",
"imei": "356938035643809",
"items": [
{ "sku": "SKU-9912", "productType": "SMARTPHONE", "name": "Smartphone 128GB", "quantity": 1, "unitPrice": { "amount": 129900, "currency": "BRL" }, "totalPrice": { "amount": 129900, "currency": "BRL" } },
{ "sku": "SKU-CASE-01", "productType": "CASE", "name": "Capinha", "quantity": 1, "unitPrice": { "amount": 4990, "currency": "BRL" }, "totalPrice": { "amount": 4990, "currency": "BRL" } },
{ "sku": "SKU-FILM-01", "productType": "SCREEN_PROTECTOR", "name": "Película", "quantity": 1, "unitPrice": { "amount": 2990, "currency": "BRL" }, "totalPrice": { "amount": 2990, "currency": "BRL" } }
],
"services": [
{ "serviceId": "SV-EW12", "type": "EXTENDED_WARRANTY", "name": "Garantia estendida", "price": { "amount": 19900, "currency": "BRL" } }
],
"totals": {
"productsTotal": { "amount": 137880, "currency": "BRL" },
"servicesTotal": { "amount": 19900, "currency": "BRL" },
"grandTotal": { "amount": 157780, "currency": "BRL" }
}
}
Response real (200)
{
"success": true,
"message": "Venda autorizada.",
"data": {
"authorized": true,
"authorizationId": "auth_...",
"status": "AUTHORIZED",
"expiresAt": "...",
"message": "Venda autorizada. Conclua o faturamento."
},
"error": null
}

O PDV Parceiro só pode faturar depois de authorized: true. Guarde o authorizationId — é usado no passo 14.

Vale mostrar aqui também uma recusa, trocando um valor (ex. clientPhoneNumber diferente do da proposta) — volta HTTP 200, authorized: false, declineReason. Ver Business Rules e Catálogo de erros para a lista completa de motivos de recusa.

13. PDV fatura a venda e emite a NF-e​

Interno (dentro do sistema do parceiro)

14. PDV confirma o faturamento​

Levfone · POST /sales/{authorizationId}/confirm — execute isto ao vivo

Request (PDV Parceiro → Levfone)
{
"saleNumber": "PDV-000123",
"invoiceNumber": "NF-000456",
"nfeAccessKey": "35260800000000000000550010000004561000000012",
"invoicedAt": "2026-08-01T14:10:00.000Z"
}
Response real (200)
{
"success": true,
"message": "Faturamento registrado.",
"data": { "authorizationId": "auth_...", "status": "CONFIRMED", "contractId": "..." },
"error": null
}

Esse é o passo que formaliza o crediário de verdade — cria o contrato e as parcelas no sistema da Levfone. Este endpoint é recomendado, não obrigatório (ver passo 15 para o caminho alternativo).

15. Levfone confirma por consulta (fallback, se o parceiro não implementar o passo 14)​

PDV Parceiro · POST /sales/search

Request (Levfone → PDV Parceiro)
{ "taxId": "52184793006" }
Response esperado (200)
{ "success": true, "message": "", "timestamp": "...", "data": { "sales": [
{ "status": "ACTIVE", "saleNumber": "PDV-000123", "invoiceNumber": "NF-000456", "nfeAccessKey": "35260800000000000000550010000004561000000012", "saleDate": "2026-08-01T14:10:00.000Z", "cancellationDate": null }
] }, "error": null }

Se o parceiro não implementar confirm, a Levfone recorre a polling deste endpoint até ver status: ACTIVE. Confirmação ativa é preferível — reduz o volume de polling e a janela em que o crédito fica comprometido sem a Levfone saber o desfecho.


Cancelamento e troca (fora do caminho feliz)​

Se quiser mostrar também esse ramo: POST /sales/{authorizationId}/cancel Levfone — também ao vivo — é chamado pelo PDV quando o vendedor cancela a venda no próprio sistema. A Levfone confirma via POST /sales/search PDV Parceiro antes de dar baixa no financiamento. Detalhes e o mecanismo de troca (reason: EXCHANGE) em Fluxos e Fluxos — Troca.

Depois da reunião​

O que o parceiro leva para implementar: os 8 endpoints da Partner PDV API, contra o OpenAPI completo ou a coleção Postman. Assim que tiverem um sandbox próprio no ar, a jornada acima passa a rodar ponta a ponta de verdade — hoje o que é demonstrável ao vivo é a metade que a Levfone já construiu.