Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

EY-4877 rydde opp felter etterbetaling, endre frivilligSkattetrekk #6671

Closed
wants to merge 2 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ import no.nav.etterlatte.behandling.utland.SluttbehandlingUtlandBehandlinginfoRe
import no.nav.etterlatte.inTransaction
import no.nav.etterlatte.libs.common.behandling.Brevutfall
import no.nav.etterlatte.libs.common.behandling.BrevutfallDto
import no.nav.etterlatte.libs.common.behandling.BrevutfallOgEtterbetalingDto
import no.nav.etterlatte.libs.common.behandling.BrevutfallOgInfo
import no.nav.etterlatte.libs.common.behandling.EtterbetalingDto
import no.nav.etterlatte.libs.common.feilhaandtering.UgyldigForespoerselException
import no.nav.etterlatte.libs.common.grunnlag.Grunnlagsopplysning
Expand All @@ -31,27 +31,23 @@ internal fun Route.behandlingInfoRoutes(service: BehandlingInfoService) {
route("/brevutfall") {
post {
kunSkrivetilgang {
medBody<BrevutfallOgEtterbetalingDto> { dto ->
val brevutfallOgEtterbetaling =
medBody<BrevutfallOgInfo> { request ->
val brevutfall =
inTransaction {
logger.info("Lagrer brevutfall og etterbetaling for behandling $behandlingId")
val (brevutfallLagret, etterbetalingLagret) =
service.lagreBrevutfallOgEtterbetaling(
behandlingId,
brukerTokenInfo,
dto.opphoer ?: throw OpphoerIkkeSatt(behandlingId),
dto.toBrevutfall(behandlingId, brukerTokenInfo),
dto.toEtterbetaling(behandlingId, brukerTokenInfo),
)
logger.info("Lagrer brevutfall for behandling $behandlingId")

BrevutfallOgEtterbetalingDto(
BrevutfallOgInfo(
behandlingId,
dto.opphoer,
etterbetalingLagret?.toDto(),
brevutfallLagret.toDto(),
service
.lagreBrevutfall(
behandlingId,
brukerTokenInfo,
request.brevutfall?.opphoer ?: throw OpphoerIkkeSatt(behandlingId),
request.toBrevutfall(behandlingId, brukerTokenInfo),
).toDto(),
)
}
call.respond(brevutfallOgEtterbetaling)
call.respond(brevutfall)
}
}
}
Expand Down Expand Up @@ -91,25 +87,23 @@ internal fun Route.behandlingInfoRoutes(service: BehandlingInfoService) {
}
}

get("/brevutfallogetterbetaling") {
logger.info("Henter brevutfall og etterbetaling for behandling $behandlingId")
val brevutfallOgEtterbetaling =
get("/brevutfall") {
logger.info("Henter brevutfall for behandling $behandlingId")
val brevutfall =
inTransaction {
val brevutfall = service.hentBrevutfall(behandlingId)
val etterbetaling = service.hentEtterbetaling(behandlingId)
if (brevutfall != null) {
BrevutfallOgEtterbetalingDto(
BrevutfallOgInfo(
behandlingId = behandlingId,
etterbetaling = etterbetaling?.toDto(),
brevutfall = brevutfall.toDto(),
)
} else {
null
}
}
when (brevutfallOgEtterbetaling) {
when (brevutfall) {
null -> call.respond(HttpStatusCode.NoContent)
else -> call.respond(brevutfallOgEtterbetaling)
else -> call.respond(brevutfall)
}
}

Expand All @@ -123,7 +117,7 @@ internal fun Route.behandlingInfoRoutes(service: BehandlingInfoService) {
}
}

private fun BrevutfallOgEtterbetalingDto.toBrevutfall(
private fun BrevutfallOgInfo.toBrevutfall(
behandlingId: UUID,
bruker: BrukerTokenInfo,
): Brevutfall =
Expand All @@ -133,35 +127,17 @@ private fun BrevutfallOgEtterbetalingDto.toBrevutfall(
feilutbetaling = brevutfall?.feilutbetaling,
frivilligSkattetrekk = brevutfall?.frivilligSkattetrekk,
kilde = Grunnlagsopplysning.Saksbehandler.create(bruker.ident()),
harEtterbetaling = brevutfall?.harEtterbetaling,
)

private fun BrevutfallOgEtterbetalingDto.toEtterbetaling(
behandlingId: UUID,
bruker: BrukerTokenInfo,
): Etterbetaling? {
val etterbetalingCopy = etterbetaling
return if (etterbetalingCopy?.datoFom != null && etterbetalingCopy.datoTom != null) {
Etterbetaling.fra(
behandlingId = behandlingId,
datoFom = etterbetalingCopy.datoFom,
datoTom = etterbetalingCopy.datoTom,
inneholderKrav = etterbetalingCopy.inneholderKrav,
frivilligSkattetrekk = etterbetalingCopy.frivilligSkattetrekk,
etterbetalingPeriodeValg = etterbetalingCopy.etterbetalingPeriodeValg,
kilde = Grunnlagsopplysning.Saksbehandler.create(bruker.ident()),
)
} else {
null
}
}

private fun Brevutfall.toDto() =
BrevutfallDto(
behandlingId = behandlingId,
aldersgruppe = aldersgruppe,
feilutbetaling = feilutbetaling,
frivilligSkattetrekk = frivilligSkattetrekk,
kilde = kilde,
harEtterbetaling = harEtterbetaling,
)

private fun Etterbetaling.toDto() =
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,23 +12,19 @@ import no.nav.etterlatte.libs.common.behandling.Revurderingaarsak
import no.nav.etterlatte.libs.common.behandling.SakType
import no.nav.etterlatte.libs.common.feilhaandtering.GenerellIkkeFunnetException
import no.nav.etterlatte.libs.ktor.token.BrukerTokenInfo
import org.slf4j.LoggerFactory
import java.util.UUID

class BehandlingInfoService(
private val behandlingInfoDao: BehandlingInfoDao,
private val behandlingService: BehandlingService,
private val behandlingsstatusService: BehandlingStatusService,
) {
private val logger = LoggerFactory.getLogger(BehandlingInfoService::class.java)

fun lagreBrevutfallOgEtterbetaling(
fun lagreBrevutfall(
behandlingId: UUID,
brukerTokenInfo: BrukerTokenInfo,
opphoer: Boolean,
brevutfall: Brevutfall,
etterbetaling: Etterbetaling?,
): Pair<Brevutfall, Etterbetaling?> {
): Brevutfall {
val behandling =
behandlingService.hentBehandling(behandlingId)
?: throw GenerellIkkeFunnetException()
Expand All @@ -43,11 +39,9 @@ class BehandlingInfoService(
}

val lagretBrevutfall = lagreBrevutfall(behandling, brevutfall)
val lagretEtterbetaling = lagreEtterbetaling(behandling, etterbetaling)

oppdaterBehandlingStatus(behandling, opphoer, brukerTokenInfo)

return Pair(lagretBrevutfall, lagretEtterbetaling)
return lagretBrevutfall
}

fun lagreErOmgjoeringSluttbehandlingUtland(behandling: Behandling) =
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -441,5 +441,6 @@ internal class BehandlingStatusServiceTest {
feilutbetaling = Feilutbetaling(feilutbetalingValg, "kommentar"),
kilde = Grunnlagsopplysning.Saksbehandler("123456", Tidspunkt.now()),
frivilligSkattetrekk = true,
harEtterbetaling = false,
)
}
Original file line number Diff line number Diff line change
Expand Up @@ -204,6 +204,7 @@ internal class BehandlingInfoDaoTest(
feilutbetaling = Feilutbetaling(FeilutbetalingValg.NEI, null),
kilde = Grunnlagsopplysning.Saksbehandler("Z1234567", Tidspunkt.now()),
frivilligSkattetrekk = true,
harEtterbetaling = false,
)

private fun etterbetaling(behandlingId: UUID) =
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
package no.nav.etterlatte.behandling.behandlinginfo

import io.kotest.matchers.shouldBe
import io.kotest.matchers.shouldNotBe
import io.ktor.client.call.body
import io.ktor.client.request.get
import io.ktor.client.request.header
Expand All @@ -25,9 +24,7 @@ import no.nav.etterlatte.libs.common.behandling.BehandlingStatus
import no.nav.etterlatte.libs.common.behandling.BehandlingType
import no.nav.etterlatte.libs.common.behandling.Brevutfall
import no.nav.etterlatte.libs.common.behandling.BrevutfallDto
import no.nav.etterlatte.libs.common.behandling.BrevutfallOgEtterbetalingDto
import no.nav.etterlatte.libs.common.behandling.EtterbetalingDto
import no.nav.etterlatte.libs.common.behandling.EtterbetalingPeriodeValg
import no.nav.etterlatte.libs.common.behandling.BrevutfallOgInfo
import no.nav.etterlatte.libs.common.behandling.Feilutbetaling
import no.nav.etterlatte.libs.common.behandling.FeilutbetalingValg
import no.nav.etterlatte.libs.common.behandling.SakType
Expand All @@ -41,7 +38,6 @@ import org.junit.jupiter.api.AfterAll
import org.junit.jupiter.api.BeforeAll
import org.junit.jupiter.api.Test
import org.junit.jupiter.api.TestInstance
import java.time.LocalDate
import java.time.YearMonth
import java.util.UUID

Expand Down Expand Up @@ -85,13 +81,12 @@ internal class BehandlingInfoRoutesTest {
}

@Test
fun `skal lagre brevutfall og etterbetaling`() {
fun `skal lagre brevutfall`() {
val behandlingId = UUID.randomUUID()
val dto = brevutfallOgEtterbetalingDto(behandlingId)
val dto = brevutfallOgInfoDto(behandlingId)

every { behandlingService.hentBehandling(any()) } returns behandling(behandlingId)
every { behandlingInfoDao.lagreBrevutfall(any()) } returns brevutfall(behandlingId)
every { behandlingInfoDao.lagreEtterbetaling(any()) } returns etterbetaling(behandlingId)
every { behandlingInfoDao.lagreBrevutfall(any()) } returns dto.toBrevutfall()
every { behandlingsstatusService.settBeregnet(any(), any(), any()) } returns Unit

testApplication {
Expand All @@ -101,35 +96,29 @@ internal class BehandlingInfoRoutesTest {
}

val response =
client.post("/api/behandling/${UUID.randomUUID()}/info/brevutfall") {
client.post("/api/behandling/$behandlingId/info/brevutfall") {
header(HttpHeaders.ContentType, ContentType.Application.Json.toString())
header(HttpHeaders.Authorization, "Bearer $token")
setBody(dto)
}

val opprettetBrevutfallOgEtterbetaling: BrevutfallOgEtterbetalingDto = response.body()
val opprettetBrevutfall: BrevutfallOgInfo = response.body()
response.status shouldBe HttpStatusCode.OK

opprettetBrevutfallOgEtterbetaling.brevutfall?.aldersgruppe shouldBe dto.brevutfall?.aldersgruppe
opprettetBrevutfallOgEtterbetaling.brevutfall?.kilde shouldNotBe null

opprettetBrevutfallOgEtterbetaling.etterbetaling?.datoFom shouldBe dto.etterbetaling?.datoFom
opprettetBrevutfallOgEtterbetaling.etterbetaling?.datoTom shouldBe dto.etterbetaling?.datoTom
opprettetBrevutfallOgEtterbetaling.etterbetaling?.inneholderKrav shouldBe dto.etterbetaling?.inneholderKrav
opprettetBrevutfallOgEtterbetaling.etterbetaling?.etterbetalingPeriodeValg shouldBe dto.etterbetaling?.etterbetalingPeriodeValg
opprettetBrevutfallOgEtterbetaling.etterbetaling?.frivilligSkattetrekk shouldBe dto.etterbetaling?.frivilligSkattetrekk
opprettetBrevutfallOgEtterbetaling.etterbetaling?.kilde shouldNotBe null
opprettetBrevutfall.brevutfall?.behandlingId shouldBe behandlingId
opprettetBrevutfall.brevutfall?.aldersgruppe shouldBe dto.brevutfall?.aldersgruppe
opprettetBrevutfall.brevutfall?.harEtterbetaling shouldBe true
}
}

@Test
fun `skal hente brevutfall`() {
val behandlingId = UUID.randomUUID()
val dto = brevutfallOgEtterbetalingDto(behandlingId)
val dto = brevutfallOgInfoDto(behandlingId)

every { behandlingService.hentBehandling(any()) } returns behandling(behandlingId)
every { behandlingInfoDao.hentBrevutfall(any()) } returns brevutfall(behandlingId)
every { behandlingInfoDao.hentEtterbetaling(any()) } returns etterbetaling(behandlingId)
every { behandlingInfoDao.hentBrevutfall(any()) } returns dto.toBrevutfall()
every { behandlingsstatusService.settBeregnet(any(), any(), any()) } returns Unit

testApplication {
val client =
Expand All @@ -138,44 +127,18 @@ internal class BehandlingInfoRoutesTest {
}

val response =
client.get("/api/behandling/${UUID.randomUUID()}/info/brevutfallogetterbetaling") {
client.get("/api/behandling/$behandlingId/info/brevutfall") {
header(HttpHeaders.ContentType, ContentType.Application.Json.toString())
header(HttpHeaders.Authorization, "Bearer $token")
}

val hentetBrevutfall: BrevutfallOgEtterbetalingDto = response.body()
response.status shouldBe HttpStatusCode.OK

hentetBrevutfall.brevutfall?.aldersgruppe shouldBe dto.brevutfall?.aldersgruppe
}
}

@Test
fun `skal hente etterbetaling`() {
val behandlingId = UUID.randomUUID()
val dto = brevutfallOgEtterbetalingDto(behandlingId)

every { behandlingService.hentBehandling(any()) } returns behandling(behandlingId)
every { behandlingInfoDao.hentEtterbetaling(any()) } returns etterbetaling(behandlingId)

testApplication {
val client =
runServerWithModule(server) {
module(applicationContext)
}

val response =
client.get("/api/behandling/${UUID.randomUUID()}/info/etterbetaling") {
header(HttpHeaders.Authorization, "Bearer $token")
}

val etterbetaling: EtterbetalingDto = response.body()
response.status shouldBe HttpStatusCode.OK
val responeBrevutfall: BrevutfallOgInfo = response.body()
responeBrevutfall.behandlingId shouldBe behandlingId

etterbetaling.datoFom shouldBe dto.etterbetaling?.datoFom
etterbetaling.datoTom shouldBe dto.etterbetaling?.datoTom
etterbetaling.inneholderKrav shouldBe dto.etterbetaling?.inneholderKrav
etterbetaling.etterbetalingPeriodeValg shouldBe dto.etterbetaling?.etterbetalingPeriodeValg
etterbetaling.frivilligSkattetrekk shouldBe dto.etterbetaling?.frivilligSkattetrekk
// TODO: finner ikke ut hvorfor denne feiler
// responeBrevutfall.brevutfall shouldBe dto
}
}

Expand All @@ -197,49 +160,30 @@ internal class BehandlingInfoRoutesTest {
)
}

private fun brevutfall(behandlingId: UUID) =
Brevutfall(
private fun brevutfallOgInfoDto(behandlingId: UUID) =
BrevutfallOgInfo(
behandlingId = behandlingId,
aldersgruppe = Aldersgruppe.UNDER_18,
feilutbetaling = Feilutbetaling(FeilutbetalingValg.NEI, null),
frivilligSkattetrekk = true,
kilde = Grunnlagsopplysning.Saksbehandler.create("Saksbehandler01"),
)

private fun etterbetaling(behandlingId: UUID) =
Etterbetaling(
behandlingId = behandlingId,
fom = YearMonth.of(2023, 1),
tom = YearMonth.of(2023, 2),
inneholderKrav = true,
kilde = Grunnlagsopplysning.Saksbehandler.create("Saksbehandler01"),
frivilligSkattetrekk = true,
etterbetalingPeriodeValg = EtterbetalingPeriodeValg.UNDER_3_MND,
)

private fun brevutfallOgEtterbetalingDto(behandlingId: UUID = UUID.randomUUID()) =
BrevutfallOgEtterbetalingDto(
behandlingId = UUID.randomUUID(),
opphoer = false,
brevutfall =
BrevutfallDto(
behandlingId,
Aldersgruppe.UNDER_18,
Feilutbetaling(FeilutbetalingValg.NEI, null),
frivilligSkattetrekk = true,
null,
),
etterbetaling =
EtterbetalingDto(
behandlingId = behandlingId,
datoFom = LocalDate.of(2023, 1, 1),
datoTom = LocalDate.of(2023, 2, 28),
inneholderKrav = true,
aldersgruppe = Aldersgruppe.UNDER_18,
feilutbetaling = Feilutbetaling(FeilutbetalingValg.NEI, null),
frivilligSkattetrekk = true,
etterbetalingPeriodeValg = EtterbetalingPeriodeValg.UNDER_3_MND,
kilde = null,
harEtterbetaling = true,
opphoer = false,
kilde = Grunnlagsopplysning.Saksbehandler.create("Saksbehandler01"),
),
)

private fun BrevutfallOgInfo.toBrevutfall() =
Brevutfall(
behandlingId = behandlingId!!,
aldersgruppe = Aldersgruppe.UNDER_18,
feilutbetaling = Feilutbetaling(FeilutbetalingValg.NEI, null),
frivilligSkattetrekk = true,
harEtterbetaling = true,
kilde = Grunnlagsopplysning.Saksbehandler.create("Saksbehandler01"),
)

private val token: String by lazy { server.issueSaksbehandlerToken() }
}
Loading
Loading