Files
obsidian/Test/EventKit/05-BarcodeAndQRScanning.md

12 KiB
Raw Blame History

tags
tags
eventkit

Barcode & QR Scanning

Purpose

Enable fast, accurate equipment tracking through QR code scanning. Every 01-InventoryManagement, 01-InventoryManagement#Cases & Packing, and 01-InventoryManagement#Warehouse & Locations gets a scannable code, powering workflows from check-out to stocktake to cross-company 01-InventoryManagement#Sub-hire Management.


What Gets a Code

Entity Code Type Encoded Data Printed On
Individual Asset QR Code URL → https://{instance}/asset/{uuid} Durable label sticker on the asset
Flight Case QR Code URL → https://{instance}/case/{uuid} Case lid label / hang tag
Warehouse Location QR Code URL → https://{instance}/location/{id} Shelf / bay / rack label
Kit / Set QR Code (optional) URL → https://{instance}/kit/{id} Kit card / bag tag
Consumable Barcode (EAN/UPC) Product ID or manufacturer barcode Existing packaging or custom label

Legacy Barcode Support

Companies migrating to EventKit may already have existing barcode/label schemes. EventKit supports dual scanning — both legacy barcodes and new QR codes are recognised:

Feature Description
Legacy barcode import Import existing barcode-to-asset mappings during onboarding
Dual scanning Scan either a legacy barcode or an EventKit QR code — both resolve the asset
Gradual migration No need to re-label everything at once; legacy barcodes remain valid
Barcode format support Code 128, Code 39, EAN-13, UPC-A, QR — any standard 1D/2D format

QR Code Design

Data Format

Each QR code encodes a URL pointing to the owning instance:

https://inventory.company-a.com/asset/550e8400-e29b-41d4-a716-446655440000

Why URLs?

Benefit Description
Universal Any phone camera can scan it and open the asset page in a browser
Federation-friendly The domain tells any EventKit instance who owns the asset
App-aware A dedicated EventKit app can intercept the URL and handle it natively
Offline-capable The app can extract the UUID locally and sync the action later
Future-proof No proprietary encoding — standard URLs work forever

Label Design

┌─────────────────────────────┐
│  ┌───────────┐              │
│  │           │  SM58-00142  │
│  │  QR Code  │  Shure SM58 │
│  │           │              │
│  └───────────┘  Company A   │
│                             │
│  ID: 550e8400...            │
└─────────────────────────────┘

Labels should include:

  • QR code (primary)
  • Human-readable ID (e.g. SM58-00142)
  • Product name
  • Company name (important for sub-hired equipment)
  • Optional: Barcode (Code 128) as fallback

Label Requirements

Requirement Details
Durability Laminated or heavy-duty vinyl — must survive road use, rain, and handling
Size Minimum 30×30mm for QR code to ensure reliable scanning
Adhesive Strong permanent adhesive for assets; removable for temporary labels
Print quality Minimum 300 DPI for reliable scanning

Scanning Hardware

Option Best For Notes
Phone camera (PWA) Occasional use, small teams Zero hardware cost, works on any modern phone
Phone camera (native app) Regular use Better scanning speed, offline support, push notifications
Bluetooth barcode scanner Warehouse ops, bulk scanning Pairs with phone/tablet — much faster than camera
Rugged handheld Heavy warehouse / outdoor use e.g. Zebra TC-series — built-in scanner, drop-resistant
Fixed scanner Check-in/check-out desk Mounted scanner at warehouse dispatch point

Default: Phone camera (web or native). Power-user option: Bluetooth barcode scanner paired to phone/tablet for bulk warehouse operations.

Role Device
Warehouse staff Bluetooth scanner + tablet (mounted on cart)
On-site crew Phone app (PWA or native)
Office / planning Web UI (no scanning needed)
Dispatch desk Fixed USB scanner + desktop

Label Printing

Method Description
PDF generation Default — generate PDF sheets for any label printer (Avery sheets, etc.)
Direct printing Optional — integration with label printers (Brother QL, DYMO, Zebra)

