|
| 1 | +@file:Suppress("HttpUrlsUsage") |
| 2 | + |
| 3 | +package tilbakekreving.infrastructure.client |
| 4 | + |
| 5 | +import arrow.core.Either |
| 6 | +import no.nav.su.se.bakover.common.domain.extensions.toStringWithDecimals |
| 7 | +import no.nav.su.se.bakover.common.ident.NavIdentBruker |
| 8 | +import no.nav.su.se.bakover.common.sikkerLogg |
| 9 | +import org.slf4j.LoggerFactory |
| 10 | +import tilbakekreving.domain.vedtak.KunneIkkeSendeTilbakekrevingsvedtak |
| 11 | +import tilbakekreving.domain.vurdering.PeriodevurderingMedKrav |
| 12 | +import tilbakekreving.domain.vurdering.VurderingerMedKrav |
| 13 | +import tilbakekreving.infrastructure.client.dto.AksjonsKode |
| 14 | +import tilbakekreving.infrastructure.client.dto.Skyld |
| 15 | +import tilbakekreving.infrastructure.client.dto.TilbakekrevingsHjemmel |
| 16 | +import tilbakekreving.infrastructure.client.dto.Tilbakekrevingsresultat |
| 17 | +import tilbakekreving.infrastructure.client.dto.TilbakekrevingsÅrsak |
| 18 | +import kotlin.math.max |
| 19 | + |
| 20 | +private val log = LoggerFactory.getLogger("tilbakekreving.infrastructure.client.buildTilbakekrevingSoapRequest") |
| 21 | + |
| 22 | +/** |
| 23 | + * Se: https://confluence.adeo.no/display/OKSY/Detaljer+om+de+enkelte+ID-koder |
| 24 | + * Se: https://github.com/navikt/tjenestespesifikasjoner/blob/master/tilbakekreving-v1-tjenestespesifikasjon/src/main/wsdl/no/nav/tilbakekreving/tilbakekreving-v1-tjenestespesifikasjon.wsdl |
| 25 | + */ |
| 26 | +internal fun buildTilbakekrevingSoapRequest( |
| 27 | + vurderingerMedKrav: VurderingerMedKrav, |
| 28 | + attestertAv: NavIdentBruker.Attestant, |
| 29 | +): Either<KunneIkkeSendeTilbakekrevingsvedtak, String> { |
| 30 | + return Either.catch { |
| 31 | + // TODO jah: Vurder om vi skal legge til datoVedtakFagsystem istedenfor å få dagens dato. |
| 32 | + """ |
| 33 | +<ns4:tilbakekrevingsvedtakRequest xmlns:ns2="urn:no:nav:tilbakekreving:typer:v1" |
| 34 | + xmlns:ns4="http://okonomi.nav.no/tilbakekrevingService/" |
| 35 | + xmlns:ns3="urn:no:nav:tilbakekreving:tilbakekrevingsvedtak:vedtak:v1"> |
| 36 | + <tilbakekrevingsvedtak> |
| 37 | + <ns3:kodeAksjon>${AksjonsKode.FATT_VEDTAK.nummer}</ns3:kodeAksjon> |
| 38 | + <ns3:vedtakId>${vurderingerMedKrav.eksternVedtakId}</ns3:vedtakId> |
| 39 | + <ns3:kodeHjemmel>${TilbakekrevingsHjemmel.T}</ns3:kodeHjemmel> |
| 40 | + <ns3:renterBeregnes>N</ns3:renterBeregnes> |
| 41 | + <ns3:enhetAnsvarlig>8020</ns3:enhetAnsvarlig> |
| 42 | + <ns3:kontrollfelt>${vurderingerMedKrav.eksternKontrollfelt}</ns3:kontrollfelt> |
| 43 | + <ns3:saksbehId>$attestertAv</ns3:saksbehId> |
| 44 | + ${ |
| 45 | + vurderingerMedKrav.perioder.joinToString(separator = "\n") { periode -> |
| 46 | + """ |
| 47 | + <ns3:tilbakekrevingsperiode> |
| 48 | + <ns3:periode> |
| 49 | + <ns2:fom>${periode.periode.fraOgMed}</ns2:fom> |
| 50 | + <ns2:tom>${periode.periode.tilOgMed}</ns2:tom> |
| 51 | + </ns3:periode> |
| 52 | + <ns3:renterBeregnes>N</ns3:renterBeregnes> |
| 53 | + <ns3:belopRenter>0.00</ns3:belopRenter> |
| 54 | + <ns3:tilbakekrevingsbelop> |
| 55 | + <ns3:kodeKlasse>SUUFORE</ns3:kodeKlasse> |
| 56 | + <ns3:belopOpprUtbet>${periode.bruttoTidligereUtbetalt.toStringWithDecimals(2)}</ns3:belopOpprUtbet> |
| 57 | + <ns3:belopNy>${periode.bruttoNyUtbetaling.toStringWithDecimals(2)}</ns3:belopNy> |
| 58 | + <ns3:belopTilbakekreves>${periode.bruttoSkalTilbakekreve.toStringWithDecimals(2)}</ns3:belopTilbakekreves> |
| 59 | + <ns3:belopUinnkrevd>${periode.bruttoSkalIkkeTilbakekreve.toStringWithDecimals(2)}</ns3:belopUinnkrevd> |
| 60 | + <ns3:belopSkatt>${periode.skattSomGårTilReduksjon.toStringWithDecimals(2)}</ns3:belopSkatt> |
| 61 | + <ns3:kodeResultat>${ |
| 62 | + when (periode) { |
| 63 | + is PeriodevurderingMedKrav.SkalIkkeTilbakekreve -> Tilbakekrevingsresultat.INGEN_TILBAKEKREV.toString() |
| 64 | + is PeriodevurderingMedKrav.SkalTilbakekreve -> Tilbakekrevingsresultat.FULL_TILBAKEKREV.toString() |
| 65 | + } |
| 66 | + }</ns3:kodeResultat> |
| 67 | + <ns3:kodeAarsak>${TilbakekrevingsÅrsak.ANNET}</ns3:kodeAarsak> |
| 68 | + <ns3:kodeSkyld>${ |
| 69 | + when (periode) { |
| 70 | + is PeriodevurderingMedKrav.SkalIkkeTilbakekreve -> Skyld.IKKE_FORDELT.toString() |
| 71 | + is PeriodevurderingMedKrav.SkalTilbakekreve -> Skyld.BRUKER.toString() |
| 72 | + } |
| 73 | + }</ns3:kodeSkyld> |
| 74 | + </ns3:tilbakekrevingsbelop> |
| 75 | + <ns3:tilbakekrevingsbelop> |
| 76 | + <ns3:kodeKlasse>KL_KODE_FEIL_INNT</ns3:kodeKlasse> |
| 77 | + <ns3:belopOpprUtbet>0.00</ns3:belopOpprUtbet> |
| 78 | + <ns3:belopNy>${ |
| 79 | + max( |
| 80 | + periode.bruttoSkalTilbakekreve, |
| 81 | + periode.bruttoSkalIkkeTilbakekreve, |
| 82 | + ).toStringWithDecimals(2) |
| 83 | + }</ns3:belopNy> |
| 84 | + <ns3:belopTilbakekreves>0.00</ns3:belopTilbakekreves> |
| 85 | + <ns3:belopUinnkrevd>0.00</ns3:belopUinnkrevd> |
| 86 | + </ns3:tilbakekrevingsbelop> |
| 87 | + </ns3:tilbakekrevingsperiode>""" |
| 88 | + } |
| 89 | + } |
| 90 | + </tilbakekrevingsvedtak> |
| 91 | +</ns4:tilbakekrevingsvedtakRequest> |
| 92 | + """.trimIndent() |
| 93 | + }.mapLeft { |
| 94 | + log.error( |
| 95 | + "Feil ved sending av tilbakekrevingsvedtak: Klarte ikke serialisere requesten som vi skulle sende til Tilbakekrevingsmodulen (OS). Se sikkerlogg for mer kontekst.", |
| 96 | + RuntimeException("Trigger stacktrace"), |
| 97 | + ) |
| 98 | + sikkerLogg.error( |
| 99 | + "Feil ved sending av tilbakekrevingsvedtak: Klarte ikke serialisere requesten som vi skulle sende til Tilbakekrevingsmodulen (OS). vurderingerMedKrav: $vurderingerMedKrav, attestertAv: $attestertAv", |
| 100 | + it, |
| 101 | + ) |
| 102 | + KunneIkkeSendeTilbakekrevingsvedtak |
| 103 | + } |
| 104 | +} |
0 commit comments