Logo
Afbeelding

Controle bankrekeningnummers

Geschreven door The Audit Analytics | 4 minuten

In deze auditcase staan we stil bij een bedrijf waar er een interne controle is ingesteld, maar hier in de audit niet helemaal op gesteund kan worden door een belemmering in de GITC. Hoe zou data analyse daar aan bij kunnen dragen?

Wijzigen bankrekeningnummers

Situatie

Bij een klant mogen mutaties aan bankrekeningnummers van leveranciers alleen worden doorgevoerd als een collega (anders dan de wijzigende medewerker) de mutatie heeft goedgekeurd. Als auditor kan dit natuurlijk wel wat zekerheid bieden en je zou dan ook graag op deze interne controle willen steunen.

Tijdens een IT-audit is echter ontdekt dat medewerkers met een administrator-rol deze autorisatiestap kunnen omzeilen. De auditor wil daarom controleren of in de praktijk alle IBAN-wijzigingen alsnog correct geautoriseerd zijn.

Impact GITC

Hoewel het op papier lijkt alsof deze controle goed werkt, blijkt in de praktijk dat wanneer iemand hoge rechten binnen de applicatie heeft, hij deze controle kan omzeilen. Vaak worden deze wijzigingen en goedkeuringen wel gelogd en zou je dus achteraf moeten kunnen inzien wie welke acties heeft uitgevoerd.

Daarbij zijn nog wel twee belangrijke voorwaarden: Je moet zeker weten dat iedere gebruiker alleen met zijn eigen account inlogt (authenticatie) en de logging niet uitgezet kan worden (of verwijderd).

Waarom een data analyse?

Het is een sterke interne controle en met een korte analyse heb je het hiaat van de GITC ondervangen. De analyse is relatief makkelijk te doen en voorkomt het trekken van nog meer steekproeven.

Doelstelling

  1. Alle leveranciers vinden waarvan het IBAN in de gekozen periode is gewijzigd.
  2. Controleren of achter iedere wijziging een latere goedkeuring door een andere gebruiker staat.

Benodigde data en voorbereidingen

Voor deze analyse gebruiken we:

  • Logging crediteuren: een export waarin iedere wijziging aan leveranciersstamgegevens wordt vastgelegd. Je kunt hier de dummy-data vinden.
  • Python met de package pandas voor datamanipulatie en datetime voor datumvergelijkingen.

Analyse

Onderstaand Python-script toont hoe je stap voor stap een controle op IBAN-wijzigingen uitvoert. Kopieer het volledige script en gebruik het als sjabloon voor je eigen analyse.

import pandas as pd
from datetime import datetime

# 1. Lees de logging in (let op: separator is een puntkomma)
df = pd.read_csv("dummy_logs_creditors.csv", sep=";", parse_dates=["Date"], dayfirst=True)

# Toon een voorvertoning
print(df.head())

# 2a. Vind alle regels waarin een IBAN-wijziging is aangemaakt
mask_change = df["Change Type"] == "Bank Account"
df_changes = df[mask_change].copy()

# 2b. Vind alle regels waarin een wijziging is goedgekeurd
mask_approve = df["Change Type"] == "Bank Account"  #zelfde Change Type, maar Action bevat 'Approved'
df_approvals = df[df["Action"].str.startswith("Approved")].copy()

# Functie om per wijziging te controleren of er een latere approval is
def check_approval(row):
    vendor = row["VendorID"]
    change_time = row["Date"]
    # filter approvals van dezelfde leverancier na de wijzigingsdatum
    later = df_approvals[
        (df_approvals["VendorID"] == vendor) &
        (df_approvals["Date"] > change_time)
    ]
    if not later.empty and later.iloc[0]["User"] != row["User"]:
        return pd.Series({
            "Approved": True,
            "Approver": later.iloc[0]["User"],
            "ApprovalDate": later.iloc[0]["Date"]
        })
    else:
        return pd.Series({
            "Approved": False,
            "Approver": None,
            "ApprovalDate": None
        })

# Pas de functie toe op alle change-events
df_results = df_changes.join(df_changes.apply(check_approval, axis=1))

# Filter ongeautoriseerde gevallen
df_unauthorized = df_results[df_results["Approved"] == False]

# Rapportage
print("Ongeautoriseerde IBAN-wijzigingen:")
print(df_unauthorized[[
    "Date", "VendorID", "Vendor", "Old Value", "New Value"
]])

Deze analyse kijkt naar wijzigingen die niet zijn goedgekeurd en wijzigingen die door dezelfde medewerker zijn goedgekeurd na de wijziging. Het is belangrijk om deze bevindingen goed te bestuderen. Het kan namelijk zo zijn dat deze wijzingen nog helemaal niet verwerkt zijn. Ook kun je hierna de impact bepalen door te achterhalen of er ook daadwerkelijk geld overgemaakt is naar een rekening uit de bevindingen.

Controle bankrekeningnummers - The Audit Analytics