Cotações e preços B2B
Cotações (RFQ), negociação em rodadas e regras de preço de atacado do seller.
No atacado o preço quase nunca é o de tabela. O comprador pede uma cotação, o seller responde, os dois negociam, e regras de preço por quantidade já dão o preço certo sem conversa. Esta seção documenta o lado do seller dessas três coisas.
Como funciona
- O comprador pede o preço
O comprador cria a cotação pela loja (lado do cliente, fora desta seção). Ela nasce
pending, sem total. - O seller responde
POST /vendor/quotes/{id}/respondinforma o preço de cada linha. A cotação viraquotede tem validade (7 dias por padrão). - Aceite, negociação ou recusa
O comprador aceita (
accepted), o seller recusa (rejected), ou os dois trocam rodadas (negotiating). Passada a validade, a cotação viraexpired. - Conversão
Uma cotação aceita é convertida pelo comprador em carrinho ou pedido (
converted).
| Status | Significado |
|---|---|
pending | Recebida, esperando resposta do seller. |
quoted | O seller respondeu com preços e validade. |
negotiating | Há uma negociação em rodadas em andamento. |
accepted | Uma oferta foi aceita. |
rejected | Recusada. |
expired | A validade passou sem aceite. |
converted | Virou carrinho ou pedido. |
Conceitos-chave
Quem vê o quê
Estas rotas só enxergam o que é do seller do token. Uma cotação de outro seller responde 403 (não 404); uma regra de preço de produto alheio responde 404. O seller é descoberto pelo token, nunca por um parâmetro.
Dinheiro e identificadores
Valores em centavos inteiros (4000 = R$ 40,00). Desconto em pontos-base (1500 = 15%). Cotações e regras usam id inteiro; produtos, clientes, sellers e rodadas de negociação usam UUID.
Módulos
Tudo aqui depende de módulos da loja. Sem b2b-pricing toda rota responde 403 module_disabled. As quatro rotas de negociação exigem também enhanced-rfq.
Cotação versus regra de preço
A cotação é uma conversa pontual com um comprador. A regra de preço é permanente e vale para qualquer comprador que atinja a faixa, sem conversa.
Endpoints
| Método | Caminho | Para que serve | Autenticação | Página |
|---|---|---|---|---|
| GET | /api/v1/vendor/quotes | Lista cotações. | seller, b2b-pricing | Cotações |
| GET | /api/v1/vendor/quotes/{id} | Detalhe com linhas. | seller, b2b-pricing | Cotações |
| POST | /api/v1/vendor/quotes/{id}/respond | Responde com preços. | seller, b2b-pricing | Cotações |
| POST | /api/v1/vendor/quotes/{id}/reject | Recusa a cotação. | seller, b2b-pricing | Cotações |
| GET | /api/v1/vendor/quotes/{id}/proposal/events | Trilha da proposta pública. | seller, b2b-pricing | Cotações |
| POST | /api/v1/vendor/quotes/{id}/counter | Contraproposta. | seller, enhanced-rfq | Negociação |
| GET | /api/v1/vendor/quotes/{id}/negotiations | Histórico de rodadas. | seller, enhanced-rfq | Negociação |
| POST | /api/v1/vendor/quotes/{id}/accept-round/{roundId} | Aceita uma rodada. | seller, enhanced-rfq | Negociação |
| POST | /api/v1/vendor/quotes/{id}/reject-round/{roundId} | Recusa uma rodada. | seller, enhanced-rfq | Negociação |
| GET | /api/v1/vendor/b2b/rules | Lista regras de preço. | seller, b2b-pricing | Regras de preço |
| POST | /api/v1/vendor/b2b/rules | Cria regra. | seller, b2b-pricing | Regras de preço |
| GET | /api/v1/vendor/b2b/rules/{id} | Detalhe da regra. | seller, b2b-pricing | Regras de preço |
| PUT | /api/v1/vendor/b2b/rules/{id} | Altera a regra. | seller, b2b-pricing | Regras de preço |
| DELETE | /api/v1/vendor/b2b/rules/{id} | Apaga a regra. | seller, b2b-pricing | Regras de preço |
Erros comuns
- Esperar
404para cotação de outro seller. A resposta é403 quote does not belong to this vendor. - Responder só algumas linhas. É recusado: todas as linhas precisam de preço.
- Tratar
500derespondcomo falha do servidor. Hoje regras de negócio violadas voltam como500com o motivo emdetail. - Mandar
price_centsjunto comdiscount_bpsmaior que zero numa regra. O desconto vence e o preço fixo é ignorado. - Esquecer o módulo
enhanced-rfqao testar contrapropostas. Sem ele a resposta é403 module_disabled. - Usar um UUID onde o id é inteiro (cotação, regra) ou o contrário (rodada). Id mal formado dá
400.