Surface analyses

Surface swabs — what was tested, whether it passed, and the action plan when it did not.

A surface analysis is a swab. Someone runs a test over a work surface — a cutting board, a slicer, a cold-room shelf — and records what came back. One record per swab: what was tested, whether it was satisfactory, and what was decided when it was not.

CollectionScopeWhat a record is
surface-analysessurface-analyses:readOne swab, its verdict, and the action plan behind it.

It shares the snapshot envelope: id, deleted, capturedAt, receivedAt, sequence and the rest sit around the data below.

surface-analyses

FieldTypeMeaning
timestampstring, requiredWhen the swab was taken, epoch milliseconds as a string.
namestring, requiredWhat was tested. Free text, typed by the person.
isSatisfactoryboolean, requiredThe verdict that was recorded.
actionPlanstring | nullWhat was decided about it. Free text.
userIdstring | nullThe staff member who recorded it, when the app kept one.
{
  "id": "6f1d92c4-0b7a-4d31-9f18-3a6c2e5b7d40",
  "collection": "surface-analyses",
  "deleted": false,
  "capturedAt": "1789815240512",
  "receivedAt": "1789815312004",
  "sequence": "412",
  "data": {
    "timestamp": "1789812000000",
    "name": "Planche de découpe viande",
    "isSatisfactory": false,
    "actionPlan": "Désinfection renforcée, nouveau prélèvement lundi",
    "userId": "b3f7c1a0-5d42-4e88-9a16-7c0e2d4b9f31"
  }
}

Reading them

isSatisfactory is a verdict that was taken, not one you compute. It is what the laboratory reported or what the operator concluded on the spot, recorded as given. There is no threshold, no count and no unit in the record to recompute it from, and you should not go looking for one: present it as their verdict, in their words, and let a disagreement be theirs to settle.

name is text, not a reference. It does not point at an area or a piece of equipment — there is no id here to join on. Two swabs of the same surface a month apart can be spelled two different ways, so group on it only if you are willing to normalise, and never present a normalised name as the one that was recorded.

actionPlan is free text and independent of the verdict. It is null when nothing was typed, which is not the same as nothing being done, and it can be absent on an unsatisfactory swab. Do not infer one field from the other, and do not build an enum out of a field people write sentences in.

And the caveat that applies to every collection applies here too: what you get is what this API received, not the restaurant's complete history. See the envelope page before you count swabs, and the completeness note before you report the count to anyone.

Last updated 2026-09-20.