Skip to content

iOS/Android: 仕向地「モルテン」の伝票・ラベルに対応する(61 桁 QR・4-2-3 品番・納品番号ごとの箱数) #84

Description

@rimtty

背景

澤井製作所向け仕様書(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)

  1. 重複判定キー: 澤井製作所 = QR 全文(現行)。モルテン = QR 全文 + Code 128 全文(箱 = 納品番号 + 管理コード)。
  2. 仕向地の混在は不可。最初に受理した QR の書式でセッションの仕向地を確定し、別仕向地の QR は「このセッションは仕向地「○○」で照合中です…」と案内して受理しない。選択 UI は設けない。履歴セッションに仕向地を記録する。
  3. 箱の数え方: 澤井製作所 = 品番ごとの N 箱目(現行)。モルテン = 納品番号ごとの N 箱目 + 累計個数(収容数の合計)。口数・指示数は QR に無いため完了はアプリで判定しない。
  4. 解析できる項目はすべて履歴詳細と PDF に記載する。
  5. テストが参照する既存文言は変更しない。新規メッセージは仕向地名を明示するか中立にする。
  6. 呼称は仕向地名(澤井製作所 / モルテン、英語 UI は Sawai Seisakusho / Molten)。

共通設計

  • Destinationsawai / 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 数字または空白のみ(AK6805000 は要求しない)。
  • 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)

  1. 実装前に現行アプリでモルテンの白い伝票 QR をカメラと BCST-47 にかざし、「納品書兼現品票のQRコードではありません」が出る(= デコードできる)ことを確認する。出なければ読取距離・ガイド枠の調整を先に検討する。
  2. iOS/Android: 共通フィクスチャに仕向地を追加し、照合コアを仕向地対応にする(shared/test-fixtures) #85 共通フィクスチャ + 照合コア(iOS/Android、shared/** は両 CI を起動するため同 PR)
  3. iOS: 履歴ストアに仕向地・箱識別子・納品番号ごとの集計を追加する #86 iOS 履歴ストア
  4. iOS: セッションの仕向地ロックと読取ゲート・結果表示をモルテンに対応させる #87 iOS 仕向地ロック・読取ゲート・結果表示
  5. iOS: 履歴詳細と PDF にモルテンの解析項目を記載する #88 iOS 履歴詳細・PDF
  6. Android: Room v3 とチェックポイントにセッションの仕向地を持たせる #89 Android Room v3・チェックポイント
  7. Android: ScanReducer の仕向地ロック・箱識別子・納品番号ごとの箱数に対応する #90 Android Reducer・画面・計測テスト
  8. Android: 履歴詳細と PDF にモルテンの解析項目を記載する #91 Android 履歴詳細・PDF
  9. iOS/Android: 仕向地対応の docs を更新し、実物の伝票・ラベルで通し確認する #92 docs 更新と実物での通し確認

前提: 実 66 桁 QR 12 組のフィクスチャ差し替え(#83)が master に入っている。

受け入れ条件

  • モルテンの伝票 QR(末尾空白あり/なし)と 4-2-3 / 4-2-4 のラベルが両 OS・カメラ/BCST-47 で一致する(自動テストとフィクスチャでは確認済み。実物の伝票・ラベルでの確認は iOS/Android: 仕向地対応の docs を更新し、実物の伝票・ラベルで通し確認する #92
  • 同じ納品番号の 2 箱目が「納品番号 ○○ は本セッションで 2 箱目(累計 ○個)」として記録され、同じ箱の再読取だけが「すでに照合済み」になる
  • セッションの仕向地が最初の QR で固定され、別仕向地の QR は仕向地名入りの案内で弾かれる。履歴に仕向地が残る
  • 履歴詳細と PDF に受注者・部品番号・納品番号・納入先・TY ロケーション・供給先・収容数・納入指示日(JUMP)・時刻・管理コードが出る
  • 澤井製作所の既存テスト(単体・UI・計測)が文言・件数ともに変更なしで通る
  • shared/test-fixtures/matching-cases.json に molten ケースが入り、Swift / Kotlin 双方が同じ結果を返す
  • docs/PRODUCT_SPEC.mdCLAUDE.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 の実物確認のみ。

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions