Pythonでu-regiのデータからJDLIBEX出納帳の入力用データを作成する

u-regi(USENレジ)のレジクローズ情報のデータを元にして、

  • 借方:仮払金、貸方:売上高で税率10%と8%の売り上げを計上する
  • 貸方:仮払金を借方:現金、借方:売掛金(クレジット支払)、借方:売掛金(paypay)等に振替する

JDLIBEX出納帳のCSV入力用ファイルを作成するPythonのプログラムです。

飲食店向けです。

import pandas as pd
import os
from decimal import Decimal, ROUND_HALF_UP
import shutil

folder = r'C:\xxxxx\xxxxx\xxxxx'
csv = folder + r'\Regi_Close_xxxxxx_xxx_2024xx.csv'

shutil.copyfile('org.csv','py_uriage.csv')
shutil.copyfile('org.csv','py_furikae.csv')

def r_round(x):
    return int(Decimal(str(x)).quantize(Decimal('0'),rounding=ROUND_HALF_UP))

os.chdir(folder)

df_temp1 = pd.read_csv(csv,encoding='utf-16',skiprows=lambda x: x not in [0],delimiter='\t',engine='python')

df_temp2 = pd.read_csv(csv,encoding='utf-16',skiprows = [0,1],delimiter='\t',header = None,engine='python')

df_temp2[0] = df_temp2[76]

df_temp2.drop(columns=df_temp2.columns[76],inplace = True)

df_temp2.columns = df_temp1.columns.tolist()

df_temp2.replace({',': '', r'¥':''},inplace = True,regex=True)

df = df_temp2.astype({'売上(10%)': 'float', '売上(8%)': 'float', '現金': 'float','クレジット': 'float', '電子マネー': 'float', '商品券(釣無し)': 'float'})

def proc_1(val_1):

    df_uriage = pd.DataFrame(index = df.index,columns=['//識別フラグ','伝番','日付','借方科目','借方科目名称','借方科目正式名称','借方補助','借方補助名称','借方課区','借方税区','借方税入力方法','借方金額','借方消費税','貸方科目','貸方科目名称','貸方科目正式名称','貸方補助','貸方補助名称','貸方課区','貸方税区','貸方税入力方法','貸方金額','貸方消費税','摘要','借方取引科目','貸方取引科目','借方部門コード','借方部門名称','貸方部門コード','貸方部門名称'])

    df_uriage['//識別フラグ'] = 1000
    df_uriage['伝番'] = '0'
    df_uriage['日付'] = df['営業日']

    df_uriage['借方科目'] = '183'
    df_uriage['借方科目名称'] = ''
    df_uriage['借方科目正式名称'] = ''
    df_uriage['借方補助'] = '1'
    df_uriage['借方補助名称'] = ''
    df_uriage['借方課区'] = ''
    df_uriage['借方税区'] = ''
    df_uriage['借方税入力方法'] = ''
    if val_1 == '10%':
        df_uriage['借方金額'] = df['売上(10%)']
        df_uriage['貸方税区'] = '10%'
        df_uriage['貸方金額'] = df['売上(10%)']
        df_uriage['貸方消費税'] = df['売上(10%)'] - (df['売上(10%)']/1.1).map(r_round)
    elif val_1 == '8%':
        df_uriage['借方金額'] = df['売上(8%)']
        df_uriage['貸方税区'] = '軽減8%'
        df_uriage['貸方金額'] = df['売上(8%)']
        df_uriage['貸方消費税'] = df['売上(8%)'] - (df['売上(8%)']/1.08).map(r_round)
    df_uriage['借方消費税'] = '0'

    df_uriage['貸方科目'] = '612'
    df_uriage['貸方科目名称'] = ''
    df_uriage['貸方科目正式名称'] = ''
    df_uriage['貸方補助'] = ''
    df_uriage['貸方補助名称'] = ''
    df_uriage['貸方課区'] = '売 上'
    df_uriage['貸方税入力方法'] = '内税'

    df_uriage['摘要'] = '売上'
    df_uriage['借方取引科目'] = ''
    df_uriage['貸方取引科目'] = ''
    df_uriage['借方部門コード'] = '0'
    df_uriage['借方部門名称'] = ''
    df_uriage['貸方部門コード'] = '0'
    df_uriage['貸方部門名称'] = ''

    df_uriage_int = df_uriage.astype({'借方金額': int,'貸方金額': int,'貸方消費税': int})

    df_uriage_int[df_uriage_int['借方金額'] != 0].to_csv('py_uriage.csv',mode = 'a',encoding = 'cp932',header = False,index = False)

