vault backup: 2026-02-26 21:47:14
This commit is contained in:
258
Test/EventKit/05 - Barcode and QR Scanning.md
Normal file
258
Test/EventKit/05 - Barcode and QR Scanning.md
Normal file
@@ -0,0 +1,258 @@
|
||||
---
|
||||
tags:
|
||||
- eventkit
|
||||
---
|
||||
# Barcode & QR Scanning
|
||||
|
||||
## Purpose
|
||||
|
||||
Enable fast, accurate equipment tracking through QR code scanning. Every [[01 - Inventory Management|asset]], [[01 - Inventory Management#Cases & Packing|case]], and [[01 - Inventory Management#Warehouse & Locations|warehouse location]] gets a scannable code, powering workflows from check-out to stocktake to cross-company [[01 - Inventory Management#Sub-hire Management|sub-hire]].
|
||||
|
||||
---
|
||||
|
||||
## 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 |
|
||||
|
||||
---
|
||||
|
||||
## 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 (see [[04 - Federation Architecture#Global Asset Identity | Global Asset Identity]]) |
|
||||
| **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 |
|
||||
|
||||
### Recommended Setup
|
||||
|
||||
| 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 |
|
||||
|
||||
---
|
||||
|
||||
## Scanning Workflows
|
||||
|
||||
### Check-Out (Dispatch to Event)
|
||||
|
||||
```mermaid
|
||||
sequenceDiagram
|
||||
participant User as Warehouse Staff
|
||||
participant App as EventKit App
|
||||
participant API as API Server
|
||||
|
||||
User->>App: Open [[02 - Planning Module#Pull Lists / Equipment Planning|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 → "[[01 - Inventory Management#Asset Lifecycle & Statuses|Checked Out]]"
|
||||
App-->>User: ✅ Item confirmed on list
|
||||
end
|
||||
|
||||
App-->>User: Pull list complete: 47/47 items scanned
|
||||
```
|
||||
|
||||
### Check-In (Return from Event)
|
||||
|
||||
```mermaid
|
||||
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
|
||||
|
||||
```mermaid
|
||||
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
|
||||
|
||||
```mermaid
|
||||
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)
|
||||
|
||||
```mermaid
|
||||
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 → [[04 - Federation Architecture|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:
|
||||
|
||||
- Asset/case details (model, serial, owner)
|
||||
- Current status ([[01 - Inventory Management#Asset Lifecycle & Statuses|available, checked out, in repair]], etc.)
|
||||
- Current [[01 - Inventory Management#Warehouse & Locations|location]]
|
||||
- Current [[02 - Planning Module|event]] assignment (if any)
|
||||
- Condition notes
|
||||
- [[01 - Inventory Management#Maintenance & Testing|Maintenance]] due dates
|
||||
|
||||
---
|
||||
|
||||
## 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 | 12–62mm |
|
||||
| **Dymo LabelWriter** | Office / low volume | 19–54mm |
|
||||
| **Zebra ZD-series** | Warehouse / high volume | 25–108mm |
|
||||
| **Zebra ZQ-series** | Mobile / on-site | 48–72mm |
|
||||
|
||||
---
|
||||
|
||||
## 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 |
|
||||
|
||||
---
|
||||
|
||||
## Related Documentation
|
||||
|
||||
- [[00 - System Overview]] — High-level system overview
|
||||
- [[01 - Inventory Management]] — Assets and cases that get scanned
|
||||
- [[04 - Federation Architecture]] — Scanning federated assets
|
||||
- [[07 - Technical Requirements]] — Hardware and deployment considerations
|
||||
Reference in New Issue
Block a user