Negociações (RFQ)
Acompanha as contrapropostas em rodadas entre cliente e seller e registra a mediação do administrador.
Quando o cliente não aceita o preço da cotação, comprador e seller podem trocar contrapropostas em rodadas (até um máximo, padrão de 5). Cada rodada traz os itens e os preços propostos por um dos lados. O administrador não negocia por eles, mas pode acompanhar o histórico e registrar uma nota quando está mediando.
Listar negociações
Mesma lista de cotações, com os dados da negociação em rodadas: em que rodada está, o máximo de rodadas, se o administrador está mediando e a nota dele.
/api/v1/admin/rfq/negotiationsAdminLista as cotações com os dados da negociação
Autenticação: Authorization: Bearer <token> de um administrador com manage_orders. Requer o módulo enhanced-rfq ativo.
Parâmetros de consulta
statusstringvendor_iduuiduser_iduuidpageintegerpadrão: 1per_pageintegerpadrão: 20Exemplo de requisição
Resposta
Campos da resposta
quotesarrayquotes[].max_roundsinteger5.quotes[].current_roundinteger0 se ainda não houve negociação.quotes[].negotiation_expires_atstringquotes[].admin_mediatedbooleanquotes[].admin_notesstringtotalintegerpageintegerper_pageintegertotal_pagesintegerErros
| Status | Quando | Corpo |
|---|---|---|
| 401 | Sem token ou token inválido | {"error":"missing authorization header"} |
| 403 | Sem o privilégio exigido, ou módulo desligado | {"error":"module_disabled","module":"enhanced-rfq"} / {"error":"insufficient privileges","required":"manage_orders"} |
| 500 | Falha na consulta | {"error":"failed to list negotiations","detail":"..."} |
Consultar uma negociação
Devolve a cotação completa, todas as rodadas de contraproposta em ordem e a anotação do administrador.
/api/v1/admin/rfq/negotiations/{id}AdminConsulta a cotação, o histórico de rodadas e a nota
Autenticação: Authorization: Bearer <token> de um administrador com manage_orders. Requer o módulo enhanced-rfq ativo.
Parâmetros de caminho
idintegerobrigatórioExemplo de requisição
Resposta
Campos da resposta
quoteobjectitems, como em Consultar uma cotação.history.quote_idintegerhistory.max_roundsintegerhistory.current_roundintegerhistory.expires_atstringhistory.roundsarrayhistory.rounds[].iduuidhistory.rounds[].round_numberintegerhistory.rounds[].initiated_bystringcustomervendoradmincustomer, vendor ou admin.history.rounds[].messagestringhistory.rounds[].itemsarrayproduct_id, product_name, quantity, price_cents (unitário) e notes.history.rounds[].total_centsintegerhistory.rounds[].statusstringpendingacceptedrejectedcounteredexpiredpending, accepted, rejected, countered ou expired.history.rounds[].created_atstringannotationobject | nullnotes, admin_mediated e admin_updated_at.Erros
| Status | Quando | Corpo |
|---|---|---|
| 401 | Sem token ou token inválido | {"error":"missing authorization header"} |
| 403 | Sem o privilégio exigido, ou módulo desligado | {"error":"module_disabled","module":"enhanced-rfq"} / {"error":"insufficient privileges","required":"manage_orders"} |
| 400 | id que não é número | {"error":"invalid quote id"} |
| 404 | Cotação inexistente | {"error":"quote not found"} |
Anotar uma negociação
O administrador registra uma nota interna sobre a negociação e, se quiser, marca que está mediando. Não altera preços, rodadas nem o estado da cotação: é só anotação.
/api/v1/admin/rfq/negotiations/{id}AdminGrava a nota do administrador e a marca de mediação
Autenticação: Authorization: Bearer <token> de um administrador com manage_orders. Requer o módulo enhanced-rfq ativo.
Parâmetros de caminho
idintegerobrigatórioCorpo da requisição
notesstringadmin_mediatedbooleanExemplo de requisição
Resposta
Campos da resposta
notesstringadmin_mediatedbooleanadmin_updated_atstringErros
| Status | Quando | Corpo |
|---|---|---|
| 401 | Sem token ou token inválido | {"error":"missing authorization header"} |
| 403 | Sem o privilégio exigido, ou módulo desligado | {"error":"module_disabled","module":"enhanced-rfq"} / {"error":"insufficient privileges","required":"manage_orders"} |
| 400 | id que não é número ou corpo inválido | {"error":"invalid quote id"} |
| 500 | Falha ao gravar | {"error":"failed to annotate quote","detail":"..."} |