...
MERK at denne siden er utdatert. Følgende skal brukes for validering i v2:
...
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
Innsending
...
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.
...
...
...
...
...
...
...
Det kjøres i tillegg alltid en validering ved process next
Valideringsrapport
Etter validering kan man hente ut en valideringsrapport som tilsvarer responsen man får fra ValService. Den kan hentes på instansen på datatype Valideringsrapport
Forskjellige miljøer
...
Miljø - angitt som {miljø}
i videre tekst
...
Basis-url
...
Testmiljø (tt02)
...
https://dibk.apps.tt02.altinn.no
...
Produksjon
...
Autentisering
Det er ikke behov for autentisering mot API-et for validering.
APIet
Open API (Swagger)-dokumentasjon på alle API:
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 | ||
---|---|---|
| ||
{
"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 medPASSED
/FAILED
, eller om den ikke er sjekket (SKIPPED
).messageType
- Indikerer om regelen innebærer et MÅ- eller BØR-krav, ved henholdsvisERROR
/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 | ||
---|---|---|
| ||
{
"file": File //planvarsel.xml
} |
...
Respons
Kodeblokk | ||
---|---|---|
| ||
{
"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 | ||
---|---|---|
| ||
{
"file": File //planomraade.gml
} |
...
Respons
Kodeblokk | ||
---|---|---|
| ||
{
"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 | ||
---|---|---|
| ||
{
"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
...
language | json |
---|
...
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 |
DataElementId | DataType | Fra appen: |
Field | XpathField |
|
Code | Reference |
|
Description | Message |
|
Source | Settes av altinn, hvilke validator som er brukt. |
|
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.