收货记录

收货记录——每一个字段、它的类型,以及它在后厨现场意味着什么。

一条收货记录就是一次收货查验:一名员工接收一批订货、记录温度,并决定是否接收 它。这就是食品安全检查员会索取的那份记录。

两个端点都需要在路径里那家餐厅上持有 deliveries:read 权限范围。

收货记录是这里唯一一个手工塑形的资源:一个设计过的对象,一旦记下就不可变,按时间 区间列出。应用记录的其他一切——加热与冷却温度、清洁、标签——都通过 集合提供,它们共用同一个通用信封。

列出收货记录

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

返回 { "data": Delivery[], "nextCursor": string | null },最新的在前。区间规则和 游标见分页

取一条收货记录

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

返回单个 Delivery;如果标识符未知或者密钥对那家餐厅没有授权,则返回 404

收货记录对象

字段类型含义
idstring这条收货记录的稳定标识符,在餐厅内唯一。
restaurantIdstring记录所属的餐厅。与路径中的一致。
occurredAtstring查验发生的时间,以字符串表示的 Unix 毫秒时间戳
isCompliantboolean员工对整批收货的判定。
supplierobject | null{ "id": string, "name": string };记录时没有填供应商则为 null
temperatureRecordsarray每个被测量的产品一条。见下文。
nonComplianceReasonsstring[]这批货被拒收、或被有保留地接收的原因。由员工自己写的自由文本;合规时为空。
correctiveActionsstring[]为此做了什么。不需要做什么时为空。
commentarystring | null自由文本备注。常常是 null
imageCountinteger附了多少张照片。0 表示照片端点没有东西可返回。

temperatureRecords[]

字段类型含义
productstring测量的是什么,按员工给它起的名字。绝不为空。
valuenumber | null读数。产品在没有测量的情况下被登记时为 null
unit"C"始终是摄氏度。之所以放在这里,是为了让使用方永远不必去假设。
lotNumberstring | null批号或批次,在它被采集到的时候。

正确地读它

isCompliant 是记录,不是计算结果。 它是收货的那个人做出的决定,可能与你只看 温度会得出的结论不一致——一次用表面探针取得的读数、一个有自己阈值的产品、一次 临场判断。请把它呈现为他们的判定。如果你想要自己的判定,把它算在他们的旁边,并 标明那是你的。

自由文本字段就是自由文本。 nonComplianceReasonscorrectiveActionsproduct 是员工在营业中打出来的,用的是这家餐厅的语言,带着一个忙碌周二的拼写。 不要拿它们建枚举,不要用它们做连接键,也不要假定它们是法语。

value 可以是 null 一个产品被登记却没有读数是正常的——它往往是干货。把 null 当作「未测量」,绝不要当作 0

时间戳是字符串。 occurredAt 是 Unix 毫秒时间戳的十进制字符串,因为整个 BackResto 平台就是这样存时间戳的。Number(occurredAt) 今天是安全的,往后几十万年 也是安全的,但不要让一个 JSON 解析器悄悄把它转成数字,然后再以丢了精度的样子写 回去。

示例

{
  "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
}

最后更新于 2026-09-19。