Skip to content

Commit

Permalink
Opprett oppgave inntektsendringer (#457)
Browse files Browse the repository at this point in the history
  • Loading branch information
olekvernberg authored Nov 8, 2023
1 parent 4516baf commit 6e50104
Show file tree
Hide file tree
Showing 5 changed files with 85 additions and 39 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -51,12 +51,12 @@ class OppgaveClient(
return response.getDataOrThrow()
}

fun leggOppgaveIMappe(oppgaveId: Long) {
fun leggOppgaveIMappe(oppgaveId: Long, mappenavnInneholder: String = "Hendelser") {
val oppgave = finnOppgaveMedId(oppgaveId)
if (oppgave.tildeltEnhetsnr == EF_ENHETNUMMER) { // Skjermede personer skal ikke puttes i mappe
val mapperResponse = finnMapper(oppgave.tildeltEnhetsnr!!)
try {
oppdaterOppgaveMedMappe(mapperResponse, oppgave)
oppdaterOppgaveMedMappe(mapperResponse, oppgave, mappenavnInneholder)
} catch (e: Exception) {
log.error("Feil under knytning av mappe til oppgave - se securelogs for stacktrace")
secureLogger.error("Feil under knytning av mappe til oppgave", e)
Expand All @@ -67,12 +67,12 @@ class OppgaveClient(
private fun oppdaterOppgaveMedMappe(
mapperResponse: FinnMappeResponseDto,
oppgave: Oppgave,
mappenavnInneholder: String = "Hendelser",
) {
val mappe = mapperResponse.mapper.find {
it.navn.contains("62") &&
it.navn.contains("Hendelser") &&
it.navn.contains(mappenavnInneholder, true) &&
!it.navn.contains("EF Sak", true)
} ?: error("Fant ikke mappe 62 Hendelser for uplassert oppgave")
} ?: error("Fant ikke mappe som inneholder mappenavn $mappenavnInneholder for uplassert oppgave")
oppdaterOppgave(oppgave.copy(mappeId = mappe.id.toLong()))
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import no.nav.familie.ef.personhendelse.client.OppgaveClient
import no.nav.familie.ef.personhendelse.client.SakClient
import no.nav.familie.ef.personhendelse.client.fristFerdigstillelse
import no.nav.familie.ef.personhendelse.inntekt.vedtak.EfVedtakRepository
import no.nav.familie.ef.personhendelse.inntekt.vedtak.InntektOgVedtakEndring
import no.nav.familie.kontrakter.felles.Behandlingstema
import no.nav.familie.kontrakter.felles.Tema
import no.nav.familie.kontrakter.felles.ef.StønadType
Expand All @@ -19,6 +20,7 @@ import org.springframework.scheduling.annotation.Async
import org.springframework.stereotype.Service
import java.time.Month
import java.time.YearMonth
import java.time.format.DateTimeFormatter

@Service
class VedtakendringerService(
Expand Down Expand Up @@ -76,10 +78,10 @@ class VedtakendringerService(
}

fun opprettOppgaverForInntektsendringer(skalOppretteOppgave: Boolean): Int {
val inntektsendringer = efVedtakRepository.hentInntektOgVedtakEndring()
val inntektsendringer = efVedtakRepository.hentInntektsendringerSomSkalHaOppgave()
if (skalOppretteOppgave) {
inntektsendringer.forEach {
opprettOppgave(it.harNyeVedtak, it.inntektsendringToMånederTilbake.prosent, it.inntektsendringForrigeMåned.prosent, it.personIdent)
opprettOppgaveForInntektsendring(it)
}
} else {
logger.info("Ville opprettet inntektsendring-oppgave for ${inntektsendringer.size} personer")
Expand Down Expand Up @@ -133,38 +135,48 @@ class VedtakendringerService(
return null
}

private fun opprettOppgave(
harNyeVedtak: Boolean,
inntektsendringToMånederInntekt: Int,
inntektsendringForrigeMåned: Int,
personident: String,
stønadType: StønadType = StønadType.OVERGANGSSTØNAD,
private fun opprettOppgaveForInntektsendring(
inntektOgVedtakEndring: InntektOgVedtakEndring,
) {
val oppgavetekst = lagOppgavetekst(harNyeVedtak, inntektsendringToMånederInntekt >= 10 && inntektsendringForrigeMåned >= 10)
secureLogger.info("$personident - $oppgavetekst")
val enhetsnummer =
arbeidsfordelingClient.hentArbeidsfordelingEnhetId(personident)
// val oppgavetekst = lagOppgavetekst(harNyeVedtak, inntektsendringToMånederInntekt >= 10 && inntektsendringForrigeMåned >= 10)
val oppgaveId = oppgaveClient.opprettOppgave(
OpprettOppgaveRequest(
ident = OppgaveIdentV2(
ident = personident,
ident = inntektOgVedtakEndring.personIdent,
gruppe = IdentGruppe.FOLKEREGISTERIDENT,
),
saksId = null,
tema = Tema.ENF,
oppgavetype = Oppgavetype.VurderKonsekvensForYtelse,
fristFerdigstillelse = fristFerdigstillelse(),
beskrivelse = oppgavetekst,
enhetsnummer = enhetsnummer,
behandlingstema = stønadType.tilBehandlingstemaValue(),
beskrivelse = lagOppgavetekstForInntektsendring(inntektOgVedtakEndring),
enhetsnummer = arbeidsfordelingClient.hentArbeidsfordelingEnhetId(inntektOgVedtakEndring.personIdent),
behandlingstema = null, // Gjelder-feltet i Gosys
tilordnetRessurs = null,
behandlesAvApplikasjon = null,
),
)
secureLogger.info("Opprettet oppgave for person $personident med id: $oppgaveId")
oppgaveClient.leggOppgaveIMappe(oppgaveId)
secureLogger.info("Opprettet oppgave for person ${inntektOgVedtakEndring.personIdent} med id: $oppgaveId")
oppgaveClient.leggOppgaveIMappe(oppgaveId, "63") // Inntektskontroll
}

fun lagOppgavetekstForInntektsendring(inntektOgVedtakEndring: InntektOgVedtakEndring): String {
val totalFeilutbetaling = inntektOgVedtakEndring.inntektsendringFireMånederTilbake.feilutbetaling +
inntektOgVedtakEndring.inntektsendringTreMånederTilbake.feilutbetaling +
inntektOgVedtakEndring.inntektsendringToMånederTilbake.feilutbetaling +
inntektOgVedtakEndring.inntektsendringForrigeMåned.feilutbetaling

val årMånedProsessert = YearMonth.from(inntektOgVedtakEndring.prosessertTid)

val periodeTekst =
"FOM ${årMånedProsessert.minusMonths(4).norskFormat()} - TOM ${årMånedProsessert.minusMonths(1).norskFormat()}"
val oppgavetekst = "Uttrekksperiode: $periodeTekst \n" +
"Beregnet feilutbetaling i uttrekksperioden: ${totalFeilutbetaling.tusenskille()} kroner "
return oppgavetekst
}

private fun YearMonth.norskFormat() = this.format(DateTimeFormatter.ofPattern("MM.yyyy"))
private fun Int.tusenskille() = String.format("%,d", this).replace(",", " ")
private fun lagOppgavetekst(harNyeVedtak: Boolean, harEndretInntekt: Boolean): String {
val forrigeMåned = YearMonth.now().minusMonths(1).month.tilNorsk()
val toMånederTilbake = YearMonth.now().minusMonths(2).month.tilNorsk()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -107,12 +107,13 @@ class EfVedtakRepository(val namedParameterJdbcTemplate: NamedParameterJdbcTempl
namedParameterJdbcTemplate.update(sql, params)
}

fun hentInntektOgVedtakEndring(): List<InntektOgVedtakEndring> {
val sql = "SELECT * FROM inntektsendringer WHERE harNyttVedtak = true OR " +
fun hentInntektsendringerSomSkalHaOppgave(): List<InntektOgVedtakEndring> {
val sql = "SELECT * FROM inntektsendringer WHERE " +
"(inntekt_endret_fire_maaneder_tilbake >= 10 AND " +
"inntekt_endret_tre_maaneder_tilbake >= 10 AND " +
"inntekt_endret_to_maaneder_tilbake >= 10 AND " +
"inntekt_endret_forrige_maaned >= 10)"
"inntekt_endret_forrige_maaned >= 10) AND " +
"(feilutbetaling_fire_maaneder_tilbake + feilutbetaling_tre_maaneder_tilbake + feilutbetaling_to_maaneder_tilbake + feilutbetaling_forrige_maaned) > 20000"
return namedParameterJdbcTemplate.query(sql, inntektsendringerMapper)
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,12 +6,14 @@ import no.nav.familie.ef.personhendelse.client.ArbeidsfordelingClient
import no.nav.familie.ef.personhendelse.client.OppgaveClient
import no.nav.familie.ef.personhendelse.client.SakClient
import no.nav.familie.ef.personhendelse.inntekt.vedtak.EfVedtakRepository
import no.nav.familie.ef.personhendelse.inntekt.vedtak.InntektOgVedtakEndring
import no.nav.familie.kontrakter.felles.Behandlingstema
import no.nav.familie.kontrakter.felles.ef.StønadType
import no.nav.familie.kontrakter.felles.objectMapper
import org.assertj.core.api.Assertions
import org.junit.jupiter.api.Test
import java.nio.charset.StandardCharsets
import java.time.LocalDateTime
import java.time.YearMonth

class VedtakendringerServiceTest {
Expand Down Expand Up @@ -152,6 +154,25 @@ class VedtakendringerServiceTest {
Assertions.assertThat(StønadType.OVERGANGSSTØNAD.tilBehandlingstemaValue()).isEqualTo(Behandlingstema.Overgangsstønad.value)
}

@Test
fun `lagOppgavetekstForInntektsendring - sjekk tusenskille på feiltubetalingsbeløp og norsk format på år-måned`() {
val oppgavetekst = vedtakendringer.lagOppgavetekstForInntektsendring(
InntektOgVedtakEndring(
"1",
false,
LocalDateTime.of(2023, 11, 8, 5, 0),
BeregningResultat(1, 1, 1),
BeregningResultat(2, 2, 2),
BeregningResultat(3, 3, 3),
BeregningResultat(4, 4, 40000),
null,
),
)

Assertions.assertThat(oppgavetekst.contains("Beregnet feilutbetaling i uttrekksperioden: 40 006 kroner "))
Assertions.assertThat(oppgavetekst.contains("FOM 06.2023 - TOM 10.2023"))
}

fun oppdatertInntektshistorikkResponseTilNyereDato(inntektshistorikkResponse: InntektshistorikkResponse): InntektshistorikkResponse {
val keys = inntektshistorikkResponse.aarMaanedHistorikk.keys.sortedBy { it }
return InntektshistorikkResponse(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -67,19 +67,31 @@ class EfVedtakRepositoryTest : IntegrasjonSpringRunnerTest() {
}

@Test
fun `lagre inntektsendringer`() {
fun `lagre inntektsendringer og hent ut de som skal ha oppgave`() {
efVedtakRepository.lagreVedtakOgInntektsendringForPersonIdent(
"1",
true,
"SYKEPENGER, UFØRETRYGD",
Inntektsendring(
BeregningResultat(150, 15, 100),
BeregningResultat(250, 10, 50),
BeregningResultat(350, 5, 25),
BeregningResultat(500, 1, 12),
BeregningResultat(150, 15, 10000),
BeregningResultat(250, 10, 5000),
BeregningResultat(350, 25, 2500),
BeregningResultat(500, 35, 12000),
),
)
var hentInntektsendringer = efVedtakRepository.hentInntektOgVedtakEndring()

efVedtakRepository.lagreVedtakOgInntektsendringForPersonIdent(
"2",
false,
null,
Inntektsendring(
BeregningResultat(1500, 15, 100),
BeregningResultat(2500, 5, 50),
BeregningResultat(3500, 25, 25),
BeregningResultat(15000, 35, 12),
),
)
var hentInntektsendringer = efVedtakRepository.hentInntektsendringerSomSkalHaOppgave()
Assertions.assertThat(hentInntektsendringer.size).isEqualTo(1)

val inntektsendring = hentInntektsendringer.first()
Expand All @@ -92,15 +104,15 @@ class EfVedtakRepositoryTest : IntegrasjonSpringRunnerTest() {
Assertions.assertThat(inntektsendring.inntektsendringForrigeMåned.beløp).isEqualTo(500)
Assertions.assertThat(inntektsendring.inntektsendringFireMånederTilbake.prosent).isEqualTo(15)
Assertions.assertThat(inntektsendring.inntektsendringTreMånederTilbake.prosent).isEqualTo(10)
Assertions.assertThat(inntektsendring.inntektsendringToMånederTilbake.prosent).isEqualTo(5)
Assertions.assertThat(inntektsendring.inntektsendringForrigeMåned.prosent).isEqualTo(1)
Assertions.assertThat(inntektsendring.inntektsendringFireMånederTilbake.feilutbetaling).isEqualTo(100)
Assertions.assertThat(inntektsendring.inntektsendringTreMånederTilbake.feilutbetaling).isEqualTo(50)
Assertions.assertThat(inntektsendring.inntektsendringToMånederTilbake.feilutbetaling).isEqualTo(25)
Assertions.assertThat(inntektsendring.inntektsendringForrigeMåned.feilutbetaling).isEqualTo(12)
Assertions.assertThat(inntektsendring.inntektsendringToMånederTilbake.prosent).isEqualTo(25)
Assertions.assertThat(inntektsendring.inntektsendringForrigeMåned.prosent).isEqualTo(35)
Assertions.assertThat(inntektsendring.inntektsendringFireMånederTilbake.feilutbetaling).isEqualTo(10000)
Assertions.assertThat(inntektsendring.inntektsendringTreMånederTilbake.feilutbetaling).isEqualTo(5000)
Assertions.assertThat(inntektsendring.inntektsendringToMånederTilbake.feilutbetaling).isEqualTo(2500)
Assertions.assertThat(inntektsendring.inntektsendringForrigeMåned.feilutbetaling).isEqualTo(12000)

efVedtakRepository.clearInntektsendringer()
hentInntektsendringer = efVedtakRepository.hentInntektOgVedtakEndring()
hentInntektsendringer = efVedtakRepository.hentInntektsendringerSomSkalHaOppgave()
Assertions.assertThat(hentInntektsendringer.isEmpty()).isTrue
}
}

0 comments on commit 6e50104

Please sign in to comment.