Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Flere begrunnelser v1 - Oppdatert IM modell og PDF støtte #837

Draft
wants to merge 6 commits into
base: main
Choose a base branch
from

Conversation

Jesper-Hustad
Copy link
Contributor

Lager en draft da det blir mye kode å se på om hele funksjonen skulle vært klar for prod.

Funksjonen Flere begrunnelser legger til støtte for flere inntekt endring begrunnelser (List<endringsAarsak>)

For å støtte dette i prod beholder vi den gamle verdien slik at frontend ikke må endres og vi unngår inflight errors.

Endringer:

0: I denen versjonen har jeg oppdatert IM modellen til hagDomeneInntektsmeldingVersion=0.1.8-SNAPSHOT
Denne beholder gamle endringsAarsak variabelen og legger til en nullable liste med deafult verdi = null

data class Inntekt(
    val beloep: Double,
    val inntektsdato: LocalDate,
    val naturalytelser: List<Naturalytelse>,
    val endringAarsak: InntektEndringAarsak?,
    val endringAarsaker: List<InntektEndringAarsak>? = null, // <-- lagt til denne
) {

1: Listen blir utfylt når vi serialiserer JSON til Inntektsmelding med en util funksjon
(siden den blir satt til null om den ikke eksisterer i JSON)

// midlertidlig duplisering for å støtte flere endringsÅrsaker
fun SkjemaInntektsmelding.fyllUtMangledeEndringsAarsaker(): SkjemaInntektsmelding {
    val medEndringsAarsakerfyllt = this.copy(inntekt = this.inntekt?.copy(endringAarsaker = listOfNotNull(this.inntekt?.endringAarsak)))
    val verdiMangler = this.inntekt?.endringAarsaker.isNullOrEmpty()
    return if (verdiMangler) medEndringsAarsakerfyllt else this
}

3:
I PDFen så er det lagt til støtte for flere begrunnelser
(snakket med Dag om å bytte til Endingsårsak (1 av 2) teksten)

val endringAarsaker = inntektsmelding.inntekt?.endringAarsaker.orDefault(emptyList())
val antall = endringAarsaker.size
endringAarsaker.forEachIndexed { indeks, endringAarsak ->

    forklaringEndring = FORKLARING_ENDRING + if (antall > 1) " (${indeks + 1} av $antall)" else ""
    when (endringAarsak) {
        is Bonus -> addBonus()
        is Feilregistrert -> addFeilregistrert()
        //....
    }
}

PDF:
image

@@ -94,6 +95,19 @@ fun Route.innsending(
}
}

// // midlertidlig duplisering for å støtte flere endringsÅrsaker
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Kan gjerne fjerne utkommentert kode, heller ta det inn når det faktisk skal tas i bruk

@mortenbyhring
Copy link
Contributor

Veldig bra og informativ PR. Jeg er fortsatt litt i tenkeboksen på om vi bør lage en ny versjon eller ha to felter slik som nå - og så må vi pønske litt på hvordan vi skal sikre bakoverkompabiliteten for eksisterende payloads

@Jesper-Hustad
Copy link
Contributor Author

Enig at vi må planlegge mer på dette. Tar en prat imorgen 👍

is NyStillingsprosent -> "Ny stillingsprosent"

else -> throw NotImplementedError("Ingen beskrivelse definert for InntektEndringAarsak")
}
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Denne eksisterer for å kunne teste at teksten kommer i PDFen

}
}

private fun <E> List<E>.parviseKombinasjoner(): List<List<E>> = flatMapIndexed { i, foorste -> drop(i + 1).map { andre -> listOf(foorste, andre) } }
Copy link
Contributor Author

@Jesper-Hustad Jesper-Hustad Feb 21, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Denne testen med alle mulige parvise kombinasjoner tar ca 1.8 sekunder på min datamaskin. Vet ikke hvor nødvendig den er. Tanken er å fange om det er to par av begrunnelser som ødelegger for hverandre

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hvordan kan de egentlig ødelegge for hverandre?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Er vel egentlig ikke mulig slik koden er idag. Men tanken er om to begrunnelser bruker en felles variabel eller metode med PDF produksjonen som skaper trøbbel når de kjører sammen kan denne testen fange den feilen.

is VarigLoennsendring ->
addVarigLonnsendring(forklaringEndring, endringAarsak)
is NyStillingsprosent ->
addNyStillingsprosent(forklaringEndring, endringAarsak)
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Her er løsningen på å ikke legge til en mutable verdi.

Kan argumenteres at den er egentlig mer oversiktlig.

Øverste del kan forenkles til:

when (endringAarsak) {
      is Bonus, is Feilregistrert, is Nyansatt, is Ferietrekk ->
            addLabel(forklaringEndring, endringAarsak.beskrivelse())

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Fint å slippe mutable! 👏

private fun writePDF(
title: String,
im: Inntektsmelding,
) {
// val file = File(System.getProperty("user.home"), "/Desktop/$title.pdf")
val file = File.createTempFile(title, ".pdf")
val file = File(System.getProperty("user.home"), "/Desktop/pdf/$title.pdf")
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Disse skal vel swappes igjen for å kjøre tester i bygget

@@ -5,7 +5,7 @@ kotlinVersion=2.0.21
kotlinterVersion=4.4.0

# Dependency versions
hagDomeneInntektsmeldingVersion=0.1.7
hagDomeneInntektsmeldingVersion=0.1.8-SNAPSHOT
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Bør bygge en final release (uten snapshot) som brukes her, før vi merger

@@ -77,6 +79,12 @@ class HentSelvbestemtImRouteKtTest : ApiTest() {

val actualJson = response.bodyAsText()

println(Mock.successResponseJson(expectedInntektsmelding))
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Kan vel droppe println og assertSoftly egentlig?

import no.nav.helsearbeidsgiver.domene.inntektsmelding.v1.skjema.SkjemaInntektsmelding

// midlertidlig duplisering for å støtte flere endringsÅrsaker
fun SkjemaInntektsmelding.fyllUtMangledeEndringsAarsaker(): SkjemaInntektsmelding {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Kanskje ha et annet navn en fyllUtManglede - noe mer som ala "konverterEndringAarsakTilListe"
Og så tror jeg det kan være greit å sjekke at endringAarsaker er tom, før man gjør dette. Da slipper vi å holde styr på når frontend evt endres.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants