Skip to content

Commit

Permalink
Merge pull request #242 from navikt/feature/sivilstand
Browse files Browse the repository at this point in the history
Feature/sivilstand
  • Loading branch information
rinnan17 authored Oct 2, 2023
2 parents 4e1a127 + a1cf9c7 commit 03a0d87
Show file tree
Hide file tree
Showing 3 changed files with 257 additions and 7 deletions.
36 changes: 32 additions & 4 deletions src/main/kotlin/no/nav/bidrag/grunnlag/model/OppdaterSivilstand.kt
Original file line number Diff line number Diff line change
Expand Up @@ -52,8 +52,13 @@ class OppdaterSivilstand(
personIdOgPeriode.personId,
timestampOppdatering
)
// Sorterer motta sivilstandforekomster etter. Forekomstene som er historiske skal komme først. Deretter sorteres det på
// gyldigFraOgMed, bekreftelsesdato, registrert og til slutt på type.
antallPerioderFunnet = behandleSivilstandResponse(
sivilstandResponse.sivilstandDto.sortedWith(compareBy({ it.gyldigFraOgMed }, { it.bekreftelsesdato })),
sivilstandResponse.sivilstandDto.sortedWith(
compareByDescending<SivilstandDto> { it.historisk }.thenBy { it.gyldigFraOgMed }
.thenBy { it.bekreftelsesdato }.thenBy { it.registrert }.thenBy { it.type.toString() }
),
personIdOgPeriode
)
}
Expand Down Expand Up @@ -83,15 +88,28 @@ class OppdaterSivilstand(
private fun behandleSivilstandResponse(sivilstandDtoListe: List<SivilstandDto>, personIdOgPeriodeRequest: PersonIdOgPeriodeRequest): Int {
var antallPerioderFunnet = 0

var periodeTil: LocalDate? = null

for (indeks in sivilstandDtoListe.indices) {
// Setter periodeTil lik periodeFra for neste forekomst.
// Hvis det ikke finnes en neste forekomst så settes periodeTil lik null. Timestamp registrert brukes bare hvis neste forekomst ikke er historisk
if (sivilstandDtoListe.getOrNull(indeks + 1)?.historisk == true) {
periodeTil =
sivilstandDtoListe.getOrNull(indeks + 1)?.gyldigFraOgMed?.verdi
?: sivilstandDtoListe.getOrNull(indeks + 1)?.bekreftelsesdato?.verdi
} else {
periodeTil = sivilstandDtoListe.getOrNull(indeks + 1)?.gyldigFraOgMed?.verdi
?: sivilstandDtoListe.getOrNull(indeks + 1)?.bekreftelsesdato?.verdi
?: sivilstandDtoListe.getOrNull(indeks + 1)?.registrert?.toLocalDate()
}

antallPerioderFunnet++
lagreSivilstand(
sivilstandDtoListe[indeks],
grunnlagspakkeId,
timestampOppdatering,
personIdOgPeriodeRequest.personId,
sivilstandDtoListe.getOrNull(indeks + 1)?.gyldigFraOgMed?.verdi ?: sivilstandDtoListe.getOrNull(indeks + 1)?.bekreftelsesdato?.verdi
?: sivilstandDtoListe.getOrNull(indeks + 1)?.registrert?.toLocalDate()
periodeTil
)
}

Expand All @@ -105,11 +123,21 @@ class OppdaterSivilstand(
personId: String,
periodeTil: LocalDate?
) {
// Hvis en forekomst er merket som historisk, altså ikke lenger aktiv, så skal periodeFra settes lik gyldgiFraOgMed evt bekreftelsesdato
// Hvis begge er null så settes periodeFra lik null
// Hvis forekomsten er aktiv så kan registrert timestamp også brukes til å finne periodeFra. Tanken er da at dette er en ny forekomst og
// at registrert kan bruukes til å anta riktig periodeFra.
val periodeFra = if (sivilstand.historisk == true) {
sivilstand.gyldigFraOgMed?.verdi ?: sivilstand.bekreftelsesdato?.verdi
} else {
sivilstand.gyldigFraOgMed?.verdi ?: sivilstand.bekreftelsesdato?.verdi ?: sivilstand.registrert?.toLocalDate()
}

persistenceService.opprettSivilstand(
SivilstandBo(
grunnlagspakkeId = grunnlagspakkeId,
personId = personId,
periodeFra = sivilstand.gyldigFraOgMed?.verdi ?: sivilstand.bekreftelsesdato?.verdi ?: sivilstand.registrert?.toLocalDate(),
periodeFra = periodeFra,
periodeTil = periodeTil,
sivilstand = sivilstand.type.toString(),
aktiv = true,
Expand Down
91 changes: 91 additions & 0 deletions src/test/kotlin/no/nav/bidrag/grunnlag/TestUtil.kt
Original file line number Diff line number Diff line change
Expand Up @@ -1040,6 +1040,97 @@ class TestUtil {
)
)

fun byggHentSivilstandResponseTestSortering() = SivilstandshistorikkDto(
immutableListOf(
SivilstandDto(
type = Sivilstandstype.GIFT,
gyldigFraOgMed = FomDato(LocalDate.parse("2017-07-17")),
bekreftelsesdato = Bekreftelsesdato(LocalDate.parse("2016-06-16")),
master = "PDL",
registrert = LocalDateTime.now(),
historisk = true
),
SivilstandDto(
type = Sivilstandstype.SKILT,
gyldigFraOgMed = null,
bekreftelsesdato = null,
master = "PDL",
registrert = LocalDateTime.parse("2022-03-01T12:00:00"),
historisk = false
),
SivilstandDto(
type = Sivilstandstype.UGIFT,
gyldigFraOgMed = null,
bekreftelsesdato = Bekreftelsesdato(LocalDate.parse("2011-02-01")),
master = "PDL",
registrert = LocalDateTime.now(),
historisk = true
),
SivilstandDto(
type = Sivilstandstype.UOPPGITT,
gyldigFraOgMed = null,
bekreftelsesdato = Bekreftelsesdato(LocalDate.parse("2001-05-01")),
master = "PDL",
registrert = LocalDateTime.now(),
historisk = true
),
SivilstandDto(
type = Sivilstandstype.SEPARERT,
gyldigFraOgMed = FomDato(LocalDate.parse("2021-09-01")),
bekreftelsesdato = null,
master = "PDL",
registrert = LocalDateTime.parse("2021-03-01T12:00:00"),
historisk = true
)
)
)

fun byggHentSivilstandResponseTestUtenDatoerHistoriske() = SivilstandshistorikkDto(
immutableListOf(
SivilstandDto(
type = Sivilstandstype.SKILT,
gyldigFraOgMed = null,
bekreftelsesdato = null,
master = "PDL",
registrert = null,
// registrert = LocalDateTime.parse("2020-05-12T11:30:00"),
historisk = true
),
SivilstandDto(
type = Sivilstandstype.GIFT,
gyldigFraOgMed = null,
bekreftelsesdato = null,
master = "PDL",
registrert = null,
// registrert = LocalDateTime.parse("2017-03-01T12:00:00"),
historisk = true
)

)
)

fun byggHentSivilstandResponseTestUtenDatoer() = SivilstandshistorikkDto(
immutableListOf(
SivilstandDto(
type = Sivilstandstype.SKILT,
gyldigFraOgMed = null,
bekreftelsesdato = null,
master = "PDL",
registrert = LocalDateTime.parse("2020-05-12T11:30:00"),
historisk = false
),
SivilstandDto(
type = Sivilstandstype.GIFT,
gyldigFraOgMed = null,
bekreftelsesdato = null,
master = "PDL",
registrert = LocalDateTime.parse("2017-03-01T12:00:00"),
historisk = true
)

)
)

fun <Request, Response> performRequest(
mockMvc: MockMvc,
method: HttpMethod,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -580,7 +580,7 @@ class OppdaterGrunnlagspakkeServiceTest {
{ Assertions.assertThat(sivilstandListe).isNotNull() },
{ Assertions.assertThat(sivilstandListe.size).isEqualTo(3) },
{ Assertions.assertThat(sivilstandListe[0].personId).isEqualTo("12345678910") },
{ Assertions.assertThat(sivilstandListe[0].periodeFra).isEqualTo(LocalDate.parse("2021-01-01")) },
{ Assertions.assertThat(sivilstandListe[0].periodeFra).isNull() },
{ Assertions.assertThat(sivilstandListe[0].periodeTil).isEqualTo(LocalDate.parse("2021-02-01")) },
{ Assertions.assertThat(sivilstandListe[0].sivilstand).isEqualTo(Sivilstandstype.SEPARERT_PARTNER.toString()) },

Expand All @@ -600,11 +600,142 @@ class OppdaterGrunnlagspakkeServiceTest {
{ Assertions.assertThat(oppdatertGrunnlagspakke.grunnlagTypeResponsListe[0].type).isEqualTo(GrunnlagRequestType.SIVILSTAND) },
{ Assertions.assertThat(oppdatertGrunnlagspakke.grunnlagTypeResponsListe[0].personId).isEqualTo("12345678910") },
{ Assertions.assertThat(oppdatertGrunnlagspakke.grunnlagTypeResponsListe[0].status).isEqualTo(GrunnlagsRequestStatus.HENTET) },
{ Assertions.assertThat(oppdatertGrunnlagspakke.grunnlagTypeResponsListe[0].statusMelding).isEqualTo("Antall sivilstandsforekomster funnet: 3") },
{ Assertions.assertThat(oppdatertGrunnlagspakke.grunnlagTypeResponsListe[0].statusMelding).isEqualTo("Antall sivilstandsforekomster funnet: 3") }
)
}

@Test
fun `Test på sortering av mottatt sivilstand og logikk for periodisering`() {
Mockito.`when`(persistenceServiceMock.opprettSivilstand(GrunnlagspakkeServiceMockTest.MockitoHelper.capture(sivilstandBoCaptor)))
.thenReturn(
TestUtil.byggSivilstand()
)
Mockito.`when`(
bidragPersonConsumerMock.hentSivilstand(
GrunnlagspakkeServiceMockTest.MockitoHelper.any(
PersonIdent::class.java
)
)
)
.thenReturn(RestResponse.Success(TestUtil.byggHentSivilstandResponseTestSortering()))

val grunnlagspakkeIdOpprettet = TestUtil.byggGrunnlagspakke().grunnlagspakkeId
val oppdatertGrunnlagspakke = oppdaterGrunnlagspakkeService.oppdaterGrunnlagspakke(
grunnlagspakkeIdOpprettet,
TestUtil.byggOppdaterGrunnlagspakkeRequestSivilstand(),
LocalDateTime.now()
)

val sivilstandListe = sivilstandBoCaptor.allValues

assertAll(
{ Assertions.assertThat(grunnlagspakkeIdOpprettet).isNotNull() },

// sjekk GrunnlagspakkeBo
{ Assertions.assertThat(oppdatertGrunnlagspakke).isNotNull() },

// sjekk SivilstandBo
{ Assertions.assertThat(sivilstandListe).isNotNull() },
{ Assertions.assertThat(sivilstandListe.size).isEqualTo(5) },
{ Assertions.assertThat(sivilstandListe[0].periodeFra).isEqualTo(LocalDate.parse("2001-05-01")) },
{ Assertions.assertThat(sivilstandListe[0].periodeTil).isEqualTo(LocalDate.parse("2011-02-01")) },
{ Assertions.assertThat(sivilstandListe[0].sivilstand).isEqualTo(Sivilstandstype.UOPPGITT.toString()) },

{ Assertions.assertThat(sivilstandListe[1].periodeFra).isEqualTo(LocalDate.parse("2011-02-01")) },
{ Assertions.assertThat(sivilstandListe[1].periodeTil).isEqualTo(LocalDate.parse("2017-07-17")) },
{ Assertions.assertThat(sivilstandListe[1].sivilstand).isEqualTo(Sivilstandstype.UGIFT.toString()) },

{ Assertions.assertThat(sivilstandListe[2].periodeFra).isEqualTo(LocalDate.parse("2017-07-17")) },
{ Assertions.assertThat(sivilstandListe[2].periodeTil).isEqualTo(LocalDate.parse("2021-09-01")) },
{ Assertions.assertThat(sivilstandListe[2].sivilstand).isEqualTo(Sivilstandstype.GIFT.toString()) },

{ Assertions.assertThat(sivilstandListe[3].periodeFra).isEqualTo(LocalDate.parse("2021-09-01")) },
{ Assertions.assertThat(sivilstandListe[3].periodeTil).isEqualTo(LocalDate.parse("2022-03-01")) },
{ Assertions.assertThat(sivilstandListe[3].sivilstand).isEqualTo(Sivilstandstype.SEPARERT.toString()) },

{ Assertions.assertThat(sivilstandListe[4].periodeFra).isEqualTo(LocalDate.parse("2022-03-01")) },
{ Assertions.assertThat(sivilstandListe[4].periodeTil).isNull() },
{ Assertions.assertThat(sivilstandListe[4].sivilstand).isEqualTo(Sivilstandstype.SKILT.toString()) },

// sjekk oppdatertGrunnlagspakke
{ Assertions.assertThat(oppdatertGrunnlagspakke.grunnlagspakkeId).isEqualTo(grunnlagspakkeIdOpprettet) },
{ Assertions.assertThat(oppdatertGrunnlagspakke.grunnlagTypeResponsListe.size).isEqualTo(1) },
{ Assertions.assertThat(oppdatertGrunnlagspakke.grunnlagTypeResponsListe[0].type).isEqualTo(GrunnlagRequestType.SIVILSTAND) },
{ Assertions.assertThat(oppdatertGrunnlagspakke.grunnlagTypeResponsListe[0].personId).isEqualTo("12345678910") },
{ Assertions.assertThat(oppdatertGrunnlagspakke.grunnlagTypeResponsListe[0].status).isEqualTo(GrunnlagsRequestStatus.HENTET) },
{ Assertions.assertThat(oppdatertGrunnlagspakke.grunnlagTypeResponsListe[0].statusMelding).isEqualTo("Antall sivilstandsforekomster funnet: 3") }
{ Assertions.assertThat(oppdatertGrunnlagspakke.grunnlagTypeResponsListe[0].statusMelding).isEqualTo("Antall sivilstandsforekomster funnet: 5") }
)
}

@Test
fun `Test på sortering av mottatt sivilstand uten datoinformasjon der alle er historiske`() {
Mockito.`when`(persistenceServiceMock.opprettSivilstand(GrunnlagspakkeServiceMockTest.MockitoHelper.capture(sivilstandBoCaptor)))
.thenReturn(
TestUtil.byggSivilstand()
)
Mockito.`when`(
bidragPersonConsumerMock.hentSivilstand(
GrunnlagspakkeServiceMockTest.MockitoHelper.any(
PersonIdent::class.java
)
)
)
.thenReturn(RestResponse.Success(TestUtil.byggHentSivilstandResponseTestUtenDatoerHistoriske()))

val grunnlagspakkeIdOpprettet = TestUtil.byggGrunnlagspakke().grunnlagspakkeId
oppdaterGrunnlagspakkeService.oppdaterGrunnlagspakke(
grunnlagspakkeIdOpprettet,
TestUtil.byggOppdaterGrunnlagspakkeRequestSivilstand(),
LocalDateTime.now()
)

val sivilstandListe = sivilstandBoCaptor.allValues

assertAll(
// sjekk SivilstandBo
{ Assertions.assertThat(sivilstandListe[0].periodeFra).isNull() },
{ Assertions.assertThat(sivilstandListe[0].periodeTil).isNull() },
{ Assertions.assertThat(sivilstandListe[0].sivilstand).isEqualTo(Sivilstandstype.GIFT.toString()) },

{ Assertions.assertThat(sivilstandListe[1].periodeFra).isNull() },
{ Assertions.assertThat(sivilstandListe[1].periodeTil).isNull() },
{ Assertions.assertThat(sivilstandListe[1].sivilstand).isEqualTo(Sivilstandstype.SKILT.toString()) }
)
}

@Test
fun `Test på sortering av mottatt sivilstand uten datoinformasjon med registrert timestamp og aktiv forekomst`() {
Mockito.`when`(persistenceServiceMock.opprettSivilstand(GrunnlagspakkeServiceMockTest.MockitoHelper.capture(sivilstandBoCaptor)))
.thenReturn(
TestUtil.byggSivilstand()
)
Mockito.`when`(
bidragPersonConsumerMock.hentSivilstand(
GrunnlagspakkeServiceMockTest.MockitoHelper.any(
PersonIdent::class.java
)
)
)
.thenReturn(RestResponse.Success(TestUtil.byggHentSivilstandResponseTestUtenDatoer()))

val grunnlagspakkeIdOpprettet = TestUtil.byggGrunnlagspakke().grunnlagspakkeId
oppdaterGrunnlagspakkeService.oppdaterGrunnlagspakke(
grunnlagspakkeIdOpprettet,
TestUtil.byggOppdaterGrunnlagspakkeRequestSivilstand(),
LocalDateTime.now()
)

val sivilstandListe = sivilstandBoCaptor.allValues

assertAll(
// sjekk SivilstandBo
{ Assertions.assertThat(sivilstandListe[0].periodeFra).isNull() },
{ Assertions.assertThat(sivilstandListe[0].periodeTil).isEqualTo(LocalDate.parse("2020-05-12")) },
{ Assertions.assertThat(sivilstandListe[0].sivilstand).isEqualTo(Sivilstandstype.GIFT.toString()) },

{ Assertions.assertThat(sivilstandListe[1].periodeFra).isEqualTo(LocalDate.parse("2020-05-12")) },
{ Assertions.assertThat(sivilstandListe[1].periodeTil).isNull() },
{ Assertions.assertThat(sivilstandListe[1].sivilstand).isEqualTo(Sivilstandstype.SKILT.toString()) }
)
}

Expand Down

0 comments on commit 03a0d87

Please sign in to comment.