ConsumerDataStandardsAustralia / standards

Work space for data standards development in Australia under the Consumer Data Right regime
Other
319 stars 56 forks source link

Decision Proposal 027 - Basic Account Payloads #27

Closed JamesMBligh closed 5 years ago

JamesMBligh commented 5 years ago

This decision proposal outlines a recommendation for payloads of the Basic Account end points and Balance specific end points.

Feedback is now open for this proposal. Feedback is planned to be closed on the 19th October. Due to the complexity of the data payloads, a revised version will be published around the 13th October incorporating feedback received to that date. Decision Proposal 027 - Basic Account Payloads.pdf

JamesMBligh commented 5 years ago

Thanks to all that spotted my deliberate mistake in the title of the proposal document. I've fixed it now :)

-JB-

deboraelkin2 commented 5 years ago

A few observations:

WestpacOpenBanking commented 5 years ago

Westpac supports the proposal with the following remarks and questions:

bazzat commented 5 years ago

The ABA Open Banking Technical WG has a few initial observations/questions, posted here in the hope they'll be useful in producing the revised version:

benkolera commented 5 years ago

A technical quip. There are a few endpoints that take query params but also are specified to never return an error. On the following endpoint, I'd assume that there would be a 400 returned on invalid filter values, pages that weren't natural numbers, etc. Is this a C&P error or would you expect the API to ignore invalid values as though they weren't supplied? That would make difficulties for developers who use a framework that validates the query params in a strong way and also create confusion when filters from a buggy consumer got dropped silently and would not be advisable.

1539329536

JamesMBligh commented 5 years ago

@benkolera, when I state in the specs that there is no specific error expected what is meant is that there is not going to be a set of errors objects defined in the spec for the end point. It is not meant to imply that there are zero circumstances where a 400 or 422 could never be returned. I'll clean my language up in future :)

-JB-

JamesMBligh commented 5 years ago

Thanks for the comments. Here are responses to the feedback provided:

Open/Closed Status Closed accounts have been included as they were specifically requested by the FinTech community during initial consultation and would appear to align with the designation instrument mandate. The absence of the openStatus field in the payload was an oversight. Apologies.

Balances

meta Object The payloads decision indicated this object as mandatory based on the UK spec and JSONAPI.org recommendations. That's why it is mandatory here even if it is empty.

Empty Result Set I would expect an empty result set to be indicated by an empty array rather than a 204 return code.

Nickname vs DisplayName I'll add nickName as an optional field

Account Masking We defined a PCIString primitive for PAN masking. I will add an additional for account number masking.

Hopefully these updates will be applied this evening.

One final note: please give me feedback on the accountCategory field values. It is critical that we get the content of this field correct and I don't believe the current value set is anywhere close to being correct.

-JB-

JamesMBligh commented 5 years ago

Please find attached version 2 of the proposal with feedback incorporated: Decision Proposal 027 - Basic Account Payloads.pdf

-JB-

elsamarkula commented 5 years ago

Feedback from the Australian Retail Credit Association: See ARCA’s comments in respect to the Customer Payloads discussion thread. ARCA’s observations are based in part on ARCA’s experience as owner of the Australian Credit Reporting Data Standard (ACRDS) (data input standard for credit information), as well as ARCA’s role as drafter of the Privacy (Credit Reporting) Code (CR Code). • Credit balance type – credit Limit – maximum amount of credit available. Note this should align with approach taken in CR Code paragraph 6.2(b) (which requires updating of limit for accounts subject to amortised payment schedule). Alternatively, allowance should be made for both initial credit limit and amortised limit. • Response payloads – Account ID – note ACRDS also has concept of Account ID (contained in section 5.9 of the ACRDS) – would be good if this were replicated for OB exchange, so the same Account ID were used for both credit reporting and open banking. • For Account Id need to be mindful that Accounts numbers are not always unique within an entity such as a Credit Provider – only unique within a portfolio. A CP may generate a unique Account Id which is ok for this purpose. Additionally they should provision for Account Number and BSB which is how the Account is commonly recognised. • Response payloads - Masked Number – note truncation requirements in CR Code (first 6 and last 4 digits of the account number where the account is a credit card or debit card account). • Response payloads – Account Category. Additional credit account categories in ACRDS: Auto Loan, Charge Card, Overdraft, Personal Loan (fixed term), Personal Loan (revolving), Equipment Hire or Rental. [Also have Telecommunications Services and Utilities, as well as an ‘AO’ All Other Account Types as a catch all]. Also consider inclusion of ‘written off/delinquent loan’ into Account Category – these are credit card or personal loans that have reached 180 days past due and have been transferred to a separate recoveries system, where the structure of the account will no longer reflect the original account.

da-banking commented 5 years ago

