Versjonssammenligning

Nøkkel

  • Denne linjen ble lagt til.
  • Denne linjen ble fjernet.
  • Formateringen ble endret.

...

Alle valideringsregler ligger i en valideringstjeneste utenfor altinn appen. Den blir brukt som en del av innsendingsprosessen i appen, men kan og brukes for å prevalidere data.

Valideringer

Planvarsel Valideringsregler for varsel om planforslag v2

Planområde https://dibk.atlassian.net/wiki/x/CwDwfQ

Prevalidering - Ftpb validationService

Valideringstjeneste (ValService) for nye byggsøknader og plantjenester

Forskjellige miljøer

...

Miljø - angitt som {miljø} i videre tekst

...

Basis-url

...

Testmiljø (tt02)

...

https://dibk.apps.tt02.altinn.no

...

Produksjon

...

https://dibk.apps.altinn.no

Autentisering

Det er ikke behov for autentisering mot API-et for validering.

APIet

...

Validering i altinn app - varselplanoppstart

Altinn appen sjekker at data som lastes opp til instansen er i henhold til konfigurasjonen av dataelementet i applicationMetadata. Det blir og gjort validering ved process next, der det sjekkes om alle påkrevde data er lastet opp for det aktuelle prosessteget.

Altinn har i tillegg endepunkt for å prevalidere data og intans. Her har vi koblet på våre valideringer fra valideringstjenseten og gjør de samme valideringene som ved prevalidering.

https://docs.altinn.studio/nb/api/apps/validation/

Opplasting av data - utvidet filvalidering

DataTyper

  • Planvarsel

I tillegg til altinn appen sine valideringer om data er i henhold til konfigurasjon i applicationMetadata, så har vi lagt på data analyse og validering av enkelte datatyper, for å sjekke at data er henhold til datamodellen.

GET /api/v1/applicationmetadata

  • enabledFileAnalysers

  • enabledFileValidator

...

Eksempel - Legg til data

POST https://dibk.apps.tt02.altinn.no/dibk/varselplanoppstart/instances/swagger/

Basis-url til API for validering er:

Kodeblokk
POST {miljø}/dibk/varselplanoppstart/validering

heretter angitt som {validering}.

Alle forespørsler mot API-et må sendes som “multipart/form-data”.

Endepunkter

API for validering har tre endepunkter:

  • POST {validering}/planvarsel

    • Validerer xml-filen som utgjør planvarslet

  • POST {validering}/planomraade

    • Validerer gml-filen som definerer planområdet

  • POST {validering}/innsending

    • Validerer planvarselet i sin helhet

Respons fra API-et

Responsen fra API-et har følgende form:

Kodeblokk
languagejson
{
	"correlationId": guid,
	"namespace": string,
	"errors": int,
	"warnings": int,
	"rules": [
		{
			"id": string,
			"name": string,
			"description": string,
			"status": string,
			"messageType": string,
			"timeUsed": double,
			"messages": []
		}
	],
	"startTime": "yyyy-MM-ddThh:mm:ss.zzzzzzz+00:00",
	"endTime": "yyyy-MM-ddThh:mm:ss.zzzzzzz+00:00",
	"files": [
		// list of file names
	],
	"timeUsed": double
}

...

correlationId - Sporings-ID for valideringsforespørselen.

...

namespace - Ikke i bruk i denne løsningen.

...

warnings - Totalt antall rules som er validert med "status": "FAILED" og "messageType": "WARNING".

...

rules

  • id - Regelens identifikator.

  • name - Regelens navn.

  • description - Regelens beskrivelse.

  • status - Indikerer om regelen har validert som gyldig med PASSED/FAILED, eller om den ikke er sjekket (SKIPPED).

  • messageType - Indikerer om regelen innebærer et MÅ- eller BØR-krav, ved henholdsvis ERROR/WARNING.

  • timeUsed - Indikerer antall sekunder medgått til sjekk av regelen.

  • messages - Dersom regelen ikke har "status": "PASSED", vil det her ligge en nærmere beskrivelse av årsaken.

...

startTime - Tidspunkt for når valideringsprosessen startet.

...

endTime - Tidspunkt for når valideringsprosessen var ferdig.

...

files - Liste av navn på xml/gml-filer som er validert mot skjema.

...

