Entregas

O registo de receção de mercadorias — cada campo, o seu tipo, e o que significa no terreno.

Uma entrega é um controlo de receção: um funcionário a receber uma encomenda, a registar temperaturas e a decidir se a aceita. É o registo que um inspetor de segurança alimentar pede.

Ambos os endpoints precisam do âmbito deliveries:read no restaurante indicado no caminho.

As entregas são o único recurso moldado à mão por aqui: um objeto desenhado, imutável assim que registado, listado por intervalo de tempo. Tudo o resto que a aplicação regista — temperaturas de confeção e de arrefecimento, limpeza, etiquetas — chega através das coleções, que em vez disso partilham um único envelope genérico.

Listar entregas

GET /v1/restaurants/{restaurantId}/deliveries?from=…&to=…&limit=…&cursor=…

Devolve { "data": Delivery[], "nextCursor": string | null }, do mais recente para o mais antigo. Veja Paginação para as regras do intervalo e para o cursor.

Obter uma entrega

GET /v1/restaurants/{restaurantId}/deliveries/{deliveryId}

Devolve uma única Delivery, ou 404 se o identificador for desconhecido ou a chave não tiver concessão para esse restaurante.

O objeto de entrega

CampoTipoSignificado
idstringIdentificador estável da entrega, único dentro do restaurante.
restaurantIdstringO restaurante a que o registo pertence. Repete o caminho.
occurredAtstringQuando o controlo aconteceu, em milissegundos desde a época Unix, em forma de cadeia de caracteres.
isCompliantbooleanO veredito do funcionário sobre a entrega no seu conjunto.
supplierobject | null{ "id": string, "name": string }, ou null quando a entrega foi registada sem fornecedor.
temperatureRecordsarrayUma entrada por produto medido. Ver abaixo.
nonComplianceReasonsstring[]Porque é que a entrega foi recusada ou aceite com reservas. Texto livre escolhido pelo funcionário; vazio quando está conforme.
correctiveActionsstring[]O que foi feito a esse respeito. Vazio quando não foi preciso nada.
commentarystring | nullNota em texto livre. Muitas vezes null.
imageCountintegerQuantas fotografias estão associadas. 0 significa que o endpoint das imagens não tem nada para devolver.

temperatureRecords[]

CampoTipoSignificado
productstringO que foi medido, tal como o funcionário lhe chamou. Nunca vazio.
valuenumber | nullA leitura. null quando o produto foi registado sem medição.
unit"C"Sempre graus Celsius. Está presente para que quem consome nunca tenha de o assumir.
lotNumberstring | nullO lote, quando foi registado.

Ler isto corretamente

isCompliant é o registo, não um cálculo. É o que a pessoa que recebeu a entrega decidiu, e pode divergir do que você concluiria só a partir das temperaturas — uma leitura tirada com uma sonda de superfície, um produto com um limiar próprio, um juízo de valor. Apresente-o como o veredito dessa pessoa. Se quiser o seu, calcule-o ao lado do dela e identifique-o como sendo seu.

Os campos de texto livre são texto livre. nonComplianceReasons, correctiveActions e product são escritos pelo pessoal durante o serviço, na língua do restaurante, com a ortografia de uma terça-feira atarefada. Não construa uma enumeração a partir deles, não faça uma junção com base neles, e não assuma que estão em francês.

value pode ser null. Um produto registado sem leitura é normal — muitas vezes é um produto seco. Trate null como «não medido», nunca como 0.

As datas e horas são cadeias de caracteres. occurredAt é uma cadeia decimal de milissegundos desde a época Unix, porque toda a plataforma BackResto guarda as datas e horas dessa maneira. Number(occurredAt) é seguro hoje e pelas próximas centenas de milhares de anos, mas não deixe um parser de JSON convertê-lo em silêncio e voltar a escrevê-lo depois com perda de precisão.

Exemplo

{
  "id": "8f2c1b04-0d5a-4b7e-9f31-6ad2c0e77a51",
  "restaurantId": "restaurant-1",
  "occurredAt": "1787932800000",
  "isCompliant": false,
  "supplier": { "id": "supplier-7", "name": "Metro Nord" },
  "temperatureRecords": [
    { "product": "Poulet fermier", "lotNumber": "L2291", "unit": "C", "value": 6.4 },
    { "product": "Farine T55", "lotNumber": null, "unit": "C", "value": null }
  ],
  "nonComplianceReasons": ["Température trop élevée"],
  "correctiveActions": ["Produit refusé", "Fournisseur prévenu"],
  "commentary": "Camion en retard, rupture de chaîne du froid probable",
  "imageCount": 2
}

Última atualização em 2026-09-19.