スタバカードや交通系ICカードで二重計上していませんか。正しい処理と自動化の話

お客様の経理データでスタバカードやSuica、PASMOは、チャージ時に経費にして、使った時にも経費にしてしまうケースがよくあります。
いわゆる二重計上です。
税務調査でも見られやすい項目です。

気づきにくいのは、どちらもお金が減るからです。
チャージした時も支出に見えるし、使った時も支出に見える。
その感覚のままで処理すると、両方を経費にしてしまいやすいです。

目次

チャージと使用、両方で経費にしていませんか

チャージ時点では、まだ何も買っていません。
会社のお金を別の財布に移しただけです。

正しい処理はこうなります。

  • チャージ時:預け金など(資産)
  • 使用時:会議費交通費など(経費)

チャージ時を「預け金」にしておけば、経費になるのは使った時だけです。
これなら二重計上は起きません。

ここは、残高がズレやすいポイントです。
チャージも支出、利用も支出、で経理をすると残高がズレてしまいます。

交通系ICカードはfreeeでラクに

freeeは、交通系ICカードの利用内容を連携できます。
チャージ時は「預け金」、利用時は「交通費」として処理する形にしておけば、手入力をかなり減らせます。

交通費は細かい回数が増えやすいので、ここを自動化できるだけでもだいぶ違います。
毎月の処理が少し軽くなるだけでも、地味に効きます。

スタバのモバイルオーダーはGASで自動化

スタバのモバイルオーダーは、freeeと直接連携できません。
注文後にメールが届くだけです。

そこで私は、GASを使ってメールからfreeeのCSV取込用データを自動生成するようにしています。

  • GmailでスタバのメールをGASで検索
  • 本文から合計金額と消費税額を抽出
  • スプレッドシートに出力

このあと私は、抽出したデータをfreeeのCSV取込フォーマットに整えて使っています。
ただ、この部分は人によって変わるので、ここでは日付・金額・消費税を抜き出すところだけ載せます。

function extractMobileOrderData() {
  const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  const headers = ['日付', '金額', '消費税'];

  sheet.getRange(1, 1, 1, headers.length).setValues([headers]);

  const lastRow = sheet.getLastRow();
  if (lastRow > 1) {
    sheet.getRange(2, 1, lastRow - 1, headers.length).clearContent();
  }

  // スタバのモバイルオーダー確認メールを検索
  const threads = GmailApp.search('subject:"Mobile Order & Pay"', 0, 100);
  const rows = [];

  threads.forEach(thread => {
    thread.getMessages().forEach(message => {
      const date = Utilities.formatDate(
        message.getDate(),
        Session.getScriptTimeZone(),
        'yyyy/MM/dd'
      );

      const body = message.getPlainBody();
      const totalMatch = body.match(/総合計\s*¥\s*([\d,]+)/);
      const taxMatch = body.match(/消費税\s*¥\s*([\d,]+)/);

      const totalAmount = totalMatch ? Number(totalMatch[1].replace(/,/g, '')) : '';
      const taxAmount = taxMatch ? Number(taxMatch[1].replace(/,/g, '')) : '';

      if (totalAmount !== '') {
        rows.push([date, totalAmount, taxAmount]);
      }
    });
  });

  if (rows.length > 0) {
    sheet.getRange(2, 1, rows.length, headers.length).setValues(rows);
  }

  Logger.log(`${rows.length}件 書き出し完了`);
}

【余白ログ】
昨日は、GASを色々触ってその後ベター・コール・ソウルを観賞

目次