PythonでSAISONカードの利用明細から弥生会計への入力用CSVファイルを作成する

Pythonを使って、SAISONカードの利用明細から弥生会計への入力用のcsvファイルを作成します。

前提として、弥生会計の「スマート取引取込」は使っていません。

SAISONカード

Pythonのコードは以下の通り。

import pandas as pd
# 消費税の計算で四捨五入を行うため
from decimal import Decimal, ROUND_HALF_UP
def r_round(x):
    return int(Decimal(str(x)).quantize(Decimal('0'),rounding=ROUND_HALF_UP))
import os

# 読み込むCSVファイルが存在するディレクトリに移動
os.chdir(r'C:\Users\XXXXX\Documents\YYYYY')

# csvファイルの読み込み
df = pd.read_csv('SAISON_2411.csv',encoding='cp932',header = 4,engine='python',usecols = [0,1,5], names=['利用日', 'ご利用店名及び商品名', '利用金額'],skipfooter=2)

# 列の追加
# 科目等をいったん仮払金のそれにしておく
df['科目'] = '仮払金'
df['補助'] = ''
df['税区分'] = '対象外'
df['税額'] = 0

# 'ご利用店名及び商品名'の記載内容から、科目、補助科目、税区分を判定する

# 'ご利用店名及び商品名'の記載内容が、特定の文字列と一致するかどうかを判断する場合
df.loc[df['ご利用店名及び商品名'] == 'AAAAA', '科目'] = '車両費'
df.loc[df['ご利用店名及び商品名'] == 'AAAAA', '補助'] = ''
df.loc[df['ご利用店名及び商品名'] == 'AAAAA', '税区分'] = '課対仕入内10%適格'

df.loc[df['ご利用店名及び商品名'] == 'BBBBB', '科目'] = '消耗品費'
df.loc[df['ご利用店名及び商品名'] == 'BBBBB', '補助'] = ''
# 免税事業者からの仕入れ及び少額特例への対応
df.loc[(df['ご利用店名及び商品名'] == 'BBBBB')&(df['利用金額'] < 10000), '税区分'] = '課対仕入内10%適格' 
df.loc[(df['ご利用店名及び商品名'] == 'BBBBB')&(df['利用金額'] >= 10000), '税区分'] = '課対仕入内10%区分80%'

# 'ご利用店名及び商品名'の記載内容に、特定の文字列が含まれているかどうかを判断する場合
df.loc[df['ご利用店名及び商品名'].str.contains('CCCCC'), '科目'] = '消耗品費'
df.loc[df['ご利用店名及び商品名'].str.contains('CCCCC'), '補助'] = ''
df.loc[df['ご利用店名及び商品名'].str.contains('CCCCC'), '税区分'] = '課対仕入内10%適格'

# '税区分'に'課対仕入内10%'が含まれる場合、消費税額(10%)を計算する
df.loc[df['税区分'].str.contains('課対仕入内10%'), '税額'] = df['利用金額'] - (df['利用金額']/1.1).map(r_round)

# '税区分'に'課対仕入内軽減8%'が含まれる場合、消費税額(8%)を計算する
df.loc[df['税区分'].str.contains('課対仕入内軽減8%'), '税額'] = df['利用金額'] - (df['利用金額']/1.08).map(r_round)

# データ作成 弥生会計の入力用データと同じ列数のdataframeを作成して、内容をコピーする
# indexを指定しないと、['A']にデータが入らない

df_credit = pd.DataFrame(index = df.index,columns=['A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y'])

# #要素の転記

df_credit['A'] = 2000
df_credit['B'] = ''
df_credit['C'] = ''
df_credit['D'] = df['利用日']
df_credit['E'] = df['科目']
df_credit['F'] = df['補助']
df_credit['G'] = ''
df_credit['H'] = df['税区分']

df_credit['I'] = df['利用金額']
df_credit['J'] = df['税額']

# 自分が使用する科目名、補助科目名を指定する
df_credit['K'] = '未払金'
df_credit['L'] = 'セゾンカード'
df_credit['M'] = ''
df_credit['N'] = '対象外'
df_credit['O'] = df['利用金額']
df_credit['P'] =  0

df_credit['Q'] = df['ご利用店名及び商品名']

df_credit['R'] = ''
df_credit['S'] = ''
df_credit['T'] = 0
df_credit['U'] = ''
df_credit['V'] = ''
df_credit['W'] = 0
df_credit['X'] = 0
df_credit['Y'] = 'no'

#'支払金額'、'税額'に小数点が付いているので、int型に変換する
df_int = df_credit.astype({'I': int,'J': int,'O': int})

#csvファイルに書き込み
df_int.to_csv('py_saisoncard.csv',encoding = 'cp932',header = False,index = False)

CSVファイルの読み込み

CSVファイルの読み込みの際の注意点は、以下の3つ。

  • encodingは’cp932’を指定する
  • 明細のタイトル行の前に不要な行が4行あるため、header = 4を指定する
  • 明細行の後に「小計」「合計」の行があるため、skipfooter=2を指定する
  • usecols = [0,1,5], names=[‘利用日’, ‘ご利用店名及び商品名’, ‘利用金額’]と指定して必要な列の列番号と列名を指定する

消費税の計算

弥生会計の仕入れの消費税区分は以下の4つがありますが、

  • 課対仕入内10%適格
  • 課対仕入内10%区分80%
  • 課対仕入内軽減8%適格
  • 課対仕入内軽減8%区分80%

「課対仕入内10%区分80%」であってもデータ上は10%の税額が保存されており、「課対仕入内軽減8%区分80%」であってもデータ上は8%の税額が保存されています。

試算表等の表示上で80%控除を実現していると思われますので、上記のような計算方法としています。

仮払金のデータについては取り込み後に手動で修正

‘ご利用店名及び商品名’の記載内容による判定について、条件に一致しないデータについては入力用のデータは仮払金のままになります。

そのようなデータについては、弥生会計への取り込み後に手動で勘定科目等を修正することになります。

タイトルとURLをコピーしました