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

Opprett oppgave inntektsendringer #457

Merged
merged 6 commits into from
Nov 8, 2023
Merged
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 @@ -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
Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ville normalt skrevet inntektskontroll som del av tekststreng, men i preprod er mappenavnet skrevet feil og man får dermed ikke treff. Derfor benyttes kun nummeret som søkestreng.

}

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
}
}