Warranty & RMA Management System
Tech Specs
A repair operations platform that takes a unit from intake and the bench to supplier credit, with thermal labels, an SLA clock on every case and a Telegram assistant.
Platform
- Release
- v2.52.1
- Backend
- Python 3
- Flask 3.1 (8 blueprints)
- Gunicorn
- systemd services
- Database
- SQLite in WAL mode with foreign keys and a 30-second busy timeout
- Interface
- Server-rendered Flask templates with a custom design system
Repair Workflow
- Statuses
- PENDING, DIAGNOSING, REPAIRING, TESTING, WAITING_PARTS, SUPPLIER RMA, COMPLETED, COLLECTED, CANCELLED (configurable)
- Intake
- Several units under one Customer Order ID, with product suggestions and a live label preview
- Service tiers
- Manufacturing Warranty
- Post-Warranty Repair
- Billing
- Itemised parts, labour, diagnostic fees, discounts and tax on a printable service form
- Audit
- Every status change is timestamped in a status history
SLA
- Target
- 5 business days by default
- Warning
- From day 4 by default
- Weekends
- Excluded by default
- Exempt
- Post-warranty repairs, and cases at a closed or SUPPLIER RMA status
- Time zone
- Configurable, Asia/Kuala_Lumpur by default
Supplier RMA
- Batches
- Several units bundled into a vendor-bound package, grouped by supplier invoice
- Documents
- Credit notes, invoices and photos as PDF, PNG or JPG, checked by file signature
- Manifest
- Printable shipment manifest organised by invoice
- Resolution
- Credited, replaced or approved results flow back to the repair record
Protection
- Watchlist flags
- LOST_PARCEL
- SPONSORSHIP
- RESTRICTED
- REPLACED
- SUSPICIOUS
- Policies
- Soft warning (dismissible) or hard block (supervisor credential override)
- Replacements
- Defective serial linked to the new one, flagged automatically, with warranty coverage inherited
Hardware
- Label printer
- GP-1324D thermal printer, 60×40 mm labels, over CUPS or a raw USB device
- Barcodes
- Code128 with human-readable identifiers; USB scanners supported
- Status display
- 128×64 I2C OLED (SSD1306 / SH1106) showing IP, load and tunnel link
- Kiosk
- Optional 3.5-inch TFT dashboard and fullscreen kiosk mode on a Raspberry Pi
Assistant
- Interface
- Telegram, in allow-listed chats only
- Model
- Google Gemini with function calling
- Tools
- 24, all read-only
- Limits
- 20 requests per hour per user, 3 seconds apart
- Briefings
- Morning stand-up and evening wrap-up, plus intake, RMA and completion alerts
Storage & Access
- Storage backends
- Local filesystem
- Google Drive
- Google Cloud Storage
- Spreadsheets
- Repair records, replacements and RMA claims synced to Google Sheets
- Remote access
- Cloudflare Tunnel over HTTPS, no port forwarding
- Roles
- Admin
- Manager
- Technician
- Sign-in protection
- Account lockout after 5 failed attempts for 15 minutes by default, plus CSRF protection
Quality
- Automated tests
- 300+ (pytest), covering storage providers, routes, authentication, versioning, hardware configuration and the assistant
- Documentation
- API, database, hardware, analytics, security, operator workflows and design guides