Skip to content

Commit 700cb7f

Browse files
committed
Første transaksjonsdato tolket (som Norsk)
1 parent 4cede51 commit 700cb7f

File tree

3 files changed

+51
-1
lines changed

3 files changed

+51
-1
lines changed

src/main/kotlin/no/nav/hjelpemidler/oebs/listener/model/OrdrelinjeOebs.kt

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,12 @@ import com.fasterxml.jackson.annotation.JsonFormat
44
import com.fasterxml.jackson.annotation.JsonIgnore
55
import com.fasterxml.jackson.annotation.JsonIgnoreProperties
66
import com.fasterxml.jackson.annotation.JsonProperty
7+
import io.github.oshai.kotlinlogging.KotlinLogging
78
import java.time.LocalDate
9+
import java.time.format.DateTimeFormatter
10+
import java.util.Locale
11+
12+
private val log = KotlinLogging.logger { }
813

914
@JsonIgnoreProperties(ignoreUnknown = true)
1015
data class OrdrelinjeOebs(
@@ -72,6 +77,8 @@ data class OrdrelinjeOebs(
7277
// For statistikk formål
7378
@JsonProperty("ForsteGangsUtlan")
7479
val førsteGangsUtlån: String?, // Format: "Y, N, , N, N"
80+
@JsonProperty("ForsteTransDato")
81+
valrsteTransaksjonsDato: String?, // Format: "04-MAR-25, , 04-MAR-25"
7582
@JsonProperty("AntUtlan")
7683
val antallUtlån: String?, // Format: "1, 2, , 3, 4"
7784
) {
@@ -110,6 +117,7 @@ data class OrdrelinjeOebs(
110117

111118
fun serienumreStatistikk(): List<AntallUtlån> {
112119
if (serienumre.isNullOrEmpty()) return listOf()
120+
113121
val førsteGangsUtlån =
114122
førsteGangsUtlån?.split(",")?.map {
115123
when (it.trim()) {
@@ -118,17 +126,44 @@ data class OrdrelinjeOebs(
118126
else -> null
119127
}
120128
}
129+
130+
val førsteTransaksjonsDatoFormat =
131+
DateTimeFormatter.ofPattern(
132+
"dd-LLL-uu",
133+
Locale.of("nb", "NO"),
134+
) // Format: "04-MAR-25, , 04-MAR-25"
135+
val førsteTransaksjonsDato =
136+
førsteTransaksjonsDato?.split(",")?.map { part ->
137+
val date = part.trim()
138+
if (date.count() == 9) {
139+
runCatching {
140+
LocalDate.parse(
141+
// Fiks format fra "JAN" til "Jan", "MAR" til "Mar"
142+
date.lowercase(), // .let { it.replaceRange(3, 4, it.substring(3, 4).uppercase()) }.replace("-", " "),
143+
førsteTransaksjonsDatoFormat,
144+
)
145+
}.onFailure { e ->
146+
log.error(e) { "Feilet i å tolke datoen: $date" }
147+
}.getOrNull()
148+
} else {
149+
null
150+
}
151+
}
152+
121153
val antallUtlån = antallUtlån?.split(",")?.map { it.trim().toIntOrNull() }
154+
122155
if ((førsteGangsUtlån != null && serienumre.count() != førsteGangsUtlån.count()) ||
123156
(antallUtlån != null && antallUtlån.count() != serienumre.count())
124157
) {
125158
// Uventet antall førsteGangsUtlån eller antallUtlån, må være lik antall serienumre (eller null)
126159
return listOf()
127160
}
161+
128162
return serienumre.mapIndexed { idx, serieNr ->
129163
AntallUtlån(
130164
serieNr = serieNr,
131165
førsteGangsUtlån = førsteGangsUtlån?.getOrNull(idx),
166+
førsteTransaksjonsDato = førsteTransaksjonsDato?.getOrNull(idx),
132167
antallUtlån = antallUtlån?.getOrNull(idx),
133168
)
134169
}
@@ -138,5 +173,6 @@ data class OrdrelinjeOebs(
138173
data class AntallUtlån(
139174
val serieNr: String,
140175
val førsteGangsUtlån: Boolean?,
176+
valrsteTransaksjonsDato: LocalDate?,
141177
val antallUtlån: Int?,
142178
)

src/test/kotlin/no/nav/hjelpemidler/oebs/listener/model/OrdrelinjeOebsTest.kt

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import no.nav.hjelpemidler.oebs.listener.test.Fixtures
55
import no.nav.hjelpemidler.oebs.listener.test.OrdrelinjeOebsJsonBuilder
66
import no.nav.hjelpemidler.serialization.jackson.jsonToValue
77
import java.time.LocalDate
8+
import java.time.Month
89
import kotlin.test.Test
910

1011
class OrdrelinjeOebsTest {
@@ -74,18 +75,23 @@ class OrdrelinjeOebsTest {
7475
}
7576

7677
@Test
77-
fun `Parse FørsteGangsUtlån and AntallUtlån`() {
78+
fun `Parse FørsteGangsUtlån, FørsteTransaksjonsDato and AntallUtlån`() {
7879
val result =
7980
lagOrdrelinje {
8081
serienumre = """["1", "2", "3"]"""
8182
førsteGangsUtlån = """N, Y, """
83+
førsteTransaksjonsDato = """01-JAN-25, , 04-OKT-25"""
8284
antallUtlån = """2, 1, """
8385
}
8486

8587
result.serienumreStatistikk()[0].førsteGangsUtlån shouldBe false
8688
result.serienumreStatistikk()[1].førsteGangsUtlån shouldBe true
8789
result.serienumreStatistikk()[2].førsteGangsUtlån shouldBe null
8890

91+
result.serienumreStatistikk()[0].førsteTransaksjonsDato shouldBe LocalDate.of(2025, Month.JANUARY, 1)
92+
result.serienumreStatistikk()[1].førsteTransaksjonsDato shouldBe null
93+
result.serienumreStatistikk()[2].førsteTransaksjonsDato shouldBe LocalDate.of(2025, Month.OCTOBER, 4)
94+
8995
result.serienumreStatistikk()[0].antallUtlån shouldBe 2
9096
result.serienumreStatistikk()[1].antallUtlån shouldBe 1
9197
result.serienumreStatistikk()[2].antallUtlån shouldBe null
@@ -97,9 +103,11 @@ class OrdrelinjeOebsTest {
97103
lagOrdrelinje {
98104
serienumre = """["1"]"""
99105
førsteGangsUtlån = ""
106+
førsteTransaksjonsDato = ""
100107
}
101108

102109
result.serienumreStatistikk()[0].førsteGangsUtlån shouldBe null
110+
result.serienumreStatistikk()[0].førsteTransaksjonsDato shouldBe null
103111
result.serienumreStatistikk()[0].antallUtlån shouldBe null
104112
}
105113

@@ -109,12 +117,16 @@ class OrdrelinjeOebsTest {
109117
lagOrdrelinje {
110118
serienumre = """["1", "2"]"""
111119
førsteGangsUtlån = ", Y"
120+
førsteTransaksjonsDato = ", 20-MAR-25"
112121
antallUtlån = ", 1"
113122
}
114123

115124
result.serienumreStatistikk()[0].førsteGangsUtlån shouldBe null
116125
result.serienumreStatistikk()[1].førsteGangsUtlån shouldBe true
117126

127+
result.serienumreStatistikk()[0].førsteTransaksjonsDato shouldBe null
128+
result.serienumreStatistikk()[1].førsteTransaksjonsDato shouldBe LocalDate.of(2025, Month.MARCH, 20)
129+
118130
result.serienumreStatistikk()[0].antallUtlån shouldBe null
119131
result.serienumreStatistikk()[1].antallUtlån shouldBe 1
120132
}

src/test/kotlin/no/nav/hjelpemidler/oebs/listener/test/Fixtures.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ class OrdrelinjeOebsJsonBuilder {
3333
var fnrBruker: String = "XXXXXXXXXXX"
3434
var sistOppdatert: String = LocalDateTime.now().toString()
3535
var førsteGangsUtlån: String? = null
36+
var førsteTransaksjonsDato: String? = null
3637
var antallUtlån: String? = null
3738

3839
@Language("JSON")
@@ -68,6 +69,7 @@ class OrdrelinjeOebsJsonBuilder {
6869
"LastUpdateDate": "$sistOppdatert",
6970
"Description": "",
7071
"ForsteGangsUtlan": "$førsteGangsUtlån",
72+
"ForsteTransDato": "$førsteTransaksjonsDato",
7173
"AntUtlan": "$antallUtlån"
7274
}
7375
""".trimIndent()

0 commit comments

Comments
 (0)