背景
澤井製作所向け仕様書(docs/qr-barcode-spec-analysis.html、Git 管理外、2026-09-06 改訂)の 6 章に、第 2 の仕向地「モルテン」のコード体系を現場写真 12 枚のデコード結果から追加した。現行アプリは仕向地「澤井製作所」の 66 桁 QR と 4-2-4@管理コード の Code 128 だけを受理するため、モルテンの伝票・ラベルは読取段階で弾かれる。
モルテンの事実:
QR は 61 桁固定(v3-M 英数字モードの上限)。A + 受注者 5 + 部品番号 10(左詰め・空白埋め、9 桁品番あり)+ 空白 9 + 納品番号 7 + 000 + 納入先 3 + TY ロケーション 3 + 供給先 5 + 収容数 7 + 納入指示日(JUMP) MMDD + 時刻 HHMM(未設定時は空白 4 桁。末尾空白は有効データ)。
Code 128 は同じ 品番@6 桁管理コード だが品番は 4-2-4 または 4-2-3(例 PAF1-15-422@0NKD3C)。
伝票は箱ごとに 1 枚で、同じ納品番号の伝票は QR が完全同一。管理コードはラベルごとに異なる。
伝票の QR の隣に Code 39(発行番号)がある。読取対象外(現行のシンボロジー制限を維持)。
決定事項(仕様書 6.6、2026-09-06)
重複判定キー: 澤井製作所 = QR 全文(現行)。モルテン = QR 全文 + Code 128 全文(箱 = 納品番号 + 管理コード)。
仕向地の混在は不可。最初に受理した QR の書式でセッションの仕向地を確定し、別仕向地の QR は「このセッションは仕向地「○○」で照合中です…」と案内して受理しない。選択 UI は設けない。履歴セッションに仕向地を記録する。
箱の数え方: 澤井製作所 = 品番ごとの N 箱目(現行)。モルテン = 納品番号ごとの N 箱目 + 累計個数(収容数の合計)。口数・指示数は QR に無いため完了はアプリで判定しない。
解析できる項目はすべて履歴詳細と PDF に記載する。
テストが参照する既存文言は変更しない。新規メッセージは仕向地名を明示するか中立にする。
呼称は仕向地名(澤井製作所 / モルテン、英語 UI は Sawai Seisakusho / Molten)。
共通設計
Destination(sawai / molten)を QR の桁数で自動判別する。CR/LF/NUL だけ除去し空白は保持。66 桁 → sawai、57〜61 桁は右側を空白補完して 61 桁 → molten。
61 桁レコード型(MoltenQRRecord / MoltenQrRecord)の検証は 7–16 桁目 ^[A-Z0-9]{9}[A-Z0-9 ]$、47–53 数字、54–57 数字、58–61 数字または空白のみ(A・K6805・000 は要求しない)。
Code 128 の形式検証は仕向地ごと({4} / {3,4})。品番表示は 10 桁 4-2-4、9 桁 4-2-3。
CodeMatcher.compare の部分一致フォールバックは削除する(61 桁 QR に偶然一致するため)。
箱識別子: sawai = 正規化 QR 全文、molten = 61 桁正規化 QR + | + 正規化 Code 128。
澤井製作所の挙動(文言・重複判定・件数)は変えない。
やること(PR 順、子 Issue)
実装前に現行アプリでモルテンの白い伝票 QR をカメラと BCST-47 にかざし、「納品書兼現品票のQRコードではありません」が出る(= デコードできる)ことを確認する。出なければ読取距離・ガイド枠の調整を先に検討する。
iOS/Android: 共通フィクスチャに仕向地を追加し、照合コアを仕向地対応にする(shared/test-fixtures) #85 共通フィクスチャ + 照合コア(iOS/Android、shared/** は両 CI を起動するため同 PR)
iOS: 履歴ストアに仕向地・箱識別子・納品番号ごとの集計を追加する #86 iOS 履歴ストア
iOS: セッションの仕向地ロックと読取ゲート・結果表示をモルテンに対応させる #87 iOS 仕向地ロック・読取ゲート・結果表示
iOS: 履歴詳細と PDF にモルテンの解析項目を記載する #88 iOS 履歴詳細・PDF
Android: Room v3 とチェックポイントにセッションの仕向地を持たせる #89 Android Room v3・チェックポイント
Android: ScanReducer の仕向地ロック・箱識別子・納品番号ごとの箱数に対応する #90 Android Reducer・画面・計測テスト
Android: 履歴詳細と PDF にモルテンの解析項目を記載する #91 Android 履歴詳細・PDF
iOS/Android: 仕向地対応の docs を更新し、実物の伝票・ラベルで通し確認する #92 docs 更新と実物での通し確認
前提: 実 66 桁 QR 12 組のフィクスチャ差し替え(#83 )が master に入っている。
受け入れ条件
進捗(2026-09-07)
実装 PR はすべて squash-merge 済み: #93 (#85 )、#94 (#89 )、#95 (#86 )、#96 (#90 )、#97 (#87 )、#98 (#91 )、#99 (#88 )、docs #100 (#92 )。残りは #92 の実物確認のみ。
背景
澤井製作所向け仕様書(
docs/qr-barcode-spec-analysis.html、Git 管理外、2026-09-06 改訂)の 6 章に、第 2 の仕向地「モルテン」のコード体系を現場写真 12 枚のデコード結果から追加した。現行アプリは仕向地「澤井製作所」の 66 桁 QR と4-2-4@管理コードの Code 128 だけを受理するため、モルテンの伝票・ラベルは読取段階で弾かれる。モルテンの事実:
A+ 受注者 5 + 部品番号 10(左詰め・空白埋め、9 桁品番あり)+ 空白 9 + 納品番号 7 +000+ 納入先 3 + TY ロケーション 3 + 供給先 5 + 収容数 7 + 納入指示日(JUMP) MMDD + 時刻 HHMM(未設定時は空白 4 桁。末尾空白は有効データ)。品番@6 桁管理コードだが品番は4-2-4または4-2-3(例PAF1-15-422@0NKD3C)。決定事項(仕様書 6.6、2026-09-06)
共通設計
Destination(sawai/molten)を QR の桁数で自動判別する。CR/LF/NUL だけ除去し空白は保持。66 桁 → sawai、57〜61 桁は右側を空白補完して 61 桁 → molten。MoltenQRRecord/MoltenQrRecord)の検証は 7–16 桁目^[A-Z0-9]{9}[A-Z0-9 ]$、47–53 数字、54–57 数字、58–61 数字または空白のみ(A・K6805・000は要求しない)。{4}/{3,4})。品番表示は 10 桁 4-2-4、9 桁 4-2-3。CodeMatcher.compareの部分一致フォールバックは削除する(61 桁 QR に偶然一致するため)。|+ 正規化 Code 128。やること(PR 順、子 Issue)
shared/**は両 CI を起動するため同 PR)前提: 実 66 桁 QR 12 組のフィクスチャ差し替え(#83)が master に入っている。
受け入れ条件
4-2-3/4-2-4のラベルが両 OS・カメラ/BCST-47 で一致する(自動テストとフィクスチャでは確認済み。実物の伝票・ラベルでの確認は iOS/Android: 仕向地対応の docs を更新し、実物の伝票・ラベルで通し確認する #92)shared/test-fixtures/matching-cases.jsonに molten ケースが入り、Swift / Kotlin 双方が同じ結果を返すdocs/PRODUCT_SPEC.md・CLAUDE.md・各 OS の docs が仕向地 2 つの仕様を記述し、仕様書 6.6 の「未対応」が解消される進捗(2026-09-07)
実装 PR はすべて squash-merge 済み: #93(#85)、#94(#89)、#95(#86)、#96(#90)、#97(#87)、#98(#91)、#99(#88)、docs #100(#92)。残りは #92 の実物確認のみ。