Implemented parsing retrieve account transactions in MT940 format job parameters
This commit is contained in:
parent
a64e0b9427
commit
4ed3d44b9e
|
@ -37,6 +37,8 @@ enum class InstituteSegmentId(override val id: String) : ISegmentId {
|
||||||
|
|
||||||
Balance("HISAL"),
|
Balance("HISAL"),
|
||||||
|
|
||||||
AccountTransactionsMt940("HIKAZ")
|
AccountTransactionsMt940("HIKAZ"),
|
||||||
|
|
||||||
|
AccountTransactionsMt940Parameters(AccountTransactionsMt940.id + "S")
|
||||||
|
|
||||||
}
|
}
|
|
@ -112,7 +112,9 @@ open class ResponseParser(
|
||||||
InstituteSegmentId.ChangeTanMediaParameters.id -> parseChangeTanMediaParameters(segment, segmentId, dataElementGroups)
|
InstituteSegmentId.ChangeTanMediaParameters.id -> parseChangeTanMediaParameters(segment, segmentId, dataElementGroups)
|
||||||
|
|
||||||
InstituteSegmentId.Balance.id -> parseBalanceSegment(segment, dataElementGroups)
|
InstituteSegmentId.Balance.id -> parseBalanceSegment(segment, dataElementGroups)
|
||||||
|
|
||||||
InstituteSegmentId.AccountTransactionsMt940.id -> parseMt940AccountTransactions(segment, dataElementGroups)
|
InstituteSegmentId.AccountTransactionsMt940.id -> parseMt940AccountTransactions(segment, dataElementGroups)
|
||||||
|
InstituteSegmentId.AccountTransactionsMt940Parameters.id -> parseMt940AccountTransactionsParameters(segment, segmentId, dataElementGroups)
|
||||||
|
|
||||||
else -> {
|
else -> {
|
||||||
if (JobParametersSegmentRegex.matches(segmentId)) {
|
if (JobParametersSegmentRegex.matches(segmentId)) {
|
||||||
|
@ -657,6 +659,19 @@ open class ResponseParser(
|
||||||
return ReceivedAccountTransactions(bookedTransactionsString, unbookedTransactionsString, segment)
|
return ReceivedAccountTransactions(bookedTransactionsString, unbookedTransactionsString, segment)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected open fun parseMt940AccountTransactionsParameters(segment: String, segmentId: String, dataElementGroups: List<String>): RetrieveAccountTransactionsInMt940Parameters {
|
||||||
|
val jobParameters = parseJobParameters(segment, segmentId, dataElementGroups)
|
||||||
|
|
||||||
|
val transactionsParameterIndex = if (jobParameters.segmentVersion >= 6) 4 else 3
|
||||||
|
val dataElements = getDataElements(dataElementGroups[transactionsParameterIndex])
|
||||||
|
|
||||||
|
val countDaysForWhichTransactionsAreKept = parseInt(dataElements[0])
|
||||||
|
val settingCountEntriesAllowed = parseBoolean(dataElements[1])
|
||||||
|
val settingAllAccountAllowed = if (dataElements.size > 2) parseBoolean(dataElements[2]) else false
|
||||||
|
|
||||||
|
return RetrieveAccountTransactionsInMt940Parameters(jobParameters, countDaysForWhichTransactionsAreKept, settingCountEntriesAllowed, settingAllAccountAllowed)
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
protected open fun parseBankDetails(dataElementsGroup: String): Kreditinstitutskennung {
|
protected open fun parseBankDetails(dataElementsGroup: String): Kreditinstitutskennung {
|
||||||
val detailsStrings = getDataElements(dataElementsGroup)
|
val detailsStrings = getDataElements(dataElementsGroup)
|
||||||
|
|
|
@ -0,0 +1,13 @@
|
||||||
|
package net.dankito.banking.fints.response.segments
|
||||||
|
|
||||||
|
|
||||||
|
open class RetrieveAccountTransactionsInMt940Parameters(
|
||||||
|
parameters: JobParameters,
|
||||||
|
open val countDaysForWhichTransactionsAreKept: Int,
|
||||||
|
open val settingCountEntriesAllowed: Boolean,
|
||||||
|
open val settingAllAccountAllowed: Boolean
|
||||||
|
) : JobParameters(parameters) {
|
||||||
|
|
||||||
|
internal constructor() : this(JobParameters(), -1, false, false) // for object deserializers
|
||||||
|
|
||||||
|
}
|
|
@ -1043,6 +1043,47 @@ class ResponseParserTest : FinTsTestBase() {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun parseAccountTransactionsMt940Parameters_Version4() {
|
||||||
|
|
||||||
|
// given
|
||||||
|
val countDaysForWhichTransactionsAreKept = 90
|
||||||
|
|
||||||
|
// when
|
||||||
|
val result = underTest.parse("HIKAZS:21:4:4+20+1+$countDaysForWhichTransactionsAreKept:N'")
|
||||||
|
|
||||||
|
// then
|
||||||
|
assertSuccessfullyParsedSegment(result, InstituteSegmentId.AccountTransactionsMt940Parameters, 21, 4, 4)
|
||||||
|
|
||||||
|
result.getFirstSegmentById<RetrieveAccountTransactionsInMt940Parameters>(InstituteSegmentId.AccountTransactionsMt940Parameters)?.let { segment ->
|
||||||
|
expect(segment.countDaysForWhichTransactionsAreKept).toBe(countDaysForWhichTransactionsAreKept)
|
||||||
|
expect(segment.settingCountEntriesAllowed).isFalse()
|
||||||
|
expect(segment.settingAllAccountAllowed).isFalse()
|
||||||
|
}
|
||||||
|
?: run { fail("No segment of type AccountTransactionsMt940Parameters found in ${result.receivedSegments}") }
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun parseAccountTransactionsMt940Parameters_Version6() {
|
||||||
|
|
||||||
|
// given
|
||||||
|
val countDaysForWhichTransactionsAreKept = 90
|
||||||
|
|
||||||
|
// when
|
||||||
|
val result = underTest.parse("HIKAZS:23:6:4+20+1+1+$countDaysForWhichTransactionsAreKept:N:N'")
|
||||||
|
|
||||||
|
// then
|
||||||
|
assertSuccessfullyParsedSegment(result, InstituteSegmentId.AccountTransactionsMt940Parameters, 23, 6, 4)
|
||||||
|
|
||||||
|
result.getFirstSegmentById<RetrieveAccountTransactionsInMt940Parameters>(InstituteSegmentId.AccountTransactionsMt940Parameters)?.let { segment ->
|
||||||
|
expect(segment.countDaysForWhichTransactionsAreKept).toBe(countDaysForWhichTransactionsAreKept)
|
||||||
|
expect(segment.settingCountEntriesAllowed).isFalse()
|
||||||
|
expect(segment.settingAllAccountAllowed).isFalse()
|
||||||
|
}
|
||||||
|
?: run { fail("No segment of type AccountTransactionsMt940Parameters found in ${result.receivedSegments}") }
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
private fun assertSuccessfullyParsedSegment(result: Response, segmentId: ISegmentId, segmentNumber: Int,
|
private fun assertSuccessfullyParsedSegment(result: Response, segmentId: ISegmentId, segmentNumber: Int,
|
||||||
segmentVersion: Int, referenceSegmentNumber: Int? = null) {
|
segmentVersion: Int, referenceSegmentNumber: Int? = null) {
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue