Every outcome of a field scan, and what the engineer reads
owner R&Dderived from RnD/passport@e4683f9version 1.2last tested against the code 2026-08-05live
A scan in the field either moves a device or refuses to. This page lists
every way that ends, in the order the register actually checks them, with
the literal sentence the engineer gets on screen. It is read out of
verplaats() and neemInHand() rather than written from
memory, so it cannot drift away from the app.
Applies to — passport @ pass.wbd-rd.nl, the Field tab and
/field/, live since 2026-08-03.
Does not apply to — the tag issue path (that comes out of the P&ID,
not a scan) and the admin routes.
The flow, in the order the checks fire
Order matters and is not cosmetic: a destroyed uuid is refused before anything
looks at the place, and the class check runs before the maintenance check, so a
pressure sensor on a valve position never reaches the question of whether the
position was signed off. Click any outcome.
Twelve of the sixteen are drawn. Left out on purpose: the two request guards a
client cannot reach from the field app (#1, #2) and the re-scan of a device you
already hold (#15) — they are in the list below.
pick an outcome above
Each one shows the literal sentence on the phone, and what the
engineer does next.
All of it as a list
Thirteen outcomes for a move and three for a handover. The refusals carry
their HTTP status because the field screen prints the server's sentence
verbatim — what you read below is what is on the phone.
#
when
what the register does
what the engineer reads
Two rules that explain most of the refusals
Nothing is written on a refusal. Every check above happens inside one
transaction, so a rejected scan leaves the register exactly as it was. There is
no half-move to clean up.
Where a device stands is its status. There is no status field to set, so
there is nothing to forget to set. That is also why "in the hands of" is not a
place you scan but simply the absence of one — see the movement rows below.
Both stickers can be missing or weathered. Neither dead-ends: an unrecorded
movement is worse than one recorded by hand, because without a record there is
no telemetry and operations have no view.
Unreadable
Way out
What is recorded
Device sticker
Type the short code printed under the QR (D-7F3A21); it resolves
to the same uuid. Gone as well? Search on supplier plus serial number from the
nameplate — that pair is the fingerprint and it is unique.
Evidence handmatig, under your own name.
Place sticker
“Place QR unreadable?” searches every place, not just this site —
a van or a return shelf belongs to no site. Outcome #4 above.
Evidence handmatig. Reprint the place sticker from the position
register; the tag itself never changes.
The manual way out takes more taps than scanning. That difference is the incentive, and it is deliberate.
source src/service.js — getRow() resolves uuid, short code and tag · outcome #4 above
Agreed on 2026-08-05, not yet in the app
This page is read out of the running code, so these four are kept apart until
they are built. Each comes out of the review round on part 1.
agreed · to be built
A defect flag is not maintenance
Silent-position detection will stop writing status: 'onderhoud'
and raise a defect flag instead. Outcome #10 then refuses on a position that is
visibly broken but never signed off — and says so.
Maintenance is a reservation — new refusal
Replacing on a position that someone else opened, or that you did not open
yourself, is refused: “you opened RG-KLUNDERT-PT-4, this is PT-5”.
This closes the one gap outcomes #9 and #10 leave open: two neighbouring
positions of the same class, both on maintenance.
A move is accepted but unconfirmed
Outcomes #12 and #13 keep succeeding, but the pairing stays
unconfirmed until the position’s Datastream lives again within the
configured window. Unconfirmed pairings surface on the deviation list.
Deliberately not a gate: the most common repair is a replacement on a loop that
is still dead.
A lapsed maintenance asks a question
Today an opened maintenance that expires silently writes back “in
service”. It will instead raise an open item on whoever opened it —
was the meter replaced? — with “yes, without scanning” as
the correction path.
Whether a position should be on maintenance. The register only checks
that it is. Today the silent-position detection opens that state on its own signal
(learned rhythm, flatness, edge heartbeat) and an engineer can set it by hand
from the refusal screen — one confirmation, under their own name, lapsing after a
configurable window (24 h by default). Under the decision above that split becomes
sharper: detection raises a defect flag, and only a person opens maintenance.
How the detection itself works is part 3.
A refusal you do not understand. Every refusal above carries its HTTP
status and the literal sentence; find it in the table and read the
what the engineer does next column. Nothing was written, so there is
nothing to undo.
A move landed on the wrong place. Scan the device onto the place where
it actually is. That is a normal movement; the history keeps both, so the
mistake stays visible instead of being erased.
A device was scrapped by accident. This is the one that does not
reverse on its own: the undo path needs two different admins. The uuid never
returns — if the unit physically exists, register it at goods-in and it gets a
new one.
The screen shows a sentence that is not in this table. Then this page
is out of date, not the app. Re-read src/plaatsen.js and update it;
the whole value of this document is that the two match.
Escalation — R&D lab.
Method the outcomes are read out of verplaats() and neemInHand(); every sentence below zin is copied from the server message verbatim.
Last checked 2026-08-05 against RnD/passport@1bba319. A change to the refusal messages makes this page wrong — re-read it after touching src/plaatsen.js.
If it goes wrong nothing is written on a refusal (one transaction), so a rejected scan needs no clean-up. A move that was accepted but wrong is corrected by scanning the device to where it actually is; scrap is the one step that does not reverse without two admins.