Skip to main content

The Same-Same-Different Test (SSD)

Background

The purpose of the Same-Same-Same test (SSS) and the Same-Same-Different test (SSD) IDEAScripts are to identify abnormal duplications as potential indicators of errors or fraud.

This script was originally writting using the Duplicate - Exclude function in IDEA but it turns out that there is a bug in version 7 and 8 of IDEA in which this function does not capture duplicate entries, it would only capture the first entry.  The script was rewritten to capture dulicates that fit the Same-Same-Different test.

September 2015 - Rewrote the interface.

Documentation

IDEAScript

 The Same-Same-Same Test (SSS)

 and

 The Same-Same-Different Test (SSD)

 The purpose of the Same-Same-Same test (SSS) and the Same-Same-Different test (SSD) IDEAScripts are to identify abnormal duplications as potential indicators of errors or fraud.

 These tests are based on chapter 12 of Mark J. Nigrini’s book, entitled, “Forensic Analytics: Methods and Techniques for Forensic Accounting Investigations”. [1]

 The Same-Same-Same Test (SSS)

 This test identifies records which contain fields of information that are exact duplicates of other records.  The user may select up to 8 fields to match.

 

Application of this test will assist in detecting duplicate expenses claimed, occurrences of the same payment to vendors made in error, multiple warranty claims or duplicated service fees paid by private or government health plans.

The Same-Same-Different Test (SSD)

This test is used to identify records with near duplicates for fields selected by the users. The user may select up to 8 fields to match and one field that is excluded from the matching.

Note that for IDEA Versions 8.5 and prior, when applying Duplicate Key Exclusion manually, incorrect output results where there are duplicate field contents for the selected exclusion field. This SSD IDEAScript produces the correct output.

In chapter 12 of Dr. Mark Nigirini’s Forensic Analytics book, he states, “The same-same-different test is a powerful test for errors and fraud.  This test should be considered for every forensic analytics project.”  His experience has shown that, “This test always detects errors in accounts payable data” and “The longer the time period, the higher the chances of SSD detecting errors”.

One such example which demonstrates the value of this test is in the detection of instances where a payment is made to a wrong vendor initially and then subsequently the correct vendor is properly paid (same invoice number, same amount, and different vendors).

If a business system does not process orders in real time, the above example may indicate customers attempting to split their orders to avoid exceeding their credit limit (same invoice date, same customer number, same product code, and different sales representatives).

[1] Nigrini, Mark J., Forensic Analytics: Methods and Techniques for Forensic Accounting Investigations, New Jersey: John Wiley & Sons, Inc., 2011: Print

oliver_fiedler Fri, 05/03/2013 - 15:02

Hi, there is an error (macro stops with an error message) if the file created by step 2 is an empty file - which happens when there were no duplicates found during step 2. This situation should be handled e.g. with a message that says "No duplicates found" or by creating an empty final file.
RegardsOliver

Brian Element Sat, 05/04/2013 - 07:12

Hi Oliver, thanks for pionting that out.  I have updated the code to look for that problem and it will now give a message and exit the script instead of an error.

Brian

markviii8 Mon, 08/31/2015 - 12:56

Hi, Brian.
I am trying to accomplish two things.
First, my need is that the droplist boxes would default to the field names of the table i.e., field 1 in table = DropListBox1; field 2 in table = DropListBox2 ...
Second, when a field has already been chosen for a particular DropListBox, there is no way of changing that back to a blank.
Thank you, in advance.
Regards,
Mark

Brian Element Tue, 09/01/2015 - 19:07

In reply to by markviii8

Hi Mark, sorry I didn't get back to you sooner, I have been on conference so it has been busy.  I should have some time tomorrow to do an example for you.

Brian

Brian Element Wed, 09/02/2015 - 14:46

In reply to by markviii8

Hi Mark,

Here is the script for you.  I added the first entry as a " " so it shows up as a blank and not a fieldname.  I think this is what you are looking for.

Thanks

Brian

Brian Element Tue, 09/15/2015 - 09:12

In reply to by klement

Hello Klem,

I am not sure what you mean by preventing opening multiple instances.  Is this in a script in which you have a dialog and it opens another dialog or are you thinking of something else?

Thanks

Brian

klement Tue, 09/15/2015 - 12:02

Hello Brian
Yes. When you run the script and click say help and opens the help dialog, if you click the help button again it opens another instance of help dialog.  My question is how to prevent the user clicking on the help button or any other button on the main menu when a dialog is opened.

Brian Element Tue, 09/15/2015 - 12:14

In reply to by klement

Hi Klem,

It has been awhile since I looked at this script.  I see it needs updating.  How I write my code for the dialogs is quite a bit different then how I do it now and this script is do for an upgrade, also I had never realized that you can have muliple other dialogs open, I guess I never tried to hit the button multiple times.  I will have to adjust the script to fix this problem.  Stay tuned for the update.  Thanks for pointing out this problem.

Brian

Brian Element Wed, 09/16/2015 - 19:01

In reply to by klement

Hi Klem,

There is now an updated on the site.  Hopefully that will take care of your problem.

Thanks

Brian

klement Thu, 09/17/2015 - 19:54

In reply to by Brian Element

Hi Brian
Thanks.
Is it possible to prevent clicking on any other buttons until help dialog is closed?
Klem

 

klement Fri, 09/18/2015 - 06:28

Hi Brian
 
You are a star.
 
Any code to Disable the 'x' close button will be appreciated.
 
Regards
 
Klem
 

 

Brian Element Fri, 09/18/2015 - 08:24

In reply to by klement

How import is it?  One of the problems is the "x" and the cancel button return the same code so I can't tell when a user has selected the "x" versus the cancel.  The only way I can think to get around this is to replace the cancel button and all the related code with a regular pushbutton that I make to look like a cancel button, that way I can tell the difference and have code to reopen the dialog because I think I can only test it once the dialog is closed.  I also looked around for any code that I could use to actually disable the "x" but couldn't find anything.

SolveItWithAQuery Wed, 01/09/2019 - 10:32

Hi Brian,
This script sounds awesome (recently ran into the one-match limitation of duplicate exclusion matching), but the updated version of the .iss file does not appear to be linked (only the documentation). I can find the related SSST entry and its script.Thanks,
Matthew