Skip to content

Commit 4f975bf

Browse files
committed
Lagrer opptjeningsperiode når inntekt lagres i database og henter den ut igjen når data skal sendes til nytt frontend
1 parent e363fd1 commit 4f975bf

File tree

9 files changed

+88
-14
lines changed

9 files changed

+88
-14
lines changed

dp-inntekt-api/src/main/kotlin/no/nav/dagpenger/inntekt/api/v1/UklassifisertInntektRoute.kt

Lines changed: 17 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -147,13 +147,13 @@ fun Route.uklassifisertInntekt(
147147
val inntektId = InntektId(call.parameters["inntektId"]!!)
148148
inntektStore
149149
.getStoredInntektMedMetadata(inntektId)
150-
.let {
151-
val person = personOppslag.hentPerson(it.fødselsnummer)
152-
val inntektsmottaker = Inntektsmottaker(it.fødselsnummer, person.sammensattNavn())
150+
.let { storedInntektMedMetadata ->
151+
val person = personOppslag.hentPerson(storedInntektMedMetadata.fødselsnummer)
152+
val inntektsmottaker = Inntektsmottaker(storedInntektMedMetadata.fødselsnummer, person.sammensattNavn())
153153
val organisasjoner =
154154
hentOrganisasjoner(
155155
enhetsregisterClient,
156-
it.inntekt.arbeidsInntektMaaned
156+
storedInntektMedMetadata.inntekt.arbeidsInntektMaaned
157157
?.flatMap { it.arbeidsInntektInformasjon?.inntektListe.orEmpty() }
158158
?.filter { inntekt ->
159159
inntekt.virksomhet?.aktoerType == AktoerType.ORGANISASJON &&
@@ -162,7 +162,12 @@ fun Route.uklassifisertInntekt(
162162
?.toTypedArray()
163163
?.toList() ?: emptyList(),
164164
)
165-
it.inntekt.mapToFrontend(inntektsmottaker, organisasjoner)
165+
storedInntektMedMetadata.inntekt.mapToFrontend(
166+
person = inntektsmottaker,
167+
organisasjoner = organisasjoner,
168+
beregningsdato = storedInntektMedMetadata.beregningsdato,
169+
storedInntektPeriode = storedInntektMedMetadata.storedInntektPeriode,
170+
)
166171
}.let {
167172
call.respond(HttpStatusCode.OK, it)
168173
}
@@ -171,8 +176,9 @@ fun Route.uklassifisertInntekt(
171176
post {
172177
withContext(coroutineContext) {
173178
val inntektId = call.parameters["inntektId"]!!
174-
call
175-
.receive<InntekterDto>()
179+
val inntekterDto = call.receive<InntekterDto>()
180+
181+
inntekterDto
176182
.mapToStoredInntekt(
177183
inntektId = inntektId,
178184
).let {
@@ -189,7 +195,10 @@ fun Route.uklassifisertInntekt(
189195
inntektPersonMapping.kontekstType,
190196
),
191197
beregningsdato = inntektPersonMapping.beregningsdato,
192-
),
198+
).apply {
199+
this.opptjeningsperiode.førsteMåned = inntekterDto.periode.fraOgMed
200+
this.opptjeningsperiode.sisteAvsluttendeKalenderMåned = inntekterDto.periode.tilOgMed
201+
},
193202
inntekt = it.inntekt,
194203
manueltRedigert =
195204
ManueltRedigert.from(

dp-inntekt-api/src/main/kotlin/no/nav/dagpenger/inntekt/api/v1/models/InntekterDto.kt

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,12 @@ import java.time.YearMonth
1717
data class InntekterDto(
1818
val virksomheter: List<Virksomhet>,
1919
val mottaker: Inntektsmottaker,
20+
val periode: PeriodeDto,
21+
)
22+
23+
data class PeriodeDto(
24+
val fraOgMed: YearMonth,
25+
val tilOgMed: YearMonth,
2026
)
2127

2228
fun InntekterDto.mapToStoredInntekt(inntektId: String): StoredInntekt =

dp-inntekt-api/src/main/kotlin/no/nav/dagpenger/inntekt/db/InntektStore.kt

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import no.nav.dagpenger.inntekt.opptjeningsperiode.Opptjeningsperiode
66
import no.nav.dagpenger.inntekt.v1.SpesifisertInntekt
77
import java.time.LocalDate
88
import java.time.LocalDateTime
9+
import java.time.YearMonth
910
import java.time.ZoneOffset
1011
import java.time.ZonedDateTime
1112

@@ -108,6 +109,13 @@ data class StoredInntektMedMetadata(
108109
val manueltRedigert: Boolean,
109110
val timestamp: LocalDateTime? = null,
110111
valdselsnummer: String,
112+
val beregningsdato: LocalDate,
113+
val storedInntektPeriode: StoredInntektPeriode?,
114+
)
115+
116+
data class StoredInntektPeriode(
117+
val fraOgMed: YearMonth?,
118+
val tilOgMed: YearMonth?,
111119
)
112120

113121
class InntektNotFoundException(

dp-inntekt-api/src/main/kotlin/no/nav/dagpenger/inntekt/db/PostgresInntektStore.kt

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ import org.intellij.lang.annotations.Language
1818
import org.postgresql.util.PGobject
1919
import org.postgresql.util.PSQLException
2020
import java.time.LocalDate
21+
import java.time.YearMonth
2122
import java.time.ZonedDateTime
2223
import javax.sql.DataSource
2324

@@ -191,7 +192,7 @@ internal class PostgresInntektStore(
191192
@Language("sql")
192193
val statement =
193194
"""
194-
SELECT inntekt.id, inntekt.inntekt, inntekt.manuelt_redigert, inntekt.timestamp, mapping.fnr
195+
SELECT inntekt.id, inntekt.inntekt, inntekt.manuelt_redigert, inntekt.timestamp, mapping.fnr, mapping.periodeFraOgMed, mapping.periodeTilOgMed
195196
from inntekt_V1 inntekt
196197
inner join inntekt_V1_person_mapping mapping on inntekt.id = mapping.inntektid
197198
where inntekt.id = ?
@@ -208,6 +209,12 @@ internal class PostgresInntektStore(
208209
manueltRedigert = it.boolean("manuelt_redigert"),
209210
timestamp = it.zonedDateTime("timestamp").toLocalDateTime(),
210211
fødselsnummer = it.string("fnr"),
212+
beregningsdato = it.localDate("beregningsdato"),
213+
storedInntektPeriode =
214+
StoredInntektPeriode(
215+
fraOgMed = it.localDateOrNull("periodeFraOgMed")?.let { localDate -> YearMonth.from(localDate) },
216+
tilOgMed = it.localDateOrNull("periodeTilOgMed")?.let { localDate -> YearMonth.from(localDate) },
217+
),
211218
)
212219
}.asSingle,
213220
) ?: throw InntektNotFoundException("Inntekt with id $inntektId not found.")
@@ -242,14 +249,25 @@ internal class PostgresInntektStore(
242249
)
243250
tx.run(
244251
queryOf(
245-
"INSERT INTO inntekt_V1_person_mapping(inntektId, aktørId, fnr, kontekstId, beregningsdato, kontekstType) VALUES (:inntektId, :aktorId, :fnr, :kontekstId, :beregningsdato, :kontekstType::kontekstTypeNavn)",
252+
"""
253+
INSERT INTO inntekt_V1_person_mapping(inntektId, aktørId, fnr, kontekstId, beregningsdato, kontekstType, periodeFraOgMed, periodeTilOgMed)
254+
VALUES (:inntektId, :aktorId, :fnr, :kontekstId, :beregningsdato, :kontekstType::kontekstTypeNavn, :periodeFraOgMed, :periodeTilOgMed)
255+
""".trimIndent(),
246256
mapOf(
247257
"inntektId" to inntektId.id,
248258
"aktorId" to command.inntektparametre.aktørId,
249259
"fnr" to command.inntektparametre.fødselsnummer,
250260
"kontekstId" to command.inntektparametre.regelkontekst.id,
251261
"kontekstType" to command.inntektparametre.regelkontekst.type,
252262
"beregningsdato" to command.inntektparametre.beregningsdato,
263+
"periodeFraOgMed" to
264+
command.inntektparametre.opptjeningsperiode.førsteMåned.let {
265+
LocalDate.of(it.year, it.month, 1)
266+
},
267+
"periodeTilOgMed" to
268+
command.inntektparametre.opptjeningsperiode.sisteAvsluttendeKalenderMåned.let {
269+
LocalDate.of(it.year, it.month, 1)
270+
},
253271
),
254272
).asUpdate,
255273
)

dp-inntekt-api/src/main/kotlin/no/nav/dagpenger/inntekt/mapping/MapToInntektFrontend.kt

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,25 @@
11
package no.nav.dagpenger.inntekt.mapping
22

33
import no.nav.dagpenger.inntekt.api.v1.models.InntekterDto
4+
import no.nav.dagpenger.inntekt.api.v1.models.PeriodeDto
5+
import no.nav.dagpenger.inntekt.db.StoredInntektPeriode
46
import no.nav.dagpenger.inntekt.inntektskomponenten.v1.Aktoer
57
import no.nav.dagpenger.inntekt.inntektskomponenten.v1.Avvik
68
import no.nav.dagpenger.inntekt.inntektskomponenten.v1.InntektBeskrivelse
79
import no.nav.dagpenger.inntekt.inntektskomponenten.v1.InntektType
810
import no.nav.dagpenger.inntekt.inntektskomponenten.v1.InntektkomponentResponse
911
import no.nav.dagpenger.inntekt.inntektskomponenten.v1.Periode
1012
import no.nav.dagpenger.inntekt.inntektskomponenten.v1.TilleggInformasjon
13+
import no.nav.dagpenger.inntekt.opptjeningsperiode.Opptjeningsperiode
1114
import java.math.BigDecimal
15+
import java.time.LocalDate
1216
import java.time.YearMonth
1317

1418
fun InntektkomponentResponse.mapToFrontend(
1519
person: Inntektsmottaker,
1620
organisasjoner: List<Organisasjon>,
21+
beregningsdato: LocalDate,
22+
storedInntektPeriode: StoredInntektPeriode?,
1723
): InntekterDto {
1824
val inntekt = arbeidsInntektMaaned
1925
val virksomheter: MutableList<Virksomhet> = mutableListOf()
@@ -99,6 +105,18 @@ fun InntektkomponentResponse.mapToFrontend(
99105
return InntekterDto(
100106
virksomheter = virksomheter,
101107
mottaker = person,
108+
periode = getPeriode(storedInntektPeriode, beregningsdato),
109+
)
110+
}
111+
112+
private fun getPeriode(
113+
storedInntektPeriode: StoredInntektPeriode?,
114+
beregningsdato: LocalDate,
115+
): PeriodeDto {
116+
val opptjeningsperiode = Opptjeningsperiode(beregningsdato)
117+
return PeriodeDto(
118+
storedInntektPeriode?.fraOgMed ?: opptjeningsperiode.førsteMåned,
119+
storedInntektPeriode?.tilOgMed ?: opptjeningsperiode.sisteAvsluttendeKalenderMåned,
102120
)
103121
}
104122

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
ALTER TABLE inntekt_v1_person_mapping
2+
ADD COLUMN periodeFraOgMed DATE,
3+
ADD COLUMN periodeTilOgMed DATE;

dp-inntekt-api/src/test/kotlin/no/nav/dagpenger/inntekt/api/v1/UklassifisertInntektRouteTest.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -504,6 +504,8 @@ internal class UklassifisertInntektRouteTest {
504504
manueltRedigert = false,
505505
timestamp = LocalDateTime.now(),
506506
fødselsnummer = fødselsnummer,
507+
beregningsdato = LocalDate.now(),
508+
null,
507509
)
508510

509511
val response =

dp-inntekt-api/src/test/kotlin/no/nav/dagpenger/inntekt/db/PostgresTest.kt

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ internal class PostgresTest {
2929
fun `Migration scripts are applied successfully`() {
3030
withCleanDb {
3131
val migrations = PostgresDataSourceBuilder.runMigration()
32-
assertEquals(16, migrations, "Wrong number of migrations")
32+
assertEquals(17, migrations, "Wrong number of migrations")
3333
}
3434
}
3535

@@ -45,7 +45,7 @@ internal class PostgresTest {
4545
fun `Migration of testdata `() {
4646
withCleanDb {
4747
val migrations = PostgresDataSourceBuilder.runMigration(locations = listOf("db/migration", "db/testdata"))
48-
assertEquals(21, migrations, "Wrong number of migrations")
48+
assertEquals(22, migrations, "Wrong number of migrations")
4949
}
5050
}
5151
}
@@ -474,7 +474,9 @@ internal class InntektsStorePropertyTest : StringSpec() {
474474
regelkontekst = RegelKontekst(kontekstId.next(it), "vedtak"),
475475
fødselsnummer = aktørId.next(it),
476476
beregningsdato =
477-
Arb.localDateTime(minYear = 2010, maxYear = LocalDate.now().year).next(it)
477+
Arb
478+
.localDateTime(minYear = 2010, maxYear = LocalDate.now().year)
479+
.next(it)
478480
.toLocalDate(),
479481
),
480482
inntekt =

dp-inntekt-api/src/test/kotlin/no/nav/dagpenger/inntekt/mapping/MapToInntektFrontendTest.kt

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import no.nav.dagpenger.inntekt.inntektskomponenten.v1.TilleggInformasjon
1212
import no.nav.dagpenger.inntekt.serder.jacksonObjectMapper
1313
import org.junit.jupiter.api.Test
1414
import java.math.BigDecimal
15+
import java.time.LocalDate.now
1516
import java.time.YearMonth
1617
import kotlin.test.assertEquals
1718
import kotlin.test.assertFalse
@@ -189,6 +190,8 @@ class MapToInntektFrontendTest {
189190
inntektkomponentResponse.mapToFrontend(
190191
mottaker,
191192
organisasjoner,
193+
beregningsdato = now(),
194+
storedInntektPeriode = null,
192195
)
193196

194197
assertEquals(2, mappedToInntektFrontend.virksomheter.size)
@@ -331,7 +334,12 @@ class MapToInntektFrontendTest {
331334
)
332335

333336
val mapTilFrontendMedNullVirksomhet =
334-
inntektkomponentResponseMedTomVirksomhet.mapToFrontend(mottaker, organisasjoner)
337+
inntektkomponentResponseMedTomVirksomhet.mapToFrontend(
338+
mottaker,
339+
organisasjoner,
340+
beregningsdato = now(),
341+
storedInntektPeriode = null,
342+
)
335343
assertEquals(3, mapTilFrontendMedNullVirksomhet.virksomheter.size)
336344
assertEquals(2, mapTilFrontendMedNullVirksomhet.virksomheter.filter { it.virksomhetsnummer == "" }.size)
337345
assertEquals(1, mapTilFrontendMedNullVirksomhet.virksomheter.filter { it.virksomhetsnummer == "896929120" }.size)

0 commit comments

Comments
 (0)