Skip to content

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
ganho = 15.00 + (12 - 5) * 2.00
      = 15.00 + 14.00
      = R$ 29,00

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
curl -s "${BASE_URL}/api/v1/pricing" \
  -H "Authorization: Bearer ${TOKEN}" \
  | jq '{base_fare, min_km, price_per_km}'
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
resp = requests.put(
    f"{BASE_URL}/api/v1/pricing",
    headers=headers,
    json={
        "base_fare": "18.00",
        "min_km": 5.0,
        "price_per_km": "2.50",
    },
)
resp.raise_for_status()
print("Precos atualizados:", resp.json())
const resp = await fetch(`${BASE_URL}/api/v1/pricing`, {
  method: "PUT",
  headers: { ...headers, "Content-Type": "application/json" },
  body: JSON.stringify({
    base_fare: "18.00",
    min_km: 5.0,
    price_per_km: "2.50",
  }),
});
console.log("Precos atualizados:", await resp.json());
curl -s -X PUT "${BASE_URL}/api/v1/pricing" \
  -H "Authorization: Bearer ${TOKEN}" \
  -H "Content-Type: application/json" \
  -d '{"base_fare": "18.00", "min_km": 5.0, "price_per_km": "2.50"}' \
  | jq .
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.