# BONE FLOW #024 — 外部商品データベース接続設定 v1.0.275

対象: `sample/024/calendar/finance-voucher.html` の「商品写真・JANバーコード」下部。

## 対応APIと公式登録先
- Open Food Facts（キー不要） https://openfoodfacts.github.io/documentation/docs/Product-Opener/v2/products/get-product-by-code/
- UPCitemdb FREE（キー不要） https://www.upcitemdb.com/api/
- Yahoo!ショッピング 商品検索v3（アプリID） https://e.developer.yahoo.co.jp/register ／仕様 https://developer.yahoo.co.jp/webapi/shopping/v3/itemsearch.html
- 楽天市場 商品検索API 2026-07-01（アプリID＋アクセスキー） https://webservice.rakuten.co.jp/app/create ／仕様 https://webservice.rakuten.co.jp/documentation/ichiba-item-search
- UPCitemdb 有料API（user_key） https://www.upcitemdb.com/api/ ／仕様 https://www.upcitemdb.com/wp/docs/main/development/getting-started/

## 登録時の接続確認
「登録・接続検証」を押すと、サービス別の検証用条件（Yahoo: JAN `4902102107341`、楽天: キーワード「コーヒー」、UPC有料: 公式サンプルUPC `4002293401102`）で実際のHTTP GETを実施し、成功HTTPと所定のJSON構造を照合する。入力形式だけを満たしても登録成功にはしない。401/403/429、CORSブロック、接続不能、タイムアウト、APIエラーJSONは未登録・未検証のまま。API上の掲載商品の有無は別問題である。

## 秘密情報
キー・IDは**ブラウザJavaScript実行中のメモリのみ**で管理。localStorage / sessionStorage / SQLite / URLハッシュ / 伝票には保存しない。楽天 `accessKey` とUPC `user_key` はHTTPヘッダー。Yahoo `appid` と楽天 `applicationId` は仕様に沿ってクエリ文字列で送信される。ブラウザは開発者ツール、拡張機能、同一オリジンの他スクリプトから秘密を完全に隔離できない。公開サーバー運用では専用の安全なサーバー側プロキシとシークレット保管が望ましい（本候補ZIPにサーバー側プロキシは含まない）。実サービスがCORSを許可しない場合は、ブラウザからの登録は不可として正直に表示する。検証成功と表示したのは利用者の実際のAPIレスポンスから判断できた場合だけ。

## 商品取得
API検索はクリック時のみ、JANのみ送信、写真や伝票内容は送らない。商品候補の画像・価格・名称を表示し、ユーザーが確認後「候補の商品名を反映」。ネット販売価格はセット価格の場合があり、購入金額や仕訳金額を自動修正しない。UPCitemdbの価格は通貨未確認の場合があるため円表示せず未取得とする。取り込んだ商品情報は商品マスターやSQLiteへ自動登録しない。旧JANカメラ・写真読込・Open Food Factsの「商品情報をネットで検索」ボタンも維持する。

**Windows / Edge実機・各社の実ID/実キーによる接続確認は未実施。** 開発状態: DEVELOPMENT / NOT COMPLETED。
