Pharmacy compliance technician providing live chat help

Joe B.

Reviewed for technical accuracy

Specialities: Pharmacy IT, Barcode systems, GS1/UDI, Rx inventory, Omnicell/Pyxis, Compliance (DEA/State Board)

Fix failed barcode scans on controlled substance logs — NDC/GTIN mismatch, GS1-128/Code 128, DataMatrix, scanner setup

Technician avatar Technician
Welcome! We’ll get the controlled substance log barcode to pass audit-scanning and record correctly in your perpetual inventory.
A few quick questions so I target the fix: Are auditors or staff failing to scan a printed log label from your system, or the manufacturer’s barcode on the bottle/box? Which symbology do you expect — GS1-128 (Code 128), GS1 DataMatrix (2D), or UPC-A? And what’s the system capturing — NDC (11-digit), GTIN (AI 01), plus Lot (AI 10) / Expiry (AI 17) / Serial (AI 21)?
Customer
Auditors couldn’t scan our log labels. Our scanners beep but data is wrong — the NDC posts without leading zero and the Lot + Expiry don’t populate. We use handhelds set to keyboard wedge/HID. System expects 11-digit NDC and MM/YY expiry.
Technician avatar Technician
Got it. Audit failures usually come from three buckets:
1) NDC formatting — converting 10-digit patterns (5-3-2, 4-4-2, 5-4-1) to 11-digit without proper zero-padding.
2) GS1 parsing — scanners not sending Application Identifiers (AI 01, 10, 17, 21) or dropping the FNC1 separator, so your Rx system can’t split GTIN/Lot/Expiry/Serial.
3) Label/print quality — low contrast, glossy lamination, 200–300 DPI thermal settings, tiny x-dimension, or wrong Code 128 subset.
Plan: fix the label data structure, correct scanner configuration (prefix/suffix/FNC1), and apply print specs so the controlled substance log scans cleanly during DEA/state board audits.
Customer
We print labels from our pharmacy system. The barcode type shows “Code 128.” Auditors asked for GS1-128 with GTIN (01), Lot (10), and Expiry (17). Our scanner sends all digits in one blob.
Technician avatar Technician
Step 1 — Output GS1-compliant data (GS1-128)
• Encode GTIN (AI 01) not raw NDC; convert NDC→GTIN: add labeler zeros + check digit via Mod-10.
• Append Lot (AI 10) and Expiry (AI 17) as variable/ fixed-length fields, using the FNC1 as separator after the GTIN and after Lot when followed by Expiry/Serial.
• Example data string: (01)00312345678905(17)2609(10)ABC123. Your software should render that as GS1-128 (Code 128 with AIs), not plain Code 128.
This lets the auditor’s system and your perpetual inventory parse fields reliably.
Customer
Our scanners are Zebra and Honeywell. They’re in HID mode. How do we make them send AIs and separators the way the log expects?
Technician avatar Technician
Step 2 — Configure scanners for GS1 parsing
• Enable GS1-128 and GS1 DataMatrix decode; turn on “Transmit AIs” and “Send FNC1 as Group Separator”.
• Set suffix to CR (Enter) and optional TAB if your log form advances between NDC/GTIN, Lot, Expiry fields.
• Disable Code 39/Interleaved 2 of 5 if false reads occur on outer cartons.
• For Honeywell, enable “Format for NDC/GTIN” or create a data template; for Zebra, use 123Scan to push a Data Formatting Rule that inserts separators where your Rx app expects them.
Customer
Labels sometimes scan on the bottle but not on our printed log. Auditors flagged “low grade” and “quiet zone” issues.
Technician avatar Technician
Step 3 — Meet print specs for audit-grade barcodes
• Thermal printer: 300–600 DPI, darkness 18–24 (avoid overheat/bleed); ribbon/label matched (wax-resin on semi-gloss).
• Quiet zone: ≥ 10× module width left/right; x-dimension 0.33–0.5 mm for GS1-128, height ≥ 25 mm.
• Contrast (PCS) ≥ 0.7; avoid glossy laminate and tight curvature on tiny vials; print at 0° or 90° only.
• Verify with ISO/IEC 15416/15415; aim for grade ≥ C. Reprint any label below C to avoid audit scanning failures.
Customer
Our system stores NDC, not GTIN. Can we still pass audits? We also track C-II waste and witness sign-off.
Technician avatar Technician
Step 4 — Map NDC↔GTIN and capture required fields
• Maintain a labeler-product-package map: 10-digit NDC → 11-digit NDC → GTIN-14 (pad labeler with leading zero, compute check digit).
• Store both NDC and GTIN so you can ingest either bottle barcode or your log label.
• Ensure log form captures: Lot, Expiration, Quantity dispensed/returned, Blind count, Chain-of-custody, Witness sign-off. These fields matter for DEA diversion controls and state inspections.
• For C-II: reconcile daily; for CIII-V: weekly cycle counts synced to your perpetual inventory.
Customer
We’re a hospital using Omnicell/Pyxis and a separate pharmacy system. VPN carts sometimes fail to scan or post duplicates. Any enterprise tips?
Technician avatar Technician
Yes — for enterprise/ADC environments:
• Standardize scanners (same firmware/profile); push configs via Zebra StageNow or Honeywell DME.
• Use GS1 parsing on the device and send fields via API/HL7/CSV instead of raw keystrokes when possible.
• Prevent duplicates: one source of truth for NDC/GTIN mapping; block non-GS1 symbologies; require FNC1.
• Over VPN/Wi-Fi, lock scanners to low-latency SSID; disable power-saving that drops HID sessions mid-scan; add debounce on your log form to avoid double posts.
Customer
After changes, our labels scan. Auditors return next week. Any last checks so we pass?
Technician avatar Technician
Final checks for audit-scanning:
• Re-verify sample labels with an ISO verifier (grade ≥ C), confirm quiet zones, and print density.
• Test scans in your controlled substance log workflow: Bottle → Log label → Return/waste record → Reconciliation report — ensure Lot/Expiry persist across steps.
• Freeze the scanner profile through the audit window; keep backup pre-printed labels; document your GS1/NDC mapping and FNC1 policy for the auditor packet.
Customer
Perfect — test run passes and fields map correctly. We’re ready for the audit. Thanks!
Technician avatar Technician
Summary: To fix controlled substance log barcode failing audit-scanning, output GS1-compliant data (GTIN with AIs 01/10/17/21), configure scanners to transmit AIs + FNC1, and meet print quality specs. Map NDC↔GTIN, capture Lot/Expiry/Quantity/Witness, and standardize profiles across devices (Omnicell/Pyxis). Need help applying templates or scanner rules? Open the chat.

