diff --git a/client/src/main/kotlin/no/nav/su/se/bakover/client/ProdClientsBuilder.kt b/client/src/main/kotlin/no/nav/su/se/bakover/client/ProdClientsBuilder.kt
index 8a033b2256..a9837c4abd 100644
--- a/client/src/main/kotlin/no/nav/su/se/bakover/client/ProdClientsBuilder.kt
+++ b/client/src/main/kotlin/no/nav/su/se/bakover/client/ProdClientsBuilder.kt
@@ -23,8 +23,8 @@ import no.nav.su.se.bakover.client.person.PersonClient
import no.nav.su.se.bakover.client.person.PersonClientConfig
import no.nav.su.se.bakover.client.skjerming.SkjermingClient
import no.nav.su.se.bakover.client.sts.StsClient
-import no.nav.su.se.bakover.client.sts.StsSamlClient
import no.nav.su.se.bakover.common.SU_SE_BAKOVER_CONSUMER_ID
+import no.nav.su.se.bakover.common.domain.auth.SamlTokenProvider
import no.nav.su.se.bakover.common.infrastructure.config.ApplicationConfig
import no.nav.su.se.bakover.common.infrastructure.jms.JmsConfig
import no.nav.su.se.bakover.dokument.infrastructure.client.PdfClient
@@ -39,6 +39,7 @@ data class ProdClientsBuilder(
private val jmsConfig: JmsConfig,
private val clock: Clock,
private val metrics: ClientMetrics,
+ private val samlTokenProvider: SamlTokenProvider,
) : ClientsBuilder {
override fun build(applicationConfig: ApplicationConfig): Clients {
@@ -118,11 +119,7 @@ data class ProdClientsBuilder(
kodeverk = kodeverk,
simuleringClient = SimuleringSoapClient(
baseUrl = applicationConfig.oppdrag.simulering.url,
- samlTokenProvider = StsSamlClient(
- baseUrl = applicationConfig.clientsConfig.stsSamlUrl,
- serviceUser = serviceUser,
- clock = clock,
- ),
+ samlTokenProvider = samlTokenProvider,
clock = clock,
),
utbetalingPublisher = UtbetalingMqPublisher(
diff --git a/client/src/main/kotlin/no/nav/su/se/bakover/client/oppdrag/simulering/SimuleringSoapClient.kt b/client/src/main/kotlin/no/nav/su/se/bakover/client/oppdrag/simulering/SimuleringSoapClient.kt
index 0514f01620..5c5631bf28 100644
--- a/client/src/main/kotlin/no/nav/su/se/bakover/client/oppdrag/simulering/SimuleringSoapClient.kt
+++ b/client/src/main/kotlin/no/nav/su/se/bakover/client/oppdrag/simulering/SimuleringSoapClient.kt
@@ -7,6 +7,7 @@ import arrow.core.flatMap
import arrow.core.getOrElse
import arrow.core.left
import no.nav.su.se.bakover.common.domain.auth.SamlTokenProvider
+import no.nav.su.se.bakover.common.infrastructure.soap.buildSoapEnvelope
import no.nav.su.se.bakover.common.sikkerLogg
import org.slf4j.LoggerFactory
import økonomi.domain.simulering.Simulering
@@ -52,7 +53,7 @@ internal class SimuleringSoapClient(
sikkerLogg.error("Feil ved simulering: Kunne ikke hente SAML-token for saksnummer: $saksnummer. soapBody: $soapBody")
return SimuleringFeilet.TekniskFeil.left()
}.toString()
- val soapRequest = buildXmlRequestSoapEnvelope(
+ val soapRequest = buildSoapEnvelope(
action = ACTION,
messageId = UUID.randomUUID().toString(),
serviceUrl = baseUrl,
diff --git a/client/src/main/kotlin/no/nav/su/se/bakover/client/oppdrag/simulering/SimuleringSoapBuilder.kt b/common/infrastructure/src/main/kotlin/no/nav/su/se/bakover/common/infrastructure/soap/SoapEnvelopeBuilder.kt
similarity index 93%
rename from client/src/main/kotlin/no/nav/su/se/bakover/client/oppdrag/simulering/SimuleringSoapBuilder.kt
rename to common/infrastructure/src/main/kotlin/no/nav/su/se/bakover/common/infrastructure/soap/SoapEnvelopeBuilder.kt
index 1eba6a6433..316bce3090 100644
--- a/client/src/main/kotlin/no/nav/su/se/bakover/client/oppdrag/simulering/SimuleringSoapBuilder.kt
+++ b/common/infrastructure/src/main/kotlin/no/nav/su/se/bakover/common/infrastructure/soap/SoapEnvelopeBuilder.kt
@@ -1,8 +1,8 @@
@file:Suppress("HttpUrlsUsage")
-package no.nav.su.se.bakover.client.oppdrag.simulering
+package no.nav.su.se.bakover.common.infrastructure.soap
-internal fun buildXmlRequestSoapEnvelope(
+fun buildSoapEnvelope(
action: String,
messageId: String,
serviceUrl: String,
diff --git a/test-common/src/main/kotlin/application/HttpServerTestSetup.kt b/test-common/src/main/kotlin/application/HttpServerTestSetup.kt
index 8064de5066..feee27c8a0 100644
--- a/test-common/src/main/kotlin/application/HttpServerTestSetup.kt
+++ b/test-common/src/main/kotlin/application/HttpServerTestSetup.kt
@@ -32,6 +32,7 @@ import no.nav.su.se.bakover.hendelse.domain.HendelsekonsumenterRepo
import no.nav.su.se.bakover.oppgave.domain.OppgaveHendelseRepo
import no.nav.su.se.bakover.service.tilbakekreving.TilbakekrevingUnderRevurderingService
import no.nav.su.se.bakover.test.applicationConfig
+import no.nav.su.se.bakover.test.auth.FakeSamlTokenProvider
import no.nav.su.se.bakover.test.fixedClock
import no.nav.su.se.bakover.test.jwt.asBearerToken
import no.nav.su.se.bakover.test.jwt.jwtStub
@@ -98,6 +99,7 @@ fun Application.runApplicationWithMocks(
brevService = brevService,
tilbakekrevingConfig = tilbakekrevingConfig,
dbMetrics = dbMetrics,
+ samlTokenProvider = FakeSamlTokenProvider(),
)
},
dokumentkomponenter: Dokumentkomponenter = mock(),
diff --git a/tilbakekreving/infrastructure/src/main/kotlin/tilbakekreving/infrastructure/client/TilbakekrevingClients.kt b/tilbakekreving/infrastructure/src/main/kotlin/tilbakekreving/infrastructure/client/TilbakekrevingClients.kt
index 8d6c51b6ca..fe1f5c33f7 100644
--- a/tilbakekreving/infrastructure/src/main/kotlin/tilbakekreving/infrastructure/client/TilbakekrevingClients.kt
+++ b/tilbakekreving/infrastructure/src/main/kotlin/tilbakekreving/infrastructure/client/TilbakekrevingClients.kt
@@ -1,6 +1,6 @@
package tilbakekreving.infrastructure.client
-import no.nav.su.se.bakover.common.domain.config.TilbakekrevingConfig
+import no.nav.su.se.bakover.common.domain.auth.SamlTokenProvider
import tilbakekreving.domain.vedtak.Tilbakekrevingsklient
import java.time.Clock
@@ -9,14 +9,14 @@ class TilbakekrevingClients(
) {
companion object {
fun create(
- tilbakekrevingConfig: TilbakekrevingConfig,
+ baseUrl: String,
+ samlTokenProvider: SamlTokenProvider,
clock: Clock,
): TilbakekrevingClients {
return TilbakekrevingClients(
tilbakekrevingsklient = TilbakekrevingSoapClient(
- tilbakekrevingPortType = TilbakekrevingSoapClientConfig(
- tilbakekrevingConfig = tilbakekrevingConfig,
- ).tilbakekrevingSoapService(),
+ baseUrl = baseUrl,
+ samlTokenProvider = samlTokenProvider,
clock = clock,
),
)
diff --git a/tilbakekreving/infrastructure/src/main/kotlin/tilbakekreving/infrastructure/client/TilbakekrevingSoapBodyBuilder.kt b/tilbakekreving/infrastructure/src/main/kotlin/tilbakekreving/infrastructure/client/TilbakekrevingSoapBodyBuilder.kt
new file mode 100644
index 0000000000..78217f9a40
--- /dev/null
+++ b/tilbakekreving/infrastructure/src/main/kotlin/tilbakekreving/infrastructure/client/TilbakekrevingSoapBodyBuilder.kt
@@ -0,0 +1,80 @@
+@file:Suppress("HttpUrlsUsage")
+
+package tilbakekreving.infrastructure.client
+
+import no.nav.su.se.bakover.common.ident.NavIdentBruker
+import tilbakekreving.domain.vurdering.PeriodevurderingMedKrav
+import tilbakekreving.domain.vurdering.VurderingerMedKrav
+import tilbakekreving.infrastructure.client.dto.AksjonsKode
+import tilbakekreving.infrastructure.client.dto.Skyld
+import tilbakekreving.infrastructure.client.dto.TilbakekrevingsHjemmel
+import tilbakekreving.infrastructure.client.dto.Tilbakekrevingsresultat
+import tilbakekreving.infrastructure.client.dto.TilbakekrevingsÅrsak
+import kotlin.math.max
+
+/**
+ * Se: https://confluence.adeo.no/display/OKSY/Detaljer+om+de+enkelte+ID-koder
+ * Se: https://github.com/navikt/tjenestespesifikasjoner/blob/master/tilbakekreving-v1-tjenestespesifikasjon/src/main/wsdl/no/nav/tilbakekreving/tilbakekreving-v1-tjenestespesifikasjon.wsdl
+ */
+internal fun buildTilbakekrevingSoapRequest(
+ vurderingerMedKrav: VurderingerMedKrav,
+ attestertAv: NavIdentBruker.Attestant,
+): String {
+ // TODO jah: Vurder om vi skal legge til datoVedtakFagsystem istedenfor å få dagens dato.
+ return """
+
+
+ ${AksjonsKode.FATT_VEDTAK.nummer}
+ ${vurderingerMedKrav.eksternVedtakId}
+ ${TilbakekrevingsHjemmel.T}
+ N
+ 8020
+ ${vurderingerMedKrav.eksternKontrollfelt}
+ $attestertAv
+ ${
+ vurderingerMedKrav.perioder.joinToString(separator = "\n") { periode ->
+ """
+
+
+ ${periode.periode.fraOgMed}
+ ${periode.periode.tilOgMed}
+
+ N
+ 0
+
+ SUUFORE
+ ${periode.bruttoTidligereUtbetalt}
+ ${periode.bruttoNyUtbetaling}
+ ${periode.bruttoSkalTilbakekreve}}
+ ${periode.bruttoSkalIkkeTilbakekreve}
+ ${periode.skattSomGårTilReduksjon}
+ ${
+ when (periode) {
+ is PeriodevurderingMedKrav.SkalIkkeTilbakekreve -> Tilbakekrevingsresultat.INGEN_TILBAKEKREV.toString()
+ is PeriodevurderingMedKrav.SkalTilbakekreve -> Tilbakekrevingsresultat.FULL_TILBAKEKREV.toString()
+ }
+ }
+ ${TilbakekrevingsÅrsak.ANNET}
+ ${
+ when (periode) {
+ is PeriodevurderingMedKrav.SkalIkkeTilbakekreve -> Skyld.IKKE_FORDELT.toString()
+ is PeriodevurderingMedKrav.SkalTilbakekreve -> Skyld.BRUKER.toString()
+ }
+ }
+
+
+ KL_KODE_FEIL_INNT
+ 0
+ ${max(periode.bruttoSkalTilbakekreve, periode.bruttoSkalIkkeTilbakekreve)}
+ 0
+ 0
+
+ """
+ }
+ }
+
+
+ """.trimIndent()
+}
diff --git a/tilbakekreving/infrastructure/src/main/kotlin/tilbakekreving/infrastructure/client/TilbakekrevingSoapClient.kt b/tilbakekreving/infrastructure/src/main/kotlin/tilbakekreving/infrastructure/client/TilbakekrevingSoapClient.kt
index 0517870e73..377a8a240c 100644
--- a/tilbakekreving/infrastructure/src/main/kotlin/tilbakekreving/infrastructure/client/TilbakekrevingSoapClient.kt
+++ b/tilbakekreving/infrastructure/src/main/kotlin/tilbakekreving/infrastructure/client/TilbakekrevingSoapClient.kt
@@ -1,3 +1,5 @@
+@file:Suppress("HttpUrlsUsage")
+
package tilbakekreving.infrastructure.client
import arrow.core.Either
@@ -5,10 +7,10 @@ import arrow.core.flatten
import arrow.core.getOrElse
import arrow.core.left
import arrow.core.right
-import no.nav.okonomi.tilbakekrevingservice.TilbakekrevingPortType
-import no.nav.okonomi.tilbakekrevingservice.TilbakekrevingsvedtakResponse
import no.nav.su.se.bakover.common.domain.Saksnummer
+import no.nav.su.se.bakover.common.domain.auth.SamlTokenProvider
import no.nav.su.se.bakover.common.ident.NavIdentBruker
+import no.nav.su.se.bakover.common.infrastructure.soap.buildSoapEnvelope
import no.nav.su.se.bakover.common.sikkerLogg
import no.nav.su.se.bakover.common.tid.Tidspunkt
import org.slf4j.LoggerFactory
@@ -16,15 +18,32 @@ import tilbakekreving.domain.kravgrunnlag.rått.RåTilbakekrevingsvedtakForsende
import tilbakekreving.domain.vedtak.KunneIkkeSendeTilbakekrevingsvedtak
import tilbakekreving.domain.vedtak.Tilbakekrevingsklient
import tilbakekreving.domain.vurdering.VurderingerMedKrav
+import tilbakekreving.infrastructure.client.dto.Alvorlighetsgrad
+import tilbakekreving.infrastructure.client.dto.deserializeTilbakekrevingsvedtakResponse
+import java.net.URI
+import java.net.http.HttpClient
+import java.net.http.HttpRequest
+import java.net.http.HttpResponse
import java.time.Clock
+import java.time.Duration
+import java.util.UUID
+
+private const val ACTION =
+ "http://okonomi.nav.no/tilbakekrevingService/TilbakekrevingPortType/tilbakekrevingsvedtakRequest"
class TilbakekrevingSoapClient(
- private val tilbakekrevingPortType: TilbakekrevingPortType,
+ private val baseUrl: String,
+ private val samlTokenProvider: SamlTokenProvider,
private val clock: Clock,
) : Tilbakekrevingsklient {
private val log = LoggerFactory.getLogger(this::class.java)
+ private val client: HttpClient = HttpClient.newBuilder()
+ .connectTimeout(Duration.ofSeconds(5))
+ .followRedirects(HttpClient.Redirect.NEVER)
+ .build()
+
/**
* Sender informasjon til oppdrag hvordan vi vil avgjøre om vi vil kreve tilbake eller ikke.
*
@@ -36,27 +55,48 @@ class TilbakekrevingSoapClient(
): Either {
val saksnummer = vurderingerMedKrav.saksnummer
return Either.catch {
- val request = mapToTilbakekrevingsvedtakRequest(
+ val soapBody = buildTilbakekrevingSoapRequest(
vurderingerMedKrav = vurderingerMedKrav,
attestertAv = attestertAv,
)
- val response = tilbakekrevingPortType.tilbakekrevingsvedtak(request)
+ val assertion = getSamlToken(saksnummer, soapBody).getOrElse { return it.left() }
+ val soapRequest = buildSoapEnvelope(
+ action = ACTION,
+ messageId = UUID.randomUUID().toString(),
+ serviceUrl = baseUrl,
+ assertion = assertion,
+ body = soapBody,
+ )
+ val httpRequest = HttpRequest.newBuilder(URI(baseUrl))
+ .header("SOAPAction", ACTION)
+ .POST(HttpRequest.BodyPublishers.ofString(soapRequest))
+ .build()
+ val (soapResponse: String?, status: Int) = client.send(httpRequest, HttpResponse.BodyHandlers.ofString())
+ .let {
+ it.body() to it.statusCode()
+ }
+ if (status != 200) {
+ log.error(
+ "Feil ved sending av tilbakekrevingsvedtak: Forventet statusCode 200 for saksnummer: $saksnummer, statusCode: $status. Se sikkerlogg for request.",
+ RuntimeException("Trigger stacktrace"),
+ )
+ sikkerLogg.error("Feil ved sending av tilbakekrevingsvedtak: Forventet statusCode 200 for saksnummer: $saksnummer, statusCode: $status, Response: $soapResponse Request: $soapRequest")
+ return KunneIkkeSendeTilbakekrevingsvedtak.left()
+ }
- val requestXmlString = TilbakekrevingSoapClientMapper.toXml(request)
- val responseXmlString = mapErrorResponseTilXmlString(response)
- kontrollerResponse(response, saksnummer)
+ kontrollerResponse(soapRequest, soapResponse, saksnummer)
.map {
log.info(
"SOAP kall mot tilbakekrevingskomponenten OK for saksnummer $saksnummer. Se sikkerlogg for detaljer.",
)
sikkerLogg.info(
- "SOAP kall mot tilbakekrevingskomponenten OK for saksnummer $saksnummer. Request: $requestXmlString. Response: $responseXmlString",
+ "SOAP kall mot tilbakekrevingskomponenten OK for saksnummer $saksnummer. Response: $soapResponse, Request: $soapRequest. ",
)
RåTilbakekrevingsvedtakForsendelse(
- requestXml = requestXmlString,
+ requestXml = soapRequest,
tidspunkt = Tidspunkt.now(clock),
- responseXml = responseXmlString,
+ responseXml = soapResponse,
)
}
}.mapLeft { throwable ->
@@ -72,25 +112,49 @@ class TilbakekrevingSoapClient(
}.flatten()
}
+ private fun getSamlToken(
+ saksnummer: Saksnummer,
+ soapBody: String,
+ ): Either {
+ return samlTokenProvider.samlToken().getOrElse {
+ // SamlTokenProvider logger, men mangler kontekst.
+ log.error(
+ "Feil ved sending av tilbakekrevingsvedtak: Kunne ikke hente SAML-token for saksnummer: $saksnummer. Se sikkerlogg for soap body.",
+ RuntimeException("Trigger stacktrace"),
+ )
+ sikkerLogg.error("Feil ved sending av tilbakekrevingsvedtak: Kunne ikke hente SAML-token for saksnummer: $saksnummer. soapBody: $soapBody")
+ return KunneIkkeSendeTilbakekrevingsvedtak.left()
+ }.toString().right()
+ }
+
private fun kontrollerResponse(
- response: TilbakekrevingsvedtakResponse,
+ request: String,
+ response: String,
saksnummer: Saksnummer,
): Either {
- return response.let {
- Alvorlighetsgrad.fromString(it.mmel.alvorlighetsgrad).let { alvorlighetsgrad ->
+ return response.deserializeTilbakekrevingsvedtakResponse().let {
+ if (it.mmel.alvorlighetsgrad == null) {
+ log.error(
+ "Mottok ikke mmel.alvorlighetsgrad. Antar det var OK. Må følges opp manuelt. Saksnummer $saksnummer. Se sikkerlogg for detaljer.",
+ RuntimeException("Legger på stacktrace for enklere debug"),
+ )
+ sikkerLogg.error(
+ "Mottok ikke mmel.alvorlighetsgrad. Antar det var OK. Må følges opp manuelt. Saksnummer $saksnummer. Response $response. Request: $request.",
+ )
+ Unit.right()
+ }
+ Alvorlighetsgrad.fromString(it.mmel.alvorlighetsgrad!!).let { alvorlighetsgrad ->
when (alvorlighetsgrad) {
Alvorlighetsgrad.OK -> Unit.right()
Alvorlighetsgrad.OK_MED_VARSEL,
-> {
log.error(
- "Fikk et varsel fra tilbakekrevingskomponenten når vi vedtok en tilbakekreving. For saksnummer $saksnummer. Se sikkerlogg for detaljer.",
+ "Fikk et varsel fra tilbakekrevingskomponenten når vi vedtok en tilbakekreving. Saksnummer $saksnummer. Se sikkerlogg for detaljer.",
RuntimeException("Legger på stacktrace for enklere debug"),
)
sikkerLogg.error(
- "Fikk et varsel fra tilbakekrevingskomponenten når vi vedtok en tilbakekreving. Den er fremdeles sendt OK. For saksnummer $saksnummer. Response ${
- mapErrorResponseTilXmlString(response)
- }",
+ "Fikk et varsel fra tilbakekrevingskomponenten når vi vedtok en tilbakekreving. Den er fremdeles sendt OK. Saksnummer $saksnummer. Response $response. Request: $request. ",
)
Unit.right()
}
@@ -99,15 +163,11 @@ class TilbakekrevingSoapClient(
Alvorlighetsgrad.SQL_FEIL,
-> {
log.error(
- "Fikk $alvorlighetsgrad fra tilbakekrevingskomponenten når vi vedtok en tilbakekreving. For saksnummer $saksnummer. Se sikkerlogg for detaljer.",
+ "Fikk $alvorlighetsgrad fra tilbakekrevingskomponenten når vi vedtok en tilbakekreving. Saksnummer $saksnummer. Se sikkerlogg for detaljer.",
RuntimeException("Legger på stacktrace for enklere debug"),
)
sikkerLogg.error(
- "Fikk et varsel fra tilbakekrevingskomponenten når vi vedtok en tilbakekreving. For saksnummer $saksnummer. Response ${
- mapErrorResponseTilXmlString(
- response,
- )
- }",
+ "Fikk et varsel fra tilbakekrevingskomponenten når vi vedtok en tilbakekreving. Saksnummer $saksnummer. Response $response. Request: $request.",
)
KunneIkkeSendeTilbakekrevingsvedtak.left()
}
@@ -115,34 +175,4 @@ class TilbakekrevingSoapClient(
}
}
}
-
- private fun mapErrorResponseTilXmlString(response: TilbakekrevingsvedtakResponse): String {
- return Either.catch {
- TilbakekrevingSoapClientMapper.toXml(
- response,
- )
- }.getOrElse {
- "Kunne ikke serialisere response til xml. Feilmelding: ${it.message}"
- }
- }
-
- enum class Alvorlighetsgrad(val value: String) {
- OK("00"),
-
- /** En varselmelding følger med */
- OK_MED_VARSEL("04"),
-
- /** Alvorlig feil som logges og stopper behandling av aktuelt tilfelle*/
- ALVORLIG_FEIL("08"),
- SQL_FEIL("12"),
- ;
-
- override fun toString() = value
-
- companion object {
- fun fromString(string: String): Alvorlighetsgrad {
- return entries.first { it.value == string }
- }
- }
- }
}
diff --git a/tilbakekreving/infrastructure/src/main/kotlin/tilbakekreving/infrastructure/client/TilbakekrevingSoapClientMapper.kt b/tilbakekreving/infrastructure/src/main/kotlin/tilbakekreving/infrastructure/client/TilbakekrevingSoapClientMapper.kt
deleted file mode 100644
index 649b147db3..0000000000
--- a/tilbakekreving/infrastructure/src/main/kotlin/tilbakekreving/infrastructure/client/TilbakekrevingSoapClientMapper.kt
+++ /dev/null
@@ -1,56 +0,0 @@
-package tilbakekreving.infrastructure.client
-
-import com.fasterxml.jackson.core.JsonGenerator
-import com.fasterxml.jackson.databind.DeserializationFeature
-import com.fasterxml.jackson.databind.JsonSerializer
-import com.fasterxml.jackson.databind.SerializationFeature
-import com.fasterxml.jackson.databind.SerializerProvider
-import com.fasterxml.jackson.databind.module.SimpleModule
-import com.fasterxml.jackson.dataformat.xml.JacksonXmlModule
-import com.fasterxml.jackson.dataformat.xml.XmlMapper
-import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule
-import com.fasterxml.jackson.module.kotlin.KotlinModule
-import com.fasterxml.jackson.module.kotlin.readValue
-import no.nav.okonomi.tilbakekrevingservice.TilbakekrevingsvedtakRequest
-import no.nav.okonomi.tilbakekrevingservice.TilbakekrevingsvedtakResponse
-import javax.xml.datatype.XMLGregorianCalendar
-
-/**
- * Er kun ment brukt for tester/stubs/lokale jobber/serialisere request/response til databasen.
- */
-internal data object TilbakekrevingSoapClientMapper {
-
- private val xmlMapper = XmlMapper(JacksonXmlModule().apply { setDefaultUseWrapper(false) }).apply {
- registerModule(KotlinModule.Builder().build())
- registerModule(JavaTimeModule())
- .disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS)
- .registerModule(CustomXMLGregorianCalendarModule())
- disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES)
- }
-
- fun toXml(request: TilbakekrevingsvedtakRequest): String {
- return xmlMapper.writeValueAsString(request)
- }
-
- fun toXml(response: TilbakekrevingsvedtakResponse): String {
- return xmlMapper.writeValueAsString(response)
- }
-
- fun fromXml(xml: String): TilbakekrevingsvedtakResponse {
- return xmlMapper.readValue(xml)
- }
-}
-
-private class CustomXMLGregorianCalendarSerializer : JsonSerializer() {
- override fun serialize(value: XMLGregorianCalendar?, gen: JsonGenerator, serializers: SerializerProvider) {
- if (value != null) {
- gen.writeString(value.toGregorianCalendar().toZonedDateTime().toLocalDate().toString())
- }
- }
-}
-
-private class CustomXMLGregorianCalendarModule : SimpleModule() {
- init {
- addSerializer(XMLGregorianCalendar::class.java, CustomXMLGregorianCalendarSerializer())
- }
-}
diff --git a/tilbakekreving/infrastructure/src/main/kotlin/tilbakekreving/infrastructure/client/TilbakekrevingSoapRequestMapper.kt b/tilbakekreving/infrastructure/src/main/kotlin/tilbakekreving/infrastructure/client/TilbakekrevingSoapRequestMapper.kt
deleted file mode 100644
index c2dfd52221..0000000000
--- a/tilbakekreving/infrastructure/src/main/kotlin/tilbakekreving/infrastructure/client/TilbakekrevingSoapRequestMapper.kt
+++ /dev/null
@@ -1,178 +0,0 @@
-package tilbakekreving.infrastructure.client
-
-import arrow.core.Nel
-import no.nav.okonomi.tilbakekrevingservice.TilbakekrevingsvedtakRequest
-import no.nav.su.se.bakover.common.ident.NavIdentBruker
-import no.nav.tilbakekreving.tilbakekrevingsvedtak.vedtak.v1.TilbakekrevingsbelopDto
-import no.nav.tilbakekreving.tilbakekrevingsvedtak.vedtak.v1.TilbakekrevingsperiodeDto
-import no.nav.tilbakekreving.tilbakekrevingsvedtak.vedtak.v1.TilbakekrevingsvedtakDto
-import no.nav.tilbakekreving.typer.v1.PeriodeDto
-import tilbakekreving.domain.vurdering.PeriodevurderingMedKrav
-import tilbakekreving.domain.vurdering.VurderingerMedKrav
-import java.math.BigDecimal
-import java.math.BigInteger
-import javax.xml.datatype.DatatypeFactory
-import kotlin.math.max
-
-internal enum class AksjonsKode(val nummer: String) {
- FATT_VEDTAK("8"),
-}
-
-/**
- * Dersom man bruker hjemmel 'ANNET' sender tilbakekrevingskomponenten posisjon 118 som blank til NAVI/Predator og den vil bli behandlet som foreldet.
- * Dersom man bruker hjemmel 'SUL_13' vil tilbakekrevingskomponenten sende T på posisjon 118 istedet og vi vil få forventet oppførsel.
- * Vi har også bestilt SUL_13-1, SUL_13-2, SUL_13-3 og SUL_13-4 som vi ikke har tatt i bruk enda.
- */
-internal enum class TilbakekrevingsHjemmel(val value: String) {
- T("SUL_13"),
- ;
-
- override fun toString() = value
-}
-
-internal enum class Tilbakekrevingsresultat {
- FULL_TILBAKEKREV,
- INGEN_TILBAKEKREV,
-}
-
-internal enum class TilbakekrevingsÅrsak {
- ANNET,
-}
-
-enum class Skyld {
- BRUKER,
- IKKE_FORDELT,
-}
-
-// Se: https://confluence.adeo.no/display/OKSY/Detaljer+om+de+enkelte+ID-koder
-// Kan låne litt herfra: https://github.com/navikt/permittering-refusjon-tilbakekreving/blob/4fdaddaf255d5753ac00fee56c5a9918065fdc8f/src/main/kotlin/no/nav/permittering/refusjon/tilbakekreving/behandling/vedtak/TilbakekrevingVedtakHurtigspor.kt
-fun mapToTilbakekrevingsvedtakRequest(
- vurderingerMedKrav: VurderingerMedKrav,
- attestertAv: NavIdentBruker.Attestant,
-): TilbakekrevingsvedtakRequest {
- return TilbakekrevingsvedtakRequest().apply {
- this.tilbakekrevingsvedtak = TilbakekrevingsvedtakDto().apply {
- // 1 - 441 - Kode-aksjon - X(01) - Krav - Aksjonskode:
- // 7 - midlertidig lagring
- // 8 - fatte vedtak
- // Aksjonskode 7 vil ikke kunne benyttes i fase 1.
- this.kodeAksjon = AksjonsKode.FATT_VEDTAK.nummer
-
- // 2 - 441 - Vedtak-id - 9(10) - Krav - Identifikasjon av tilbakekrevingsvedtaket
- this.vedtakId = BigInteger(vurderingerMedKrav.eksternVedtakId)
-
- // 3 - 441 - Dato-vedtak-fagsystem - X(08) - Valgfritt - Vedtaksdato på fagsystems vedtak. Omfeltet ikke er utfylt, legger TIlbakekrevingskomponenten inn dagens dato
- this.datoVedtakFagsystem = null
-
- // 4 - 441 - Kode-hjemmel - X(20) - Krav - Lovhjemmel om tilbakekrevingsvedtaket
- // TODO jah (alder): Denne bør mappes fra domenet. Gjenbruk de SU Alder bruker i dag.
- this.kodeHjemmel = TilbakekrevingsHjemmel.T.toString()
-
- // 5 - 441 - Renter-beregnes - X(01) - Betinget krav - 'J' Dersom det skal beregnes renter på kravet
- this.renterBeregnes = "N"
-
- // 6 - 441 - Enhet-ansvarlig - X(13) - Krav - Ansvarlig enhet
- this.enhetAnsvarlig = "8020"
-
- // 7 - 441 - Kontrollfelt - X(26) - Krav - Brukes ved innsending av tilbakekrevingsvedtak for å kontrollere at kravgrunnlaget ikke er blitt endret i mellomtiden
- this.kontrollfelt = vurderingerMedKrav.eksternKontrollfelt
-
- // 8 - 441 - Saksbeh-id - X(08) - Krav - Saksbehandler
- this.saksbehId = attestertAv.toString()
-
- // Liste over 442 - Tilbakekrevingsperiode
- this.tilbakekrevingsperiode.addAll(mapTilbakekrevingsperioder(vurderingerMedKrav.perioder))
- }
- }
-}
-
-val datatypeFactory: DatatypeFactory = DatatypeFactory.newInstance()
-
-private fun mapTilbakekrevingsperioder(
- perioder: Nel,
-): List {
- return perioder.map {
- TilbakekrevingsperiodeDto().apply {
- periode = PeriodeDto().apply {
- // Disse mappes om til en xsd:date. Vi bruker verdiene som kommer fra kravgrunnlaget og skal ikke trenge ta høyde for tidssone når vi serialiserer datoen, så lenge vi ikke tar høyde for tidsone når vi deserialiserer datoen.
- // TODO: jah test edge-caser med en utc vs cet-klokke
- // 1 - Dato-periode-fom - 442 - X(08) - Krav - Tilbakekrevingsperioder delt opp slik at ingen spenner over månedsskifter
- fom = datatypeFactory.newXMLGregorianCalendar(it.periode.fraOgMed.toString())
-
- // 2 - Dato-periode-tom - 442 - X(08) - Krav - Tilbakekrevingsperioder delt opp slik at ingen spenner over månedsskifter
- tom = datatypeFactory.newXMLGregorianCalendar(it.periode.tilOgMed.toString())
- }
- // 3 - 442 - Renter-beregnes - X(01) - Valgfritt - 'J' dersom det skal beregnes retner på kravet (nytt felt)
- renterBeregnes = "N"
-
- // 4 - 442 - Belop-renter - Evt. beregnede renter i fagrutinen (nytt felt)
- belopRenter = BigDecimal.ZERO
-
- // Liste over 443 - Tilbakekrevingsbeløp
- tilbakekrevingsbelop.addAll(
- listOf(
- mapYtelse(it),
- // TODO jah: Er det behov for å sende denne delen?
- mapFeilutbetaling(it),
- ),
- )
- }
- }
-}
-
-private fun mapYtelse(
- periode: PeriodevurderingMedKrav,
-): TilbakekrevingsbelopDto {
- return TilbakekrevingsbelopDto().apply {
- // 1 - 443 - Kode-klasse - X(20) - Krav - Klassifisering av stønad, skatt, trekk etc. Det må minimum sendes med klassekoder for feilutbetaling og de ytelsesklassekoder som er feilutbetalt.
- this.kodeKlasse = "SUUFORE"
-
- // 3 - 443 - Belop-oppr-utbet - 9(8)V99 - Krav - Opprinnelig beregnet beløp, dvs. utbetalingen som førte til feilutbetaling. Dersom saksbehandler deler opp i perioder annerledes enn det som er levert på kravgrunnlaget, må beløp-oppr og beløp-ny beregnes på de nye perioder, med beløp fordelt pr. virkedag.
- this.belopOpprUtbet = BigDecimal(periode.bruttoTidligereUtbetalt)
-
- // 5 - 443 - Belop-ny - 9(8)V99 - Krav - Beløpet som ble beregnet ved korrigeringen, evt. fordelt etter ny periodisering.
- this.belopNy = BigDecimal(periode.bruttoNyUtbetaling)
-
- // 7 - 443 - Belop-tilbakekreves - 9(8)V99 - Krav - Beløp som skal tilbakekreves for angitt periode. Ved ingen tilbakekreving skal beløpet settes til 0.
- this.belopTilbakekreves = BigDecimal(periode.bruttoSkalTilbakekreve)
-
- // 9 - 443 - Belop-uinnkrevd - 9(8)V99 - Valgfritt - Beløp som ikke skal tilbakekreves. Ved full tilbakekreving skal beløpet settes til 0. Om feltet ikke er utfylt vil Tilbakekrevingskomponenten sette inn beløp etter en forholdsmessig fordeling.
- this.belopUinnkrevd = BigDecimal(periode.bruttoSkalIkkeTilbakekreve)
-
- // 11 - 443 - Belop-skatt - 9(8)V99 - Valgfritt - Skattebeløp, som skal redusere beløp til innkreving.
- this.belopSkatt = BigDecimal(periode.skattSomGårTilReduksjon)
-
- this.kodeResultat = when (periode) {
- is PeriodevurderingMedKrav.SkalIkkeTilbakekreve -> Tilbakekrevingsresultat.INGEN_TILBAKEKREV.toString()
- is PeriodevurderingMedKrav.SkalTilbakekreve -> Tilbakekrevingsresultat.FULL_TILBAKEKREV.toString()
- }
- this.kodeAarsak = TilbakekrevingsÅrsak.ANNET.toString()
- this.kodeSkyld = when (periode) {
- is PeriodevurderingMedKrav.SkalIkkeTilbakekreve -> Skyld.IKKE_FORDELT.toString()
- is PeriodevurderingMedKrav.SkalTilbakekreve -> Skyld.BRUKER.toString()
- }
- }
-}
-
-private fun mapFeilutbetaling(
- periode: PeriodevurderingMedKrav,
-): TilbakekrevingsbelopDto {
- return TilbakekrevingsbelopDto().apply {
- // 1 - 443 - Kode-klasse - X(20) - Krav - Klassifisering av stønad, skatt, trekk etc. Det må minimum sendes med klassekoder for feilutbetaling og de ytelsesklassekoder som er feilutbetalt.
- this.kodeKlasse = "KL_KODE_FEIL_INNT"
-
- // 3 - 443 - Belop-oppr-utbet - 9(8)V99 - Krav - Egen betydning for KL_KODE_FEIL_INNT. Vil alltid være 0. Vi asserter på dette når vi tolker kravgrunnlaget fra oppdrag.
- this.belopOpprUtbet = BigDecimal.ZERO
-
- // TODO jah: Vi tar ikke med det feilutbetalte beløpet fra kravgrunnlaget, men det vil være det høyeste av disse. Bør vi legge det til?
- // 5 - 443 - Belop-ny - 9(8)V99 - Krav - Egen betydning for KL_KODE_FEIL_INNT. Vil være det feilutbetalte beløpet for perioden. Vi asserter på dette når vi tolker kravgrunnlaget fra oppdrag.
- this.belopNy = BigDecimal(max(periode.bruttoSkalTilbakekreve, periode.bruttoSkalIkkeTilbakekreve))
-
- // 7 - 443 - Belop-tilbakekreves - 9(8)V99 - Krav - Krav - Egen betydning for KL_KODE_FEIL_INNT. Vil alltid være 0. Vi asserter på dette når vi tolker kravgrunnlaget fra oppdrag.
- this.belopTilbakekreves = BigDecimal.ZERO
-
- // TODO jah: Verifiser om dette er valgfritt eller krav?
- // 9 - 443 - Belop-uinnkrevd - 9(8)V99 - Valgfritt - Krav - Egen betydning for KL_KODE_FEIL_INNT. Vil alltid være 0. Vi asserter på dette når vi tolker kravgrunnlaget fra oppdrag.
- this.belopUinnkrevd = BigDecimal.ZERO
- }
-}
diff --git a/tilbakekreving/infrastructure/src/main/kotlin/tilbakekreving/infrastructure/client/dto/AksjonsKode.kt b/tilbakekreving/infrastructure/src/main/kotlin/tilbakekreving/infrastructure/client/dto/AksjonsKode.kt
new file mode 100644
index 0000000000..caf68cfe8a
--- /dev/null
+++ b/tilbakekreving/infrastructure/src/main/kotlin/tilbakekreving/infrastructure/client/dto/AksjonsKode.kt
@@ -0,0 +1,5 @@
+package tilbakekreving.infrastructure.client.dto
+
+internal enum class AksjonsKode(val nummer: String) {
+ FATT_VEDTAK("8"),
+}
diff --git a/tilbakekreving/infrastructure/src/main/kotlin/tilbakekreving/infrastructure/client/dto/Alvorlighetsgrad.kt b/tilbakekreving/infrastructure/src/main/kotlin/tilbakekreving/infrastructure/client/dto/Alvorlighetsgrad.kt
new file mode 100644
index 0000000000..265777a11b
--- /dev/null
+++ b/tilbakekreving/infrastructure/src/main/kotlin/tilbakekreving/infrastructure/client/dto/Alvorlighetsgrad.kt
@@ -0,0 +1,21 @@
+package tilbakekreving.infrastructure.client.dto
+
+enum class Alvorlighetsgrad(val value: String) {
+ OK("00"),
+
+ /** En varselmelding følger med */
+ OK_MED_VARSEL("04"),
+
+ /** Alvorlig feil som logges og stopper behandling av aktuelt tilfelle*/
+ ALVORLIG_FEIL("08"),
+ SQL_FEIL("12"),
+ ;
+
+ override fun toString() = value
+
+ companion object {
+ fun fromString(string: String): Alvorlighetsgrad {
+ return entries.first { it.value == string }
+ }
+ }
+}
diff --git a/tilbakekreving/infrastructure/src/main/kotlin/tilbakekreving/infrastructure/client/dto/Skyld.kt b/tilbakekreving/infrastructure/src/main/kotlin/tilbakekreving/infrastructure/client/dto/Skyld.kt
index d7452fb48e..d0e15d12fd 100644
--- a/tilbakekreving/infrastructure/src/main/kotlin/tilbakekreving/infrastructure/client/dto/Skyld.kt
+++ b/tilbakekreving/infrastructure/src/main/kotlin/tilbakekreving/infrastructure/client/dto/Skyld.kt
@@ -1,6 +1,6 @@
package tilbakekreving.infrastructure.client.dto
-enum class Skyld {
+internal enum class Skyld {
BRUKER,
IKKE_FORDELT,
}
diff --git a/tilbakekreving/infrastructure/src/main/kotlin/tilbakekreving/infrastructure/client/dto/TilbakekrevingSoapResponse.kt b/tilbakekreving/infrastructure/src/main/kotlin/tilbakekreving/infrastructure/client/dto/TilbakekrevingSoapResponse.kt
new file mode 100644
index 0000000000..1e0cd6b01b
--- /dev/null
+++ b/tilbakekreving/infrastructure/src/main/kotlin/tilbakekreving/infrastructure/client/dto/TilbakekrevingSoapResponse.kt
@@ -0,0 +1,132 @@
+package tilbakekreving.infrastructure.client.dto
+
+import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlProperty
+import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlRootElement
+import com.fasterxml.jackson.module.kotlin.readValue
+import no.nav.su.se.bakover.common.infrastructure.xml.xmlMapper
+
+internal fun String.deserializeTilbakekrevingsvedtakResponse(): Tilbakekrevingsresponse {
+ return xmlMapper.readValue(this).body.tilbakekrevingsvedtakResponse.response
+}
+
+@JacksonXmlRootElement(localName = "Envelope", namespace = "http://schemas.xmlsoap.org/soap/envelope/")
+internal data class Envelope(
+ @JacksonXmlProperty(localName = "Body")
+ val body: Body,
+)
+
+internal data class Body(
+ val tilbakekrevingsvedtakResponse: ResponseWrapper,
+)
+
+internal data class ResponseWrapper(
+ val response: Tilbakekrevingsresponse,
+)
+
+internal data class Tilbakekrevingsresponse(
+ val mmel: Mmel,
+ val tilbakekrevingsvedtak: Tilbakekrevingsvedtak,
+)
+
+internal data class Mmel(
+ val systemId: String? = null,
+ val kodeMelding: String? = null,
+ // 00, 04, 08, 12
+ val alvorlighetsgrad: String? = null,
+ val beskrMelding: String? = null,
+ val sqlKode: String? = null,
+ val sqlState: String? = null,
+ val sqlMelding: String? = null,
+ val mqCompletionKode: String? = null,
+ val mqReasonKode: String? = null,
+ val programId: String? = null,
+ val sectionNavn: String? = null,
+)
+
+internal data class Tilbakekrevingsvedtak(
+ /**
+ * 1 - 441 - Kode-aksjon - X(01) - Krav - Aksjonskode:
+ * 7 - midlertidig lagring
+ * 8 - fatte vedtak
+ * Aksjonskode 7 vil ikke kunne benyttes i fase 1.
+ */
+ val kodeAksjon: String,
+ /**
+ * integer
+ * 2 - 441 - Vedtak-id - 9(10) - Krav - Identifikasjon av tilbakekrevingsvedtaket
+ * */
+ val vedtakId: String,
+ // 3 - 441 - Dato-vedtak-fagsystem - X(08) - Valgfritt - Vedtaksdato på fagsystems vedtak. Omfeltet ikke er utfylt, legger TIlbakekrevingskomponenten inn dagens dato
+ val datoVedtakFagsystem: String?,
+ // 4 - 441 - Kode-hjemmel - X(20) - Krav - Lovhjemmel om tilbakekrevingsvedtaket
+ val kodeHjemmel: String,
+ // 5 - 441 - Renter-beregnes - X(01) - Betinget krav - 'J' Dersom det skal beregnes renter på kravet
+ val renterBeregnes: String?,
+ // 6 - 441 - Enhet-ansvarlig - X(13) - Krav - Ansvarlig enhet
+ val enhetAnsvarlig: String,
+ // 7 - 441 - Kontrollfelt - X(26) - Krav - Brukes ved innsending av tilbakekrevingsvedtak for å kontrollere at kravgrunnlaget ikke er blitt endret i mellomtiden
+ val kontrollfelt: String,
+ // 8 - 441 - Saksbeh-id - X(08) - Krav - Saksbehandler
+ val saksbehId: String,
+ // Liste over 442 - Tilbakekrevingsperiode
+ val tilbakekrevingsperiode: List,
+)
+
+internal data class Tilbakekrevingsperiode(
+ val periode: Periode,
+ // 3 - 442 - Renter-beregnes - X(01) - Valgfritt - 'J' dersom det skal beregnes retner på kravet (nytt felt)
+ val renterBeregnes: String?,
+ /**
+ * decimal (totalDigits 11, fractionDigits 2)
+ * 4 - 442 - Belop-renter - Evt. beregnede renter i fagrutinen (nytt felt)
+ */
+ val belopRenter: String?,
+ // Liste over 443 - Tilbakekrevingsbeløp
+ val tilbakekrevingsbelop: List,
+)
+
+internal data class Periode(
+ // 1 - Dato-periode-fom - 442 - X(08) - Krav - Tilbakekrevingsperioder delt opp slik at ingen spenner over månedsskifter
+ val fom: String,
+ // 2 - Dato-periode-tom - 442 - X(08) - Krav - Tilbakekrevingsperioder delt opp slik at ingen spenner over månedsskifter
+ val tom: String,
+)
+
+internal data class Tilbakekrevingsbelop(
+ /**
+ * min len 1, max 20
+ * 1 - 443 - Kode-klasse - X(20) - Krav - Klassifisering av stønad, skatt, trekk etc. Det må minimum sendes med klassekoder for feilutbetaling og de ytelsesklassekoder som er feilutbetalt.
+ */
+ val kodeKlasse: String,
+ /**
+ * decimal (totalDigits 11, fractionDigits 2)
+ * 3 - 443 - Belop-oppr-utbet - 9(8)V99 - Krav - Egen betydning for KL_KODE_FEIL_INNT. Vil alltid være 0. Vi asserter på dette når vi tolker kravgrunnlaget fra oppdrag.
+ */
+ val belopOpprUtbet: String,
+ /**
+ * decimal (totalDigits 11, fractionDigits 2)
+ * 5 - 443 - Belop-ny - 9(8)V99 - Krav - Egen betydning for KL_KODE_FEIL_INNT. Vil være det feilutbetalte beløpet for perioden. Vi asserter på dette når vi tolker kravgrunnlaget fra oppdrag.
+ * TODO jah: Vi tar ikke med det feilutbetalte beløpet fra kravgrunnlaget, men det vil være det høyeste av disse. Bør vi legge det til?
+ */
+ val belopNy: String,
+ /**
+ * decimal (totalDigits 11, fractionDigits 2)
+ * 7 - 443 - Belop-tilbakekreves - 9(8)V99 - Krav - Krav - Egen betydning for KL_KODE_FEIL_INNT. Vil alltid være 0. Vi asserter på dette når vi tolker kravgrunnlaget fra oppdrag.
+ */
+ val belopTilbakekreves: String,
+
+ /**
+ * decimal (totalDigits 11, fractionDigits 2)
+ * 9 - 443 - Belop-uinnkrevd - 9(8)V99 - Valgfritt - Krav - Egen betydning for KL_KODE_FEIL_INNT. Vil alltid være 0. Vi asserter på dette når vi tolker kravgrunnlaget fra oppdrag.
+ * TODO jah: Verifiser om dette er valgfritt eller krav?
+ */
+ val belopUinnkrevd: String?,
+ /**
+ * decimal (totalDigits 11, fractionDigits 2)
+ * 11 - 443 - Belop-skatt - 9(8)V99 - Valgfritt - Skattebeløp, som skal redusere beløp til innkreving.
+ */
+ val belopSkatt: String?,
+ val kodeResultat: String,
+ val kodeAarsak: String,
+ val kodeSkyld: String?,
+)
diff --git a/tilbakekreving/infrastructure/src/main/kotlin/tilbakekreving/infrastructure/client/dto/TilbakekrevingsHjemmel.kt b/tilbakekreving/infrastructure/src/main/kotlin/tilbakekreving/infrastructure/client/dto/TilbakekrevingsHjemmel.kt
new file mode 100644
index 0000000000..7befc43fdf
--- /dev/null
+++ b/tilbakekreving/infrastructure/src/main/kotlin/tilbakekreving/infrastructure/client/dto/TilbakekrevingsHjemmel.kt
@@ -0,0 +1,13 @@
+package tilbakekreving.infrastructure.client.dto
+
+/**
+ * Dersom man bruker hjemmel 'ANNET' sender tilbakekrevingskomponenten posisjon 118 som blank til NAVI/Predator og den vil bli behandlet som foreldet.
+ * Dersom man bruker hjemmel 'SUL_13' vil tilbakekrevingskomponenten sende T på posisjon 118 istedet og vi vil få forventet oppførsel.
+ * Vi har også bestilt SUL_13-1, SUL_13-2, SUL_13-3 og SUL_13-4 som vi ikke har tatt i bruk enda.
+ */
+internal enum class TilbakekrevingsHjemmel(val value: String) {
+ T("SUL_13"),
+ ;
+
+ override fun toString() = value
+}
diff --git a/tilbakekreving/infrastructure/src/main/kotlin/tilbakekreving/infrastructure/client/dto/Tilbakekrevingsresultat.kt b/tilbakekreving/infrastructure/src/main/kotlin/tilbakekreving/infrastructure/client/dto/Tilbakekrevingsresultat.kt
new file mode 100644
index 0000000000..54972c5d9f
--- /dev/null
+++ b/tilbakekreving/infrastructure/src/main/kotlin/tilbakekreving/infrastructure/client/dto/Tilbakekrevingsresultat.kt
@@ -0,0 +1,6 @@
+package tilbakekreving.infrastructure.client.dto
+
+internal enum class Tilbakekrevingsresultat {
+ FULL_TILBAKEKREV,
+ INGEN_TILBAKEKREV,
+}
diff --git a/tilbakekreving/presentation/src/main/kotlin/tilbakekreving/presentation/Tilbakekrevingskomponenter.kt b/tilbakekreving/presentation/src/main/kotlin/tilbakekreving/presentation/Tilbakekrevingskomponenter.kt
index 43fe8fe844..30ef1db8f8 100644
--- a/tilbakekreving/presentation/src/main/kotlin/tilbakekreving/presentation/Tilbakekrevingskomponenter.kt
+++ b/tilbakekreving/presentation/src/main/kotlin/tilbakekreving/presentation/Tilbakekrevingskomponenter.kt
@@ -2,6 +2,7 @@ package tilbakekreving.presentation
import dokument.domain.brev.BrevService
import dokument.domain.hendelser.DokumentHendelseRepo
+import no.nav.su.se.bakover.common.domain.auth.SamlTokenProvider
import no.nav.su.se.bakover.common.domain.config.TilbakekrevingConfig
import no.nav.su.se.bakover.common.infrastructure.persistence.DbMetrics
import no.nav.su.se.bakover.common.persistence.SessionFactory
@@ -42,6 +43,7 @@ class Tilbakekrevingskomponenter(
brevService: BrevService,
tilbakekrevingConfig: TilbakekrevingConfig,
dbMetrics: DbMetrics,
+ samlTokenProvider: SamlTokenProvider,
): Tilbakekrevingskomponenter {
val repos = TilbakekrevingRepos.create(
clock = clock,
@@ -52,7 +54,8 @@ class Tilbakekrevingskomponenter(
dbMetrics = dbMetrics,
)
val clients = TilbakekrevingClients.create(
- tilbakekrevingConfig = tilbakekrevingConfig,
+ baseUrl = tilbakekrevingConfig.soap.url,
+ samlTokenProvider = samlTokenProvider,
clock = clock,
)
return Tilbakekrevingskomponenter(
diff --git a/web-regresjonstest/src/main/kotlin/no/nav/su/se/bakover/web/komponenttest/Komponenttest.kt b/web-regresjonstest/src/main/kotlin/no/nav/su/se/bakover/web/komponenttest/Komponenttest.kt
index 43b44fa0d4..8d4ce0264e 100644
--- a/web-regresjonstest/src/main/kotlin/no/nav/su/se/bakover/web/komponenttest/Komponenttest.kt
+++ b/web-regresjonstest/src/main/kotlin/no/nav/su/se/bakover/web/komponenttest/Komponenttest.kt
@@ -11,6 +11,7 @@ import no.nav.su.se.bakover.dokument.application.consumer.JournalførDokumentHen
import no.nav.su.se.bakover.dokument.infrastructure.database.Dokumentkomponenter
import no.nav.su.se.bakover.domain.DatabaseRepos
import no.nav.su.se.bakover.test.applicationConfig
+import no.nav.su.se.bakover.test.auth.FakeSamlTokenProvider
import no.nav.su.se.bakover.test.fixedClock
import no.nav.su.se.bakover.test.persistence.dbMetricsStub
import no.nav.su.se.bakover.test.persistence.withMigratedDb
@@ -137,6 +138,7 @@ internal fun withKomptestApplication(
brevService = services.brev,
tilbakekrevingConfig = applicationConfig.oppdrag.tilbakekreving,
dbMetrics = dbMetricsStub,
+ samlTokenProvider = FakeSamlTokenProvider(),
)
},
dokumentKomponenterBuilder: (databaseRepos: DatabaseRepos, services: Services, clients: Clients) -> Dokumentkomponenter = { databaseRepos, services, clients ->
diff --git a/web/src/main/kotlin/no/nav/su/se/bakover/web/StartServer.kt b/web/src/main/kotlin/no/nav/su/se/bakover/web/StartServer.kt
index a8931127ad..b4a2e9fd84 100644
--- a/web/src/main/kotlin/no/nav/su/se/bakover/web/StartServer.kt
+++ b/web/src/main/kotlin/no/nav/su/se/bakover/web/StartServer.kt
@@ -9,6 +9,8 @@ import io.ktor.server.routing.Route
import no.nav.su.se.bakover.client.Clients
import no.nav.su.se.bakover.client.ProdClientsBuilder
import no.nav.su.se.bakover.client.StubClientsBuilder
+import no.nav.su.se.bakover.client.sts.StsSamlClient
+import no.nav.su.se.bakover.common.domain.auth.SamlTokenProvider
import no.nav.su.se.bakover.common.domain.config.TilbakekrevingConfig
import no.nav.su.se.bakover.common.infrastructure.config.ApplicationConfig
import no.nav.su.se.bakover.common.infrastructure.jms.JmsConfig
@@ -91,6 +93,11 @@ fun Application.susebakover(
råttKravgrunnlagMapper = mapRåttKravgrunnlag,
),
jmsConfig: JmsConfig = JmsConfig(applicationConfig),
+ samlTokenProvider: SamlTokenProvider = StsSamlClient(
+ baseUrl = applicationConfig.clientsConfig.stsSamlUrl,
+ serviceUser = applicationConfig.serviceUser,
+ clock = clock,
+ ),
clients: Clients = if (applicationConfig.runtimeEnvironment != ApplicationConfig.RuntimeEnvironment.Nais) {
StubClientsBuilder(
clock = clock,
@@ -101,6 +108,7 @@ fun Application.susebakover(
jmsConfig,
clock = clock,
metrics = clientMetrics,
+ samlTokenProvider = samlTokenProvider,
).build(applicationConfig)
},
services: Services = run {
@@ -146,6 +154,7 @@ fun Application.susebakover(
brevService = brevService,
tilbakekrevingConfig = tilbakekrevingConfig,
dbMetrics = dbMetrics,
+ samlTokenProvider = samlTokenProvider,
)
},
dokumentkomponenter: Dokumentkomponenter = run {