Skip to content
This repository was archived by the owner on Jan 15, 2025. It is now read-only.

Commit

Permalink
Nytt input-grensesnitt - fjerde versjon - nye versjoner av core, tran…
Browse files Browse the repository at this point in the history
…sport og domain + m indre justeringer
  • Loading branch information
LarsOttoHaugen committed Nov 13, 2023
1 parent e185bc3 commit 912ce08
Show file tree
Hide file tree
Showing 21 changed files with 521 additions and 440 deletions.
1 change: 0 additions & 1 deletion .github/workflows/dev.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -37,4 +37,3 @@ jobs:
]}' \
${{ env.INGRESS_CUCUMBER }}/bidrag-cucumber-cloud/run | tee .cucumber-result
cat .cucumber-result | grep HTTP/2 | grep -c 200 > /dev/null # fails if count is 0 (http status is not ok, aka http status code is not 200)
2 changes: 1 addition & 1 deletion .github/workflows/release.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -13,4 +13,4 @@ jobs:
contents: "write"
id-token: "write"
uses: navikt/bidrag-workflow/.github/workflows/release.yaml@main
secrets: inherit
secrets: inherit
2 changes: 1 addition & 1 deletion Dockerfile
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
FROM ghcr.io/navikt/baseimages/temurin:17
FROM ghcr.io/navikt/baseimages/temurin:21
LABEL maintainer="Team Bidrag" \
email="[email protected]"

Expand Down
27 changes: 10 additions & 17 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -23,12 +23,11 @@
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>

<!-- dependencies -->
<bidrag-commons.version>20230510130746_8b93e85</bidrag-commons.version>
<bidrag-commons-test.version>1.20230217164307_1ec9d3f</bidrag-commons-test.version>
<bidrag-beregn-felles.version>1.0.2</bidrag-beregn-felles.version>
<bidrag-beregn-forskudd-core.version>1.1.0</bidrag-beregn-forskudd-core.version>
<bidrag-domene.version>20231107094956_592b814</bidrag-domene.version>
<bidrag-transport.version>20231108150753_dc8a5b7</bidrag-transport.version>
<bidrag-commons.version>20231103132440_edabbf8</bidrag-commons.version>
<bidrag-commons-test.version>1.20230511093912_dc35d81</bidrag-commons-test.version>
<bidrag-beregn-forskudd-core.version>1.1.1</bidrag-beregn-forskudd-core.version>
<bidrag-domene.version>20231110092737_1f08513</bidrag-domene.version>
<bidrag-transport.version>20231113083619_82c0dcc</bidrag-transport.version>
<springdoc-openapi-ui.version>2.2.0</springdoc-openapi-ui.version>
<wiremock-standalone.version>2.35.1</wiremock-standalone.version>
<springframework-cloud.version>4.0.2</springframework-cloud.version>
Expand All @@ -39,8 +38,8 @@
<kotest.version>5.6.2</kotest.version>
<mockk.version>4.0.2</mockk.version>
<!-- language -->
<java.version>17</java.version>
<kotlin.version>1.9.0</kotlin.version>
<java.version>21</java.version>
<kotlin.version>1.9.20</kotlin.version>
</properties>

<repositories>
Expand All @@ -66,12 +65,6 @@
</dependencyManagement>

<dependencies>
<!-- <dependency>-->
<!-- <groupId>no.nav.bidrag</groupId>-->
<!-- <artifactId>bidrag-beregn-felles</artifactId>-->
<!-- <version>${bidrag-beregn-felles.version}</version>-->
<!-- </dependency>-->

