Skip to content

Commit e959136

Browse files
authored
Filtrering av siste manuelle vedtak
* Filtrering av siste manuelle vedtak * Filtrering av siste manuelle vedtak
1 parent 48de537 commit e959136

File tree

3 files changed

+99
-57
lines changed

3 files changed

+99
-57
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
package no.nav.bidrag.beregn.vedtak
2+
3+
import no.nav.bidrag.transport.behandling.vedtak.response.VedtakForStønad
4+
import no.nav.bidrag.transport.behandling.vedtak.response.VedtakPeriodeDto
5+
import no.nav.bidrag.transport.behandling.vedtak.response.søknadsid
6+
import java.math.BigDecimal
7+
8+
data class Vedtaksdetaljer(var erOmgjort: Boolean = false, val vedtak: VedtakForStønad, val periode: VedtakPeriodeDto)
9+
10+
class Vedtaksiterator(vedtakssamling: Collection<Vedtaksdetaljer>) : Iterator<Vedtaksdetaljer> {
11+
12+
private val iterator: Iterator<Vedtaksdetaljer> = vedtakssamling.asSequence().sortedByDescending { it.periode.delytelseId }.iterator()
13+
private var nesteVedtak: Vedtaksdetaljer? = null
14+
private var omgjorteVedtak = emptySet<Long>()
15+
16+
init {
17+
forberedeNeste()
18+
}
19+
20+
override fun hasNext(): Boolean = nesteVedtak != null
21+
22+
override fun next(): Vedtaksdetaljer {
23+
if (!hasNext()) {
24+
throw NoSuchElementException("Har ikke flere vedtak å iterere over.")
25+
}
26+
val neste = nesteVedtak
27+
forberedeNeste()
28+
return neste!!
29+
}
30+
31+
private fun forberedeNeste() {
32+
while (iterator.hasNext()) {
33+
val vedtaksdetaljer = iterator.next()
34+
if (vedtaksdetaljer.vedtak.stønadsendring.erEndring() && vedtaksdetaljer.vedtak.erKlage()) {
35+
omgjorteVedtak.plus(vedtaksdetaljer.vedtak.idTilOmgjortVedtak())
36+
}
37+
vedtaksdetaljer.erOmgjort = omgjorteVedtak.contains(vedtaksdetaljer.vedtak.idTilOmgjortVedtak())
38+
nesteVedtak = vedtaksdetaljer
39+
return
40+
}
41+
42+
nesteVedtak = null
43+
}
44+
45+
fun hoppeTilPåklagetVedtak(referanseTilPåklagetVedtak: Long) {
46+
while (nesteVedtak != null && nesteVedtak!!.vedtak.søknadsid != referanseTilPåklagetVedtak) {
47+
forberedeNeste()
48+
}
49+
}
50+
51+
fun hoppeTilBeløp(beløp: BigDecimal?) {
52+
while (nesteVedtak != null && !erSammeBeløp(nesteVedtak!!.periode.beløp, beløp)) {
53+
forberedeNeste()
54+
}
55+
}
56+
57+
fun erSammeBeløp(beløpA: BigDecimal?, beløpB: BigDecimal?): Boolean {
58+
if (beløpA == null) return beløpB == null
59+
return beløpB != null && beløpA.compareTo(beløpB) == 0
60+
}
61+
62+
fun hoppeTilOmgjortVedtak(idTilOmgjortVedtak: Long) {
63+
while (nesteVedtak != null && nesteVedtak!!.vedtak.vedtaksid != idTilOmgjortVedtak) {
64+
forberedeNeste()
65+
}
66+
}
67+
}
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,12 @@
11
package no.nav.bidrag.beregn.vedtak
22

33
import no.nav.bidrag.commons.util.secureLogger
4+
import no.nav.bidrag.domene.enums.vedtak.Stønadstype
45
import no.nav.bidrag.domene.enums.vedtak.Vedtakstype
56
import no.nav.bidrag.domene.ident.Personident
67
import no.nav.bidrag.transport.behandling.vedtak.response.VedtakForStønad
7-
import no.nav.bidrag.transport.behandling.vedtak.response.VedtakPeriodeDto
88
import no.nav.bidrag.transport.behandling.vedtak.response.søknadKlageRefId
9-
import no.nav.bidrag.transport.behandling.vedtak.response.søknadsid
109
import org.springframework.stereotype.Service
11-
import java.math.BigDecimal
1210

