ロット管理と容器管理
ロット(Lot)管理と容器(Container)管理の仕組み。ロットNo命名規則、工程別トレーサビリティ、容器ステータスの遷移を解説します。
概要
ロット管理と容器管理は、製造工程における 仕掛品(WIP)の追跡とトレーサビリティ を実現するための仕組みです。ERPNextの標準 Batch 機能に加え、独自の Container(容器) DocType を用いた「Shadow WIP」アーキテクチャで、工程ごとのロット追跡を行います。
画面URL:
- ロット実績入力:
/app/lot-work-entry - 容器台帳:
/app/container-commit-view - トレーサビリティグラフ:
/app/commit-link-graph - 容器在庫台帳: Container Stock Ledger レポート
ロットNo の命名規則
ロットNoは、製造段階に応じて3種類の命名体系を使い分けます。
| 種類 | Prefix | フォーマット | 例 | 解説 |
|---|---|---|---|---|
| 原料ロット | R | R{YYMMDD}-{seq} | R260302-01 | R(Raw) + 年月日 + 入庫順連番 |
| 仕掛品ロット | W | W{YYMMDD}-{WSPrefix}{seq} | W260302-A1 | W(WIP) + 年月日 + 設備Prefix + 連番 |
| 完成品ロット | なし | {YYMMDD}-{WSPrefix}-{seq} | 260302-A-01 | 年月日 + ラインPrefix + 連番 |
WSPrefix は Workstation マスタの custom_lot_prefix(または container_prefix)フィールドで定義します。
例:
- 浸漬ライン =
A - 蒸煮ライン =
B - 接種室 =
C - 発酵室 =
D
容器(Container)の概念
Container DocType
Container は物理的な「容器」ではなく、ロット単位のWIP状態を追跡する仮想的なエンティティ です。
| フィールド | 説明 |
|---|---|
container_id | 一意の識別子(= ロットNo) |
container_type | 種別(Lot / Receipt 等) |
status | 現在のステータス |
qty | 数量 |
uom | 単位 |
batch_no | ERPNext の Batch とのリンク |
lot_no | ロット番号 |
wip_cd | WIP品目コード(例: FG-BLK-WARA-SHINSEKI) |
final_item_cd | 最終製品の品目コード |
work_order | 紐づく Work Order |
previous_operation | 直前に完了した工程名 |
parent_lot_no | 前工程のロットNo(トレーサビリティ用) |
fermenting_since | 発酵開始日時(バッチ工程用) |
fermenting_location | 発酵場所(バッチ工程用) |
Container のステータス遷移
AVAILABLE → STUCK → AVAILABLE → CONSUME
↑ ↓
└─ STUCK ─┘(非連続工程の繰り返し)
| ステータス | 意味 | 状況 |
|---|---|---|
| AVAILABLE | 利用可能 | 工程完了後、次の工程で使用可能 |
| STUCK | 処理中 | 非連続工程(発酵等)で投入中。払出まで待機 |
| CONSUME | 消費済み | 次工程で消費された、または出荷済み |
製造フロー(工程別ロット追跡)
全体の流れ
graph LR
subgraph RM受入
A["R260302-01<br/>(黒豆 3000g)"]
end
subgraph 初工程_浸漬
B["W260302-A1<br/>(浸漬完了 60個)"]
end
subgraph 中間工程_蒸煮
C["W260302-B1<br/>(蒸煮完了 60個)"]
end
subgraph 中間工程_接種
D["W260302-C1<br/>(接種完了 60個)"]
end
subgraph 最終工程_発酵
E["260302-D-01<br/>(発酵完了 60個)"]
end
A -->|parent| B
B -->|parent| C
C -->|parent| D
D -->|parent| E各ステップの詳細
1. 原材料受入(RM受入)
| 項目 | 動作 |
|---|---|
| ロットNo | R{YYMMDD}-{seq} で自動発番 |
| Container | 受入Container を AVAILABLE で作成 |
| ERPNext | Purchase Receipt / Stock Entry で在庫計上 |
2. 初工程(complete_lot_operation, idx=1)
| 項目 | 動作 |
|---|---|
| ロットNo | W{YYMMDD}-{WSPrefix}{seq} で新規発番 |
| 新Container | 新規 Lot Container を AVAILABLE で作成 |
| 前Container | 受入Container → CONSUME に遷移 |
| RM消費 | Material Issue Stock Entry を自動作成 |
| 親ロット | parent_lot_no = 原料ロットNo |
3. 中間工程(complete_lot_operation, idx=2,3,...)
| 項目 | 動作 |
|---|---|
| ロットNo | W{YYMMDD}-{WSPrefix}{seq} で 新規発番 |
| 新Container | 新規 Lot Container を AVAILABLE で作成 |
| 前Container | 前工程の Container → CONSUME に遷移 |
| 親ロット | parent_lot_no = 前工程のロットNo |
4. 非連続工程(バッチ工程:発酵等)
非連続工程は IN(投入) と OUT(払出) の2段階で処理します。
INフェーズ(start_batch_operation):
| 項目 | 動作 |
|---|---|
| ロットNo | W{YYMMDD}-{WSPrefix}{seq} で発番 |
| Container | STUCK ステータスで作成 |
| メタデータ | fermenting_since(開始日時)、fermenting_location(場所)を記録 |
OUTフェーズ(complete_batch_operation):
| 項目 | 動作 |
|---|---|
| STUCK Container | → CONSUME に遷移 |
| 新Container | 新規 AVAILABLE Container を作成 |
| 親ロット | parent_lot_no = STUCK ロットNo |
5. 最終工程(complete_lot_work)
| 項目 | 動作 |
|---|---|
| ロットNo | {YYMMDD}-{WSPrefix}-{seq} で完成品ルールで発番 |
| Container | 完成品 Container を AVAILABLE で作成 |
| 前Container | → CONSUME に遷移 |
| ERPNext | Manufacture Stock Entry を自動作成 |
| Batch | ERPNext Batch を自動作成・ロットNoと紐付け |
6. 出荷
| 項目 | 動作 |
|---|---|
| FG Container | → CONSUME に遷移 |
ロット実績入力画面の操作
画面構成(Lot Work Entry)
URL: /app/lot-work-entry
- Work Order 選択: 対象の製造指図を選択
- 工程一覧: BOM に登録された工程が順序付きで表示
- 工程別操作: 各工程にて
連続工程の完了操作
- 工程を選択
- 完了数量を入力
- (初工程のみ)消費材料を選択(バーコードスキャンまたはリストから選択)
- 「工程完了」ボタンをクリック
- ロットNoが画面に表示され、ラベル印刷ボタンも表示される
非連続工程(バッチ工程)の操作
投入(IN)操作:
- 工程を選択(バッチ工程アイコンが表示されている工程)
- 投入数量を入力
- 場所(発酵室の位置等)を入力(任意)
- 「投入」ボタンをクリック
- STUCK 状態のロットが作成される
払出(OUT)操作:
- 投入中の工程を選択(「処理中」表示)
- 良品数量を入力
- 「完了」ボタンをクリック
- 新しいロットNoが発番される
最終工程の完了操作
- 全中間工程が完了していることを確認
- 最終工程を選択
- 完成数量を入力
- 「製造完了」ボタンをクリック
- Manufacture Stock Entry が自動作成される
- 完成品ロットNoとラベル印刷URLが表示される
取消(Undo)操作
直前の工程完了を取り消すことができます:
- 設備IDを指定
- 「取消」ボタンをクリック
- 最後のContainer Commitが取消される
トレーサビリティ
親子関係の追跡
各ロットには parent_lot_no フィールドがあり、前工程のロットを参照します。これにより、原料から完成品までの完全なトレーサビリティチェーンが構築されます。
R260302-01 (原料:黒豆)
└─ W260302-A1 (浸漬) ← parent_lot_no = R260302-01
└─ W260302-B1 (蒸煮) ← parent_lot_no = W260302-A1
└─ W260302-C1 (接種) ← parent_lot_no = W260302-B1
└─ 260302-D-01 (発酵) ← parent_lot_no = W260302-C1
Container Commit と Link
Container の状態変更は Container Commit として記録されます。各 Commit には Container Link が紐づき、どの Container がどのように変化したかが追跡可能です。
| Commit イベント | 説明 |
|---|---|
| PRODUCE | 新しい Container の作成(工程完了) |
| CONSUME | Container の消費(次工程への投入) |
| STUCK | Container の一時停止(非連続工程の投入) |
グラフ表示
/app/commit-link-graph で、ロットNo を起点に前後の工程を視覚的にたどることができます。原料の仕入先情報、各工程での数量変化、最終製品の出荷先まで、一つのグラフで確認可能です。
原価計算との関係
Container Commit と Link は、月次原価計算のパイプラインで以下のように使用されます:
| Step | 使用するデータ | 目的 |
|---|---|---|
| Step 1 | Container Commit + Link | WIPイベントの抽出 |
| Step 2 | Container.final_item_cd | 最終製品の特定 |
| Step 3 | CONSUME/PRODUCE Link | FIFO転がし計算の入出庫イベント |
| Step 4 | Container Link.consumed_wip_cd | 材料別コスト按分 |
Tips
- ラベル印刷: 工程完了時に表示されるラベルURLから、バーコード付きラベルを印刷できます(Code39形式)
- バーコードスキャン: ロットNo のバーコードをスキャンして、前工程ロットの自動解決が可能です
- 冪等性: 同じ工程を2回完了しても重複作成されません(冪等チェック機能)
- 工程飛ばし防止: 前工程が未完了の状態で次工程を完了しようとするとエラーになります
- 品質データ: 各工程完了時に品質メモ(quality_note)とスクラップ数量を記録できます