CA Navigator — Servisu dokumentācija¶
Visi backend un trešo pušu servisi, ko izmanto mobilā aplikācija. Sniedz pārskatu par endpointiem, parametriem, atbildēm un paredzamajiem timeoutiem.
Pēdējā atjaunināta: 2026-05-03.
1. KLM serveris (mūsu pašu)¶
Bāze: https://klm-vzd.204.168.175.45.nip.io
Konfigurēts: assets/config/services.json → klmServerApi
Avots: server/services/vzd_local_service.py (Hetzner CX23, 204.168.175.45)
Datu bāze: PostgreSQL ar VZD KIS, VMD MVR, LVM, OSM, LVĢMC tabulām
1.1 Health & metrika¶
| Endpoint | Apraksts | Atbildes paraugs |
|---|---|---|
GET /health |
DB statuss + tabulu rindu skaits | {"ok":true,"row_counts":{"property":1526001,"encumbrance":4710246,...}} |
1.2 VZD KIS (īpašumu dati)¶
| Endpoint | Apraksts | Mob. lietojums |
|---|---|---|
GET /api/property/by-parcel/{cadastre_nr} |
Atrod īpašumu pēc zemes vienības koda | CadastreService.lookupDetails() |
GET /api/property/{cadastre_nr} |
Tieši pēc īpašuma kadastra Nr. | (rezervēts) |
GET /api/property/search?name=X&limit=20 |
Meklē īpašumu pēc nosaukuma | (potenciāli "Mani īpašumi") |
GET /api/encumbrance/history/{cadastre_nr} |
Apgrūtinājumu vēsture (audita pēdas) | _showHistory() monitorētajiem |
Property by-parcel atbilde:
{
"found": true,
"code": "01000730089",
"propertyName": "Mežotnes mežs",
"propertyKind": "Zemes vienība ar būvēm",
"areaHa": 12.95,
"land": {"forestHa": 8.2, "newForestHa": 0.3},
"ownerships": [{"ownership_status":"Īpašnieks","person_status":"Fiziska persona"}],
"valuation": {"propertyCadastralValueEur": 14500},
"landbook": {"folioNr":"100000123456","officeName":"Rīgas TI","notCorroborated":false},
"encumbrances": [
{"kind_id":"7311020105","kind_name":"Aizsargjosla...","areaHa":0.001,"establish_date":"2025-02-01"}
]
}
Statusu: 200 (atrasts), 404 (nav atrasts).
1.3 VMD meža informācija¶
| Endpoint | Apraksts | Mob. lietojums |
|---|---|---|
GET /api/forest/by-cadastre/{kadastrs} |
Visi nogabali (taksācija) priekš kadastra | ForestInfoService._getInfoFromKlmApi() |
GET /api/forest/cadastres?prefix=X&limit=N |
Saraksts ar zemes vienībām, kurās ir meži | (dev tools) |
GET /api/forest/nearest-road?lat=&lon=&max= |
Tuvākais LVM meža ceļš | ForestInfraService.getNearestRoad() |
GET /api/forest/nearby-infrastructure?lat=&lon=&radius= |
Tilti, caurtekas, grāvji | ForestInfraService.getNearbyInfra() |
GET /api/forest/water-zones?lat=&lon=&max= |
Ūdens aizsargjoslas (LVĢMC) | ForestInfraService.getWaterZones() |
1.4 OSM kultūrvēsturiskie pieminekļi¶
| Endpoint | Apraksts | Mob. lietojums |
|---|---|---|
GET /api/heritage/nearby?lat=&lon=&radius= |
OSM pieminekļi rādiusā | HeritageService.getNearby() |
1.5 Mani īpašumi (apgrūtinājumu monitorēšana)¶
| Endpoint | Apraksts |
|---|---|
POST /api/subscription |
Abonēt kadastra apgrūtinājumus |
GET /api/subscription/list |
Lietotāja abonētie kadastri |
DELETE /api/subscription/{sub_id} |
Atteikties no konkrēta abonēšanas |
DELETE /api/subscription/all |
Atteikties no visiem |
GET /api/subscription/status |
Abonēšanas statuss |
Mob. lietojums: SubscriptionMonitoringService (pašlaik stub režīmā, glabā lokāli SharedPreferences līdz pilnai backend integrācijai).
1.6 Stripe (abonēšanas plānu maksājumi)¶
| Endpoint | Apraksts |
|---|---|
POST /api/checkout/session |
Stripe Checkout sesija |
POST /api/stripe/webhook |
Stripe webhook (no Stripe → mūsu serveris) |
GET /api/checkout/status?session_id=X |
Sesijas statuss |
Mob. lietojums: StripeCheckoutService (skeleton — gaida Stripe konta aktivāciju).
2. CA backend (galvenais Flask)¶
Bāze: http://204.168.175.45.nip.io:5000
Konfigurēts: lib/config.dart → AppConfig.serverUrl
Avots: server/app.py + server/routes/
| Endpoint | Apraksts | Mob. lietojums |
|---|---|---|
GET /api/ping |
Statuss | ServerService.ping() Settings testā |
POST /api/device/register |
Reģistrēt ierīci (UUID, OS, app versija) | ServerService.registerDevice() |
POST /api/device/heartbeat |
Periodiska aktivitātes ziņa | ServerService.heartbeat() |
GET /api/device/list |
Visas reģistrētās ierīces (admin) | — |
POST /api/device/feedback |
Lietotāja feedback no app | feedback_screen |
GET /api/services-config |
Pakalpojumu URL config (var atjaunināt bez app update) | ServiceConfig.refresh() |
Auth: /api/auth/register/login/forgot-password |
JWT auth (skeleton) | (vēl neintegrēts mob.) |
3. VMD publiskais API¶
Bāze: https://epak.vmd.gov.lv/api/public/
Avots: trešās puses — VMD valsts meža dienests
SSL: noteikti CA nav uzticams — vajag badCertificateCallback (sk. lib/services/http_client.dart)
| Endpoint | Apraksts | Mob. lietojums |
|---|---|---|
GET /affirmation-info/{decisionNumber} |
CA dati + WKT ģeometrija (LKS-92) | VmdService.fetchCa() |
4. LVM GeoServer (publiskais)¶
Bāze tieši: https://lvmgeoserver.lvm.lv/geoserver/ows
Bāze caur proxy: https://lvmgeo.lvm.lv/proxy/.../ows
Konfigurēts: lib/services/lvm_layers.dart, service_config.dart
Auth: publisks, bez auth.
4.1 WMS (kartes attēli)¶
Slāņi: vmdpubliccompartments, pubcompartments_LVM, pubcompartments_OTHER, Kadastra_karte, ortofoto, LIDAR (terrain/slope/vegetation), topo, stigi, kvartāli.
Mob. lietojums: _buildWmsLayers() map_screen, CachedTileProvider ar lokālu cache.
4.2 WMS GetFeatureInfo (punktu vaicājumi)¶
Izmanto vietā kur WFS BBOX dotu nepareizu featuru.
Mob. lietojums:
- CadastreService._tryLvmWfs() — kadastra koda atrašanai punktā
- ForestInfoService._queryWmsLayer() — vmd nogabalu info punktā
4.3 WFS (vektordati ar atribūtiem)¶
Mob. lietojums: ForestInfoService._queryWfsByKadastrs() ar CQL_FILTER, kā fallback ja KLM API nav pieejams.
4.4 ZMNI (meliorācijas kadastrs)¶
Bāze: https://lvmgeoserver.lvm.lv/geoserver/zmni/ows
Pašlaik nav tieši izsaukts mob., bet pieejams nākotnei.
5. OZOLS (DAP — Dabas aizsardzības pārvalde)¶
Bāze: https://ozols.gov.lv/arcgis/rest/services/OZOLS_DABASDATI_PUB_DATU_APMAINA/FeatureServer
Auth: publisks
CRS: native EPSG:3059, atbalsta outSR=4326
| Layer ID | Nosaukums |
|---|---|
| 1 | Mikroliegumi |
| 4 | ĪADT (īpaši aizsargājamās dabas teritorijas) |
| 9 | Aizsargājamo sugu atradnes |
| 15 | Biotopi |
Mob. lietojums: OzolsService.queryLayers(enabledIds, bounds) — ArcGIS REST query ar bbox, debounced 800ms pēc kartes kustības.
6. Kartes.lv (rezerves kadastra/adrešu reverse-geocode)¶
Bāze: https://www.kartes.lv/api/... (precīza URL service_config.json kartesLvReverse)
| Lietojums | Apraksts |
|---|---|
| Reverse: lat/lon → kadastra Nr + adrese | CadastreService._tryKartesLv() |
Lieto kā fallback, ja LVM WFS punktu nedod kadastra kodu. Ātrāks (1-3s).
7. Nominatim (OSM reverse-geocode)¶
Bāze: https://nominatim.openstreetmap.org
Auth: publisks ar User-Agent prasību (sk. http_client.dart)
Rate limit: 1 req/s, ievērojams Nominatim usage policy.
| Lietojums | Apraksts |
|---|---|
| Reverse: lat/lon → adrese (pagasts/novads) | CadastreService._tryNominatimAddress() |
Lieto lai papildinātu VZD propertyName ar pagasta/novada info.
8. Open-Meteo (laika apstākļi)¶
Bāze: https://api.open-meteo.com/v1/forecast
Avots: ECMWF/DWD modelis, atjauno ik stundu
Auth: publisks
Mob. lietojums: WeatherService.fetch() — temperatūra, vējš, lietus prognozes ar drošības līmeni mežstrādniekam.
9. ntfy.sh (push paziņojumi)¶
Bāze: https://ntfy.sh/{topic} (vai mūsu self-hosted)
Avots: ntfy.sh open-source
Auth: publisks topics + JWT validācijai backend pusē
Mob. lietojums: NotificationSubscriber — SSE stream uz topic, kas atbilst lietotāja monitorētajiem kadastriem.
10. Sentry (kļūdu ziņošana)¶
Bāze: https://o4511312720166912.ingest.de.sentry.io
Auth: DSN tag (SENTRY_DSN build-time)
Rate limit: brīvais plāns
Mob. lietojums: SentryConfig.captureError() — 39+ izsaukumi visa app. Strādā tikai ja lietotājs Settings → Crash reporting toggle ON (GDPR opt-in).
Servisu lietošanas paraduprakses¶
Timeouts¶
| Avots | Lietotie timeoutsi | Iemesls |
|---|---|---|
| KLM serveris (VZD) | 8s | Lokāla DB + vienkārši joins |
| LVM WMS | 10s | Tile vaicājumi parasti ātri |
| LVM WFS | 25s | Vektordati ar lielu payload |
| Kartes.lv | 8s | Trešās puses, reizēm lēni |
| Nominatim | 10s | Lielas slodzes laikā lēns |
| Stripe | 15s | Maksājumu darījumi |
SSL atļaušana¶
badCertificateCallback ir aktivizēta tikai šim whitelistam:
- epak.vmd.gov.lv (VMD API SSL ir kļūdains)
Visas pārējās konekcijas — strict SSL validācija (sk. lib/services/http_client.dart).
Cache¶
| Datu tips | Cache laiks | Lokācija |
|---|---|---|
| WMS karšu izlaides | Bezgalīgs (manual reset) | path_provider tiles/ direktorijā |
| Heritage objekti | 60s | In-memory (HeritageWidget) |
| ForestInfra info | 30s | In-memory (ForestInfraWidget) |
| Weather snapshot | 30 min | In-memory (map_screen _weatherTtl) |
| Cadastre lookup | (nav) — katrs taps fresh | — |
Paralēles izsaukumi (Future.wait)¶
CadastreService.lookupBasic izsauc 3 paralēli: kartes.lv, LVM WFS, Nominatim → 1-3s kopējais.
ForestInfoService.getInfo izsauc 3 paralēli: vmdpubliccompartments + pubcompartments_LVM/OTHER → ~5s.
Paplašinājumam¶
Jaunus servisus pievieno:
1. URL → assets/config/services.json ar atbilstošu key
2. Klients → lib/services/X_service.dart ar static Future<...> metodēm
3. SSL whitelist → http_client.dart ja tiešām vajag (ne default)
4. Sentry capture → try/catch + SentryConfig.captureError() ar hint + extras
5. Šī faila atjauninājums
Atbilstība un drošība¶
- GDPR:
sendDefaultPii=falseSentry; nesūtām lietotāja PII bez explicit opt-in (sk. ConsentService). - TLS: visi servisi caur HTTPS, izņemot lokālo backend (
http://204.168.175.45.nip.io:5000) — pirms ražošanas migrēt uz HTTPS. - Rate limits: Nominatim, Sentry brīvais plāns — ievērojam usage policy.
- Failover: Cadastre lookup 4 datu avoti (kartes.lv → LVM → Nominatim → KLM serveris); ja vienu salūzt, citi nesalūzt visu plūsmu.