Alçadas e régua de desconto
Configura por seller os parâmetros financeiros e a régua de desconto por cluster, e simula em qual camada um desconto cai.
Estas rotas configuram quanto desconto um representante pode dar e quem precisa aprovar o que passa disso. Tudo é configurado por seller (vendor_id). Para entender a cadeia (livre, alçada própria, aprovação), leia a visão geral. Descontos em pontos-base (500 = 5%), preços em centavos.
Ler os parâmetros financeiros
/api/v1/admin/trade-reps/finance-settingsAdminLê os parâmetros financeiros de um seller
Parâmetros de consulta
vendor_iduuidobrigatório{
"vendor_id": "94bd7e9a-fdad-4d01-8fc2-ba9d677d8b36",
"order_commission_bp": 300,
"global_free_discount_bp": 200,
"approval_limit_1_bp": 500,
"approval_limit_2_bp": 1000,
"approval_limit_3_bp": 1500,
"blocked_order_status": "",
"extended_approval_levels": false
}Campos da resposta
vendor_iduuidorder_commission_bpintegerglobal_free_discount_bpintegerapproval_limit_1_bpinteger0 significa que o nível 1 resolve tudo.approval_limit_2_bpintegerextended_approval_levels.approval_limit_3_bpintegerextended_approval_levels. Acima disso o nível exigido é 4, que a plataforma bloqueia (não há quem aprove).blocked_order_statusstringextended_approval_levelsbooleanfalse: só existem os níveis 1 e 2. true: níveis 1 a 3 e o nível 4 como bloqueio.Para um seller sem configuração salva, o GET devolve todos os campos em 0, vazio ou false.
Gravar os parâmetros financeiros
Grava (cria ou substitui) a configuração do seller. É um upsert completo: todo campo não enviado é gravado como 0, vazio ou false.
/api/v1/admin/trade-reps/finance-settingsAdminGrava os parâmetros financeiros de um seller
Corpo da requisição
vendor_iduuidobrigatórioorder_commission_bpintegerpadrão: 0global_free_discount_bpintegerpadrão: 0approval_limit_1_bpintegerpadrão: 0approval_limit_2_bpintegerpadrão: 0approval_limit_3_bpintegerpadrão: 0blocked_order_statusstringextended_approval_levelsbooleanpadrão: falseA resposta é o mesmo objeto enviado (200).
Simular um desconto
Não cria nada. Diz em qual camada um preço cai para um representante, quanto custaria (débito) e se precisaria de aprovação.
/api/v1/admin/trade-reps/discount-previewAdminSimula a alçada de um preço com desconto
Corpo da requisição
vendor_iduuidobrigatóriorep_idintegerobrigatórioproduct_iduuidcategory_iduuidoriginal_price_centsintegerobrigatórioprice_centsintegerobrigatóriocurl -X POST "$BASE_URL/api/v1/admin/trade-reps/discount-preview" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{"vendor_id": "94bd7e9a-fdad-4d01-8fc2-ba9d677d8b36", "rep_id": 2, "original_price_cents": 10000, "price_cents": 9000}'{
"discount_bp": 1000,
"free_limit_bp": 0,
"rep_limit_bp": 200,
"debit_cents": 0,
"requires_approval": true,
"required_level": 1,
"allowed": false,
"message": "discount exceeds free+rep alçada; requires level 1"
}Campos da resposta
discount_bpintegeroriginal_price_cents e price_cents.free_limit_bpintegerrep_limit_bpintegerdiscount_limit_bp).debit_centsintegerrequires_approvalbooleantrue quando passa do livre somado à alçada.required_levelintegerrequires_approval. O nível 4 não pode ser aprovado.allowedbooleantrue quando o representante pode dar o desconto sozinho.messagestringSe o preço negociado é maior ou igual ao de tabela, ou o preço de tabela é zero, a resposta é allowed: true com uma message explicando.
Ler a régua de desconto
A régua é uma matriz de desconto máximo por cluster do cliente (P, M, G) e nível hierárquico (0 a 3), por seller.
/api/v1/admin/trade-reps/discount-rulerAdminLê a régua de desconto de um seller
Parâmetros de consulta
vendor_iduuidobrigatório{
"vendor_id": "94bd7e9a-fdad-4d01-8fc2-ba9d677d8b36",
"seeded": true,
"message": "Matriz padrão P/M/G (não salva — clique em Salvar para persistir)",
"cells": [
{ "vendor_id": "94bd7e9a-fdad-4d01-8fc2-ba9d677d8b36", "cluster_code": "P", "hierarchy_level": 0, "max_discount_bp": 500 },
{ "vendor_id": "94bd7e9a-fdad-4d01-8fc2-ba9d677d8b36", "cluster_code": "P", "hierarchy_level": 1, "max_discount_bp": 1000 }
]
}Campos da resposta
cellsarraycells[].cluster_codestringPMG** vale para qualquer cluster sem célula própria.cells[].hierarchy_levelinteger0123cells[].max_discount_bpintegerseededbooleantrue quando o seller não tem régua salva: as cells são uma sugestão (P 500/1000/1500/2000, M 300/800/1200/1800, G 200/500/1000/1500 por nível 0 a 3) e nada foi gravado.messagestringGravar a régua de desconto
/api/v1/admin/trade-reps/discount-rulerAdminGrava a régua de desconto de um seller
Corpo da requisição
vendor_iduuidobrigatóriocellsarrayobrigatóriocells[].cluster_codestringobrigatórioPMG*pequeno, medio, grande (e small, medium, large), convertidos para a letra.cells[].hierarchy_levelintegerobrigatório0123cells[].max_discount_bpintegerobrigatório0.replacebooleanpadrão: truetrue apaga a matriz atual antes de gravar; false só atualiza as células enviadas e mantém as outras.A resposta é a régua gravada, no mesmo formato do GET.
Erros
| Status | Quando | Corpo de exemplo |
|---|---|---|
| 400 | Falta vendor_id (nos quatro GET/PUT de configuração). | {"error":"vendor_id is required"} |
| 400 | Falta vendor_id no PUT de parâmetros. | {"error":"save failed","detail":"vendor_id is required"} |
| 400 | Corpo não é JSON. | {"error":"invalid body","detail":"..."} |
| 400 | Representante da simulação não existe. | {"error":"preview failed","detail":"rep not found"} |
| 401 / 403 | Sem token, módulo desligado ou sem privilégio. | {"error":"module_disabled","module":"trade-reps"} |