Files
2026-07-12 10:17:17 -04:00

63 lines
4.0 KiB
Markdown

# V1 → V2 Feature Gap (updated 2026-07-08)
spq-v2 (React/Vite SPA) covers ~90% of v1's feature set after the mass port on 2026-06-26.
## What v2 has (all pages render)
| Screen | File | Status |
|--------|------|--------|
| Login | `src/pages/Login.tsx` | Working |
| Dashboard | `src/pages/Dashboard.tsx` | Working (use sort=-id, not -created) |
| Quote Generator | `src/pages/QuoteGenerator.tsx` | Working — AI Write, Generate Priorities, AI Suggest, Quick Parts, Customer Decision, Tech Notes, Aftermarket Parts editor, Delivery Time editor, full legacy-accurate PDF with parts flags in output |
| Customers | `src/pages/Customers.tsx` | Working (graceful when vehicles collection missing) |
| Repair Orders | `src/pages/RepairOrders.tsx` | Working — uses repairOrders (NOT repair_orders) |
| Appointments | `src/pages/Appointments.tsx` | Working — includes Scan Screenshot (Tesseract OCR + DeepSeek extraction) |
| Financial Dashboard | `src/pages/FinancialDashboard.tsx` | Working — uses repairOrders collection (READ-ONLY: no editable financial summary modal) |
| Invoices | `src/pages/Invoices.tsx` | Shows setup banner (invoices collection missing) |
| Settings | `src/pages/Settings.tsx` | Working — 8 tabs (Business Info, Service Advisors, Tax & Fees, Quote Defaults, PDF & Branding, Business Ops, Service Catalog, Notifications), shows setup banner on Service Advisors tab |
| PDF-to-Images Export | `src/lib/pdf-to-images.ts` | New — extracts each PDF page as a PNG download |
| Dashboard (updated) | `src/pages/Dashboard.tsx` | Recent quotes now a custom dropdown with live search |
## AI Features (all in v2)
| Feature | Code | Endpoint |
|---------|------|----------|
| AI Write | `src/lib/ai.ts:aiWriteExplanation()` | `/deepseek/v1/chat/completions``api.deepseek.com` |
| Generate Priorities | `src/lib/ai.ts:getPriorityAnalysis()` | Same endpoint |
| AI Suggest Services | `src/lib/ai.ts:aiSuggestServices()` | Same endpoint |
| Scan Screenshot | `Appointments.tsx` inline | Tesseract.js OCR + DeepSeek extraction |
All use model: deepseek-v4-flash with thinking: disabled, temperature: 0. API key in `/etc/nginx/sites-enabled/shopproquote`.
## What v1 has that v2 still lacks
| Feature | v1 Files | Notes |
|---------|----------|-------|
| Auto-save drafts | `auto-save-draft.js` | Auto-save form state to localStorage |
| Customer Lookup (quick find) | `customer-lookup.js` | Quick search popup separate from full customer page |
| Active ROs quick view | `ro-active.js` | Compact active RO overview widget |
| Appointment Import | `appointment-import.js` | CSV bulk import |
| **Financial Summary / Complete RO modal** | `repair-orders.html:857`, `repair-orders.js:2016+` | Editable CP total/cost + Warranty total/cost inputs with live gross-profit; auto-deducts warranty from CP. **Not ported to v2**`FinancialDashboard.tsx` only reads the saved blob. See `references/financial-summary-modal.md` |
The Financial Summary modal is a significant missing editing surface (not a minor utility). Completing an RO in v1 prompts for CP/Warranty total/cost; v2 has no equivalent input flow.
## PocketBase collections needed
| Collection | Created? | Used by |
|------------|----------|---------|
| `quotes` | Yes | Dashboard, QuoteGenerator |
| `customers` | Yes | Customers |
| `appointments` | Yes | Appointments |
| `services` | Yes | Settings (Service Catalog) |
| `settings` | Yes | Settings |
| `repair_orders` | **No** | RepairOrders, Financial, Invoices |
| `invoices` | **No** | Invoices |
| `service_advisors` | **No** | Settings (Advisors tab) |
| `vehicles` | **No** | Customers (vehicle sub-records) |
Missing collections cause those pages to show error states. Create them via PocketBase admin UI or API to unlock full functionality.
## Architecture
- **v1**: Vanilla JS ES modules, Tailwind CSS via CDN, PocketBase SDK via CDN. No build step. Each page is a standalone HTML file.
- **v2**: React 19 + TypeScript + Vite + PocketBase SDK (npm). React Router SPA routing. Lazy-loaded code splitting. Tailwind via PostCSS.