1311
@Service
1412
class Vedtaksfiltrering {
@@ -22,7 +20,7 @@ class Vedtaksfiltrering {
2220
* @return vedtak for evnevurdering for stønaden
2321
*/
2422
fun finneVedtakForEvnevurdering(vedtak: Collection<VedtakForStønad>, personidentSøknadsbarn: Personident): VedtakForStønad? {
25-
val iterator = Vedtaksiterator(vedtak.filter { it.filtrereBortIrrelevanteVedtak() }.tilVedtaksdetaljer())
23+
val iterator = Vedtaksiterator(vedtak.filter { it.filtrereBortIrrelevanteVedtakBidrag() }.tilVedtaksdetaljer())
2624

2725
while (iterator.hasNext()) {
2826
val vedtaksdetaljer = iterator.next()
@@ -63,67 +61,44 @@ class Vedtaksfiltrering {
6361
return null
6462
}
6563

66-
private fun VedtakForStønad.filtrereBortIrrelevanteVedtak(): Boolean =
67-
erInnkreving() && !erIkkeRelevant() && (erBidrag() || er18årsbidrag() || erOppfostringsbidrag())
68-
}
69-
70-
data class Vedtaksdetaljer(var erOmgjort: Boolean = false, val vedtak: VedtakForStønad, val periode: VedtakPeriodeDto)
71-
72-
class Vedtaksiterator(vedtakssamling: Collection<Vedtaksdetaljer>) : Iterator<Vedtaksdetaljer> {
73-
74-
private val iterator: Iterator<Vedtaksdetaljer> = vedtakssamling.asSequence().sortedByDescending { it.periode.delytelseId }.iterator()
75-
private var nesteVedtak: Vedtaksdetaljer? = null
76-
private var omgjorteVedtak = emptySet<Long>()
77-
78-
init {
79-
forberedeNeste()
80-
}
81-
82-
override fun hasNext(): Boolean = nesteVedtak != null
83-
84-
override fun next(): Vedtaksdetaljer {
85-
if (!hasNext()) {
86-
throw NoSuchElementException("Har ikke flere vedtak å iterere over.")
87-
}
88-
val neste = nesteVedtak
89-
forberedeNeste()
90-
return neste!!
91-
}
64+
/**
65+
* Finner vedtak siste manuelle vedtak for stønadstype
66+
* @param vedtak samling vedtak for stønad som sendes inn til metoden
67+
* @param personidentSøknadsbarn personidenSøknadsbarn typisk fødselsnummer til søknadsbarnet stønaden og vedtakene gjelder for
68+
* @return Siste manuelle vedtak
69+
*/
70+
fun finneSisteManuelleVedtak(
71+
vedtak: Collection<VedtakForStønad>,
72+
personidentSøknadsbarn: Personident,
73+
stønadstype: Stønadstype,
74+
): VedtakForStønad? {
75+
val iterator = Vedtaksiterator(vedtak.filter { it.filtrereBortIrrelevanteVedtak(stønadstype) }.tilVedtaksdetaljer())
9276

93-
private fun forberedeNeste() {
9477
while (iterator.hasNext()) {
9578
val vedtaksdetaljer = iterator.next()
96-
if (vedtaksdetaljer.vedtak.stønadsendring.erEndring() && vedtaksdetaljer.vedtak.erKlage()) {
97-
omgjorteVedtak.plus(vedtaksdetaljer.vedtak.idTilOmgjortVedtak())
79+
80+
// Håndtere resultat fra annet vedtak
81+
if (vedtaksdetaljer.vedtak.erResultatFraAnnetVedtak()) {
82+
iterator.hoppeTilBeløp(vedtaksdetaljer.periode.beløp)
83+
if (!iterator.hasNext()) return null
84+
continue
9885
}
99-
vedtaksdetaljer.erOmgjort = omgjorteVedtak.contains(vedtaksdetaljer.vedtak.idTilOmgjortVedtak())
100-
nesteVedtak = vedtaksdetaljer
101-
return
102-
}
10386

104-
nesteVedtak = null
105-
}
87+
// Hopp over indeksregulering
88+
if (listOf(Vedtakstype.INDEKSREGULERING, Vedtakstype.ALDERSJUSTERING).contains(vedtaksdetaljer.vedtak.type)) {
89+
continue
90+
}
10691

107-
fun hoppeTilPåklagetVedtak(referanseTilPåklagetVedtak: Long) {
108-
while (nesteVedtak != null && nesteVedtak!!.vedtak.søknadsid != referanseTilPåklagetVedtak) {
109-
forberedeNeste()
92+
return vedtaksdetaljer.vedtak
11093
}
111-
}
11294

113-
fun hoppeTilBeløp(beløp: BigDecimal?) {
114-
while (nesteVedtak != null && !erSammeBeløp(nesteVedtak!!.periode.beløp, beløp)) {
115-
forberedeNeste()
116-
}
95+
secureLogger.warn { "Fant ikke tidligere vedtak for barn med personident $personidentSøknadsbarn" }
96+
return null
11797
}
11898

119-
fun erSammeBeløp(beløpA: BigDecimal?, beløpB: BigDecimal?): Boolean {
120-
if (beløpA == null) return beløpB == null
121-
return beløpB != null && beløpA.compareTo(beløpB) == 0
122-
}
99+
private fun VedtakForStønad.filtrereBortIrrelevanteVedtak(forStønad: Stønadstype): Boolean =
100+
erInnkreving() && !erIkkeRelevant() && (stønadsendring.type == forStønad)
123101

124-
fun hoppeTilOmgjortVedtak(idTilOmgjortVedtak: Long) {
125-
while (nesteVedtak != null && nesteVedtak!!.vedtak.vedtaksid != idTilOmgjortVedtak) {
126-
forberedeNeste()
127-
}
128-
}
102+
private fun VedtakForStønad.filtrereBortIrrelevanteVedtakBidrag(): Boolean =
103+
erInnkreving() && !erIkkeRelevant() && (erBidrag() || er18årsbidrag() || erOppfostringsbidrag())
129104
}

pom.xml

+1-1
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919
<jackson.version>2.18.3</jackson.version>
2020
<kotest.version>5.9.1</kotest.version>
2121
<swagger.version>2.2.28</swagger.version>
22-
<bidrag-felles.version>2025.03.16.122629</bidrag-felles.version>
22+
<bidrag-felles.version>2025.03.17.104606</bidrag-felles.version>
2323
<ktlint.version>1.5.0</ktlint.version>
2424
<spring-boot.version>3.4.3</spring-boot.version>
2525
<kotlin-logging-jvm.version>7.0.5</kotlin-logging-jvm.version>

0 commit comments

Comments
 (0)