Skip to content

Commit fee33a6

Browse files
committed
Flytt dokument/pdfgen inn i vedtak
1 parent b746c58 commit fee33a6

File tree

71 files changed

+1511
-441
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

71 files changed

+1511
-441
lines changed

.nais/nais.yml

+2-7
Original file line numberDiff line numberDiff line change
@@ -56,12 +56,13 @@ spec:
5656
outbound:
5757
rules:
5858
- application: tiltakspenger-tiltak
59-
- application: tiltakspenger-dokument
6059
- application: utsjekk
6160
namespace: helved
6261
external:
6362
- host: {{ urlPdl }}
6463
- host: {{ urlSkjerming }}
64+
- host: {{ urlJoark }}
65+
- host: {{ urlDokdist }}
6566
inbound:
6667
rules:
6768
- application: tiltakspenger-saksbehandler
@@ -79,12 +80,6 @@ spec:
7980
permissions:
8081
roles:
8182
- "lage_hendelser"
82-
- application: tiltakspenger-vedtak-rivers
83-
namespace: tpts
84-
cluster: {{ cluster }}
85-
permissions:
86-
roles:
87-
- "lage_hendelser"
8883
env:
8984
{{#each azure.groups}}
9085
- name: {{this.name}}

.nais/vars/dev.yml

+2
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@ cluster: dev-gcp
88
tenant: trygdeetaten.no
99
urlPdl: pdl-api.dev-fss-pub.nais.io
1010
urlSkjerming: skjermede-personer-pip.intern.dev.nav.no
11+
urlJoark: dokarkiv.dev-fss-pub.nais.io
12+
urlDokdist: dokdistfordeling.dev-fss-pub.nais.io
1113
azure:
1214
groups:
1315
- name: ROLE_SAKSBEHANDLER

.nais/vars/prod.yml

+2
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@ cluster: prod-gcp
88
tenant: nav.no
99
urlPdl: pdl-api.prod-fss-pub.nais.io
1010
urlSkjerming: skjermede-personer-pip.intern.nav.no
11+
urlJoark: dokarkiv.prod-fss-pub.nais.io
12+
urlDokdist: dokdistfordeling.prod-fss-pub.nais.io
1113
azure:
1214
groups:
1315
- name: ROLE_SAKSBEHANDLER

app/build.gradle.kts

+5-1
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,11 @@ dependencies {
8383
// Helved/Utsjekk/Utbetaling
8484
implementation("no.nav.utsjekk.kontrakter:iverksett:$iverksettVersjon")
8585

86-
// DIV
86+
// TODO post-mvp jah: Fjern denne når meldekort er over på pdfgen
87+
implementation("org.apache.pdfbox:pdfbox:2.0.28")
88+
89+
90+
// Arrow
8791
implementation("io.arrow-kt:arrow-core:1.2.4")
8892

8993
testImplementation(platform("org.junit:junit-bom:5.11.0"))

app/src/main/kotlin/no/nav/tiltakspenger/vedtak/App.kt

+8-2
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@ import no.nav.tiltakspenger.vedtak.db.DataSourceSetup
1818
import no.nav.tiltakspenger.vedtak.jobber.TaskExecutor
1919
import no.nav.tiltakspenger.vedtak.routes.vedtakApi
2020
import no.nav.tiltakspenger.vedtak.tilgang.JWTInnloggetSaksbehandlerProvider
21+
import kotlin.time.Duration.Companion.minutes
22+
import kotlin.time.Duration.Companion.seconds
2123

2224
fun main() {
2325
System.setProperty("logback.configurationFile", Configuration.logbackConfigurationFile())
@@ -49,19 +51,23 @@ fun main() {
4951
RunCheckFactory(
5052
leaderPodLookup =
5153
object : LeaderPodLookup {
52-
override fun amITheLeader(localHostName: String): Either<LeaderPodLookupFeil, Boolean> = true.right()
54+
override fun amITheLeader(localHostName: String): Either<LeaderPodLookupFeil, Boolean> =
55+
true.right()
5356
},
5457
)
5558
}
5659

5760
val stoppableTasks =
5861
TaskExecutor.startJob(
62+
initialDelay = if (Configuration.isNais()) 1.minutes else 1.seconds,
5963
runCheckFactory = runCheckFactory,
6064
tasks =
6165
listOf { correlationId ->
6266
applicationContext.utbetalingContext.opprettUtbetalingsvedtakService.opprettUtbetalingsvedtak()
6367
applicationContext.utbetalingContext.sendUtbetalingerService.send(correlationId)
64-
applicationContext.utbetalingContext.journalførUtbetalingsvedtakService.send(correlationId)
68+
applicationContext.utbetalingContext.journalførUtbetalingsvedtakService.journalfør(correlationId)
69+
applicationContext.førstegangsbehandlingContext.journalførVedtaksbrevService.journalfør(correlationId)
70+
applicationContext.førstegangsbehandlingContext.distribuerVedtaksbrevService.distribuer(correlationId)
6571
},
6672
)
6773

app/src/main/kotlin/no/nav/tiltakspenger/vedtak/Configuration.kt

+37-12
Original file line numberDiff line numberDiff line change
@@ -56,20 +56,24 @@ object Configuration {
5656
"ROLE_STRENGT_FORTROLIG" to "5ef775f2-61f8-4283-bf3d-8d03f428aa14",
5757
"ROLE_SKJERMING" to "dbe4ad45-320b-4e9a-aaa1-73cca4ee124d",
5858
"ROLE_DRIFT" to "c511113e-5b22-49e7-b9c4-eeb23b01f518",
59-
"PDL_SCOPE" to "api://localhost:8091/.default",
59+
"PDL_SCOPE" to "localhost",
6060
"PDL_ENDPOINT_URL" to "https://localhost:8091/graphql",
6161
"SKJERMING_SCOPE" to "localhost",
6262
"SKJERMING_URL" to "http://host.docker.internal:8091",
6363
"TILTAK_SCOPE" to "localhost",
6464
"TILTAK_URL" to "http://host.docker.internal:8091",
6565
"UTBETALING_SCOPE" to "localhost",
6666
"UTBETALING_URL" to "http://localhost:8091",
67-
"DOKUMENT_SCOPE" to "localhost",
68-
"DOKUMENT_URL" to "http://localhost:8091",
67+
"JOARK_SCOPE" to "localhost",
68+
"JOARK_URL" to "http://localhost:8091",
69+
"DOKDIST_SCOPE" to "localhost",
70+
"DOKDIST_URL" to "http://localhost:8091",
71+
"PDFGEN_SCOPE" to "localhost",
72+
"PDFGEN_URL" to "http://localhost:8091",
6973
"NAIS_APP_IMAGE" to "http://localhost8080:githubhash",
7074
"AZURE_APP_CLIENT_ID" to "tiltakspenger-vedtak",
7175
"AZURE_APP_CLIENT_SECRET" to "secret",
72-
"AZURE_APP_WELL_KNOWN_URL" to "http://localhost:2222",
76+
"AZURE_APP_WELL_KNOWN_URL" to "http://host.docker.internal:6969/azure/.well-known/openid-configuration",
7377
"AZURE_OPENID_CONFIG_ISSUER" to "http://host.docker.internal:6969/azure",
7478
"AZURE_OPENID_CONFIG_JWKS_URI" to "http://host.docker.internal:6969/azure/jwks",
7579
"DB_USERNAME" to "postgres",
@@ -92,8 +96,12 @@ object Configuration {
9296
"TILTAK_URL" to "http://tiltakspenger-tiltak",
9397
"UTBETALING_SCOPE" to "api://dev-gcp.helved.utsjekk/.default",
9498
"UTBETALING_URL" to "http://utsjekk.helved",
95-
"DOKUMENT_SCOPE" to "api://dev-gcp.tpts.tiltakspenger-dokument/.default",
96-
"DOKUMENT_URL" to "http://tiltakspenger-dokument",
99+
"JOARK_SCOPE" to "api://dev-fss.teamdokumenthandtering.dokarkiv-q1/.default",
100+
"JOARK_URL" to "https://dokarkiv.dev-fss-pub.nais.io",
101+
"DOKDIST_SCOPE" to "api://dev-fss.teamdokumenthandtering.saf-q1/.default",
102+
"DOKDIST_URL" to "https://dokdistfordeling-q1.dev-fss-pub.nais.io",
103+
"PDFGEN_SCOPE" to "api://dev-gcp.tpts.tiltakspenger-pdfgen/.default",
104+
"PDFGEN_URL" to "http://tiltakspenger-pdfgen",
97105
),
98106
)
99107
private val prodProperties =
@@ -108,8 +116,12 @@ object Configuration {
108116
"TILTAK_URL" to "http://tiltakspenger-tiltak",
109117
"UTBETALING_SCOPE" to "api://prod-gcp.helved.utsjekk/.default",
110118
"UTBETALING_URL" to "http://utsjekk.helved",
111-
"DOKUMENT_SCOPE" to "api://prod-gcp.tpts.tiltakspenger-dokument/.default",
112-
"DOKUMENT_URL" to "http://tiltakspenger-dokument",
119+
"JOARK_SCOPE" to "api://prod-fss.teamdokumenthandtering.dokarkiv/.default",
120+
"JOARK_URL" to "https://dokarkiv.prod-fss-pub.nais.io",
121+
"DOKDIST_SCOPE" to "api://prod-fss.teamdokumenthandtering.saf/.default",
122+
"DOKDIST_URL" to "https://dokdistfordeling.prod-fss-pub.nais.io",
123+
"PDFGEN_SCOPE" to "api://prod-gcp.tpts.tiltakspenger-pdfgen/.default",
124+
"PDFGEN_URL" to "http://tiltakspenger-pdfgen",
113125
),
114126
)
115127

@@ -198,8 +210,20 @@ object Configuration {
198210
wellknownUrl = wellknownUrl,
199211
)
200212

201-
fun oauthConfigDokument(
202-
scope: String = config()[Key("DOKUMENT_SCOPE", stringType)],
213+
fun oauthConfigJoark(
214+
scope: String = config()[Key("JOARK_SCOPE", stringType)],
215+
clientId: String = config()[Key("AZURE_APP_CLIENT_ID", stringType)],
216+
clientSecret: String = config()[Key("AZURE_APP_CLIENT_SECRET", stringType)],
217+
wellknownUrl: String = config()[Key("AZURE_APP_WELL_KNOWN_URL", stringType)],
218+
) = AzureTokenProvider.OauthConfig(
219+
scope = scope,
220+
clientId = clientId,
221+
clientSecret = clientSecret,
222+
wellknownUrl = wellknownUrl,
223+
)
224+
225+
fun oauthConfigDokdist(
226+
scope: String = config()[Key("DOKDIST_SCOPE", stringType)],
203227
clientId: String = config()[Key("AZURE_APP_CLIENT_ID", stringType)],
204228
clientSecret: String = config()[Key("AZURE_APP_CLIENT_SECRET", stringType)],
205229
wellknownUrl: String = config()[Key("AZURE_APP_WELL_KNOWN_URL", stringType)],
@@ -228,8 +252,9 @@ object Configuration {
228252

229253
fun tiltakClientConfig(baseUrl: String = config()[Key("TILTAK_URL", stringType)]) = ClientConfig(baseUrl = baseUrl)
230254

231-
fun dokumentClientConfig(baseUrl: String = config()[Key("DOKUMENT_URL", stringType)]) = ClientConfig(baseUrl = baseUrl)
232-
255+
fun joarkClientConfig(baseUrl: String = config()[Key("JOARK_URL", stringType)]) = ClientConfig(baseUrl = baseUrl)
256+
fun dokdistClientConfig(baseUrl: String = config()[Key("DOKDIST_URL", stringType)]) = ClientConfig(baseUrl = baseUrl)
257+
fun pdfgenClientConfig(baseUrl: String = config()[Key("PDFGEN_URL", stringType)]) = ClientConfig(baseUrl = baseUrl)
233258
fun utbetalingClientConfig(baseUrl: String = config()[Key("UTBETALING_URL", stringType)]) = ClientConfig(baseUrl = baseUrl)
234259

235260
fun isNais() = applicationProfile() != Profile.LOCAL

app/src/main/kotlin/no/nav/tiltakspenger/vedtak/clients/brevpublisher/VedtaksbrevMapper.kt

-62
This file was deleted.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
package no.nav.tiltakspenger.vedtak.clients.dokdist
2+
3+
import arrow.core.Either
4+
import arrow.core.flatten
5+
import kotlinx.coroutines.Dispatchers
6+
import kotlinx.coroutines.future.await
7+
import kotlinx.coroutines.withContext
8+
import mu.KotlinLogging
9+
import no.nav.tiltakspenger.distribusjon.domene.DistribusjonId
10+
import no.nav.tiltakspenger.distribusjon.ports.DokdistGateway
11+
import no.nav.tiltakspenger.distribusjon.ports.KunneIkkeDistribuereDokument
12+
import no.nav.tiltakspenger.felles.journalføring.JournalpostId
13+
import no.nav.tiltakspenger.felles.sikkerlogg
14+
import no.nav.tiltakspenger.libs.common.AccessToken
15+
import no.nav.tiltakspenger.libs.common.CorrelationId
16+
import java.net.URI
17+
import java.net.http.HttpRequest
18+
import java.net.http.HttpResponse
19+
import kotlin.time.Duration
20+
import kotlin.time.Duration.Companion.seconds
21+
import kotlin.time.toJavaDuration
22+
23+
class DokdistHttpClient(
24+
baseUrl: String,
25+
private val getToken: suspend () -> AccessToken,
26+
connectTimeout: Duration = 1.seconds,
27+
private val timeout: Duration = 1.seconds,
28+
) : DokdistGateway {
29+
30+
private val log = KotlinLogging.logger {}
31+
32+
private val client =
33+
java.net.http.HttpClient
34+
.newBuilder()
35+
.connectTimeout(connectTimeout.toJavaDuration())
36+
.followRedirects(java.net.http.HttpClient.Redirect.NEVER)
37+
.build()
38+
39+
private val uri = URI.create("$baseUrl/rest/v1/distribuerjournalpost")
40+
41+
override suspend fun distribuerDokument(
42+
journalpostId: JournalpostId,
43+
correlationId: CorrelationId,
44+
): Either<KunneIkkeDistribuereDokument, DistribusjonId> {
45+
return withContext(Dispatchers.IO) {
46+
val jsonPayload = journalpostId.toDokdistRequest()
47+
Either
48+
.catch {
49+
val request = createRequest(jsonPayload, correlationId)
50+
val httpResponse = client.sendAsync(request, HttpResponse.BodyHandlers.ofString()).await()
51+
httpResponse.body().dokdistResponseToDomain(log)
52+
}.mapLeft {
53+
// Either.catch slipper igjennom CancellationException som er ønskelig.
54+
log.error(it) { "Feil ved kall til dokdist. journalpostId: $journalpostId. Se sikkerlogg for detaljer." }
55+
sikkerlogg.error(it) { "Feil ved kall til dokdist. journalpostId: $journalpostId. . jsonPayload: $jsonPayload, uri: $uri" }
56+
KunneIkkeDistribuereDokument
57+
}.flatten()
58+
}
59+
}
60+
61+
private suspend fun createRequest(
62+
jsonPayload: String,
63+
correlationId: CorrelationId,
64+
): HttpRequest? =
65+
HttpRequest
66+
.newBuilder()
67+
.uri(uri)
68+
.timeout(timeout.toJavaDuration())
69+
.header("Accept", "application/json")
70+
.header("Content-Type", "application/json")
71+
.header("Authorization", "Bearer ${getToken().value}")
72+
.header("Nav-CallId", correlationId.value)
73+
.POST(HttpRequest.BodyPublishers.ofString(jsonPayload))
74+
.build()
75+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
package no.nav.tiltakspenger.vedtak.clients.dokdist
2+
3+
import no.nav.tiltakspenger.felles.journalføring.JournalpostId
4+
import no.nav.tiltakspenger.vedtak.routes.serialize
5+
6+
private data class DokdistRequest(
7+
val journalpostId: String,
8+
val bestillendeFagsystem: String = "IND",
9+
val dokumentProdApp: String = "Tiltakspenger",
10+
val distribusjonstype: DistribusjonsType = DistribusjonsType.VEDTAK,
11+
val distribusjonstidspunkt: Distribusjonstidspunkt = Distribusjonstidspunkt.KJERNETID,
12+
) {
13+
enum class DistribusjonsType {
14+
VEDTAK,
15+
VIKTIG,
16+
ANNET,
17+
}
18+
19+
enum class Distribusjonstidspunkt {
20+
UMIDDELBART,
21+
KJERNETID,
22+
}
23+
}
24+
25+
fun JournalpostId.toDokdistRequest(): String {
26+
return DokdistRequest(
27+
journalpostId = this.toString(),
28+
).let {
29+
serialize(it)
30+
}
31+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
package no.nav.tiltakspenger.vedtak.clients.dokdist
2+
3+
import arrow.core.Either
4+
import mu.KLogger
5+
import no.nav.tiltakspenger.distribusjon.domene.DistribusjonId
6+
import no.nav.tiltakspenger.distribusjon.ports.KunneIkkeDistribuereDokument
7+
import no.nav.tiltakspenger.vedtak.db.deserialize
8+
9+
private data class DokdistResponse(
10+
val bestillingsId: String,
11+
)
12+
13+
internal fun String.dokdistResponseToDomain(log: KLogger): Either<KunneIkkeDistribuereDokument, DistribusjonId> {
14+
return Either.catch { DistribusjonId(deserialize<DokdistResponse>(this).bestillingsId) }
15+
.mapLeft {
16+
log.error(it) { "Kunne ikke deserialisere respons fra dokdist. forventet 'bestillingsId'. jsonResponse: $this" }
17+
KunneIkkeDistribuereDokument
18+
}
19+
}

0 commit comments

Comments
 (0)