Inclusion of closed accounts A straightforward reading of the ACCC's Draft Rules Framework shows former customers to be in scope, so the inclusion of CLOSED accounts seems to be inevitable given that all accounts of a former customer will be CLOSED. We agree with @WestpacOpenBanking that it would be unusual to display these accounts in Internet Banking, but it seems they should be available under Open Banking, though the more common use case would be for data consumers to request accounts that were OPEN. CLOSED accounts will always have a balance of $0, but there may be transaction history related to those accounts that is of interest.

Product data Section 5.3.1. Customer data of the ACCC Draft Rules Framework states:

The ACCC also proposes to make rules to the effect that the product data specified in section 5.3.3 [Product data], as it relates to an account or accounts that a customer holds, is within scope.

We have understood this to mean that it will be possible to relate an account to a currently offered product or a former product. We would expect this data to be in the account payload - or will this be considered as part of #31?

Debit Balance, Credit Balance, and Multi Currency Purses Types It may be worthwhile to include some examples that illustrate how data should be placed into the specified data structures.

We would support the suggestions made by others that there needs to be clarity around the inclusion of negative/positive amounts versus Debit/Credit Balances.

POST /banking/accounts/balances HTTP Response Code: 422 Unprocessable Entity

Minor query: is the intention that we return "code": "0001 – Account not able to be found" or "code": "0001"? The term code seems inappropriate for a code and description.

We have been giving some thought to the implications of this error mechanism.

Suppose we have a data consumer that is periodically requesting a balance refresh to 3 accounts on behalf of a PSU. So something like:

POST /banking/accounts/balances HTTP/1.1
Host: foo.com.au
Content-Type: application/json
Content-Length: 92
{
    "data": {
        "accountIds": [
            "acc1",
            "acc2",
            "acc3"
        ]
    }
    "meta": {}
}

Supposing the PSU had a joint account relationship with "acc3", and this relationship was later removed by the primary account owner, for example a married couple may have got divorced and separated their finances.

In this scenario, the data provider would immediately stop showing this account to the PSU in Internet Banking as they no longer had any relationship to it. It seems to follow that the data provider would also not want to show this account to a data consumer under Open Banking that the PSU had previously shared it with when they had the authority to do so.

If the data consumer was sending the request above, and they started to get the error "0001 – Account not able to be found", then they would also not be getting a balance for "acc1" and "acc2", which they still have access to.

It seems that it would be simpler to deal with this kind of issue if the POST /banking/accounts/balances operation always returned balances for the accounts it could. It would include at most accounts the data consumer had specified, but the data provider would omit accounts that it could not return for such reasons.

The data consumer would update all of the balances it had received, and could purge the stale "acc3" data once the data was no longer serving the purpose it was collected for.

This seems preferable to the 422 error. To recover from this error a data consumer would need to detect the error while calling POST /banking/accounts/balances and then kick off a custom routine to GET /banking/accounts, compare the list of accounts that came back with the stored accounts, then purge "acc3", and then return to the periodic POST /banking/accounts/balances mechanism with the reduced list of accountIds which should no longer error.

Should there be an Account Sub-Category or Sub-Type? You could broadly separate accounts into DEPOSIT and LOAN products. However the distinction is blurred when it comes to things like deposit products that include overdrafts. We would recommend no sub-categories.

NationalAustraliaBank commented 5 years ago

NAB is broadly supportive of this proposal, with the following feedback:

Account Balances: The way balances are represented in this payload may be confusing. We propose that account balance data could be provided consistently from the perspective of the consumer so CR is a positive balance, and DR is a negative balance. In this way the sub-typing presented below could be avoided based off of the balanceType attribute.

(Below is an approximation of how we currently interpret the Current Proposal).

{
  "data": {
    "accounts": [
      {
        "accountid": "string",
        "displayName": "string",
        "maskedNumber": "string",
        "accountCategory": "SAVINGS",
        "providerType": "string",
        "balance$type": "debit",
        "debit": {
          "currentBalance": {
            "currency": "string",
            "amount": "string"
          },
          "availableBalance": {
            "currency": "string",
            "amount": "string"
          }
        },
        "credit": {
          "accountBalance": {
            "currency": "string",
            "amount": "string"
          },
          "availableBalance": {
            "currency": "string",
            "amount": "string"
          },
          "creditLimit": {
            "currency": "string",
            "amount": "string"
          }
        },
        "purses": [
          {
            "currency": "string",
            "amount": "string"
          }
        ],
        "nickname": "string"
      }
    ]
  },
  "links": {
    "self": "string",
    "first": "string",
    "prev": "string",
    "next": "string",
    "last": "string"
  },
  "meta": {
    "totalRecords": 0,
    "totalPages": 0
  }
}

Trying to have a CR & DR type defined separately is overly complicated as most accounts can have either at different times.

