diff --git a/src/main/kotlin/no/nav/klage/oppgave/api/controller/KabinApiController.kt b/src/main/kotlin/no/nav/klage/oppgave/api/controller/KabinApiController.kt index 1e0dfb316..679fb1cca 100644 --- a/src/main/kotlin/no/nav/klage/oppgave/api/controller/KabinApiController.kt +++ b/src/main/kotlin/no/nav/klage/oppgave/api/controller/KabinApiController.kt @@ -133,6 +133,21 @@ class KabinApiController( ) } + @PostMapping("/createklage") + fun createKlage( + @RequestBody input: CreateKlageBasedOnKabinInput + ): CreatedBehandlingResponse { + logMethodDetails( + methodName = ::createKlage.name, + innloggetIdent = innloggetSaksbehandlerService.getInnloggetIdent(), + logger = logger + ) + + return kabinApiService.createKlage( + input = input + ) + } + @PostMapping("/createankefromcompleteinput") fun createAnkeFromCompleteInput( @RequestBody input: CreateAnkeBasedOnCompleteKabinInput @@ -148,33 +163,33 @@ class KabinApiController( ) } - @PostMapping("/searchusedjournalpostid") - fun getUsedJournalpostIdListForPerson( - @RequestBody input: SearchUsedJournalpostIdInput, - ): List { + @PostMapping("/create-omgjoeringskrav-based-on-journalpost") + fun createOmgjoeringskravBasedOnJournalpost( + @RequestBody input: CreateOmgjoeringskravBasedOnJournalpostInput + ): CreatedBehandlingResponse { logMethodDetails( - methodName = ::getUsedJournalpostIdListForPerson.name, + methodName = ::createOmgjoeringskravBasedOnJournalpost.name, innloggetIdent = innloggetSaksbehandlerService.getInnloggetIdent(), logger = logger ) - return mottakService.getUsedJournalpostIdList( - sakenGjelder = input.fnr + return kabinApiService.createOmgjoeringskravBasedOnJournalpost( + input = input ) } - @PostMapping("/createklage") - fun createKlage( - @RequestBody input: CreateKlageBasedOnKabinInput - ): CreatedBehandlingResponse { + @PostMapping("/searchusedjournalpostid") + fun getUsedJournalpostIdListForPerson( + @RequestBody input: SearchUsedJournalpostIdInput, + ): List { logMethodDetails( - methodName = ::createKlage.name, + methodName = ::getUsedJournalpostIdListForPerson.name, innloggetIdent = innloggetSaksbehandlerService.getInnloggetIdent(), logger = logger ) - return kabinApiService.createKlage( - input = input + return mottakService.getUsedJournalpostIdList( + sakenGjelder = input.fnr ) } diff --git a/src/main/kotlin/no/nav/klage/oppgave/api/mapper/BehandlingMapper.kt b/src/main/kotlin/no/nav/klage/oppgave/api/mapper/BehandlingMapper.kt index 8169e05fd..145556850 100644 --- a/src/main/kotlin/no/nav/klage/oppgave/api/mapper/BehandlingMapper.kt +++ b/src/main/kotlin/no/nav/klage/oppgave/api/mapper/BehandlingMapper.kt @@ -125,6 +125,7 @@ class BehandlingMapper( gosysOppgaveId = klagebehandling.gosysOppgaveId, tilbakekreving = klagebehandling.tilbakekreving, timesPreviouslyExtended = klagebehandling.getTimesPreviouslyExtended(), + requiresGosysOppgave = !klagebehandling.fagsystem.modernized, ) } @@ -199,6 +200,7 @@ class BehandlingMapper( kommentarFraVedtaksinstans = null, tilbakekreving = omgjoeringskravbehandling.tilbakekreving, timesPreviouslyExtended = omgjoeringskravbehandling.getTimesPreviouslyExtended(), + requiresGosysOppgave = omgjoeringskravbehandling is OmgjoeringskravbehandlingBasedOnJournalpost || !omgjoeringskravbehandling.fagsystem.modernized ) } @@ -318,6 +320,7 @@ class BehandlingMapper( gosysOppgaveId = ankebehandling.gosysOppgaveId, tilbakekreving = ankebehandling.tilbakekreving, timesPreviouslyExtended = ankebehandling.getTimesPreviouslyExtended(), + requiresGosysOppgave = !ankebehandling.fagsystem.modernized, ) } @@ -388,6 +391,7 @@ class BehandlingMapper( gosysOppgaveId = ankeITrygderettenbehandling.gosysOppgaveId, tilbakekreving = ankeITrygderettenbehandling.tilbakekreving, timesPreviouslyExtended = ankeITrygderettenbehandling.getTimesPreviouslyExtended(), + requiresGosysOppgave = !ankeITrygderettenbehandling.fagsystem.modernized, ) } @@ -465,6 +469,7 @@ class BehandlingMapper( gosysOppgaveId = behandlingEtterTrygderettenOpphevet.gosysOppgaveId, tilbakekreving = behandlingEtterTrygderettenOpphevet.tilbakekreving, timesPreviouslyExtended = behandlingEtterTrygderettenOpphevet.getTimesPreviouslyExtended(), + requiresGosysOppgave = !behandlingEtterTrygderettenOpphevet.fagsystem.modernized ) } diff --git a/src/main/kotlin/no/nav/klage/oppgave/api/view/BehandlingDetaljerView.kt b/src/main/kotlin/no/nav/klage/oppgave/api/view/BehandlingDetaljerView.kt index 1169883c1..baa6169a1 100644 --- a/src/main/kotlin/no/nav/klage/oppgave/api/view/BehandlingDetaljerView.kt +++ b/src/main/kotlin/no/nav/klage/oppgave/api/view/BehandlingDetaljerView.kt @@ -49,6 +49,7 @@ data class BehandlingDetaljerView( val previousSaksbehandler: SaksbehandlerView?, val varsletFrist: LocalDate?, val gosysOppgaveId: Long?, + val requiresGosysOppgave: Boolean, val tilbakekreving: Boolean, val timesPreviouslyExtended: Int, ) { diff --git a/src/main/kotlin/no/nav/klage/oppgave/api/view/kabin/KabinRequest.kt b/src/main/kotlin/no/nav/klage/oppgave/api/view/kabin/KabinRequest.kt index 7ebfae7ca..fd3e7945b 100644 --- a/src/main/kotlin/no/nav/klage/oppgave/api/view/kabin/KabinRequest.kt +++ b/src/main/kotlin/no/nav/klage/oppgave/api/view/kabin/KabinRequest.kt @@ -38,14 +38,7 @@ data class CreateBehandlingBasedOnKabinInput( val svarbrevInput: SvarbrevInput?, val hjemmelIdList: List, val gosysOppgaveId: Long?, -) { - data class OversendtPartId( - val type: OversendtPartIdType, - val value: String - ) - - enum class OversendtPartIdType { PERSON, VIRKSOMHET } -} +) @JsonIgnoreProperties(ignoreUnknown = true) data class CreateAnkeBasedOnCompleteKabinInput( @@ -64,22 +57,21 @@ data class CreateAnkeBasedOnCompleteKabinInput( val saksbehandlerIdent: String?, val svarbrevInput: SvarbrevInput?, val gosysOppgaveId: Long?, -) { - data class OversendtPartId( - val type: OversendtPartIdType, - val value: String - ) - - fun OversendtPartId.toPartId(): PartId { - return PartId( - type = PartIdType.of(type.name), - value = value - ) - } +) +data class OversendtPartId( + val type: OversendtPartIdType, + val value: String +) - enum class OversendtPartIdType { PERSON, VIRKSOMHET } +fun OversendtPartId.toPartId(): PartId { + return PartId( + type = PartIdType.of(type.name), + value = value + ) } +enum class OversendtPartIdType { PERSON, VIRKSOMHET } + @JsonIgnoreProperties(ignoreUnknown = true) data class CreateKlageBasedOnKabinInput( val sakenGjelder: OversendtPartId, @@ -98,21 +90,25 @@ data class CreateKlageBasedOnKabinInput( val saksbehandlerIdent: String?, val svarbrevInput: SvarbrevInput?, val gosysOppgaveId: Long?, -) { - data class OversendtPartId( - val type: OversendtPartIdType, - val value: String - ) - - fun OversendtPartId.toPartId(): PartId { - return PartId( - type = PartIdType.of(type.name), - value = value - ) - } +) - enum class OversendtPartIdType { PERSON, VIRKSOMHET } -} +data class CreateOmgjoeringskravBasedOnJournalpostInput( + val sakenGjelder: OversendtPartId, + val klager: OversendtPartId?, + val fullmektig: OversendtPartId?, + val fagsakId: String, + val fagsystemId: String, + val hjemmelIdList: List, + val forrigeBehandlendeEnhet: String, + val receivedDocumentJournalpostId: String, + val mottattNav: LocalDate, + val frist: LocalDate, + val ytelseId: String, + val kildereferanse: String, + val saksbehandlerIdent: String?, + val svarbrevInput: SvarbrevInput?, + val gosysOppgaveId: Long?, +) data class SvarbrevInput( val title: String, diff --git a/src/main/kotlin/no/nav/klage/oppgave/domain/klage/Omgjoeringskravbehandling.kt b/src/main/kotlin/no/nav/klage/oppgave/domain/klage/Omgjoeringskravbehandling.kt index b83e99962..29c5478cc 100644 --- a/src/main/kotlin/no/nav/klage/oppgave/domain/klage/Omgjoeringskravbehandling.kt +++ b/src/main/kotlin/no/nav/klage/oppgave/domain/klage/Omgjoeringskravbehandling.kt @@ -17,9 +17,8 @@ import java.util.* //const val KLAGEENHET_PREFIX = "42" @Entity -@DiscriminatorValue("omgjoeringskrav") @Audited -class Omgjoeringskravbehandling( +abstract class Omgjoeringskravbehandling( @Column(name = "klage_behandlende_enhet") val klageBehandlendeEnhet: String, @Column(name = "mottak_id") @@ -30,8 +29,6 @@ class Omgjoeringskravbehandling( val kakaKvalitetsvurderingVersion: Int, @Embedded override var varsletBehandlingstid: VarsletBehandlingstid?, - @Column(name = "source_behandling_id") - var sourceBehandlingId: UUID?, @OneToOne(cascade = [CascadeType.ALL], optional = true) @JoinColumn(name = "forlenget_behandlingstid_draft_id", referencedColumnName = "id") @NotAudited diff --git a/src/main/kotlin/no/nav/klage/oppgave/domain/klage/OmgjoeringskravbehandlingBasedOnJournalpost.kt b/src/main/kotlin/no/nav/klage/oppgave/domain/klage/OmgjoeringskravbehandlingBasedOnJournalpost.kt new file mode 100644 index 000000000..fa282c55b --- /dev/null +++ b/src/main/kotlin/no/nav/klage/oppgave/domain/klage/OmgjoeringskravbehandlingBasedOnJournalpost.kt @@ -0,0 +1,138 @@ +package no.nav.klage.oppgave.domain.klage + +import jakarta.persistence.DiscriminatorValue +import jakarta.persistence.Entity +import no.nav.klage.kodeverk.Fagsystem +import no.nav.klage.kodeverk.FlowState +import no.nav.klage.kodeverk.Type +import no.nav.klage.kodeverk.Utfall +import no.nav.klage.kodeverk.hjemmel.Hjemmel +import no.nav.klage.kodeverk.hjemmel.Registreringshjemmel +import no.nav.klage.kodeverk.ytelse.Ytelse +import org.hibernate.envers.Audited +import java.time.LocalDate +import java.time.LocalDateTime +import java.util.* + +//const val KLAGEENHET_PREFIX = "42" + +@Entity +@DiscriminatorValue("omgjoeringskrav-based-on-journalpost") +@Audited +class OmgjoeringskravbehandlingBasedOnJournalpost( + + //Common properties between klage/anke + id: UUID = UUID.randomUUID(), + klager: Klager, + sakenGjelder: SakenGjelder, + prosessfullmektig: Prosessfullmektig?, + ytelse: Ytelse, + type: Type, + kildeReferanse: String, + dvhReferanse: String? = null, + fagsystem: Fagsystem, + fagsakId: String, + mottattKlageinstans: LocalDateTime, + frist: LocalDate, + tildeling: Tildeling? = null, + created: LocalDateTime = LocalDateTime.now(), + modified: LocalDateTime = LocalDateTime.now(), + saksdokumenter: MutableSet = mutableSetOf(), + hjemler: Set = emptySet(), + sattPaaVent: SattPaaVent? = null, + feilregistrering: Feilregistrering? = null, + utfall: Utfall? = null, + extraUtfallSet: Set = emptySet(), + registreringshjemler: MutableSet = mutableSetOf(), + medunderskriver: MedunderskriverTildeling? = null, + medunderskriverFlowState: FlowState = FlowState.NOT_SENT, + ferdigstilling: Ferdigstilling? = null, + rolIdent: String? = null, + rolFlowState: FlowState = FlowState.NOT_SENT, + rolReturnedDate: LocalDateTime? = null, + tildelingHistorikk: MutableSet = mutableSetOf(), + medunderskriverHistorikk: MutableSet = mutableSetOf(), + rolHistorikk: MutableSet = mutableSetOf(), + klagerHistorikk: MutableSet = mutableSetOf(), + fullmektigHistorikk: MutableSet = mutableSetOf(), + sattPaaVentHistorikk: MutableSet = mutableSetOf(), + previousSaksbehandlerident: String?, + oppgaveId: Long?, + gosysOppgaveId: Long?, + gosysOppgaveUpdate: GosysOppgaveUpdate? = null, + tilbakekreving: Boolean = false, + ignoreGosysOppgave: Boolean = false, + klageBehandlendeEnhet: String, + mottakId: UUID, + kakaKvalitetsvurderingId: UUID, + kakaKvalitetsvurderingVersion: Int, + varsletBehandlingstid: VarsletBehandlingstid?, + forlengetBehandlingstidDraft: ForlengetBehandlingstidDraft?, +) : BehandlingWithVarsletBehandlingstid, Omgjoeringskravbehandling( + id = id, + klager = klager, + sakenGjelder = sakenGjelder, + prosessfullmektig = prosessfullmektig, + ytelse = ytelse, + type = type, + kildeReferanse = kildeReferanse, + mottattKlageinstans = mottattKlageinstans, + modified = modified, + created = created, + tildeling = tildeling, + frist = frist, + fagsakId = fagsakId, + fagsystem = fagsystem, + dvhReferanse = dvhReferanse, + saksdokumenter = saksdokumenter, + hjemler = hjemler, + sattPaaVent = sattPaaVent, + feilregistrering = feilregistrering, + utfall = utfall, + extraUtfallSet = extraUtfallSet, + registreringshjemler = registreringshjemler, + medunderskriver = medunderskriver, + medunderskriverFlowState = medunderskriverFlowState, + ferdigstilling = ferdigstilling, + rolIdent = rolIdent, + rolFlowState = rolFlowState, + rolReturnedDate = rolReturnedDate, + tildelingHistorikk = tildelingHistorikk, + medunderskriverHistorikk = medunderskriverHistorikk, + rolHistorikk = rolHistorikk, + klagerHistorikk = klagerHistorikk, + fullmektigHistorikk = fullmektigHistorikk, + sattPaaVentHistorikk = sattPaaVentHistorikk, + previousSaksbehandlerident = previousSaksbehandlerident, + gosysOppgaveId = gosysOppgaveId, + gosysOppgaveUpdate = gosysOppgaveUpdate, + tilbakekreving = tilbakekreving, + ignoreGosysOppgave = ignoreGosysOppgave, + klageBehandlendeEnhet = klageBehandlendeEnhet, + mottakId = mottakId, + kakaKvalitetsvurderingId = kakaKvalitetsvurderingId, + kakaKvalitetsvurderingVersion = kakaKvalitetsvurderingVersion, + varsletBehandlingstid = varsletBehandlingstid, + forlengetBehandlingstidDraft = forlengetBehandlingstidDraft, + oppgaveId = oppgaveId, +) { + + override fun toString(): String { + return "OmgjoeringskravbehandlingBasedOnJournalpost(id=$id, " + + "modified=$modified, " + + "created=$created)" + } + + override fun equals(other: Any?): Boolean { + if (this === other) return true + if (javaClass != other?.javaClass) return false + + other as OmgjoeringskravbehandlingBasedOnJournalpost + + return id == other.id + } + + override fun hashCode(): Int { + return id.hashCode() + } +} \ No newline at end of file diff --git a/src/main/kotlin/no/nav/klage/oppgave/domain/klage/OmgjoeringskravbehandlingBasedOnKabalBehandling.kt b/src/main/kotlin/no/nav/klage/oppgave/domain/klage/OmgjoeringskravbehandlingBasedOnKabalBehandling.kt new file mode 100644 index 000000000..b9c1d27ab --- /dev/null +++ b/src/main/kotlin/no/nav/klage/oppgave/domain/klage/OmgjoeringskravbehandlingBasedOnKabalBehandling.kt @@ -0,0 +1,141 @@ +package no.nav.klage.oppgave.domain.klage + +import jakarta.persistence.Column +import jakarta.persistence.DiscriminatorValue +import jakarta.persistence.Entity +import no.nav.klage.kodeverk.Fagsystem +import no.nav.klage.kodeverk.FlowState +import no.nav.klage.kodeverk.Type +import no.nav.klage.kodeverk.Utfall +import no.nav.klage.kodeverk.hjemmel.Hjemmel +import no.nav.klage.kodeverk.hjemmel.Registreringshjemmel +import no.nav.klage.kodeverk.ytelse.Ytelse +import org.hibernate.envers.Audited +import java.time.LocalDate +import java.time.LocalDateTime +import java.util.* + +//const val KLAGEENHET_PREFIX = "42" + +@Entity +@DiscriminatorValue("omgjoeringskrav-based-on-kabal-behandling") +@Audited +class OmgjoeringskravbehandlingBasedOnKabalBehandling( + @Column(name = "source_behandling_id") + var sourceBehandlingId: UUID?, + + //Common properties between klage/anke + id: UUID = UUID.randomUUID(), + klager: Klager, + sakenGjelder: SakenGjelder, + prosessfullmektig: Prosessfullmektig?, + ytelse: Ytelse, + type: Type, + kildeReferanse: String, + dvhReferanse: String? = null, + fagsystem: Fagsystem, + fagsakId: String, + mottattKlageinstans: LocalDateTime, + frist: LocalDate, + tildeling: Tildeling? = null, + created: LocalDateTime = LocalDateTime.now(), + modified: LocalDateTime = LocalDateTime.now(), + saksdokumenter: MutableSet = mutableSetOf(), + hjemler: Set = emptySet(), + sattPaaVent: SattPaaVent? = null, + feilregistrering: Feilregistrering? = null, + utfall: Utfall? = null, + extraUtfallSet: Set = emptySet(), + registreringshjemler: MutableSet = mutableSetOf(), + medunderskriver: MedunderskriverTildeling? = null, + medunderskriverFlowState: FlowState = FlowState.NOT_SENT, + ferdigstilling: Ferdigstilling? = null, + rolIdent: String? = null, + rolFlowState: FlowState = FlowState.NOT_SENT, + rolReturnedDate: LocalDateTime? = null, + tildelingHistorikk: MutableSet = mutableSetOf(), + medunderskriverHistorikk: MutableSet = mutableSetOf(), + rolHistorikk: MutableSet = mutableSetOf(), + klagerHistorikk: MutableSet = mutableSetOf(), + fullmektigHistorikk: MutableSet = mutableSetOf(), + sattPaaVentHistorikk: MutableSet = mutableSetOf(), + previousSaksbehandlerident: String?, + oppgaveId: Long?, + gosysOppgaveId: Long?, + gosysOppgaveUpdate: GosysOppgaveUpdate? = null, + tilbakekreving: Boolean = false, + ignoreGosysOppgave: Boolean = false, + klageBehandlendeEnhet: String, + mottakId: UUID, + kakaKvalitetsvurderingId: UUID, + kakaKvalitetsvurderingVersion: Int, + varsletBehandlingstid: VarsletBehandlingstid?, + forlengetBehandlingstidDraft: ForlengetBehandlingstidDraft?, +) : BehandlingWithVarsletBehandlingstid, Omgjoeringskravbehandling( + id = id, + klager = klager, + sakenGjelder = sakenGjelder, + prosessfullmektig = prosessfullmektig, + ytelse = ytelse, + type = type, + kildeReferanse = kildeReferanse, + mottattKlageinstans = mottattKlageinstans, + modified = modified, + created = created, + tildeling = tildeling, + frist = frist, + fagsakId = fagsakId, + fagsystem = fagsystem, + dvhReferanse = dvhReferanse, + saksdokumenter = saksdokumenter, + hjemler = hjemler, + sattPaaVent = sattPaaVent, + feilregistrering = feilregistrering, + utfall = utfall, + extraUtfallSet = extraUtfallSet, + registreringshjemler = registreringshjemler, + medunderskriver = medunderskriver, + medunderskriverFlowState = medunderskriverFlowState, + ferdigstilling = ferdigstilling, + rolIdent = rolIdent, + rolFlowState = rolFlowState, + rolReturnedDate = rolReturnedDate, + tildelingHistorikk = tildelingHistorikk, + medunderskriverHistorikk = medunderskriverHistorikk, + rolHistorikk = rolHistorikk, + klagerHistorikk = klagerHistorikk, + fullmektigHistorikk = fullmektigHistorikk, + sattPaaVentHistorikk = sattPaaVentHistorikk, + previousSaksbehandlerident = previousSaksbehandlerident, + gosysOppgaveId = gosysOppgaveId, + gosysOppgaveUpdate = gosysOppgaveUpdate, + tilbakekreving = tilbakekreving, + ignoreGosysOppgave = ignoreGosysOppgave, + klageBehandlendeEnhet = klageBehandlendeEnhet, + mottakId = mottakId, + kakaKvalitetsvurderingId = kakaKvalitetsvurderingId, + kakaKvalitetsvurderingVersion = kakaKvalitetsvurderingVersion, + varsletBehandlingstid = varsletBehandlingstid, + forlengetBehandlingstidDraft = forlengetBehandlingstidDraft, + oppgaveId = oppgaveId, +) { + + override fun toString(): String { + return "OmgjoeringskravbehandlingBasedOnKabalBehandling(id=$id, " + + "modified=$modified, " + + "created=$created)" + } + + override fun equals(other: Any?): Boolean { + if (this === other) return true + if (javaClass != other?.javaClass) return false + + other as OmgjoeringskravbehandlingBasedOnKabalBehandling + + return id == other.id + } + + override fun hashCode(): Int { + return id.hashCode() + } +} \ No newline at end of file diff --git a/src/main/kotlin/no/nav/klage/oppgave/service/BehandlingService.kt b/src/main/kotlin/no/nav/klage/oppgave/service/BehandlingService.kt index 933d48be6..f2402b243 100644 --- a/src/main/kotlin/no/nav/klage/oppgave/service/BehandlingService.kt +++ b/src/main/kotlin/no/nav/klage/oppgave/service/BehandlingService.kt @@ -443,7 +443,7 @@ class BehandlingService( } } - if (!behandling.fagsystem.modernized && behandling.gosysOppgaveId == null) { + if ((!behandling.fagsystem.modernized || behandling is OmgjoeringskravbehandlingBasedOnJournalpost) && behandling.gosysOppgaveId == null) { behandlingValidationErrors.add( InvalidProperty( field = "gosysOppgave", diff --git a/src/main/kotlin/no/nav/klage/oppgave/service/CreateBehandlingFromMottak.kt b/src/main/kotlin/no/nav/klage/oppgave/service/CreateBehandlingFromMottak.kt index fc37c870a..f1d44c22f 100644 --- a/src/main/kotlin/no/nav/klage/oppgave/service/CreateBehandlingFromMottak.kt +++ b/src/main/kotlin/no/nav/klage/oppgave/service/CreateBehandlingFromMottak.kt @@ -29,7 +29,7 @@ class CreateBehandlingFromMottak( ) } - fun createBehandling(mottak: Mottak): Behandling { + fun createBehandling(mottak: Mottak, isBasedOnJournalpost: Boolean = false): Behandling { logger.debug( "Received mottak {} in CreateBehandlingFromMottak", mottak.id @@ -43,7 +43,10 @@ class CreateBehandlingFromMottak( ankebehandling } Type.OMGJOERINGSKRAV -> { - omgjoeringskravbehandlingService.createOmgjoeringskravbehandlingFromMottak(mottak) + omgjoeringskravbehandlingService.createOmgjoeringskravbehandlingFromMottak( + mottak = mottak, + isBasedOnJournalpost = isBasedOnJournalpost, + ) } Type.ANKE_I_TRYGDERETTEN -> TODO() diff --git a/src/main/kotlin/no/nav/klage/oppgave/service/KabinApiService.kt b/src/main/kotlin/no/nav/klage/oppgave/service/KabinApiService.kt index ee9c52d0c..8626eef0a 100644 --- a/src/main/kotlin/no/nav/klage/oppgave/service/KabinApiService.kt +++ b/src/main/kotlin/no/nav/klage/oppgave/service/KabinApiService.kt @@ -82,6 +82,26 @@ class KabinApiService( return CreatedBehandlingResponse(behandlingId = behandling.id) } + fun createOmgjoeringskravBasedOnJournalpost(input: CreateOmgjoeringskravBasedOnJournalpostInput): CreatedBehandlingResponse { + val behandling = mottakService.createOmgjoeringskravBasedOnJournalpost(input = input) + + if (input.gosysOppgaveId != null) { + behandlingService.setGosysOppgaveIdFromKabin( + behandlingId = behandling.id, + gosysOppgaveId = input.gosysOppgaveId, + utfoerendeSaksbehandlerIdent = innloggetSaksbehandlerService.getInnloggetIdent(), + ) + } + + setSaksbehandlerAndCreateSvarbrev( + behandling = behandling, + saksbehandlerIdent = input.saksbehandlerIdent, + svarbrevInput = input.svarbrevInput, + ) + + return CreatedBehandlingResponse(behandlingId = behandling.id) + } + private fun setSaksbehandlerAndCreateSvarbrev( behandling: Behandling, saksbehandlerIdent: String?, diff --git a/src/main/kotlin/no/nav/klage/oppgave/service/MottakService.kt b/src/main/kotlin/no/nav/klage/oppgave/service/MottakService.kt index efec33aeb..f3f0c1504 100644 --- a/src/main/kotlin/no/nav/klage/oppgave/service/MottakService.kt +++ b/src/main/kotlin/no/nav/klage/oppgave/service/MottakService.kt @@ -11,10 +11,7 @@ import no.nav.klage.kodeverk.hjemmel.Hjemmel import no.nav.klage.kodeverk.hjemmel.ytelseToHjemler import no.nav.klage.kodeverk.ytelse.Ytelse import no.nav.klage.oppgave.api.view.* -import no.nav.klage.oppgave.api.view.kabin.BehandlingIsDuplicateResponse -import no.nav.klage.oppgave.api.view.kabin.CreateAnkeBasedOnCompleteKabinInput -import no.nav.klage.oppgave.api.view.kabin.CreateBehandlingBasedOnKabinInput -import no.nav.klage.oppgave.api.view.kabin.CreateKlageBasedOnKabinInput +import no.nav.klage.oppgave.api.view.kabin.* import no.nav.klage.oppgave.clients.ereg.EregClient import no.nav.klage.oppgave.clients.norg2.Norg2Client import no.nav.klage.oppgave.clients.pdl.PdlFacade @@ -299,6 +296,28 @@ class MottakService( return behandling } + @Transactional + fun createOmgjoeringskravBasedOnJournalpost(input: CreateOmgjoeringskravBasedOnJournalpostInput): Behandling { + secureLogger.debug("Prøver å lage mottak fra OmgjoeringskravBasedOnJournalpost fra Kabin: {}", input) + + input.validate() + + val mottak = mottakRepository.save(input.toMottak()) + + secureLogger.debug("Har lagret følgende mottak basert på en CreateOmgjoeringskravBasedOnJournalpostInput: {}", mottak) + logger.debug("Har lagret mottak {}, publiserer nå event", mottak.id) + + val behandling = createBehandlingFromMottak.createBehandling(mottak = mottak, isBasedOnJournalpost = true) + + updateMetrics( + kilde = mottak.fagsystem.name, + ytelse = mottak.ytelse.navn, + type = mottak.type.navn, + ) + + return behandling + } + @Transactional fun createKlageMottakFromKabinInput(klageInput: CreateKlageBasedOnKabinInput): Behandling { secureLogger.debug("Prøver å lage mottak fra klage fra Kabin: {}", klageInput) @@ -492,6 +511,26 @@ class MottakService( ) } + fun CreateOmgjoeringskravBasedOnJournalpostInput.validate() { + validateDocumentNotAlreadyUsed(receivedDocumentJournalpostId, sakenGjelder.value) + validateYtelseAndHjemler( + ytelse = Ytelse.of(ytelseId), + hjemler = hjemmelIdList.map { Hjemmel.of(it) } + ) + validateDuplicate(Fagsystem.of(fagsystemId), kildereferanse, Type.ANKE) + validateJournalpostList(listOf(receivedDocumentJournalpostId)) + klager?.toPartId()?.let { validatePartId(it) } + validatePartId(sakenGjelder.toPartId()) + fullmektig?.let { validatePartId(it.toPartId()) } + validateDateNotInFuture(mottattNav, ::mottattNav.name) + validateKildeReferanse(kildereferanse) + validateEnhet(forrigeBehandlendeEnhet) + validateParts( + sakenGjelderIdentifikator = sakenGjelder.value, + prosessfullmektigIdentifikator = fullmektig?.value, + ) + } + fun behandlingIsDuplicate(fagsystem: Fagsystem, kildeReferanse: String, type: Type): BehandlingIsDuplicateResponse { return BehandlingIsDuplicateResponse( fagsystemId = fagsystem.id, @@ -843,5 +882,77 @@ class MottakService( ) } + fun CreateOmgjoeringskravBasedOnJournalpostInput.toMottak(): Mottak { + val sakenGjelder = SakenGjelder( + id = UUID.randomUUID(), + partId = sakenGjelder.toPartId(), + ) + + val klager = if (klager == null || klager.value == sakenGjelder.partId.value) { + Klager( + id = sakenGjelder.id, + partId = sakenGjelder.partId, + ) + } else { + Klager( + id = UUID.randomUUID(), + partId = PartId( + type = PartIdType.of(klager.type.name), + value = klager.value + ), + ) + } + + val prosessfullmektig = if (fullmektig != null) { + if (fullmektig.value == klager.partId.value) { + Prosessfullmektig( + id = klager.id, + partId = klager.partId, + navn = null, + address = null + ) + } else { + Prosessfullmektig( + id = UUID.randomUUID(), + partId = PartId( + type = PartIdType.of(fullmektig.type.name), + value = fullmektig.value + ), + navn = null, + address = null + ) + } + } else { + null + } + + return Mottak( + type = Type.OMGJOERINGSKRAV, + klager = klager, + sakenGjelder = sakenGjelder, + fagsystem = Fagsystem.of(fagsystemId), + fagsakId = fagsakId, + kildeReferanse = kildereferanse, + dvhReferanse = null, + hjemler = hjemmelIdList.map { MottakHjemmel(hjemmelId = it) }.toSet(), + forrigeBehandlendeEnhet = forrigeBehandlendeEnhet, + mottakDokument = mutableSetOf( + MottakDokument( + type = MottakDokumentType.BRUKERS_OMGJOERINGSKRAV, + journalpostId = receivedDocumentJournalpostId + ) + ), + brukersKlageMottattVedtaksinstans = mottattNav, + sakMottattKaDato = mottattNav.atStartOfDay(), + frist = frist, + ytelse = Ytelse.of(ytelseId), + forrigeBehandlingId = null, + sentFrom = Mottak.Sender.KABIN, + kommentar = null, + prosessfullmektig = prosessfullmektig, + forrigeSaksbehandlerident = null, + ) + } + fun getMottak(mottakId: UUID): Mottak = mottakRepository.getReferenceById(mottakId) } diff --git a/src/main/kotlin/no/nav/klage/oppgave/service/OmgjoeringskravbehandlingService.kt b/src/main/kotlin/no/nav/klage/oppgave/service/OmgjoeringskravbehandlingService.kt index 61e8cc771..c9f4068cb 100644 --- a/src/main/kotlin/no/nav/klage/oppgave/service/OmgjoeringskravbehandlingService.kt +++ b/src/main/kotlin/no/nav/klage/oppgave/service/OmgjoeringskravbehandlingService.kt @@ -27,37 +27,69 @@ class OmgjoeringskravbehandlingService( private val logger = getLogger(javaClass.enclosingClass) } - fun createOmgjoeringskravbehandlingFromMottak(mottak: Mottak): Behandling { - val omgjoeringskravbehandling = omgjoeringskravbehandlingRepository.save( - Omgjoeringskravbehandling( - klager = mottak.klager.copy(), - sakenGjelder = mottak.sakenGjelder?.copy() ?: mottak.klager.toSakenGjelder(), - prosessfullmektig = mottak.prosessfullmektig, - ytelse = mottak.ytelse, - type = mottak.type, - kildeReferanse = mottak.kildeReferanse, - dvhReferanse = mottak.dvhReferanse, - fagsystem = mottak.fagsystem, - fagsakId = mottak.fagsakId, - mottattKlageinstans = mottak.sakMottattKaDato, - tildeling = null, - frist = mottak.generateFrist(), - mottakId = mottak.id, - saksdokumenter = dokumentService.createSaksdokumenterFromJournalpostIdList(mottak.mottakDokument.map { it.journalpostId }), - kakaKvalitetsvurderingId = kakaApiGateway.createKvalitetsvurdering(kvalitetsvurderingVersion = 2).kvalitetsvurderingId, - kakaKvalitetsvurderingVersion = 2, - hjemler = mottak.mapToBehandlingHjemler(), - sourceBehandlingId = mottak.forrigeBehandlingId, - previousSaksbehandlerident = mottak.forrigeSaksbehandlerident, - oppgaveId = null, - klageBehandlendeEnhet = mottak.forrigeBehandlendeEnhet, - gosysOppgaveId = null, - tilbakekreving = false, - varsletBehandlingstid = null, - forlengetBehandlingstidDraft = null, + fun createOmgjoeringskravbehandlingFromMottak(mottak: Mottak, isBasedOnJournalpost: Boolean = false): Behandling { + val omgjoeringskravbehandling = if (isBasedOnJournalpost) { + omgjoeringskravbehandlingRepository.save( + OmgjoeringskravbehandlingBasedOnJournalpost( + klager = mottak.klager.copy(), + sakenGjelder = mottak.sakenGjelder?.copy() ?: mottak.klager.toSakenGjelder(), + prosessfullmektig = mottak.prosessfullmektig, + ytelse = mottak.ytelse, + type = mottak.type, + kildeReferanse = mottak.kildeReferanse, + dvhReferanse = mottak.dvhReferanse, + fagsystem = mottak.fagsystem, + fagsakId = mottak.fagsakId, + mottattKlageinstans = mottak.sakMottattKaDato, + tildeling = null, + frist = mottak.generateFrist(), + mottakId = mottak.id, + saksdokumenter = dokumentService.createSaksdokumenterFromJournalpostIdList(mottak.mottakDokument.map { it.journalpostId }), + kakaKvalitetsvurderingId = kakaApiGateway.createKvalitetsvurdering(kvalitetsvurderingVersion = 2).kvalitetsvurderingId, + kakaKvalitetsvurderingVersion = 2, + hjemler = mottak.mapToBehandlingHjemler(), + previousSaksbehandlerident = mottak.forrigeSaksbehandlerident, + oppgaveId = null, + klageBehandlendeEnhet = mottak.forrigeBehandlendeEnhet, + gosysOppgaveId = null, + tilbakekreving = false, + varsletBehandlingstid = null, + forlengetBehandlingstidDraft = null, + ) ) - ) - logger.debug("Created omgjoeringskravbehandling {} for mottak {}", omgjoeringskravbehandling.id, mottak.id) + } else { + omgjoeringskravbehandlingRepository.save( + OmgjoeringskravbehandlingBasedOnKabalBehandling( + klager = mottak.klager.copy(), + sakenGjelder = mottak.sakenGjelder?.copy() ?: mottak.klager.toSakenGjelder(), + prosessfullmektig = mottak.prosessfullmektig, + ytelse = mottak.ytelse, + type = mottak.type, + kildeReferanse = mottak.kildeReferanse, + dvhReferanse = mottak.dvhReferanse, + fagsystem = mottak.fagsystem, + fagsakId = mottak.fagsakId, + mottattKlageinstans = mottak.sakMottattKaDato, + tildeling = null, + frist = mottak.generateFrist(), + mottakId = mottak.id, + saksdokumenter = dokumentService.createSaksdokumenterFromJournalpostIdList(mottak.mottakDokument.map { it.journalpostId }), + kakaKvalitetsvurderingId = kakaApiGateway.createKvalitetsvurdering(kvalitetsvurderingVersion = 2).kvalitetsvurderingId, + kakaKvalitetsvurderingVersion = 2, + hjemler = mottak.mapToBehandlingHjemler(), + sourceBehandlingId = mottak.forrigeBehandlingId, + previousSaksbehandlerident = mottak.forrigeSaksbehandlerident, + oppgaveId = null, + klageBehandlendeEnhet = mottak.forrigeBehandlendeEnhet, + gosysOppgaveId = null, + tilbakekreving = false, + varsletBehandlingstid = null, + forlengetBehandlingstidDraft = null, + ) + ) + } + + logger.debug("Created {} with id {} for mottak with id {}", omgjoeringskravbehandling::javaClass.name, omgjoeringskravbehandling.id, mottak.id) if (mottak.forrigeBehandlingId != null) { val behandling = behandlingRepository.findById(mottak.forrigeBehandlingId).get() diff --git a/src/main/kotlin/no/nav/klage/oppgave/service/StatistikkTilDVHService.kt b/src/main/kotlin/no/nav/klage/oppgave/service/StatistikkTilDVHService.kt index dd9c7ec0c..5670659d7 100644 --- a/src/main/kotlin/no/nav/klage/oppgave/service/StatistikkTilDVHService.kt +++ b/src/main/kotlin/no/nav/klage/oppgave/service/StatistikkTilDVHService.kt @@ -59,7 +59,7 @@ class StatistikkTilDVHService( private fun StatistikkTilDVH.toJson(): String = objectMapper.writeValueAsString(this) fun shouldSendStats(behandlingEndretEvent: BehandlingEndretEvent): Boolean { - return if (behandlingEndretEvent.behandling.shouldUpdateInfotrygd()) { + return if (behandlingEndretEvent.behandling.shouldUpdateInfotrygd() || behandlingEndretEvent.behandling is OmgjoeringskravbehandlingBasedOnJournalpost) { false } else behandlingEndretEvent.endringslogginnslag.any { it.felt === Felt.TILDELT_SAKSBEHANDLERIDENT diff --git a/src/main/kotlin/no/nav/klage/oppgave/service/distribusjon/BehandlingAvslutningService.kt b/src/main/kotlin/no/nav/klage/oppgave/service/distribusjon/BehandlingAvslutningService.kt index 708447048..dbf973158 100644 --- a/src/main/kotlin/no/nav/klage/oppgave/service/distribusjon/BehandlingAvslutningService.kt +++ b/src/main/kotlin/no/nav/klage/oppgave/service/distribusjon/BehandlingAvslutningService.kt @@ -138,7 +138,8 @@ class BehandlingAvslutningService( ) if (sakInKlanke.typeResultat == SakFinishedInput.TypeResultat.RESULTAT.name && - sakInKlanke.nivaa == SakFinishedInput.Nivaa.KA.name) { + sakInKlanke.nivaa == SakFinishedInput.Nivaa.KA.name + ) { logger.warn("Behandlingen er allerede satt til ferdig i Infotrygd, så trenger ikke å oppdatere.") } else { val utfall = if (sakInKlanke.sakstype != null && sakInKlanke.sakstype == "KLAGE_TILBAKEBETALING") { @@ -160,7 +161,7 @@ class BehandlingAvslutningService( ) logger.debug("Behandlingen som er avsluttet ble sendt tilbake til Infotrygd.") } - } else { + } else if (behandling !is OmgjoeringskravbehandlingBasedOnJournalpost || behandling.fagsystem == Fagsystem.IT01) { //Notify modern fagsystem val behandlingEvent = BehandlingEvent( eventId = UUID.randomUUID(), @@ -186,6 +187,8 @@ class BehandlingAvslutningService( type = EventType.BEHANDLING_EVENT ) ) + } else { + logger.debug("Behandling er basert på journalpost, så vi trenger ikke å sende melding til fagsystem.") } } diff --git a/src/main/resources/db/migration/V204__omgjoeringskrav_from_journalpost.sql b/src/main/resources/db/migration/V204__omgjoeringskrav_from_journalpost.sql new file mode 100644 index 000000000..b9f87255a --- /dev/null +++ b/src/main/resources/db/migration/V204__omgjoeringskrav_from_journalpost.sql @@ -0,0 +1,3 @@ +UPDATE klage.behandling +SET behandling_type = 'omgjoeringskrav-based-on-kabal-behandling' +WHERE behandling_type = 'omgjoeringskrav'; \ No newline at end of file