Configuracao de Precos
Formula de calculo de ganho do motorista
se distance_km <= min_km:
ganho = base_fare
senao:
ganho = base_fare + (distance_km - min_km) * price_per_km
Exemplo pratico
| Parametro | Valor |
|---|---|
base_fare |
R$ 15,00 |
min_km |
5 km |
price_per_km |
R$ 2,00 |
| Distancia da rota | 12 km |
Para rotas de ate 5 km, o motorista sempre recebe R$ 15,00 independente da distancia.
GET /api/v1/pricing
Retorna a configuracao atual de precos.
Auth: Bearer token — role admin
Response 200 OK
| Campo | Tipo | Descricao |
|---|---|---|
id |
UUID | ID da configuracao |
base_fare |
string | Valor base em BRL (ex: "15.00") |
min_km |
float | Distancia minima coberta pelo base_fare |
price_per_km |
string | Valor por km adicional em BRL |
updated_at |
datetime | Ultima atualizacao |
Exemplo de response
{
"id": "pricing-uuid-0001",
"base_fare": "15.00",
"min_km": 5.0,
"price_per_km": "2.00",
"updated_at": "2026-05-01T00:00:00Z"
}
import requests
from decimal import Decimal
BASE_URL = "https://fast-deliv-backend.vercel.app"
headers = {"Authorization": f"Bearer {TOKEN}"}
resp = requests.get(f"{BASE_URL}/api/v1/pricing", headers=headers)
resp.raise_for_status()
pricing = resp.json()
base = Decimal(pricing["base_fare"])
min_km = pricing["min_km"]
pkm = Decimal(pricing["price_per_km"])
# Calcular ganho para uma distancia
def calc_earnings(distance_km: float) -> Decimal:
if distance_km <= min_km:
return base
return base + (Decimal(str(distance_km)) - Decimal(str(min_km))) * pkm
print(f"Rota 12km: R$ {calc_earnings(12)}") # R$ 29.00
print(f"Rota 3km: R$ {calc_earnings(3)}") # R$ 15.00
const resp = await fetch(`${BASE_URL}/api/v1/pricing`, { headers });
const pricing = await resp.json();
function calcEarnings(distanceKm) {
const base = parseFloat(pricing.base_fare);
const minKm = pricing.min_km;
const pkm = parseFloat(pricing.price_per_km);
if (distanceKm <= minKm) return base;
return base + (distanceKm - minKm) * pkm;
}
console.log(`Rota 12km: R$ ${calcEarnings(12).toFixed(2)}`); // R$ 29.00
require 'bigdecimal'
uri = URI("#{BASE_URL}/api/v1/pricing")
req = Net::HTTP::Get.new(uri)
req['Authorization'] = "Bearer #{TOKEN}"
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true
pricing = JSON.parse(http.request(req).body)
def calc_earnings(pricing, distance_km)
base = BigDecimal(pricing['base_fare'])
min_km = pricing['min_km'].to_f
pkm = BigDecimal(pricing['price_per_km'])
return base if distance_km <= min_km
base + (BigDecimal(distance_km.to_s) - BigDecimal(min_km.to_s)) * pkm
end
puts "Rota 12km: R$ #{calc_earnings(pricing, 12)}"
PUT /api/v1/pricing
Atualiza a configuracao de precos. Afeta todos os calculos futuros — entregas ja criadas nao sao retroativamente afetadas.
Auth: Bearer token — role admin
Request body
Todos os campos sao opcionais — envie apenas os que deseja alterar:
| Campo | Tipo | Descricao |
|---|---|---|
base_fare |
string | Novo valor base em BRL |
min_km |
float | Nova distancia minima |
price_per_km |
string | Novo valor por km adicional |
uri = URI("#{BASE_URL}/api/v1/pricing")
req = Net::HTTP::Put.new(uri)
req['Authorization'] = "Bearer #{TOKEN}"
req['Content-Type'] = 'application/json'
req.body = JSON.dump(base_fare: '18.00', min_km: 5.0, price_per_km: '2.50')
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true
puts JSON.parse(http.request(req).body).inspect
Impacto imediato
A alteracao de precos entra em vigor imediatamente para novas entregas. Comunique os motoristas antes de reduzir tarifas.