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

Oppgraderer til ny bidrag-transport #49

Merged
merged 1 commit into from
Sep 28, 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
2 changes: 1 addition & 1 deletion pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -198,7 +198,7 @@
<dependency>
<groupId>no.nav.bidrag</groupId>
<artifactId>bidrag-transport</artifactId>
<version>20230821134807_d0642b9</version>
<version>20230918144946_1e1bc33</version>
</dependency>

<dependency>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,19 +20,20 @@ import no.nav.bidrag.behandling.transformers.toNoString
import no.nav.bidrag.beregn.felles.enums.BostatusKode
import no.nav.bidrag.beregn.felles.enums.SivilstandKode
import no.nav.bidrag.domain.enums.GrunnlagType
import no.nav.bidrag.transport.beregning.forskudd.rest.request.BeregnForskuddGrunnlag
import no.nav.bidrag.transport.beregning.forskudd.rest.request.Grunnlag
import no.nav.bidrag.transport.beregning.felles.BeregnGrunnlag
import no.nav.bidrag.transport.beregning.felles.Grunnlag
import org.springframework.stereotype.Service
import java.math.BigDecimal
import java.time.LocalDate

@Service
class ForskuddBeregning {

private fun prepareSoknadsBarn(soknadBarn: Rolle): List<Grunnlag> =
listOf(
Grunnlag(
referanse = "Mottatt_SoknadsbarnInfo_SB" + soknadBarn.id,
type = GrunnlagType.SOKNADSBARN_INFO.toString(),
type = GrunnlagType.SOKNADSBARN_INFO,
innhold = POJONode(
SoknadsBarnNode(
soknadsbarnId = soknadBarn.id!!.toInt(),
Expand All @@ -57,7 +58,7 @@ class ForskuddBeregning {
.map {
Grunnlag(
referanse = "Mottatt_Bostatus_" + it.datoFom.toCompactString(),
type = GrunnlagType.BOSTATUS.toString(),
type = GrunnlagType.BOSTATUS,
innhold = POJONode(
BostatusNode(
datoFom = it.datoFom.toNoString(),
Expand All @@ -75,7 +76,7 @@ class ForskuddBeregning {
.map {
Grunnlag(
referanse = "Mottatt_BarnIHusstand_" + it.datoFom.replace("-", ""),
type = GrunnlagType.BARN_I_HUSSTAND.toString(),
type = GrunnlagType.BARN_I_HUSSTAND,
innhold = POJONode(it),
)
}
Expand All @@ -89,7 +90,7 @@ class ForskuddBeregning {
.map {
Grunnlag(
referanse = "Mottatt_Inntekt_${it.inntektType}_${it.rolle}_${it.datoFom.toCompactString()}",
type = GrunnlagType.INNTEKT.toString(),
type = GrunnlagType.INNTEKT,
innhold = POJONode(
InntektNode(
datoFom = it.datoFom.toNoString(),
Expand All @@ -104,7 +105,7 @@ class ForskuddBeregning {
.map {
Grunnlag(
referanse = "Mottatt_Inntekt_TG" + it.datoFom.toCompactString(),
type = GrunnlagType.INNTEKT.toString(),
type = GrunnlagType.INNTEKT,
innhold = POJONode(
InntektNode(
datoFom = it.datoFom.toNoString(),
Expand All @@ -119,7 +120,7 @@ class ForskuddBeregning {
.map {
Grunnlag(
referanse = "Mottatt_Inntekt_UB" + it.datoFom.toCompactString(),
type = GrunnlagType.INNTEKT.toString(),
type = GrunnlagType.INNTEKT,
innhold = POJONode(
InntektNode(
datoFom = it.datoFom.toNoString(),
Expand All @@ -144,7 +145,7 @@ class ForskuddBeregning {
sivilstand.map {
Grunnlag(
referanse = "Mottatt_Sivilstand_" + it.datoFom.toCompactString(),
type = GrunnlagType.SIVILSTAND.toString(),
type = GrunnlagType.SIVILSTAND,
innhold = POJONode(
SivilstandNode(
datoFom = it.datoFom.toNoString(),
Expand Down Expand Up @@ -194,7 +195,7 @@ class ForskuddBeregning {
currentPeriods = currentPeriods + list[i].info.heads - list[i].info.tails
}

return r
return r.filter { it.antall != 0.0 }
}

fun toBehandlingBeregningModel(behandling: Behandling): Either<NonEmptyList<String>, BehandlingBeregningModel> =
Expand All @@ -210,8 +211,8 @@ class ForskuddBeregning {
roller = behandling.roller,
)

fun toPayload(b: BehandlingBeregningModel, soknadsBarn: Rolle): BeregnForskuddGrunnlag =
BeregnForskuddGrunnlag(
fun toPayload(b: BehandlingBeregningModel, soknadsBarn: Rolle): BeregnGrunnlag =
BeregnGrunnlag(
beregnDatoFra = b.virkningsDato,
beregnDatoTil = b.datoTom,
grunnlagListe = prepareSoknadsBarn(soknadsBarn) +
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ package no.nav.bidrag.behandling.consumer

import no.nav.bidrag.behandling.dto.behandling.ForskuddDto
import no.nav.bidrag.commons.web.client.AbstractRestClient
import no.nav.bidrag.transport.beregning.forskudd.rest.request.BeregnForskuddGrunnlag
import no.nav.bidrag.transport.beregning.felles.BeregnGrunnlag
import org.springframework.beans.factory.annotation.Qualifier
import org.springframework.beans.factory.annotation.Value
import org.springframework.stereotype.Service
Expand All @@ -18,5 +18,5 @@ class BidragBeregnForskuddConsumer(
private val beregnForskuddUri =
UriComponentsBuilder.fromUri(bidragBeregnForskuddUrl).pathSegment("beregn").pathSegment("forskudd").build().toUri()

fun beregnForskudd(payload: BeregnForskuddGrunnlag): ForskuddDto = postForNonNullEntity(beregnForskuddUri, payload)
fun beregnForskudd(payload: BeregnGrunnlag): ForskuddDto = postForNonNullEntity(beregnForskuddUri, payload)
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@ package no.nav.bidrag.behandling.controller

import arrow.core.mapOrAccumulate
import arrow.core.raise.either
import com.fasterxml.jackson.databind.ObjectMapper
import io.swagger.v3.oas.annotations.Operation
import io.swagger.v3.oas.annotations.security.SecurityRequirement
import mu.KotlinLogging
Expand All @@ -12,8 +11,6 @@ import no.nav.bidrag.behandling.dto.beregning.ForskuddBeregningPerBarn
import no.nav.bidrag.behandling.dto.beregning.ForskuddBeregningRespons
import no.nav.bidrag.behandling.service.BehandlingService
import no.nav.bidrag.domain.enums.Rolletype
import no.nav.bidrag.transport.beregning.forskudd.rest.request.BeregnForskuddGrunnlag
import org.springframework.http.HttpEntity
import org.springframework.web.bind.annotation.PathVariable
import org.springframework.web.bind.annotation.PostMapping
import org.springframework.web.client.HttpClientErrorException
Expand Down Expand Up @@ -57,8 +54,6 @@ class BehandlingBeregnForskuddController(
.mapOrAccumulate {
val payload = forskuddBeregning.toPayload(behandlingModel, it)

if (false) printDebugPayload(payload)

try {
val respons =
bidragBeregnForskuddConsumer.beregnForskudd(payload)
Expand Down Expand Up @@ -91,10 +86,4 @@ class BehandlingBeregnForskuddController(
return ForskuddBeregningRespons(result.getOrNull(), result.leftOrNull())
}

private fun printDebugPayload(payload: BeregnForskuddGrunnlag) {
val message = HttpEntity(payload)
val objectMapper = ObjectMapper()

objectMapper.writeValue(System.out, message.body)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ package no.nav.bidrag.behandling.dto.behandling

import io.swagger.v3.oas.annotations.media.Schema
import no.nav.bidrag.behandling.database.datamodell.SivilstandType
import no.nav.bidrag.transport.beregning.forskudd.rest.request.Grunnlag
import no.nav.bidrag.transport.beregning.felles.Grunnlag
import java.math.BigDecimal
import java.time.LocalDate

Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package no.nav.bidrag.behandling.dto.beregning

import no.nav.bidrag.behandling.dto.behandling.ResultatPeriode
import no.nav.bidrag.transport.beregning.forskudd.rest.request.Grunnlag
import no.nav.bidrag.transport.beregning.felles.Grunnlag

data class ForskuddBeregningRespons(
val resultat: List<ForskuddBeregningPerBarn>?,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -41,15 +41,15 @@ class BehandlingService(
enhet = behandling.behandlerEnhet,
roller = behandling.tilForsendelseRolleDto(),
behandlingInfo =
BehandlingInfoDto(
behandlingId = behandling.id,
soknadId = behandling.soknadId,
soknadFra = behandling.soknadFra,
behandlingType = behandling.behandlingType.name,
stonadType = behandling.stonadType,
engangsBelopType = behandling.engangsbelopType,
vedtakType = behandling.soknadType.tilVedtakType(),
),
BehandlingInfoDto(
behandlingId = behandling.id,
soknadId = behandling.soknadId,
soknadFra = behandling.soknadFra,
behandlingType = behandling.behandlingType.name,
stonadType = behandling.stonadType,
engangsBelopType = behandling.engangsbelopType,
vedtakType = behandling.soknadType.tilVedtakType(),
),
),
)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ class ForsendelseService(
val opprettForRoller = opprettForRoller(request.roller, request.behandlingInfo)
log.info {
"Oppretter forsendelse ${request.behandlingInfo.typeForsendelse()}brev " +
"for ${opprettForRoller.size} roller (${opprettForRoller.joinToString(",")}) og behandling ${request.behandlingInfo}"
"for ${opprettForRoller.size} roller (${opprettForRoller.joinToString(",")}) og behandling ${request.behandlingInfo}"
}
val opprettetForsendelser = mutableListOf<String>()
opprettForRoller.forEach {
Expand Down Expand Up @@ -86,9 +86,9 @@ class ForsendelseService(
val erFattet = behandlingInfo.erFattetBeregnet != null
if (erFattet) return true
return !(
behandlingInfo.stonadType == StonadType.FORSKUDD &&
ikkeOpprettVarslingForForskuddMedType.contains(behandlingInfo.vedtakType)
)
behandlingInfo.stonadType == StonadType.FORSKUDD &&
ikkeOpprettVarslingForForskuddMedType.contains(behandlingInfo.vedtakType)
)
}

private fun opprettForRoller(
Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
package no.nav.bidrag.behandling.beregning

import io.kotest.matchers.shouldBe
import no.nav.bidrag.behandling.beregning.model.HusstandsBarnPeriodeModel
import no.nav.bidrag.behandling.database.datamodell.BoStatusType
import no.nav.bidrag.behandling.transformers.toLocalDate
import org.junit.jupiter.api.Assertions.assertEquals
import org.junit.jupiter.api.Test
import java.util.Calendar

Expand All @@ -20,18 +20,18 @@ class ForskuddBeregningTest {
val fraDato2 = cal2.time
cal1.add(Calendar.MONTH, 1)
cal2.add(Calendar.MONTH, 1)
val tilDao = cal1.time
val tilDao2 = cal2.time
val tilDato = cal1.time
val tilDato2 = cal2.time

val splitPeriods1 =
forskuddBeregning.splitPeriods(
listOf(
HusstandsBarnPeriodeModel(fraDato.toLocalDate(), tilDao.toLocalDate(), "ident1", BoStatusType.REGISTRERT_PA_ADRESSE),
HusstandsBarnPeriodeModel(fraDato2.toLocalDate(), tilDao2.toLocalDate(), "ident2", BoStatusType.REGISTRERT_PA_ADRESSE),
HusstandsBarnPeriodeModel(fraDato.toLocalDate(), tilDato.toLocalDate(), "ident1", BoStatusType.REGISTRERT_PA_ADRESSE),
HusstandsBarnPeriodeModel(fraDato2.toLocalDate(), tilDato2.toLocalDate(), "ident2", BoStatusType.REGISTRERT_PA_ADRESSE),
),
)

assertEquals(3, splitPeriods1.size)
splitPeriods1.size shouldBe 3
}

@Test
Expand All @@ -42,38 +42,109 @@ class ForskuddBeregningTest {

val fraDato = cal1.time
cal1.add(Calendar.MONTH, 1)
val tilDao = cal1.time
val tilDato = cal1.time

val splitPeriods =
forskuddBeregning.splitPeriods(
listOf(
HusstandsBarnPeriodeModel(fraDato.toLocalDate(), tilDao.toLocalDate(), "ident", BoStatusType.REGISTRERT_PA_ADRESSE),
HusstandsBarnPeriodeModel(fraDato.toLocalDate(), tilDato.toLocalDate(), "ident", BoStatusType.REGISTRERT_PA_ADRESSE),
),
)

assertEquals(1, splitPeriods.size)

splitPeriods.size shouldBe 1
}

@Test
fun `tre barn i samtidig`() {
fun `tre barn samtidig`() {
val forskuddBeregning = ForskuddBeregning()
val cal1 = Calendar.getInstance()
cal1.set(Calendar.DAY_OF_MONTH, 1)

val fraDato = cal1.time
cal1.add(Calendar.MONTH, 1)
val tilDao = cal1.time
val tilDato = cal1.time

val splitPeriods =
forskuddBeregning.splitPeriods(
listOf(
HusstandsBarnPeriodeModel(fraDato.toLocalDate(), tilDato.toLocalDate(), "ident", BoStatusType.REGISTRERT_PA_ADRESSE),
HusstandsBarnPeriodeModel(fraDato.toLocalDate(), tilDato.toLocalDate(), "ident1", BoStatusType.REGISTRERT_PA_ADRESSE),
HusstandsBarnPeriodeModel(fraDato.toLocalDate(), tilDato.toLocalDate(), "ident2", BoStatusType.REGISTRERT_PA_ADRESSE),
),
)


splitPeriods.size shouldBe 1
splitPeriods[0].antall shouldBe 3.0
}

@Test
fun `tre barn men bare to barn samtidig`() {
val forskuddBeregning = ForskuddBeregning()

val cal1 = Calendar.getInstance()
cal1.set(Calendar.DAY_OF_MONTH, 1)

val fraDato1 = cal1.time
cal1.add(Calendar.YEAR, 1)
val tilDato1 = cal1.time

val cal2 = Calendar.getInstance()
cal2.set(Calendar.DAY_OF_MONTH, 20)

val fraDato2 = cal2.time
cal2.add(Calendar.MONTH, 1)
val tilDato2 = cal2.time

cal2.add(Calendar.MONTH, 1)
val fraDato3 = cal2.time

cal2.add(Calendar.MONTH, 1)
val tilDato3 = cal2.time


val splitPeriods =
forskuddBeregning.splitPeriods(
listOf(
HusstandsBarnPeriodeModel(fraDato1.toLocalDate(), tilDato1.toLocalDate(), "ident", BoStatusType.REGISTRERT_PA_ADRESSE),
HusstandsBarnPeriodeModel(fraDato2.toLocalDate(), tilDato2.toLocalDate(), "ident1", BoStatusType.REGISTRERT_PA_ADRESSE),
HusstandsBarnPeriodeModel(fraDato3.toLocalDate(), tilDato3.toLocalDate(), "ident2", BoStatusType.REGISTRERT_PA_ADRESSE),
),
)

splitPeriods.size shouldBe 5
splitPeriods[0].antall shouldBe 1.0
splitPeriods[1].antall shouldBe 2.0
splitPeriods[2].antall shouldBe 1.0
splitPeriods[3].antall shouldBe 2.0
splitPeriods[4].antall shouldBe 1.0
}

@Test
fun `to barn ikke samtidig`() {
val forskuddBeregning = ForskuddBeregning()
val cal1 = Calendar.getInstance()
cal1.set(Calendar.DAY_OF_MONTH, 1)

val fraDato = cal1.time
cal1.add(Calendar.MONTH, 1)
val tilDato = cal1.time

cal1.add(Calendar.MONTH, 1)
val fraDato1 = cal1.time

cal1.add(Calendar.MONTH, 1)
val tilDato1 = cal1.time

val splitPeriods =
forskuddBeregning.splitPeriods(
listOf(
HusstandsBarnPeriodeModel(fraDato.toLocalDate(), tilDao.toLocalDate(), "ident", BoStatusType.REGISTRERT_PA_ADRESSE),
HusstandsBarnPeriodeModel(fraDato.toLocalDate(), tilDao.toLocalDate(), "ident1", BoStatusType.REGISTRERT_PA_ADRESSE),
HusstandsBarnPeriodeModel(fraDato.toLocalDate(), tilDao.toLocalDate(), "ident2", BoStatusType.REGISTRERT_PA_ADRESSE),
HusstandsBarnPeriodeModel(fraDato.toLocalDate(), tilDato.toLocalDate(), "ident", BoStatusType.REGISTRERT_PA_ADRESSE),
HusstandsBarnPeriodeModel(fraDato1.toLocalDate(), tilDato1.toLocalDate(), "ident1", BoStatusType.REGISTRERT_PA_ADRESSE),
),
)

assertEquals(1, splitPeriods.size)
assertEquals(3.0, splitPeriods.get(0).antall)
splitPeriods.size shouldBe 2
}
}
Loading