レジ締めに毎日30分かかる問題を、Pythonで消した話

閉店後、レジ締めに毎日30分。

1人サロンにとって、この30分はとても重い。1ヶ月で15時間、1年で180時間。時給換算3,000円なら、54万円分の時間を毎年捨てている計算になる。

ある日、この作業が全部コードで済むことに気づいた。結果、いまはレジ締めにかかる時間が0分になった。

この記事では、その実装を順を追って書く。コードはすべて動いている本番環境のものだ。


手作業でやっていたこと

以前のフローは、こうだった。

  1. レジ(タブレット型POS)の日報を印刷
  2. 現金売上・カード売上・QR決済の内訳を手で電卓
  3. Excelに日次テーブルを転記
  4. 会計ソフトに仕訳を入力
  5. 現金残高を実機と照合

ここまでで、だいたい30分。慣れても早くならない。なぜなら、作業そのものが目視・転記・照合で構成されているからだ。


どこを自動化したか

考えた結果、次の3点に絞って自動化した。

  1. POSのAPIから当日売上を取得
  2. 会計ソフトにAPI経由で仕訳投入
  3. 照合結果をLINE/Slackに通知

つまり、「印刷しない」「転記しない」「照合を人間がやらない」この3つを守れば、0分になる。


実装の骨子

スクリプトはPythonで書いた。cronで毎日23:30に実行している。

import requests
from datetime import date

# 1. POS API から当日売上を取得
def fetch_sales(target_date: date) -> dict:
    res = requests.get(
        "https://api.pos-service.example/daily",
        headers={"Authorization": f"Bearer {API_KEY}"},
        params={"date": target_date.isoformat()},
    )
    res.raise_for_status()
    return res.json()

# 2. 会計ソフトに仕訳投入
def post_journal(entries: list[dict]) -> None:
    for entry in entries:
        requests.post(
            "https://api.accounting.example/journals",
            headers={"Authorization": f"Bearer {ACC_TOKEN}"},
            json=entry,
        )

# 3. 通知
def notify(text: str) -> None:
    requests.post(SLACK_WEBHOOK, json={"text": text})

if __name__ == "__main__":
    today = date.today()
    sales = fetch_sales(today)
    entries = build_entries(sales)
    post_journal(entries)
    notify(f"{today} のレジ締め完了:売上 {sales['total']}円")

実測値

項目BeforeAfter
所要時間30分/日0分/日
年間節約時間約180時間
ヒューマンエラー月2〜3件ゼロ(3ヶ月運用)
現金差異チェック目視自動(差額>500円で通知)

注意点

  1. APIキーはコードに直書きしない .envファイルに分離。Gitにも絶対に含めない。
  2. 失敗時の通知を必ず入れる 静かに失敗する自動化は最悪。try/exceptで掴んでSlackに吐かせる。
  3. 最初の1ヶ月は毎日手動照合 ゼロ分を信じすぎない。差分が出たときの原因特定ができるように、最低30日は目視で並走する。

まとめ

  • レジ締めは、人間がやる必要のない作業
  • 年間180時間を戻すために、Python1本で十分
  • 最初は並走期間を取り、通知と照合を必ず残す

サロン経営の「感覚」を、1つずつ数字とコードに置き換えていく。

次は「売上を会計ソフトに自動転記する仕組み」を書きます。


※ 当サイトの一部リンクには、アフィリエイトリンクが含まれます。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

目次