timeUsed - Indikerer antall sekunder (med to desimaler) medgått til valideringen.

Eksempler på bruk

Planvarsel

Url

Kodeblokk
POST {validering}/planvarsel

Multipart-request

Kodeblokk
languagejson
{
  "file": File //planvarsel.xml
}

...

Respons

Kodeblokk
languagejson
{
	"correlationId": "f33d1cd5-fe3f-44c7-bfd4-a60d69903a6f",
	"namespace": "",
	"errors": 2,
	"warnings": 0,
	"rules": [
		{
			"id": "vph.xsd.1",
			"name": "Innholdet må være i henhold til informasjonsmodell/XSD for skjema. Ta kontakt med søknadssystemet du bruker.",
			"description": "Innholdet må være i henhold til informasjonsmodell/XSD for skjema. Ta kontakt med søknadssystemet du bruker.",
			"status": "PASSED",
			"messageType": "ERROR",
			"timeUsed": 0,
			"messages": []
		},
		//Resten av reglene....
	],
	"startTime": "2023-12-20T09:12:54.6621183+00:00",
	"endTime": "2023-12-20T09:12:54.7059069+00:00",
	"files": [
		"planvarsel.xml"
	],
	"timeUsed": 0.04
}

Planområde

Url

Kodeblokk
POST {validering}/planomraade

Multipart-request

Kodeblokk
languagejson
{
  "file": File //planomraade.gml
}

...

Respons

Kodeblokk
languagejson
{
	"correlationId": "55aba585-32be-4cd0-884c-41128650f6fb",
	"namespace": "",
	"errors": 0,
	"warnings": 0,
	"rules": [
		{
			"id": "gml.xsd.po",
			"name": "Skjemavalidering for GML-plangrense",
			"description": "Datasettet må være i henhold til oppgitt applikasjonsskjema",
			"status": "PASSED",
			"messageType": "ERROR",
			"timeUsed": 0,
			"messages": []
		},
		{
			"id": "gml.gmlid.1",
			"name": "GML-ID for alle objekter i planen skal være unike",
			"status": "PASSED",
			"messageType": "ERROR",
			"timeUsed": 0.0028365,
			"messages": []
		},
		{
			"id": "gml.uuid.1",
			"name": "LokalId er en gyldig UUID",
			"description": "Egenskapen 'LokalId' må være en gyldig UUID",
			"status": "PASSED",
			"messageType": "ERROR",
			"timeUsed": 0.0078424,
			"messages": []
		},
		{
			"id": "gml.kurve.1",
			"name": "Kurver skal ha gyldig geometri",
			"status": "PASSED",
			"documentation": "https://dibk.atlassian.net/wiki/spaces/FP/pages/1918763029/gml.kurve.1",
			"messageType": "ERROR",
			"timeUsed": 0.0015616,
			"messages": []
		},
		{
			"id": "gml.kurve.2",
			"name": "Kurver skal ikke ha dobbeltpunkter",
			"status": "PASSED",
			"messageType": "ERROR",
			"timeUsed": 0.0066684,
			"messages": []
		},
		{
			"id": "gml.bue.1",
			"name": "Sirkelbuer kan kun inneholde tre punkter",
			"status": "PASSED",
			"messageType": "ERROR",
			"timeUsed": 0.0024707,
			"messages": []
		},
		{
			"id": "gml.bue.2",
			"name": "Punktene kan ikke ligge på rett linje for sirkelbue",
			"status": "PASSED",
			"messageType": "ERROR",
			"timeUsed": 0.0021363,
			"messages": []
		},
		{
			"id": "gml.flate.1",
			"name": "Flater skal ha gyldig geometri",
			"status": "PASSED",
			"documentation": "https://dibk.atlassian.net/wiki/spaces/FP/pages/1933574255/gml.flate.1",
			"messageType": "ERROR",
			"timeUsed": 0.002271,
			"messages": []
		},
		{
			"id": "gml.flate.2",
			"name": "Avgrensningen til en flate kan ikke krysse seg selv",
			"status": "PASSED",
			"messageType": "ERROR",
			"timeUsed": 0.0084871,
			"messages": []
		},
		{
			"id": "gml.flate.3",
			"name": "Avgrensningene til en flate skal nøstes i riktig retning",
			"description": "Ytre flateavgrensning skal nøstes i retning mot klokken, og indre avgrensing i retning med klokken.",
			"status": "PASSED",
			"messageType": "ERROR",
			"timeUsed": 0.0278683,
			"messages": []
		},
		{
			"id": "gml.flate.4",
			"name": "Hull i flate må ligge innenfor flatens ytre avgrensning",
			"status": "PASSED",
			"messageType": "ERROR",
			"timeUsed": 0.0862205,
			"messages": []
		},
		{
			"id": "gml.flate.5",
			"name": "Hull i flate kan ikke overlappe andre hull i samme flate",
			"status": "PASSED",
			"messageType": "ERROR",
			"timeUsed": 0.081594,
			"messages": []
		},
		{
			"id": "gml.avgr.1",
			"name": "Samsvarende avgrensingsgeometri",
			"description": "Unionen av avgrensingslinjene til en flate må samsvare med flategeometrien.",
			"status": "SKIPPED",
			"messageType": "ERROR",
			"timeUsed": 0.0068963,
			"messages": []
		}
	],
	"startTime": "2023-12-20T09:42:31.7357459+00:00",
	"endTime": "2023-12-20T09:42:31.9679267+00:00",
	"files": [
		"VORPAH-planområde.gml"
	],
	"timeUsed": 0.23
}

