Pāriet uz saturu

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.jsonklmServerApi 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.dartAppConfig.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=false Sentry; 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.