Hvordan utvikle en ny brevmal steg for steg

Om det mangler noen steg her, legg de gjerne til.

Steg 1: Opprette en ny brevmal

1.1 Opprett Dto(data-klasse) for brevet i API-modellen (for alder/uføre brev)

Først må du definere dataklassen som beskriver informasjonsbehovet til malen.

I api-model prosjektet under alder eller uføre modulene, opprett en ny data-klasse, og fyll den ut etterhvert som du skriver brevet:

Når man legger til nye verdier underveis er det nødvendig å publisere api-modellen lokalt og bygge relevant mal-modul på nytt.

// I f.eks pensjonsbrev/alder/api-model/.../maler/<relevantDomene>/
data class MittBrevDto(
    val uforegrad: Percent,
    val virkningFom: LocalDate,
    val maanedligBeloep: Kroner,
    val harBarnetillegg: Boolean,
    val barnetilleggBarn: List<Barn> = emptyList()
) {
    data class Barn(
        val navn: String,
        val fodselsdato: LocalDate
    )
}
Når du legger til nye felter, se om det er mulig å data-minimere. Kompleks forretnings-logikk hører ikke hjemme i brevmaler. Ofte kan man uttrykke kompleks logikk som ett boolsk uttrykk som beskriver situasjonen vi ønsker å agere på mer nøyaktig.
Legg api-modellen under samme domene-mappe som malen slik at den blir lett å finne.

1.2 Legg til brevkode

I api-model, legg til brevkoden i relevant enum-klasse (for de fleste er dette Pesysbrevkoder.kt):

Brevkoden er ment som en ID for brevet, og bør aldri endres etter brevet er prodsatt. Det kan føre til rot i arkivet og maler under redigering.

object Pesysbrevkoder {
    enum class AutoBrev : Automatisk {
        //...
        MIN_BREVKODE,
        //...
    }

    // ELLER
    enum class Redigerbar : Redigerbart {
        MIN_REDIGERBARE_BREVKODE,
    }
}
Prøv å følge eksisterende mønstre, og skriv en brevkode som skiller seg godt nokk ut fra andre maler.

1.3 Publiser API-modellen midlertidig

For å kunne bruke den nye Dto’en og brevkoden i brevmalen din må du ha den tilgjengelig i relevant mal-modul.

Bump apiModelVersion i gradle.properties og build.gradle i relevant modul (uføre, alder eller pensjon). og publiser artifakt lokalt for å ha det tilgjengelig for mal-utvikling i neste steg.

./gradlew publishToMavenLocal

2.1 Lag en ny brevmal

Lag en ny kotlin fil under relevant modul og passende domenemessig-plassering.

2.1.A Autobrev

// f.eks pensjon/brev/maler/MittBrev.kt
@TemplateModelHelpers
object MittBrev : AutobrevTemplate<MittBrevDto> {
    // Brevkode som identifiserer dette brevet. Defineres i API-model (enum)
    override val kode = Aldersbrevkoder.AutoBrev.EKSEMPEL_BREV

    override val template = createTemplate(
        // Metadata

        // Støttede språk som type-parameter. Disse brukes for å sjekke at du har inkludert innhold for alle språk-lag ved compile-time
        languages = languages(Bokmal, Nynorsk, English),
        letterMetadata = LetterMetadata(

            //Tittel som settes i arkivet. Det er denne tittelen som vises for saksbehandler.
            displayTitle = "Nav har beregnet for høyt gjenlevendetillegg",

            // Distribusjonstype. Avgjør hvordan varslingen ved distribusjon blir. [VEDTAK,VIKTIG,ANNET]
            distribusjonstype = LetterMetadata.Distribusjonstype.VIKTIG,

            // VEDTAKSBREV,INFORMASJONSBREV fører til endringer i signatur/slutt-tekst og første-side
            brevtype = LetterMetadata.Brevtype.VEDTAKSBREV,
        )
    ) {
        title {
            // tittel kommer her. Kan også inneholde logikk.
            text(
                bokmal { +"Vedtak om uføretrygd" },
                nynorsk { +"Vedtak om uføretrygd" },
                english { +"Decision on disability benefit" },
            )
        }

        outline {
            // Innhold kommer her
        }

        // Vedlegg kommer her
    }
}

2.1.B Redigerbart brev

Redigerbare brev er ganske like autobrev-maler, bare at den krever flere felter som brukes for visning og filtrering i Skribenten.

// f.eks pensjon/brev/maler/MittBrev.kt
@TemplateModelHelpers
object EndringAvAlderspensjonPgaGarantitillegg : RedigerbarTemplate<EndringAvAlderspensjonGarantitilleggDto> {
    //...
    // Kategori. Legges inn i valgt "mappe" under visning i skribenten.
    override val kategori = Brevkategori.VEDTAK_ENDRING_OG_REVURDERING
    // Om brevet kun skal vises dersom saksbehandler er inne i konteksten av ett vedtak, en sak, eller begge deler
    // [ALLE, SAK, VEDTAK]
    override val brevkontekst = TemplateDescription.Brevkontekst.VEDTAK
    // Hvilke sakstype(r) brevmalen skal synes i
    override val sakstyper = Sakstype.pensjon
    //...
}

Fortsett og fyll ut resten av innholdet, logikken, vedleggene, inndata osv.

For mer detaljer om funksjonalitet som kan brukes til å definere innhold, les videre i dokumentasjonen: Brevmal struktur og Scopes

2.2

Legg inn malen i ProductionTemplates.kt under relevant modul.

2.3

Dersom brevet tar inn data eller saksbehandlervalg krever vi at det lages en stub/fixture av dataene. Dette er for å kunne teste alle malene. Da kan man også se hvordan malen ser ut fra output av testene [ufoere/alder]/maler/build/test_html/…​