Fullstendig innsending

Url

Kodeblokk
POST {validering}/innsending

Multipart-request

Kodeblokk
languagejson
{
  "Planvarsel": File //Planvarsel.xml
  "Planomraade": File //Planområde.gml
  "PlanomraadePdf": File //Planområde.pdf
  "PlanomraadeSosi": File //Planområde.sos
  "KartDetaljert": File //Detaljert_Kart.pdf
  "Planinitiativ": File //Planinitiativ.pdf
  "ReferatOppstartsmøte": File //Referat fra oppstartsmøte.pdf
  "Planprogram": File //Planprogram.pdf
  "Annet": File //Annet.pdf
}

...

Respons

...

languagejson

...

50096175/b1f579d4-5f9b-4bae-92ce-8c4cdf20a55b/data?dataType=Planvarsel

Tips

Sender inn data i henhold til datamodell

Respons - 201 Created

Advarsel

Sender inn feil data

Respons - 400 Bad Request

Innholdet er ikke gyldig i henhold til datamodell. Feilmelding: There is an error in XML document (1, 7).

Data validering

https://docs.altinn.studio/nb/api/apps/validation/#validate-stored-data

Altinn appen sitt endepunkt for validering av data. Her sender vi data til Ftpb validationService og returnerer valideringsmeldinger i responsen til altinn som ValidationIssue.

Her skal man altså få den samme informasjonen som ved prevalidering med ftpb validationService

Mapping mellom Ftpb validationService og altinn ValidationIssue

ValidationIssue

ValidationReport .ValidationMessages

Eksempel

Severity

MessageType

Error 1, Warning 2

DataElementId

DataType

Fra appen: Planvarsel

Field

XpathField

Planvarsel/vedlegg/KartDetaljert

Code

Reference

11000.1.79.51.12

Description

Message

Detaljert kart bør sendes med varselet. Husk å markere kartet med gårds- og bruksnummer eller adresse.

Source

Settes av altinn, hvilke validator som er brukt.

Altinn.App.logic.Validator.DataElement.PlanvarselValidator-*

Instans validering

Her kjøres data validering og validering om instansen er i henhold til konfigurasjonen i applicationmetadata.

Process next

Her blir instan validering kjørt automatisk. Dersom man ikke får gå videre, må man sjekke instans validering for å få se evt valideringsfeil.

Oppsummering

Prevalidering er noe man kan velge å gjøre. Hvis man vil prevalidere før man oppretter en instans, så må man bruke prevalidering direkte mot ftpb validationservice Valideringstjeneste (ValService) for nye byggsøknader og plantjenester. Når man har en instans og har lastet opp data, kan man bruke endepunkter i appen for å prevalidere.

Process next all validering av data og instans. Dersom man kaller process next og får beskjed om at instansen har valideringsfeil, så må man kalle på appen sitt valideringsendepunkt GET instans/validate for å få vite hva som er feil.
For å komme videre til neste steg så alle valideringsfeil være rettet.