Skip to content

Commit

Permalink
Bruk mottatt-dato fra api-app (#810)
Browse files Browse the repository at this point in the history
  • Loading branch information
bjerga authored Dec 20, 2024
1 parent 0e75c08 commit 4d107e6
Show file tree
Hide file tree
Showing 25 changed files with 178 additions and 77 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ import no.nav.helsearbeidsgiver.inntektsmelding.api.sikkerLogger
import no.nav.helsearbeidsgiver.utils.json.toJson
import no.nav.helsearbeidsgiver.utils.json.toPretty
import no.nav.helsearbeidsgiver.utils.wrapper.Fnr
import java.time.LocalDateTime
import java.util.UUID

class InnsendingProducer(
Expand All @@ -34,6 +35,7 @@ class InnsendingProducer(
mapOf(
Key.ARBEIDSGIVER_FNR to arbeidsgiverFnr.toJson(),
Key.SKJEMA_INNTEKTSMELDING to skjemaInntektsmelding.toJson(SkjemaInntektsmelding.serializer()),
Key.MOTTATT to LocalDateTime.now().toJson(),
).toJson(),
).also {
logger.info("Publiserte til kafka forespørselId: ${skjemaInntektsmelding.forespoerselId} og transaksjonId=$transaksjonId")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,12 @@ package no.nav.helsearbeidsgiver.inntektsmelding.api.innsending

import com.github.navikt.tbd_libs.rapids_and_rivers_api.RapidsConnection
import io.ktor.http.HttpStatusCode
import io.ktor.server.application.ApplicationCall
import io.ktor.server.application.call
import io.ktor.server.request.receiveText
import io.ktor.server.routing.Route
import io.ktor.server.routing.post
import io.ktor.util.pipeline.PipelineContext
import kotlinx.serialization.builtins.serializer
import no.nav.helsearbeidsgiver.domene.inntektsmelding.v1.skjema.SkjemaInntektsmelding
import no.nav.helsearbeidsgiver.felles.Tekst
Expand All @@ -27,6 +29,7 @@ import no.nav.helsearbeidsgiver.inntektsmelding.api.utils.respondBadRequest
import no.nav.helsearbeidsgiver.inntektsmelding.api.utils.respondInternalServerError
import no.nav.helsearbeidsgiver.utils.json.fromJson
import no.nav.helsearbeidsgiver.utils.json.parseJson
import no.nav.helsearbeidsgiver.utils.json.toPretty
import java.util.UUID

fun Route.innsending(
Expand All @@ -41,25 +44,7 @@ fun Route.innsending(
Metrics.innsendingEndpoint.recordTime(Route::innsending) {
val transaksjonId = UUID.randomUUID()

val skjema =
call
.receiveText()
.runCatching {
parseJson()
.also { json ->
"Mottok inntektsmeldingsskjema.".let {
logger.info(it)
sikkerLogger.info("$it og request:\n$json")
}
}.fromJson(SkjemaInntektsmelding.serializer())
}.getOrElse { error ->
"Klarte ikke parse json for inntektsmeldingsskjema.".also {
logger.error(it)
sikkerLogger.error(it, error)
}
null
}

val skjema = lesRequestOrNull()
when {
skjema == null -> {
respondBadRequest(JsonErrorResponse(), JsonErrorResponse.serializer())
Expand Down Expand Up @@ -106,3 +91,22 @@ fun Route.innsending(
}
}
}

private suspend fun PipelineContext<Unit, ApplicationCall>.lesRequestOrNull(): SkjemaInntektsmelding? =
call
.receiveText()
.runCatching {
parseJson()
.also { json ->
"Mottok inntektsmeldingsskjema.".let {
logger.info(it)
sikkerLogger.info("$it\n${json.toPretty()}")
}
}.fromJson(SkjemaInntektsmelding.serializer())
}.getOrElse { error ->
"Klarte ikke parse json for inntektsmeldingsskjema.".also {
logger.error(it)
sikkerLogger.error(it, error)
}
null
}
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@ import no.nav.helsearbeidsgiver.inntektsmelding.api.utils.respondInternalServerE
import no.nav.helsearbeidsgiver.inntektsmelding.api.utils.respondNotFound
import no.nav.helsearbeidsgiver.inntektsmelding.api.utils.respondOk
import no.nav.helsearbeidsgiver.utils.json.fromJson
import no.nav.helsearbeidsgiver.utils.json.toPretty
import no.nav.helsearbeidsgiver.utils.pipe.orDefault
import java.time.ZoneId
import java.util.UUID
Expand Down Expand Up @@ -69,10 +70,9 @@ fun Route.kvittering(
kvitteringProducer.publish(transaksjonId, forespoerselId)
val resultatJson = redisPoller.hent(transaksjonId)

sikkerLogger.info("Resultat for henting av kvittering for $forespoerselId: $resultatJson")

val resultat = resultatJson.success?.fromJson(InnsendtInntektsmelding.serializer())
if (resultat != null) {
sikkerLogger.info("Hentet kvittering for '$forespoerselId'.\n${resultatJson.success?.toPretty()}")
if (resultat.dokument == null && resultat.eksternInntektsmelding == null) {
respondNotFound("Kvittering ikke funnet for forespørselId: $forespoerselId", String.serializer())
} else {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ import no.nav.helsearbeidsgiver.utils.json.toJson
import no.nav.helsearbeidsgiver.utils.json.toPretty
import no.nav.helsearbeidsgiver.utils.log.MdcUtils
import no.nav.helsearbeidsgiver.utils.wrapper.Fnr
import java.time.LocalDateTime
import java.util.UUID

class LagreSelvbestemtImProducer(
Expand All @@ -38,8 +39,9 @@ class LagreSelvbestemtImProducer(
Key.KONTEKST_ID to transaksjonId.toJson(),
Key.DATA to
mapOf(
Key.SKJEMA_INNTEKTSMELDING to skjema.toJson(SkjemaInntektsmeldingSelvbestemt.serializer()),
Key.ARBEIDSGIVER_FNR to avsenderFnr.toJson(),
Key.SKJEMA_INNTEKTSMELDING to skjema.toJson(SkjemaInntektsmeldingSelvbestemt.serializer()),
Key.MOTTATT to LocalDateTime.now().toJson(),
).toJson(),
).also {
logger.info("Publiserte til kafka.")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -94,20 +94,21 @@ fun Route.lagreSelvbestemtImRoute(
private suspend fun PipelineContext<Unit, ApplicationCall>.lesRequestOrNull(): SkjemaInntektsmeldingSelvbestemt? =
call
.receiveText()
.parseJson()
.also { json ->
"Mottok selvbestemt inntektsmelding.".let {
logger.info(it)
sikkerLogger.info("$it:\n${json.toPretty()}")
}
}.runCatching {
fromJson(SkjemaInntektsmeldingSelvbestemt.serializer())
}.onFailure { e ->
"Kunne ikke parse json.".let {
.runCatching {
parseJson()
.also { json ->
"Mottok selvbestemt inntektsmelding.".let {
logger.info(it)
sikkerLogger.info("$it\n${json.toPretty()}")
}
}.fromJson(SkjemaInntektsmeldingSelvbestemt.serializer())
}.getOrElse { error ->
"Kunne ikke parse json for selvbestemt inntektsmeldingsskjema.".let {
logger.error(it)
sikkerLogger.error(it, e)
sikkerLogger.error(it, error)
}
}.getOrNull()
null
}

private suspend fun PipelineContext<Unit, ApplicationCall>.sendResponse(result: Result<ResultJson>) {
result
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import com.github.navikt.tbd_libs.rapids_and_rivers.test_support.TestRapid
import io.kotest.core.spec.style.FunSpec
import io.kotest.matchers.ints.shouldBeExactly
import io.kotest.matchers.maps.shouldContainExactly
import io.mockk.every
import no.nav.helsearbeidsgiver.domene.inntektsmelding.v1.skjema.SkjemaInntektsmelding
import no.nav.helsearbeidsgiver.felles.EventName
import no.nav.helsearbeidsgiver.felles.Key
Expand All @@ -13,8 +14,11 @@ import no.nav.helsearbeidsgiver.felles.test.mock.mockSkjemaInntektsmelding
import no.nav.helsearbeidsgiver.felles.test.rapidsrivers.firstMessage
import no.nav.helsearbeidsgiver.inntektsmelding.api.innsending.InnsendingProducer
import no.nav.helsearbeidsgiver.utils.json.toJson
import no.nav.helsearbeidsgiver.utils.test.date.oktober
import no.nav.helsearbeidsgiver.utils.test.mock.mockStatic
import no.nav.helsearbeidsgiver.utils.test.wrapper.genererGyldig
import no.nav.helsearbeidsgiver.utils.wrapper.Fnr
import java.time.LocalDateTime
import java.util.UUID

class InnsendingProducerTest :
Expand All @@ -26,8 +30,13 @@ class InnsendingProducerTest :
val transaksjonId = UUID.randomUUID()
val avsenderFnr = Fnr.genererGyldig()
val skjema = mockSkjemaInntektsmelding()
val mottatt = 12.oktober.atStartOfDay()

producer.publish(transaksjonId, skjema, avsenderFnr)
mockStatic(LocalDateTime::class) {
every { LocalDateTime.now() } returns mottatt

producer.publish(transaksjonId, skjema, avsenderFnr)
}

testRapid.inspektør.size shouldBeExactly 1
testRapid.firstMessage().toMap() shouldContainExactly
Expand All @@ -38,6 +47,7 @@ class InnsendingProducerTest :
mapOf(
Key.ARBEIDSGIVER_FNR to avsenderFnr.toJson(),
Key.SKJEMA_INNTEKTSMELDING to skjema.toJson(SkjemaInntektsmelding.serializer()),
Key.MOTTATT to mottatt.toJson(),
).toJson(),
)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import com.github.navikt.tbd_libs.rapids_and_rivers.test_support.TestRapid
import io.kotest.core.spec.style.FunSpec
import io.kotest.matchers.ints.shouldBeExactly
import io.kotest.matchers.maps.shouldContainExactly
import io.mockk.every
import no.nav.helsearbeidsgiver.domene.inntektsmelding.v1.skjema.SkjemaInntektsmeldingSelvbestemt
import no.nav.helsearbeidsgiver.felles.EventName
import no.nav.helsearbeidsgiver.felles.Key
Expand All @@ -12,8 +13,11 @@ import no.nav.helsearbeidsgiver.felles.json.toMap
import no.nav.helsearbeidsgiver.felles.test.mock.mockSkjemaInntektsmeldingSelvbestemt
import no.nav.helsearbeidsgiver.felles.test.rapidsrivers.firstMessage
import no.nav.helsearbeidsgiver.utils.json.toJson
import no.nav.helsearbeidsgiver.utils.test.date.oktober
import no.nav.helsearbeidsgiver.utils.test.mock.mockStatic
import no.nav.helsearbeidsgiver.utils.test.wrapper.genererGyldig
import no.nav.helsearbeidsgiver.utils.wrapper.Fnr
import java.time.LocalDateTime
import java.util.UUID

class LagreSelvbestemtImProducerTest :
Expand All @@ -26,8 +30,13 @@ class LagreSelvbestemtImProducerTest :
val transaksjonId = UUID.randomUUID()
val avsenderFnr = Fnr.genererGyldig()
val skjema = mockSkjemaInntektsmeldingSelvbestemt()
val mottatt = 14.oktober.atStartOfDay()

producer.publish(transaksjonId, skjema, avsenderFnr)
mockStatic(LocalDateTime::class) {
every { LocalDateTime.now() } returns mottatt

producer.publish(transaksjonId, skjema, avsenderFnr)
}

testRapid.inspektør.size shouldBeExactly 1
testRapid.firstMessage().toMap() shouldContainExactly
Expand All @@ -36,8 +45,9 @@ class LagreSelvbestemtImProducerTest :
Key.KONTEKST_ID to transaksjonId.toJson(),
Key.DATA to
mapOf(
Key.SKJEMA_INNTEKTSMELDING to skjema.toJson(SkjemaInntektsmeldingSelvbestemt.serializer()),
Key.ARBEIDSGIVER_FNR to avsenderFnr.toJson(),
Key.SKJEMA_INNTEKTSMELDING to skjema.toJson(SkjemaInntektsmeldingSelvbestemt.serializer()),
Key.MOTTATT to mottatt.toJson(),
).toJson(),
)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ import no.nav.helsearbeidsgiver.felles.Key
import no.nav.helsearbeidsgiver.felles.domene.Forespoersel
import no.nav.helsearbeidsgiver.felles.domene.Person
import no.nav.helsearbeidsgiver.felles.json.les
import no.nav.helsearbeidsgiver.felles.json.lesOrNull
import no.nav.helsearbeidsgiver.felles.json.orgMapSerializer
import no.nav.helsearbeidsgiver.felles.json.personMapSerializer
import no.nav.helsearbeidsgiver.felles.json.toJson
Expand All @@ -20,6 +21,7 @@ import no.nav.helsearbeidsgiver.felles.rapidsrivers.publish
import no.nav.helsearbeidsgiver.felles.rapidsrivers.service.ServiceMed4Steg
import no.nav.helsearbeidsgiver.felles.utils.Log
import no.nav.helsearbeidsgiver.utils.json.serializer.LocalDateSerializer
import no.nav.helsearbeidsgiver.utils.json.serializer.LocalDateTimeSerializer
import no.nav.helsearbeidsgiver.utils.json.serializer.UuidSerializer
import no.nav.helsearbeidsgiver.utils.json.toJson
import no.nav.helsearbeidsgiver.utils.json.toPretty
Expand All @@ -29,6 +31,7 @@ import no.nav.helsearbeidsgiver.utils.log.sikkerLogger
import no.nav.helsearbeidsgiver.utils.wrapper.Fnr
import no.nav.helsearbeidsgiver.utils.wrapper.Orgnr
import java.time.LocalDate
import java.time.LocalDateTime
import java.util.UUID

private const val UKJENT_NAVN = "Ukjent navn"
Expand All @@ -39,6 +42,7 @@ data class Steg0(
val avsenderFnr: Fnr,
val skjema: SkjemaInntektsmelding,
val innsendingId: Long,
val mottatt: LocalDateTime?,
)

data class Steg1(
Expand Down Expand Up @@ -73,6 +77,7 @@ class BerikInntektsmeldingService(
avsenderFnr = Key.ARBEIDSGIVER_FNR.les(Fnr.serializer(), melding),
skjema = Key.SKJEMA_INNTEKTSMELDING.les(SkjemaInntektsmelding.serializer(), melding),
innsendingId = Key.INNSENDING_ID.les(Long.serializer(), melding),
mottatt = Key.MOTTATT.lesOrNull(LocalDateTimeSerializer, melding),
)

override fun lesSteg1(melding: Map<Key, JsonElement>): Steg1 =
Expand Down Expand Up @@ -176,6 +181,7 @@ class BerikInntektsmeldingService(
virksomhetNavn = orgNavn,
sykmeldtNavn = sykmeldtNavn,
avsenderNavn = avsenderNavn,
mottatt = steg0.mottatt,
)

val bestemmendeFravaersdag = utledBestemmendeFravaersdag(steg1.forespoersel, inntektsmelding)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,9 @@ import no.nav.helsearbeidsgiver.domene.inntektsmelding.v1.Sykmeldt
import no.nav.helsearbeidsgiver.domene.inntektsmelding.v1.skjema.SkjemaInntektsmelding
import no.nav.helsearbeidsgiver.felles.domene.Forespoersel
import no.nav.helsearbeidsgiver.felles.domene.ForslagInntekt
import no.nav.helsearbeidsgiver.felles.utils.zoneIdOslo
import no.nav.helsearbeidsgiver.utils.pipe.orDefault
import java.time.LocalDateTime
import java.time.ZonedDateTime
import java.util.UUID

Expand All @@ -18,6 +21,7 @@ fun mapInntektsmelding(
virksomhetNavn: String,
sykmeldtNavn: String,
avsenderNavn: String,
mottatt: LocalDateTime?,
): Inntektsmelding {
val agp =
if (forespoersel.forespurtData.arbeidsgiverperiode.paakrevd) {
Expand Down Expand Up @@ -74,7 +78,7 @@ fun mapInntektsmelding(
inntekt = inntekt,
refusjon = refusjon,
aarsakInnsending = aarsakInnsending,
mottatt = ZonedDateTime.now().toOffsetDateTime(),
mottatt = mottatt?.atZone(zoneIdOslo).orDefault(ZonedDateTime.now()).toOffsetDateTime(),
vedtaksperiodeId = forespoersel.vedtaksperiodeId,
)
}
Loading

0 comments on commit 4d107e6

Please sign in to comment.