diff --git a/frontend/mulighetsrommet-veileder-flate/src/api/queries/useTiltakstyperSomStotterPameldingIModia.ts b/frontend/mulighetsrommet-veileder-flate/src/api/queries/useTiltakstyperSomStotterPameldingIModia.ts new file mode 100644 index 0000000000..8d5343b9ce --- /dev/null +++ b/frontend/mulighetsrommet-veileder-flate/src/api/queries/useTiltakstyperSomStotterPameldingIModia.ts @@ -0,0 +1,10 @@ +import { useQuery } from "@tanstack/react-query"; +import { mulighetsrommetClient } from "@/api/client"; +import { QueryKeys } from "../query-keys"; + +export function useTiltakstyperSomStotterPameldingIModia() { + return useQuery({ + queryKey: QueryKeys.tiltakstyperSomStotterPameldingIModia(), + queryFn: () => mulighetsrommetClient.tiltakstyper.getTiltakstyperSomStotterPameldingImodia(), + }); +} diff --git a/frontend/mulighetsrommet-veileder-flate/src/api/query-keys.ts b/frontend/mulighetsrommet-veileder-flate/src/api/query-keys.ts index 3c7cfa8953..132ef0d184 100644 --- a/frontend/mulighetsrommet-veileder-flate/src/api/query-keys.ts +++ b/frontend/mulighetsrommet-veileder-flate/src/api/query-keys.ts @@ -33,4 +33,5 @@ export const QueryKeys = { avtaleId, ], deltMedBrukerHistorikk: (norskIdent: string) => ["deltMedBrukerHistorikk", norskIdent], + tiltakstyperSomStotterPameldingIModia: () => ["tiltakstyperSomStotterPameldingIModia"], }; diff --git a/frontend/mulighetsrommet-veileder-flate/src/components/pamelding/PameldingForGruppetiltak.tsx b/frontend/mulighetsrommet-veileder-flate/src/components/pamelding/PameldingForGruppetiltak.tsx index f6330e9a17..1019920fa9 100644 --- a/frontend/mulighetsrommet-veileder-flate/src/components/pamelding/PameldingForGruppetiltak.tsx +++ b/frontend/mulighetsrommet-veileder-flate/src/components/pamelding/PameldingForGruppetiltak.tsx @@ -9,6 +9,7 @@ import { import { ReactNode } from "react"; import { useGetTiltaksgjennomforingIdFraUrl } from "../../api/queries/useGetTiltaksgjennomforingIdFraUrl"; import { useHistorikkV2 } from "../../api/queries/useHistorikkV2"; +import { useTiltakstyperSomStotterPameldingIModia } from "../../api/queries/useTiltakstyperSomStotterPameldingIModia"; import { ModiaRoute, resolveModiaRoute } from "../../apps/modia/ModiaRoute"; import styles from "./PameldingForGruppetiltak.module.scss"; @@ -24,6 +25,7 @@ export function PameldingForGruppetiltak({ tiltaksgjennomforing, }: PameldingProps): ReactNode { const { data: deltakerHistorikk } = useHistorikkV2(); + const { data: stotterPameldingIModia = [] } = useTiltakstyperSomStotterPameldingIModia(); const gjennomforingId = useGetTiltaksgjennomforingIdFraUrl(); const { aktive = [] } = deltakerHistorikk || {}; @@ -41,7 +43,7 @@ export function PameldingForGruppetiltak({ const skalVisePameldingslenke = !kanOppretteAvtaleForTiltak && brukerHarRettPaaValgtTiltak && - tiltakstypeStotterPamelding(tiltaksgjennomforing.tiltakstype) && + tiltakstypeStotterPamelding(stotterPameldingIModia, tiltaksgjennomforing.tiltakstype) && !aktivDeltakelse; const opprettDeltakelseRoute = resolveModiaRoute({ @@ -130,15 +132,9 @@ function utledTekster(deltakelse: DeltakerKort): Tekst { } } -function tiltakstypeStotterPamelding(tiltakstype: VeilederflateTiltakstype): boolean { - const whitelistTiltakstypeStotterPamelding = [ - TiltakskodeArena.ARBFORB, - TiltakskodeArena.ARBRRHDAG, - TiltakskodeArena.AVKLARAG, - TiltakskodeArena.INDOPPFAG, - TiltakskodeArena.VASV, - ]; - return ( - !!tiltakstype.arenakode && whitelistTiltakstypeStotterPamelding.includes(tiltakstype.arenakode) - ); +function tiltakstypeStotterPamelding( + tiltakstyperSomStotterPamelding: string[], + tiltakstype: VeilederflateTiltakstype, +): boolean { + return !!tiltakstype.arenakode && tiltakstyperSomStotterPamelding.includes(tiltakstype.arenakode); } diff --git a/frontend/mulighetsrommet-veileder-flate/src/mock/api/endpoints/tiltakHandlers.ts b/frontend/mulighetsrommet-veileder-flate/src/mock/api/endpoints/tiltakHandlers.ts index b6e3850e6f..e9e5c49e2d 100644 --- a/frontend/mulighetsrommet-veileder-flate/src/mock/api/endpoints/tiltakHandlers.ts +++ b/frontend/mulighetsrommet-veileder-flate/src/mock/api/endpoints/tiltakHandlers.ts @@ -17,6 +17,21 @@ export const tiltakHandlers = [ return HttpResponse.json(Object.values(mockTiltakstyper)); }), + http.get("*/api/v1/intern/tiltakstyper/stotterPameldingIModia", async () => { + const tiltakstyperMedPamelding = [ + "ARBFORB", + "ARBRRHDAG", + "AVKLARAG", + "DIGIOPPARB", + "GRUFAGYRKE", + "GRUPPEAMO", + "INDOPPFAG", + "JOBB", + "VASV", + ]; + return HttpResponse.json(tiltakstyperMedPamelding); + }), + http.get("*/api/v1/intern/veileder/tiltaksgjennomforinger", async ({ request }) => { const url = new URL(request.url); const results = getFilteredArbeidsmarkedstiltak(url); diff --git a/mulighetsrommet-api/src/main/kotlin/no/nav/mulighetsrommet/api/Application.kt b/mulighetsrommet-api/src/main/kotlin/no/nav/mulighetsrommet/api/Application.kt index c03a780a7e..b4681bb667 100644 --- a/mulighetsrommet-api/src/main/kotlin/no/nav/mulighetsrommet/api/Application.kt +++ b/mulighetsrommet-api/src/main/kotlin/no/nav/mulighetsrommet/api/Application.kt @@ -47,7 +47,7 @@ fun Application.configure(config: AppConfig) { } authenticate(AuthProvider.AZURE_AD_NAV_IDENT.name, AuthProvider.AZURE_AD_TILTAKSADMINISTRASJON_GENERELL.name) { - tiltakstypeRoutes(config.migrerteTiltak) + tiltakstypeRoutes(config.migrerteTiltak, config.pameldingIModia) tiltaksgjennomforingRoutes() avtaleRoutes() veilederflateRoutes() diff --git a/mulighetsrommet-api/src/main/kotlin/no/nav/mulighetsrommet/api/Config.kt b/mulighetsrommet-api/src/main/kotlin/no/nav/mulighetsrommet/api/Config.kt index 52ca9e5fdc..b733774dd4 100644 --- a/mulighetsrommet-api/src/main/kotlin/no/nav/mulighetsrommet/api/Config.kt +++ b/mulighetsrommet-api/src/main/kotlin/no/nav/mulighetsrommet/api/Config.kt @@ -27,6 +27,7 @@ data class AppConfig( val database: DatabaseConfig, val flyway: FlywayMigrationManager.MigrationConfig, val migrerteTiltak: List, + val pameldingIModia: List, val kafka: KafkaConfig, val auth: AuthConfig, val sanity: SanityClient.Config, diff --git a/mulighetsrommet-api/src/main/kotlin/no/nav/mulighetsrommet/api/routes/v1/TiltakstypeRoutes.kt b/mulighetsrommet-api/src/main/kotlin/no/nav/mulighetsrommet/api/routes/v1/TiltakstypeRoutes.kt index ee496796c6..490b556c62 100644 --- a/mulighetsrommet-api/src/main/kotlin/no/nav/mulighetsrommet/api/routes/v1/TiltakstypeRoutes.kt +++ b/mulighetsrommet-api/src/main/kotlin/no/nav/mulighetsrommet/api/routes/v1/TiltakstypeRoutes.kt @@ -15,7 +15,7 @@ import no.nav.mulighetsrommet.domain.Tiltakskode.Companion.toArenaKode import org.koin.ktor.ext.inject import java.util.* -fun Route.tiltakstypeRoutes(migrerteTiltak: List) { +fun Route.tiltakstypeRoutes(migrerteTiltak: List, pameldingIModia: List) { val tiltakstypeService: TiltakstypeService by inject() val veilederflateService: VeilederflateService by inject() @@ -58,6 +58,10 @@ fun Route.tiltakstypeRoutes(migrerteTiltak: List) { get("migrerte") { call.respond(migrerteTiltak.map { toArenaKode(it) }) } + + get("stotterPameldingIModia") { + call.respond(pameldingIModia.map { toArenaKode(it) }) + } } } diff --git a/mulighetsrommet-api/src/main/resources/application-dev.yaml b/mulighetsrommet-api/src/main/resources/application-dev.yaml index 86648db1d9..aba9cce8b8 100644 --- a/mulighetsrommet-api/src/main/resources/application-dev.yaml +++ b/mulighetsrommet-api/src/main/resources/application-dev.yaml @@ -20,6 +20,9 @@ app: - ARBEIDSRETTET_REHABILITERING - VARIG_TILRETTELAGT_ARBEID_SKJERMET + pameldingIModia: + - ARBEIDSFORBEREDENDE_TRENING + kafka: producerId: mulighetsrommet-api-kafka-producer.v1 consumerGroupId: mulighetsrommet-api-kafka-consumer.v1 diff --git a/mulighetsrommet-api/src/main/resources/application-local.yaml b/mulighetsrommet-api/src/main/resources/application-local.yaml index 798ae8f7ea..eb6cf87a74 100644 --- a/mulighetsrommet-api/src/main/resources/application-local.yaml +++ b/mulighetsrommet-api/src/main/resources/application-local.yaml @@ -23,6 +23,17 @@ app: - ARBEIDSRETTET_REHABILITERING - VARIG_TILRETTELAGT_ARBEID_SKJERMET + pameldingIModia: + - AVKLARING + - OPPFOLGING + - GRUPPE_ARBEIDSMARKEDSOPPLAERING + - JOBBKLUBB + - DIGITALT_OPPFOLGINGSTILTAK + - ARBEIDSFORBEREDENDE_TRENING + - GRUPPE_FAG_OG_YRKESOPPLAERING + - ARBEIDSRETTET_REHABILITERING + - VARIG_TILRETTELAGT_ARBEID_SKJERMET + kafka: brokerUrl: localhost:29092 producerId: mulighetsrommet-api-kafka-producer.v1 diff --git a/mulighetsrommet-api/src/main/resources/application-prod.yaml b/mulighetsrommet-api/src/main/resources/application-prod.yaml index 7f587578e9..bc23cff44c 100644 --- a/mulighetsrommet-api/src/main/resources/application-prod.yaml +++ b/mulighetsrommet-api/src/main/resources/application-prod.yaml @@ -18,6 +18,8 @@ app: - OPPFOLGING - VARIG_TILRETTELAGT_ARBEID_SKJERMET + pameldingIModia: [] + kafka: producerId: mulighetsrommet-api-kafka-producer.v1 consumerGroupId: mulighetsrommet-api-kafka-consumer.v1 diff --git a/mulighetsrommet-api/src/main/resources/web/openapi.yaml b/mulighetsrommet-api/src/main/resources/web/openapi.yaml index 0af7a29c30..9d481d84d4 100644 --- a/mulighetsrommet-api/src/main/resources/web/openapi.yaml +++ b/mulighetsrommet-api/src/main/resources/web/openapi.yaml @@ -791,6 +791,21 @@ paths: items: type: string + /api/v1/intern/tiltakstyper/stotterPameldingIModia: + get: + tags: + - Tiltakstyper + operationId: getTiltakstyperSomStotterPameldingIModia + responses: + 200: + description: Liste over tiltak som støtter påmelding i Modia + content: + application/json: + schema: + type: array + items: + type: string + /api/v1/intern/veileder/innsatsgrupper: get: tags: diff --git a/mulighetsrommet-api/src/test/kotlin/no/nav/mulighetsrommet/api/ApplicationTestConfig.kt b/mulighetsrommet-api/src/test/kotlin/no/nav/mulighetsrommet/api/ApplicationTestConfig.kt index 5004b286f6..3650132d24 100644 --- a/mulighetsrommet-api/src/test/kotlin/no/nav/mulighetsrommet/api/ApplicationTestConfig.kt +++ b/mulighetsrommet-api/src/test/kotlin/no/nav/mulighetsrommet/api/ApplicationTestConfig.kt @@ -97,6 +97,7 @@ fun createTestApplicationConfig() = AppConfig( axsys = ServiceClientConfig(url = "", scope = ""), pdl = ServiceClientConfig(url = "", scope = ""), migrerteTiltak = emptyList(), + pameldingIModia = emptyList(), pamOntologi = createServiceClientConfig("pam-ontologi"), utdanning = UtdanningClient.Config( baseurl = "", diff --git a/mulighetsrommet-api/src/test/kotlin/no/nav/mulighetsrommet/api/avtaler/AvtaleValidatorTest.kt b/mulighetsrommet-api/src/test/kotlin/no/nav/mulighetsrommet/api/avtaler/AvtaleValidatorTest.kt index 0129997d51..c0caf686ec 100644 --- a/mulighetsrommet-api/src/test/kotlin/no/nav/mulighetsrommet/api/avtaler/AvtaleValidatorTest.kt +++ b/mulighetsrommet-api/src/test/kotlin/no/nav/mulighetsrommet/api/avtaler/AvtaleValidatorTest.kt @@ -107,7 +107,10 @@ class AvtaleValidatorTest : beforeEach { domain.initialize(database.db) - tiltakstyper = TiltakstypeService(TiltakstypeRepository(database.db), listOf(Tiltakskode.OPPFOLGING)) + tiltakstyper = TiltakstypeService( + TiltakstypeRepository(database.db), + listOf(Tiltakskode.OPPFOLGING), + ) navEnheterService = NavEnhetService(NavEnhetRepository(database.db)) avtaler = AvtaleRepository(database.db) gjennomforinger = TiltaksgjennomforingRepository(database.db) @@ -119,7 +122,10 @@ class AvtaleValidatorTest : } test("skal feile når tiltakstypen ikke er aktivert") { - tiltakstyper = TiltakstypeService(TiltakstypeRepository(database.db), emptyList()) + tiltakstyper = TiltakstypeService( + TiltakstypeRepository(database.db), + emptyList(), + ) val validator = AvtaleValidator(tiltakstyper, gjennomforinger, navEnheterService, arrangorer) val dbo = avtaleDbo.copy( @@ -135,7 +141,10 @@ class AvtaleValidatorTest : } test("skal ikke feile når tiltakstypen er AFT, VTA, eller aktivert") { - tiltakstyper = TiltakstypeService(TiltakstypeRepository(database.db), listOf(Tiltakskode.OPPFOLGING)) + tiltakstyper = TiltakstypeService( + TiltakstypeRepository(database.db), + listOf(Tiltakskode.OPPFOLGING), + ) val validator = AvtaleValidator(tiltakstyper, gjennomforinger, navEnheterService, arrangorer) validator.validate(AvtaleFixtures.AFT, null).shouldBeRight() @@ -239,7 +248,10 @@ class AvtaleValidatorTest : test("sluttDato er påkrevd hvis ikke forhåndsgodkjent") { val validator = AvtaleValidator( - TiltakstypeService(TiltakstypeRepository(database.db), Tiltakskode.values().toList()), + TiltakstypeService( + TiltakstypeRepository(database.db), + Tiltakskode.values().toList(), + ), gjennomforinger, navEnheterService, arrangorer, diff --git a/mulighetsrommet-api/src/test/kotlin/no/nav/mulighetsrommet/api/tiltaksgjennomforinger/TiltaksgjennomforingValidatorTest.kt b/mulighetsrommet-api/src/test/kotlin/no/nav/mulighetsrommet/api/tiltaksgjennomforinger/TiltaksgjennomforingValidatorTest.kt index b6c1b20228..a5e90890bf 100644 --- a/mulighetsrommet-api/src/test/kotlin/no/nav/mulighetsrommet/api/tiltaksgjennomforinger/TiltaksgjennomforingValidatorTest.kt +++ b/mulighetsrommet-api/src/test/kotlin/no/nav/mulighetsrommet/api/tiltaksgjennomforinger/TiltaksgjennomforingValidatorTest.kt @@ -115,7 +115,11 @@ class TiltaksgjennomforingValidatorTest : FunSpec({ beforeEach { domain.initialize(database.db) - tiltakstyper = TiltakstypeService(TiltakstypeRepository(database.db), listOf(Tiltakskode.OPPFOLGING)) + tiltakstyper = TiltakstypeService( + TiltakstypeRepository(database.db), + listOf(Tiltakskode.OPPFOLGING), + + ) avtaler = AvtaleRepository(database.db) tiltaksgjennomforinger = TiltaksgjennomforingRepository(database.db) arrangorer = ArrangorRepository(database.db) diff --git a/mulighetsrommet-api/src/test/kotlin/no/nav/mulighetsrommet/kafka/consumers/TiltaksgjennomforingTopicConsumerTest.kt b/mulighetsrommet-api/src/test/kotlin/no/nav/mulighetsrommet/kafka/consumers/TiltaksgjennomforingTopicConsumerTest.kt index 62abb3cafb..6857e76e18 100644 --- a/mulighetsrommet-api/src/test/kotlin/no/nav/mulighetsrommet/kafka/consumers/TiltaksgjennomforingTopicConsumerTest.kt +++ b/mulighetsrommet-api/src/test/kotlin/no/nav/mulighetsrommet/kafka/consumers/TiltaksgjennomforingTopicConsumerTest.kt @@ -56,7 +56,10 @@ class TiltaksgjennomforingTopicConsumerTest : FunSpec({ val arenaAdapterClient = mockk() coEvery { arenaAdapterClient.hentArenadata(gjennomforing.id) } returns null - val tiltakstyper = TiltakstypeService(TiltakstypeRepository(database.db), enabledTiltakskoder = emptyList()) + val tiltakstyper = TiltakstypeService( + TiltakstypeRepository(database.db), + enabledTiltakskoder = emptyList(), + ) val consumer = TiltaksgjennomforingTopicConsumer( KafkaTopicConsumer.Config(id = "id", topic = "topic"), @@ -79,7 +82,10 @@ class TiltaksgjennomforingTopicConsumerTest : FunSpec({ val arenaAdapterClient = mockk() coEvery { arenaAdapterClient.hentArenadata(gjennomforing.id) } returns null - val tiltakstyper = TiltakstypeService(TiltakstypeRepository(database.db), listOf(Tiltakskode.OPPFOLGING)) + val tiltakstyper = TiltakstypeService( + TiltakstypeRepository(database.db), + listOf(Tiltakskode.OPPFOLGING), + ) val consumer = TiltaksgjennomforingTopicConsumer( KafkaTopicConsumer.Config(id = "id", topic = "topic"), diff --git a/mulighetsrommet-api/wiremock/mappings/mr-innsatsgruppe.json b/mulighetsrommet-api/wiremock/mappings/mr-innsatsgruppe.json index b93200a646..4d435d5026 100644 --- a/mulighetsrommet-api/wiremock/mappings/mr-innsatsgruppe.json +++ b/mulighetsrommet-api/wiremock/mappings/mr-innsatsgruppe.json @@ -6,7 +6,7 @@ "response": { "status": 200, "jsonBody": { - "innsatsgruppe": "SITUASJONSBESTEMT_INNSATS" + "innsatsgruppe": "VARIG_TILPASSET_INNSATS" }, "headers": { "Content-Type": "application/json"