Skip to content

Commit

Permalink
Ferdigstill sak og oppgave med forespoersel/selvbestemt ID (#712)
Browse files Browse the repository at this point in the history
* Ferdigstill sak og oppgave med forespoersel/selvbestemt ID

* Fall tilbake til gammel merkelapp når ny merkelapp ikke finnes
  • Loading branch information
bjerga authored Oct 15, 2024
1 parent 2b5b6c6 commit 1159ff9
Show file tree
Hide file tree
Showing 9 changed files with 362 additions and 108 deletions.
2 changes: 1 addition & 1 deletion gradle.properties
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ utilsVersion=0.9.0
aaregClientVersion=0.7.0
altinnClientVersion=0.4.0
maskinportenClientVersion=0.1.9
arbeidsgiverNotifikasjonKlientVersion=2.5.0
arbeidsgiverNotifikasjonKlientVersion=2.8.1
brregKlientVersion=0.5.0
dokarkivKlientVersion=0.3.1
inntektKlientVersion=0.4.0
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -96,7 +96,7 @@ fun RapidsConnection.createNotifikasjonRivers(
OpprettOppgaveLoeser(this, arbeidsgiverNotifikasjonKlient, linkUrl)

logger.info("Starter ${OppgaveFerdigLoeser::class.simpleName}...")
OppgaveFerdigLoeser(this, arbeidsgiverNotifikasjonKlient)
OppgaveFerdigLoeser(this, arbeidsgiverNotifikasjonKlient, linkUrl)

logger.info("Starter ${SlettSakLoeser::class.simpleName}...")
SlettSakLoeser(this, arbeidsgiverNotifikasjonKlient)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,12 +7,41 @@ import no.nav.helsearbeidsgiver.felles.metrics.Metrics
import java.util.UUID
import kotlin.time.Duration.Companion.days

private const val STATUS_TEKST_UNDER_BEHANDLING = "NAV trenger inntektsmelding"
private const val STATUS_TEKST_FERDIG = "Mottatt - Se kvittering eller korriger inntektsmelding"

// 13x30 dager
val sakLevetid = 390.days

object NotifikasjonTekst {
const val MERKELAPP = "Inntektsmelding sykepenger"

@Deprecated("Bruk NotifikasjonTekst.MERKELAPP. Utdatert siden 21.05.2024.")
const val MERKELAPP_GAMMEL = "Inntektsmelding"
const val OPPGAVE_TEKST = "Innsending av inntektsmelding"
const val STATUS_TEKST_UNDER_BEHANDLING = "NAV trenger inntektsmelding"
const val STATUS_TEKST_FERDIG = "Mottatt – Se kvittering eller korriger inntektsmelding"

fun lenkeFerdigstilt(
linkUrl: String,
forespoerselId: UUID,
): String = "$linkUrl/im-dialog/kvittering/$forespoerselId"

fun sakTittel(
sykmeldtNavn: String,
sykmeldtFoedselsdato: String,
): String = "Inntektsmelding for $sykmeldtNavn: f. $sykmeldtFoedselsdato"

fun oppgaveInnhold(
orgnr: String,
orgNavn: String,
): String =
listOf(
"$orgNavn - orgnr $orgnr: En av dine ansatte har søkt om sykepenger",
"og vi trenger inntektsmelding for å behandle søknaden.",
"Logg inn på Min side – arbeidsgiver hos NAV.",
"Hvis dere sender inntektsmelding via lønnssystem kan dere fortsatt gjøre dette,",
"og trenger ikke sende inn via Min side – arbeidsgiver.",
).joinToString(separator = " ")
}

fun ArbeidsgiverNotifikasjonKlient.opprettSak(
lenke: String,
inntektsmeldingTypeId: UUID,
Expand All @@ -23,18 +52,18 @@ fun ArbeidsgiverNotifikasjonKlient.opprettSak(
): String {
val statusTekst =
when (initiellStatus) {
SaksStatus.FERDIG -> STATUS_TEKST_FERDIG
else -> STATUS_TEKST_UNDER_BEHANDLING
SaksStatus.FERDIG -> NotifikasjonTekst.STATUS_TEKST_FERDIG
else -> NotifikasjonTekst.STATUS_TEKST_UNDER_BEHANDLING
}

return Metrics.agNotifikasjonRequest.recordTime(::opprettNySak) {
runBlocking {
opprettNySak(
virksomhetsnummer = orgnr,
merkelapp = "Inntektsmelding sykepenger",
merkelapp = NotifikasjonTekst.MERKELAPP,
grupperingsid = inntektsmeldingTypeId.toString(),
lenke = lenke,
tittel = "Inntektsmelding for $sykmeldtNavn: f. $sykmeldtFoedselsdato",
tittel = NotifikasjonTekst.sakTittel(sykmeldtNavn, sykmeldtFoedselsdato),
statusTekst = statusTekst,
initiellStatus = initiellStatus,
harddeleteOm = sakLevetid,
Expand All @@ -44,17 +73,25 @@ fun ArbeidsgiverNotifikasjonKlient.opprettSak(
}

fun ArbeidsgiverNotifikasjonKlient.ferdigstillSak(
sakId: String,
nyLenkeTilSak: String,
) {
forespoerselId: UUID,
nyLenke: String,
): Result<Unit> =
Metrics.agNotifikasjonRequest.recordTime(::nyStatusSak) {
runBlocking {
nyStatusSak(
id = sakId,
runCatching {
nyStatusSakByGrupperingsid(
grupperingsid = forespoerselId.toString(),
merkelapp = NotifikasjonTekst.MERKELAPP,
status = SaksStatus.FERDIG,
statusTekst = STATUS_TEKST_FERDIG,
nyLenkeTilSak = nyLenkeTilSak,
statusTekst = NotifikasjonTekst.STATUS_TEKST_FERDIG,
nyLenke = nyLenke,
)
}.recoverCatching {
nyStatusSakByGrupperingsid(
grupperingsid = forespoerselId.toString(),
merkelapp = NotifikasjonTekst.MERKELAPP_GAMMEL,
status = SaksStatus.FERDIG,
statusTekst = NotifikasjonTekst.STATUS_TEKST_FERDIG,
nyLenke = nyLenke,
)
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import com.github.navikt.tbd_libs.rapids_and_rivers_api.RapidsConnection
import kotlinx.serialization.builtins.serializer
import kotlinx.serialization.json.JsonElement
import no.nav.helsearbeidsgiver.arbeidsgivernotifikasjon.ArbeidsgiverNotifikasjonKlient
import no.nav.helsearbeidsgiver.arbeidsgivernotifikasjon.SakEllerOppgaveFinnesIkkeException
import no.nav.helsearbeidsgiver.felles.EventName
import no.nav.helsearbeidsgiver.felles.Key
import no.nav.helsearbeidsgiver.felles.json.les
Expand All @@ -17,6 +18,7 @@ import no.nav.helsearbeidsgiver.felles.rapidsrivers.demandValues
import no.nav.helsearbeidsgiver.felles.rapidsrivers.publish
import no.nav.helsearbeidsgiver.felles.rapidsrivers.requireKeys
import no.nav.helsearbeidsgiver.felles.utils.Log
import no.nav.helsearbeidsgiver.inntektsmelding.notifikasjon.NotifikasjonTekst
import no.nav.helsearbeidsgiver.utils.json.parseJson
import no.nav.helsearbeidsgiver.utils.json.serializer.UuidSerializer
import no.nav.helsearbeidsgiver.utils.json.toJson
Expand All @@ -29,6 +31,7 @@ import java.util.UUID
class OppgaveFerdigLoeser(
rapid: RapidsConnection,
private val agNotifikasjonKlient: ArbeidsgiverNotifikasjonKlient,
private val linkUrl: String,
) : River.PacketListener {
private val logger = logger()
private val sikkerLogger = sikkerLogger()
Expand Down Expand Up @@ -101,7 +104,26 @@ class OppgaveFerdigLoeser(
context: MessageContext,
) {
Metrics.agNotifikasjonRequest.recordTime(agNotifikasjonKlient::oppgaveUtfoert) {
agNotifikasjonKlient.oppgaveUtfoert(oppgaveId)
runCatching {
agNotifikasjonKlient.oppgaveUtfoertByEksternIdV2(
eksternId = forespoerselId.toString(),
merkelapp = NotifikasjonTekst.MERKELAPP,
nyLenke = NotifikasjonTekst.lenkeFerdigstilt(linkUrl, forespoerselId),
)
}.recoverCatching {
agNotifikasjonKlient.oppgaveUtfoertByEksternIdV2(
eksternId = forespoerselId.toString(),
merkelapp = NotifikasjonTekst.MERKELAPP_GAMMEL,
nyLenke = NotifikasjonTekst.lenkeFerdigstilt(linkUrl, forespoerselId),
)
}.onFailure {
if (it is SakEllerOppgaveFinnesIkkeException) {
logger.warn(it.message)
sikkerLogger.warn(it.message)
} else {
throw it
}
}
}

context.publish(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ import no.nav.helsearbeidsgiver.felles.rapidsrivers.model.Behov
import no.nav.helsearbeidsgiver.felles.rapidsrivers.model.Fail
import no.nav.helsearbeidsgiver.felles.rapidsrivers.publish
import no.nav.helsearbeidsgiver.felles.utils.simpleName
import no.nav.helsearbeidsgiver.inntektsmelding.notifikasjon.NotifikasjonTekst
import no.nav.helsearbeidsgiver.utils.json.parseJson
import no.nav.helsearbeidsgiver.utils.json.serializer.UuidSerializer
import no.nav.helsearbeidsgiver.utils.json.toJson
Expand Down Expand Up @@ -113,17 +114,13 @@ class OpprettOppgaveLoeser(
arbeidsgiverNotifikasjonKlient.opprettNyOppgave(
eksternId = forespoerselId.toString(),
lenke = "$linkUrl/im-dialog/$forespoerselId",
tekst = "Innsending av inntektsmelding",
tekst = NotifikasjonTekst.OPPGAVE_TEKST,
virksomhetsnummer = orgnr,
merkelapp = "Inntektsmelding sykepenger",
merkelapp = NotifikasjonTekst.MERKELAPP,
tidspunkt = null,
grupperingsid = forespoerselId.toString(),
varslingTittel = "Nav trenger inntektsmelding",
varslingInnhold = """$virksomhetnavn - orgnr $orgnr: En av dine ansatte har søkt om sykepenger
og vi trenger inntektsmelding for å behandle søknaden.
Logg inn på Min side – arbeidsgiver hos NAV.
Hvis dere sender inntektsmelding via lønnssystem kan dere fortsatt gjøre dette,
og trenger ikke sende inn via Min side – arbeidsgiver.""",
varslingTittel = NotifikasjonTekst.STATUS_TEKST_UNDER_BEHANDLING,
varslingInnhold = NotifikasjonTekst.oppgaveInnhold(orgnr, virksomhetnavn),
)
}
} catch (e: OpprettNyOppgaveException) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import com.github.navikt.tbd_libs.rapids_and_rivers_api.RapidsConnection
import kotlinx.serialization.builtins.serializer
import kotlinx.serialization.json.JsonElement
import no.nav.helsearbeidsgiver.arbeidsgivernotifikasjon.ArbeidsgiverNotifikasjonKlient
import no.nav.helsearbeidsgiver.arbeidsgivernotifikasjon.SakEllerOppgaveFinnesIkkeException
import no.nav.helsearbeidsgiver.felles.EventName
import no.nav.helsearbeidsgiver.felles.Key
import no.nav.helsearbeidsgiver.felles.json.les
Expand All @@ -16,6 +17,7 @@ import no.nav.helsearbeidsgiver.felles.rapidsrivers.demandValues
import no.nav.helsearbeidsgiver.felles.rapidsrivers.publish
import no.nav.helsearbeidsgiver.felles.rapidsrivers.requireKeys
import no.nav.helsearbeidsgiver.felles.utils.Log
import no.nav.helsearbeidsgiver.inntektsmelding.notifikasjon.NotifikasjonTekst
import no.nav.helsearbeidsgiver.inntektsmelding.notifikasjon.ferdigstillSak
import no.nav.helsearbeidsgiver.utils.json.parseJson
import no.nav.helsearbeidsgiver.utils.json.serializer.UuidSerializer
Expand Down Expand Up @@ -84,14 +86,24 @@ class SakFerdigLoeser(
val sakId = Key.SAK_ID.les(String.serializer(), melding)
val forespoerselId = Key.FORESPOERSEL_ID.les(UuidSerializer, melding)
val transaksjonId = Key.UUID.les(UuidSerializer, melding)
val nyLenkeTilSak = "$linkUrl/im-dialog/kvittering/$forespoerselId"

MdcUtils.withLogFields(
Log.sakId(sakId),
Log.forespoerselId(forespoerselId),
Log.transaksjonId(transaksjonId),
) {
agNotifikasjonKlient.ferdigstillSak(sakId = sakId, nyLenkeTilSak = nyLenkeTilSak)
agNotifikasjonKlient
.ferdigstillSak(
forespoerselId = forespoerselId,
nyLenke = NotifikasjonTekst.lenkeFerdigstilt(linkUrl, forespoerselId),
).onFailure {
if (it is SakEllerOppgaveFinnesIkkeException) {
logger.warn(it.message)
sikkerLogger.warn(it.message)
} else {
throw it
}
}

context.publish(
Key.EVENT_NAME to EventName.SAK_FERDIGSTILT.toJson(),
Expand Down
Loading

0 comments on commit 1159ff9

Please sign in to comment.