Regras por categoria
Define, por categoria de produto, o prazo de devolução, a exigência de fotos e a aprovação automática.
Nem todo produto se devolve do mesmo jeito. Um perfume lacrado pode ter prazo curto e aprovação automática por arrependimento; um eletrônico pode exigir fotos do defeito. A regra por categoria guarda essas políticas, uma por categoria. Ler a lista exige acesso a pedidos; criar, alterar e excluir exigem manage_returns ou manage_orders.
Quando o item devolvido pertence a uma categoria com regra, require_photos ligado impede o cliente de abrir a devolução daquele item sem enviar pelo menos uma foto, e as opções de aprovação automática passam a valer para ele.
Listar regras
Devolve todas as regras, ordenadas pelo nome da categoria. Sem paginação.
/api/v1/admin/returns/rulesAdminLista as regras de devolução por categoria
Sem parâmetros.
Exemplo de requisição
Resposta
Sem nenhuma regra, rules vem null.
Campos da resposta
rules[].iduuidrules[].category_iduuidrules[].category_namestringrules[].window_daysintegerrules[].require_photosbooleanrules[].auto_approve_regretbooleanrules[].auto_approve_defect_with_aibooleanErros
| Status | Quando | Corpo |
|---|---|---|
| 401 / 403 | Sem token, sem privilégio, ou módulo desligado | {"error":"module_disabled","module":"returns"} |
| 500 | Falha interna | {"error":"rules_failed","detail":"..."} |
Criar ou atualizar uma regra
POST e PUT fazem exatamente a mesma coisa: gravam a regra da categoria, criando se não existir e substituindo se existir. Não há identificador na URL; a chave é category_id. Envie sempre os quatro campos de política, porque a gravação é completa.
/api/v1/admin/returns/rulesAdminCria ou atualiza a regra de uma categoria
Corpo da requisição
category_iduuidobrigatóriowindow_daysintegerobrigatóriorequire_photosbooleanpadrão: falseauto_approve_regretbooleanpadrão: falseauto_approve_defect_with_aibooleanpadrão: false/api/v1/admin/returns/rulesAdminCria ou atualiza a regra de uma categoria (igual ao POST)
Mesmo corpo, mesma resposta e mesmos erros do POST. Existe para clientes que preferem PUT em gravações idempotentes.
Exemplo de requisição
Resposta
O status é 200 mesmo quando a regra é criada (não 201). O nome da categoria (category_name) só aparece na lista.
Erros
| Status | Quando | Corpo |
|---|---|---|
| 400 | Corpo que não é JSON | {"error":"invalid_body","detail":"..."} |
| 400 | category_id vazio | {"error":"rule_invalid","detail":"category_id is required"} |
| 400 | window_days menor que 7 | {"error":"rule_invalid","detail":"window_days must be at least 7 (CDC Art. 49)"} |
| 400 | category_id que não existe ou não é UUID | {"error":"rule_invalid","detail":"..."} |
Excluir uma regra
Remove a regra; a categoria volta a seguir a política geral da loja. A chamada é tolerante: excluir um id que não existe também responde sucesso.
/api/v1/admin/returns/rules/{ruleId}AdminRemove a regra de uma categoria
Parâmetros de caminho
ruleIduuidobrigatórioid da lista, não o category_id).Exemplo de requisição
Resposta
Erros
| Status | Quando | Corpo |
|---|---|---|
| 500 | Falha interna, ou ruleId que não é UUID | {"error":"rule_delete_failed","detail":"..."} |