Pythonで仕訳テスト(金額特性検索)

★「999999」などの、不自然な並びの金額を含む仕訳を抽出するプログラムです。

キーワード検索とほぼ同じですが、不正リスクが相対的に高いと考えられるケースとして、「不自然な金額」というものがあります。

これは、一般的に「不正実行者はどの仕訳が不正な仕訳かを確認できるように足跡を残しておくことが多い」とされ、もちろんそれにはいろいろな手法があるのですが、「金額に特性を残すなら」ということで、監基報240「財務諸表監査における不正」にも明記されているものです。

【監基報240 財務諸表監査における不正】
・A41不適切な仕訳入力やその他の修正がもつ特性
(5)同じ数字が並ぶ数値を含んでいる仕訳入力(例えば、0000や9999)

これも、エクセル上で作業しようと思うと、フィルタの機能で「0000を含む→結果をコピペ→1111を含む→結果をコピペ」という作業をチコチコやることになりますが、そうではなく、Pythonでサクッと処理できないか、トライしてみました。

作成に際しては、キーワード検索のプログラム(こちら)を流用したのですが、思いのほか簡単にできました。

「0000」は、csvだと数値で「0」と識別されてしまうので、エクセルを使い、書式を文字列にしたのがちょっとしたポイントかもしれません。

なお、金額は任意に設定できますので、「123456789」でも何でも、リスクに応じたもので検索できます。


# 仕訳テスト用金が鵜特性.xlsx のA列に金額を羅列する。セル書式は文字列にしておくことに注意

# 仕訳テスト用仕訳ファイル.csv に対象仕訳データを格納する

# 「貸方金額に検索をかけたい場合は下記「借方金額」を「貸方金額」にすればよい

import pandas

df1 = pandas.read_excel(‘仕訳テスト用金額リスト.xlsx’, dtype=’object’, na_filter=False)

list = list(df1[‘金額特性’])

df2 = pandas.read_csv(‘仕訳テスト用仕訳ファイル.csv’, dtype=’object’, na_filter=False)

for i in range(len(list)):

    result = df2.query(‘借方金額.str.contains(list[0])’, engine=’python’)

    result.to_excel(‘./検索結果_’ + list[0] + ‘.xlsx’, sheet_name=’keyword_’ + list[0] )

    list.pop(0)


ご参考になれば幸いです。

竹内由多可