Quick answer: the accepted fix

Accepted fix when a controlled substance log barcode fails audit-scanning: output GS1-128/DataMatrix with GTIN (AI 01), Lot (10), Expiry (17); configure scanners to send AIs and FNC1; meet ISO print quality (quiet zone, x-dimension, contrast). Map NDC→GTIN, then test end-to-end so your perpetual inventory reconciles for DEA/state board.


Why controlled substance log barcodes fail audits (NDC/GTIN, GS1 parsing, print quality)

Most failures come from NDC formatting (10→11-digit zero-padding), scanners that don’t transmit Application Identifiers or FNC1, and sub-spec labels (quiet zone, x-dimension, contrast). Using GS1-128 or GS1 DataMatrix with proper GTIN/Lot/Expiry fields and verified print quality prevents audit-scanning issues and supports diversion controls.

How to verify before the auditor arrives

Run a test pack: scan manufacturer bottle → print log label → scan into perpetual inventory → create waste/return entry. Confirm the system parses GTIN (01), Lot (10), Expiry (17). Use an ISO verifier (15416/15415) and keep the report in your audit binder.

Audit-ready barcode — quick checklist

Get parsing right, then get print right — both are required for a clean audit trail.

Quick path: enable GS1-128/DataMatrix → send AIs + FNC1 → map NDC↔GTIN → print at 300–600 DPI with proper quiet zones → verify to ISO grade C or better → lock scanner profiles until after the audit. This sequence resolves the majority of controlled substance log barcode failures.

Disclaimer: This information is AI-generated and intended for general guidance only. For advice specific to your environment, please consult a verified expert on Whizz-Tech before making decisions.


Getting Started Is Easy

Ask for help, 24/7

Members enjoy round-the-clock access to 12,000+ verified Experts, including tech support, mechanics, vets, and more.

Expert will respond in minutes

We match you with an Expert who specializes in your situation. Talk, text, or chat — whichever you prefer.

Save time & money

No scheduling hassles or expensive consults. Membership can save you significant time and money each month.

FAQ

Why does our controlled substance log barcode fail audit-scanning?

Usually because of NDC→GTIN mismatches, scanners not sending Application Identifiers and FNC1, or labels below ISO grade (quiet zone/x-dimension). Fixing GS1 data and print specs resolves most failures.

Do we need GTIN if our system stores NDC?

For GS1 labels, yes — encode GTIN (AI 01) and map NDC↔GTIN in your system. You can still store/display NDC while scanning GTIN with Lot (10) and Expiry (17).

Which barcode type is best for audit trails — GS1-128 or DataMatrix?

Both are compliant; GS1-128 is 1D and widely supported; GS1 DataMatrix fits small vials. The key is including AIs (01/10/17/21) and meeting ISO/IEC print quality.

Enterprise tip: Omnicell/Pyxis and pharmacy system don’t match

Standardize GS1 parsing and NDC↔GTIN mapping across systems, send structured data (API/HL7) instead of raw keystrokes, and lock scanner profiles until after the audit.

Common controlled substance barcode problems and quick fixes
SymptomLikely causeQuick fix
Scanner beeps but fields are wrong No AIs/FNC1; raw Code 128 instead of GS1-128 Enable GS1 parsing; transmit AI 01/10/17 + FNC1
NDC loses a leading zero 10→11 digit padding not applied Normalize NDC or scan GTIN (01) and map back
Label scans on bottle, not on log Quiet zone/contrast/x-dimension out of spec 300–600 DPI, quiet zone ≥10×, verify ISO grade ≥ C
Duplicates or double posts HID debounce/VPN latency Add debounce, set CR/TAB once, prefer API over wedge

Step-by-step (rapid remediation)

  1. Change label template to GS1-128 (or GS1 DataMatrix) with GTIN (01), Lot (10), Expiry (17).
  2. Enable scanner options: Transmit AIs, Send FNC1, suffix CR (and TAB if needed).
  3. Normalize NDC↔GTIN mapping (compute check digit, pad to 11 digits).
  4. Set printer to 300–600 DPI, correct darkness; enforce quiet zones; verify ISO grade ≥ C.

Note for mixed environments (ADC, carts, macOS)

  1. On carts/ADCs (Omnicell/Pyxis), push a single standardized scanner profile with GS1 parsing on.
  2. macOS/HID: ensure input method doesn’t swallow TAB/CR; test with both 1D and 2D symbols.

Sources

Matt Verified Icon
Matt ● replies in < 1 min
Technician Expert
⭐⭐⭐⭐⭐ Trusted by 27,000+ customers
Avatar
Alex · Expert's Assistant