Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 10 additions & 4 deletions Spec.md
Original file line number Diff line number Diff line change
Expand Up @@ -121,6 +121,8 @@
改訂120: 2026-09-23(5.1節:MBOMの代替部品グループの整合を登録時に確かめるようにした。グループの無い代替部品の行、主材料の無いグループ、主材料が2つ以上あるグループを登録できた。主材料が無いとバックフラッシュ(代替部品の行を消費しない。3.9節)がそのグループの部材を何も引かず、主材料が2つ以上だと代わりになるはずの部材を両方とも原単位ぶん引く。グループの無い代替部品はどの主材料の代わりかが決まらない。判定は `ProductStructurePolicy.CheckAlternativeGroups` に置き、単票APIとマスタCSV取込の両方から呼ぶ。グループ名は前後の空白を除いて比べ、その形で保存する(空白違いで別グループになるのを防ぐ)。既存のデータは直さない(次にそのMBOMを保存するときに判定される))
改訂121: 2026-09-23(3.1節:MBOMの改訂(A-40-10-05 設計変更)の監査ログに変更前後の明細を残すようにした。これまでは `items=件数` だけで、一括置換のため何を変えたか追えなかった。明細は子品目をIDではなくコードで残す(品目を無効化・改名しても読めるように)。マスタCSV取込では種別ごとの取込ログに加えて親品目ごとに同じ形のログを書く(CSVが追跡の抜け道にならないように)。監査ログは書くたびに保存するため、取込の途中では書かず、全行の検証が通って保存した後にまとめて書く)
改訂122: 2026-09-23(5.7節「指図展開時のマスタ固定」に、予定材料の標準不良率による割り増しと消費工程の固定(改訂117・118)を追記した。あわせてマスタCSV・実績CSVの列の案内(`AlternativeGroup`・`IsAlternative`・`Backflush`)、サンプルの説明、利用者ガイド(帳票・用語・マスタのCSV・部材投入)を改訂117〜121に合わせた)
改訂123: 2026-09-23(工程管理項目の自由記述(`Routing.ControlItems`)の長さの上限を、工順・作業指示・API・マスタCSVで1000文字に揃えた。工順が1000文字、展開先の作業指示が500文字だったため、501文字以上を書いた工順は PostgreSQL / SQL Server で指図の展開に失敗していた(SQLiteは長さを守らせないため表に出なかった)。上限を超える記述は工順の登録で拒否する)
改訂124: 2026-09-23(工程管理項目を工順(BOP)の工程ごとに紐付けるようにした(`RoutingControlItem`。I-30-20-10)。これまでは項目側の対象品目/対象工程に「または」で合致する項目を展開時に自動選択していたため、品目を指定した項目がその品目の全工程の作業指示に載り、品目と工程の組合せや、同じ工程が2回ある工順の工程ごとの条件を表せなかった。改訂48の「工順に明示的な紐付けを持たせない」方針を改め、`ControlItem` から対象品目・対象工程を削除した(作業手順書と同じく紐付けは工順側だけに持つ)。紐付けられるのは有効な項目だけで、紐付け中の項目は単票APIでもCSV取込でも無効化できない(`MasterDeactivationPolicy`)。API は `RoutingStepRequest.ControlItemIds`、CSV は工程管理項目から `TargetProductCode`・`TargetProcessCode` を外し、工順に `ControlItemCodes`(セミコロン区切り)を追加。`Routing.ControlItems` の自由記述は補足として残す。5.1節・5.7節に反映)
参考: みんなのMES(min-MES) https://min-mes.com/ / OSS: https://github.com/mihatama/open-mes-project

