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.
ExternalTransactionIdis unique for each transaction andTransactionCompletedEvent.AuthorizationCodeis same for a set of transactions. Like both PreAuth and Preauth settle transactions will usually have sameAuthorizationCode.
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 IDthis field contains authorization id for network based transactions, also known as AuthIdSOURCE IDcontains galileo transaction id, also knowns as pmtId/adjId/holdId/feeId depending onActivityTypeNETWORKorNETWORK CODEcontainsNETWORK CODETrasactionTypeorTRANSACTION CODE/TYPEwhere first two letters are calledActivityTypeand rest are known asTransCodeorotype
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.
ExternalTransactionIdwill 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=242342AuthorizationCodewill be => Same asExternalTransactionIdif there was no original transaction. If there was an orirginal transaction then this will be same asAuthorizationCodeof that original transaction. For above example, for PreAuthAuthorizationCode= 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.
ExternalTransactionIdwill 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 sameAuthorizationCodein 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.
ExternalTransactionIdFor these transactionExternalTransactionIdwill always follow the same flow as Majority transactions do. and will beActivityType=SOURCE IDfor example if galileoTransactionTypewas PMVL andSOURCE IDwas 23423, then this will be PM=23423AuthorizationCodecan 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 onotype/TransCodeto decided the flow.
- Ifotypeis 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 forAuthorizationCodewill beNETWORK CODE=LOADS AUTH ID
- If we cannot find Network fromotypethen we will follow Majority Transactions flow. And will be same asExternalTransactionIdif there was no original transaction. If there was an orirginal transaction then this will be same asAuthorizationCodeof that original transaction. So format will beActivityType=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...