TRVST & ScanBridge
How barcode scanning, GS1 parsing, and UNICEF TRVST verification work together on the Arrivals page.
What TRVST and ScanBridge are
TRVST is UNICEF's product verification service. Given a scanned product's GTIN (and, where present, batch/lot or serial number), it tells you whether that product is a genuine, correctly labelled UNICEF-procured item, and can return the product's master data (name, manufacturer, type, and more).
ScanBridge is the mobile app that connects a Zebra barcode scanner to VLMIS. It doesn't do any parsing itself: it reads whatever string the scanner produces and relays it, live, to your VLMIS session.
TRVST scanning is optional
An Administrator must turn TRVST scanning on for your organization in Maintenance → Settings before any of this appears. With it off, Arrivals works as a plain manual form.
The scanning flow
- Be on the Arrivals page, on any tab.
- Have a Zebra barcode scanner paired with a phone running ScanBridge, logged in with your own VLMIS credentials.
- Scan a box or package.
- ScanBridge sends the raw scanned string to VLMIS. The backend saves it as a scan record and pushes it over a websocket to your open browser tab in real time, no page refresh needed.
- VLMIS parses the string as a GS1 barcode (see below). If it parses cleanly, a form pre-fills automatically with GTIN, Batch/Lot Number, Expiration Date, and Arrival Date, and you're switched straight to the Batch Lists tab. If the package carries a serial number (a serialized product), that's filled in too and shown separately.
- If parsing fails or finds malformed/incomplete data, an error dialog lists exactly which part of the barcode was invalid, instead of silently guessing.
Every raw scan, successful or not, is also logged permanently on the Zebra Scans tab, so you can always audit what a scanner actually sent.
GS1 compliance
Scanned strings are parsed according to the GS1 General Specifications for Application Identifiers (AIs), the international standard for encoding structured data (product codes, batch numbers, dates, serials) into a single barcode. VLMIS currently recognizes:
| AI | Meaning | Format |
|---|---|---|
01 | GTIN (Global Trade Item Number) | fixed, 14 digits |
10 | Batch or lot number | variable, up to 20 characters |
11 | Production date (YYMMDD) | fixed, 6 digits |
17 | Expiration date (YYMMDD) | fixed, 6 digits |
21 | Serial number | variable, up to 20 characters |
A few rules the parser enforces, per the standard:
- Fixed-length AIs (
01,11,17) always take exactly as many characters as their format specifies, so the parser doesn't need a separator to know where they end. - Variable-length AIs (
10,21) run until the next recognizable AI starts, until 20 characters, or until a separator (some scanners send a literal GS1 group separator as whitespace, which the parser also accepts as a boundary between fields). 10,11,17, and21are only meaningful attached to a product, so each requires01(GTIN) to also be present in the same scan: a batch or expiration date without a GTIN is flagged as invalid rather than silently accepted.- Dates in
11/17are checked as real calendar dates (including leap years);20241332fails even though it matches the 6-digit shape. - Duplicate or self-contradicting data in a single scan (e.g. the same AI twice) is rejected rather than the second value silently overwriting the first.
Debugging a malformed barcode error
If you're integrating a different scanner or seeing an unexpected "malformed barcode" error, this AI table and rule set is the actual specification VLMIS checks against, not a generic barcode reader.
Verification actions on Batch Lists
Once a scan (or manual entry) has filled in GTIN, batch number, and expiration date, three buttons become available on the Batch Lists form, always alongside a save button, plus whichever verification actions apply:
- Get Product Data: pulls the full TRVST product record for the scanned GTIN (name, manufacturer, type, and more). Requires a GTIN.
- Verify with Batch: for products identified by batch/lot only (no serial number). Requires GTIN, batch number, and expiration date.
- Verify Product (pack verification): for serialized products. Requires GTIN, expiration date, and the serial number captured from the scan.
Each button is disabled client-side until its required fields are filled, so you can't fire off a verification call with incomplete data.
Related
- Arrivals: where this all comes together in day-to-day use.