---
Expand Down Expand Up @@ -407,14 +409,15 @@ DBはバックエンド(MesApp.Api)のみが保持し、既定はSQLiteと
| Product(品目マスタ) | 品目コード、品目名、単位、規格、品目区分(製品/半製品・中間品/部材)、標準不良率(0〜99.99%。指図の予定材料を割り増す。A-40-10-04)、**既定ロケーション**(推奨ロケーション指示の第一候補。D-10-30-03) |
| BomItem(MBOM明細) | 親品目ID、子品目ID(部材)、必要数量(親1単位あたり)、内外製区分、代替部品グループ、**代替部品フラグ**(同一グループ内の主材料でない行。A-40-10)、**消費工程**(工順の工程順序。未指定なら最終工程。B-40-10-09)。品目自身を子品目にする行と、明細をたどって親品目へ戻る循環は登録できない(単票API・CSVで同じ判定。`ProductStructurePolicy.FindBomCycle`)。代替部品グループは主材料(代替部品フラグの無い行)をちょうど1つ持ち、代替部品フラグの行はグループを必須とする(`CheckAlternativeGroups`。グループ名は前後の空白を除いて保存・比較) |
| Process(工程マスタ) | 工程コード、工程名、工程区分(内製/外注) |
| Routing(工順/BOP) | 品目ID、工程順序、工程ID、標準作業時間(**1個あたり**)、標準段取り時間(**1回あたり**)、必要スキルID、**候補設備**・治工具、**作業区**、工程管理項目、チェックリストID、**作業手順書ID**(A-40-20、I-30-20)<br>標準時間の予実(3.2節 B-60-10-05)は 段取り時間+作業時間×数量 で予定を出す |
| Routing(工順/BOP) | 品目ID、工程順序、工程ID、標準作業時間(**1個あたり**)、標準段取り時間(**1回あたり**)、必要スキルID、**候補設備**・治工具、**作業区**、**工程管理項目(紐付け)**と補足(自由記述)、チェックリストID、**作業手順書ID**(A-40-20、I-30-20)<br>標準時間の予実(3.2節 B-60-10-05)は 段取り時間+作業時間×数量 で予定を出す |
| RoutingEquipment(工順の候補設備) | 工順ID、設備ID(同一工順で一意)。同じ工程を複数の装置で実行できる場合に列挙し、差立ではこの中から1台を選ぶ(B-10-20-02) |
| RoutingControlItem(工順の工程管理項目) | 工順ID、工程管理項目ID(同一工順で一意)。その工程で記録する製造条件を指す。指図展開時にこの紐付けどおり作業指示へ指示値を写す(I-30-20-10、B-30-30-04) |
| WorkCenter(作業区/資源階層) | 作業区コード、名称、段(工場/ライン/エリア/作業区)、上位の資源、有効フラグ。工場・ライン・エリア・作業区を1つの自己参照ツリーで持ち、資源構成全体(BOR)を表す。最下段の作業区が作業の管理単位(I-10-20-02) |
| Equipment(設備台帳/BOE) | 資産番号、設備名、**設置場所(作業区)**、状態(稼働可能/停止中/保全中/廃棄・除却。差立は稼働可能のみ)、保全タイプ(カレンダ/時間/回数ベース)、保全閾値、**保全部品(`EquipmentPart`)**(E-10-10、I-10-20)。`MaintenanceParts`(自由記述の保全部品)と`Site`(自由記述の設置場所)は作業区を整備するまでの旧項目として残すが、**設置場所の正は作業区参照**とする |
| EquipmentPart(設備の保全部品) | 設備ID、部品の品目ID(同一設備で一意)、管理区分(資産管理部品/消耗品)、1回あたり数量、備考。自由記述では消耗材の使用状況(E-20-10-04)を集計できないため品目マスタを参照する(E-10-10-01) |
| Tool(治工具マスタ) | 治工具コード、名称、種別(型/切削工具/検査工具等)、寿命閾値(使用回数/時間)、状態(使用可能/使用中/メンテナンス中/廃棄。**使用中は引当(`ToolIssue`)から決まり、マスタ編集・CSV取込では付けも外しもできない**。引当中の治工具は使用可能にできず、メンテナンス中・廃棄への変更はできる)(E-60) |
| Location(ロケーション) | ロケーションコード、倉庫/エリア区分(部材倉庫/工程内/製品倉庫/出荷場)、**所属する作業区**、棚番(D-50-20-01) |
| ControlItem(工程管理項目) | 工程管理項目コード、名称、単位、対象品目/工程、**指示値**、許容下限/上限、版数、有効フラグ。温度・回転数など製造時に記録すべき条件の定義(B-30-30-04)。検査項目と同じ形にしているのは、「指示値と実績値」の関係が「検査パラメータと検査結果」と同じ構造で、判定の考え方も揃うため |
| ControlItem(工程管理項目) | 工程管理項目コード、名称、単位、**指示値**、許容下限/上限、版数、有効フラグ。対象品目・対象工程は持たず、工順(BOP)の工程から紐付ける(`RoutingControlItem`)。温度・回転数など製造時に記録すべき条件の定義(B-30-30-04)。検査項目と同じ形にしているのは、「指示値と実績値」の関係が「検査パラメータと検査結果」と同じ構造で、判定の考え方も揃うため |
| InspectionItem(検査項目・基準) | 検査項目コード、対象品目/工程、検査種別(受入/工程内/完成品/サンプル)、規格値(上限/下限/基準値)、検査方法、サンプリング数、版数(C-10-10) |
| InspectionDevice(検査機・測定器) | 検査機コード、名称、製造番号、設置場所、最終校正日、**次回校正期限**、校正周期(日)、備考、状態(C-20-50-03)。校正期限切れ・無効化された機器は検査実績に使えない |
| InspectionDeviceCalibration(校正実施記録) | 検査機ID、校正日、次回期限、結果・所見、実施者(C-20-50-03)。現在値の上書きだけでは「いつ誰がどの結果で校正したか」が残らないため履歴に残す |
Expand Down Expand Up @@ -511,12 +514,15 @@ DBはバックエンド(MesApp.Api)のみが保持し、既定はSQLiteと
- **製造条件の指示値と実績値**:製造条件(温度・回転数など)は「こう作れ」という**指示値**と「実際はこうだった」という**実績値**の対になる。指示値と許容範囲を持たないと、実績を記録しても逸脱かどうかを判定できない
- 条件の定義と指示値・許容範囲は`ControlItem`(工程管理項目)に持つ。**検査項目(`InspectionItem`)と同じ形**にする:指示値と実績値の関係は検査パラメータと検査結果と同じ構造であり、判定・版管理・スナップショットの考え方をそのまま適用できるため
- **指示値は許容範囲の内側であることを登録時に確認する**。範囲外を許すと、指示どおりに作った実績が逸脱と判定されてしまう
- **工順に明示的な紐付けは持たせない**。検査基準と同じく**対象品目/工程に合致する有効な項目を指図展開時に自動選択**し、`WorkOrderControlItem`へ写す。工順側に選択リストを持たせると、品目にも工程にも当たる条件をどちらに登録するかで運用が割れるため
- **どの工程で記録するかは工順(BOP)の工程ごとに紐付ける**(`RoutingControlItem`。I-30-20-10「BOPに登録された作業に工程管理条件を定義する」)。指図展開時は紐付けどおりに`WorkOrderControlItem`へ写す
- 項目側に対象品目・対象工程を持たせて自動で選ぶ方式(改訂48)はやめた。品目を指定した項目がその品目の**全工程**の作業指示に載り、「品目Xの加熱工程だけ」を表せず、**同じ工程が2回ある工順**では工程ごとに条件を変えられなかったため
- 項目側には対象を持たせない(作業手順書と同じ。両側に持たせるとどちらで紐付けたかで運用が割れる)。品目ごとに指示値が違う条件は、品目ごとに別の項目として登録する
- 紐付けられるのは有効な項目だけで、**紐付け中の項目は無効化できない**(`MasterDeactivationPolicy`。単票APIとCSV取込の両方で同じ条件)。無効化を許すと、使わせないはずの条件が以降の作業指示へ写り続ける
- スナップショットを取る理由は検査基準(下記)と同じ。**マスタを改訂しても展開済みの作業指示の指示値・許容範囲・版数は変わらない**
- **実績は指示と照合して逸脱を判定する**。判定は1か所(`Api/Policies/ControlItemDeviationPolicy`)に集約し、基準はマスタの現在値ではなく作業指示のスナップショットを使う(現在値で判定すると同じ実績の合否が後から変わる)
- **判定しない場合を「範囲内」と混同しない**。数値でない記録(定性的な記録)と、上下限をどちらも持たない項目(記録だけが目的の条件)は判定対象外とし、逸脱フラグはnullのままにする。falseにすると、条件を決めていない項目まで合格扱いになる
- 逸脱は監査ログの`detail`にも内容を残し、ロットの履歴(H-30-10-04)では**逸脱した記録だけ**を出す(範囲内まで並べると見るべきものが埋もれる)
- `Routing.ControlItems`(自由記述)は**当面残す**。既存データの表示経路であり、工程管理項目マスタを整備していない運用では唯一の記録手段になる。マスタへ移行し終えた運用で不要になった時点で削除を判断する
- `Routing.ControlItems`(自由記述)は**工程管理項目の補足**として残す。指示値を持たない確認事項や外注の内容など、工程管理項目にもチェックリストにも当てはまらない記述の置き場になる。作業指示へはそのまま写す(上限1000文字)
- **製造品軸と設備軸の紐付け(2軸データ)**:製造の実績は「どのロットをどう作ったか」(製造品軸)と「そのとき設備はどうだったか」(設備軸)の2つの軸で残り、**両者の交差点**が品質不良の原因究明に効く。交差点を作るのは`EquipmentLog.対象作業指示ID`だけなので、これを欠かすと設備の状態を時刻の重なりから推測するしかなくなる
- 稼働報告(B-40-20-01)では作業指示を**任意**で指定する。段取り・保全・アイドルのように作業指示に紐づかない稼働区間もあるため必須にはしない
- ロットの履歴(H-30-10-04)は、そのロットを産出した作業指示に紐づく稼働区間を**設備稼働履歴**として返す。紐付けのない稼働は履歴に出ない(出すと別のロットの設備状態を混ぜて見せることになる)
Expand Down
Loading
Loading