前回の 2023/11/04 電子レシート「スマートレシート」試用レポート で予告しましたとおり、MFFマクロのVersion2.45を公開します。スマートレシートから出力したTSVファイルのデータをExcel上に読み込み、MFF形式に変換する機能を新設しました。これに伴い動作概念図も更新しています↓。
- MFFマクロについては 家計簿アプリ間データ変換ツール「MFFマクロ」公開中 を参照
- ソースリストと新規導入方法は MFFマクロの導入法と使用法 を参照
- バージョンアップの方法は MFFマクロのバージョンアップの手順 を参照

1.TSVファイルを読み込む
MFFマクロは、従来から、空のワークシート上で動作させると、ダイアログで指定したデータファイルをマクロで読み込むように作ってあります。今回のV2.45では、ファイル形式の選択肢に .csv .txt に加えて .tsvファイル を新設し、スマートレシートのTSVファイルを読み込めるようになりました↓。
ファイル名は YYYYMMDDhhmmss_XXXXXXXXXXXXXXXX.tsv という形で、日付・時刻と、ユーザーIDとなる16桁の数字(スマートレシートアプリの起動画面にバーコードと共に表示される)の組み合わせです。エンコードはShift-JIS、改行コードはCR+LF、データセパレータはTABで拡張子も.tsv。データ入出力がTSVファイルとなっている事例としてはあっと家計簿がありますが、こちらは拡張子が.txtとなっていて混乱することこの上なし! ファイル形式と拡張子が合っているのは開発側としては有難いことです。

2.TSVファイルの中身を分析する
(1)レシートスキャンでレシート読み取り・手入力したデータ
読み込んだTSVファイルの中身をワークシート上に展開すると↓のようになります。

このデータにはいくつか問題点があります。
- 第7・15行のカテゴリー欄に「レシートスキャン未分類」という文字列が入っているのは、前回の記事で触れましたように、レシートスキャン側で追加設定した「消費税」が入っているべきなのですが、スマートレシート側では無視されます。
- 出金・入金欄も、おそらくは、開発側が本来想定していたのとは違う金額、すなわちそのレシートの支払総額が入っており、何の役にも立っていません(もしかしてチェックサム?)。
- 各レシートデータの末尾にレシートの支払総額が入金欄に入力されています。これも何の役にも立っていません。
- 数量欄は、レシートスキャン側・店舗側で計上していても、スマートレシート側で1に固定してしまうようです。よって、単価欄は正確には単価ではなく、その商品についての総額を表しています。
- 第20・21行は値引きを計上しています。しかし、カテゴリーは「レシートスキャン未分類」、単価欄は負の値、数量欄は1になります。
(2)加盟店から送信された電子レシートデータ
- 企業名とお店の名前が分割されて入っています。
- 第2・3行目の、店舗側で入れている"s!"のような記号(セール品を表しているらしい)もそのまま入っています。
- 第6行目のカテゴリー欄に(レシートスキャンには設定されていないはずの)「値引等」が入っており、単価欄が負の数字になっているのは同様ですが、数量が0になっています。

このように、スマートレシートのデータは、データソースによって入れ方が異なるところがあります。なんでこんなことになっているのか…これは、おそらくスマートレシートとレシートスキャンのアプリの開発者が違っていて(両方のアプリのクレジットは、東芝テックの関連会社の東芝データ株式会社になっていますけどね)、2つのアプリ間でのデータ構造の打ち合わせが不十分なまま実装してしまったのではないか…と思われます。
3.レシートのデータをMFF形式に変換する
TSVファイルがワークシート上に展開された状態でMFFマクロを動作させると、特殊な操作は発生せず、即座にデータ変換を実行します。

MFF形式へのデータ変換後の状態です↑(見やすくするためにフォントの大きさや各列の幅を調整しています)。口座名欄が空欄になっている(それを警告するため黄色に塗られている)のは、スマートレシートのデータに無いためです。割引については、MFF形式の収入欄に金額を入れるようにしています。
また、ID欄は、日付・取引先・内容から32桁の16進数で生成し、その末尾に、レシート内の通し番号を付け加えています。これで、便利機能の「レシート単位でソート」(詳細は 2022/09/17 Dr.Walletのデータを、順序が変わらないように「らくな家計簿」にインポートする方法を検討する(前篇) の最後の方を参照してください)を使うと、レシート内の商品の並びを変えずにソートできます。
加盟店から送信された電子レシートのデータを変換しても、同様の結果となります↓。

例によって、データ変換動作のチャートを示すと↓の様になります。これまでに述べてきたように、データソースによってデータの入れ方が違っているのに対応するのが少々厄介でした。
【2023/12/03追記】:MFFマクロV2.45では、値引き・割引などで負の支出額が計上されていた場合は正の収入額に変換していましたが、V2.47では、スマートレシートの設計思想を尊重して、負の支出額をそのままにするように動作を変更しました。

4.スマートレシートの総評
前回の記事で示した、スマートレシートのデータの流れの図解を再掲します。ここまで解説すれば、この図解も理解していただきやすいのではないかと思います。

いやはや、システム設計として問題なのは、とにかくスマートフォンに2つのアプリをインストールしなければならない、という煩雑さです。わざわざ別にしなければならないほど大規模なアプリとは思えないんですけどねえ…
また、筆者はコンビニ「ミニストップ」で試したのですが、アプリ「スマートレシート」で表示されるバーコードをレジで読み取っても電子レシートは発行されませんでした。加盟店側の専用アプリとスマートレシートとの連携機能が提供されている場合は、必ず加盟店専用アプリを使用しなければならないようです。これもかなり煩雑!ミニストップのアプリはWAONと紐付けなければならないからです。
もう一つ試したスギ薬局のアプリは、何かの決済サービスとの紐付けは必須ではないのでハードルは低かったのですが…スマートレシートの恩恵を受けるのに必要な手順が多いのはやはり普及の足かせとなるでしょう。
そして、このサービスについては、家計簿アプリとの連携が絶対に必要なのに、それが提供されていません。それをユーザーレベルで実装したのがMFFマクロV2.45なのですが…筆者としては、データをまさにレシートの形で入力する機能を有するZaim(2020/07/05 Zaimの「かんたん入力」は使わないほうがいいですよ
を参照)と連携してくれるとかなり強力なサービスになると思うのです。実現に向かうことを切に望んでいます。
【2023/12/01追記】Zaimとの連携は2023/09/21にプレスリリースされていました(汗)
【2023/12/05追記】この件については 2023/12/05 Zaimにスマートレシートのデータが自動的に入るように連携する機能を試してみました を参照して下さい。