MB モバイル仕入れ
モバイル仕入れ [MB]
概要
スマートフォンで店舗仕入れを行うための専用画面です。カメラでJANバーコードをスキャンすると、Amazon上のASINに自動変換され、相場・出品制限・過去の仕入れ履歴を一画面で確認できます。仕入れ判断から仕入れ伝票(PO)登録まで、現場で完結します。
この画面でできること
- JANバーコードスキャン - カメラでバーコードを読み取り、SP-API経由でASINを自動解決
- ASIN直接入力 - バーコードがない場合はASINを直接入力可能
- 商品名検索 - キーワード(商品名・型番・ブランド)で SP-API カタログを検索し、複数候補から選択可能
- 📷 商品撮影AI識別 - バーコードがない中古商品をカメラで撮影すると、Claude Vision が商品名/型番を推測し自動でカタログ検索を実行
- 商品情報の即時表示 - タイトル・画像・ブランド名
- 相場確認 - SP-API Competitive Pricing でFBAの現在価格を表示
- 出品制限チェック - 出品制限がある場合は赤い警告を表示
- Transparency判定 - SP-API(Listings Items issues + FBA Inbound Eligibility + DBキャッシュ)を統合判定し、「TP必要 / TP検出なし / 判定失敗」のバッジを表示。検出時は asins.is_transparency=true に書き戻し。「TP検出なし」は不要の保証ではありません(下記参照)
- Transparency警告 - 上の自動判定でTP対象と判定された場合、オレンジで警告(登録時にTransparencyコードが必要)
- 危険物(Hazmat)チェック - スキャンした時点で自動判定し、危険物と確定なら赤・疑い/審査中ならオレンジで警告。この状態で「🛒 仕入れる」を押すと確認ダイアログが出る(承知の上なら仕入れ可能)
- 仕入れ・販売履歴参照 - 同じASINの過去の仕入れ値・売値・利益率をリスト表示
- 仕入れ登録 - 仕入値/コンディション/付属品/売値を入力し、PO+POIを作成(source_type='mobile')。デフォルトはSKU未発番(検品時に割当)。その場でSKU発番するオプションもあり
- 調べた記録 - 仕入れなかった商品も、どこまで調べたか(仕入値・売値・手数料=利益計算まで行ったか・コンディション・出品制限)を自動で記録。「見送る」ボタンはありません(押させるのは「仕入れる」だけ)
- 位置情報自動取得 - ブラウザの位置情報APIで現在地を記録。スキャンのたびに取り直すので、店をまたいでも前の店の位置が残りません
- 店舗名の3段階入力 - ①いまの位置から推定(過去に同じ場所でスキャンした記録から)→ ②過去に使った店をタップで選ぶ → ③自由入力。推定はあくまで推定で、違っていたらいつでも直せます。位置情報を許可していなくても②③で入力できます
- 店舗名記憶 - 最後に使った店舗名は次回以降も残ります(新しい推定が来たときだけ入れ替わります)
フロー
- 📷 カメラスキャンまたは手動入力でJAN/ASINを入力
- SP-APIで商品情報・相場・出品制限を一括取得(数秒)
- Transparency必要性をバックグラウンドで自動判定(追加で数秒、判定結果はバッジ表示)
- 過去の仕入れ履歴を確認
- 仕入れる場合: 仕入値・コンディション・付属品・売値を入力 → 「🛒 仕入れる」
- 仕入れない場合: そのまま次の JAN を読むだけ。見ていた商品の「どこまで」は自動で残ります
Transparency 自動判定の仕組み
SP-APIには「このASINがTransparency対象か」を直接返すAPIが無いため、複数のシグナルを統合して判定します(TransparencyDetectionService::detect())。
- Listings Items API - 同ASINで自分の既存出品があれば、issues 配列に「TRANSPARENCY required」系メッセージが含まれるかチェック
- FBA Inbound Eligibility API - 入荷不可理由(ineligibilityReasonList)に TRANSPARENCY 系コードが含まれるかチェック
- DBキャッシュ -
asins.is_transparencyの過去判定値も参照
3シグナルのうち1つでも「検出」となれば asins.is_transparency=true に書き戻し(誤検出防止のため false への上書きは行わない)。バッジは「TP必要 / TP検出なし / TP判定失敗」のいずれかを表示。「↻再判定」リンクで再実行可能。
⚠️「TP検出なし」は「TP不要」ではありません。AmazonはTP要否を返すAPIを提供していません。上の3シグナルのうち、①は自分がそのASINで出品していないと発火せず(仕入れ判断の時点では常に該当しない)、②も多くのASINで何も返しません。実例として B0DLGHWCBF(Anker Soundcore AeroClip)はセラーセントラルではTP必須なのに、SP-APIからは一切シグナルが返りませんでした(2026-08-04確認)。ブランド品で不安なときは、最終的にセラーセントラルで確認してください。
危険物(Hazmat)判定の仕組みと限界
危険物と判定された商品はFBAに納品できず、出品が自己発送に切り替わったり出品自体が消えたりします。これを仕入れる前に気づくための機能です。
ただしSP-APIには「このASINは危険物か」を直接返すAPIが存在しません。そのためFBA納品可否(FBA Inbound Eligibility API)が返す理由コードから読み取ります(HazmatCheckService)。
| 表示 | 意味 | 理由コード |
|---|---|---|
| ☢️ 危険物(納品不可)(赤) | 危険物と確定しており、FBAでは取り扱えない。仕入れると自己発送になる | FBA_INB_0015 |
| ☢️ 危険物の疑い(オレンジ) | 危険物審査中、または危険物だがFBA可(プログラム登録・SDS提出が必要な場合あり) | FBA_INB_0007〜0014, 0016 |
| 危険物なし(緑) | 危険物を示すコードは返っていない | — |
| 未判定(グレー) | 判定できなかった(API未接続・エラーなど) | — |
⚠️ 重要な限界 — 「危険物なし」は安全の保証ではありません。まだ誰もFBA納品していないASINはAmazon側の審査自体が走っておらず、危険物であっても何も返ってきません。また、すでに審査を通過している商品も「納品可」として返るため、非危険物と区別できません。この判定は危険物を検出できたときだけ意味がある片側の警告として扱ってください。
判定結果は hazmat_checks テーブルに(ユーザー・ASINごとに)30日キャッシュされます。APIのレート制限が1秒1回と細く、スキャンのたびに叩けないためです。審査が進んで結果が変わっている可能性があるときは「↻危険物」ボタンで取り直せます。
画面要素リファレンス
上のバーの「?」を押すとヘルプになり、押せる部品に青い枠が付きます。枠の付いた部品を押すと、この表のその部品の説明が開きます。もう一度「?」を押すと元に戻ります。
ヘッダー
| 要素名 | ID | 説明 |
|---|---|---|
| 📱 モバイル仕入れ | MB-logo | ロゴ・トップへのリンク |
| 履歴リンク | MB-history-link | スキャン履歴画面へ遷移 |
| PC版 | MB-PC | PC版の画面(ダッシュボード)を開く |
| 在庫検索リンク | MB-inventory-link | 本サイトの在庫一覧(商品名・ASIN・SKU等で検索可能) |
店舗バー(画面いちばん上)
いま仕入れている店舗名を入れるところです。店舗名は仕入伝票の「仕入先」に入り、 あとから仕入先ごとの集計に使えます。画面の一番上に常に出ているので、 スキャンを始める前に確認して直せます。
店舗名は3段階で入ります。上から順に手数が少なくなっています。
- 位置から推定 — 過去に同じ場所(半径100m以内)でスキャンした記録があれば、その店舗名を出します
- 過去に使った店から選ぶ — よく使う順にボタンで並びます。タップするだけで入ります
- 自由入力 — 初めての店はここに打ちます
推定はあくまで推定です。違っていたらいつでも上書きできますし、 一度手で入れたり選んだりしたあとは、あとから推定が来ても勝手に書き換わりません。
位置情報を許可しない設定でも問題ありません。②と③でそのまま入力できます。 あとから許可した場合は「取得」を押せば推定が動きます。
| 要素名 | ID | 説明 |
|---|---|---|
| 地図 | MB-map-link | 上のバーのリンク。仕入れ地図を開く(これまでスキャン・仕入れした場所) |
| サポート | MB-support-link | 上のバーのリンク。サポートチャットを開く |
| 店舗バー | MB-store-bar | 画面上部に常設。いまの店舗名を1行で表示する |
| 店舗バーの開閉 | MB-store-bar-toggle | タップで入力パネルを開く/閉じる |
| いまの店舗名 | MB-store-current | 仕入れ登録に使われる店舗名。未入力なら「店舗名を入れる」と出る |
| 「位置から推定」バッジ | MB-store-guess-badge | いまの店舗名が位置からの推定であることを示す。手で入れたり選んだりすると消える |
| 「前回の店」バッジ | MB-store-memory-badge | 位置で確かめる前(取得中・位置情報が使えない)に、前回使った店名がそのまま出ていることを示す。今いる店と違えば「変更」で直す |
| 店舗入力パネル | MB-store-panel | ①推定・位置情報・②過去の店・③自由入力をまとめたパネル |
| 位置からの推定 | MB-store-guess | 「ここは〇〇かもしれません」+この場所での記録件数・最寄り距離。記録が無ければ「初めての店」と出る(エラーではない)。このとき前回の店名は外れ、パネルが開くので店舗名を選ぶか入れる(前の店の名前のまま記録されると、次にここへ来たとき間違った店が推定されるため) |
| 近くのお店(地図データより) | MB-store-osm | 自分の記録に無い店(初めての店)のときだけ、地図データ(OpenStreetMap)で見つかった半径50m以内のお店を近い順に最大5件並べる。並べるだけで店名は決めない。同じ建物に店が並んでいると座標では決まらないので、選ぶか下で入力する。地図データに無い店・問い合わせに失敗したときは何も出ない |
| (近くのお店の1つ) | MB-store-osm-pick | 押すとそのお店を店舗名にする。右の数字はお店までの距離 |
| この店にする | MB-store-guess-pick | 推定した店を、いまの店舗名にします |
| (近くの別の店) | MB-store-guess-alt | 同じあたりで記録のある別の店。押すとその店を店舗名にします |
| 位置情報の状態 | MB-store-geo-status | 取得中/取得済みの座標/許可されていない、などを表示 |
| 位置情報の取得ボタン | MB-store-geo-get | 位置情報を取り直す。あとから許可した場合もここから |
| 住所入力 | MB-address-input | 位置情報が取れないときに住所を手で記録できる |
| 過去に使った店 | MB-store-chips | 過去の店舗名をよく使う順にボタンで表示。タップで選択 |
| (過去の店の1つ) | MB-store-chip | 押すとその店を店舗名にします。いま選んでいる店は青 |
| 店舗名(自由入力) | MB-store-input | 初めての店を打つ欄。店舗名の入力欄はこの1つだけ。最後に使った店名は次回以降も残る |
スキャンエリア
| 要素名 | ID | 説明 |
|---|---|---|
| スキャンセクション | MB-scan-section | バーコード入力・カメラスキャンエリア |
| JANコード入力 | MB-jan-input | JANコードのテキスト入力欄。Enterキーで検索実行 |
| 検索ボタン | MB-search-btn | 入力したJANで商品検索を実行 |
| カメラスキャンボタン | MB-camera-btn | スマホカメラを起動してバーコードを読み取り |
| ✕(カメラを閉じる) | MB-camera-close | バーコードを読むカメラを止めて閉じます |
| ASIN直接入力トグル | MB-asin-toggle | ASIN直接入力モードの表示/非表示 |
| ASIN入力欄 | MB-asin-input | ASINを直接入力するテキスト欄 |
| 検索(ASIN) | MB-asin-search-btn | 入れたASINで商品を調べます(Enterでも同じ) |
| 商品名検索トグル | MB-keyword-toggle | キーワード検索モード(商品名・型番・ブランド)の表示/非表示 |
| キーワード入力欄 | MB-keyword-input | 商品名・型番・ブランドを入力。Enterキーまたは検索ボタンで実行 |
| 検索(商品名) | MB-keyword-search-btn | 入れた言葉でAmazonの商品を探し、候補を下に並べます |
| キーワード検索結果 | MB-keyword-results | 複数ASIN候補をリスト表示。タップで選択 |
| (候補の1件) | MB-keyword-result | 押すとその商品(ASIN)で調べます |
| 📷 商品撮影ボタン | MB-IMG-CAPTURE-BTN | バーコードがない中古商品をカメラで撮影。AI(Claude Vision)が商品名/型番を推測し、自動でキーワード検索を実行 |
| 撮影用 file input | MB-IMG-CAPTURE-INPUT | 非表示。撮影ボタンタップで OS 標準カメラが起動 |
| AI 識別メッセージ | MB-IMG-RECOGNITION-MSG | confidence=low の時に「もう少しはっきり撮影すると精度が上がります」を表示 |
商品情報エリア
| 要素名 | ID | 説明 |
|---|---|---|
| 検索結果セクション | MB-result-section | 商品が見つかった場合に表示される全体エリア |
| 商品タイトル | MB-product-title | Amazonカタログから取得した商品名 |
| ASIN | MB-asin-text | 見つかった商品のASIN |
| Copy | MB-copy-asin | ASINをコピーします(押すと一瞬「Copied!」) |
| Amazonリンク | MB-amazon-link | Amazonの商品ページを新しいタブで開く |
| Keepa | MB-keepa-link | Keepaでこの商品の価格・ランキングの推移を新しいタブで開きます |
| 出品制限チェックボタン | MB-check-restriction | SP-API Listings Restrictions で出品制限を再チェック |
| 出品制限チェックの結果 | MB-restriction-result | 緑「出品OK」/赤「制限あり」(理由は下に赤字)/黄はチェックできなかったときのエラー |
| TP判定バッジ | MB-tp-status | Transparency判定の結果表示(TP判定中… / TP必要 / TP検出なし / TP判定失敗)。「TP検出なし」はグレー表示で、不要の保証ではない |
| TP判定 / ↻再判定 | MB-detect-tp | Transparency が要るかをSP-APIで判定します。判定したあとは「↻再判定」になります |
| 危険物バッジ | MB-hazmat-status | 危険物判定の結果表示(☢️危険物(納品不可) / ☢️危険物の疑い / 危険物なし / 未判定)。スキャンした時点で自動判定される |
| 危険物 再判定ボタン | MB-check-hazmat | 危険物判定を取り直す。Amazon側の審査が進むと結果が変わるため、時間をおいて押し直せる |
| 危険物 警告 | MB-hazmat-warning | 危険物と確定なら赤、疑い・審査中ならオレンジで理由コードごとの説明を表示。この状態で「仕入れる」を押すと確認ダイアログが出る |
| 警告エリア | MB-warnings | 出品制限・危険物・Transparency警告の表示エリア(該当時に色つきで表示) |
| 既存SKUに追加 | MB-existing-sku | 同じASINの新品のSKUがもうあるときに出ます。新品で「その場でSKU発番する」をONにして仕入れると、新しいSKUを作らずそのSKUに足します(OFFならSKUは検品のときに決まります) |
| 相場表示 | MB-prices | コンディション別のFBA最低価格一覧 |
| 仕入れ履歴 | MB-history | 同一ASINの過去仕入れ・販売実績 |
| 詳細履歴ボタン | MB-detail-history-btn | ASIN別の詳細な仕入れ・販売履歴テーブルを展開 |
| ASIN詳細履歴 | MB-asin-history-detail | SKU単位の仕入値・売値・利益・ステータス一覧 |
仕入れ入力フォーム
| 要素名 | ID | 説明 |
|---|---|---|
| 仕入れフォーム | MB-purchase-form | 仕入れ情報の入力フォーム全体 |
| 仕入値入力 | MB-cost-input | 仕入れ価格(必須) |
| 売値入力 | MB-price-input | 予定売価(任意)。入力すると見込み利益が即時計算される |
| 手数料・利益 | MB-profit-preview | 売値を入れると「手数料を計算」が出ます。計算するまでは手数料を含まない簡易利益を出します |
| 📊 手数料を計算 | MB-fee-btn | 売値でのAmazon手数料をSP-APIで取り、見込み利益と利益率(売値に対する%)を出します。売値を変えると計算し直しになります |
| コンディション選択 | MB-condition-select | 新品/中古-ほぼ新品/中古-非常に良い/中古-良い/中古-可 |
| 付属品・備考 | MB-accessories-input | 付属品の有無や状態メモ。テンプレートの{ACCESSORY_PHRASE}に使用 |
| 数量 | MB-quantity-input | 仕入れ数量(デフォルト1) |
| SKU発番トグル | MB-assign-sku-toggle | ONにすると店舗でその場でSKU発番(シール貼付用)。デフォルトOFF(検品時にSKU割当) |
| (SKU発番のスイッチ) | MB-assign-sku-input | 上のトグルのスイッチ本体 |
| 受け入れ検品を飛ばす | MB-received-toggle | 商品がいま手元にあるならON。登録と同時に受け取り済みにし、検品待ちに並びません。店から送ってもらうなど後日届くならOFF(届いたら検品で受け取る) |
| (検品を飛ばすスイッチ) | MB-received-input | 上のトグルのスイッチ本体 |
| 店舗(表示のみ) | MB-store-readonly | いま選ばれている店舗名の確認行。直すときは「変更」で画面上部の店舗バーが開く |
| 変更(店舗) | MB-store-readonly-edit | 画面上部の店舗バーを開きます |
| (店名を後から直す) | — | 位置から推察した店名は、手で直さなければそのまま仕入先に入る。違っていたら商品詳細の「仕入先」か仕入伝票一覧の編集で直せる。直すと同じ日の記録も直り、次からの推察も直る |
| カード | MB-card | この仕入れを払うカード。「自動(○○)」はお店ごとのカードの設定(当たらなければ仕入日)で決まるカード。違っていたら選び直すと、その仕入れだけ選んだカードになる。お店を変えると「自動」に戻る。カードを2枚以上登録しているときだけ出る |
| カードの選択 | MB-card-select | 「自動」か、登録しているカードのどれか |
| 選び直しの表示 | MB-card-note | 自動以外を選んでいるときに出る注意書き |
| 仕入れるボタン | MB-purchase-btn | PO+POIを作成(source_type='mobile')。SKU発番ONならSKU+POIUも作成 |
| 荷姿写真エリア | MB-photo-area | 仕入れ登録後に表示。カメラで荷姿写真を撮影しstore_photo_1/2に保存(最大2枚)。FBA出品用のphoto_url_1〜6とは別枠 |
| 写真を撮るボタン | MB-photo-btn | スマホのカメラで撮って、この仕入れに付けます(2枚まで) |
| (撮影) | MB-photo-input | 「写真を撮る」で開くカメラ(見えない部品) |
| 🖼️ ギャラリーから | MB-photo-gallery-btn | 撮ってある写真を選んで、この仕入れに付けます(2枚まで) |
| (写真の選択) | MB-photo-gallery-input | 「ギャラリーから」で開く写真の選択(見えない部品) |
| 次の商品をスキャン | MB-next-btn | 入力を空にして、次の商品のJAN入力に戻ります |
| 取り消す | MB-undo-btn | いま登録した仕入れを取り消します。仕入伝票・ロット・個品・スキャン記録を消し、その場で発番した新しいSKUも(ほかに使われていなければ)消します。登録から30分を過ぎると取り消せません(仕入伝票一覧でアーカイブする) |
関連画面
データの流れ
- 仕入れ登録時(デフォルト):
PurchaseOrderNew(source_type='mobile') →PurchaseOrderItem(sku_master_id=NULL) →StorePurchaseLog(decision='purchased')
※ SKU・POIUは検品時に割当・生成 - 仕入れ登録時(SKU発番ON):
SkuMaster(created_reason='mobile_purchase') →PurchaseOrderNew(source_type='mobile') →PurchaseOrderItem→PurchaseOrderItemUnit(自動生成) →StorePurchaseLog(decision='purchased') - 仕入れずに次へ移ったとき: 検索の行(
StorePurchaseLogdecision='search')に、入れた仕入値・売値・手数料・コンディション・出品制限を書き足す(新しい行は作らない)。2026-09-27 より前の「見送り」(decision='skipped'・理由付き)は履歴にそのまま残る
API仕様
| エンドポイント | メソッド | 概要 |
|---|---|---|
/mobile-purchase/lookup | POST | JAN→ASIN解決 + 相場・制限・履歴を一括取得 |
/mobile-purchase/purchase | POST | 仕入れ登録(PO+POI+SKU作成) |
/mobile-purchase/log-progress | POST | 仕入れずに次へ移ったとき、検索の行にどこまで調べたかを書き足す |
/mobile-purchase/asin-history/{asin} | GET | ASIN別詳細履歴 |
/mobile-purchase/nearby-store | POST | いまの位置から店舗名を推定(自分の過去のスキャン記録・半径100m)。JAN検索とは別経路で、スキャンを遅くしない |
その他の画面要素
| ラベル | ID | 説明 |
|---|---|---|
| シャッター | MB-IMG-SHUTTER-BTN | 撮影してAIで商品を読み取ります |
| カメラ映像 | MB-IMG-CAPTURE-VIEW | いま写っている映像 |
| 閉じる | MB-IMG-CLOSE-BTN | カメラを閉じます |
| ×(デバッグ表示) | MB-debug-close | URLに ?debug=1 を付けたときだけ出る、カメラの不具合調べ用の表示を閉じます |