feat: Passwordless cross-device authentication

- Arkitektur: docs/auth/passwordless-architecture.md
- Backend: iom/quixzoom-auth-service/ (FastAPI + Redis)
- Webb: quixzoom-market-pages/se/login/ (QR-kod + polling)
- App: iom/quixzoom-app/src/features/auth/ (push + deep links)

Flöde: QR-kod → app-godkännande → webb-inloggad
This commit is contained in:
Bernt
2026-07-07 07:11:50 +00:00
parent 4aa984ad74
commit 6989a98d75
61843 changed files with 5491611 additions and 872231 deletions
+472
View File
@@ -0,0 +1,472 @@
# ADMINVERKTYG — RAPPORTFLÖDE (Back-engineerad)
## Jesper Melin Demo Case → Generisk Systemstruktur
---
## 1. RAPPORTKOMPONENTER (vad som skapades för Jesper)
### 1.1 Input-data (kundens produkt)
```
Produkt: Fasting Support Spray™
- Typ: Munsprej
- Ingredienser: Elektrolyter, vitaminer, växtbaserade extrakt
- Användning: Periodisk fasta, keto
- Format: 30ml pocket
- Pris: Premium (15-25 EUR/USD)
- Certifieringar: GMP, vegansk, sockerfri
```
### 1.2 Output-sektioner (rapporten)
1. **Sammanfattning** — Topp 5 marknader, strategi, investering
2. **Produktdefinition & Målgrupp** — TAM/SAM/SOM, segmentering
3. **Marknadsmatris** — Rankningskriterier, marknadsranking per land
4. **Konkurrensanalys** — Direkta/indirekta konkurrenter, SWOT
5. **Omvärldsanalys** — Makrotrender, drivkrafter, risker
6. **Etableringsstrategi** — Fasad approach, budget, mätpunkter
7. **Produktanpassning** — Per marknad: smak, förpackning, påståenden
8. **Finansiell projektion** — Investering, omsättning, marginal
9. **Riskanalys** — Sannolikhet, impact, mitigering
10. **Rekommendation** — Omedelbara/kortsiktiga/långsiktiga åtgärder
11. **Datakällor & Metodologi** — Primär/sekundärdata, metoder
12. **Appendix** — Djupanalyser per marknad, konkurrent deep-dives
---
## 2. SYSTEMFLÖDE (no-code)
### Steg 1: PRODUKTINPUT (kunden fyller i)
```
┌─────────────────────────────────────┐
│ PRODUKTINPUT-FORMULÄR │
├─────────────────────────────────────┤
│ • Produktnamn │
│ • Produkttyp (dropdown) │
│ • Ingredienser/teknik │
│ • Användningsområde │
│ • Format/storlek │
│ • Prisnivå │
│ • Certifieringar │
│ • Målgrupp (förifylld från typ) │
│ • Nuvarande marknader │
│ • Konkurrenter (frivilligt) │
└─────────────────────────────────────┘
```
### Steg 2: AUTOMATISK DATAHÄMTNING (systemet)
```
┌─────────────────────────────────────┐
│ DATAMOTOR │
├─────────────────────────────────────┤
│ A. Marknadsdata (Landvex intern) │
│ • quiXzoom fältdatainsamling │
│ • Stadsmässig data │
│ • Marknadstrender │
│ │
│ B. Extern data (APIer) │
│ • Google Trends API │
│ • Statista/Euromonitor │
│ • Nationell statistik │
│ • E-handelsdata │
│ │
│ C. Konkurrensdata │
│ • Amazon/Alibaba scraping │
│ • Prisjämförelse │
│ • Review-analys │
│ │
│ D. Regulatorisk data │
│ • EU-förordningar (EUR-Lex) │
│ • FDA-databas │
│ • Nationella myndigheter │
└─────────────────────────────────────┘
```
### Steg 3: ANALYS & BERÄKNING (systemet)
```
┌─────────────────────────────────────┐
│ ANALYSMOTOR │
├─────────────────────────────────────┤
│ 1. Marknadsstorleksberäkning │
│ • TAM = Global marknad × segment│
│ • SAM = TAM × geografisk andel │
│ • SOM = SAM × realistisk andel │
│ │
│ 2. Marknadsranking │
│ • Viktad skoringsmodell │
│ • Kriterier: storlek, reglering,│
│ e-handel, konkurrens, kultur, │
│ logistik │
│ │
│ 3. Konkurrensmapping │
│ • Direkta vs indirekta │
│ • Prispositionering │
│ • Differentieringsfaktorer │
│ │
│ 4. Trendanalys │
│ • Makrotrender (PESTEL) │
│ • Drivkrafter │
│ • Risker │
│ │
│ 5. Finansiell modell │
│ • Investeringsbehov per fas │
│ • Omsättningsprojektion │
│ • Marginalstruktur │
│ • Break-even-analys │
└─────────────────────────────────────┘
```
### Steg 4: RAPPORTGENERERING (systemet)
```
┌─────────────────────────────────────┐
│ RAPPORTGENERERARE │
├─────────────────────────────────────┤
│ • Mallbaserad (Markdown/HTML/PDF) │
│ • Variabler fylls i automatiskt │
│ • Grafer genereras (Chart.js/D3) │
│ • Källor listas automatiskt │
│ • Spårbarhet: varje påstående har │
│ en datakälla länkad │
└─────────────────────────────────────┘
```
### Steg 5: GRANSKNING & EXPORT (kunden)
```
┌─────────────────────────────────────┐
│ GRANSKNINGSGRÄNSSNITT │
├─────────────────────────────────────┤
│ • Förhandsvisning av rapport │
│ • Redigera sektioner │
│ • Lägg till kommentarer │
│ • Godkänn / begär ändringar │
│ • Export: PDF, Word, HTML │
│ • Dela: Länk, e-post, Slack │
└─────────────────────────────────────┘
```
---
## 3. DATAMODELL (databasstruktur)
### 3.1 Produkter (products)
```sql
CREATE TABLE products (
id UUID PRIMARY KEY,
name VARCHAR(255),
type VARCHAR(100), -- enum: spray, capsule, powder, device, etc.
description TEXT,
ingredients JSONB,
usage_scenarios JSONB,
format VARCHAR(100),
price_range_min DECIMAL,
price_range_max DECIMAL,
currency VARCHAR(3),
certifications JSONB,
target_audience JSONB,
current_markets JSONB,
created_by UUID,
created_at TIMESTAMP,
updated_at TIMESTAMP
);
```
### 3.2 Marknader (markets)
```sql
CREATE TABLE markets (
id UUID PRIMARY KEY,
country_code CHAR(2),
country_name VARCHAR(100),
population INTEGER,
gdp_per_capita DECIMAL,
e_commerce_penetration DECIMAL,
if_trend_index INTEGER,
keto_adoption VARCHAR(20),
regulatory_environment VARCHAR(20),
competition_level VARCHAR(20),
cultural_acceptance INTEGER,
logistics_ease INTEGER,
data_sources JSONB,
updated_at TIMESTAMP
);
```
### 3.3 Konkurrenter (competitors)
```sql
CREATE TABLE competitors (
id UUID PRIMARY KEY,
name VARCHAR(255),
product_type VARCHAR(100),
price DECIMAL,
currency VARCHAR(3),
markets JSONB,
channels JSONB,
strengths TEXT,
weaknesses TEXT,
threat_level VARCHAR(20),
data_source VARCHAR(255),
updated_at TIMESTAMP
);
```
### 3.4 Rapporter (reports)
```sql
CREATE TABLE reports (
id UUID PRIMARY KEY,
product_id UUID REFERENCES products(id),
title VARCHAR(255),
status VARCHAR(20), -- draft, review, approved, archived
content JSONB, -- strukturerad rapportdata
generated_at TIMESTAMP,
generated_by UUID,
approved_by UUID,
approved_at TIMESTAMP,
version INTEGER,
parent_report_id UUID -- för versionering
);
```
### 3.5 Datakällor (data_sources)
```sql
CREATE TABLE data_sources (
id UUID PRIMARY KEY,
name VARCHAR(255),
type VARCHAR(50), -- internal, api, scraper, manual
url VARCHAR(500),
api_key_encrypted TEXT,
last_sync TIMESTAMP,
sync_frequency VARCHAR(20),
reliability_score INTEGER,
active BOOLEAN
);
```
---
## 4. API-ENDPOINTS (för integrationer)
```
POST /api/v1/products # Skapa produkt
GET /api/v1/products/:id # Hämta produkt
PUT /api/v1/products/:id # Uppdatera produkt
DELETE /api/v1/products/:id # Ta bort produkt
POST /api/v1/reports # Generera rapport
GET /api/v1/reports/:id # Hämta rapport
PUT /api/v1/reports/:id/approve # Godkänn rapport
GET /api/v1/reports/:id/export # Exportera rapport (PDF/Word)
GET /api/v1/markets # Lista marknader
GET /api/v1/markets/:code # Hämta specifik marknad
GET /api/v1/markets/:code/trends # Hämta trenddata
GET /api/v1/competitors # Lista konkurrenter
POST /api/v1/competitors # Lägg till konkurrent
GET /api/v1/data-sources # Lista datakällor
POST /api/v1/data-sources/:id/sync # Tvinga synkronisering
```
---
## 5. FRONTEND-KOMPONENTER (React/Vue)
### 5.1 Produktskapare
```
┌─────────────────────────────────────┐
│ Steg 1: Grundinfo │
│ [Produktnamn ] [Typ ▼] │
│ │
│ Steg 2: Tekniska specs │
│ [Ingredienser ] [Format ▼] │
│ [Användning ] [Pris ▼] │
│ │
│ Steg 3: Målgrupp │
│ ☑ Biohackers ☑ Hälsomedvetna │
│ ☑ Keto ☑ Fastande │
│ │
│ [Generera rapport →] │
└─────────────────────────────────────┘
```
### 5.2 Rapportvisare
```
┌─────────────────────────────────────┐
│ 📊 Marknadsrapport │
│ Fasting Support Spray™ │
├─────────────────────────────────────┤
│ ┌─────────────────────────────┐ │
│ │ Marknadsranking │ │
│ │ [Graf: Topp 5 länder] │ │
│ └─────────────────────────────┘ │
│ │
│ ┌─────────────────────────────┐ │
│ │ Konkurrenslandskap │ │
│ │ [Graf: Pris vs Position] │ │
│ └─────────────────────────────┘ │
│ │
│ ┌─────────────────────────────┐ │
│ │ Investeringsprojektion │ │
│ │ [Graf: Omsättning över tid]│ │
│ └─────────────────────────────┘ │
│ │
│ [Redigera] [Exportera PDF] [Dela] │
└─────────────────────────────────────┘
```
### 5.3 Datakontrollpanel
```
┌─────────────────────────────────────┐
│ 📡 Datakällor │
├─────────────────────────────────────┤
│ 🟢 quiXzoom API Senast: 5m │
│ 🟢 Google Trends Senast: 1h │
│ 🟡 Statista API Senast: 6h │
│ 🔴 Euromonitor Senast: 2d │
│ │
│ [Synkronisera alla] │
└─────────────────────────────────────┘
```
---
## 6. AUTOMATISERAD SONDINHÄMTNING (quiXzoom-integration)
### 6.1 Triggervillkor
```
När rapport genereras för produkttyp X:
1. Kontrollera om quiXzoom har data för relevanta marknader
2. Om JA: Hämta fältdatainsamling
3. Om NEJ: Skapa automatisk sond (mission) för datainsamling
```
### 6.2 Sondtyp per produktkategori
```
Produkttyp: Kosttillskott/fastaprodukter
Sondtyp: Butiksgång (retail audit)
Data: • Pris på konkurrerande produkter
• Förekomst på hyllor
• Prominens (end cap, etc.)
• Utgångsdatum (freshness)
Produkttyp: Infrastruktur/IoT
Sondtyp: Fältobservation
Data: • Fysisk tillstånd
• Installation
• Användning
Produkttyp: Fastighet/retail
Sondtyp: Platsbesök
Data: • Fotodokumentation
• Mänsklig trafik
• Konkurrensnärhet
```
### 6.3 Automatisk rapportuppdatering
```
När sonddata inkommer:
1. Matcha mot befintlig rapport
2. Uppdatera relevanta sektioner
3. Flagga ändringar för granskning
4. Skicka notis till rapportägare
```
---
## 7. ROLLER & BEHÖRIGHETER
| Roll | Behörigheter |
|------|--------------|
| **Admin** | Allt: skapa, redigera, ta bort, godkänna, exportera |
| **Analytiker** | Skapa produkter, generera rapporter, redigera utkast |
| **Granskare** | Granska rapporter, godkänna, lägga till kommentarer |
| **Kund** | Se egna rapporter, exportera, dela |
| **Gäst** | Se demo-rapporter (anonymiserade) |
---
## 8. IMPLEMENTERINGSPLAN
### Fas 1: MVP (4 veckor)
- [ ] Produktskapare (grundläggande formulär)
- [ ] Rapportgenerator (Markdown, statisk)
- [ ] Marknadsdata (manuell inmatning + Statista API)
- [ ] Export (PDF)
### Fas 2: Automation (4 veckor)
- [ ] Google Trends-integration
- [ ] Automatisk konkurrensmapping
- [ ] Finansiell modell
- [ ] Datakontrollpanel
### Fas 3: quiXzoom-integration (4 veckor)
- [ ] API-koppling till quiXzoom
- [ ] Automatisk sondskapande
- [ ] Realtidsdata i rapporter
- [ ] Karta med fältdatainsamling
### Fas 4: Avancerat (4 veckor)
- [ ] AI-driven insiktsgenerering
- [ ] Scenario-planering
- [ ] Samarbetsverktyg (kommentarer, versionering)
- [ ] White-label (kundens varumärke på rapporter)
---
## 9. TEKNISK STACK (förslag)
| Komponent | Teknik |
|-----------|--------|
| **Frontend** | React + TypeScript + Tailwind CSS |
| **Backend** | Node.js + Express / Python + FastAPI |
| **Databas** | PostgreSQL + Redis (cache) |
| **Rapportgenerering** | Puppeteer (PDF), React-PDF |
| **Grafer** | Chart.js / D3.js / Recharts |
| **API-integrationer** | REST + GraphQL |
| **Filhantering** | AWS S3 |
| **Autentisering** | Auth0 / AWS Cognito |
| **Hosting** | AWS (ECS/Lambda) |
---
## 10. DEMO-CASE: Jesper Melin → Generisk mall
### Från specifik till generisk:
| Jespers produkt | Generisk parameter |
|-----------------|-------------------|
| Fasting Support Spray™ | `{product_name}` |
| Munsprej | `{product_type}` |
| Elektrolyter, vitaminer | `{ingredients}` |
| Periodisk fasta | `{usage_scenarios}` |
| 30ml | `{format}` |
| Premium (15-25 EUR) | `{price_range}` |
| Sverige, Tyskland, etc. | `{top_markets}` |
| LMNT, Snake Juice | `{competitors}` |
### Mall-exempel:
```markdown
# Marknadsintelligensrapport
## {product_name}
## SAMMANFATTNING
{product_name} är en {product_type} med potential inom
{primary_market}. Marknaden växer med {cagr}% CAGR.
**Rekommenderad prioritet:**
{for each top_market}
1. **{country}** — {key_reason}
{end}
## 1. PRODUKTDEFINITION
| Attribut | Beskrivning |
|----------|-------------|
| **Produkttyp** | {product_type} |
| **Ingredienser** | {ingredients} |
| **Användning** | {usage_scenarios} |
| **Format** | {format} |
| **Pris** | {price_range} {currency} |
```
---
*Dokument producerat av Landvex Control Intelligence.*
*Datum: 2026-07-05*
*Version: 1.0 (MVP-specifikation)*