Closed CDR-API-Stream closed 4 years ago
Apologies for the delay in responding on this issue. It is quite complex as it really represents a bundling of multiple suggested changes and clarifications (which is understandable considering the linkages between the issues).
Recommendations for the proposed changes will be outlined below. Note that, as scheduled payments is not planned for February and no holders have indicated early implementation these changes will be addressed by updating version 1 of the end points rather than creating a version 2 and managing obsolescence. If this position creates an implementation issue then feedback to this end is requested.
If
lastWeekDay
is intended to be a day of week then the least confusing method would be to declare and reuse aDayOfWeek
enumeration which strongly orders the days of week in line with ISO-8601.
This change will be recommended by the DSB.
Regarding
dayInInterval
inBankingScheduledPaymentInterval
, is this intended to be an arbitrary number of days for the interval period? Ie. IfBankingScheduledPaymentInterval
represents a monthly payment but the payment is to be conducted on the 5th day of every monthinterval
=P1M
anddayInInterval
=5
?
dayInInterval
also utilises ISO-8601 so, in the example above the value of dayInInterval
would be P5D
. This approach was chosen to accommodate periods longer than a month. For example, specifying the 5th day of the second month each quarter would be represented as:
interval
= P3M
dayInInterval
= P1M5D
ISO-8601 allows for bounded durations specified using a
/
separator. Additionally the standard allows for recurring time intervals to be specified using a prefix ofR/#
. Are these variations intended to be supported?
Support for recurring intervals is not intended. It is recommended that this be clarified in field description.
This approach was selected for two reasons:
Nonetheless, specifically on
BankingScheduledPaymentRecurrenceOnceOff
there doesn't appear to be a facilitation fornonBusinessDayTreatment
.
BankingScheduledPaymentRecurrenceOnceOff
is intended to represent a single known payment date so it is assumed that business day treatment has been included in the setting of the specified date.
On
BankingScheduledPaymentRecurrenceLastWeekday
there doesn't appear to be a facilitation fornonBusinessDayTreatment
(ie. when the weekday is set to Monday and it's a public holiday).
The addition of nonBusinessDayTreatment
to the last week day structure will be recommended.
In regard to the remainder of the proposal that the transaction object being converted from a mixin style structure to a more structured model, this was considered but the variation of data held across various data holders indicated that the exceptions to a structured model would make this prohibitive. For the first iteration of the standards a mixin approach was therefor taken.
The DSB does not recommmend changing this approach at the current time. It is suggested that this is revisited once a transaction data has been made available for all account types to see if a structured model can be introduced.
Description
Revision of how lastWeekDay is expressed in the Scheduled Payments payloads.
Area Affected
The payloads for the Scheduled Payments end points.
Change Proposed
This issue is raised in response to a feedback comment in the main standards repository, https://github.com/ConsumerDataStandardsAustralia/standards/issues/73#issuecomment-511268647
This feedback is quoted below:
If
lastWeekDay
is intended to be a day of week then the least confusing method would be to declare and reuse aDayOfWeek
enumeration which strongly orders the days of week in line with ISO-8601.Regarding
dayInInterval
inBankingScheduledPaymentInterval
, is this intended to be an arbitrary number of days for the interval period? Ie. IfBankingScheduledPaymentInterval
represents a monthly payment but the payment is to be conducted on the 5th day of every monthinterval
=P1M
anddayInInterval
=5
?ISO-8601 allows for bounded durations specified using a
/
separator. Additionally the standard allows for recurring time intervals to be specified using a prefix ofR/#
. Are these variations intended to be supported?As per above ISO-8601 allows for bounded timespans and repetition. Since this is facilitated in ISO-8601
BankingScheduledPaymentRecurrenceOnceOff
,BankingScheduledPaymentRecurrenceLastWeekday
andBankingScheduledPaymentRecurrenceIntervalSchedule
all appear to be able to be represented in a single unified object.Nonetheless, specifically on
BankingScheduledPaymentRecurrenceOnceOff
there doesn't appear to be a facilitation fornonBusinessDayTreatment
. OnBankingScheduledPaymentRecurrenceIntervalSchedule
thefinalPaymentDate
could be derived from a bounded ISO-8601 Duration. OnBankingScheduledPaymentRecurrenceLastWeekday
there doesn't appear to be a facilitation fornonBusinessDayTreatment
(ie. when the weekday is set to Monday and it's a public holiday).My feedback has been misunderstood. There is a high probability that there will be additional transaction details that are divergent. In the current proposal
extendedData
and, on further reviewBankingTransaction
effectively contains all possible payment attributes which inevitably will lead to a sparsely populated and poorly structured object. This means that a developer will need to perform picklist matching to determine the acquisition channel rather than be able to determine that acquisition channel via a strongly typed subobject.On
BankingTransaction
, overloading of the base object is occurring rather than using theuType
convention followed elsewhere. Specifically of note is that BPAY payments (a trademarked and commercially attached payment provider) have been granted exclusivity over generically named attributes notablybillerCode
,billerName
andcrn
. This precludes an alternate payments provider using these global attributes and arguably provides a commercial advantage to the incumbent. Additionallyreference
described asThe reference for the transaction provided by the originating institution. Empty string if no data provided
appears to be overloaded as it may be used by various origination sources.BankingTransactionDetail
does not appear to sufficiently allow for attributes of even existing payment types such as:pain.a09.001.01
exists but it is likely this sub-object itself would need anNPPuType
As can be seen through the collapsing of these structures there is an increasing amount of fuzziness for a recipient developer attempting to clearly identify and present transaction information. Such different views are a regular use case within existing internet banking platforms. That is to say that BPAY transactions usually have a different presentation view than direct transfers which have a different presentation view to those which utilise card providers such as VISA or Mastercard.
Pseudo coding an alternate JSON structure for BankingTransaction:
Pseudo coding a JSON structure for BankingTransactionDetail:
This structure allows
BankingTransactionDetail*
to extend the non detail version of the object while rewriting it within the detailed definition. Additionally this structure allows for non-standard payment types to be adopted by banks (for instance an Apple Pay integration) without polluting the namespace. Finally this structure makes transitioning to polymorphism available in OAI3 using theuType
as the discriminator.Repeating one of the defined principles:
Principle 4: APIs provide a good developer experience
Stylistic from the Standards perspective is object pollution for developers using available industry tools. I would suggest that perhaps Standards should consider runningswagger-codegen
on their specification as a matter of course.Regarding @anzbankau's comment and your response regarding the return of
422 Unprocessable Entity
for invalid pagination inputs. This is divergent from the UK OpenBanking specification which states that400 Bad Request
is to be used in the situation defined asRequest has malformed, missing or non-compliant JSON body, URL parameters or header fields.
. In fact error code 422, defined in HTTP 1.1+, is entirely missing from the UK Standards. Instead the UK Standards prefer a HTTP 1.0400 Bad Request
and this convention is utilised within Engineering artefacts (following clarification at the time with Standards). Is this position now changing?Thanks.