Files
CSG-Picker-Shipper-Helper/docs/PICKER_INTEGRATION_PLAN.md
T
Jonah 2177922678 Reorganize root: move docs, remove tracked credentials and data files
- Move USER_GUIDE, planning docs, and session logs to docs/
- Untrack FedexAPI.txt (contains live API credentials) and OnPart_inv.csv (large data file)
- Update .gitignore to cover FedexAPI.txt and *_inv.csv going forward
- Delete junk files: =1.23.0, Address.txt, stale screenshot

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-07-06 00:31:08 -05:00

74 lines
4.0 KiB
Markdown

# Coordination Plan: Barcode Picking & QR Print Integration
This document outlines the design and integration process of the **CSG Part Verifier** (mobile picking interface) and the **QR Label printing** logic. It is written to provide full context for other AI agents working on the desktop application.
---
## 1. Overview of the Integration
We are adding two features to the ecosystem:
1. **Mobile Picking Client (Android & PC):** Allows operators on the warehouse floor to scan invoice QR codes, pull up pick lists, and verify items by scanning box QR codes.
2. **Label QR Code Printing:** Updates GDI label generation so all printed labels contain layout-compliant QR codes (Invoice Number for shipping address labels, SKU string for part labels).
To keep this a **drop-in solution** without interfering with the active desktop app structure:
- **No Direct Printing:** The desktop app will no longer run direct GDI print calls locally via `win32print`. Instead, it will post all print requests to the existing `qb_efficiency` bridge server.
- **Background Web Server:** We will spawn a lightweight background Flask thread inside the desktop app. This thread will run on a separate port (`5001`) to serve the mobile picking client and lookup invoices.
- **Zero Database Overhead:** The picking server will read live invoice data from the existing `qb_efficiency` sync result folder.
---
## 2. Shared File Changes & Additions
### Active Build: `Part Lookup Program (1)`
1. **[NEW] `app/picker_server.py`:**
- Spawns a Flask web server on a background thread.
- Listens on `port 5001`.
- Serves static picker UI files (`picker.html` and `picker.js`) located in `app/assets/`.
- **`GET /api/invoice/<ref_number>`:** Resolves invoice line items by reading and parsing the cached QuickBooks results from `C:/Users/mario/OneDrive/Documents/Claude/Projects/qb_efficiency/qb-bridge/state/results/invoice_*.json`.
- **`POST /api/print-label`:** Forwards print requests to the local `qb_efficiency` print bridge (`http://localhost:5000/api/label-jobs/enqueue`).
2. **[NEW] `run_picker.py`:**
- Standalone startup script that runs the Flask server on the host machine. Run it to launch the mobile picking assistant independently (keeps the desktop app completely separate).
3. **[MODIFY] `app/labels.py`:**
- Refactor `print_label` and `print_address_label` to make HTTP POST requests to the `qb_efficiency` enqueue endpoint:
```python
# Example POST to http://localhost:5000/api/label-jobs/enqueue
payload = {
"label_data": {
"order_id": sku_or_invoice_id,
"source": "parts_lookup",
"skus": [{"sku": sku, "description": desc, "line_qty": 1}]
}
}
```
4. **[NEW] `app/assets/picker.html` & `app/assets/picker.js`:**
- HTML5 video element container and canvas processing script.
- Integrates the `html5-qrcode` library for high-speed camera scanning.
- Handles item checklists, verification matching, and audio success/error feedback.
5. **[MODIFY] `PartsLookup.spec`:**
- Update PyInstaller datas config to copy `app/assets/picker.html` and `app/assets/picker.js` into the compiled bundle resources folder.
---
## 3. QB Efficiency: `qb_efficiency`
1. **[MODIFY] `qb-bridge/label_agent/csg_label_agent.py`:**
- Install and import the `qrcode` library.
- Update both GDI renderers (`_render_sku_label` and `_render_shipping_label`) to generate a QR image (containing either the SKU or Invoice Number).
- Use Pillow's `ImageWin.Dib` to draw the QR code on the print context alongside the existing CSG logo and Made-in-USA logo.
---
## 4. Verification Details
- **Dependencies:** Run `pip install qrcode pillow flask requests` in the python environment.
- **Port Mapping:**
- `qb_efficiency` Flask Bridge runs on `5000`.
- `csg_label_agent.py` print agent polls `5000` and prints labels.
- Desktop app background picker thread runs on `5001`.
- Android device accesses picking page at `http://<host-pc-ip>:5001/picker`.