ポイント機能ウヨキョクセツの件


## ポイント機能は難しい。。。
楽○、Ya○oo、Amaz○nなど世の中のEコマースにポイントはつきもので、利用する分には、やったー今日ポイント10倍じゃあないっすか！！とか購買意欲そそられまくりなのですが、これをいざ開発となると、まあ仕様確定がタイヘンな事。。（泣）そこで今回はポイントについての検討事項をまとめます。
今後、どこのどなたかが実装される際の参考になれば幸いです！！

## まえおき
これが一番お伝えしたい内容ですが、なぜ今回「EC-CUBE3」の本体で「ポイント機能」をサポートする必要があったか？

**2系のユーザー様のサポートのため**です。

「EC-CUBE3」がよさそうでリプレイスしたいけれども、お客様に付与したポイントが移行できないとなると、顧客離れもしくは、ショップ様の信頼に関わると言うことです。

ちなみに、私は会計知識が残念なため、ポイントが**負債**になる事を知りませんでした。。

※ポイントの負債 
・国税庁 : [マイレージサービスに代表されるポイント制に係る税務上の取扱い](https://www.nta.go.jp/ntc/kenkyu/ronsou/58/01/hajimeni.htm)
・Wiki : [ポイントサービス](https://ja.wikipedia.org/wiki/%E3%83%9D%E3%82%A4%E3%83%B3%E3%83%88%E3%82%B5%E3%83%BC%E3%83%93%E3%82%B9#.E4.BC.9A.E8.A8.88.E4.B8.8A.E3.81.AE.E6.89.B1.E3.81.84)

## 最低限必要なこと
さてさて次は最低限必要な機能です

1.ポイントが付与される
2.ポイントが利用できる
3.利用ポイントがサイト運営者の意図した換算率で換算される
4.ユーザーが保有ポイントを確認できる
5.ユーザーが利用ポイントを確認できる
6.ユーザーが商品購入時ポイント還元率が把握できる
7.購入フローのどこかのタイミングで保有ポイントが付与される

さてさて上記の内容が「ポイント機能」として当たり前に実現されるべき内容かなと。。

次はサイト運営者からのニーズを考察してみましょう
※議論の全てではありません。

## サイト運営者のニーズ
1.ポイント機能は必要ない
2.ポイント機能でリピーターを増やしたい
3.ポイントを一律でなく商品毎に設定したい ( 新規・購買率の低い商品etc.. )
4.ポイントをサイト全体で設定したい
5.ポイント利用時端数による誤差を調整できる様にしたい
6.ポイントに不正利用の対策がとりたい
7.商品キャンセル時のポイント処理が適切に行える

## 上記を踏まえて
計算方法、詳細な内容はIsuuesである程度まとまっているため、あとでそちらから抜粋したいと思います。
ここでまだ議論が必要な重要なポイントだけ抽出すると以下かなと思います。

・**購入者・ショップオーナーでトラブルに発展しにくい仕様であること**
・**ポイントに不正利用の対策がとりたい**

### 上記解決に必要な事
1.サイト上に約款を記載し以下を明確に定義する
・ポイントの計算方法、付与のタイミング、期限、失効などの対応方法
2.ポイントの履歴を取得できる
3.ポイントに期限が設けられる
4.キャンセル時の処理が行える

議論当時は気づきませんでしたが、今回記事を書くにあたりあらためて調べて見ると、サイトオーナー・消費者がトラブルを起こさず、互いが満足の行くシステムを作成する、もしくは、業務フローをある程度提示すると言うことが大事な気がしてきました。
よってこの２つが課題だというところに私自身の考えが帰結いたしました。

・**購入者・ショップオーナーでトラブルに発展しにくい仕様であること**
・**ポイントに不正利用の対策がとりたい**

### 実装において
上記を踏まえで次は開発において問題となってきそうな事が、以下です

1.開発工数( ポイント機能自体のニーズとコスト )
2.ポイント期限の実現方法
3.ポイント履歴の実現方法
4.キャンセル処理の実現方法

### 個人的見解
以下サイトを読んで、「ポイント機能」について考えがまとまってきましたが、本体機能として、やはり、ポイント履歴、キャンセル機能は必要かなと思います。

ただ**全ての機能を同時提供は不可能に近い**と思いますので、段階的なリリースになるとして、ロードマップなど明示出来ればいいかもしれないなあと考えております。

ただ以下はあとからの追加は困難だと思いますので、ディスカッションが必要と感じています。

1.履歴機能 ( データ保存だけでも行っておく必要がある )
2.キャンセル機能 ( ここ以外と議論していない )
3.ポイント期限 ( 私いらない派でした。。汗 )

### 個人的見解にいたった参考サイト
[ポイント制度導入で“絶対”注意すべきこと](https://netotas.net/point-system)
[経済産業省:企業ポイントに関する消費者保護のあり方（ガイドライン）](http://www.meti.go.jp/committee/materials2/downloadfiles/g81112b04j.pdf)

## GitHubで確定している仕様
### 機能仕様

ポイント機能を利用するかどうかを管理画面から選べる
ポイント機能を有効化するかどうかはショップの運営者により選べる
ポイントの付与率の基本値を管理画面から登録できる
2系のような商品登録時の初期値ではなくベースとなるポイント付与率
ポイントを与える商品がごく一部となるケースもあるため基本値が0も可能
商品登録時、商品毎にポイントの付与率を変更できる
0が登録された場合は、ポイント対象外
NULLの場合は基本値を適用する
付与されるポイントは整数とし、小数点以下は切り上、切り捨て、四捨五入が管理画面から選択できる
購入時に利用される1ポイント当たりの金額を管理画面から登録できる
1ポイント当たりの金額は1以上の整数とする ※海外通貨を想定した場合に再度検討必要
ポイント毎の値引きをポイント値引きとして表示する
購入時に利用したポイント数も受注情報に保持する
購入時にポイントを利用したの場合に、付与ポイントを減算するかを管理画面から選べる
ポイント付与のタイミング（受注ステータス mtb_order_status）は管理画面から選択できる
ポイント付与以外ステータスからのキャンセルでは特になにもしない ※仮ポイントなどを実装する場合は再度検討が必要
ポイント付与ステータスからのキャンセルは会員に付与したポイントを減算する
明細毎の商品の追加や変更、削除などの付与ポイントの変更は運用者による手動とする

### ポイントの付与対象の詳細

商品毎の販売価格ごとに付与
商品ごとに付与率が変わるため、商品の販売価格に付与率をかけて付与されるポイントが決まる

税抜きの金額に対してポイントを付与する
EC-CUBEの場合、外税が基本であること、販売価格を付与対象とすることから税抜とする
ただし、税込み価格で販売価格を登録するような運用ケースでは当然税込で付与されることなる

ポイント利用した購入の際に、付与するポイントを減算しない場合は商品の販売価格に応じたポイントをそのまま付与

ポイント利用した購入の際に、付与するポイントを減算する場合は、ポイント値引額ｘポイント付与率（基本値）を合計付与ポイントから減算するものとする

### 購入時のポイント付与式

基本の計算式

　商品ごとに設定されているポイント付与率に応じて付与する
　　販売価格＊（基本ポイント付与率 or 商品ごとのポイント付与率） ＝ 商品の付与ポイント（A）
　　（A）*購入数 ＝ 明細付与ポイント（B)
　（B1）+（B2)+...(Bn) = 合計付与ポイント（P)

ポイント利用時に減算する場合の減算式

ポイント値引き額に相当するポイントを合計付与ポイントから減算する

　　利用ポイント数 ＊ ポイント金額換算率 ＝ ポイント値引額 （X）
(P)- （X)*基本ポイント付与率 = 合計付与ポイント（P')

