1
1
package no.nav.bidrag.beregn.vedtak
2
2
3
3
import no.nav.bidrag.commons.util.secureLogger
4
+ import no.nav.bidrag.domene.enums.vedtak.Stønadstype
4
5
import no.nav.bidrag.domene.enums.vedtak.Vedtakstype
5
6
import no.nav.bidrag.domene.ident.Personident
6
7
import no.nav.bidrag.transport.behandling.vedtak.response.VedtakForStønad
7
- import no.nav.bidrag.transport.behandling.vedtak.response.VedtakPeriodeDto
8
8
import no.nav.bidrag.transport.behandling.vedtak.response.søknadKlageRefId
9
- import no.nav.bidrag.transport.behandling.vedtak.response.søknadsid
10
9
import org.springframework.stereotype.Service
11
- import java.math.BigDecimal
12
10
13
11
@Service
14
12
class Vedtaksfiltrering {
@@ -22,7 +20,7 @@ class Vedtaksfiltrering {
22
20
* @return vedtak for evnevurdering for stønaden
23
21
*/
24
22
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())
26
24
27
25
while (iterator.hasNext()) {
28
26
val vedtaksdetaljer = iterator.next()
@@ -63,67 +61,44 @@ class Vedtaksfiltrering {
63
61
return null
64
62
}
65
63
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())
92
76
93
- private fun forberedeNeste () {
94
77
while (iterator.hasNext()) {
95
78
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
98
85
}
99
- vedtaksdetaljer.erOmgjort = omgjorteVedtak.contains(vedtaksdetaljer.vedtak.idTilOmgjortVedtak())
100
- nesteVedtak = vedtaksdetaljer
101
- return
102
- }
103
86
104
- nesteVedtak = null
105
- }
87
+ // Hopp over indeksregulering
88
+ if (listOf (Vedtakstype .INDEKSREGULERING , Vedtakstype .ALDERSJUSTERING ).contains(vedtaksdetaljer.vedtak.type)) {
89
+ continue
90
+ }
106
91
107
- fun hoppeTilP åklagetVedtak (referanseTilPåklagetVedtak : Long ) {
108
- while (nesteVedtak != null && nesteVedtak!! .vedtak.søknadsid != referanseTilPåklagetVedtak) {
109
- forberedeNeste()
92
+ return vedtaksdetaljer.vedtak
110
93
}
111
- }
112
94
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
117
97
}
118
98
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)
123
101
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())
129
104
}
0 commit comments