<dependency>
<groupId>no.nav.bidrag</groupId>
<artifactId>bidrag-beregn-forskudd-core</artifactId>
Expand Down Expand Up @@ -341,9 +334,9 @@
</executions>
<dependencies>
<dependency>
<groupId>com.pinterest</groupId>
<artifactId>ktlint</artifactId>
<version>0.47.1</version>
<groupId>com.pinterest.ktlint</groupId>
<artifactId>ktlint-cli</artifactId>
<version>1.0.1</version>
</dependency>
<!-- additional 3rd party ruleset(s) can be specified here -->
</dependencies>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,17 +29,16 @@ const val LIVE_PROFILE = "live"
@Configuration
@OpenAPIDefinition(
info = Info(title = "bidrag-beregn-forskudd-rest", version = "v1"),
security = [SecurityRequirement(name = "bearer-key")]
security = [SecurityRequirement(name = "bearer-key")],
)
@SecurityScheme(
bearerFormat = "JWT",
name = "bearer-key",
scheme = "bearer",
type = SecuritySchemeType.HTTP
type = SecuritySchemeType.HTTP,
)
@Import(CorrelationIdFilter::class, UserMdcFilter::class, DefaultCorsFilter::class)
class BeregnForskuddConfig {

@Bean
fun forskuddCore(): ForskuddCore {
return ForskuddCore.getInstance()
Expand All @@ -56,7 +55,7 @@ class BeregnForskuddConfig {
@Bean
fun sjablonConsumer(
@Value("\${BIDRAGSJABLON_URL}") sjablonBaseUrl: String,
restTemplate: RestTemplate
restTemplate: RestTemplate,
): SjablonConsumer {
restTemplate.uriTemplateHandler = RootUriTemplateHandler(sjablonBaseUrl)
return SjablonConsumer(restTemplate)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ import org.springframework.context.annotation.Import
@SpringBootApplication(exclude = [SecurityAutoConfiguration::class, ManagementWebSecurityAutoConfiguration::class])
@EnableJwtTokenValidation(ignore = ["org.springframework", "org.springdoc"])
@Import(
DefaultCorsFilter::class
DefaultCorsFilter::class,
)
class BidragBeregnForskudd

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,15 +11,15 @@ import org.springframework.web.client.RestTemplate
private const val SJABLONTALL_URL = "/sjablontall/all"

class SjablonConsumer(private val restTemplate: RestTemplate) {

fun hentSjablonSjablontall(): HttpResponse<List<Sjablontall>> {
try {
val sjablonResponse = restTemplate.exchange(SJABLONTALL_URL, HttpMethod.GET, null, SJABLON_SJABLONTALL_LISTE)
LOGGER.info("hentSjablonSjablontall fikk http status ${sjablonResponse.statusCode} fra bidrag-sjablon")
return HttpResponse(sjablonResponse)
} catch (exception: RestClientResponseException) {
LOGGER.error(
"hentSjablonSjablontall fikk følgende feilkode fra bidrag-sjablon: ${exception.statusText}, med melding ${exception.message}"
"hentSjablonSjablontall fikk følgende feilkode fra bidrag-sjablon: ${exception.statusText}, med melding " +
"${exception.message}",
)
throw SjablonConsumerException(exception)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,5 +9,5 @@ data class Sjablontall(
var typeSjablon: String? = null,
var datoFom: LocalDate? = null,
var datoTom: LocalDate? = null,
var verdi: BigDecimal? = null
var verdi: BigDecimal? = null,
)
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,9 @@ class BeregnForskuddController(private val beregnForskuddService: BeregnForskudd
@PostMapping(path = ["/forskudd"])
@Operation(summary = "Beregner forskudd")
@SecurityRequirement(name = "bearer-key")
fun beregnForskudd(@RequestBody beregnForskuddGrunnlag: BeregnGrunnlag): ResponseEntity<BeregnetForskuddResultat> {
fun beregnForskudd(
@RequestBody beregnForskuddGrunnlag: BeregnGrunnlag,
): ResponseEntity<BeregnetForskuddResultat> {
val resultat = beregnForskuddService.beregn(beregnForskuddGrunnlag)
return ResponseEntity(resultat.responseEntity.body, resultat.responseEntity.statusCode)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,11 +22,9 @@ import no.nav.bidrag.transport.behandling.beregning.forskudd.ResultatPeriode
import org.slf4j.LoggerFactory
import org.springframework.http.HttpStatus
import org.springframework.stereotype.Service
import java.time.LocalDate

@Service
class BeregnForskuddService(private val sjablonConsumer: SjablonConsumer, private val forskuddCore: ForskuddCore) {

fun beregn(grunnlag: BeregnGrunnlag): HttpResponse<BeregnetForskuddResultat> {
if (SECURE_LOGGER.isDebugEnabled) {
SECURE_LOGGER.debug("Mottatt følgende request: {}", grunnlag)
Expand Down Expand Up @@ -54,21 +52,23 @@ class BeregnForskuddService(private val sjablonConsumer: SjablonConsumer, privat
}

// Lager input-grunnlag til core-modulen
val grunnlagTilCore = CoreMapper.mapGrunnlagTilCore(
beregnForskuddGrunnlag = grunnlag,
sjablontallListe = sjablonTallListe
)
val grunnlagTilCore =
CoreMapper.mapGrunnlagTilCore(
beregnForskuddGrunnlag = grunnlag,
sjablontallListe = sjablonTallListe,
)

if (SECURE_LOGGER.isDebugEnabled) {
SECURE_LOGGER.debug("Forskudd - grunnlag for beregning: {}", grunnlagTilCore)
}

// Kaller core-modulen for beregning av forskudd
val resultatFraCore = try {
forskuddCore.beregnForskudd(grunnlagTilCore)
} catch (e: Exception) {
throw UgyldigInputException("Ugyldig input ved beregning av forskudd: " + e.message)
}
val resultatFraCore =
try {
forskuddCore.beregnForskudd(grunnlagTilCore)
} catch (e: Exception) {
throw UgyldigInputException("Ugyldig input ved beregning av forskudd: " + e.message)
}

if (resultatFraCore.avvikListe.isNotEmpty()) {
val avvikTekst = resultatFraCore.avvikListe.joinToString("; ") { it.avvikTekst }
Expand All @@ -81,7 +81,7 @@ class BeregnForskuddService(private val sjablonConsumer: SjablonConsumer, privat
"soknadBarn= " + grunnlagTilCore.soknadBarn + System.lineSeparator() +
"barnIHusstandenPeriodeListe= " + grunnlagTilCore.barnIHusstandenPeriodeListe + System.lineSeparator() +
"inntektPeriodeListe= " + grunnlagTilCore.inntektPeriodeListe + System.lineSeparator() +
"sivilstandPeriodeListe= " + grunnlagTilCore.sivilstandPeriodeListe + System.lineSeparator()
"sivilstandPeriodeListe= " + grunnlagTilCore.sivilstandPeriodeListe + System.lineSeparator(),
)
throw UgyldigInputException("Ugyldig input ved beregning av forskudd. Følgende avvik ble funnet: $avvikTekst")
}
Expand All @@ -92,10 +92,11 @@ class BeregnForskuddService(private val sjablonConsumer: SjablonConsumer, privat

val grunnlagReferanseListe = lagGrunnlagReferanseListe(forskuddGrunnlag = grunnlag, resultatFraCore = resultatFraCore)

val respons = BeregnetForskuddResultat(
beregnetForskuddPeriodeListe = mapFraResultatPeriodeCore(resultatFraCore.beregnetForskuddPeriodeListe),
grunnlagListe = grunnlagReferanseListe
)
val respons =
BeregnetForskuddResultat(
beregnetForskuddPeriodeListe = mapFraResultatPeriodeCore(resultatFraCore.beregnetForskuddPeriodeListe),
grunnlagListe = grunnlagReferanseListe,
)

if (SECURE_LOGGER.isDebugEnabled) {
SECURE_LOGGER.debug("Returnerer følgende respons: {}", respons)
Expand All @@ -108,54 +109,54 @@ class BeregnForskuddService(private val sjablonConsumer: SjablonConsumer, privat
resultatPeriodeCoreListe.map {
ResultatPeriode(
periode = ÅrMånedsperiode(fom = it.periode.datoFom, til = it.periode.datoTil),
resultat = ResultatBeregning(
belop = it.resultat.belop,
kode = ResultatKodeForskudd.valueOf(it.resultat.kode),
regel = it.resultat.regel
),
grunnlagReferanseListe = it.grunnlagReferanseListe
resultat =
ResultatBeregning(
belop = it.resultat.belop,
kode = ResultatKodeForskudd.valueOf(it.resultat.kode),
regel = it.resultat.regel,
),
grunnlagReferanseListe = it.grunnlagReferanseListe,
)
}

// Lager en liste over resultatgrunnlag som inneholder:
// - mottatte grunnlag som er brukt i beregningen
// - sjabloner som er brukt i beregningen
private fun lagGrunnlagReferanseListe(forskuddGrunnlag: BeregnGrunnlag, resultatFraCore: BeregnetForskuddResultatCore): List<Grunnlag> {
private fun lagGrunnlagReferanseListe(
forskuddGrunnlag: BeregnGrunnlag,
resultatFraCore: BeregnetForskuddResultatCore,
): List<Grunnlag> {
val mapper = ObjectMapper()
val resultatGrunnlagListe = mutableListOf<Grunnlag>()
val grunnlagReferanseListe = resultatFraCore.beregnetForskuddPeriodeListe
.flatMap { it.grunnlagReferanseListe }
.distinct()
val grunnlagReferanseListe =
resultatFraCore.beregnetForskuddPeriodeListe
.flatMap { it.grunnlagReferanseListe }
.distinct()

// Matcher mottatte grunnlag med grunnlag som er brukt i beregningen
resultatGrunnlagListe.addAll(
forskuddGrunnlag.grunnlagListe!!
.filter { grunnlagReferanseListe.contains(it.referanse) }
.map { Grunnlag(referanse = it.referanse, type = it.type, innhold = it.innhold) }
.map { Grunnlag(referanse = it.referanse, type = it.type, innhold = it.innhold) },
)

// Danner grunnlag basert på liste over sjabloner som er brukt i beregningen
resultatGrunnlagListe.addAll(
resultatFraCore.sjablonListe
.map {
val map = LinkedHashMap<String, Any>()
map["datoFom"] = mapDato(it.periode.datoFom)
map["datoTil"] = mapDato(it.periode.datoTil!!)
map["datoFom"] = it.periode.datoFom.toString()
map["datoTil"] = it.periode.datoTil.toString()
map["sjablonNavn"] = it.navn
map["sjablonVerdi"] = it.verdi.toInt()
Grunnlag(referanse = it.referanse, type = Grunnlagstype.SJABLON, innhold = mapper.valueToTree(map))
}
},
)

return resultatGrunnlagListe
}

companion object {
private val LOGGER = LoggerFactory.getLogger(BeregnForskuddService::class.java)

// Unngå å legge ut datoer høyere enn 9999-12-31
private fun mapDato(dato: LocalDate): String {
return if (dato.isAfter(LocalDate.parse("9999-12-31"))) "9999-12-31" else dato.toString()
}
}
}
Loading

0 comments on commit 912ce08

Please sign in to comment.