Skip to content

Galileo-Transaction-Reconciliation

Backend provided properties for transaction identifications

BE provides two properties/fields in TransactionCompletedEvent which can be used to reconcile transaction with Galileo provided RDF files. These two fields are AuthorizationCode and ExternalTransactionId.

  • ExternalTransactionId is unique for each transaction and TransactionCompletedEvent.
  • AuthorizationCode is same for a set of transactions. Like both PreAuth and Preauth settle transactions will usually have same AuthorizationCode.

Galileo provided properties for transaction identifications

Galileo files contain four properties which are involved in reconcilliation and mapping Galileo transactions witlh TransactionCompletedEvent. These four fields are:

  • LOADS AUTH ID this field contains authorization id for network based transactions, also known as AuthId
  • SOURCE ID contains galileo transaction id, also knowns as pmtId/adjId/holdId/feeId depending on ActivityType
  • NETWORK or NETWORK CODE contains NETWORK CODE
  • TrasactionType or TRANSACTION CODE/TYPE where first two letters are called ActivityType and rest are known as TransCode or otype

Matching Galileo posted transactions for TransactionCompletedEvent

First please make sure that when you are searching for a galileo posted transactions in TransactionCompletedEvent, you need to search for transaction events with Status != Declined and MessageType NOT IN (PreAuthTransaction, PreAuthTransactionAdvice). Galileo authorized transactions also follow these guidelines, but these will have MessageType IN (PreAuthTransaction, PreAuthTransactionAdvice)

There are three common scenarios which affect what value is present in fields in TransactionCompletedEvent and how these relate to data available in Galileo provided fields.

1. Majority Transactions

For these transactions TransactionCompletedEvent fields are mapped to SOURCE ID and ActivityType. Transaction types like Calling, Remittance, Card Deposit etc come under this category. For these transaction we only get galileo events on /Transaction endpoint.

  • ExternalTransactionId will be => ActivityType=SOURCE ID, e.g. a majority preauh has external transaction id like TH=123112 and it’s completion debit transactions will have it like AD=242342
  • AuthorizationCode will be => Same as ExternalTransactionId if there was no original transaction. If there was an orirginal transaction then this will be same as AuthorizationCode of that original transaction. For above example, for PreAuth AuthorizationCode = TH=123112 as it does not have any original transaction. While for completion value will be TH=123112, same as preauth one.

For these cases you will see that Galileo NETWORK field is empty. So you can just check if network is empty then just pick ActivityType=SOURCE ID and look for a transaction event with ExternalTransactionId of equal value.

2. Network Authorized Transactions

For these transactions TransactionCompletedEvent fields are mapped to NetworkCode and LOADS AUTH ID. NetworkCode field will always be present. Transaction types like PosPurchase, AtmWithdrawal etc come under this category. For these transaction we get galileo events on /Authorization and/or /Settlement endpoints.

  • ExternalTransactionId will be => a non-empty random Guid
  • AuthorizationCode will be NETWORK CODE=LOADS AUTH ID. For example both preauth and completion for PosPurchase transaction will have same AuthorizationCode in the form of V=2342342

For these cases you will see that Galileo NETWORK field is non-empty and TransactionCompletedEvent has a guid in ExternalTransactionId. So you can check for these two conditions and if true then just pick NETWORK CODE=LOADS AUTH ID and look for a transaction event with AuthorizationCode of equal value.

3. ACH Transactions

These transactions can follow any of the above mentioned flows. Some will only behave like Majority transaction flow and will only get galileo notifications on /Transaction endpoint, while some might also get /Settlement events. Note that we shouldn’t get /Authorization events for these, if we do then if might be a bug from Galileo and might result in wrong transaction type or even duplicate transactions. What’s certain is that there will definitely be a /Transaction event, Transaction types like PosMoneyLoad, DirectDeposit, BankDebit etc or merchant credit & reversals come under this category.

  • ExternalTransactionId For these transaction ExternalTransactionId will always follow the same flow as Majority transactions do. and will be ActivityType=SOURCE ID for example if galileo TransactionType was PMVL and SOURCE ID was 23423, then this will be PM=23423
  • AuthorizationCode can have two different formats, either it will be of same format as in Majority Transactions flow or it can be same as Network Authorized Transactions flow. Since we dono’t get Network value in Transaction events, we have to rely on otype/TransCode to decided the flow.
    - If otype is a known network specific type, like VL, VH and VT are always only for Visa transactions, then we will for Network Authorized Transactions flow. So format for AuthorizationCode will be NETWORK CODE=LOADS AUTH ID
    - If we cannot find Network from otype then we will follow Majority Transactions flow. And will be same as ExternalTransactionId if there was no original transaction. If there was an orirginal transaction then this will be same as AuthorizationCode of that original transaction. So format will be ActivityType=SOURCE ID.

Final reconciliation/mapping guidelines

Easiest way to check map Galileo posted transactions with Majority completed transactions is to first look at ExternalTransactionId in Majority transaction. If it is not a guid, then it’s format will be ActivityType=SOURCE ID. We can just look for Galileo transactions with these values. On the other hand, if ExternalTransactionId is a guid, then we cannot rely on it and have to fallback to AuthorizationCode.

Just like ExternalTransactionId, there are two possible formats for AuthorizationCode, it will be either ActivityType=SOURCE ID or NETWORK CODE=LOADS AUTH ID. For cases where ExternalTransactionId is a guid, AuthorizationCode is most definitely be in form of NETWORK CODE=LOADS AUTH ID. While for non-guid ExternalTransactionId , it’s could be in any of the two format.

To be continued...