The pharmacy session can stay open for the working day. Staff then identify using the admin-selected method: personal PIN or initials.
Scan stock
Expiry check in progress
New expiry check
Start a new expiry check for .
Resume an expiry check
Scan product
Eyoyo HID • scan + EnterAlready scanned
Same expiry already exists
Current expiry check
0 products • 0 unitsExpiry dashboard
| Product | Barcode | Expiry | Scanned | Qty | DS List |
|---|
Named items
No named items
Barcodes this pharmacy scanned that have since been given a name.Reports and history
Expiry check history
| Select | Product | Barcode | Expiry | Scanned | Qty | DS List | Actions |
|---|
Preview
Exactly what printsCompare expiry checks
Shows product/expiry lines whose quantities changed| Product | Expiry | Earlier | Later | Change | Status |
|---|
Acceptance testing
Validate the iPhone and Eyoyo workflow before using it on the pharmacy floor.
iPhone + Eyoyo pilot
Guided user-acceptance test before pharmacy rolloutEyoyo scanner diagnostic
Use this before the first real expiry checkThe scanned code appears once and the ending key shows Enter or Tab. Expiry Genie accepts either suffix; CR / Enter remains the recommended setting.
Guided pilot checklist
Mark each test Pass, Fail or SkipReport a problem / suggestion
Automatically attaches technical diagnostics, not passwords or PINsPilot feedback queue
Admin view • blocker/high issues firstUnknown items
No unknown items
Barcodes scanned here that nobody has named yet.Scanner setup
Pair the scanner, watch offline synchronisation and track DS List transfers.
Eyoyo setup
- Pair the scanner to the iPhone in Bluetooth HID mode.
- Configure a barcode suffix of CR / Enter so each scan submits automatically.
- When the scanner hides the iPhone keyboard, double-click a scan button to show it; double-click again to hide it.
- Keep the scanner in 2D mode so QR/Data Matrix and normal EAN/UPC codes are accepted.
Scan → expiry auto-focus → type 0827 → quantity auto-focus → Enter/Done → saved → scanner ready.
Offline sync
Keep scanning through Wi-Fi or server outagesAn already-open expiry check can continue offline. Starting or finishing an expiry check requires the server. DS List transfers wait until the expiry entry itself has synchronised.
DS List outbox
0 pendingSettings
Pharmacy-wide configuration and platform status. Changes here affect every device.
Deployment & timeVersion, uptime and the expiry time zone
Expiry is stored as a calendar month with no time zone, so the server has to be told which zone the pharmacy is in. Set APP_TIMEZONE in the deployment environment. Left unset, the server falls back to the container clock — usually UTC, which sits in the previous month for the first ~10 hours of each Australian day and under-counts expired stock on the 1st.
IntegrationsProduct lookup and DS List connectivity
EAN/UPC scans are normalised to a 14-digit GTIN for external lookup. GS1 DataMatrix/QR payloads containing application identifier (01) are also recognised. Ordinary QR values remain usable in the local product master.
More settingsScanner, pilot testing and security
MobileWhich screens the phone menu offers
The phone shows one screen at a time and reaches the rest through the swipe menu. Dashboard, Items and Reports & History start switched on; the rest are desk work and start off. Scan is always available and cannot be turned off.
Product listSearch, rename and remove products
| Product | Barcode | Counted | Actions |
|---|
Removing is permanent and only offered for a product that has never been counted — a product with expiry check entries cannot be deleted without orphaning that history.
Product list importSeed names from a POS or wholesaler export
Upload a CSV containing a barcode column and a product name column. Column names are detected automatically — barcode, EAN, GTIN, product code and similar all work, as do name, description and item description. The file is checked and previewed before anything is written.
Barcodes not already known are added to the shared product list. The name you supply is always saved as this pharmacy's own name, so another store cannot overwrite it. Items previously recorded without a name are named. Nothing already correct is touched, and expiry entries are never changed.
Database healthIntegrity and foreign-key checks
Encrypted backupsAutomatic AES-256-GCM snapshots
Restore is deliberately server-side only. Stop Expiry Genie and use the guarded restore command documented in PRODUCTION.md.
Security
Staff identity, active sessions and the audit trail.
Staff identificationHow staff identify after the pharmacy session opens
PIN mode verifies the selected staff member with a personal PIN. Initials-only mode is faster, but initials are identification/audit attribution only and are not a security credential. Changing mode makes active devices identify staff again without closing the pharmacy session.
Staff profilesNames, unique initials, roles and PINs
Active sessionsReview or revoke pharmacy sessions
Pharmacy passwordRotate the shared pharmacy-session credential
Changing the password revokes all other pharmacy sessions; this device remains signed in.