Users can also print QR codes however they prefer — EventKit provides the QR data and a printable format.


Scanning Workflows

Check-Out (Dispatch to Event)

sequenceDiagram
    participant User as Warehouse Staff
    participant App as EventKit App
    participant API as API Server

    User->>App: Open Event Pull List
    App-->>User: Show items to dispatch

    loop For each item/case
        User->>App: Scan QR code
        App->>API: POST /scan/checkout {asset_uuid, event_id}
        API-->>App: ✅ Asset status → "Checked Out"
        App-->>User: ✅ Item confirmed on list
    end

    App-->>User: Pull list complete: 47/47 items scanned

Check-In (Return from Event)

sequenceDiagram
    participant User as Warehouse Staff
    participant App as EventKit App
    participant API as API Server

    User->>App: Open Event Return

    loop For each returning item
        User->>App: Scan QR code
        App-->>User: Prompt: Condition? [OK / Damaged]
        User->>App: Select condition + optional note/photo
        App->>API: POST /scan/checkin {asset_uuid, condition, notes}
        API-->>App: ✅ Asset status → "Checked In" or "Damaged"
    end

    App-->>User: Return complete. 2 items flagged as damaged.

Stocktake / Audit

sequenceDiagram
    participant User as Warehouse Staff
    participant App as EventKit App
    participant API as API Server

    User->>App: Start Stocktake for Location "Shelf B3"
    User->>App: Scan location QR code

    loop For each item on shelf
        User->>App: Scan asset QR code
        App->>API: POST /scan/stocktake {asset_uuid, location_id}
        API-->>App: ✅ Asset found at expected location
    end

    App->>API: POST /stocktake/complete {location_id}
    API-->>App: Report: 3 missing, 1 unexpected item found
    App-->>User: Stocktake discrepancy report

Case Packing

sequenceDiagram
    participant User as Warehouse Staff
    participant App as EventKit App
    participant API as API Server

    User->>App: Scan Case QR code
    App-->>User: Show case contents (expected packing list)

    loop For each item going into case
        User->>App: Scan asset QR code
        App->>API: POST /scan/pack {asset_uuid, case_uuid}
        API-->>App: ✅ Item added to case
    end

    App-->>User: Case packed: 8/8 items ✅

Sub-hire Receive (Federated)

sequenceDiagram
    participant User as Company B Staff
    participant B_App as Company B App
    participant B_API as Company B API
    participant A_API as Company A API

    User->>B_App: Scan QR code on received item
    Note over B_App: URL domain = company-a.com → federated asset
    B_App->>B_API: POST /scan/subhire-receive {url, condition}
    B_API->>A_API: GET /federation/asset/{uuid}
    A_API-->>B_API: Asset details (Shure SM58, SN: 00142)
    B_API->>A_API: POST /federation/asset/{uuid}/checkin
    B_API-->>B_App: ✅ Sub-hired asset received from Company A
    B_App-->>User: Show asset details + "Owned by Company A"

Quick Lookup

Scan any QR code outside of a workflow to instantly see:


Label Printing

Built-in Label Generation

Feature Description
Single label printing Generate and print a label for one asset
Bulk label printing Generate labels for a batch of assets (e.g. all new purchases)
Case labels Larger format labels for flight case lids
Location labels Labels for warehouse shelves/bays/racks
Label templates Customisable label layouts
Export formats PDF (for any printer), ZPL (for Zebra label printers)

Label Printer Recommendations

Printer Use Case Label Width
Brother QL-series Office / low volume 1262mm
Dymo LabelWriter Office / low volume 1954mm
Zebra ZD-series Warehouse / high volume 25108mm
Zebra ZQ-series Mobile / on-site 4872mm

Offline Scanning

Scenario Behaviour
No connectivity Scans are queued locally on the device
Weak connectivity Scans are queued and sent in batches when signal improves
Back online Queued scans sync to the server with original timestamps
Conflict resolution Server timestamps win; user is notified of any conflicts
Local asset cache App caches asset data for offline lookup after initial sync