Skip to content

Commit

Permalink
EY-4773 la til sjekk på sanksjon for inntektsjusteringSelvbetjening
Browse files Browse the repository at this point in the history
  • Loading branch information
andreasbalevik committed Dec 2, 2024
1 parent f5d025a commit 35948ba
Show file tree
Hide file tree
Showing 13 changed files with 107 additions and 42 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,8 @@ import com.github.michaelbull.result.mapBoth
import com.github.michaelbull.result.mapError
import com.typesafe.config.Config
import io.ktor.client.HttpClient
import no.nav.etterlatte.libs.common.beregning.AarligInntektsjusteringAvkortingSjekkRequest
import no.nav.etterlatte.libs.common.beregning.AarligInntektsjusteringAvkortingSjekkResponse
import no.nav.etterlatte.libs.common.beregning.InntektsjusteringAvkortingInfoRequest
import no.nav.etterlatte.libs.common.beregning.InntektsjusteringAvkortingInfoResponse
import no.nav.etterlatte.libs.common.deserialize
import no.nav.etterlatte.libs.common.feilhaandtering.InternfeilException
import no.nav.etterlatte.libs.common.sak.SakId
Expand All @@ -27,12 +27,12 @@ interface BeregningKlient {
brukerTokenInfo: BrukerTokenInfo,
): Boolean

suspend fun aarligInntektsjusteringSjekk(
suspend fun inntektsjusteringAvkortingInfoSjekk(
sakId: SakId,
aar: Int,
sisteBehandling: UUID,
brukerTokenInfo: BrukerTokenInfo,
): AarligInntektsjusteringAvkortingSjekkResponse
): InntektsjusteringAvkortingInfoResponse
}

class BeregningKlientImpl(
Expand Down Expand Up @@ -75,12 +75,12 @@ class BeregningKlientImpl(
)
}

