vault backup: 2026-02-26 21:47:14

This commit is contained in:
2026-02-26 21:47:14 +01:00
parent a3f98b7600
commit 682ccd774b
10 changed files with 2096 additions and 0 deletions

View 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 | 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 |
---
## 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