diff --git a/spesialist-felles/src/main/kotlin/no/nav/helse/HelseDao.kt b/spesialist-felles/src/main/kotlin/no/nav/helse/HelseDao.kt index 9b3f2d2f5..3a702bb5e 100644 --- a/spesialist-felles/src/main/kotlin/no/nav/helse/HelseDao.kt +++ b/spesialist-felles/src/main/kotlin/no/nav/helse/HelseDao.kt @@ -22,6 +22,11 @@ abstract class HelseDao(private val dataSource: DataSource) { fun Query.single(mapping: (Row) -> T?) = sessionOf(dataSource, strict = true).use { session -> session.run(this.map { mapping(it) }.asSingle) } + fun Query.single( + session: TransactionalSession, + mapping: (Row) -> T?, + ) = session.run(this.map { mapping(it) }.asSingle) + fun Query.list(mapping: (Row) -> T?) = sessionOf(dataSource).use { session -> session.run(this.map { mapping(it) }.asList) } fun Query.list( diff --git a/spesialist-modell/src/main/kotlin/no/nav/helse/modell/vedtak/Avslag.kt b/spesialist-modell/src/main/kotlin/no/nav/helse/modell/vedtak/Avslag.kt index b29502192..7e13ca412 100644 --- a/spesialist-modell/src/main/kotlin/no/nav/helse/modell/vedtak/Avslag.kt +++ b/spesialist-modell/src/main/kotlin/no/nav/helse/modell/vedtak/Avslag.kt @@ -8,6 +8,12 @@ class Avslag( vedtakBuilder.avslagData(type, begrunnelse) } + fun toDto() = + AvslagDto( + type = type.toDto(), + begrunnelse = begrunnelse, + ) + override fun equals(other: Any?): Boolean { if (this === other) return true if (javaClass != other?.javaClass) return false @@ -30,4 +36,11 @@ class Avslag( enum class Avslagstype { AVSLAG, DELVIS_AVSLAG, + ; + + internal fun toDto() = + when (this) { + AVSLAG -> AvslagstypeDto.AVSLAG + DELVIS_AVSLAG -> AvslagstypeDto.DELVIS_AVSLAG + } } diff --git a/spesialist-modell/src/main/kotlin/no/nav/helse/modell/vedtak/Sykepengevedtak.kt b/spesialist-modell/src/main/kotlin/no/nav/helse/modell/vedtak/Sykepengevedtak.kt index fb04bd6d5..c9761c7f1 100644 --- a/spesialist-modell/src/main/kotlin/no/nav/helse/modell/vedtak/Sykepengevedtak.kt +++ b/spesialist-modell/src/main/kotlin/no/nav/helse/modell/vedtak/Sykepengevedtak.kt @@ -171,6 +171,11 @@ data class SkjønnsfastsettingopplysningerDto( ) data class AvslagDto( - val type: Avslagstype, + val type: AvslagstypeDto, val begrunnelse: String, ) + +enum class AvslagstypeDto { + AVSLAG, + DELVIS_AVSLAG, +} diff --git a/spesialist-modell/src/main/kotlin/no/nav/helse/modell/vedtak/SykepengevedtakBuilder.kt b/spesialist-modell/src/main/kotlin/no/nav/helse/modell/vedtak/SykepengevedtakBuilder.kt index 52efc2b9f..1d98c0705 100644 --- a/spesialist-modell/src/main/kotlin/no/nav/helse/modell/vedtak/SykepengevedtakBuilder.kt +++ b/spesialist-modell/src/main/kotlin/no/nav/helse/modell/vedtak/SykepengevedtakBuilder.kt @@ -108,7 +108,14 @@ class SykepengevedtakBuilder { type: Avslagstype, begrunnelse: String, ) = apply { - this.avslag = AvslagDto(type, begrunnelse) + this.avslag = + AvslagDto( + when (type) { + Avslagstype.AVSLAG -> AvslagstypeDto.AVSLAG + Avslagstype.DELVIS_AVSLAG -> AvslagstypeDto.DELVIS_AVSLAG + }, + begrunnelse, + ) } fun build(): Sykepengevedtak { diff --git a/spesialist-modell/src/test/kotlin/no/nav/helse/modell/vedtak/SykepengevedtakBuilderTest.kt b/spesialist-modell/src/test/kotlin/no/nav/helse/modell/vedtak/SykepengevedtakBuilderTest.kt index f214a8225..78da5f339 100644 --- a/spesialist-modell/src/test/kotlin/no/nav/helse/modell/vedtak/SykepengevedtakBuilderTest.kt +++ b/spesialist-modell/src/test/kotlin/no/nav/helse/modell/vedtak/SykepengevedtakBuilderTest.kt @@ -216,7 +216,7 @@ class SykepengevedtakBuilderTest { utbetalingId = utbetalingId, skjønnsfastsettingopplysninger = null, tags = setOf("IngenNyArbeidsgiverperiode"), - avslag = AvslagDto(Avslagstype.DELVIS_AVSLAG, "En individuell begrunnelse for avslag"), + avslag = AvslagDto(AvslagstypeDto.DELVIS_AVSLAG, "En individuell begrunnelse for avslag"), ), utkast, ) @@ -292,7 +292,7 @@ class SykepengevedtakBuilderTest { Skjønnsfastsettingsårsak.ANDRE_AVSNITT, ), tags = setOf("IngenNyArbeidsgiverperiode"), - avslag = AvslagDto(Avslagstype.AVSLAG, "En individuell begrunnelse for avslag"), + avslag = AvslagDto(AvslagstypeDto.AVSLAG, "En individuell begrunnelse for avslag"), ), utkast, ) diff --git a/spesialist-selve/src/main/kotlin/no/nav/helse/db/AvslagDao.kt b/spesialist-selve/src/main/kotlin/no/nav/helse/db/AvslagDao.kt index c19b8da9e..67a509092 100644 --- a/spesialist-selve/src/main/kotlin/no/nav/helse/db/AvslagDao.kt +++ b/spesialist-selve/src/main/kotlin/no/nav/helse/db/AvslagDao.kt @@ -1,12 +1,14 @@ package no.nav.helse.db +import kotliquery.TransactionalSession import no.nav.helse.HelseDao import no.nav.helse.modell.vedtak.Avslag +import no.nav.helse.modell.vedtak.AvslagDto import no.nav.helse.spesialist.api.graphql.mutation.Avslagsdata import java.util.UUID import javax.sql.DataSource -class AvslagDao(private val dataSource: DataSource) : HelseDao(dataSource) { +class AvslagDao(dataSource: DataSource) : HelseDao(dataSource) { private fun lagreBegrunnelse( avslagsdata: Avslagsdata, saksbehandlerOid: UUID, @@ -99,6 +101,34 @@ class AvslagDao(private val dataSource: DataSource) : HelseDao(dataSource) { } } + internal fun TransactionalSession.finnAvslag( + vedtaksperiodeId: UUID, + generasjonId: Long, + ) = asSQL( + """ + SELECT begrunnelse_ref FROM avslag + WHERE vedtaksperiode_id = :vedtaksperiodeId + AND generasjon_ref = :generasjonId + AND invalidert = false + ORDER BY opprettet DESC LIMIT 1 + """.trimIndent(), + mapOf( + "vedtaksperiodeId" to vedtaksperiodeId, + "generasjonId" to generasjonId, + ), + ).single(this) { + it.longOrNull("begrunnelse_ref")?.let { begrunnelseRef -> + asSQL( + """ + SELECT type, tekst FROM begrunnelse WHERE id = :begrunnelseRef + """.trimIndent(), + mapOf("begrunnelseRef" to begrunnelseRef), + ).single { avslag -> + AvslagDto(enumValueOf(avslag.string("type")), avslag.string("tekst")) + } + } + } + internal fun finnAlleAvslag( vedtaksperiodeId: UUID, utbetalingId: UUID, diff --git a/spesialist-selve/src/main/kotlin/no/nav/helse/mediator/VedtakFattetMelder.kt b/spesialist-selve/src/main/kotlin/no/nav/helse/mediator/VedtakFattetMelder.kt index 48f9d280c..996d5ed82 100644 --- a/spesialist-selve/src/main/kotlin/no/nav/helse/mediator/VedtakFattetMelder.kt +++ b/spesialist-selve/src/main/kotlin/no/nav/helse/mediator/VedtakFattetMelder.kt @@ -2,7 +2,7 @@ package no.nav.helse.mediator import net.logstash.logback.argument.StructuredArguments.kv import no.nav.helse.modell.person.PersonObserver -import no.nav.helse.modell.vedtak.Avslagstype +import no.nav.helse.modell.vedtak.AvslagstypeDto import no.nav.helse.modell.vedtak.Sykepengegrunnlagsfakta.Infotrygd import no.nav.helse.modell.vedtak.Sykepengegrunnlagsfakta.Spleis import no.nav.helse.modell.vedtak.Sykepengevedtak @@ -166,8 +166,8 @@ internal class VedtakFattetMelder( mapOf( "type" to when (sykepengevedtak.avslag!!.type) { - Avslagstype.AVSLAG -> "Avslag" - Avslagstype.DELVIS_AVSLAG -> "DelvisInnvilgelse" + AvslagstypeDto.AVSLAG -> "Avslag" + AvslagstypeDto.DELVIS_AVSLAG -> "DelvisInnvilgelse" }, "begrunnelse" to sykepengevedtak.avslag!!.begrunnelse, "perioder" to diff --git a/spesialist-selve/src/main/kotlin/no/nav/helse/modell/vedtaksperiode/Generasjon.kt b/spesialist-selve/src/main/kotlin/no/nav/helse/modell/vedtaksperiode/Generasjon.kt index 66cc56ada..885208b46 100644 --- a/spesialist-selve/src/main/kotlin/no/nav/helse/modell/vedtaksperiode/Generasjon.kt +++ b/spesialist-selve/src/main/kotlin/no/nav/helse/modell/vedtaksperiode/Generasjon.kt @@ -13,6 +13,7 @@ import no.nav.helse.modell.person.vedtaksperiode.Varsel.Companion.inneholderVars import no.nav.helse.modell.person.vedtaksperiode.Varsel.Companion.inneholderVarselOmNegativtBeløp import no.nav.helse.modell.person.vedtaksperiode.Varsel.Companion.inneholderVarselOmTilbakedatering import no.nav.helse.modell.person.vedtaksperiode.Varsel.Companion.inneholderVarselOmÅpenGosysOppgave +import no.nav.helse.modell.vedtak.Avslag import no.nav.helse.modell.vedtak.SykepengevedtakBuilder import org.slf4j.Logger import org.slf4j.LoggerFactory @@ -28,6 +29,7 @@ internal class Generasjon private constructor( private var periode: Periode, private var tilstand: Tilstand, private var tags: List, + private val avslag: Avslag?, varsler: Set, ) { internal constructor( @@ -39,15 +41,16 @@ internal class Generasjon private constructor( spleisBehandlingId: UUID? = null, utbetalingId: UUID? = null, ) : this( - id, - vedtaksperiodeId, - utbetalingId, - spleisBehandlingId, - skjæringstidspunkt, - Periode(fom, tom), - VidereBehandlingAvklares, - emptyList(), - emptySet(), + id = id, + vedtaksperiodeId = vedtaksperiodeId, + utbetalingId = utbetalingId, + spleisBehandlingId = spleisBehandlingId, + skjæringstidspunkt = skjæringstidspunkt, + periode = Periode(fom, tom), + tilstand = VidereBehandlingAvklares, + tags = emptyList(), + avslag = null, + varsler = emptySet(), ) private val varsler: MutableList = varsler.toMutableList() @@ -77,6 +80,7 @@ internal class Generasjon private constructor( tom = periode.tom(), tilstand = tilstand.toDto(), tags = tags, + avslag = avslag?.toDto(), varsler = varsler.map(Varsel::toDto), ) @@ -549,6 +553,7 @@ internal class Generasjon private constructor( tilstand: Tilstand, tags: List, varsler: Set, + avslag: Avslag?, ) = Generasjon( id = id, vedtaksperiodeId = vedtaksperiodeId, @@ -559,6 +564,7 @@ internal class Generasjon private constructor( tilstand = tilstand, tags = tags, varsler = varsler, + avslag = avslag, ) internal fun List.håndterNyttVarsel( diff --git a/spesialist-selve/src/main/kotlin/no/nav/helse/modell/vedtaksperiode/GenerasjonDao.kt b/spesialist-selve/src/main/kotlin/no/nav/helse/modell/vedtaksperiode/GenerasjonDao.kt index fc20c3e66..2997663fe 100644 --- a/spesialist-selve/src/main/kotlin/no/nav/helse/modell/vedtaksperiode/GenerasjonDao.kt +++ b/spesialist-selve/src/main/kotlin/no/nav/helse/modell/vedtaksperiode/GenerasjonDao.kt @@ -4,6 +4,7 @@ import kotliquery.Query import kotliquery.TransactionalSession import kotliquery.queryOf import kotliquery.sessionOf +import no.nav.helse.db.AvslagDao import no.nav.helse.modell.person.vedtaksperiode.VarselDto import no.nav.helse.modell.person.vedtaksperiode.VarselStatusDto import org.intellij.lang.annotations.Language @@ -13,6 +14,8 @@ import java.util.UUID import javax.sql.DataSource class GenerasjonDao(private val dataSource: DataSource) { + private val avslagDao = AvslagDao(dataSource) + internal fun TransactionalSession.finnGenerasjoner(vedtaksperiodeId: UUID): List { @Language("PostgreSQL") val query = """ @@ -37,6 +40,10 @@ class GenerasjonDao(private val dataSource: DataSource) { tilstand = enumValueOf(row.string("tilstand")), tags = row.array("tags").toList(), varsler = finnVarsler(generasjonRef), + avslag = + with(avslagDao) { + this@finnGenerasjoner.finnAvslag(vedtaksperiodeId, generasjonRef) + }, ) }.asList, ) @@ -163,6 +170,7 @@ class GenerasjonDao(private val dataSource: DataSource) { tilstand = enumValueOf(row.string("tilstand")), tags = row.array("tags").toList(), varsler = finnVarsler(generasjonRef), + avslag = with(avslagDao) { this@finnGenerasjon.finnAvslag(vedtaksperiodeId, generasjonRef) }, ) }.asSingle, ) @@ -204,12 +212,6 @@ class GenerasjonDao(private val dataSource: DataSource) { ) } - internal fun finnSkjæringstidspunktFor(vedtaksperiodeId: UUID): LocalDate? { - return sessionOf(dataSource).use { session -> - session.run(finnSiste(vedtaksperiodeId).map { it.localDate("skjæringstidspunkt") }.asSingle) - } - } - internal fun finnSisteGenerasjonIdFor(vedtaksperiodeId: UUID): Long? { return sessionOf(dataSource).use { session -> session.run(finnSiste(vedtaksperiodeId).map { it.long("id") }.asSingle) diff --git a/spesialist-selve/src/main/kotlin/no/nav/helse/modell/vedtaksperiode/GenerasjonDto.kt b/spesialist-selve/src/main/kotlin/no/nav/helse/modell/vedtaksperiode/GenerasjonDto.kt index 84b62b1b8..dbfe2ac16 100644 --- a/spesialist-selve/src/main/kotlin/no/nav/helse/modell/vedtaksperiode/GenerasjonDto.kt +++ b/spesialist-selve/src/main/kotlin/no/nav/helse/modell/vedtaksperiode/GenerasjonDto.kt @@ -1,6 +1,7 @@ package no.nav.helse.modell.vedtaksperiode import no.nav.helse.modell.person.vedtaksperiode.VarselDto +import no.nav.helse.modell.vedtak.AvslagDto import java.time.LocalDate import java.util.UUID @@ -15,6 +16,7 @@ data class GenerasjonDto( val tilstand: TilstandDto, val tags: List, val varsler: List, + val avslag: AvslagDto?, ) enum class TilstandDto { diff --git a/spesialist-selve/src/main/kotlin/no/nav/helse/modell/vedtaksperiode/GenerasjonRepository.kt b/spesialist-selve/src/main/kotlin/no/nav/helse/modell/vedtaksperiode/GenerasjonRepository.kt index 8f67bfd67..d1e4ec609 100644 --- a/spesialist-selve/src/main/kotlin/no/nav/helse/modell/vedtaksperiode/GenerasjonRepository.kt +++ b/spesialist-selve/src/main/kotlin/no/nav/helse/modell/vedtaksperiode/GenerasjonRepository.kt @@ -1,40 +1,21 @@ package no.nav.helse.modell.vedtaksperiode import kotliquery.TransactionalSession -import kotliquery.sessionOf import no.nav.helse.modell.VedtakDao import no.nav.helse.modell.person.vedtaksperiode.VarselDto import org.slf4j.LoggerFactory -import java.time.LocalDate import java.util.UUID import javax.sql.DataSource -internal class GenerasjonRepository(private val dataSource: DataSource) { - private val dao = GenerasjonDao(dataSource) +internal class GenerasjonRepository(dataSource: DataSource) { + private val generasjonDao = GenerasjonDao(dataSource) private val vedtakDao = VedtakDao(dataSource) private var hentedeGenerasjoner: List = emptyList() private val sikkerLogger = LoggerFactory.getLogger("tjenestekall") - internal fun brukVedtaksperiode( - fødselsnummer: String, - vedtaksperiodeId: UUID, - block: (vedtaksperiode: Vedtaksperiode) -> Unit, - ) { - sessionOf(dataSource).use { session -> - session.transaction { tx -> - val vedtaksperiode = - tx.finnVedtaksperiode(vedtaksperiodeId).let { - Vedtaksperiode.gjenopprett(it.organisasjonsnummer, it.vedtaksperiodeId, it.forkastet, it.generasjoner) - } - block(vedtaksperiode) - tx.lagreVedtaksperiode(fødselsnummer, vedtaksperiode.toDto()) - } - } - } - internal fun TransactionalSession.finnVedtaksperioder(fødselsnummer: String): List { - return with(dao) { + return with(generasjonDao) { finnVedtaksperiodeIderFor(fødselsnummer).map { finnVedtaksperiode(it) } } } @@ -55,7 +36,7 @@ internal class GenerasjonRepository(private val dataSource: DataSource) { } private fun TransactionalSession.finnGenerasjoner(vedtaksperiodeId: UUID): List { - return with(dao) { + return with(generasjonDao) { finnGenerasjoner(vedtaksperiodeId).also { hentedeGenerasjoner = it } } } @@ -67,7 +48,7 @@ internal class GenerasjonRepository(private val dataSource: DataSource) { with(vedtakDao) { lagreVedtaksperiode(fødselsnummer, vedtaksperiode) } - with(dao) { + with(generasjonDao) { loggDiffMellomHentetOgSkalLagres(vedtaksperiode) hentedeGenerasjoner = emptyList() vedtaksperiode.generasjoner.forEach { generasjonDto -> @@ -129,10 +110,5 @@ internal class GenerasjonRepository(private val dataSource: DataSource) { appendLine(" skj.tidspkt: ${hentet.skjæringstidspunkt} - ${skalLagres.skjæringstidspunkt}") } - internal fun skjæringstidspunktFor(vedtaksperiodeId: UUID): LocalDate { - return dao.finnSkjæringstidspunktFor(vedtaksperiodeId) - ?: throw IllegalStateException("Forventer å finne skjæringstidspunkt for vedtaksperiodeId=$vedtaksperiodeId") - } - - internal fun førsteKjenteDag(fødselsnummer: String) = dao.førsteKjenteDag(fødselsnummer) + internal fun førsteKjenteDag(fødselsnummer: String) = generasjonDao.førsteKjenteDag(fødselsnummer) } diff --git a/spesialist-selve/src/main/kotlin/no/nav/helse/modell/vedtaksperiode/Vedtaksperiode.kt b/spesialist-selve/src/main/kotlin/no/nav/helse/modell/vedtaksperiode/Vedtaksperiode.kt index 392b8176a..b1676afa8 100644 --- a/spesialist-selve/src/main/kotlin/no/nav/helse/modell/vedtaksperiode/Vedtaksperiode.kt +++ b/spesialist-selve/src/main/kotlin/no/nav/helse/modell/vedtaksperiode/Vedtaksperiode.kt @@ -5,6 +5,9 @@ import no.nav.helse.modell.person.Person import no.nav.helse.modell.person.vedtaksperiode.Varsel import no.nav.helse.modell.person.vedtaksperiode.VarselStatusDto import no.nav.helse.modell.utbetaling.UtbetalingEndret +import no.nav.helse.modell.vedtak.Avslag +import no.nav.helse.modell.vedtak.Avslagstype +import no.nav.helse.modell.vedtak.AvslagstypeDto import no.nav.helse.modell.vedtak.AvsluttetUtenVedtak import no.nav.helse.modell.vedtak.SykepengevedtakBuilder import no.nav.helse.modell.vedtaksperiode.Generasjon.Companion.finnGenerasjonForSpleisBehandling @@ -205,6 +208,17 @@ internal class Vedtaksperiode private constructor( TilstandDto.KlarTilBehandling -> Generasjon.KlarTilBehandling }, tags = tags.toList(), + avslag = + avslag?.let { + Avslag( + type = + when (it.type) { + AvslagstypeDto.AVSLAG -> Avslagstype.AVSLAG + AvslagstypeDto.DELVIS_AVSLAG -> Avslagstype.DELVIS_AVSLAG + }, + begrunnelse = it.begrunnelse, + ) + }, varsler = varsler.map { varselDto -> Varsel( diff --git a/spesialist-selve/src/test/kotlin/no/nav/helse/mediator/VedtakFattetMelderTest.kt b/spesialist-selve/src/test/kotlin/no/nav/helse/mediator/VedtakFattetMelderTest.kt index 22e240a8d..d8afb0303 100644 --- a/spesialist-selve/src/test/kotlin/no/nav/helse/mediator/VedtakFattetMelderTest.kt +++ b/spesialist-selve/src/test/kotlin/no/nav/helse/mediator/VedtakFattetMelderTest.kt @@ -4,7 +4,7 @@ import com.fasterxml.jackson.module.kotlin.convertValue import no.nav.helse.TestRapidHelpers.meldinger import no.nav.helse.januar import no.nav.helse.modell.vedtak.AvslagDto -import no.nav.helse.modell.vedtak.Avslagstype +import no.nav.helse.modell.vedtak.AvslagstypeDto import no.nav.helse.modell.vedtak.SkjønnsfastsettingopplysningerDto import no.nav.helse.modell.vedtak.Skjønnsfastsettingstype import no.nav.helse.modell.vedtak.Skjønnsfastsettingsårsak @@ -278,7 +278,7 @@ internal class VedtakFattetMelderTest { ), skjønnsfastsettingopplysninger = null, tags = setOf("IngenNyArbeidsgiverperiode"), - avslag = AvslagDto(Avslagstype.DELVIS_AVSLAG, "En individuell begrunnelse"), + avslag = AvslagDto(AvslagstypeDto.DELVIS_AVSLAG, "En individuell begrunnelse"), ) vedtakFattetMelder.vedtakFattet(spleis) vedtakFattetMelder.publiserUtgåendeMeldinger() @@ -505,7 +505,7 @@ internal class VedtakFattetMelderTest { ), tags = setOf("IngenNyArbeidsgiverperiode"), avslag = AvslagDto( - Avslagstype.AVSLAG, + AvslagstypeDto.AVSLAG, "En individuell begrunnelse" ), ) diff --git a/spesialist-selve/src/test/kotlin/no/nav/helse/modell/AvslagDaoTest.kt b/spesialist-selve/src/test/kotlin/no/nav/helse/modell/AvslagDaoTest.kt index a85d3b4d7..dcd3b3ba2 100644 --- a/spesialist-selve/src/test/kotlin/no/nav/helse/modell/AvslagDaoTest.kt +++ b/spesialist-selve/src/test/kotlin/no/nav/helse/modell/AvslagDaoTest.kt @@ -3,7 +3,6 @@ package no.nav.helse.modell import DatabaseIntegrationTest import kotliquery.queryOf import kotliquery.sessionOf -import java.util.UUID import no.nav.helse.db.AvslagDao import no.nav.helse.spesialist.api.graphql.mutation.Avslag import no.nav.helse.spesialist.api.graphql.mutation.Avslagsdata @@ -14,6 +13,7 @@ import org.junit.jupiter.api.Assertions.assertFalse import org.junit.jupiter.api.Assertions.assertNotNull import org.junit.jupiter.api.Assertions.assertNull import org.junit.jupiter.api.Test +import java.util.UUID internal class AvslagDaoTest : DatabaseIntegrationTest() { @@ -34,6 +34,27 @@ internal class AvslagDaoTest : DatabaseIntegrationTest() { assertNotNull(lagretAvslag) } + @Test + fun `lagrer og finner avslag i transaksjon`() { + val oid = UUID.randomUUID() + val vedtaksperiodeId = UUID.randomUUID() + nyPerson(vedtaksperiodeId = vedtaksperiodeId) + nySaksbehandler(oid) + val avslag = Avslag(handling = Avslagshandling.OPPRETT, data = Avslagsdata(Avslagstype.AVSLAG, "En individuell begrunelse")) + nyDao.lagreAvslag(OPPGAVE_ID, avslag.data!!, oid) + + val generasjonId = finnGenerasjonId(vedtaksperiodeId) + + val lagretAvslag = with(nyDao) { + sessionOf(dataSource).use { session -> + session.transaction { + it.finnAvslag(vedtaksperiodeId, generasjonId) + } + } + } + assertNotNull(lagretAvslag) + } + @Test fun `invaliderer avslag`() { val oid = UUID.randomUUID() diff --git a/spesialist-selve/src/test/kotlin/no/nav/helse/modell/VedtakDaoTest.kt b/spesialist-selve/src/test/kotlin/no/nav/helse/modell/VedtakDaoTest.kt index 1f82cd98e..405247c1c 100644 --- a/spesialist-selve/src/test/kotlin/no/nav/helse/modell/VedtakDaoTest.kt +++ b/spesialist-selve/src/test/kotlin/no/nav/helse/modell/VedtakDaoTest.kt @@ -51,16 +51,17 @@ internal class VedtakDaoTest : DatabaseIntegrationTest() { generasjoner = listOf( GenerasjonDto( - UUID.randomUUID(), - VEDTAKSPERIODE, - null, - UUID.randomUUID(), - 1.januar, - 1.januar, - 31.januar, - TilstandDto.VidereBehandlingAvklares, - emptyList(), - emptyList(), + id = UUID.randomUUID(), + vedtaksperiodeId = VEDTAKSPERIODE, + utbetalingId = null, + spleisBehandlingId = UUID.randomUUID(), + skjæringstidspunkt = 1.januar, + fom = 1.januar, + tom = 31.januar, + tilstand = TilstandDto.VidereBehandlingAvklares, + tags = emptyList(), + varsler = emptyList(), + avslag = null ), ), ), @@ -100,16 +101,17 @@ internal class VedtakDaoTest : DatabaseIntegrationTest() { generasjoner = listOf( GenerasjonDto( - UUID.randomUUID(), - VEDTAKSPERIODE, - null, - UUID.randomUUID(), - 1.januar, - 1.januar, - 31.januar, - TilstandDto.VidereBehandlingAvklares, - emptyList(), - emptyList(), + id = UUID.randomUUID(), + vedtaksperiodeId = VEDTAKSPERIODE, + utbetalingId = null, + spleisBehandlingId = UUID.randomUUID(), + skjæringstidspunkt = 1.januar, + fom = 1.januar, + tom = 31.januar, + tilstand = TilstandDto.VidereBehandlingAvklares, + tags = emptyList(), + varsler = emptyList(), + avslag = null ), ), ), diff --git a/spesialist-selve/src/test/kotlin/no/nav/helse/modell/vedtaksperiode/GenerasjonDaoTest.kt b/spesialist-selve/src/test/kotlin/no/nav/helse/modell/vedtaksperiode/GenerasjonDaoTest.kt index 5a5652747..383fa48d5 100644 --- a/spesialist-selve/src/test/kotlin/no/nav/helse/modell/vedtaksperiode/GenerasjonDaoTest.kt +++ b/spesialist-selve/src/test/kotlin/no/nav/helse/modell/vedtaksperiode/GenerasjonDaoTest.kt @@ -2,9 +2,18 @@ package no.nav.helse.modell.vedtaksperiode import DatabaseIntegrationTest import kotliquery.sessionOf +import no.nav.helse.januar +import no.nav.helse.modell.person.vedtaksperiode.VarselDto +import no.nav.helse.modell.person.vedtaksperiode.VarselStatusDto +import no.nav.helse.modell.vedtak.AvslagDto +import no.nav.helse.modell.vedtak.AvslagstypeDto +import no.nav.helse.spesialist.test.lagAktørId +import no.nav.helse.spesialist.test.lagFødselsnummer +import no.nav.helse.spesialist.test.lagOrganisasjonsnummer import org.junit.jupiter.api.Assertions.assertEquals import org.junit.jupiter.api.Assertions.assertTrue import org.junit.jupiter.api.Test +import java.time.LocalDateTime import java.util.UUID internal class GenerasjonDaoTest : DatabaseIntegrationTest() { @@ -35,4 +44,114 @@ internal class GenerasjonDaoTest : DatabaseIntegrationTest() { assertEquals(2, vedtaksperiodeIder.size) assertTrue(vedtaksperiodeIder.containsAll(setOf(vedtaksperiodeId1, vedtaksperiodeId2))) } + + @Test + fun `finner vedtaksperiodeider kun for aktuell person`() { + val person1 = lagFødselsnummer() + val organisasjonsnummer1 = lagOrganisasjonsnummer() + val vedtaksperiodeId1 = UUID.randomUUID() + + val person2 = lagFødselsnummer() + val organisasjonsnummer2 = lagOrganisasjonsnummer() + val vedtaksperiodeId2 = UUID.randomUUID() + + opprettPerson(fødselsnummer = person1, lagAktørId()) + opprettArbeidsgiver(organisasjonsnummer = organisasjonsnummer1) + opprettVedtaksperiode( + fødselsnummer = person1, + organisasjonsnummer = organisasjonsnummer1, + vedtaksperiodeId = vedtaksperiodeId1 + ) + + opprettPerson(fødselsnummer = person2, lagAktørId()) + opprettArbeidsgiver(organisasjonsnummer = organisasjonsnummer2) + opprettVedtaksperiode( + fødselsnummer = person2, + organisasjonsnummer = organisasjonsnummer2, + vedtaksperiodeId = vedtaksperiodeId2 + ) + + val vedtaksperiodeIderPerson1 = + with(generasjonDao) { + sessionOf(dataSource).use { session -> + session.transaction { tx -> + tx.finnVedtaksperiodeIderFor(person1) + } + } + } + + val vedtaksperiodeIderPerson2 = + with(generasjonDao) { + sessionOf(dataSource).use { session -> + session.transaction { tx -> + tx.finnVedtaksperiodeIderFor(person2) + } + } + } + assertEquals(1, vedtaksperiodeIderPerson1.size) + assertEquals(1, vedtaksperiodeIderPerson2.size) + assertTrue(vedtaksperiodeIderPerson1.containsAll(setOf(vedtaksperiodeId1))) + assertTrue(vedtaksperiodeIderPerson2.containsAll(setOf(vedtaksperiodeId2))) + } + + @Test + fun `lagre og finne generasjon`() { + val vedtaksperiodeId = UUID.randomUUID() + val generasjonId = UUID.randomUUID() + val utbetalingId = UUID.randomUUID() + val spleisBehandlingId = UUID.randomUUID() + val varsel = VarselDto( + id = UUID.randomUUID(), + varselkode = "SB_EX_1", + opprettet = LocalDateTime.now(), + vedtaksperiodeId = vedtaksperiodeId, + status = VarselStatusDto.AKTIV + ) + val avslag = AvslagDto(AvslagstypeDto.AVSLAG, begrunnelse = "En begrunnelse") + sessionOf(dataSource).use { session -> + session.transaction { tx -> + with(generasjonDao) { + tx.lagreGenerasjon( + GenerasjonDto( + id = generasjonId, + vedtaksperiodeId = vedtaksperiodeId, + utbetalingId = utbetalingId, + spleisBehandlingId = spleisBehandlingId, + skjæringstidspunkt = 1.januar, + fom = 1.januar, + tom = 31.januar, + tilstand = TilstandDto.KlarTilBehandling, + tags = listOf("TAG"), + varsler = listOf(varsel), + avslag = avslag + ) + ) + } + } + } + val funnet = sessionOf(dataSource).use { session -> + session.transaction { + with(generasjonDao) { + it.finnGenerasjoner(vedtaksperiodeId) + } + } + } + assertEquals(1, funnet.size) + assertEquals( + GenerasjonDto( + id = generasjonId, + vedtaksperiodeId = vedtaksperiodeId, + utbetalingId = utbetalingId, + spleisBehandlingId = spleisBehandlingId, + skjæringstidspunkt = 1.januar, + fom = 1.januar, + tom = 31.januar, + tilstand = TilstandDto.KlarTilBehandling, + tags = listOf("TAG"), + varsler = listOf(varsel), + avslag = null //Lagres ikke enda + ), + funnet.single() + ) + } } diff --git a/spesialist-selve/src/test/kotlin/no/nav/helse/modell/vedtaksperiode/GenerasjonRepositoryTest.kt b/spesialist-selve/src/test/kotlin/no/nav/helse/modell/vedtaksperiode/GenerasjonRepositoryTest.kt index 47bfd1154..56e31e8d9 100644 --- a/spesialist-selve/src/test/kotlin/no/nav/helse/modell/vedtaksperiode/GenerasjonRepositoryTest.kt +++ b/spesialist-selve/src/test/kotlin/no/nav/helse/modell/vedtaksperiode/GenerasjonRepositoryTest.kt @@ -1,18 +1,89 @@ package no.nav.helse.modell.vedtaksperiode -import java.util.UUID -import no.nav.helse.AbstractDatabaseTest +import DatabaseIntegrationTest +import kotliquery.sessionOf +import no.nav.helse.februar +import no.nav.helse.januar +import no.nav.helse.spesialist.test.lagAktørId +import no.nav.helse.spesialist.test.lagFødselsnummer +import no.nav.helse.spesialist.test.lagOrganisasjonsnummer +import org.junit.jupiter.api.Assertions.assertEquals import org.junit.jupiter.api.Test -import org.junit.jupiter.api.assertThrows +import java.util.UUID -internal class GenerasjonRepositoryTest : AbstractDatabaseTest() { +class GenerasjonRepositoryTest: DatabaseIntegrationTest() { - private val repository = GenerasjonRepository(dataSource) + private val generasjonRepository = GenerasjonRepository(dataSource) @Test - fun `Exception om vedtaksperioden ikke finnes`() { - assertThrows { - repository.brukVedtaksperiode("1234567891011", UUID.randomUUID()) {} + fun `lagrer og finner liste av vedtaksperioder`() { + val person1 = lagFødselsnummer() + val organisasjonsnummer1 = lagOrganisasjonsnummer() + val vedtaksperiodeId1 = UUID.randomUUID() + val vedtaksperiodeId2 = UUID.randomUUID() + + opprettPerson(fødselsnummer = person1, lagAktørId()) + opprettArbeidsgiver(organisasjonsnummer = organisasjonsnummer1) + + val vedtaksperioder = listOf( + VedtaksperiodeDto( + organisasjonsnummer = organisasjonsnummer1, + vedtaksperiodeId = vedtaksperiodeId1, + forkastet = false, + generasjoner = listOf( + GenerasjonDto( + id = UUID.randomUUID(), + vedtaksperiodeId = vedtaksperiodeId1, + utbetalingId = null, + spleisBehandlingId = UUID.randomUUID(), + skjæringstidspunkt = 1.januar, + fom = 1.januar, + tom = 31.januar, + tilstand = TilstandDto.VidereBehandlingAvklares, + emptyList(), + emptyList(), + null + ), + ) + ), + VedtaksperiodeDto( + organisasjonsnummer = organisasjonsnummer1, + vedtaksperiodeId = vedtaksperiodeId2, + forkastet = false, + generasjoner = listOf( + GenerasjonDto( + id = UUID.randomUUID(), + vedtaksperiodeId = vedtaksperiodeId2, + utbetalingId = null, + spleisBehandlingId = UUID.randomUUID(), + skjæringstidspunkt = 1.februar, + fom = 1.februar, + tom = 28.februar, + tilstand = TilstandDto.VidereBehandlingAvklares, + emptyList(), + emptyList(), + null + ), + ) + ) + ) + + sessionOf(dataSource).use { session -> + session.transaction { tx -> + with(generasjonRepository) { + tx.lagreVedtaksperioder(person1, vedtaksperioder) + } + } + } + + val funnet = sessionOf(dataSource).use { session -> + session.transaction { tx -> + with(generasjonRepository) { + tx.finnVedtaksperioder(person1) + } + } } + + assertEquals(vedtaksperioder, funnet) } -} \ No newline at end of file +} diff --git a/spesialist-selve/src/test/kotlin/no/nav/helse/modell/vedtaksperiode/GenerasjonTest.kt b/spesialist-selve/src/test/kotlin/no/nav/helse/modell/vedtaksperiode/GenerasjonTest.kt index 824b9c17b..06810d6c1 100644 --- a/spesialist-selve/src/test/kotlin/no/nav/helse/modell/vedtaksperiode/GenerasjonTest.kt +++ b/spesialist-selve/src/test/kotlin/no/nav/helse/modell/vedtaksperiode/GenerasjonTest.kt @@ -531,6 +531,7 @@ internal class GenerasjonTest { TilstandDto.KlarTilBehandling, tags, listOf(varsel.toDto()), + null ), dto, )