Perhaps instead of sub-typing based on balanceType perhaps we could look at a model where we sub-type based on the accountCategory /(accountType) something along the lines of the structure below:

            "accounts": [{
                "accountCategory": "...",
                "balance": {
                    "amount": {
                        "currentBalance": {
                            "currency": "..",
                            "amount": "..."
                        },
                        "availableBalance": {
                            "currency": "...",
                            "amount": "..."
                        },
                        "baseCurrencyBalance": {
                            "currency": "...",
                            "amount": "..."
                        }
                    },
                    "purse": {
                        "purse": [{
                            "currency": "...",
                            "currentBalance": "...",
                            "availableBalance": "..."
                        }]
                    }
                }
            }]

We also believe that what’s meant by available funds needs to be clarified. Our assumption is that this would exclude any holds or uncleared funds but would include funds available through utilisation of a creditLimit. Our expectation is that we would present whatever is outlined in our Terms & Conditions for the product.

We agree with previous feedback that facilityLimit could be confusing so support the change of name from facilityLimit to creditLimit. An alternative could be accountLimit.

As stated by others in this thread, inclusion of a mandatory date/timestamp associated with the balance would be a useful addition.

accountCategory

The groupings used in the accountCategory fields may present some mapping challenges. The structure appears to be a mix of product type and product purpose and is not MECE (mutually exclusive & collectively exhaustive) i.e. some products would map to multiple categories which we think is too confusing unless there's an expectation for multi tagging of product types.

Examples of issues:

Given the importance of the accountCategory attribute, we propose Data 61 should run short decision paper just on it and its enumerations before finalising Decision Proposal 031 - Detailed Account Payloads.

Closed Accounts We support providing an Open or Closed status, but (as pointed out by others in this thread) Closed Account data is not readily accessible.

JamesMBligh commented 5 years ago

I am leaving this proposal open until COB Monday at the request of a number of stakeholders

-JB-

MacquarieBank commented 5 years ago

Macquarie recommend the following modification to the Basic Account and Balance payloads:

  1. In the UK spec, they have a more extensible data model for balances, where a balance is represented by a Type (e.g. Available, Current, etc …), and a credit/debit indicator for each balance. We think this is a more flexible and extensible model (banks could add additional balance types), and will also better handle scenarios where one balance (e.g. current balance) could be positive, and the other balance (e.g. available balance) could be negative (e.g. an overdraft, or a transaction account in negative). We would like Data61 to consider revising balances to more closely align to the UK data model.

  2. For accountCategory, we would recommend considering an additional value for OVERDRAFT

NationalAustraliaBank commented 5 years ago

After further consideration and conversations with Data61 NAB would like to share this additional feedback:

- debit --> deposits
- credit --> lending
- purses --> purses

If balance$type is used as the sub-type field how will the scheme ensure that banks use consistent balance structures for similar product types?

· As requested in the decision proposal, NAB would like to share the following list of potential Account Categories, we also realise that it may be a challenge to expect all banks to map their accounts to these categories as this mapping exercise may be a challenge, as such propose that this mapping be completed on a best efforts or optional basis:

JamesMBligh commented 5 years ago

Thanks for the feedback. I am now closing the feedback period pending the formulation of a final recommendation.

-JB-

JamesMBligh commented 5 years ago

Now that the feedback has been fully reviewed here are comments indicating how the final decision will be posed. Note that this decision is for the draft version only. There will be additional time to provide feedback on the whole standard after the draft is released so nothing is set in concrete.

Amortised Limit Ok, this will be added as an additional field

Account ID Permance As per a previous decision proposal record IDs (including the accountId) are designed to be permanent only in the context of a specific authorisation. The intent is to ensure that a new, and potentially sensitive, reusable identifier is not inadvertently created under the CDR regime. As such, there will be no intent to link the accountId to another data delivery mechanism.

Product Data Linkage As previously explained on another decision proposal there is no intention to link an account to a product. This is because there is no guarantee that the product is still offered but also - and more importantly - once the account is created the conditions become more static. The product conditions may change for new accounts that are originated but the existing accounts may or may not be updated to match. This divergence becomes more pronounced over years. To resolve this the same data structures as product (that are relevant) have been included in the account details payload.

Error Codes The 0001 is the code. The rest of the text is explanatory. This would appear to be my poor formatting creating the confusion. I'll try a different approach

accountId Failure Note that this should be an unusual scenario. The usual flow would be to call the accounts end point to get a list of accounts and then refresh the balances later that session after a period of time or at the request of the customer. The recommendation would be for a data consumer to request the list of accounts on a regular basis to ensure access is still available to all accounts. This also has the advantage of picking up newly visible accounts and also changed information on accounts like nickname.

Flexible Balance Type Leaving balance type as open to be specified by data providers creates a potential point of divergence across the providers. This may make it difficult to implement a data consumer across many providers. Preference is for strong typing of balance types. If there is a balance type that is missing let me know in feedback to the draft standard.

Balance Object Will rename to deposits and lending as recommended

Account Category Based on feedback the Account Categories will be renamed as productCategory and set to:

-JB-

JamesMBligh commented 5 years ago

The finalised decision for this topic has been endorsed. Please refer to the attached document. Decision 027 - Basic Account Payloads.pdf

-JB-