参考

### 大手モールやASPなどのポイントと税に関連した情報

楽天 https://point.rakuten.co.jp/guidance/rule/
ポンパレ https://point.recruit.co.jp/doc/terms/pointlist11.html
Yahoo！ http://points.yahoo.co.jp/save_use/
Amazon http://www.amazon.co.jp/gp/help/customer/display.html/ref=hp_left_v4_sib?ie=UTF8&nodeId=200041980
カラーミー（GMOとくとくポイント） http://shop-pro.jp/?mode=g_terms
国税庁： https://www.nta.go.jp/ntc/kenkyu/ronsou/58/01/hajimeni.htm
ポイント利用時の付与対象に関する情報

2系の仕様： 明細毎の販売金額から付与ポイント求めたうえで、利用するポイントにポイント付与率をかけ、実際に付与するポイントを求める
販売価格 × 商品のポイント付与率 - ( 使用ポイント × ポイント付与率の初期値 / 100 ) ＝ 実際に付与するポイント
楽天： 商品が付与予定のポイントをそのまま付与（ポイント加算の店舗などを混ぜた場合は全部に加算される）
http://ichiba.faq.rakuten.co.jp/app/answers/detail/a_id/645 https://point.rakuten.co.jp/guidance/pointup/
Amazon： 付与対象取引の代金をAmazonポイントで支払った場合も、当該Amazonポイントに相当する金額を含めた商品価格がAmazonポイントの付与対象 http://www.amazon.co.jp/gp/help/customer/display.html?nodeId=200041610 　- Yahoo！： 商品金額に対して付与 　 http://www.yahoo-help.jp/app/answers/detail/a_id/40159/p/599
カラーミー： 加算するかどうかをえらべる https://shop-pro.jp/manual/point_edt

## 最後に
まだまだ決まっていない事もありますが、「EC-CUBE」がECサイトを牽引するソリューションのひとつである以上、幅広い視点と、利用者(ショップオーナー/消費者 )の利益・利便性を第一に考えて課題を解決していく事が**愛されるソリューション**となるか否かなのかなと、いろいろ考えさせられる今回の「ポイント機能ウヨキョクセツ」でした

さてさてディスカッション・仕様確定・納期・実装・まだまだがんばらねば。。。汗

## 備考
ポイント機能の計算方法は、ユーザーも明確に理解できる様に、Excelでシミュレーターを提供できればと思っていますので完成しだい、添付したいと思います。
※実は本記事に向けて作成したのですが、「わかりにくい」とのこと。。残念ですww
ですので、改良後に添付いたします。

### 2016/06/21追記 : ポイント機能シミュレーター公開！！

ポイント計算のシミュレーターが正式に公開となりました!!
よかったら参考にしてください。

[ポイント機能シミュレーター](https://github.com/EC-CUBE/point-plugin/tree/master/Docs)

以上ながながとお付き合い有難うございました。

明日は[@tuyop1](http://qiita.com/tuyop1)です！！
よろしくお願いします。