Skip to content

Commit

Permalink
Populerer stonad_tom og stonad_fom i TilkjentYtelse for 0 utbetaling (#…
Browse files Browse the repository at this point in the history
…3978)

### 💰 Hva skal gjøres, og hvorfor?
Populerer stonad_tom og stonad_fom i TilkjentYtelse, hvis behandlingen
ikke har vært gjennom iverksettMotOppdrag

Dette fordi disse feltene brukes for å sette løpende fagsak til
avsluttet når stønaden er over.

Lagt til forvalter-endepunkt for å populere felter, se og trigge
flagg-jobb


### 🔎️ Er det noe spesielt du ønsker tilbakemelding om?
_Er det noe du er usikker på eller ønsker å diskutere? Beskriv det
gjerne her eller kommenter koden det gjelder._

### ✅ Checklist
_Har du husket alle punktene i listen?_
- [ ] Jeg har testet mine endringer i henhold til akseptansekriteriene
🕵️
- [ ] Jeg har config- eller sql-endringer. I så fall, husk manuell
deploy til miljø for å verifisere endringene.
- [ ] Jeg har skrevet tester. Hvis du ikke har skrevet tester, beskriv
hvorfor under 👇

_Jeg har ikke skrevet tester fordi:_

### 💬 Ønsker du en muntlig gjennomgang?
- [ ] Ja
- [ ] Nei

---------

Co-authored-by: Ida Merete Enholm <[email protected]>
  • Loading branch information
stigebil and idaame authored Sep 21, 2023
1 parent a2098e9 commit 788dc99
Show file tree
Hide file tree
Showing 5 changed files with 93 additions and 0 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -4,12 +4,16 @@ import no.nav.familie.ba.sak.common.secureLogger
import no.nav.familie.ba.sak.integrasjoner.familieintegrasjoner.IntegrasjonClient
import no.nav.familie.ba.sak.integrasjoner.oppgave.domene.OppgaveRepository
import no.nav.familie.ba.sak.kjerne.autovedtak.småbarnstillegg.RestartAvSmåbarnstilleggService
import no.nav.familie.ba.sak.kjerne.behandling.domene.BehandlingRepository
import no.nav.familie.ba.sak.kjerne.fagsak.FagsakRepository
import no.nav.familie.ba.sak.kjerne.fagsak.FagsakService
import no.nav.security.token.support.core.api.ProtectedWithClaims
import org.slf4j.Logger
import org.slf4j.LoggerFactory
import org.springframework.http.MediaType
import org.springframework.http.ResponseEntity
import org.springframework.transaction.annotation.Transactional
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
Expand All @@ -26,6 +30,9 @@ class ForvalterController(
private val integrasjonClient: IntegrasjonClient,
private val restartAvSmåbarnstilleggService: RestartAvSmåbarnstilleggService,
private val forvalterService: ForvalterService,
private val behandlingsRepository: BehandlingRepository,
private val fagsakRepository: FagsakRepository,
private val fagsakService: FagsakService,
) {
private val logger: Logger = LoggerFactory.getLogger(ForvalterController::class.java)

Expand Down Expand Up @@ -180,6 +187,35 @@ class ForvalterController(
return ResponseEntity.ok(SendUtbetalingsoppdragPåNyttResponse(iverksattOk = iverksattOk, harFeil = harFeil))
}

@PostMapping("/populer-stonad-fom-tom/{behandlingId}")
fun populerStønadFomTomForBehandling(@PathVariable behandlingId: Long): ResponseEntity<Boolean> {
return ResponseEntity.ok(forvalterService.oppdaterStønadFomTomForBehandling(behandlingId))
}

@PostMapping("/populer-stonad-fom-tom-alle/{limit}")
fun populerStønadFomTom(@PathVariable limit: Int): ResponseEntity<String> {
behandlingsRepository.finnAktiveBehandlingerSomManglerStønadTom(limit).forEach { behandlingId ->
try {
val harOppdatertTom = forvalterService.oppdaterStønadFomTomForBehandling(behandlingId)
logger.info("oppdaterStønadFomTomForBehandling for behandlingId=$behandlingId resultat=$harOppdatertTom")
} catch (e: Exception) {
logger.warn("Fikk ikke satt stønadTom for behandling=$behandlingId", e)
}
}

return ResponseEntity.ok("ok")
}

@GetMapping("/finnFagsakerSomSkalAvsluttesNy")
fun finnFagsakerSomSkalAvsluttesNy(): ResponseEntity<List<Long>> {
return ResponseEntity.ok(fagsakRepository.finnFagsakerSomSkalAvsluttesNy())
}

@PostMapping("oppdaterLøpendeStatusPåFagsaker")
fun oppdaterLøpendeStatusPåFagsaker() {
fagsakService.oppdaterLøpendeStatusPåFagsaker()
}

data class SendUtbetalingsoppdragPåNyttResponse(
val iverksattOk: Set<Long>,
val harFeil: Set<Pair<Long, String>>,
Expand Down
16 changes: 16 additions & 0 deletions src/main/kotlin/no/nav/familie/ba/sak/internal/ForvalterService.kt
Original file line number Diff line number Diff line change
Expand Up @@ -399,6 +399,22 @@ class ForvalterService(
null
}
}

@Transactional(propagation = Propagation.REQUIRES_NEW)
fun oppdaterStønadFomTomForBehandling(behandlingId: Long): Boolean {
tilkjentYtelseRepository.findByBehandling(behandlingId).apply {
if (this.stønadFom == null && this.stønadTom == null && this.utbetalingsoppdrag == null && this.andelerTilkjentYtelse.isNotEmpty()) {
this.stønadTom = this.andelerTilkjentYtelse.maxOfOrNull { it.stønadTom }
this.stønadFom = this.andelerTilkjentYtelse.minOfOrNull { it.stønadFom }
tilkjentYtelseRepository.save(this)
return true
} else if (this.stønadFom == null && this.stønadTom == null && this.utbetalingsoppdrag == null && this.andelerTilkjentYtelse.isEmpty()) {
logger.info("Skipper oppdatering av tilkjent ytelse for behandlingId=$behandlingId fordi aty er tom, så får ikke satt tom/fom")
return false
}
}
return false
}
}

