Skip to content

Commit 1240d9b

Browse files
authored
Nye endepunkter for barnetrygd og kontantstøtte søknader samt sjekk av adressebeskyttelse på alle barn (#283)
Favro: [NAV-22010](https://favro.com/organization/98c34fb974ce445eac854de0/1844bbac3b6605eacc8f5543?card=NAV-22010) ### 💰 Hva forsøker du å løse i denne PR'en Per nå viser vi søkers adresse i PDF dersom søker selv ikke har adressebeskyttelse. Dersom søker ikke har adressebeskyttelse men et av barna det søkes for har det, viser vi fortsatt søkers adresse og informasjon om at barna bor med søker. Dette er svært uheldig. For å fikse dette har vi oppdatert søknadskontraktene til barnetrygd og kontantstøtte med feltet `finnesPersonMedAdressebeskyttelse` som skal gi HTML-generator informasjon om når vi kan vise adresse og når adresse skal bli satt til "Skjermet adresse". Feltet utledes før `baks-soknad-api` sender søknaden videre til `baks-mottak`, ved at vi gjør oppslag på alle barn det søkes om mot PDL for å finne ut om noen har adressebeskyttelse. Dersom søker eller et av barna har adressebeskyttelse setter vi feltet `finnesPersonMedAdressebeskyttelse` til `true`. Relaterte endringer: * [familie-ba-soknad](navikt/familie-ba-soknad#1340) * [familie-ks-soknad](navikt/familie-ks-soknad#622) * [familie-baks-mottak](navikt/familie-baks-mottak#1150) ### ✅ Checklist - [ ] Jeg har testet mine endringer i henhold til akseptansekriteriene 🕵️ - [x] Jeg har skrevet tester. ### 💬 Ønsker du en muntlig gjennomgang? - [ ] Ja - [x] Nei
1 parent 22ace24 commit 1240d9b

File tree

12 files changed

+626
-60
lines changed

12 files changed

+626
-60
lines changed

.editorconfig

+19-18
Large diffs are not rendered by default.

pom.xml

+1-1
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020
<changelist>-SNAPSHOT</changelist>
2121
<jvmTarget>21</jvmTarget>
2222
<java.version>21</java.version>
23-
<kontrakter.version>3.0_20240816073331_933df6f</kontrakter.version>
23+
<kontrakter.version>3.0_20240828135916_7c54c82</kontrakter.version>
2424
<felles.version>3.20240806111424_fff2930</felles.version>
2525
<mockk.version>1.13.12</mockk.version>
2626
<token-validation-spring.version>5.0.3</token-validation-spring.version>

src/main/kotlin/no/nav/familie/baks/soknad/api/clients/mottak/MottakClient.kt

+16-2
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,10 @@ import org.springframework.util.MultiValueMap
1515
import org.springframework.web.client.RestOperations
1616
import org.springframework.web.client.exchange
1717
import java.net.URI
18-
import no.nav.familie.kontrakter.ba.søknad.v8.Søknad as SøknadV8
18+
import no.nav.familie.kontrakter.ba.søknad.v8.Søknad as BarnetrygdSøknadV8
19+
import no.nav.familie.kontrakter.ba.søknad.v9.BarnetrygdSøknad as BarnetrygdSøknadV9
1920
import no.nav.familie.kontrakter.ks.søknad.v4.KontantstøtteSøknad as KontantstøtteSøknadV4
21+
import no.nav.familie.kontrakter.ks.søknad.v5.KontantstøtteSøknad as KontantstøtteSøknadV5
2022

2123
@Component
2224
class MottakClient(
@@ -35,16 +37,28 @@ class MottakClient(
3537
}
3638
}
3739

38-
fun sendBarnetrygdSøknad(søknad: SøknadV8): Ressurs<Kvittering> {
40+
@Deprecated("Vi bruker ny versjon av barnetrygdsøknad")
41+
fun sendBarnetrygdSøknad(søknad: BarnetrygdSøknadV8): Ressurs<Kvittering> {
3942
val uri: URI = UriUtil.uri(URI.create(mottakBaseUrl), "api/soknad/v8")
4043
return håndterSendingAvSøknad(uri = uri, søknad = søknad)
4144
}
4245

46+
fun sendBarnetrygdSøknad(søknad: BarnetrygdSøknadV9): Ressurs<Kvittering> {
47+
val uri: URI = UriUtil.uri(URI.create(mottakBaseUrl), "api/soknad/v9")
48+
return håndterSendingAvSøknad(uri = uri, søknad = søknad)
49+
}
50+
51+
@Deprecated(message = "Vi bruker en ny versjon av kontantstøttesøknad")
4352
fun sendKontantstøtteSøknad(kontantstøtteSøknad: KontantstøtteSøknadV4): Ressurs<Kvittering> {
4453
val uri: URI = UriUtil.uri(URI.create(mottakBaseUrl), "api/kontantstotte/soknad/v4")
4554
return håndterSendingAvSøknad(uri = uri, søknad = kontantstøtteSøknad)
4655
}
4756

57+
fun sendKontantstøtteSøknad(kontantstøtteSøknad: KontantstøtteSøknadV5): Ressurs<Kvittering> {
58+
val uri: URI = UriUtil.uri(URI.create(mottakBaseUrl), "api/kontantstotte/soknad/v5")
59+
return håndterSendingAvSøknad(uri = uri, søknad = kontantstøtteSøknad)
60+
}
61+
4862
fun håndterSendingAvSøknad(
4963
uri: URI,
5064
knad: Any
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
package no.nav.familie.baks.soknad.api.controllers
22

3-
import no.nav.familie.baks.soknad.api.clients.mottak.MottakClient
43
import no.nav.familie.baks.soknad.api.domene.Kvittering
4+
import no.nav.familie.baks.soknad.api.services.BarnetrygdSøknadService
5+
import no.nav.familie.baks.soknad.api.services.KontantstøtteSøknadService
56
import no.nav.familie.kontrakter.felles.Ressurs
67
import no.nav.familie.sikkerhet.EksternBrukerUtils
78
import no.nav.security.token.support.core.api.ProtectedWithClaims
@@ -13,54 +14,42 @@ import org.springframework.web.bind.annotation.RequestBody
1314
import org.springframework.web.bind.annotation.RequestMapping
1415
import org.springframework.web.bind.annotation.RestController
1516
import no.nav.familie.kontrakter.ba.søknad.v8.Søknad as BarnetrygdSøknadV8
17+
import no.nav.familie.kontrakter.ba.søknad.v9.BarnetrygdSøknad as BarnetrygdSøknadV9
1618
import no.nav.familie.kontrakter.ks.søknad.v4.KontantstøtteSøknad as KontantstøtteSøknadV4
19+
import no.nav.familie.kontrakter.ks.søknad.v5.KontantstøtteSøknad as KontantstøtteSøknadV5
1720

1821
@RestController
1922
@RequestMapping(path = ["/api"], produces = [MediaType.APPLICATION_JSON_VALUE])
2023
@RequiredIssuers(
2124
ProtectedWithClaims(issuer = EksternBrukerUtils.ISSUER_TOKENX, claimMap = ["acr=Level4"])
2225
)
2326
class SøknadController(
24-
private val mottakClient: MottakClient
27+
private val kontantstøtteSøknadService: KontantstøtteSøknadService,
28+
private val barnetrygdSøknadService: BarnetrygdSøknadService
2529
) {
30+
@Deprecated("Bruk nytt endepunkt med oppdatert kontrakt /soknad/v9 ")
2631
@PostMapping("/soknad/v8")
2732
fun søknadsmottakBarnetrygd(
2833
@RequestBody(required = true) søknad: BarnetrygdSøknadV8
29-
): ResponseEntity<Ressurs<Kvittering>> {
30-
val søknadMedIdentFraToken =
31-
søknad.copy(
32-
søker =
33-
søknad.søker.copy(
34-
ident =
35-
søknad.søker.ident.copy(
36-
verdi =
37-
søknad.søker.ident.verdi
38-
.mapValues { EksternBrukerUtils.hentFnrFraToken() }
39-
)
40-
)
41-
)
34+
): ResponseEntity<Ressurs<Kvittering>> = ResponseEntity.ok().body(barnetrygdSøknadService.mottaOgSendBarnetrygdsøknad(søknad))
4235

43-
return ResponseEntity.ok().body(mottakClient.sendBarnetrygdSøknad(søknadMedIdentFraToken))
44-
}
36+
@PostMapping("/soknad/v9")
37+
fun søknadsmottakBarnetrygd(
38+
@RequestBody(required = true) søknad: BarnetrygdSøknadV9
39+
): ResponseEntity<Ressurs<Kvittering>> = ResponseEntity.ok().body(barnetrygdSøknadService.mottaOgSendBarnetrygdsøknad(søknad))
4540

41+
@Deprecated("Bruk nytt endepunkt med oppdatert kontrakt /soknad/kontantstotte/v5 ")
4642
@PostMapping("/soknad/kontantstotte/v4")
4743
fun søknadsmottakKontantstøtte(
4844
@RequestBody(required = true)
4945
kontantstøtteSøknad: KontantstøtteSøknadV4
50-
): ResponseEntity<Ressurs<Kvittering>> {
51-
val kontantstøtteSøknadMedIdentFraToken =
52-
kontantstøtteSøknad.copy(
53-
søker =
54-
kontantstøtteSøknad.søker.copy(
55-
ident =
56-
kontantstøtteSøknad.søker.ident.copy(
57-
verdi =
58-
kontantstøtteSøknad.søker.ident.verdi
59-
.mapValues { EksternBrukerUtils.hentFnrFraToken() }
60-
)
61-
)
62-
)
46+
): ResponseEntity<Ressurs<Kvittering>> =
47+
ResponseEntity.ok().body(kontantstøtteSøknadService.mottaOgSendKontantstøttesøknad(kontantstøtteSøknad))
6348

64-
return ResponseEntity.ok().body(mottakClient.sendKontantstøtteSøknad(kontantstøtteSøknadMedIdentFraToken))
65-
}
49+
@PostMapping("/soknad/kontantstotte/v5")
50+
fun søknadsmottakKontantstøtte(
51+
@RequestBody(required = true)
52+
kontantstøtteSøknad: KontantstøtteSøknadV5
53+
): ResponseEntity<Ressurs<Kvittering>> =
54+
ResponseEntity.ok().body(kontantstøtteSøknadService.mottaOgSendKontantstøttesøknad(kontantstøtteSøknad))
6655
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
package no.nav.familie.baks.soknad.api.services
2+
3+
import no.nav.familie.baks.soknad.api.clients.mottak.MottakClient
4+
import no.nav.familie.baks.soknad.api.domene.Kvittering
5+
import no.nav.familie.baks.soknad.api.domene.Ytelse
6+
import no.nav.familie.baks.soknad.api.services.pdl.PersonopplysningerService
7+
import no.nav.familie.kontrakter.felles.Ressurs
8+
import no.nav.familie.sikkerhet.EksternBrukerUtils
9+
import org.springframework.stereotype.Service
10+
import no.nav.familie.kontrakter.ba.søknad.v8.Søknad as BarnetrygdSøknadV8
11+
import no.nav.familie.kontrakter.ba.søknad.v9.BarnetrygdSøknad as BarnetrygdSøknadV9
12+
13+
@Service
14+
class BarnetrygdSøknadService(
15+
mottakClient: MottakClient,
16+
personopplysningerService: PersonopplysningerService
17+
) : SøknadService(
18+
mottakClient,
19+
personopplysningerService
20+
) {
21+
@Deprecated("Vi bruker ny versjon av barnetrygdsøknad")
22+
fun mottaOgSendBarnetrygdsøknad(kontantstøtteSøknad: BarnetrygdSøknadV8): Ressurs<Kvittering> {
23+
val søknadMedIdentFraToken =
24+
kontantstøtteSøknad.copy(
25+
søker =
26+
kontantstøtteSøknad.søker.copy(
27+
ident =
28+
kontantstøtteSøknad.søker.ident.copy(
29+
verdi =
30+
kontantstøtteSøknad.søker.ident.verdi
31+
.mapValues { EksternBrukerUtils.hentFnrFraToken() }
32+
)
33+
)
34+
)
35+
return mottakClient.sendBarnetrygdSøknad(søknadMedIdentFraToken)
36+
}
37+
38+
fun mottaOgSendBarnetrygdsøknad(barnetrygdSøknad: BarnetrygdSøknadV9): Ressurs<Kvittering> {
39+
val søknadMedIdentFraToken =
40+
barnetrygdSøknad.copy(
41+
søker =
42+
barnetrygdSøknad.søker.copy(
43+
ident =
44+
barnetrygdSøknad.søker.ident.copy(
45+
verdi =
46+
barnetrygdSøknad.søker.ident.verdi
47+
.mapValues { EksternBrukerUtils.hentFnrFraToken() }
48+
)
49+
),
50+
finnesPersonMedAdressebeskyttelse =
51+
finnesPersonMedAdressebeskyttelse(
52+
barnetrygdSøknad.søker.adressebeskyttelse,
53+
barnetrygdSøknad.barn.map {
54+
it.ident.verdi.values
55+
.first()
56+
},
57+
Ytelse.BARNETRYGD
58+
)
59+
)
60+
return mottakClient.sendBarnetrygdSøknad(søknadMedIdentFraToken)
61+
}
62+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
package no.nav.familie.baks.soknad.api.services
2+
3+
import no.nav.familie.baks.soknad.api.clients.mottak.MottakClient
4+
import no.nav.familie.baks.soknad.api.domene.Kvittering
5+
import no.nav.familie.baks.soknad.api.domene.Ytelse
6+
import no.nav.familie.baks.soknad.api.services.pdl.PersonopplysningerService
7+
import no.nav.familie.kontrakter.felles.Ressurs
8+
import no.nav.familie.sikkerhet.EksternBrukerUtils
9+
import org.springframework.stereotype.Service
10+
import no.nav.familie.kontrakter.ks.søknad.v4.KontantstøtteSøknad as KontantstøtteSøknadV4
11+
import no.nav.familie.kontrakter.ks.søknad.v5.KontantstøtteSøknad as KontantstøtteSøknadV5
12+
13+
@Service
14+
class KontantstøtteSøknadService(
15+
mottakClient: MottakClient,
16+
personopplysningerService: PersonopplysningerService
17+
) : SøknadService(
18+
mottakClient,
19+
personopplysningerService
20+
) {
21+
@Deprecated("Vi bruker ny versjon av kontantstøttesøknad")
22+
fun mottaOgSendKontantstøttesøknad(kontantstøtteSøknad: KontantstøtteSøknadV4): Ressurs<Kvittering> {
23+
val kontantstøtteSøknadMedIdentFraToken =
24+
kontantstøtteSøknad.copy(
25+
søker =
26+
kontantstøtteSøknad.søker.copy(
27+
ident =
28+
kontantstøtteSøknad.søker.ident.copy(
29+
verdi =
30+
kontantstøtteSøknad.søker.ident.verdi
31+
.mapValues { EksternBrukerUtils.hentFnrFraToken() }
32+
)
33+
)
34+
)
35+
return mottakClient.sendKontantstøtteSøknad(kontantstøtteSøknadMedIdentFraToken)
36+
}
37+
38+
fun mottaOgSendKontantstøttesøknad(kontantstøtteSøknad: KontantstøtteSøknadV5): Ressurs<Kvittering> {
39+
val kontantstøtteSøknadMedIdentFraToken =
40+
kontantstøtteSøknad.copy(
41+
søker =
42+
kontantstøtteSøknad.søker.copy(
43+
ident =
44+
kontantstøtteSøknad.søker.ident.copy(
45+
verdi =
46+
kontantstøtteSøknad.søker.ident.verdi
47+
.mapValues { EksternBrukerUtils.hentFnrFraToken() }
48+
)
49+
),
50+
finnesPersonMedAdressebeskyttelse =
51+
finnesPersonMedAdressebeskyttelse(
52+
kontantstøtteSøknad.søker.adressebeskyttelse,
53+
kontantstøtteSøknad.barn.map {
54+
it.ident.verdi.values
55+
.first()
56+
},
57+
Ytelse.KONTANTSTOTTE
58+
)
59+
)
60+
return mottakClient.sendKontantstøtteSøknad(kontantstøtteSøknadMedIdentFraToken)
61+
}
62+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
package no.nav.familie.baks.soknad.api.services
2+
3+
import no.nav.familie.baks.soknad.api.clients.mottak.MottakClient
4+
import no.nav.familie.baks.soknad.api.domene.Ytelse
5+
import no.nav.familie.baks.soknad.api.services.pdl.PersonopplysningerService
6+
7+
abstract class SøknadService(
8+
val mottakClient: MottakClient,
9+
val personopplysningerService: PersonopplysningerService
10+
) {
11+
fun finnesPersonMedAdressebeskyttelse(
12+
kerHarAdressebeskyttelse: Boolean,
13+
barn: List<String>,
14+
ytelse: Ytelse
15+
): Boolean =
16+
søkerHarAdressebeskyttelse ||
17+
barn.any {
18+
it.harAdressebeskyttelse(ytelse)
19+
}
20+
21+
private fun String.harAdressebeskyttelse(ytelse: Ytelse): Boolean =
22+
personopplysningerService
23+
.hentPersoninfo(
24+
personIdent = this,
25+
ytelse = ytelse,
26+
somSystem = true
27+
).adressebeskyttelse
28+
}

src/main/kotlin/no/nav/familie/baks/soknad/api/services/pdl/mapper/PdlMapper.kt

+2-7
Original file line numberDiff line numberDiff line change
@@ -112,14 +112,9 @@ object PdlMapper {
112112
}
113113
}
114114

115-
fun harPersonAdresseBeskyttelse(adresseBeskyttelse: List<Adressebeskyttelse>?): Boolean {
116-
if (!adresseBeskyttelse.isNullOrEmpty() &&
115+
fun harPersonAdresseBeskyttelse(adresseBeskyttelse: List<Adressebeskyttelse>?): Boolean =
116+
!adresseBeskyttelse.isNullOrEmpty() &&
117117
adresseBeskyttelse.any {
118118
it.gradering != ADRESSEBESKYTTELSEGRADERING.UGRADERT
119119
}
120-
) {
121-
return true
122-
}
123-
return false
124-
}
125120
}

0 commit comments

Comments
 (0)