Skip to content

Commit eb8eae2

Browse files
authored
Gjør norskIdentitetsnummer nullable og legger på validering. (#258)
* Gjør norskIdentitetsnummer nullable og legger på validering. * Enten norskIdentitetsnummer eller fødselsdato må være satt. * Både norskIdentitetsnummer og fødselsdato skal ikke være satt.
1 parent 7eeeb29 commit eb8eae2

File tree

8 files changed

+210
-24
lines changed

8 files changed

+210
-24
lines changed

soknad/src/main/java/no/nav/k9/søknad/ytelse/pls/v1/Pleietrengende.java

Lines changed: 30 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,43 +1,40 @@
11
package no.nav.k9.søknad.ytelse.pls.v1;
22

3-
import java.time.LocalDate;
4-
import java.util.Objects;
5-
6-
import javax.validation.Valid;
7-
import javax.validation.constraints.NotNull;
8-
import javax.validation.constraints.PastOrPresent;
9-
10-
import com.fasterxml.jackson.annotation.JsonAlias;
11-
import com.fasterxml.jackson.annotation.JsonAutoDetect;
12-
import com.fasterxml.jackson.annotation.JsonCreator;
13-
import com.fasterxml.jackson.annotation.JsonFormat;
14-
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
15-
import com.fasterxml.jackson.annotation.JsonProperty;
16-
3+
import com.fasterxml.jackson.annotation.*;
174
import no.nav.k9.søknad.felles.type.NorskIdentitetsnummer;
185
import no.nav.k9.søknad.felles.type.Person;
196
import no.nav.k9.søknad.felles.type.PersonIdent;
207

8+
import javax.validation.Valid;
9+
import javax.validation.constraints.AssertFalse;
10+
import javax.validation.constraints.AssertTrue;
11+
import javax.validation.constraints.PastOrPresent;
12+
import java.time.LocalDate;
13+
import java.util.Objects;
14+
2115
@JsonIgnoreProperties(ignoreUnknown = true)
2216
@JsonAutoDetect(fieldVisibility = JsonAutoDetect.Visibility.NONE, getterVisibility = JsonAutoDetect.Visibility.NONE, setterVisibility = JsonAutoDetect.Visibility.NONE, isGetterVisibility = JsonAutoDetect.Visibility.NONE, creatorVisibility = JsonAutoDetect.Visibility.NONE)
2317
public class Pleietrengende implements Person {
2418

2519
@JsonAlias({ "fødselsnummer", "norskIdentifikator", "identitetsnummer", "fnr" })
26-
@JsonProperty(value = "norskIdentitetsnummer", required = true)
27-
@NotNull
20+
@JsonProperty(value = "norskIdentitetsnummer")
2821
@Valid
2922
private NorskIdentitetsnummer norskIdentitetsnummer;
3023

31-
@JsonProperty(value = "fødselsdato", required = false)
24+
@JsonProperty(value = "fødselsdato")
3225
@Valid
3326
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd", timezone = "Europe/Oslo")
3427
@PastOrPresent(message = "[ugyldigFødselsdato] Fødselsdato kan ikke være fremtidig")
3528
private LocalDate fødselsdato;
3629

37-
@JsonCreator
38-
public Pleietrengende(@JsonProperty(value = "norskIdentitetsnummer", required = true) @JsonAlias({ "fødselsnummer", "norskIdentifikator", "identitetsnummer", "fnr" }) NorskIdentitetsnummer norskIdentitetsnummer,
30+
@Deprecated
31+
public Pleietrengende(@JsonProperty(value = "norskIdentitetsnummer") @JsonAlias({ "fødselsnummer", "norskIdentifikator", "identitetsnummer", "fnr" }) NorskIdentitetsnummer norskIdentitetsnummer,
3932
@JsonProperty("fødselsdato") @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd", timezone = "Europe/Oslo") LocalDate fødselsdato) {
40-
this.norskIdentitetsnummer = Objects.requireNonNull(norskIdentitetsnummer, "norskIdentitetsnummer");
33+
this.norskIdentitetsnummer = norskIdentitetsnummer;
34+
this.fødselsdato = fødselsdato;
35+
}
36+
37+
public Pleietrengende() {
4138
}
4239

4340
@Override
@@ -50,15 +47,26 @@ public PersonIdent getPersonIdent() {
5047
}
5148

5249
public Pleietrengende medNorskIdentitetsnummer(NorskIdentitetsnummer norskIdentitetsnummer) {
53-
this.norskIdentitetsnummer = norskIdentitetsnummer;
50+
this.norskIdentitetsnummer = Objects.requireNonNull(norskIdentitetsnummer, "norskIdentitetsnummer");
5451
return this;
5552
}
5653

5754
public Pleietrengende medFødselsdato(LocalDate fødselsdato) {
58-
this.fødselsdato = fødselsdato;
55+
this.fødselsdato = Objects.requireNonNull(fødselsdato, "fødselsdato");
5956
return this;
6057
}
6158

59+
@AssertTrue(message = "norskIdentitetsnummer eller fødselsdato må være satt")
60+
private boolean isOk() {
61+
return (norskIdentitetsnummer != null && norskIdentitetsnummer.getVerdi() != null)
62+
|| (fødselsdato != null);
63+
}
64+
65+
@AssertFalse(message = "[ikkeEntydig] Ikke entydig, må oppgi enten fnr/dnr eller fødselsdato.")
66+
private boolean isEntydig() {
67+
return this.getPersonIdent() != null && this.fødselsdato != null;
68+
}
69+
6270
@Override
6371
public boolean equals(Object obj) {
6472
if (obj == this)

soknad/src/test/java/no/nav/k9/søknad/ytelse/pls/SøknadJsonEksempel.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,4 +19,16 @@ private static String jsonFromFile(String filename) {
1919
public static Søknad komplettSøknad() {
2020
return Søknad.SerDes.deserialize(jsonFromFile("komplett-søknad.json"));
2121
}
22+
23+
public static Søknad søknadUtenPleietrengendNorskIdent() {
24+
return Søknad.SerDes.deserialize(jsonFromFile("søknad-uten-pleietrengende-norskident.json"));
25+
}
26+
27+
public static Søknad søknadUtenPleietrengendeInfo() {
28+
return Søknad.SerDes.deserialize(jsonFromFile("søknad-uten-pleietrengende-info.json"));
29+
}
30+
31+
public static Søknad søknadUtenPleietrengendeIdentOgFødselsdato() {
32+
return Søknad.SerDes.deserialize(jsonFromFile("søknad-med-pleietrengende-norskident-og-fødselsdato.json"));
33+
}
2234
}

soknad/src/test/java/no/nav/k9/søknad/ytelse/pls/v1/SøknadJsonTest.java

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,13 @@
11
package no.nav.k9.søknad.ytelse.pls.v1;
22

3+
import static no.nav.k9.søknad.ytelse.pls.v1.ValiderUtil.verifyHarFeil;
34
import static no.nav.k9.søknad.ytelse.pls.v1.ValiderUtil.verifyIngenFeil;
45
import static org.assertj.core.api.Assertions.assertThat;
56

67
import java.time.LocalDate;
8+
import java.util.List;
79

10+
import no.nav.k9.søknad.felles.Feil;
811
import org.junit.jupiter.api.Test;
912

1013
import no.nav.k9.søknad.felles.type.Periode;
@@ -26,4 +29,41 @@ class SøknadJsonTest {
2629

2730
//TODO PLS asserte alle felter som er satt (og ikke)
2831
}
32+
33+
@Test
34+
public void søknadUtenPleietrengendeNorskIdent() {
35+
var søknad = SøknadJsonEksempel.søknadUtenPleietrengendNorskIdent();
36+
37+
verifyIngenFeil(søknad);
38+
39+
PleipengerLivetsSluttfase ytelse = søknad.getYtelse();
40+
41+
assertThat(ytelse.getPleietrengende().getFødselsdato()).isEqualTo("2000-01-01");
42+
}
43+
44+
@Test
45+
public void søknadUtenPleietrengendeInfo() {
46+
var søknad = SøknadJsonEksempel.søknadUtenPleietrengendeInfo();
47+
48+
List<Feil> feil = verifyHarFeil(søknad);
49+
50+
assertThat(feil.size()).isEqualTo(1);
51+
Feil pleietrengendeFeil = feil.get(0);
52+
assertThat(pleietrengendeFeil.getFelt()).isEqualTo("ytelse.pleietrengende.ok");
53+
assertThat(pleietrengendeFeil.getFeilkode()).isEqualTo("påkrevd");
54+
assertThat(pleietrengendeFeil.getFeilmelding()).isEqualTo("norskIdentitetsnummer eller fødselsdato må være satt");
55+
}
56+
57+
@Test
58+
public void søknadUtenPleietrengendeIdentOgFødselsdato() {
59+
var søknad = SøknadJsonEksempel.søknadUtenPleietrengendeIdentOgFødselsdato();
60+
61+
List<Feil> feil = verifyHarFeil(søknad);
62+
63+
assertThat(feil.size()).isEqualTo(1);
64+
Feil pleietrengendeFeil = feil.get(0);
65+
assertThat(pleietrengendeFeil.getFelt()).isEqualTo("ytelse.pleietrengende.entydig");
66+
assertThat(pleietrengendeFeil.getFeilkode()).isEqualTo("ikkeEntydig");
67+
assertThat(pleietrengendeFeil.getFeilmelding()).isEqualTo("Ikke entydig, må oppgi enten fnr/dnr eller fødselsdato.");
68+
}
2969
}

soknad/src/test/java/no/nav/k9/søknad/ytelse/pls/v1/YtelseEksempel.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ public static PleipengerLivetsSluttfase lagYtelse() {
3535
}
3636

3737
public static Pleietrengende lagPleietrengende() {
38-
return new Pleietrengende(TestUtils.okNorskIdentitetsnummerBarn(), null);
38+
return new Pleietrengende().medNorskIdentitetsnummer(TestUtils.okNorskIdentitetsnummerBarn());
3939
}
4040

4141
public static Bosteder lagBosteder(Periode... perioder) {

soknad/src/test/java/no/nav/k9/søknad/ytelse/pls/v1/YtelseTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ public void skal_tolerere_flere_aktiviteter_i_samme_periode() {
3636
);
3737

3838
var psb = new PleipengerLivetsSluttfase()
39-
.medPleietrengende(new Pleietrengende(NorskIdentitetsnummer.of("12345678911"), null))
39+
.medPleietrengende(new Pleietrengende().medNorskIdentitetsnummer(NorskIdentitetsnummer.of("12345678911")))
4040
.medArbeidstid(
4141
new Arbeidstid()
4242
.medArbeidstaker(
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
{
2+
"søknadId": "1",
3+
"versjon": "2.0.0",
4+
"mottattDato": "2020-10-12T12:53:21.046Z",
5+
"søker": {
6+
"norskIdentitetsnummer": "11111111111"
7+
},
8+
"journalposter" : [],
9+
"ytelse": {
10+
"type" : "PLEIEPENGER_LIVETS_SLUTTFASE",
11+
"pleietrengende" : {
12+
"norskIdentitetsnummer" : "22111111111",
13+
"fødselsdato" : "2000-01-01"
14+
},
15+
"arbeidAktivitet" : {
16+
"selvstendigNæringsdrivende" : [],
17+
"frilanser" : null
18+
},
19+
"arbeidstid" : {
20+
"arbeidstakerList" : [ {
21+
"norskIdentitetsnummer" : null,
22+
"organisasjonsnummer" : "999999999",
23+
"arbeidstidInfo" : {
24+
"perioder" : {
25+
"2021-12-01/2021-12-13" : {
26+
"jobberNormaltTimerPerDag" : "PT7H30M",
27+
"faktiskArbeidTimerPerDag" : "PT7H30M"
28+
}
29+
}
30+
}
31+
} ],
32+
"frilanserArbeidstidInfo" : null,
33+
"selvstendigNæringsdrivendeArbeidstidInfo" : null
34+
},
35+
"bosteder" : {
36+
"perioder" : {}
37+
},
38+
"utenlandsopphold" : {
39+
"perioder" : {}
40+
}
41+
}
42+
}
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
{
2+
"søknadId": "1",
3+
"versjon": "2.0.0",
4+
"mottattDato": "2020-10-12T12:53:21.046Z",
5+
"søker": {
6+
"norskIdentitetsnummer": "11111111111"
7+
},
8+
"journalposter" : [],
9+
"ytelse": {
10+
"type" : "PLEIEPENGER_LIVETS_SLUTTFASE",
11+
"pleietrengende" : {
12+
"norskIdentitetsnummer" : null,
13+
"fødselsdato" : null
14+
},
15+
"arbeidAktivitet" : {
16+
"selvstendigNæringsdrivende" : [],
17+
"frilanser" : null
18+
},
19+
"arbeidstid" : {
20+
"arbeidstakerList" : [ {
21+
"norskIdentitetsnummer" : null,
22+
"organisasjonsnummer" : "999999999",
23+
"arbeidstidInfo" : {
24+
"perioder" : {
25+
"2021-12-01/2021-12-13" : {
26+
"jobberNormaltTimerPerDag" : "PT7H30M",
27+
"faktiskArbeidTimerPerDag" : "PT7H30M"
28+
}
29+
}
30+
}
31+
} ],
32+
"frilanserArbeidstidInfo" : null,
33+
"selvstendigNæringsdrivendeArbeidstidInfo" : null
34+
},
35+
"bosteder" : {
36+
"perioder" : {}
37+
},
38+
"utenlandsopphold" : {
39+
"perioder" : {}
40+
}
41+
}
42+
}
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
{
2+
"søknadId": "1",
3+
"versjon": "2.0.0",
4+
"mottattDato": "2020-10-12T12:53:21.046Z",
5+
"søker": {
6+
"norskIdentitetsnummer": "11111111111"
7+
},
8+
"journalposter" : [],
9+
"ytelse": {
10+
"type" : "PLEIEPENGER_LIVETS_SLUTTFASE",
11+
"pleietrengende" : {
12+
"norskIdentitetsnummer" : null,
13+
"fødselsdato" : "2000-01-01"
14+
},
15+
"arbeidAktivitet" : {
16+
"selvstendigNæringsdrivende" : [],
17+
"frilanser" : null
18+
},
19+
"arbeidstid" : {
20+
"arbeidstakerList" : [ {
21+
"norskIdentitetsnummer" : null,
22+
"organisasjonsnummer" : "999999999",
23+
"arbeidstidInfo" : {
24+
"perioder" : {
25+
"2021-12-01/2021-12-13" : {
26+
"jobberNormaltTimerPerDag" : "PT7H30M",
27+
"faktiskArbeidTimerPerDag" : "PT7H30M"
28+
}
29+
}
30+
}
31+
} ],
32+
"frilanserArbeidstidInfo" : null,
33+
"selvstendigNæringsdrivendeArbeidstidInfo" : null
34+
},
35+
"bosteder" : {
36+
"perioder" : {}
37+
},
38+
"utenlandsopphold" : {
39+
"perioder" : {}
40+
}
41+
}
42+
}

0 commit comments

Comments
 (0)