Delivering Project & Product Management as a Service

REA Accounting model

Financial data analysis as part of crime for profit and fraud investigation

As part of the implementation of the FATF guidelines for a local AML (anti money laundry) law, we were involved in the development of countrywide financial data analysis system. It was a learning experience that we would like to share.
Most investigations that deal with crime for profit require that some analysis will be made regarding the economic data that was gathered in the case. Such data can include credit card transactions when dealing with CC fraud, Bank transactions when dealing with money laundering and even transactions in property such as vehicles and real-estate when trying to account for hidden assets as part of a layering scheme.
We tested forensic accounting software packages that were available at the time and unfortunately they were not suitable for the job for several reasons:

  1. We had to deploy the software organizational wide and those packages were standalone and not scalable.
  2. Forensic accounting software is designed for accountants, and thus was too complicated for most investigative needs, not to mention that most users didn’t have the forensic accounting background to use it properly.


So we had to manage a custom development effort for the software. Software development risks are largely increased when you develop software for a new business process and data in the organisation, as was the case. So part of the risk mitigation was finding the right data model and integrate it into the proper existing business processes.


We knew that financial and economic data is temporal and transactions have a very dominant while we still wanted to be able to review and balance different types of assets for changing groups of suspects. We tested several DW procedures but since we didn’t have a known and fixed number of dimensions, we couldn’t use them.

  1. We based our data model loosely on the REA accounting model (McCarthy 1982) so that all financial and assets data will be mapped into a graph based ontology where everything is transformed into the following entities:
  2. Resource – Have value, or can own.
  3. Edge – Ownership and other types of relational links.
  4. Economic Event – Temporal change of value or ownership link.

Using that type of entities enabled us to perform both temporal value flow and calculate balance sheets for group of entities. For example the user were able to view a monetary transaction that evolved into a purchase of an asset that was securing a loan for other entities. Calculating the assets balance for all entities including those who got the loan the users could get support for the assumption that the group of entities were operating a crime organisation.
Financial data that is lawfully gathered during the investigative process is transformed via ETL into the REA like schema and we exposed that data for further analysis and exploration by the investigators.


Because the model was very abstract we had to realize the user interface and UX with proper names that are more common knowledge. We also implemented various algorithms like Benford analysis and more, in a very kiosk like interface, so as to reduce the processing effort from the user.
The system gathered data from various sources that were external to the organization so data normalization and cleansing were imperative for the success of the system otherwise we had trouble extracting and matching entities from different origins.


Seeing the full assets picture of the suspects in the investigation was extremely time consuming before implementing the system, because all data had to be gathered by paper personally by the investigators. After the implementation it was a matter of pressing a button on the user interface. We calculated that besides increasing the efficiency of the investigation due to the proper data handling and analysis procedures, we saved several million dollars yearly, due to reduction of men-hours that were spent on getting the raw materials and analyzing them manually.