Amazonの購入履歴を確定申告に使ったログ(2016年)

来年度の確定申告をもっと楽にするために、2016年3月に経験したことと、どういう設計だったらハッピーか考えたことをメモしておく。余裕があれば実装したいけど、たぶん余裕ないだろうなぁ。

freee

まずfreeeにAmazonからの読み込み機能があるから、これを使って確定申告も全部freeeでやったら楽ちん、と思った。Amazon - 購入履歴を取り込む – ヘルプセンター

アカウントを作って試してみたのだけど、運悪く「一時的なエラーのためAmazonの同期に失敗しました」になっちゃった。1月ぐらいに余裕をもって確定申告の準備してたら、しばらく待って試すというのも手だったのかもしれないけど、今日は締め切り前最後の週末なのでそんな悠長なことを言ってられず断念。

これがすんなり動いたらベストだと思うので来年1月に再度試してみる。やっぱ、価値のあるサービスに対してはきちんと対価を支払って、それを原資としてエンジニアにきちんと給料を支払ってメンテナンスするってのが、サービスの持続性とエンジニアの幸福のために大事だと思うので。

しかし一方で、Amazonにログインしようとしていた過程で「1分以内に画像認証に答えろ」とか「郵便番号は何か答えろ」とか色々大変そうな気配のするやりとりがあったので、Amazonはログインに対して割と制約が厳しいんだろうなぁと思う。freeeさんのアプローチはいばらの道っぽい。

TSV出力ブックマークレット

次はこれを試した: Amazonで一年間に使った金額と、注文履歴のTSVを出力するブックマークレット【2015年版】 - Qiita

こちらは、ユーザが手元でログインしたAmazonの画面に対してJSを突っ込んで動作させるので「Amazonへの認証」といういばらの道を回避できる。一方でDOM構造はやはりいばらの道。

最初このスクリプトChromeの開発者ツールのコンソールで動かして、$("

")が正しいセレクタでないというエラーになってしまったが、ブックマークレットとして動かせばちゃんと動いた。ただし、ポップアップがブロックされてもう一度実行する羽目に。ポップアップじゃなくてdocument.writeで書き換えるタイプにした方が良いのでは?

スクリプトを外部においてそれをロードしたいけどHTTPでサーブしてHTTPSAmazonに入れるのができない」という悩みをどこかで見かけたけど、個人だったらDropboxにおいたらHTTPSだから手軽に試せると思う。既にHTTPSでサービスを提供している事業者さんがサーブするのも悪くないかもね。出力後に自社サービスの広告を出すとかやれば「確定申告をしている人」というセグメントに低コストに広告できる。

出力されたTSVをExcelに貼り付けたら、Excelがタブをスペースに変換して悲しいことになった。また、僕がけっこう「書籍をまとめ買いする」という行動パターンのため、金額が出力されていないケースが多い。また、書籍と著者の対応付けがくるっているなど、割と「DOM周りでいろいろやりすぎてその後のAmazon側の変更に追随できてない」という現象が起きている。

このスクリプトによって出力された金額は無視して、自分で購入履歴を見ながら入力することにした。とはいえ、品名は既に入力済みなのでひたすら数字を入れるだけ。「選択してコピペ」とか「かな漢字変換」とかが必要ない分だけだいぶ楽である。

ただし、品物の下に書かれている「その商品の値段」を合算したものが必ずしも注文の総額にならない。送料などのせい。というわけで列は「年月日、総額、個別金額、品名」という感じにした。また手で打ってるので、経費にならないもの(食品とか娯楽とか)は金額を転記しなかった。そんな感じでの入力で、1ポモドーロで入力完了。全購入履歴311件中、入力された総額が106件。というわけで調査と金額入力で1時間程度でAmazonで購入した経費の整理ができた。

実装するなら総額と個別金額をわけて出力する機能はぜひつけたい。それができたら労力はさらに減る。

ただし何点か例外処理があった。まず、一度に7件注文したケースで、4件だけが表示され、残りが別ページにくくりだされていた。この場合TSVには品名が出力されていない。でもこれレアケースだし、僕の場合全部書籍だったのでどうせ全部書籍費として合算されるから「書籍A,B,C,D,その他3冊」という扱いにした。

もう一点の例外処理は、運悪く経費でない食料品と経費である参考図書とが同梱されて送られてきたケース。これは商品ごとの個別金額を手入力して食料品をスキップした。こういう状況で送料も掛かっているケースだと、送料を全額経費に積めなくて按分すんのどうすんのと言うことになりそうだが、どうせ大した金額ではないし頭を使うだけ面倒だということでまったく計上しないことにした。

この2点に関しては機械的にサポートしないで手で例外処理する形でいいんじゃないかなぁ。