override suspend fun aarligInntektsjusteringSjekk(
override suspend fun inntektsjusteringAvkortingInfoSjekk(
sakId: SakId,
aar: Int,
sisteBehandling: UUID,
brukerTokenInfo: BrukerTokenInfo,
): AarligInntektsjusteringAvkortingSjekkResponse {
): InntektsjusteringAvkortingInfoResponse {
logger.info("Sjekker om sakId=$sakId har inntekt for aar=$aar")
val response =
downstreamResourceClient.post(
Expand All @@ -91,7 +91,7 @@ class BeregningKlientImpl(
),
brukerTokenInfo = brukerTokenInfo,
postBody =
AarligInntektsjusteringAvkortingSjekkRequest(
InntektsjusteringAvkortingInfoRequest(
sakId = sakId,
aar = aar,
sisteBehandling = sisteBehandling,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -480,6 +480,7 @@ internal class ApplicationContext(
vedtakKlient = vedtakKlient,
rapid = rapid,
featureToggleService = featureToggleService,
beregningKlient = beregningsKlient,
)

val aarligInntektsjusteringJobbService =
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ import no.nav.etterlatte.libs.common.behandling.Prosesstype
import no.nav.etterlatte.libs.common.behandling.Revurderingaarsak
import no.nav.etterlatte.libs.common.behandling.SakType
import no.nav.etterlatte.libs.common.behandling.tilVirkningstidspunkt
import no.nav.etterlatte.libs.common.beregning.AarligInntektsjusteringAvkortingSjekkResponse
import no.nav.etterlatte.libs.common.beregning.InntektsjusteringAvkortingInfoResponse
import no.nav.etterlatte.libs.common.feilhaandtering.InternfeilException
import no.nav.etterlatte.libs.common.feilhaandtering.UgyldigForespoerselException
import no.nav.etterlatte.libs.common.logging.getCorrelationId
Expand Down Expand Up @@ -127,8 +127,8 @@ class AarligInntektsjusteringJobbService(
}

val forrigeBehandling = hentForrigeBehandling(sakId)
val avkortingSjekk = hentAvkortingSjekk(sakId, loependeFom, forrigeBehandling.id)

val avkortingSjekk = hentAvkortingSjekk(sakId, loependeFom, forrigeBehandling.id)
if (avkortingSjekk.harInntektForAar) {
oppdaterKjoering(
kjoering,
Expand Down Expand Up @@ -161,7 +161,7 @@ class AarligInntektsjusteringJobbService(
sakId: SakId,
loependeFom: YearMonth,
vedtak: LoependeYtelseDTO,
avkortingSjekk: AarligInntektsjusteringAvkortingSjekkResponse,
avkortingSjekk: InntektsjusteringAvkortingInfoResponse,
forrigeBehandling: Behandling,
): Boolean {
val sak = sakService.finnSak(sakId) ?: throw InternfeilException("Fant ikke sak med id $sakId")
Expand Down Expand Up @@ -249,9 +249,9 @@ class AarligInntektsjusteringJobbService(
sakId: SakId,
loependeFom: YearMonth,
forrigeBehandlingId: UUID,
): AarligInntektsjusteringAvkortingSjekkResponse =
): InntektsjusteringAvkortingInfoResponse =
runBlocking {
beregningKlient.aarligInntektsjusteringSjekk(
beregningKlient.inntektsjusteringAvkortingInfoSjekk(
sakId,
loependeFom.year,
forrigeBehandlingId,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,13 +1,16 @@
package no.nav.etterlatte.inntektsjustering.selvbetjening

import kotlinx.coroutines.runBlocking
import no.nav.etterlatte.behandling.BehandlingService
import no.nav.etterlatte.behandling.klienter.BeregningKlient
import no.nav.etterlatte.behandling.klienter.VedtakKlient
import no.nav.etterlatte.funksjonsbrytere.FeatureToggle
import no.nav.etterlatte.funksjonsbrytere.FeatureToggleService
import no.nav.etterlatte.inTransaction
import no.nav.etterlatte.kafka.JsonMessage
import no.nav.etterlatte.kafka.KafkaProdusent
import no.nav.etterlatte.libs.common.behandling.Revurderingaarsak
import no.nav.etterlatte.libs.common.beregning.InntektsjusteringAvkortingInfoResponse
import no.nav.etterlatte.libs.common.logging.getCorrelationId
import no.nav.etterlatte.libs.common.oppgave.OppgaveKilde
import no.nav.etterlatte.libs.common.oppgave.OppgaveType
Expand All @@ -23,11 +26,13 @@ import no.nav.etterlatte.omregning.OmregningDataPacket
import no.nav.etterlatte.omregning.OmregningHendelseType
import no.nav.etterlatte.oppgave.OppgaveService
import org.slf4j.LoggerFactory
import java.time.YearMonth
import java.util.UUID

class InntektsjusteringSelvbetjeningService(
private val oppgaveService: OppgaveService,
private val behandlingService: BehandlingService,
private val beregningKlient: BeregningKlient,
private val vedtakKlient: VedtakKlient,
private val rapid: KafkaProdusent<String, String>,
private val featureToggleService: FeatureToggleService,
Expand Down Expand Up @@ -95,20 +100,24 @@ class InntektsjusteringSelvbetjeningService(
) {
return false
}
val loependeFom = MottattInntektsjustering.utledLoependeFom().atDay(1)

// har åpne behandlinger
val aapneBehandlinger = inTransaction { behandlingService.hentAapneBehandlingerForSak(sakId) }
if (aapneBehandlinger.isNotEmpty()) return false

// ikke loepende || er under samordning
val vedtak =
vedtakKlient.sakHarLopendeVedtakPaaDato(
sakId,
MottattInntektsjustering.utledLoependeFom().atDay(1),
loependeFom,
HardkodaSystembruker.omregning,
)

if (!vedtak.erLoepende || vedtak.underSamordning) return false

// TODO: flere sjekker?
// har sanksjon
val avkortingSjekk = hentAvkortingSjekk(sakId, YearMonth.of(loependeFom.year, loependeFom.month), vedtak.behandlingId!!)
if (avkortingSjekk.harSanksjon) return false

return true
}
Expand Down Expand Up @@ -148,4 +157,18 @@ class InntektsjusteringSelvbetjeningService(

override fun key() = key
}

private fun hentAvkortingSjekk(
sakId: SakId,
loependeFom: YearMonth,
forrigeBehandlingId: UUID,
): InntektsjusteringAvkortingInfoResponse =
runBlocking {
beregningKlient.inntektsjusteringAvkortingInfoSjekk(
sakId,
loependeFom.year,
forrigeBehandlingId,
HardkodaSystembruker.omregning,
)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ import no.nav.etterlatte.kafka.KafkaProdusent
import no.nav.etterlatte.libs.common.Enhetsnummer
import no.nav.etterlatte.libs.common.behandling.Persongalleri
import no.nav.etterlatte.libs.common.behandling.SakType
import no.nav.etterlatte.libs.common.beregning.AarligInntektsjusteringAvkortingSjekkResponse
import no.nav.etterlatte.libs.common.beregning.InntektsjusteringAvkortingInfoResponse
import no.nav.etterlatte.libs.common.feilhaandtering.UgyldigForespoerselException
import no.nav.etterlatte.libs.common.oppgave.OppgaveIntern
import no.nav.etterlatte.libs.common.pdl.OpplysningDTO
Expand Down Expand Up @@ -93,14 +93,14 @@ class AarligInntektsjusteringJobbServiceTest {

coEvery { vedtakKlient.sakHarLopendeVedtakPaaDato(any(), any(), any()) } returns loependeYtdelseDto()
coEvery {
beregningKlient.aarligInntektsjusteringSjekk(
beregningKlient.inntektsjusteringAvkortingInfoSjekk(
any(),
any(),
any(),
any(),
)
} returns
AarligInntektsjusteringAvkortingSjekkResponse(
InntektsjusteringAvkortingInfoResponse(
SakId(123L),
aar = 2025,
harInntektForAar = false,
Expand Down Expand Up @@ -304,14 +304,14 @@ class AarligInntektsjusteringJobbServiceTest {
)

coEvery {
beregningKlient.aarligInntektsjusteringSjekk(
beregningKlient.inntektsjusteringAvkortingInfoSjekk(
any(),
any(),
any(),
any(),
)
} returns
AarligInntektsjusteringAvkortingSjekkResponse(
InntektsjusteringAvkortingInfoResponse(
SakId(123L),
aar = 2025,
harInntektForAar = true,
Expand Down Expand Up @@ -419,14 +419,14 @@ class AarligInntektsjusteringJobbServiceTest {
)

coEvery {
beregningKlient.aarligInntektsjusteringSjekk(
beregningKlient.inntektsjusteringAvkortingInfoSjekk(
any(),
any(),
any(),
any(),
)
} returns
AarligInntektsjusteringAvkortingSjekkResponse(
InntektsjusteringAvkortingInfoResponse(
SakId(123L),
aar = 2025,
harInntektForAar = false,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,9 +9,11 @@ import io.mockk.mockk
import io.mockk.verify
import kotlinx.coroutines.runBlocking
import no.nav.etterlatte.behandling.BehandlingService
import no.nav.etterlatte.behandling.klienter.BeregningKlient
import no.nav.etterlatte.behandling.klienter.VedtakKlient
import no.nav.etterlatte.funksjonsbrytere.FeatureToggleService
import no.nav.etterlatte.kafka.KafkaProdusent
import no.nav.etterlatte.libs.common.beregning.InntektsjusteringAvkortingInfoResponse
import no.nav.etterlatte.libs.common.oppgave.OppgaveKilde
import no.nav.etterlatte.libs.common.oppgave.OppgaveType
import no.nav.etterlatte.libs.common.sak.BehandlingOgSak
Expand All @@ -33,12 +35,14 @@ class InntektsjusteringSelvbetjeningServiceTest {
private val rapid: KafkaProdusent<String, String> = mockk()
private val featureToggleService: FeatureToggleService = mockk()
private val behandlingService: BehandlingService = mockk()
private val beregningKlient: BeregningKlient = mockk()
private val vedtakKlient: VedtakKlient = mockk()

val service =
InntektsjusteringSelvbetjeningService(
oppgaveService,
behandlingService,
beregningKlient,
vedtakKlient,
rapid,
featureToggleService,
Expand Down Expand Up @@ -84,6 +88,40 @@ class InntektsjusteringSelvbetjeningServiceTest {

coVerify(exactly = 0) {
vedtakKlient.sakHarLopendeVedtakPaaDato(any(), any(), any())
beregningKlient.inntektsjusteringAvkortingInfoSjekk(any(), any(), any(), any())
}

verifyManuellBehandling()
}

@Test
fun `skal behandle inntektsjustering manuelt hvis sanksjon`() {
every { featureToggleService.isEnabled(any(), any()) } returns true
every { behandlingService.hentAapneBehandlingerForSak(any()) } returns emptyList()

val loependeYtelseMock = mockk<LoependeYtelseDTO>(relaxed = true)
coEvery { vedtakKlient.sakHarLopendeVedtakPaaDato(any(), any(), any()) } returns loependeYtelseMock
every { loependeYtelseMock.erLoepende } returns true
every { loependeYtelseMock.underSamordning } returns false

val inntektsjusteringAvkortingInfo = mockk<InntektsjusteringAvkortingInfoResponse>(relaxed = true)
coEvery { beregningKlient.inntektsjusteringAvkortingInfoSjekk(any(), any(), any(), any()) } returns inntektsjusteringAvkortingInfo
every { inntektsjusteringAvkortingInfo.harSanksjon } returns true

val mottattInntektsjustering =
MottattInntektsjustering(
SakId(123L),
UUID.randomUUID(),
"123",
2025,
100,
100,
100,
100,
YearMonth.of(2025, 1),
)
runBlocking {
service.behandleInntektsjustering(mottattInntektsjustering)
}

verifyManuellBehandling()
Expand Down Expand Up @@ -158,7 +196,7 @@ class InntektsjusteringSelvbetjeningServiceTest {
}

@Test
fun `skal behandle inntektsjustering automatisk hvis featureToggle = true, vedtak er loepende og ikke under samordning`() {
fun `skal behandle inntektsjustering automatisk hvis featureToggle = true`() {
every { featureToggleService.isEnabled(any(), any()) } returns true
every { behandlingService.hentAapneBehandlingerForSak(any()) } returns emptyList()

Expand All @@ -167,6 +205,10 @@ class InntektsjusteringSelvbetjeningServiceTest {
every { loependeYtelseMock.erLoepende } returns true
every { loependeYtelseMock.underSamordning } returns false

val inntektsjusteringAvkortingInfo = mockk<InntektsjusteringAvkortingInfoResponse>(relaxed = true)
coEvery { beregningKlient.inntektsjusteringAvkortingInfoSjekk(any(), any(), any(), any()) } returns inntektsjusteringAvkortingInfo
every { inntektsjusteringAvkortingInfo.harSanksjon } returns false

val mottattInntektsjustering =
MottattInntektsjustering(
SakId(123L),
Expand Down Expand Up @@ -241,6 +283,7 @@ class InntektsjusteringSelvbetjeningServiceTest {
)
behandlingService.hentAapneBehandlingerForSak(any())
vedtakKlient.sakHarLopendeVedtakPaaDato(any(), any(), any())
beregningKlient.inntektsjusteringAvkortingInfoSjekk(any(), any(), any(), any())
rapid.publiser("mottak-inntektsjustering-fullfoert-123", any())
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ import no.nav.etterlatte.libs.common.behandling.Persongalleri
import no.nav.etterlatte.libs.common.behandling.SakType
import no.nav.etterlatte.libs.common.behandling.SakidOgRolle
import no.nav.etterlatte.libs.common.behandling.Saksrolle
import no.nav.etterlatte.libs.common.beregning.AarligInntektsjusteringAvkortingSjekkResponse
import no.nav.etterlatte.libs.common.beregning.InntektsjusteringAvkortingInfoResponse
import no.nav.etterlatte.libs.common.brev.BestillingsIdDto
import no.nav.etterlatte.libs.common.brev.JournalpostIdDto
import no.nav.etterlatte.libs.common.grunnlag.Grunnlag
Expand Down Expand Up @@ -233,12 +233,12 @@ class BeregningKlientTest :
brukerTokenInfo: BrukerTokenInfo,
): Boolean = false

override suspend fun aarligInntektsjusteringSjekk(
override suspend fun inntektsjusteringAvkortingInfoSjekk(
sakId: SakId,
aar: Int,
sisteBehandling: UUID,
brukerTokenInfo: BrukerTokenInfo,
): AarligInntektsjusteringAvkortingSjekkResponse = mockk()
): InntektsjusteringAvkortingInfoResponse = mockk()

override suspend fun harTilgangTilSak(
sakId: SakId,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
package no.nav.etterlatte.avkorting

import no.nav.etterlatte.libs.common.beregning.AarligInntektsjusteringAvkortingSjekkRequest
import no.nav.etterlatte.libs.common.beregning.AarligInntektsjusteringAvkortingSjekkResponse
import no.nav.etterlatte.libs.common.beregning.AvkortingGrunnlagLagreDto
import no.nav.etterlatte.libs.common.beregning.InntektsjusteringAvkortingInfoRequest
import no.nav.etterlatte.libs.common.beregning.InntektsjusteringAvkortingInfoResponse
import no.nav.etterlatte.libs.common.feilhaandtering.InternfeilException
import no.nav.etterlatte.libs.ktor.token.BrukerTokenInfo
import no.nav.etterlatte.sanksjon.SanksjonService
Expand All @@ -17,11 +17,9 @@ class AarligInntektsjusteringService(
) {
private val logger = LoggerFactory.getLogger(this::class.java)

fun hentSjekkAarligInntektsjustering(
request: AarligInntektsjusteringAvkortingSjekkRequest,
): AarligInntektsjusteringAvkortingSjekkResponse {
fun hentSjekkAarligInntektsjustering(request: InntektsjusteringAvkortingInfoRequest): InntektsjusteringAvkortingInfoResponse {
val sanksjoner = sanksjonService.hentSanksjon(request.sisteBehandling)
return AarligInntektsjusteringAvkortingSjekkResponse(
return InntektsjusteringAvkortingInfoResponse(
sakId = request.sakId,
aar = request.aar,
harInntektForAar = avkortingRepository.harSakInntektForAar(request),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ import com.fasterxml.jackson.module.kotlin.readValue
import kotliquery.Row
import kotliquery.TransactionalSession
import kotliquery.queryOf
import no.nav.etterlatte.libs.common.beregning.AarligInntektsjusteringAvkortingSjekkRequest
import no.nav.etterlatte.libs.common.beregning.InntektsjusteringAvkortingInfoRequest
import no.nav.etterlatte.libs.common.beregning.SanksjonertYtelse
import no.nav.etterlatte.libs.common.objectMapper
import no.nav.etterlatte.libs.common.periode.Periode
Expand All @@ -20,7 +20,7 @@ import javax.sql.DataSource
class AvkortingRepository(
private val dataSource: DataSource,
) {
fun harSakInntektForAar(harInntektForAarDto: AarligInntektsjusteringAvkortingSjekkRequest): Boolean =
fun harSakInntektForAar(harInntektForAarDto: InntektsjusteringAvkortingInfoRequest): Boolean =
dataSource.transaction { tx ->
val alleAarsoppgjoer =
queryOf(
Expand Down
Loading

0 comments on commit 35948ba

Please sign in to comment.