Skip to content

Commit

Permalink
Lagt tilbake behandlingsAar, test på søknad uten periode (#1051)
Browse files Browse the repository at this point in the history
  • Loading branch information
albrektsson authored Dec 12, 2023
1 parent cf63b3d commit 8ca9e21
Show file tree
Hide file tree
Showing 8 changed files with 207 additions and 10 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -98,7 +98,7 @@ class SoknadService(
val søknadEntitet = requireNotNull(søknadRepository.hentSøknad(søknad.søknadId.id))
val k9Saksnummer = if(fagsakIder.isNotEmpty()) {
if(fagsakIder.size > 1) {
throw IllegalStateException("Fant flere fagsakIder på innsending: ${fagsakIder.map { it.second }}")
return HttpStatus.INTERNAL_SERVER_ERROR to "Fant flere fagsakIder på innsending: ${fagsakIder.map { it.second }}"
}
fagsakIder.map {
logger.info("Journalpost ${it.first} knyttet til fagsakId ${it.second}")
Expand All @@ -110,7 +110,9 @@ class SoknadService(
søknadEntitet = søknadEntitet,
fagsakYtelseType = fagsakYtelseType
)
require(k9Respons.second.isNullOrBlank()) { "Feil ved henting av saksnummer: ${k9Respons.second}" }
require(k9Respons.second.isNullOrBlank()) {
return HttpStatus.INTERNAL_SERVER_ERROR to "Feil ved henting av saksnummer: ${k9Respons.second}"
}
logger.info("Fick saksnummer ${k9Respons.first} av K9Sak for Journalpost ${journalpostIder.first()}")
k9Respons.first
}
Expand All @@ -119,7 +121,7 @@ class SoknadService(

// Ferdigstill journalposter
val søkerNavn = pdlService.hentPersonopplysninger(setOf(søkerFnr))
require(søkerNavn.isNotEmpty()) { throw IllegalStateException("Fant ikke søker i PDL") }
require(søkerNavn.isNotEmpty()) { return HttpStatus.INTERNAL_SERVER_ERROR to "Fant ikke søker i PDL" }
val bruker = FerdigstillJournalpost.Bruker(
identitetsnummer = søkerFnr.somIdentitetsnummer(),
navn = søkerNavn.first().navn(),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ package no.nav.k9punsj.integrasjoner.k9sak
import com.fasterxml.jackson.module.kotlin.readValue
import com.github.kittinunf.fuel.coroutines.awaitStringResponseResult
import com.github.kittinunf.fuel.httpPost
import kotlinx.coroutines.runBlocking
import no.nav.helse.dusseldorf.oauth2.client.AccessTokenClient
import no.nav.helse.dusseldorf.oauth2.client.CachedAccessTokenClient
import no.nav.k9.kodeverk.behandling.FagsakYtelseType
Expand All @@ -25,6 +26,7 @@ import no.nav.k9punsj.integrasjoner.k9sak.K9SakServiceImpl.Urls.hentIntektsmeldi
import no.nav.k9punsj.integrasjoner.k9sak.K9SakServiceImpl.Urls.hentPerioderUrl
import no.nav.k9punsj.integrasjoner.k9sak.K9SakServiceImpl.Urls.sendInnSøknadUrl
import no.nav.k9punsj.integrasjoner.k9sak.K9SakServiceImpl.Urls.sokFagsakerUrl
import no.nav.k9punsj.journalpost.JournalpostService
import no.nav.k9punsj.korrigeringinntektsmelding.tilOmsvisning
import no.nav.k9punsj.omsorgspengeraleneomsorg.tilOmsAOvisning
import no.nav.k9punsj.omsorgspengerkronisksyktbarn.tilOmsKSBvisning
Expand Down Expand Up @@ -54,6 +56,7 @@ class K9SakServiceImpl(
@Value("\${no.nav.k9sak.base_url}") private val baseUrl: URI,
@Value("\${no.nav.k9sak.scope}") private val k9sakScope: Set<String>,
@Qualifier("sts") private val accessTokenClient: AccessTokenClient,
private val journalpostService: JournalpostService,
private val personService: PersonService
) : K9SakService {

Expand Down Expand Up @@ -210,14 +213,23 @@ class K9SakServiceImpl(
} else null

val ytelseTypeKode = FagsakYtelseType.fraKode(fagsakYtelseType.kode).kode
val k9sakPeriode = no.nav.k9.sak.typer.Periode(k9FormatSøknad.getYtelse<Ytelse>().søknadsperiode.iso8601)

val journalpostId = k9FormatSøknad.journalposter.first().journalpostId
val behandlingsAar = runBlocking { journalpostService.hentBehandlingsAar(journalpostId) }
val k9sakPeriode = k9FormatSøknad.getYtelse<Ytelse>().søknadsperiode.iso8601?.let {
no.nav.k9.sak.typer.Periode(it)
}?: no.nav.k9.sak.typer.Periode(
LocalDate.of(behandlingsAar, 1, 1),
LocalDate.of(behandlingsAar, 12, 31)
)


val payloadMedAktørId = FinnEllerOpprettSak(
ytelseTypeKode,
søkerAktørId,
pleietrengendeAktørId,
annenpartAktørId,
k9sakPeriode,
k9sakPeriode
)

val body = kotlin.runCatching { objectMapper().writeValueAsString(payloadMedAktørId) }.getOrNull()
Expand All @@ -230,7 +242,6 @@ class K9SakServiceImpl(
} catch (e: Exception) {
Pair(null, "Feilet deserialisering")
}

}

override suspend fun sendInnSoeknad(
Expand Down
24 changes: 21 additions & 3 deletions src/main/kotlin/no/nav/k9punsj/journalpost/JournalpostRoutes.kt
Original file line number Diff line number Diff line change
Expand Up @@ -82,7 +82,6 @@ internal class JournalpostRoutes(
internal const val Dokument = "/journalpost/{$JournalpostIdKey}/dokument/{$DokumentIdKey}"
internal const val HentJournalposter = "/journalpost/hent"
internal const val SettPåVent = "/journalpost/vent/{$JournalpostIdKey}"
@Deprecated("Kan fjernes fra frontend")
internal const val SettBehandlingsAar = "/journalpost/settBehandlingsAar/{$JournalpostIdKey}"
internal const val LukkJournalpost = "/journalpost/lukk/{$JournalpostIdKey}"
internal const val KopierJournalpost = "/journalpost/kopier/{$JournalpostIdKey}"
Expand Down Expand Up @@ -240,12 +239,31 @@ internal class JournalpostRoutes(
}
}

// Deprecated: Kan fjernes fra frontend.
POST("/api${Urls.SettBehandlingsAar}") { request ->
RequestContext(coroutineContext, request) {
val norskIdent = request.hentNorskIdentHeader()
innlogget.harInnloggetBrukerTilgangTilOgSendeInn(
norskIdent = norskIdent,
url = Urls.SettBehandlingsAar
)?.let { return@RequestContext it }

val journalpostId = request.journalpostId()
val behandlingsAar = try {
request.body(BodyExtractors.toMono(BehandlingsAarDto::class.java)).awaitFirst().behandlingsAar
} catch (e: Exception) {
valVærendeÅr = LocalDate.now().year
logger.info("Kunne ikke hente behandlingsår fra request. Setter til nåværende år ($nåVærendeÅr). Feil: {}", e)
VærendeÅr
}

journalpostService.lagreBehandlingsAar(
journalpostId = journalpostId,
behandlingsAar = behandlingsAar
)

return@RequestContext ServerResponse.ok()
.json()
.bodyValueAndAwait(BehandlingsAarDto(behandlingsAar = LocalDate.now().year))
.bodyValueAndAwait(BehandlingsAarDto(behandlingsAar = behandlingsAar))
}
}

Expand Down
19 changes: 18 additions & 1 deletion src/main/kotlin/no/nav/k9punsj/journalpost/JournalpostService.kt
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,23 @@ class JournalpostService(
internal suspend fun hentSafJournalPost(journalpostId: String): SafDtos.Journalpost? =
safGateway.hentJournalpostInfo(journalpostId)

internal suspend fun hentBehandlingsAar(journalpostId: String): Int {
val behandlingsAar = journalpostRepository.hent(journalpostId).behandlingsAar
logger.info("Hentet behandlingsår ($behandlingsAar) for journalpost: $journalpostId")
return behandlingsAar ?: LocalDate.now().year
}

internal suspend fun lagreBehandlingsAar(journalpostId: String, behandlingsAar: Int) {
val journalpost = journalpostRepository.hentHvis(journalpostId)
if (journalpost != null) {
logger.info("Oppdaterer behandlingsår ($behandlingsAar) for journalpost: $journalpostId")
val medBehandlingsAar = journalpost.copy(behandlingsAar = behandlingsAar)
journalpostRepository.lagre(medBehandlingsAar) {
medBehandlingsAar
}
}
}

internal suspend fun hentJournalpostInfo(journalpostId: String): JournalpostInfo? {
val safJournalpost = safGateway.hentJournalpostInfo(journalpostId)

Expand Down Expand Up @@ -88,7 +105,7 @@ class JournalpostService(
}
}

@Deprecated("Kan sende in betyr att den har blitt sendt in fra før? FIXME")
// TODO: Kan sende in betyr att den har blitt sendt in fra før? FIXME
internal fun kanSendesInn(søknadEntitet: SøknadEntitet): MutableSet<String> {
val journalPoster = søknadEntitet.journalposter!!
val journalposterDto: JournalposterDto = objectMapper.convertValue(journalPoster)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ data class PunsjJournalpost(
val gosysoppgaveId: String? = null,
val ytelse: String? = null,
val payload: String? = null,
val behandlingsAar: Int? = null,
val fordelStatusType: String? = null
)

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,17 +19,22 @@ import no.nav.k9punsj.fordel.PunsjInnsendingType
import no.nav.k9punsj.innsending.InnsendingClient
import no.nav.k9punsj.integrasjoner.dokarkiv.DokarkivGateway
import no.nav.k9punsj.integrasjoner.dokarkiv.SafGateway
import no.nav.k9punsj.journalpost.dto.BehandlingsAarDto
import no.nav.k9punsj.journalpost.dto.KopierJournalpostDto
import no.nav.k9punsj.rest.eksternt.pdl.TestPdlService
import no.nav.k9punsj.util.DatabaseUtil
import no.nav.k9punsj.util.IdGenerator
import no.nav.k9punsj.util.WebClientUtils.postAndAssert
import no.nav.k9punsj.util.WebClientUtils.postAndAssertAwaitWithStatusAndBody
import no.nav.k9punsj.wiremock.saksbehandlerAccessToken
import org.junit.jupiter.api.AfterEach
import org.junit.jupiter.api.Assertions
import org.junit.jupiter.api.BeforeEach
import org.junit.jupiter.api.Test
import org.junit.jupiter.api.extension.ExtendWith
import org.junit.jupiter.params.ParameterizedTest
import org.junit.jupiter.params.provider.ValueSource
import org.skyscreamer.jsonassert.JSONAssert
import org.springframework.beans.factory.annotation.Autowired
import org.springframework.boot.actuate.metrics.MetricsEndpoint
import org.springframework.boot.test.mock.mockito.MockBean
Expand All @@ -38,6 +43,7 @@ import org.springframework.test.context.ActiveProfiles
import org.springframework.test.context.ContextConfiguration
import org.springframework.test.context.junit.jupiter.SpringExtension
import org.springframework.web.reactive.function.BodyInserters
import java.time.LocalDate

@ExtendWith(SpringExtension::class)
@ActiveProfiles("test")
Expand Down Expand Up @@ -138,4 +144,82 @@ internal class KopierJournalpostRouteTest {

Assertions.assertTrue(body.statusCode().is2xxSuccessful)
}

@ParameterizedTest
@ValueSource(
strings = [
"""{}""",
"""{"behandlingsAar": null}""",
"""{"behandlingsAar": 0}""",
"""{"behandlingsAar": -1}""",
]
)
fun `Sett behandlingår med ugyldige verdier defaulter til nåværende år`(payload: String) = runBlocking {

val journalpostId = IdGenerator.nesteId()
val melding = FordelPunsjEventDto(
aktørId = "1234567890",
journalpostId = journalpostId,
type = PunsjInnsendingType.PAPIRSØKNAD.kode,
ytelse = "PSB"
)
hendelseMottaker.prosesser(melding)

val journalpost = journalpostRepository.hent(journalpostId)
Assertions.assertNotNull(journalpost)

val body = client.postAndAssertAwaitWithStatusAndBody<String, String>(
authorizationHeader = saksbehandlerAuthorizationHeader,
navNorskIdentHeader = journalpost.aktørId,
assertStatus = HttpStatus.OK,
requestBody = BodyInserters.fromValue(payload),
api,
journalpostUri,
"settBehandlingsAar",
journalpostId
)

val forventetRespons = """
{
"behandlingsAar": ${LocalDate.now().year}
}""".trimIndent()

JSONAssert.assertEquals(forventetRespons, body, true)
}

@Test
fun `Sett behandlingår med gyldig verdi`() = runBlocking {
val journalpostId = IdGenerator.nesteId()
val melding = FordelPunsjEventDto(
aktørId = "1234567890",
journalpostId = journalpostId,
type = PunsjInnsendingType.PAPIRSØKNAD.kode,
ytelse = "PSB"
)
hendelseMottaker.prosesser(melding)

val journalpost = journalpostRepository.hent(journalpostId)
Assertions.assertNotNull(journalpost)

val gyldigÅr = LocalDate.now().year + 1
val payload = BehandlingsAarDto(behandlingsAar = gyldigÅr)

val body = client.postAndAssertAwaitWithStatusAndBody<BehandlingsAarDto, String>(
authorizationHeader = saksbehandlerAuthorizationHeader,
navNorskIdentHeader = journalpost.aktørId,
assertStatus = HttpStatus.OK,
requestBody = BodyInserters.fromValue(payload),
api,
journalpostUri,
"settBehandlingsAar",
journalpostId
)

val forventetRespons = """
{
"behandlingsAar": $gyldigÅr
}""".trimIndent()

JSONAssert.assertEquals(forventetRespons, body, true)
}
}
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package no.nav.k9punsj.omsorgspengerkronisksyktbarn

import com.fasterxml.jackson.module.kotlin.readValue
import io.mockk.junit5.MockKExtension
import kotlinx.coroutines.runBlocking
import no.nav.helse.dusseldorf.testsupport.jws.Azure
Expand All @@ -17,6 +18,7 @@ import no.nav.k9punsj.util.WebClientUtils.getAndAssert
import no.nav.k9punsj.util.WebClientUtils.postAndAssert
import no.nav.k9punsj.util.WebClientUtils.postAndAssertAwaitWithStatusAndBody
import no.nav.k9punsj.util.WebClientUtils.putAndAssert
import no.nav.k9punsj.utils.objectMapper
import no.nav.k9punsj.wiremock.saksbehandlerAccessToken
import org.assertj.core.api.Assertions.assertThat
import org.junit.jupiter.api.AfterEach
Expand Down Expand Up @@ -274,6 +276,58 @@ class OmsorgspengerKroniskSyktBarnRoutesTest {
assertThat(søknad.harMedisinskeOpplysninger).isEqualTo(true)
}

@Test
fun `Innsending uten periode`(): Unit = runBlocking {
val norskIdent = "02022352122"
val soeknadJson: SøknadJson = objectMapper().readValue("""
{
"soeknadId": "988bedeb-3324-4d2c-9277-dcbb5cc26577",
"soekerId": "11111111111",
"journalposter": [
"123456"
],
"mottattDato": "2023-12-07",
"klokkeslett": "12:00",
"barn": {
"norskIdent": "22222222222",
"foedselsdato": ""
},
"harInfoSomIkkeKanPunsjes": false,
"harMedisinskeOpplysninger": true
}
"""
)
val journalpostid = abs(Random(234234).nextInt()).toString()
tilpasserSøknadsMalTilTesten(soeknadJson, norskIdent, journalpostid)
opprettOgLagreSoeknad(soeknadJson = soeknadJson, ident = norskIdent, journalpostid)

val body = client.postAndAssertAwaitWithStatusAndBody<SøknadJson, OasSoknadsfeil>(
authorizationHeader = saksbehandlerAuthorizationHeader,
navNorskIdentHeader = null,
assertStatus = HttpStatus.ACCEPTED,
requestBody = BodyInserters.fromValue(soeknadJson),
api,
søknadTypeUri,
"valider"
)

assertThat(body.feil?.isEmpty())

val sendSøknad = lagSendSøknad(norskIdent = norskIdent, søknadId = soeknadJson["soeknadId"] as String)

val resultat = client.postAndAssertAwaitWithStatusAndBody<SendSøknad, OasSoknadsfeil>(
authorizationHeader = saksbehandlerAuthorizationHeader,
navNorskIdentHeader = null,
assertStatus = HttpStatus.ACCEPTED,
requestBody = BodyInserters.fromValue(sendSøknad),
api,
søknadTypeUri,
"send"
)

assertThat(resultat.feil?.isEmpty())
}

@Test
@Disabled("Test passer ikke fordi k9-format ikke validerer noe på denne ytelsen.")
fun `skal få feil hvis barn ikke er fylt ut`(): Unit = runBlocking {
Expand Down
10 changes: 10 additions & 0 deletions src/test/kotlin/no/nav/k9punsj/rest/eksternt/pdl/TestPdlService.kt
Original file line number Diff line number Diff line change
Expand Up @@ -96,6 +96,16 @@ internal class TestPdlService : PdlService {
gradering = Personopplysninger.Gradering.UGRADERT
)
)
setOf("02022352122") -> setOf( // OMS KS tester
Personopplysninger(
identitetsnummer = "02022352122",
fødselsdato = LocalDate.parse("1592-05-06"),
fornavn = "Bob",
mellomnavn = "KSB",
etternavn = "Bobson",
gradering = Personopplysninger.Gradering.UGRADERT
)
)
setOf("02022352121") -> setOf( // PSB tester
Personopplysninger(
identitetsnummer = "02022352121",
Expand Down

0 comments on commit 8ca9e21

Please sign in to comment.