data class ValidertUtbetalingsoppdrag(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -155,4 +155,18 @@ interface BehandlingRepository : JpaRepository<Behandling, Long> {

@Query(value = "SELECT b.status FROM Behandling b WHERE b.id = :behandlingId")
fun finnStatus(behandlingId: Long): BehandlingStatus

@Query(
"""select distinct(b.id) from behandling b
join fagsak f on f.id = b.fk_fagsak_id
join tilkjent_ytelse ty on b.id = ty.fk_behandling_id
where b.aktiv = true
AND f.status = 'LØPENDE'
AND b.status = 'AVSLUTTET'
AND ty.stonad_tom is null
AND ty.utbetalingsoppdrag is null
LIMIT :limit""",
nativeQuery = true,
)
fun finnAktiveBehandlingerSomManglerStønadTom(limit: Int): List<Long>
}
Original file line number Diff line number Diff line change
Expand Up @@ -80,6 +80,23 @@ interface FagsakRepository : JpaRepository<Fagsak, Long> {
)
fun finnFagsakerSomSkalAvsluttes(): List<Long>

@Query(
value = """WITH sisteiverksatte AS (
SELECT DISTINCT ON (b.fk_fagsak_id) b.id, b.fk_fagsak_id, stonad_tom
FROM behandling b
INNER JOIN tilkjent_ytelse ty ON b.id = ty.fk_behandling_id
INNER JOIN fagsak f ON f.id = b.fk_fagsak_id
WHERE f.status = 'LØPENDE'
AND f.arkivert = FALSE
ORDER BY b.fk_fagsak_id, b.aktivert_tid DESC)
SELECT silp.fk_fagsak_id
FROM sisteiverksatte silp
WHERE silp.stonad_tom < DATE_TRUNC('month', NOW())""",
nativeQuery = true,
)
fun finnFagsakerSomSkalAvsluttesNy(): List<Long>

/**
* Denne skal plukke fagsaker som løper _og_ har barn født innenfor anngitt tidsintervall.
* Brukes til å sende ut automatiske brev ved reduksjon 6 og 18 år blant annet.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ import no.nav.familie.ba.sak.kjerne.behandling.domene.Behandling
import no.nav.familie.ba.sak.kjerne.behandling.domene.BehandlingStatus
import no.nav.familie.ba.sak.kjerne.behandling.domene.Behandlingsresultat
import no.nav.familie.ba.sak.kjerne.beregning.BeregningService
import no.nav.familie.ba.sak.kjerne.beregning.domene.TilkjentYtelse
import no.nav.familie.ba.sak.kjerne.fagsak.FagsakService
import no.nav.familie.ba.sak.kjerne.fagsak.FagsakStatus
import no.nav.familie.ba.sak.kjerne.logg.LoggService
Expand Down Expand Up @@ -64,6 +65,12 @@ class FerdigstillBehandling(

private fun oppdaterFagsakStatus(behandling: Behandling) {
val tilkjentYtelse = beregningService.hentTilkjentYtelseForBehandling(behandlingId = behandling.id)

if (skalOppdatereStønadFomOgTomForIverksatteBehandlingerIkkeSendtTilOppdrag(tilkjentYtelse)) { // 0-utbetalinger/omregning
tilkjentYtelse.stønadTom = tilkjentYtelse.andelerTilkjentYtelse.maxOfOrNull { it.stønadTom }
tilkjentYtelse.stønadFom = tilkjentYtelse.andelerTilkjentYtelse.minOfOrNull { it.stønadFom }
}

val erLøpende = tilkjentYtelse.andelerTilkjentYtelse.any { it.stønadTom >= inneværendeMåned() }
if (erLøpende) {
fagsakService.oppdaterStatus(behandling.fagsak, FagsakStatus.LØPENDE)
Expand All @@ -72,6 +79,9 @@ class FerdigstillBehandling(
}
}

private fun skalOppdatereStønadFomOgTomForIverksatteBehandlingerIkkeSendtTilOppdrag(tilkjentYtelse: TilkjentYtelse) =
tilkjentYtelse.stønadFom == null && tilkjentYtelse.stønadTom == null && tilkjentYtelse.utbetalingsoppdrag == null

override fun stegType(): StegType {
return StegType.FERDIGSTILLE_BEHANDLING
}
Expand Down

0 comments on commit 788dc99

Please sign in to comment.