-
Notifications
You must be signed in to change notification settings - Fork 2
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #2737 from navikt/sende-henleggelsebrev-automatisk…
…-ved-trukket-søknad Sende henleggelsebrev automatisk ved trukket søknad
- Loading branch information
Showing
11 changed files
with
625 additions
and
140 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
59 changes: 0 additions & 59 deletions
59
src/main/kotlin/no/nav/familie/ef/sak/behandling/HenleggService.kt
This file was deleted.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
126 changes: 126 additions & 0 deletions
126
src/main/kotlin/no/nav/familie/ef/sak/behandling/henlegg/HenleggBehandlingController.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,126 @@ | ||
package no.nav.familie.ef.sak.behandling.henlegg | ||
import no.nav.familie.ef.sak.AuditLoggerEvent | ||
import no.nav.familie.ef.sak.behandling.BehandlingService | ||
import no.nav.familie.ef.sak.behandling.dto.BehandlingDto | ||
import no.nav.familie.ef.sak.behandling.dto.HenlagtDto | ||
import no.nav.familie.ef.sak.behandling.dto.HenlagtÅrsak | ||
import no.nav.familie.ef.sak.behandling.dto.tilDto | ||
import no.nav.familie.ef.sak.fagsak.FagsakService | ||
import no.nav.familie.ef.sak.fagsak.domain.Fagsak | ||
import no.nav.familie.ef.sak.felles.util.isEqualOrAfter | ||
import no.nav.familie.ef.sak.infrastruktur.exception.feilHvis | ||
import no.nav.familie.ef.sak.infrastruktur.featuretoggle.FeatureToggleService | ||
import no.nav.familie.ef.sak.infrastruktur.featuretoggle.Toggle | ||
import no.nav.familie.ef.sak.infrastruktur.sikkerhet.SikkerhetContext | ||
import no.nav.familie.ef.sak.infrastruktur.sikkerhet.TilgangService | ||
import no.nav.familie.ef.sak.opplysninger.personopplysninger.PersonopplysningerService | ||
import no.nav.familie.kontrakter.felles.Ressurs | ||
import no.nav.familie.prosessering.domene.Task | ||
import no.nav.familie.prosessering.internal.TaskService | ||
import no.nav.security.token.support.core.api.ProtectedWithClaims | ||
import org.springframework.web.bind.annotation.GetMapping | ||
import org.springframework.web.bind.annotation.PathVariable | ||
import org.springframework.web.bind.annotation.PostMapping | ||
import org.springframework.web.bind.annotation.RequestBody | ||
import org.springframework.web.bind.annotation.RequestMapping | ||
import org.springframework.web.bind.annotation.RestController | ||
import java.time.LocalDate | ||
import java.util.UUID | ||
|
||
@RestController | ||
@RequestMapping(path = ["/api/behandling"]) | ||
@ProtectedWithClaims(issuer = "azuread") | ||
class HenleggBehandlingController( | ||
private val behandlingService: BehandlingService, | ||
private val fagsakService: FagsakService, | ||
private val henleggService: HenleggService, | ||
private val tilgangService: TilgangService, | ||
private val featureToggleService: FeatureToggleService, | ||
private val taskService: TaskService, | ||
private val personopplysningerService: PersonopplysningerService, | ||
) { | ||
@GetMapping("/{behandlingId}/henlegg/brev/forhandsvisning") | ||
fun genererHenleggBrev( | ||
@PathVariable behandlingId: UUID, | ||
): Ressurs<ByteArray> { | ||
val saksbehandling = behandlingService.hentSaksbehandling(behandlingId) | ||
tilgangService.validerTilgangTilBehandling(saksbehandling, AuditLoggerEvent.ACCESS) | ||
val saksbehandlerSignatur = SikkerhetContext.hentSaksbehandlerNavn(strict = true) | ||
return henleggBrevRessurs(behandlingId, saksbehandlerSignatur) | ||
} | ||
|
||
private fun henleggBrevRessurs( | ||
behandlingId: UUID, | ||
saksbehandlerSignatur: String, | ||
) = Ressurs.success(henleggService.genererHenleggelsesbrev(behandlingId, saksbehandlerSignatur)) | ||
|
||
@PostMapping("{behandlingId}/henlegg") | ||
fun henleggBehandling( | ||
@PathVariable behandlingId: UUID, | ||
@RequestBody henlagt: HenlagtDto, | ||
): Ressurs<BehandlingDto> { | ||
tilgangService.validerTilgangTilBehandling(behandlingId, AuditLoggerEvent.UPDATE) | ||
tilgangService.validerHarSaksbehandlerrolle() | ||
val henlagtBehandling = henleggService.henleggBehandling(behandlingId, henlagt) | ||
val fagsak: Fagsak = fagsakService.hentFagsak(henlagtBehandling.fagsakId) | ||
if (henlagt.skalSendeHenleggelsesbrev) { | ||
sendHenleggelsesbrev(henlagt, behandlingId) | ||
} | ||
|
||
return Ressurs.success(henlagtBehandling.tilDto(fagsak.stønadstype)) | ||
} | ||
|
||
private fun sendHenleggelsesbrev( | ||
henlagt: HenlagtDto, | ||
behandlingId: UUID, | ||
) { | ||
validerIkkeSendBrevPåFeilType(henlagt) | ||
validerIkkeSendBrevHvisVergemålEllerFullmakt(behandlingService.hentAktivIdent(behandlingId)) | ||
val saksbehandlerSignatur = SikkerhetContext.hentSaksbehandlerNavn(strict = true) | ||
val saksbehandlerIdent = SikkerhetContext.hentSaksbehandler() | ||
val task: Task = | ||
SendTrukketSøknadHenleggelsesbrevTask.opprettTask(behandlingId, saksbehandlerSignatur, saksbehandlerIdent) | ||
|
||
taskService.save(task) | ||
} | ||
|
||
private fun validerIkkeSendBrevPåFeilType(henlagt: HenlagtDto) { | ||
feilHvis(henlagt.skalSendeHenleggelsesbrev && henlagt.årsak == HenlagtÅrsak.FEILREGISTRERT) { "Skal ikke sende brev hvis type er ulik trukket tilbake" } | ||
} | ||
|
||
private fun validerIkkeSendBrevHvisVergemålEllerFullmakt( | ||
ident: String, | ||
) { | ||
val personopplysninger = personopplysningerService.hentPersonopplysningerFraRegister(ident) | ||
val harVerge = personopplysninger.vergemål.isNotEmpty() | ||
val harFullmakt: Boolean = | ||
personopplysninger.fullmakt | ||
.filter { | ||
it.gyldigTilOgMed == null || | ||
( | ||
it.gyldigTilOgMed.isEqualOrAfter( | ||
LocalDate.now(), | ||
) | ||
) | ||
}.isNotEmpty() | ||
feilHvis(harVerge || harFullmakt) { | ||
"Skal ikke sende brev hvis person er tilknyttet vergemål eller fullmakt" | ||
} | ||
} | ||
|
||
@PostMapping("{behandlingId}/henlegg/behandling-uten-oppgave") | ||
fun henleggBehandlingUtenOppgave( | ||
@PathVariable behandlingId: UUID, | ||
@RequestBody henlagt: HenlagtDto, | ||
): Ressurs<BehandlingDto> { | ||
tilgangService.validerTilgangTilBehandling(behandlingId, AuditLoggerEvent.UPDATE) | ||
tilgangService.validerHarSaksbehandlerrolle() | ||
feilHvis(!featureToggleService.isEnabled(toggle = Toggle.HENLEGG_BEHANDLING_UTEN_OPPGAVE)) { | ||
"Henleggelse av behandling uten å henlegge oppgave er ikke mulig - toggle ikke enablet for bruker" | ||
} | ||
|
||
val henlagtBehandling = henleggService.henleggBehandlingUtenOppgave(behandlingId, henlagt) | ||
val fagsak: Fagsak = fagsakService.hentFagsak(henlagtBehandling.fagsakId) | ||
return Ressurs.success(henlagtBehandling.tilDto(fagsak.stønadstype)) | ||
} | ||
} |
141 changes: 141 additions & 0 deletions
141
src/main/kotlin/no/nav/familie/ef/sak/behandling/henlegg/HenleggService.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,141 @@ | ||
package no.nav.familie.ef.sak.behandling.henlegg | ||
|
||
import no.nav.familie.ef.sak.behandling.BehandlingService | ||
import no.nav.familie.ef.sak.behandling.domain.Behandling | ||
import no.nav.familie.ef.sak.behandling.dto.HenlagtDto | ||
import no.nav.familie.ef.sak.brev.BrevClient | ||
import no.nav.familie.ef.sak.brev.FamilieDokumentClient | ||
import no.nav.familie.ef.sak.brev.VedtaksbrevService | ||
import no.nav.familie.ef.sak.brev.dto.Flettefelter | ||
import no.nav.familie.ef.sak.felles.util.norskFormat | ||
import no.nav.familie.ef.sak.oppgave.OppgaveService | ||
import no.nav.familie.ef.sak.opplysninger.personopplysninger.PersonopplysningerService | ||
import no.nav.familie.kontrakter.felles.ef.StønadType | ||
import no.nav.familie.kontrakter.felles.objectMapper | ||
import no.nav.familie.kontrakter.felles.oppgave.Oppgavetype | ||
import org.springframework.stereotype.Service | ||
import org.springframework.transaction.annotation.Transactional | ||
import java.time.LocalDate | ||
import java.util.UUID | ||
|
||
@Service | ||
class HenleggService( | ||
private val behandlingService: BehandlingService, | ||
private val oppgaveService: OppgaveService, | ||
private val brevClient: BrevClient, | ||
private val familieDokumentClient: FamilieDokumentClient, | ||
private val personopplysningerService: PersonopplysningerService, | ||
) { | ||
@Transactional | ||
fun henleggBehandling( | ||
behandlingId: UUID, | ||
henlagt: HenlagtDto, | ||
): Behandling { | ||
val behandling = behandlingService.henleggBehandling(behandlingId, henlagt) | ||
ferdigstillOppgaveTask(behandling) | ||
return behandling | ||
} | ||
|
||
@Transactional | ||
fun henleggBehandlingUtenOppgave( | ||
behandlingId: UUID, | ||
henlagt: HenlagtDto, | ||
): Behandling { | ||
val behandling = behandlingService.henleggBehandling(behandlingId, henlagt, false) | ||
settEfOppgaveTilFerdig(behandling) | ||
return behandling | ||
} | ||
|
||
private fun ferdigstillOppgaveTask(behandling: Behandling) { | ||
oppgaveService.ferdigstillOppgaveHvisOppgaveFinnes( | ||
behandlingId = behandling.id, | ||
Oppgavetype.BehandleSak, | ||
ignorerFeilregistrert = true, | ||
) | ||
oppgaveService.ferdigstillOppgaveHvisOppgaveFinnes( | ||
behandlingId = behandling.id, | ||
Oppgavetype.BehandleUnderkjentVedtak, | ||
ignorerFeilregistrert = true, | ||
) | ||
} | ||
|
||
private fun settEfOppgaveTilFerdig(behandling: Behandling) { | ||
oppgaveService.settEfOppgaveTilFerdig( | ||
behandlingId = behandling.id, | ||
Oppgavetype.BehandleSak, | ||
) | ||
oppgaveService.settEfOppgaveTilFerdig( | ||
behandlingId = behandling.id, | ||
Oppgavetype.BehandleUnderkjentVedtak, | ||
) | ||
} | ||
|
||
fun genererHenleggelsesbrev( | ||
behandlingId: UUID, | ||
saksbehandlerSignatur: String, | ||
): ByteArray { | ||
val saksbehandling = behandlingService.hentSaksbehandling(behandlingId) | ||
val personIdent = behandlingService.hentAktivIdent(behandlingId) | ||
val stønadstype = saksbehandling.stønadstype | ||
val henleggelsesbrev = | ||
Henleggelsesbrev( | ||
lagDemalMedFlettefeltForStønadstype(stønadstype), | ||
lagNavnOgIdentFlettefelt(personIdent), | ||
) | ||
|
||
val html = | ||
brevClient | ||
.genererHtml( | ||
brevmal = "informasjonsbrevTrukketSoknad", | ||
saksbehandlerBrevrequest = objectMapper.valueToTree(henleggelsesbrev), | ||
saksbehandlersignatur = saksbehandlerSignatur, | ||
enhet = "Nav Arbeid og ytelser", | ||
skjulBeslutterSignatur = true, | ||
).replace(VedtaksbrevService.BESLUTTER_VEDTAKSDATO_PLACEHOLDER, LocalDate.now().norskFormat()) | ||
|
||
return familieDokumentClient.genererPdfFraHtml(html) | ||
} | ||
|
||
private fun lagNavnOgIdentFlettefelt(personIdent: String): Flettefelter { | ||
val visningsNavn = personopplysningerService.hentGjeldeneNavn(listOf(personIdent)).getValue(personIdent) | ||
val navnOgIdentFlettefelt = Flettefelter(navn = listOf(visningsNavn), fodselsnummer = listOf(personIdent)) | ||
return navnOgIdentFlettefelt | ||
} | ||
|
||
private fun lagDemalMedFlettefeltForStønadstype(stønadstype: StønadType) = | ||
Delmaler( | ||
listOf( | ||
Delmal( | ||
DelmalFlettefelt( | ||
listOf( | ||
lagStringForDelmalFlettefelt(stønadstype), | ||
), | ||
), | ||
), | ||
), | ||
) | ||
|
||
private fun lagStringForDelmalFlettefelt(stønadstype: StønadType): String = | ||
when (stønadstype) { | ||
StønadType.BARNETILSYN -> "stønad til " + stønadstype.name.lowercase() | ||
StønadType.SKOLEPENGER -> "stønad til " + stønadstype.name.lowercase() | ||
else -> stønadstype.name.lowercase() | ||
} | ||
} | ||
|
||
private data class Henleggelsesbrev( | ||
val delmaler: Delmaler, | ||
val flettefelter: Flettefelter, | ||
) | ||
|
||
private data class Delmal( | ||
val flettefelter: DelmalFlettefelt, | ||
) | ||
|
||
private data class Delmaler( | ||
val stonadstype: List<Delmal>, | ||
) | ||
|
||
private data class DelmalFlettefelt( | ||
val stonadstype: List<String>, | ||
) |
Oops, something went wrong.