def proc_2(val_2):

    df_furikae = pd.DataFrame(index = df.index,columns=['//識別フラグ','伝番','日付','借方科目','借方科目名称','借方科目正式名称','借方補助','借方補助名称','借方課区','借方税区','借方税入力方法','借方金額','借方消費税','貸方科目','貸方科目名称','貸方科目正式名称','貸方補助','貸方補助名称','貸方課区','貸方税区','貸方税入力方法','貸方金額','貸方消費税','摘要','借方取引科目','貸方取引科目','借方部門コード','借方部門名称','貸方部門コード','貸方部門名称'])

    df_furikae['//識別フラグ'] = 1000
    df_furikae['伝番'] = '0'
    df_furikae['日付'] = df['営業日']

    if val_2 == '現金':
        df_furikae['借方科目'] = '111'
        df_furikae['借方補助'] = ''
        df_furikae['借方金額'] = df['現金']
        df_furikae['貸方金額'] = df['現金']
        df_furikae['摘要'] = '現金'
    elif val_2 == 'クレジット':
        df_furikae['借方科目'] = '152'
        df_furikae['借方補助'] = '1'
        df_furikae['借方金額'] = df['クレジット']
        df_furikae['貸方金額'] = df['クレジット']
        df_furikae['摘要'] = 'クレジット'
    elif val_2 == 'paypay':
        df_furikae['借方科目'] = '152'
        df_furikae['借方補助'] = '2'
        df_furikae['借方金額'] = df['電子マネー']
        df_furikae['貸方金額'] = df['電子マネー']
        df_furikae['摘要'] = '電子マネー'
    elif val_2 == '商品券':
        df_furikae['借方科目'] = '152'
        df_furikae['借方補助'] = '3'
        df_furikae['借方金額'] = df['商品券(釣無し)']
        df_furikae['貸方金額'] = df['商品券(釣無し)']
        df_furikae['摘要'] = '北名古屋市商品券'
    df_furikae['借方科目名称'] = ''
    df_furikae['借方科目正式名称'] = ''
    df_furikae['借方補助名称'] = ''
    df_furikae['借方課区'] = ''
    df_furikae['借方税区'] = ''
    df_furikae['借方税入力方法'] = ''
    df_furikae['借方消費税'] = '0'

    df_furikae['貸方科目'] = '183'
    df_furikae['貸方科目名称'] = ''
    df_furikae['貸方科目正式名称'] = ''
    df_furikae['貸方補助'] = '1'
    df_furikae['貸方補助名称'] = ''
    df_furikae['貸方課区'] = ''
    df_furikae['貸方税区'] = ''
    df_furikae['貸方税入力方法'] = ''
    df_furikae['貸方消費税'] = '0'

    df_furikae['借方取引科目'] = ''
    df_furikae['貸方取引科目'] = ''
    df_furikae['借方部門コード'] = '0'
    df_furikae['借方部門名称'] = ''
    df_furikae['貸方部門コード'] = '0'
    df_furikae['貸方部門名称'] = ''

    df_furikae_int = df_furikae.astype({'借方金額': int,'貸方金額': int})

    df_furikae_int[df_furikae_int['借方金額'] != 0].to_csv('py_furikae.csv',mode = 'a',encoding = 'cp932',header = False,index = False)
 
proc_1('10%')
proc_1('8%')

proc_2('現金')
proc_2('クレジット')
proc_2('paypay')
proc_2('商品券')

事前準備として、JDLIBEX出納帳の入力用CSVファイルの1行目から4行目だけを「org.csv」という名前で保存しておきます。このファイルをコピーして、そこにデータフレームのデータを追加で書き込みします。

売上計上のデータと振替のデータは同一のファイルでも良いと思いますが一応分けてあります。

レジクローズ情報のデータは、1行目の列数と2行目以降の列数が異なっているため、1行目だけ読み込んだデータフレームと3行目以降を読み込んだデータフレームとを、後者の最終列を削除して結合しています。(2行目は月間のトータル行であるため読み込まない)

その削除される最終列の日付データがJDLIBEX出納帳の日付データと形式が同じであるため、最終列の内容を1列目(営業日の列)にコピーしています。

レジクローズ情報のデータは、コンマではなくタブで区切られており、金額の項目には

  • 全角の円マーク(￵¥)が付いている
  • 千の位、百万の位にコンマが付いている

ということがありますので、これらを削除(空白に変換)しています。

 

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