Milestone 3: catalog sync, batch transactions, and reports

- GET /api/v1/catalog/sync?since= — delta sync for Android offline-first
- POST /api/v1/transactions/batch — idempotency-keyed batch upload (207 Multi-Status),
  validates product ownership, skips duplicates silently
- GET /api/v1/transactions + /reports/summary — paginated list and aggregated
  revenue/tax/top-product reporting with date range filters
- ReportsPage: stat cards, payment method breakdown, top-10 products, transaction table
- Reports added to sidebar nav and router

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-03-21 06:51:27 -05:00
parent c35f92f18b
commit 91e1a1ffbf
7 changed files with 562 additions and 6 deletions

View File

@@ -25,13 +25,15 @@
---
## Milestone 3 — Android & Offline Sync
- [ ] `GET /api/v1/catalog/sync?since=` for delta syncs
- [ ] `POST /api/v1/transactions/batch` with idempotency keys
- [ ] Android Kotlin app: MVVM, Room, offline-first flows
## Milestone 3 — Android & Offline Sync ✅ (server-side)
- [x] `GET /api/v1/catalog/sync?since=<ISO>` delta sync for products, categories, taxes
- [x] `POST /api/v1/transactions/batch` idempotency-keyed batch upload (207 Multi-Status)
- [x] `GET /api/v1/transactions` — paginated list with date/status/payment filters
- [x] `GET /api/v1/transactions/reports/summary` — revenue, tax, top products, payment breakdown
- [x] Reports page: stat cards, payment method breakdown, top products, transaction table
- [ ] Android Kotlin app: MVVM, Room, offline-first flows (separate deliverable)
- [ ] Background sync worker (Android)
- [ ] Conflict resolution strategy: server-authoritative for payments
- [ ] Admin reporting: Android-originated transactions appear in reports
- [ ] Conflict resolution: server-authoritative for payments (enforced via idempotency)
---