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

Inntektrespons inneholder gebyr endringer #640

Merged
merged 6 commits into from
Dec 11, 2024
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
4 changes: 2 additions & 2 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,8 @@
<properties>
<java.version>21</java.version>
<kotlin.version>2.1.0</kotlin.version>
<bidrag-felles.version>2024.12.10.074340</bidrag-felles.version>
<bidrag-beregn-felles.version>2024.12.09.142728</bidrag-beregn-felles.version>
<bidrag-felles.version>2024.12.11.070437</bidrag-felles.version>
<bidrag-beregn-felles.version>2024.12.10.160924</bidrag-beregn-felles.version>
<h2.version>2.3.232</h2.version>
<logback-encoder.version>8.0</logback-encoder.version>
<token-support.version>3.2.0</token-support.version>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ package no.nav.bidrag.behandling.dto.v2.inntekt
import com.fasterxml.jackson.annotation.JsonFormat
import io.swagger.v3.oas.annotations.media.Schema
import no.nav.bidrag.behandling.dto.v1.behandling.BegrunnelseDto
import no.nav.bidrag.behandling.dto.v2.behandling.GebyrDto
import no.nav.bidrag.behandling.dto.v2.behandling.OppdatereBegrunnelse
import no.nav.bidrag.behandling.dto.v2.validering.InntektValideringsfeilDto
import no.nav.bidrag.domene.enums.diverse.Kilde
Expand Down Expand Up @@ -106,6 +107,7 @@ data class OppdatereInntektRequest(
data class OppdatereInntektResponse(
@Schema(description = "Inntekt som ble oppdatert")
val inntekt: InntektDtoV2?,
val gebyr: GebyrDto? = null,
val beregnetGebyrErEndret: Boolean = false,
@Schema(description = "Periodiserte inntekter")
val beregnetInntekter: List<BeregnetInntekterDto> = emptyList(),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -109,7 +109,23 @@ data class UnderholdskostnadDto(
val tilsynsutgifter: BigDecimal = BigDecimal.ZERO,
val barnetrygd: BigDecimal = BigDecimal.ZERO,
val total: BigDecimal,
)
val beregningsdetaljer: Beregningsdetaljer? = null,
) {
data class Beregningsdetaljer(
val tilsynsutgifterBarn: List<TilsynsutgiftBarn> = emptyList(),
val totalTilsynsutgift: BigDecimal,
val endeligBeløp: BigDecimal,
val faktiskBeløp: BigDecimal,
val fordelingFaktor: BigDecimal,
val skattefradrag: BigDecimal,
)

data class TilsynsutgiftBarn(
val beløp: BigDecimal,
val kostpenger: BigDecimal? = null,
val tilleggsstønad: BigDecimal? = null,
)
}

data class OppdatereTilleggsstønadRequest(
val id: Long? = null,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ import no.nav.bidrag.behandling.dto.v2.inntekt.OppdatereInntektRequest
import no.nav.bidrag.behandling.dto.v2.inntekt.OppdatereInntektResponse
import no.nav.bidrag.behandling.inntektIkkeFunnetException
import no.nav.bidrag.behandling.oppdateringAvInntektFeilet
import no.nav.bidrag.behandling.transformers.Dtomapper
import no.nav.bidrag.behandling.transformers.behandling.hentBeregnetInntekterForRolle
import no.nav.bidrag.behandling.transformers.behandling.hentInntekterValideringsfeil
import no.nav.bidrag.behandling.transformers.eksplisitteYtelser
Expand Down Expand Up @@ -55,6 +56,7 @@ class InntektService(
private val inntektRepository: InntektRepository,
private val notatService: NotatService,
private val gebyrService: GebyrService,
private val dtomapper: Dtomapper,
) {
@Transactional
fun rekalkulerPerioderInntekter(behandlingsid: Long) {
Expand Down Expand Up @@ -181,6 +183,7 @@ class InntektService(
val beregnetGebyrErEndret = gebyrService.rekalkulerGebyr(behandling)
return OppdatereInntektResponse(
inntekt = oppdatertInntekt,
gebyr = dtomapper.run { behandling.mapGebyr() },
beregnetGebyrErEndret = beregnetGebyrErEndret,
beregnetInntekter =
behandling.roller
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -69,10 +69,12 @@ fun Set<BarnetilsynGrunnlagDto>.tilBarnetilsyn(u: Underholdskostnad) = this.map
fun BarnetilsynGrunnlagDto.tilBarnetilsyn(u: Underholdskostnad): Barnetilsyn {
fun erUnderSkolealder(fødselsdato: LocalDate) = fødselsdato.plusYears(ALDER_VED_SKOLESTART).year > LocalDate.now().year

val justerForDato = maxOf(u.behandling.virkningstidspunkt!!, LocalDate.now().withDayOfMonth(1))
val tilOgMedDato = this.periodeTil?.minusDays(1)
return Barnetilsyn(
underholdskostnad = u,
fom = this.periodeFra,
tom = this.periodeTil?.minusDays(1),
tom = if (tilOgMedDato != null && tilOgMedDato.isAfter(justerForDato)) null else tilOgMedDato,
kilde = Kilde.OFFENTLIG,
omfang = this.tilsynstype ?: Tilsynstype.IKKE_ANGITT,
under_skolealder = erUnderSkolealder(u.person.henteFødselsdato),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,6 @@ import no.nav.bidrag.transport.behandling.felles.grunnlag.opprettInnhentetSivils
import no.nav.bidrag.transport.behandling.felles.grunnlag.opprettKontantstøtteGrunnlagsreferanse
import no.nav.bidrag.transport.behandling.felles.grunnlag.opprettSkattegrunnlagGrunnlagsreferanse
import no.nav.bidrag.transport.behandling.felles.grunnlag.opprettSmåbarnstilleggGrunnlagsreferanse
import no.nav.bidrag.transport.behandling.felles.grunnlag.opprettTilleggsstønadGrunnlagsreferanse
import no.nav.bidrag.transport.behandling.felles.grunnlag.opprettUtvidetbarnetrygGrunnlagsreferanse
import no.nav.bidrag.transport.behandling.felles.grunnlag.tilPersonreferanse
import no.nav.bidrag.transport.behandling.grunnlag.response.AinntektGrunnlagDto
Expand Down Expand Up @@ -373,8 +372,8 @@ fun List<TilleggsstønadGrunnlagDto>.tilGrunnlagsobjekt(
søktFomDato: LocalDate,
) = GrunnlagDto(
referanse =
opprettTilleggsstønadGrunnlagsreferanse(gjelderReferanse),
type = Grunnlagstype.INNHENTET_TILLEGGSSTØNAD,
"innhentet_tilleggsstønad_begrenset_$gjelderReferanse",
type = Grunnlagstype.INNHENTET_TILLEGGSSTØNAD_BEGRENSET,
gjelderReferanse = gjelderReferanse,
innhold =
POJONode(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -292,7 +292,7 @@ internal fun opprettGrunnlagForBostatusperioder(
)
}.toSet()

internal fun SluttberegningGebyr.tilResultatkode() = if (ilagtGebyr) Resultatkode.GEBYR_ILAGT else Resultatkode.GEBYR_FRITTATT
internal fun SluttberegningGebyr.tilResultatkode() = if (ilagtGebyr) Resultatkode.GEBYR_ILAGT else Resultatkode.GEBYR_FRITATT

fun List<BaseGrunnlag>.finnInntektSiste12Mnd(rolle: Rolle) =
filter {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,12 +14,14 @@ import no.nav.bidrag.behandling.database.repository.BehandlingRepository
import no.nav.bidrag.behandling.database.repository.InntektRepository
import no.nav.bidrag.behandling.dto.v2.inntekt.OppdatereInntektRequest
import no.nav.bidrag.behandling.dto.v2.inntekt.OppdatereManuellInntekt
import no.nav.bidrag.behandling.transformers.Dtomapper
import no.nav.bidrag.behandling.transformers.beregning.ValiderBeregning
import no.nav.bidrag.behandling.transformers.vedtak.mapping.tilvedtak.BehandlingTilGrunnlagMappingV2
import no.nav.bidrag.behandling.transformers.vedtak.mapping.tilvedtak.VedtakGrunnlagMapper
import no.nav.bidrag.behandling.utils.testdata.opprettInntekt
import no.nav.bidrag.behandling.utils.testdata.oppretteBehandling
import no.nav.bidrag.behandling.utils.testdata.oppretteBehandlingRoller
import no.nav.bidrag.beregn.barnebidrag.BeregnBarnebidragApi
import no.nav.bidrag.beregn.barnebidrag.BeregnGebyrApi
import no.nav.bidrag.beregn.barnebidrag.BeregnSamværsklasseApi
import no.nav.bidrag.commons.web.mock.stubSjablonService
Expand Down Expand Up @@ -51,12 +53,22 @@ class InntektServiceMockTest {
@MockK
lateinit var evnevurderingService: BeregningEvnevurderingService

@MockK
lateinit var tilgangskontrollService: TilgangskontrollService

@MockK
lateinit var validerBeregning: ValiderBeregning

@MockK
lateinit var validerBehandlingService: ValiderBehandlingService

lateinit var inntektService: InntektService

@BeforeEach
fun initMock() {
inntektRepository = stubInntektRepository()
val personService = PersonService(stubPersonConsumer())

val vedtakGrunnlagMapper =
VedtakGrunnlagMapper(
BehandlingTilGrunnlagMappingV2(personService, BeregnSamværsklasseApi(stubSjablonService())),
Expand All @@ -65,7 +77,15 @@ class InntektServiceMockTest {
personService,
BeregnGebyrApi(stubSjablonService()),
)
inntektService = InntektService(behandlingRepository, inntektRepository, notatService, GebyrService(vedtakGrunnlagMapper))
val dtomapper =
Dtomapper(
tilgangskontrollService,
validerBeregning,
validerBehandlingService,
vedtakGrunnlagMapper,
BeregnBarnebidragApi(),
)
inntektService = InntektService(behandlingRepository, inntektRepository, notatService, GebyrService(vedtakGrunnlagMapper), dtomapper)
every { inntektRepository.saveAll<Inntekt>(any()) } answers { firstArg() }
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -174,7 +174,7 @@ class VedtakserviceBidragTest : CommonVedtakTilBehandlingTest() {
val request = opprettVedtakRequest
request.type shouldBe Vedtakstype.FASTSETTELSE
withClue("Grunnlagliste skal inneholde ${request.grunnlagListe.size} grunnlag") {
request.grunnlagListe shouldHaveSize 171
request.grunnlagListe shouldHaveSize 172
}
}

Expand Down Expand Up @@ -227,7 +227,7 @@ class VedtakserviceBidragTest : CommonVedtakTilBehandlingTest() {
gebyrMottaker.kravhaver shouldBe Personident("NAV")
gebyrMottaker.mottaker shouldBe Personident("NAV")
gebyrMottaker.innkreving shouldBe Innkrevingstype.MED_INNKREVING
gebyrMottaker.resultatkode shouldBe Resultatkode.GEBYR_FRITTATT.name
gebyrMottaker.resultatkode shouldBe Resultatkode.GEBYR_FRITATT.name
gebyrMottaker.sak shouldBe Saksnummer(SAKSNUMMER)
gebyrMottaker.skyldner shouldBe Personident(testdataBM.ident)
gebyrMottaker.grunnlagReferanseListe shouldHaveSize 1
Expand Down Expand Up @@ -302,7 +302,7 @@ class VedtakserviceBidragTest : CommonVedtakTilBehandlingTest() {
hentGrunnlagstyper(Grunnlagstype.BEREGNET_INNTEKT) shouldHaveSize 3
hentGrunnlagstyper(Grunnlagstype.INNHENTET_INNTEKT_SKATTEGRUNNLAG_PERIODE) shouldHaveSize 5
hentGrunnlagstyper(Grunnlagstype.INNHENTET_INNTEKT_AINNTEKT) shouldHaveSize 3
hentGrunnlagstyper(Grunnlagstype.INNHENTET_TILLEGGSSTØNAD) shouldHaveSize 1
hentGrunnlagstyper(Grunnlagstype.INNHENTET_TILLEGGSSTØNAD_BEGRENSET) shouldHaveSize 1
hentGrunnlagstyper(Grunnlagstype.INNHENTET_BARNETILSYN) shouldHaveSize 1
hentGrunnlagstyper(Grunnlagstype.INNHENTET_INNTEKT_BARNETILLEGG) shouldHaveSize 1
hentGrunnlagstyper(Grunnlagstype.INNHENTET_INNTEKT_UTVIDETBARNETRYGD) shouldHaveSize 1
Expand Down Expand Up @@ -404,7 +404,7 @@ class VedtakserviceBidragTest : CommonVedtakTilBehandlingTest() {
gebyrMottaker.kravhaver shouldBe Personident("NAV")
gebyrMottaker.mottaker shouldBe Personident("NAV")
gebyrMottaker.innkreving shouldBe Innkrevingstype.MED_INNKREVING
gebyrMottaker.resultatkode shouldBe Resultatkode.GEBYR_FRITTATT.name
gebyrMottaker.resultatkode shouldBe Resultatkode.GEBYR_FRITATT.name
gebyrMottaker.sak shouldBe Saksnummer(SAKSNUMMER)
gebyrMottaker.skyldner shouldBe Personident(testdataBM.ident)
gebyrMottaker.grunnlagReferanseListe shouldHaveSize 1
Expand Down Expand Up @@ -851,7 +851,7 @@ class VedtakserviceBidragTest : CommonVedtakTilBehandlingTest() {
kravhaver shouldBe Personident("NAV")
mottaker shouldBe Personident("NAV")
innkreving shouldBe Innkrevingstype.MED_INNKREVING
resultatkode shouldBe Resultatkode.GEBYR_FRITTATT.name
resultatkode shouldBe Resultatkode.GEBYR_FRITATT.name
sak shouldBe Saksnummer(SAKSNUMMER)
skyldner shouldBe Personident(testdataBM.ident)
grunnlagReferanseListe shouldHaveSize 1
Expand Down Expand Up @@ -969,7 +969,7 @@ class VedtakserviceBidragTest : CommonVedtakTilBehandlingTest() {
kravhaver shouldBe Personident("NAV")
mottaker shouldBe Personident("NAV")
innkreving shouldBe Innkrevingstype.MED_INNKREVING
resultatkode shouldBe Resultatkode.GEBYR_FRITTATT.name
resultatkode shouldBe Resultatkode.GEBYR_FRITATT.name
sak shouldBe Saksnummer(SAKSNUMMER)
skyldner shouldBe Personident(testdataBM.ident)
grunnlagReferanseListe shouldHaveSize 1
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -373,7 +373,7 @@ class VedtakserviceTest : TestContainerRunner() {
hentGrunnlagstyper(Grunnlagstype.INNHENTET_INNTEKT_SKATTEGRUNNLAG_PERIODE) shouldHaveSize 8
hentGrunnlagstyper(Grunnlagstype.INNHENTET_INNTEKT_AINNTEKT) shouldHaveSize 3
hentGrunnlagstyper(Grunnlagstype.INNHENTET_INNTEKT_BARNETILLEGG) shouldHaveSize 2
hentGrunnlagstyper(Grunnlagstype.INNHENTET_TILLEGGSSTØNAD) shouldHaveSize 0
hentGrunnlagstyper(Grunnlagstype.INNHENTET_TILLEGGSSTØNAD_BEGRENSET) shouldHaveSize 0
hentGrunnlagstyper(Grunnlagstype.INNHENTET_INNTEKT_UTVIDETBARNETRYGD) shouldHaveSize 1
hentGrunnlagstyper(Grunnlagstype.INNHENTET_INNTEKT_SMÅBARNSTILLEGG) shouldHaveSize 1
hentGrunnlagstyper(Grunnlagstype.INNHENTET_INNTEKT_KONTANTSTØTTE) shouldHaveSize 1
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -112,4 +112,81 @@ class UtvidelserTest {
// så
barnetilsyn.under_skolealder shouldBe true
}

@Test
fun `skal sette til og med dato til null hvis etter virkning`() {
// gitt
val b =
oppretteTestbehandling(
setteDatabaseider = true,
inkludereBp = true,
behandlingstype = TypeBehandling.BIDRAG,
)

val barnetilsynGrunnlagDto =
oppretteBarnetilsynGrunnlagDto(b, periodeFraAntallMndTilbake = 13)
.copy(periodeTil = LocalDate.now().plusMonths(2))

val u = b.underholdskostnader.first()
b.virkningstidspunkt = LocalDate.now().plusMonths(1).withDayOfMonth(1)

// hvis
val barnetilsyn = barnetilsynGrunnlagDto.tilBarnetilsyn(u)

// så
barnetilsyn.tom shouldBe null
}

@Test
fun `skal sette til og med dato til null hvis etter dagens dato`() {
// gitt
val b =
oppretteTestbehandling(
setteDatabaseider = true,
inkludereBp = true,
behandlingstype = TypeBehandling.BIDRAG,
)

val barnetilsynGrunnlagDto =
oppretteBarnetilsynGrunnlagDto(b, periodeFraAntallMndTilbake = 13)
.copy(periodeTil = LocalDate.now().plusMonths(1))

val u = b.underholdskostnader.first()
b.virkningstidspunkt = LocalDate.now().minusMonths(3).withDayOfMonth(1)

// hvis
val barnetilsyn = barnetilsynGrunnlagDto.tilBarnetilsyn(u)

// så
barnetilsyn.tom shouldBe null
}

@Test
fun `skal sette til og med dato hvis før virkning`() {
// gitt
val b =
oppretteTestbehandling(
setteDatabaseider = true,
inkludereBp = true,
behandlingstype = TypeBehandling.BIDRAG,
)

val barnetilsynGrunnlagDto =
oppretteBarnetilsynGrunnlagDto(b, periodeFraAntallMndTilbake = 13)
.copy(periodeTil = LocalDate.now().minusMonths(4).plusMonths(1))

val u = b.underholdskostnader.first()
b.virkningstidspunkt = LocalDate.now().minusMonths(3).withDayOfMonth(1)

// hvis
val barnetilsyn = barnetilsynGrunnlagDto.tilBarnetilsyn(u)

// så
barnetilsyn.tom shouldBe
LocalDate
.now()
.minusMonths(4)
.plusMonths(1)
.minusDays(1)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -140,7 +140,7 @@ class VedtakGrunnlagMapperTest {
skattepliktigInntekt shouldBe BigDecimal(900000)
maksBarnetillegg shouldBe null
beløpGebyrsats shouldBe BigDecimal(1277)
resultatkode shouldBe Resultatkode.GEBYR_FRITTATT
resultatkode shouldBe Resultatkode.GEBYR_FRITATT
grunnlagsreferanseListeEngangsbeløp shouldHaveSize 2
grunnlagsreferanseListeEngangsbeløp shouldContain grunnlagsliste.find { it.type == Grunnlagstype.SLUTTBEREGNING_GEBYR }!!.referanse
grunnlagsreferanseListeEngangsbeløp shouldContain grunnlagsliste.find { it.type == Grunnlagstype.INNTEKT_RAPPORTERING_PERIODE }!!.referanse
Expand Down Expand Up @@ -191,7 +191,7 @@ class VedtakGrunnlagMapperTest {
skattepliktigInntekt shouldBe BigDecimal(900000)
maksBarnetillegg shouldBe null
beløpGebyrsats shouldBe BigDecimal(1277)
resultatkode shouldBe Resultatkode.GEBYR_FRITTATT
resultatkode shouldBe Resultatkode.GEBYR_FRITATT
grunnlagsreferanseListeEngangsbeløp shouldHaveSize 2
grunnlagsreferanseListeEngangsbeløp shouldContain grunnlagsliste.find { it.type == Grunnlagstype.SLUTTBEREGNING_GEBYR }!!.referanse
grunnlagsreferanseListeEngangsbeløp shouldContain grunnlagsliste.find { it.type == Grunnlagstype.INNTEKT_RAPPORTERING_PERIODE }!!.referanse
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4829,7 +4829,7 @@
"mottaker": "NAV",
"beløp": null,
"valutakode": null,
"resultatkode": "GEBYR_FRITTATT",
"resultatkode": "GEBYR_FRITATT",
"innkreving": "MED_INNKREVING",
"beslutning": "ENDRING",
"omgjørVedtakId": null,
Expand Down
Loading