完全、備忘録です。もしかしたら、Amazon.com で買い物をして、コンテナで運んで自分で申告をしているというような稀有な方々には、多少役に立つことがあるかもしれませんが、まあ、いないでしょうね。
自分は、基本的に日本で買い物はしません。なんでも高くて、バカバカしいからです。
なので、個人で使うちょっとした物なんかも、大抵 Amazon.com で買って、コンテナで運んでいるんですが、細かなもの 1 点でも、商業貨物と一緒に商用で通関するので、きちんとした申告書類を作らないといけません。
これが面倒臭くて仕方ないのに、なんと今まで、ひたすら人力でゴリゴリやっていたんですよ。
まあ、1 回で考えると大した量じゃないんですが、毎月のことですから、流石にそれじゃあいかんだろうと思って、重い腰を上げたのでした。
Amazon.com のインボイスは上のようなものなんですが(住所とかは削ってます)、ここから CSS Selector を使って、購入情報を抽出しようと延々数時間作業をしてたんですが、疲れたところで、不意にファイルを保存せずに閉じてしまい、もともと不毛な作業がとことん不毛になってしまったわけです。
table の入れ子で、機械可読なように、それぞれに id が振られていたり、意味のあるスタイルシートが設定されていたりしないため、ただ多々不毛だったので、もう一回同じ作業をするのは流石に勘弁して欲しいところ、ちょっと調べたら、CSV でダウンロードできるということが判明しました。
Your Account > Your Orders > Order History Reports
ここで、開始と終了の期間などを指定すると、CSV がダウンロードできます。
そうすると、ASIN もわかるので、ASIN に NACCS コード(税番)を紐づけておけば、申告書類も自動生成ですよ、奥さん。
欲を言えば、重量の計算も必要なので、ASIN から Amazon の shipping weight なり、Carrier Name & Tracking Number から引くなりすればいいんでしょうが、Carrier Name & Tracking Number からは、過去試したんですが、かなり不正確だったりして使い物にならないので、この辺は自前のデータベースを作った方が良さそうです。
それはそうと、最終的には、invoice の提出は必要なんですが、Amazon のオーダー番号は桁数が多すぎてややこしいので、自分で番号を振り直しているんですね。
その上で、パッキングリストを作成して、そこには自分で振り直した番号を記載しています。
invoice が A4 一枚に収まればいいんですが、ある程度まとめ買いをした時、例えば、鬼のようなセールをやっていることがあり、そのタイミングで仕入れると、普通に仕入れるよりも安いようなケースがあって、10 個とか仕入れることがあるんですが、それが一つ 1 箱で 10 個の段ボールで届く場合、上の invoice の Not Yet Shipped のところ、shipping information の欄が 10 もできてしまうのです。
結局のところ、何をいくつ、いくらで、総額がいくらか、ということさえわかればいいような気がするので、この CSV を Numbers に取り込み印刷したものを invoce に変えられないか、それが OK なら相当手間も省けてミスも減るというものなんですが。。。
まあ、税関の判断次第ですね。
というわけで、どうでもいいことでしょうが、また猫様のトイレマットを買ってしまいました。
それと残念なお知らせですが、また取引先を一つ潰されました。
ブランド等を書くと、問題があるので書きませんが、正規代理店からの圧力があったようで、出荷停止です。
圧力に屈することなく、新たな仕入れ先を頑張って開拓したいと思います。
ボチボチ頑張ります。
CSV ファイルの中身を PHP で読むための備忘録。
CSV ファイルの 1 行目はヘッダーになっていて、内容が記載されている。
Numbers で読み取り、それを vi にコピペ。
まず、タブを , にして、行を分ける。
:%s/\t/,\r/g
次に空白文字を取り除く
:%s/\s//g
次に変数名に使えない文字を _ に置き換える
:%s/[^0-9A-Za-z,]/_/g
最後に頭を小文字にして、変数なので $ をつける
:%s/^./$\l\0/g
aSIN_ISBN, uNSPSCCode, pOLineNumber は小文字だと変なので、大文字に直す(~)。
で、一行にまとめて(1VGJ)出来上がったものがこちら。
$orderDate, $orderID, $title, $category, $ASIN_ISBN, $UNSPSCCode, $website, $releaseDate, $condition, $seller, $sellerCredentials, $listPricePerUnit, $purchasePricePerUnit, $quantity, $paymentInstrumentType, $purchaseOrderNumber, $POLineNumber, $orderingCustomerEmail, $shipmentDate, $shippingAddressName, $shippingAddressStreet1, $shippingAddressStreet2, $shippingAddressCity, $shippingAddressState, $shippingAddressZip, $orderStatus, $carrierName_TrackingNumber, $itemSubtotal, $itemSubtotalTax, $itemTotal, $taxExemptionApplied, $taxExemptionType, $exemptionOpt_Out, $buyerName, $currency, $groupName
< ?php
$fp = fopen('amazon.csv', 'r') or die;
while (($data = fgetcsv($fp)) !== FALSE) {
list($orderDate, $orderID, $title, $category, $ASIN_ISBN, $UNSPSCCode, $website, $releaseDate, $condition, $seller, $sellerCredentials, $listPricePerUnit, $purchasePricePerUnit, $quantity, $paymentInstrumentType, $purchaseOrderNumber, $POLineNumber, $orderingCustomerEmail, $shipmentDate, $shippingAddressName, $shippingAddressStreet1, $shippingAddressStreet2, $shippingAddressCity, $shippingAddressState, $shippingAddressZip, $orderStatus, $carrierName_TrackingNumber, $itemSubtotal, $itemSubtotalTax, $itemTotal, $taxExemptionApplied, $taxExemptionType, $exemptionOpt_Out, $buyerName, $currency, $groupName) = $data;
echo "$orderId $title($ASIN_ISBN) $purchasePricePerUnit x $quantity\n";
}
?>