206 lines
6.0 KiB
Markdown
206 lines
6.0 KiB
Markdown
|
|
# GVIS — quiXzoom Integration Spec
|
||
|
|
|
||
|
|
## Mission Type Mapping
|
||
|
|
|
||
|
|
Varje GVIS-objekt blir en quiXzoom mission type med AI-prompt och zoomer-instruktion.
|
||
|
|
|
||
|
|
### Exempel: TRN-001 (Asfalt)
|
||
|
|
|
||
|
|
```json
|
||
|
|
{
|
||
|
|
"mission_type": "gvis-trn-001",
|
||
|
|
"namn": "Asfaltinspektion",
|
||
|
|
"gvis_id": "TRN-001",
|
||
|
|
"beskrivning": "Dokumentera asfaltens skick på utsatt sträcka",
|
||
|
|
"betalning": "150-300 kr",
|
||
|
|
"tid": "15-30 min",
|
||
|
|
"utrustning": "Smartphone",
|
||
|
|
|
||
|
|
"ai_prompt": {
|
||
|
|
"system": "Du är en asfaltspecialist. Bedöm asfaltens skick från fotografier.",
|
||
|
|
"kontrollpunkter": [
|
||
|
|
"Identifiera potthål (djup >2cm, diameter >10cm)",
|
||
|
|
"Identifiera sprickor (bredd >2cm, längd >30cm)",
|
||
|
|
"Identifiera sättningar (djup >3cm)",
|
||
|
|
"Identifiera spårskärpning (djup >1cm)"
|
||
|
|
],
|
||
|
|
"output": {
|
||
|
|
"skick": "0-100",
|
||
|
|
"risknivå": "1-5",
|
||
|
|
"prioritet": "information/underhåll/åtgärd/akut/kritisk",
|
||
|
|
"typ_av_skada": "string",
|
||
|
|
"omfattning": "string",
|
||
|
|
"rekommenderad_åtgärd": "string",
|
||
|
|
"åtgärdstid": "string"
|
||
|
|
}
|
||
|
|
},
|
||
|
|
|
||
|
|
"zoomer_instruktion": {
|
||
|
|
"steg": [
|
||
|
|
"Navigera till utsatt GPS-position",
|
||
|
|
"Fotografera asfalten rakt ovanifrån (90°)",
|
||
|
|
"Fotografera asfalten i 45° vinkel för djupbedömning",
|
||
|
|
"Fotografera eventuella skador med närbild",
|
||
|
|
"Fotografera omgivningen för kontext",
|
||
|
|
"Bekräfta position i appen"
|
||
|
|
],
|
||
|
|
"krav": [
|
||
|
|
"Minst 3 foton",
|
||
|
|
"Dagsljus eller god belysning",
|
||
|
|
"Inga fordon i bild",
|
||
|
|
"GPS aktiverad"
|
||
|
|
]
|
||
|
|
},
|
||
|
|
|
||
|
|
"validering": {
|
||
|
|
"min_foton": 3,
|
||
|
|
"max_avstand_m": 10,
|
||
|
|
"min_upplosning": "12MP",
|
||
|
|
"godkand_vinkel": ["90", "45"]
|
||
|
|
}
|
||
|
|
}
|
||
|
|
```
|
||
|
|
|
||
|
|
### Exempel: HAM-024 (Livboj)
|
||
|
|
|
||
|
|
```json
|
||
|
|
{
|
||
|
|
"mission_type": "gvis-ham-024",
|
||
|
|
"namn": "Livbojskontroll",
|
||
|
|
"gvis_id": "HAM-024",
|
||
|
|
"beskrivning": "Verifiera att livboj finns på plats och är i brukbart skick",
|
||
|
|
"betalning": "100-200 kr",
|
||
|
|
"tid": "5-10 min",
|
||
|
|
"utrustning": "Smartphone",
|
||
|
|
|
||
|
|
"ai_prompt": {
|
||
|
|
"system": "Du är en sjösäkerhetsspecialist. Bedöm livbojens skick.",
|
||
|
|
"kontrollpunkter": [
|
||
|
|
"Livboj finns på plats",
|
||
|
|
"Stolpen står rakt (lutning <5°)",
|
||
|
|
"Lina finns och är hel",
|
||
|
|
"Bojen är hel (inga sprickor/hål)",
|
||
|
|
"Reflex finns och är synlig",
|
||
|
|
"Skylt finns och är läsbar",
|
||
|
|
"Fri åtkomst (inga hinder inom 2m)",
|
||
|
|
"Ingen korrosion på stolpe/fäste",
|
||
|
|
"Inga hinder som blockerar användning"
|
||
|
|
],
|
||
|
|
"output": {
|
||
|
|
"skick": "0-100",
|
||
|
|
"risknivå": "1-5",
|
||
|
|
"saknas": "boolean",
|
||
|
|
"skadad": "boolean",
|
||
|
|
"blockerad": "boolean"
|
||
|
|
}
|
||
|
|
},
|
||
|
|
|
||
|
|
"zoomer_instruktion": {
|
||
|
|
"steg": [
|
||
|
|
"Navigera till livbojens GPS-position",
|
||
|
|
"Fotografera hela livbojen med omgivning (5m avstånd)",
|
||
|
|
"Fotografera närbild av boj, lina och reflex",
|
||
|
|
"Fotografera stolpe och fundament",
|
||
|
|
"Fotografera eventuella hinder",
|
||
|
|
"Bekräfta position i appen"
|
||
|
|
]
|
||
|
|
}
|
||
|
|
}
|
||
|
|
```
|
||
|
|
|
||
|
|
## API Endpoints
|
||
|
|
|
||
|
|
### Skapa GVIS-mission
|
||
|
|
|
||
|
|
```
|
||
|
|
POST /api/v1/missions/gvis
|
||
|
|
{
|
||
|
|
"gvis_id": "TRN-001",
|
||
|
|
"position": {"lat": 59.3293, "lng": 18.0686},
|
||
|
|
"radius_m": 50,
|
||
|
|
"priority": "normal",
|
||
|
|
"deadline": "2026-07-01T23:59:59Z"
|
||
|
|
}
|
||
|
|
|
||
|
|
Response:
|
||
|
|
{
|
||
|
|
"mission_id": "M-123456",
|
||
|
|
"status": "active",
|
||
|
|
"estimated_completion": "24h",
|
||
|
|
"zoomers_notified": 12
|
||
|
|
}
|
||
|
|
```
|
||
|
|
|
||
|
|
### Hämta GVIS-observation
|
||
|
|
|
||
|
|
```
|
||
|
|
GET /api/v1/observations/{observation_id}
|
||
|
|
|
||
|
|
Response:
|
||
|
|
{
|
||
|
|
"gvis_id": "TRN-001",
|
||
|
|
"objekt": "Asfalt",
|
||
|
|
"bedömning": {
|
||
|
|
"skick": 23,
|
||
|
|
"risknivå": 4,
|
||
|
|
"prioritet": "akut",
|
||
|
|
"typ_av_skada": "potthål_djup_>5cm",
|
||
|
|
"omfattning": "punkt_0.5m2"
|
||
|
|
},
|
||
|
|
"media": [...],
|
||
|
|
"zoomer": {"id": "Z-78432", "rating": 4.8},
|
||
|
|
"ai_konfidens": 0.94,
|
||
|
|
"human_reviewed": true
|
||
|
|
}
|
||
|
|
```
|
||
|
|
|
||
|
|
### Batch-analys (Landvex)
|
||
|
|
|
||
|
|
```
|
||
|
|
POST /api/v1/analyze/contradictions
|
||
|
|
{
|
||
|
|
"kommun": "Stockholm",
|
||
|
|
"gvis_filter": ["TRN-001", "TRN-002", "BEL-013"],
|
||
|
|
"period": "2026-Q2",
|
||
|
|
" jämför_med": "officiell_rapport_2026"
|
||
|
|
}
|
||
|
|
|
||
|
|
Response:
|
||
|
|
{
|
||
|
|
"kontradiktioner": [
|
||
|
|
{
|
||
|
|
"typ": "underhåll_vs_verklighet",
|
||
|
|
"allvarlighet": "hög",
|
||
|
|
"beskrivning": "Kommunen rapporterar 98% fungerande gatlyktor, GVIS visar 23% trasiga i område X",
|
||
|
|
"påverkade_objekt": 47,
|
||
|
|
"rekommenderad_åtgärd": "Omedelbar inspektion av område X"
|
||
|
|
}
|
||
|
|
]
|
||
|
|
}
|
||
|
|
```
|
||
|
|
|
||
|
|
## Dataflöde
|
||
|
|
|
||
|
|
```
|
||
|
|
┌─────────────┐ ┌──────────────┐ ┌─────────────┐ ┌─────────────┐
|
||
|
|
│ Zoomer │────▶│ quiXzoom │────▶│ GVIS │────▶│ Landvex │
|
||
|
|
│ (App) │ │ Backend │ │ Normalizer │ │ Analysis │
|
||
|
|
└─────────────┘ └──────────────┘ └─────────────┘ └─────────────┘
|
||
|
|
│ │
|
||
|
|
▼ ▼
|
||
|
|
┌──────────────┐ ┌─────────────┐
|
||
|
|
│ AI-bedomning │ │ Kontradiktion│
|
||
|
|
│ (Vision API) │ │ Rapport │
|
||
|
|
└──────────────┘ └─────────────┘
|
||
|
|
│ │
|
||
|
|
▼ ▼
|
||
|
|
┌──────────────┐ ┌─────────────┐
|
||
|
|
│ Kvalitets- │ │ Kund │
|
||
|
|
│ kontroll │ │ (Kommun) │
|
||
|
|
└──────────────┘ └─────────────┘
|
||
|
|
```
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
*GVIS-quiXzoom Integration v1.0 — 2026-06-26*
|