Skip to content

Commit

Permalink
Fødsel i måneden etter terminmåned (#449)
Browse files Browse the repository at this point in the history
* Skal opprette oppfølgingsoppgave om barn er født måneden etter termindato

* Enhetstester ifm ForelderBarnHandler og terminbarn som er født for sent
  • Loading branch information
throndi authored Oct 30, 2023
1 parent 9c0dda4 commit 8f61723
Show file tree
Hide file tree
Showing 2 changed files with 74 additions and 11 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -34,23 +34,54 @@ class ForelderBarnHandler(val sakClient: SakClient) : PersonhendelseHandler {
secureLogger.info("Nye barn for bruker er ${nyeBarnForBruker.nyeBarn}, hendelseId : ${personhendelse.hendelseId}")

val barnFødtFørTermin = nyeBarnForBruker.filtrerÅrsak(NyttBarnÅrsak.FØDT_FØR_TERMIN)
val barnFødtEtterTermin = nyeBarnForBruker.filtrerÅrsak(NyttBarnÅrsak.FØDT_ETTER_TERMIN)
val nyeBarnSomIkkeFinnesPåBehandlingen = nyeBarnForBruker.filtrerÅrsak(NyttBarnÅrsak.BARN_FINNES_IKKE_PÅ_BEHANDLING)

if (barnFødtFørTermin.isNotEmpty()) {
val nyeBarnTekst = if (nyeBarnSomIkkeFinnesPåBehandlingen.isNotEmpty()) {
"Bruker har også fått et nytt/nye barn ${nyeBarnSomIkkeFinnesPåBehandlingen.separerteIdenterMedStønadstype()}. "
} else {
""
}
return OpprettOppgave(
"Bruker er innvilget stønad for ufødt(e) barn ${barnFødtFørTermin.separerteIdenterMedStønadstype()}. " +
"Barnet er registrert født i måneden før oppgitt termindato. " +
nyeBarnTekst +
"Vurder saken.",
)
return opprettOppgaveBarnFødtFørTermin(nyeBarnSomIkkeFinnesPåBehandlingen, barnFødtFørTermin)
}
if (barnFødtEtterTermin.isNotEmpty()) {
return opprettOppgaveBarnFødtEtterTermin(nyeBarnSomIkkeFinnesPåBehandlingen, barnFødtEtterTermin)
}

return OpprettOppgave("Bruker har fått et nytt/nye barn ${nyeBarnSomIkkeFinnesPåBehandlingen.separerteIdenterMedStønadstype()} som ikke finnes på behandling.")
}

private fun opprettOppgaveBarnFødtFørTermin(
nyeBarnSomIkkeFinnesPåBehandlingen: List<NyttBarn>,
barnFødtFørTermin: List<NyttBarn>,
): OpprettOppgave {
val nyeBarnTekst = nyeBarnTekst(nyeBarnSomIkkeFinnesPåBehandlingen)
return OpprettOppgave(
"Bruker er innvilget stønad for ufødt(e) barn ${barnFødtFørTermin.separerteIdenterMedStønadstype()}. " +
"Barnet er registrert født i måneden før oppgitt termindato. " +
nyeBarnTekst +
"Vurder saken.",
)
}

private fun opprettOppgaveBarnFødtEtterTermin(
nyeBarnSomIkkeFinnesPåBehandlingen: List<NyttBarn>,
barnFødtEtterTermin: List<NyttBarn>,
): OpprettOppgave {
val nyeBarnTekst = nyeBarnTekst(nyeBarnSomIkkeFinnesPåBehandlingen)
return OpprettOppgave(
"Bruker er innvilget stønad for ufødt(e) barn ${barnFødtEtterTermin.separerteIdenterMedStønadstype()}. " +
"Barnet er registrert født i måneden etter oppgitt termindato. " +
nyeBarnTekst +
"Vurder saken.",
)
}

private fun nyeBarnTekst(nyeBarnSomIkkeFinnesPåBehandlingen: List<NyttBarn>): String {
val nyeBarnTekst = if (nyeBarnSomIkkeFinnesPåBehandlingen.isNotEmpty()) {
"Bruker har også fått et nytt/nye barn ${nyeBarnSomIkkeFinnesPåBehandlingen.separerteIdenterMedStønadstype()}. "
} else {
""
}
return nyeBarnTekst
}

private fun NyeBarnDto.filtrerÅrsakrsak: NyttBarnÅrsak) = this.nyeBarn.filter { it.årsak == årsak }

private fun List<NyttBarn>.separerteIdenterMedStønadstype() = this.joinToString(", ") { it.personIdent + " (${it.stønadstype.name.enumToReadable()})" }
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -110,6 +110,38 @@ class ForelderBarnHandlerTest {
"Vurder saken.",
)
}
@Test
internal fun `finnNyeBarnForBruker inneholder for sent født terminbarn og nytt barn, forvent at oppgave opprettes`() {
mockNyeBarn(
NyttBarn(barn1Fnr, StønadType.OVERGANGSSTØNAD, NyttBarnÅrsak.FØDT_ETTER_TERMIN),
NyttBarn(barn2Fnr, StønadType.SKOLEPENGER, NyttBarnÅrsak.BARN_FINNES_IKKE_PÅ_BEHANDLING),
)
every { pdlClient.hentPerson(personIdent) } returns person
service.håndterPersonhendelse(personhendelse)
verify(exactly = 1) { oppgaveClient.opprettOppgave(any()) }
assertThat(slot.captured.beskrivelse)
.isEqualTo(
"Personhendelse: Bruker er innvilget stønad for ufødt(e) barn fnr (Overgangsstønad). " +
"Barnet er registrert født i måneden etter oppgitt termindato. " +
"Bruker har også fått et nytt/nye barn fnr2 (Skolepenger). " +
"Vurder saken.",
)
}
@Test
internal fun `finnNyeBarnForBruker inneholder for sent født terminbarn, forvent at oppgave opprettes`() {
mockNyeBarn(
NyttBarn(barn1Fnr, StønadType.OVERGANGSSTØNAD, NyttBarnÅrsak.FØDT_ETTER_TERMIN),
)
every { pdlClient.hentPerson(personIdent) } returns person
service.håndterPersonhendelse(personhendelse)
verify(exactly = 1) { oppgaveClient.opprettOppgave(any()) }
assertThat(slot.captured.beskrivelse)
.isEqualTo(
"Personhendelse: Bruker er innvilget stønad for ufødt(e) barn fnr (Overgangsstønad). " +
"Barnet er registrert født i måneden etter oppgitt termindato. " +
"Vurder saken.",
)
}

private fun mockNyeBarn(vararg nyeBarn: NyttBarn) {
every { sakClient.finnNyeBarnForBruker(any()) } returns NyeBarnDto(nyeBarn.toList())
Expand Down

0 comments on commit 8f61723

Please sign in to comment.