Files
boc/quixzoom-shop/SHOP_STATUS.md
T
Bernt 58ca4e68db feat(boc): Complete Business Operations Center v1.0
- Go backend API with full CRUD for all modules (CRM, Sales, Finance, HR, Legal, Marketing, Support, Purchase, Inventory, Projects, Automation, Analytics)
- Rust analytics service with parallel report generation
- C runtime with POSIX shared memory IPC
- PostgreSQL schema with 30+ tables, full migrations
- Redis cache, sessions, pub/sub
- Kafka event streaming with Zookeeper
- WebSocket hub for real-time updates
- Automation engine with cron jobs, workflows, event triggers
- JWT authentication, multi-tenant from start
- Docker Compose with all services
- Nginx reverse proxy with rate limiting
- Integration tests passing
- Feature gap analysis against Fortnox/Odoo/Visma

Refs: BOC-001
2026-07-12 12:41:35 +00:00

190 lines
6.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# quiXzoom Shop — Status
## quiXzoom Field Program
| Nivå | Uppdrag | Krav | Förmåner |
|------|---------|------|----------|
| **Contributor** | 09 | Registrerad användare | Digital profil, digital verifiering |
| **Field Contributor** | 10+ | 10 godkända uppdrag | 🔓 Field Gear Store (västar, jackor, utrustning) |
| **Verified Field Contributor** | 100+ | 100 godkända uppdrag + 95% godkännandegrad + verifierad identitet + inga allvarliga policyöverträdelser | 🔓 Field ID Kit (personligt ID-kort, hållare, lanyard) + publik verifieringssida |
## ✅ Byggt och klart
### Backend (`quixzoom-shop/`)
- **FastAPI** service på port 8087
- **PostgreSQL** databas `quixzoom_shop`
- **19 produkter** (18 Field Gear + 1 Field ID Kit)
- **JWT-auth** för att verifiera Zoomers
- **Tier-system** med mission-gating och kvalitetskrav
- **Stripe-betalning** integrerad
- **Publik verifieringssida** för ID-kort
### API Endpoints
| Endpoint | Auth | Status |
|----------|------|--------|
| `GET /health` | Nej | ✅ |
| `GET /api/products` | Nej (tier-filter) | ✅ |
| `GET /api/products/{id}` | Nej | ✅ |
| `GET /api/eligibility` | Ja | ✅ (legacy) |
| `GET /api/tier` | Ja | ✅ |
| `POST /api/orders` | Ja | ✅ |
| `GET /api/orders` | Ja | ✅ |
| `GET /api/orders/{id}` | Ja | ✅ |
| `POST /api/payment/create-intent` | Ja | ✅ |
| `POST /api/payment/webhook` | Stripe | ✅ |
### Webbsidor
| Sida | Status |
|------|--------|
| `/` — Produktlista med kundvagn + tier-badge | ✅ |
| `/product/{id}` — Produktdetalj | ✅ |
| `/checkout` — Stripe-betalning | ✅ |
| `/verify/{id}`**Publik verifieringssida för ID-kort** | ✅ |
### Verifieringssida (`/verify/{contributor_id}`)
- ✅ Sök på Contributor ID
- ✅ Visar status (giltigt/ogiltigt)
- ✅ Visar contributor-info (namn, initialer, stats)
- ✅ Förklarar vad Verified Field Contributor innebär
- ✅ Info för fastighetsägare och kommuner
- ✅ QR-kod leder till denna sida
### App-integration
- Ny **Shop-tab** (🛒) i bottom navigation
- **ShopScreen.tsx** med tre tillstånd:
- Contributor (0-9): Låsskärm med progress
- Field Contributor (10+): WebView med shoppen + tier-banner
- Verified Field Contributor (100+): WebView med shoppen + verified-banner
- **Eligibility-check** via `/api/tier`
- Token injectas via `localStorage`
### Betalningsflöde (Stripe)
1. ✅ Kundvagn i localStorage
2. ✅ Order skapas i backend
3. ✅ Stripe PaymentIntent skapas
4. ✅ Stripe Elements för kortinmatning
5. ✅ Webhook för betalningsbekräftelse
6. ✅ Order uppdateras till `paid`
## 🔄 Kvar att göra
### Produktion
- [ ] Sätta upp nginx + SSL för `shop.quixzoom.com`
- [ ] Konfigurera riktiga Stripe-nycklar
- [ ] Sätta upp Stripe webhook endpoint
- [ ] systemd service aktivera
### Produktbilder
- [ ] Ladda upp riktiga bilder för alla 19 produkter
- [ ] CDN eller S3 för bildhosting
### Orderhantering
- [ ] Admin-panel för ordrar
- [ ] Orderstatus-flöde (pending → paid → shipped → delivered)
- [ ] Fraktintegration
- [ ] E-postbekräftelser
### Field ID Kit
- [ ] ID-kort design (namn, Contributor ID, QR-kod, giltighetsdatum)
- [ ] QR-kod generering i appen/webben
- [ ] Beställningsflöde för ID Kit (gratis för Verified)
## 🚀 Snabbstart produktion
```bash
# 1. Kopiera service-filen
sudo cp quixzoom-shop.service /etc/systemd/system/
sudo systemctl daemon-reload
sudo systemctl enable quixzoom-shop
# 2. Uppdatera Stripe-nycklar
sudo systemctl edit --full quixzoom-shop
# Ändra STRIPE_SECRET_KEY, STRIPE_PUBLISHABLE_KEY, STRIPE_WEBHOOK_SECRET
# 3. Starta
sudo systemctl start quixzoom-shop
# 4. Nginx-konfiguration
sudo cp nginx-shop.conf /etc/nginx/conf.d/
sudo nginx -s reload
# 5. SSL (Let's Encrypt)
sudo certbot --nginx -d shop.quixzoom.com
```
## 📊 Produkter
### Field Gear Store (10+ uppdrag)
| SKU | Namn | Pris (kr) | Kategori |
|-----|------|-----------|----------|
| VEST-001 | Field Vest | 1 299 | kläder |
| JACKET-001 | Mission Shell | 2 499 | kläder |
| PANTS-001 | Field Pants | 1 799 | kläder |
| BASE-001 | Base Layer | 899 | kläder |
| BEANIE-001 | Field Beanie | 499 | accessoarer |
| GLOVES-001 | Field Gloves | 799 | accessoarer |
| STRAP-001 | Capture Strap | 599 | utrustning |
| POUCH-001 | Utility Pouch | 699 | utrustning |
| COIN-001 | Ref. Coin | 199 | accessoarer |
| LIGHT-001 | Pocket Light | 399 | utrustning |
| POWER-001 | Power Module | 1 499 | utrustning |
| CABLE-001 | Cable Kit | 599 | utrustning |
| RAIN-001 | Rain Cover | 799 | utrustning |
| BAG-001 | Field Bag | 1 999 | utrustning |
| BELT-001 | Tactical Belt | 899 | accessoarer |
| SOCKS-001 | Field Socks | 399 | kläder |
| PATCH-001 | quiXzoom Patch | 299 | accessoarer |
| BOTTLE-001 | Field Bottle | 699 | utrustning |
### Verified Field ID Kit (100+ uppdrag, 95% approval)
| SKU | Namn | Pris | Kategori |
|-----|------|------|----------|
| ID-KIT-001 | Field ID Kit | Gratis | verified |
Innehåll:
- Personligt verifierat ID-kort
- ID-hållare
- Lanyard
- Digital verifieringsmärke
- Publik verifieringssida via QR-kod
## 🔒 Säkerhet
- JWT-token valideras på varje order-request
- Mission-count + approval rate + identity + violations hämtas från databas
- SQL-injection skyddad via asyncpg parameteriserade queries
- Stock-koll innan order skapas (transaction)
- Stripe webhook signerad och verifierad
- Verifieringssida visar endast publik info (ingen känslig data)
## 📁 Filer
```
quixzoom-shop/
├── main.py # FastAPI backend
├── requirements.txt # Python dependencies
├── Dockerfile # Docker image
├── docker-compose.yml # Docker Compose
├── nginx-shop.conf # Nginx reverse proxy
├── quixzoom-shop.service # systemd service
├── README.md # Översikt
├── STRIPE_SETUP.md # Stripe konfiguration
├── SHOP_STATUS.md # Denna fil
├── templates/
│ ├── shop.html # Produktlista med tier-badge
│ ├── product.html # Produktdetalj
│ ├── checkout.html # Stripe-betalning
│ └── verify.html # Publik verifieringssida
└── static/ # Bilder, CSS, JS
```
## 🔗 URL:er
| Miljö | URL |
|-------|-----|
| Lokal dev | `http://localhost:8087` |
| Produktion | `https://shop.quixzoom.com` |
| Verifiering | `https://shop.quixzoom.com/verify/{contributor_id}` |