diff --git a/Spec.md b/Spec.md
index 684d3ec..19a62e9 100644
--- a/Spec.md
+++ b/Spec.md
@@ -127,6 +127,14 @@
改訂126: 2026-09-23(検査指示がロットの保留を外す抜け道を塞いだ。ロットを拘束する検査指示(サンプル検査以外)は、ロットが正常か検査待ちのときだけ発行でき、再検査に限り不良ロットにも発行できる。同じロットに判定前の検査指示を重ねて発行しない。取消はロットを一律に正常へ戻していたのを、その指示が拘束する前のステータス(状態履歴の最初の拘束)へ戻すようにした。これまでは保留・不良のロットに検査指示を出して取り消すだけで正常になり、判定前の指示が2件あると先に合格した方でロットが使えるようになっていた。判定は `InspectionLotPolicy`。5.7節に反映)
改訂127: 2026-09-23(検査の判定を厳格にした。測定値と規格値で合否が決まる項目で、手で指定した合否が自動判定と食い違えば拒否する(これまでは手の指定が優先され、規格外の測定値でも「合格」と指定すれば合格になった)。規格外の品を使うなら不適合の特採で処置する。実績の訂正も同じ条件で合否を決める(訂正は合否を直接書き換えていた)。サンプリング数を総合判定の下限とし、その数以上のサンプルの実績がそろうまで判定できない(これまでは参考値で、1件でも判定できた)。判定は `InspectionJudgmentPolicy`。サンプルCSVの検査基準のサンプリング数を実績サンプルに合わせた。5.7節に反映)
改訂128: 2026-09-23(再検査(C-20-50-01)を、そのロットの直近の判定済みの検査をやり直すものとし、検査項目を引き継ぐようにした(版はいまの基準)。種別で完成品の基準を選んでいたため、受入ロットの再検査は基準が見つからず発行できなかった。判定済みの検査が無いロットには発行しない。あわせて、取消済みの作業指示への工程内検査の発行、作業指示と別品目のロットの指定、取消済みの検査の実績の訂正を拒否する。5.7節に反映)
+改訂129: 2026-09-23(**着手時にもスキル・資格を照合する**ようにした(F-20-30-01)。照合は差立(作業員割当)にしか無く、着手は差立を省略できる(小規模運用)ため、差立を省いた運用・割当者と異なる者の着手・差立後の有効期限切れのいずれでも、必要スキルを持たない者が作業できていた。照合するのは**割当者ではなく実際に着手する者**。判定は `Api/Policies/SkillQualificationPolicy` に集約し、差立と着手で同じ条件を使う。3.2節・3.6節に反映)
+改訂130: 2026-09-23(**保全手順書に必要スキル・資格を持たせ、保全実績の登録時に実施者と照合する**ようにした(`MaintenanceProcedure.RequiredSkillId`。F-20-30-01)。3.6節は「差立・検査・保全の各業務で照合」と書いていたが、保全・検査には必要スキルの項目自体が無かった。保全指示は手順書を版数ごと固定しないため、照合は手順書の現在値を使う。判定は差立・着手と同じ `SkillQualificationPolicy`。**検査側は未実装のまま3.6節にそう明記した**(検査基準の見直しが別ブランチで進行中のため、合流後に扱う)。5.1節・3.6節に反映)
+改訂131: 2026-09-23(**管理図と工程能力指数を実装した**(`api/quality/control-chart`。C-50-10-01〜02)。3.3節は「初期は基本的な管理図表示」を実装対象とし、6.1節の品質分析画面にも管理図があったが、実装は無かった。検査実績の測定値を検査指示ごとの群にまとめ、X̄-R(群の大きさ1なら X-Rs)管理図と Cp・Cpk を返す。新規エンティティは無い。計算は `Api/Services/ControlChartCalculator`(係数表は JIS Z 9020-2)。品質分析画面に検査項目を選ぶ管理図の欄を追加した。3.3節・6.1節に反映)
+改訂132: 2026-09-23(**製造リードタイムの分布を生産性モニタリングに追加した**(`api/productivity/lead-time`。B-60-10-05)。納期の管理が指図の納期超過フラグだけで、実績リードタイムのばらつきと異常値が見えなかった(実践的MES導入ガイド 8.3.2 の納期実績の見える化)。着手・完了は状態履歴ではなく作業の記録の時刻で決め、製造日の差で数える。新規エンティティは無い。3.2節・6.1節に反映)
+改訂133: 2026-09-23(**標準時間の見直し候補を生産性モニタリングに追加した**(`api/productivity/standard-time-review`。B-60-10-05)。標準時間の予実は作業指示ごとに並ぶだけで、工順マスタを見直すきっかけにつながっていなかった(実践的MES導入ガイド 8.3.2(4):標準時間などの業務パラメータは定期的に再設計する)。工順の工程ごとに実績の中央値をマスタの現在値と比べ、件数としきい値で候補を挙げる。マスタは書き換えない。新規エンティティは無い。3.2節・6.1節に反映)
+改訂134: 2026-09-23(1.3節に**エネルギー管理を[将来拡張]とする**ことを明記した。仕様にエネルギーの記述が無く、対象かどうかが読めなかった(実践的MES導入ガイド 3.4.2・4.4.7・7.2.2 は、MES の役割を FEMS へ製造オーダ別の分母を渡すことと位置づける)。計測・総量監視・ユーティリティ制御は FEMS/FMCS の領域として持たず、実装する場合は設備×期間の使用量をCSVで受け取り稼働区間の時間比で作業指示へ按分する形とした。機能の追加・変更は無い)
+改訂135: 2026-09-23(**検査項目・基準に必要スキル・資格を持たせ、検査実績の登録時に検査員と照合する**ようにした(`InspectionItem.RequiredSkillId`。F-20-30-01)。改訂130で保全を実装した際、検査の見直し(改訂125〜128)と衝突するため後回しにしていたもの。必要スキルは発行時に `InspectionOrderItem` へ写し(作業指示の必要スキルと同じ)、発行後にマスタを変えても発行済みの検査の照合条件は変わらない。写す値なので、CSV取込で変えると版数が上がる。判定は差立・着手・保全と同じ `SkillQualificationPolicy`。実績の訂正では照合しない。マスタCSVの検査項目に `RequiredSkillCode` 列を追加(列が無ければ現在値のまま)。3.6節・5.1節・5.4節に反映)
+改訂136: 2026-09-23(画面の目視確認で見つかった2点を直した。①製造リードタイムの異常値判定で**四分位範囲を1日を下限**にした(多くの指図が同じ日数だと範囲が0になり、1日長いだけの指図まで異常値に出ていた。3.2節)。②スキル照合の文面を「作業者」から「**担当者**」に改めた(差立・着手に加え、保全の実施者・検査員にも同じ文面が出るため。利用者ガイドの例とトラブルシューティングも合わせた))
参考: みんなのMES(min-MES) https://min-mes.com/ / OSS: https://github.com/mihatama/open-mes-project
---
@@ -162,6 +170,8 @@ MES機能のクライアントは**Webブラウザ(Blazorクライアント)
HSE〔G〕はチェックリスト項目への健康衛生・安全項目の組み込み(G-20-20-02、G-30-20-03)で対応する。生産技術〔I〕はBOP/BOE情報のMES登録(I-10-20-02、I-30-20-02/13)・保全台帳整備(I-10-20-05)・工程変更反映(I-50-30-01/03)、設計〔J〕は設計変更反映時の在庫・生産状況確認(J-40-40-01/03)として各モジュールに包含する。購買・資材〔K〕・工場経理〔L〕は対象外。
+**エネルギー管理(HSE〔G〕の環境)は[将来拡張]とする。** 電力・ガス・圧縮空気などの計測と総量の監視、ユーティリティ設備の制御は FEMS/FMCS の領域であり、本システムは持たない。MES の役割は、FEMS が持たない**「どの製造指図・品目・工程で使ったか」の分母**(設備ごとの稼働区間と、そこに紐づく作業指示・産出数。`EquipmentLog.WorkOrderId`)を渡すことにある。実装する場合は、設備×期間の使用量を FEMS からCSVで受け取り、同じ設備の稼働区間の時間比で作業指示へ按分して、品目別・指図別の原単位(kWh/個など)を出す形とする(OEEの按分と同じ考え方。3.5節)。計測値を直接収集する経路(センサー・PLC)は作らない。
+
**業界固有の規制対応も対象外とする。** とくに医薬・医療機器で求められる電子記録・電子署名規制(21 CFR Part 11 / EU Annex 11)には対応しない(7.6節)。監査ログを持つことと規制に適合することは別である。
---
@@ -247,20 +257,22 @@ HSE〔G〕はチェックリスト項目への健康衛生・安全項目の組
### 3.2 製造実行〔B〕
- **製造指図の工程展開・作業指示化**:製造指図を工順(BOP)に基づき工程単位の作業指示に展開(B-10-10-01)、受領・内容確認(B-10-10-02〜03)、産出ロットNo採番(B-10-10-05。自動採番:品目コード+日付+連番、または手入力。シリアルNo単位は将来拡張)
-- **差立(ディスパッチング)**:作業指示への作業員割当(B-10-20-01。スキル・資格照合 F-20-30-01 を伴う)、工程・設備割当(B-10-20-02。新しく割り当てられる設備は状態が稼働可能のものだけ。割当済みの設備のまま着手順だけを変える差立は通す)、着手順割当(B-10-20-03)
+- **差立(ディスパッチング)**:作業指示への作業員割当(B-10-20-01。スキル・資格照合 F-20-30-01 を伴う。照合は着手時にも着手する者に対して行う)、工程・設備割当(B-10-20-02。新しく割り当てられる設備は状態が稼働可能のものだけ。割当済みの設備のまま着手順だけを変える差立は通す)、着手順割当(B-10-20-03)
- **作業指示の配布・確認**:作業指示の承認・配布(B-10-30-01〜02)、指示内容(構成部品・手順等)の閲覧(B-10-30-03)、作業指示書・現品票等の帳票出力(B-10-30-04)
- **前段取り・セッティング**:始業前点検・自主保全記録(B-20-10-01〜02)、部材引当・受領・構成確認(B-20-20-01、B-20-20-03〜04)、**治工具引当・払出指示・受領確認(B-20-30-01〜03。引当→払出(受領確認)→返却を `ToolIssue` で追う。無効・廃棄・メンテ中・寿命到達・他の作業指示に引当中の治工具は引き当てられず、判定は引当時と払出時の両方で行う)**、製造条件/設備プログラム展開・設備作業前点検(B-20-40-01〜02)、段取り指示確認〜着手〜完了の記録(B-20-50-01〜05。開始/終了時刻・実施者・異常報告)
- **チェックリスト**:共通事項・工程/品目別制約・作業資格のチェック実施記録(B-30-10-01〜03)。チェックリストマスタにHSEの健康衛生・安全項目を組み込み可能(G-20-20-02、G-30-20-03)
- **部材投入**:投入部材の数量・ロットNo・投入時刻の記録(B-30-20-01)。**投入部材はMBOM照合を行い、作業指示の品目のMBOMに定義されていない品目は投入不可**とする(誤投入防止。3.9節「部材投入の照合」)。秤量機等との自動連携(B-30-20-02)は[将来拡張]とし、初期はCSV取込で代替
-- **製造実施**:製造着手(B-30-30-01)、作業時間記録(B-30-30-02、F-30-20-01)、製造条件データの記録(B-30-30-04。手入力/CSV取込。設備自動収集は[将来拡張])、作業完了報告(B-30-30-06)
+- **製造実施**:製造着手(B-30-30-01。差立を省略しても着手できるが、必要スキルのある作業指示は着手する者のスキル・資格を照合する)、作業時間記録(B-30-30-02、F-30-20-01)、製造条件データの記録(B-30-30-04。手入力/CSV取込。設備自動収集は[将来拡張])、作業完了報告(B-30-30-06)
- **製造実績報告**:出来高(良品数・不良数、および不良数の内訳としての**廃棄数・再作業待ち数**・**不良理由別の内訳**)報告(B-40-10-01)、半製品・製品の在庫計上(B-40-10-02)、進捗・時間報告(B-40-10-03〜04)、完了時の製造データ・トラブル履歴・部材欠品報告(B-40-10-05〜07)、部材投入実績の事後報告(B-40-10-08)、**バックフラッシュ**(MBOMと完了数量から部材消費を自動算出し在庫引落し。B-40-10-09)、製造完了承認(B-40-10-10)
- **設備稼働報告**:稼働時間・停止時間・停止原因の記録(B-40-20-01〜02。手入力。自動収集は[将来拡張])
- **品質実績報告**:逸脱/品質不具合の記録(B-40-30-01)、不良原因の選択式記録+詳細(文章・写真)(B-40-30-02)、不良部材報告(B-40-30-03)、不良品在庫の計上・引落し(B-40-30-04)
- **後段取り**:指示確認〜着手〜実行〜完了の記録(B-40-40-01〜05)
- **工程間搬送**:半製品の搬送・移動指示と移動実行(B-50-10-01〜02)、製品の梱包・包装(B-30-30-05、B-50-20-02)、完成品の倉庫・出荷場への入庫(B-50-20-03)
-- **工程進捗管理**:工程毎の完了状況把握(B-60-10-01)、製造トラブルの発生報告・対応履歴記録(B-60-10-02〜04。状態は発生→対応中→完了の前進のみとし、完了からは理由を対応履歴に残したときだけ対応中へ戻せる。発生へは戻さない)、生産性モニタリング(歩留まり・直行率・標準時間予実。B-60-10-05)
+- **工程進捗管理**:工程毎の完了状況把握(B-60-10-01)、製造トラブルの発生報告・対応履歴記録(B-60-10-02〜04。状態は発生→対応中→完了の前進のみとし、完了からは理由を対応履歴に残したときだけ対応中へ戻せる。発生へは戻さない)、生産性モニタリング(歩留まり・直行率・標準時間予実・製造リードタイム・標準時間の見直し候補。B-60-10-05)
- **直行率**=良品数÷(良品数+不良数)。**歩留まり**=(良品数+リワーク良品数)÷(良品数+不良数)。リワーク指図の産出は分母に入れない(同じ材料を二度数えるため)、救済された良品として歩留まりの分子にだけ足す
- **標準時間の予実**:予定=標準段取り時間+標準作業時間×計画数量(指図展開時に固定した工順の値。5.7節)。実績=直接作業時間+段取り実績時間(いずれも終了済みの記録のみ)。作業時間を記録していない作業指示は実績0分として並ぶ
+ - **製造リードタイム**(`api/productivity/lead-time`):取消以外の作業指示がすべて完了・承認済みの製造指図ごとに、**最初の作業(段取り・生産実績の開始)から最後の生産実績の終了まで**を製造日の差で数える(同じ製造日なら0日)。**状態履歴の時刻は使わない**——実績CSVで後から取り込むと状態の変わった時刻が取込の時刻になり、実際の作業日から外れるため。期間は完了の製造日。リワーク指図は含めない(歩留まりと同じ扱い)。平均だけではばらつきと異常値が見えないため、**日数ごとの度数分布**(うち納期遅れの件数)・中央値・90%点と、**第3四分位+1.5×四分位範囲を超える異常値**(4件以上のとき)を返す。四分位範囲は**1日を下限**にする(日数は整数なので、多くの指図が同じ日数だと範囲が0になり、1日長いだけの指図まで異常値になるため)。納期に対する遅れは完了の製造日−納期
+ - **標準時間の見直し候補**(`api/productivity/standard-time-review`):工順の工程ごとに、期間内の作業指示の**1個あたり実作業時間**(直接作業時間÷(良品数+不良数))と**1回あたり段取り時間**の**中央値**を、**工順マスタの現在値**と比べる(作業指示のスナップショットではない。見直す対象そのものであり、改訂後もまだずれているかを見たいため)。作業時間を記録していない作業指示は0分として混ぜず件数から外す。件数が既定3件以上でずれが既定20%以上なら候補にする(標準0分で実績があるものも候補)。**マスタは書き換えない**——標準を実績に寄せるか、作業を改めるかは業務の判断。工順の工程順序と工程が作業指示と一致しないもの(工順改訂で並びが変わったもの)は数えない。リワーク指図は含めない
- **リワーク・リペア**:リワーク指図の作成・実施・実績記録(B-70-10-01〜03。製造指図の指図区分で表現)
- **外注管理**[将来拡張]:工程外注・庫内外注の管理(B-70-20-01〜02。初期は工程マスタの内外製区分と実績記録まで)
- **製造履歴訂正**:出来高・品質・稼働時間等の変更・削除(B-70-30-01。権限制御+監査ログによる改ざん防止付き)。**訂正前の値は`ProductionRecordCorrection`に業務履歴として残し**、トレース画面の履歴から参照できるようにする(5.7節「実績訂正の扱い」)
@@ -274,6 +286,9 @@ HSE〔G〕はチェックリスト項目への健康衛生・安全項目の組
- **品質分析**:品質異常検知(C-40-10-01)、品質記録参照(C-40-10-02)、不良項目別・工程別・**直別**・期間別の集計分析(C-40-10-03。直別は3.9節の製造日が夜勤を前提にしているため、昼勤と夜勤の不良率を比べられるようにする)、不適合・逸脱発生状況のモニタリング(C-40-10-05)
- **不良項目別分析**:不良理由マスタ(C-10)に基づく不良理由別の不良数・構成比・**累積構成比**の集計(C-40-10-01)。数量の多い順に並べ**パレート図として読める**ようにし、改善対象の選定に使う
- **品質傾向管理**:管理図等による傾向分析に基づく検査判定(SPC。C-50-10-01〜02。初期は基本的な管理図表示、本格的SPC・予兆管理(C-50-10-03)は[将来拡張])
+ - **管理図**(`api/quality/control-chart`):検査項目ごとに、検査実績の測定値を**検査指示ごとの群**にまとめて X̄-R 管理図を描く。群の大きさが1なら個別値-移動範囲(X-Rs)管理図にする。群の大きさは最も多い大きさに揃え、**違う大きさの群は除外して件数を示す**(係数の違う群を混ぜると管理限界が意味を失うため)。大きさ11以上(X̄-s 管理図)は扱わず点だけを示す。取消した検査の測定値は使わない。期間は測定日時が属する製造日
+ - 異常の判定は**管理限界の外**と、**中心線の同じ側に9点以上続く並び**(JIS Z 9020-2 のルール2)の2つだけ。群が2つ未満なら管理限界を出さない
+ - **工程能力指数**(Cp・Cpk)は**群内のばらつき(R̄/d2)**から推定する。全測定値の標準偏差を使うと群間の変動(工程の異常)までばらつきに入り、管理状態でない工程の Cpk が良く見えるため。規格値は検査指示が発行時に写した値(5.7節)で、期間内に改訂があれば最新の群の規格で求めてその旨を示す。規格が片側だけなら Cp は出さず Cpk を片側で求める
- **グレード管理**:検査結果により出荷先・品目が変わる製品の管理(C-60-10-01。ロットのグレード属性で表現)
### 3.4 物流/在庫管理〔D〕
@@ -311,7 +326,7 @@ AGV/AMR連携(D-50-20-02)・リサイクル管理(D-50-30-02)・VMI/外
- **工場従業員情報管理**:従業員データの登録・変更・削除(F-10-10-01〜02。MESユーザーアカウントと統合管理)。**所属(部署・課)・作業場所(作業区)・所属する直**を持つ
- **勤務シフト(直)の定義**:昼勤・夜勤などの時間帯を定義する(F-10-10-01)。3.9節の製造日(業務日付)が夜勤を前提にしているのに対し、「その実績がどの直か」を表す。**誰がいつどの直に入るかの勤務計画は持たない**(勤怠管理 F-30-10-01〜02 は本システムの対象外。ガイドでも△)
- **スキル・資格管理**:スキル・資格の定義(F-20-10-01)、従業員への資格・スキル登録(使用可能設備・製造可能品・有効期限等。F-20-10-02〜03)、有効期限接近の警告(F-20-10-04)、有効期間の管理(F-20-10-05)
-- **資格・スキル照合**:差立・検査・保全の各業務で担当者に必要スキル・資格があるかを照合(F-20-30-01、B-30-10-03)
+- **資格・スキル照合**:差立・検査・保全の各業務で担当者に必要スキル・資格があるかを照合(F-20-30-01、B-30-10-03)。製造では差立(割当者)と着手(着手する者)の両方で、保全では保全手順書の必要スキルを保全実績の登録者(実施者)に対して、検査では検査項目・基準の必要スキル(発行時点のスナップショット)を検査実績の登録者(検査員)に対して照合する(`SkillQualificationPolicy`)。検査員の割当は持たないため、検査の照合は実績の登録時だけ。実績の訂正(責任者の操作)では照合しない
- **間接時間管理**:段取り・部材準備・設備メンテ等、製造に直接紐づかない作業時間の記録(F-30-20-02)
- **システム管理者を失わない**:**有効なシステム管理者が0人になる変更は行えない**(無効化・システム管理者ロールの剥奪のいずれも)。管理者がいなくなるとユーザー管理も権限付与もできず、初期セットアップAPIはUserが0件のときしか動かない(2.2節E)ため、DBを直接操作する以外に復旧手段がなくなる。単独PC配布(7.8節)では管理者が1人だけの運用が普通で、現実に起こりうる
- 判定は1か所(`Api/Policies/LastAdminPolicy`)に置き、ユーザー管理画面(`PUT api/users/{id}`)とマスタCSV取込(users)の双方から呼ぶ
@@ -422,13 +437,13 @@ DBはバックエンド(MesApp.Api)のみが保持し、既定はSQLiteと
| Tool(治工具マスタ) | 治工具コード、名称、種別(型/切削工具/検査工具等)、寿命閾値(使用回数/時間)、状態(使用可能/使用中/メンテナンス中/廃棄。**使用中は引当(`ToolIssue`)から決まり、マスタ編集・CSV取込では付けも外しもできない**。引当中の治工具は使用可能にできず、メンテナンス中・廃棄への変更はできる)(E-60) |
| Location(ロケーション) | ロケーションコード、倉庫/エリア区分(部材倉庫/工程内/製品倉庫/出荷場)、**所属する作業区**、棚番(D-50-20-01) |
| ControlItem(工程管理項目) | 工程管理項目コード、名称、単位、**指示値**、許容下限/上限、版数、有効フラグ。対象品目・対象工程は持たず、工順(BOP)の工程から紐付ける(`RoutingControlItem`)。温度・回転数など製造時に記録すべき条件の定義(B-30-30-04)。検査項目と同じ形にしているのは、「指示値と実績値」の関係が「検査パラメータと検査結果」と同じ構造で、判定の考え方も揃うため |
-| InspectionItem(検査項目・基準) | 検査項目コード、対象品目/工程、検査種別(受入/工程内/完成品/サンプル)、規格値(上限/下限/基準値)、検査方法、サンプリング数、版数(C-10-10)。対象品目/工程は**両方を「かつ」で組み合わせ**、空の方は問わない(5.7節「検査基準の対象」) |
+| InspectionItem(検査項目・基準) | 検査項目コード、対象品目/工程、検査種別(受入/工程内/完成品/サンプル)、規格値(上限/下限/基準値)、検査方法、サンプリング数、**必要スキルID**(任意。検査実績の登録者と照合。F-20-30-01)、版数(C-10-10)。対象品目/工程は**両方を「かつ」で組み合わせ**、空の方は問わない(5.7節「検査基準の対象」) |
| InspectionDevice(検査機・測定器) | 検査機コード、名称、製造番号、設置場所、最終校正日、**次回校正期限**、校正周期(日)、備考、状態(C-20-50-03)。校正期限切れ・無効化された機器は検査実績に使えない |
| InspectionDeviceCalibration(校正実施記録) | 検査機ID、校正日、次回期限、結果・所見、実施者(C-20-50-03)。現在値の上書きだけでは「いつ誰がどの結果で校正したか」が残らないため履歴に残す |
| Checklist(チェックリストマスタ) | チェックリストコード、名称、適用区分(共通/工程/品目/段取り/保全/HSE)、項目一覧(B-30-10、G-20/G-30) |
| WorkProcedure(作業手順書/SOP) | 手順書番号、表題、手順ステップ、手順書の所在(文書番号・URL)、版数(I-30-40-01〜02、B-10-30-03)。対象品目・対象工程は持たず、工順(BOP)側から紐付ける(I-30-20-12) |
| DefectReason(不良理由マスタ) | 不良理由コード、不良理由名、区分(材質・部材/加工・作業/設備/人的要因/その他)、有効フラグ。粒度は「現場が迷わず選べて、集計にも使える」範囲で定義する(C-40-10-01) |
-| MaintenanceProcedure(保全手順書) | 手順書番号、対象設備/治工具、手順ステップ、版数(E-10-20) |
+| MaintenanceProcedure(保全手順書) | 手順書番号、対象設備/治工具、手順ステップ、版数(E-10-20)、**必要スキルID**(任意。保全実績の登録時に実施者と照合する。F-20-30-01) |
### 5.2 指図・実績系
@@ -470,7 +485,7 @@ DBはバックエンド(MesApp.Api)のみが保持し、既定はSQLiteと
| エンティティ | 主な項目 |
|---|---|
| InspectionOrder(検査指示) | 検査指示番号、検査種別(受入/工程内/完成品/サンプル/再検査)、対象(ロットID/作業指示ID)、検査項目セット、依頼者、状態(指示/実施中/判定済/承認済)(C-20) |
-| InspectionOrderItem(検査指示の対象項目) | 検査指示ID、検査項目ID(参照)、**発行時点の基準のスナップショット**(検査項目コード・名称・版数・規格値上限/下限・基準値・検査方法・サンプリング数)。自動判定・画面表示・検査成績書はこのスナップショットを使い、マスタは新規指示の作成時にのみ参照する(C-20、C-10-10-03) |
+| InspectionOrderItem(検査指示の対象項目) | 検査指示ID、検査項目ID(参照)、**発行時点の基準のスナップショット**(検査項目コード・名称・版数・規格値上限/下限・基準値・検査方法・サンプリング数・**必要スキル**)。自動判定・検査員のスキル照合・画面表示・検査成績書はこのスナップショットを使い、マスタは新規指示の作成時にのみ参照する(C-20、C-10-10-03) |
| InspectionResult(検査実績) | 検査指示ID、検査項目ID、測定値、判定(合格/不合格)、検査者、検査日時、承認者、**使用した検査機ID**(任意。C-20-50-03。校正期限切れの機器は登録時に弾くため、残るのは当時有効だった機器に限られる)(C-20) |
| InspectionResultCorrection(検査実績の訂正履歴) | 検査実績ID、検査指示ID、訂正前(測定値・記録・判定)、訂正後(測定値・記録・判定)、訂正理由、訂正者、訂正日時。訂正のたびに1レコード追加(C-20-50-07) |
| NonconformanceReport(不適合・逸脱) | 発生元(生産実績/検査/受入)、対象ロットID、逸脱・不具合内容、原因区分+詳細(文章・写真添付)、対応指示(リワーク/保留/廃棄/特採)、対応実績、承認者(特採時)、状態(B-40-30、C-30) |
@@ -605,7 +620,7 @@ DBはバックエンド(MesApp.Api)のみが保持し、既定はSQLiteと
9. 工程進捗管理画面(工程別進捗、**遅れている作業指示**、トラブル対応履歴)
9.1 作業時間画面(直接作業=作業指示に紐づく時間、間接作業=区分を指定する時間。一覧は本人分、管理系ロールは全員分)
9.1.1 生産計画・予実画面(計画登録タブ=製造日×品目×工程(作業区は任意)の計画数量の登録・変更・削除、予実タブ=製造日×品目×工程の計画と出来高・達成率の表と、1品目・1工程に絞ったときの日ごとのグラフ(計画は棒・実績は折れ線、左右の軸は同じ目盛り)。集計はAPIが行う。A-30-10-01)
-9.2 生産性モニタリング画面(歩留まり・直行率の品目別/工程別集計、標準時間の予実。期間は製造日基準)
+9.2 生産性モニタリング画面(歩留まり・直行率の品目別/工程別集計、標準時間の予実と見直し候補、製造リードタイムの分布。期間は製造日基準)
10. 受入画面(受入登録・取消・返品、ラベル/現品票印刷)
11. 在庫照会・在庫オペレーション画面(在庫移動、数量調整、ロット分割/統合/振替、在庫ステータス変更、期限アラート)
12. 出庫・払出画面(出庫指示、ピッキング指示・実行、払出戻し)
@@ -614,7 +629,7 @@ DBはバックエンド(MesApp.Api)のみが保持し、既定はSQLiteと
14. 棚卸画面(棚卸指示、実棚入力、差異一覧・調整・確定)
15. 検査管理画面(受入/工程内/完成品/サンプル検査の進捗一覧、検査指示発行、実績入力、判定、成績書発行、承認、取消)
16. 不適合管理画面(逸脱/不具合一覧、対応指示・実行記録、特別採用承認)
-17. 品質分析画面(不良集計、品質モニタリング、管理図)
+17. 品質分析画面(不良集計、品質モニタリング、管理図と工程能力指数)
18. 出荷判定画面(判定一覧、判定・承認、判定書発行)
19. トレーサビリティ画面(ロット番号によるトレースバック/フォワード、製造・設備・検査履歴閲覧)
20. 設備保全画面(設備台帳、稼働履歴、**稼働サマリ・OEE**、保全計画・指示・実績(消費部材の在庫引落しを含む)、保全手順書、消耗材モニタリング)
diff --git a/docs-dev/CodeMap.md b/docs-dev/CodeMap.md
index d575e5a..d2d376c 100644
--- a/docs-dev/CodeMap.md
+++ b/docs-dev/CodeMap.md
@@ -30,7 +30,7 @@
| 業務 | MES No | API | エンティティ | 画面 | テスト |
|:--|:--|:--|:--|:--|:--|
-| 作業指示・差立(作業員/設備割当・着手順) | B-10-20 / F-20-30-01 | `WorkOrdersController.cs` `api/work-orders`
差立の検証・反映は `Api/Services/WorkOrderDispatchService.cs`
候補設備は `api/work-orders/{id}/equipment-candidates`(**候補があればその中からしか割り当てられない**。候補は工順マスタの現在値。**新しく割り当てる設備は `Status`=稼働可能のみ**) | Production.cs: WorkOrder
Masters.cs: **RoutingEquipment**(工順の候補設備) | `/work-orders` `WorkOrders.razor`
`/dispatch` `Dispatch.razor` | `Tests/ExecutionTests.cs` |
+| 作業指示・差立(作業員/設備割当・着手順) | B-10-20 / F-20-30-01 | `WorkOrdersController.cs` `api/work-orders`
差立の検証・反映は `Api/Services/WorkOrderDispatchService.cs`
スキル照合は `Api/Policies/SkillQualificationPolicy.cs`(**差立=割当者と着手=着手する者の両方**で通す。着手は `WorkOrderExecutionService.StartAsync`)
候補設備は `api/work-orders/{id}/equipment-candidates`(**候補があればその中からしか割り当てられない**。候補は工順マスタの現在値。**新しく割り当てる設備は `Status`=稼働可能のみ**) | Production.cs: WorkOrder
Masters.cs: **RoutingEquipment**(工順の候補設備) | `/work-orders` `WorkOrders.razor`
`/dispatch` `Dispatch.razor` | `Tests/ExecutionTests.cs`・`ProductionTests.cs`(スキル照合) |
| 実行系(着手・段取り・チェックリスト・部材投入・実績報告・製造条件データ・状態履歴) | B-30-30-01 / B-20-50 / B-40-40 | `WorkOrderExecutionController.cs`
`api/work-orders/{id:int}`
着手・承認・判定・在庫計上は `Api/Services/WorkOrderExecutionService.cs`(CSV取込と共有) | `Core/Entities/Execution.cs`
SetupRecord / ChecklistRecord / ChecklistResultItem / MaterialConsumption / ProductionRecord / ProductionDataRecord | `/work-orders/{id}/setup` `WorkOrderSetup.razor`
`/work-orders/{id}/record` `ProductionRecordEntry.razor`(部材投入・製造条件データ・訂正・状態履歴もここ)
`/process-progress` `ProcessProgress.razor` | `Tests/ExecutionTests.cs` |
| 製造履歴訂正(訂正履歴+監査ログ) | B-70-30-01 | `ProductionRecordsController.cs` `api/production-records`(数量だけを訂正する。**直は記録時に固定した値なので動かない**) | Execution.cs: ProductionRecord / **ProductionRecordCorrection**(訂正前の値。Spec.md 5.7) | `ProductionRecordEntry.razor` の実績一覧から訂正
`/traceability` の履歴タブに訂正履歴を表示 | `Tests/ExecutionTests.cs` / `QualityTests.cs` |
| 作業時間記録(直接/間接) | B-30-30-02 / F-30-20-02 | `WorkTimeRecordsController.cs` `api/work-time-records` | Execution.cs: WorkTimeRecord | `/work-time` `WorkTime.razor` | `Tests/ExecutionTests.cs` |
@@ -38,7 +38,7 @@
| 工程間搬送・移動指示 | B-50-10 / D-30-10-04 | `TransferOrdersController.cs` `api/transfer-orders`(更新系は在庫権限) | Execution.cs: TransferOrder | `/transfer-orders` `TransferOrders.razor`(`Inventory.razor` の「振替」は別機能の `api/inventory/transfer`) | `Tests/InventoryTests.cs` |
| 設備稼働報告・稼働監視 | B-40-20 / E-20-10 | `EquipmentLogsController.cs` `api/equipment-logs`(`?workOrderId=` で絞り込み。登録の判定は `ShopFloorReportService.AddEquipmentLogAsync` で実績CSVと共通)
稼働サマリは `GET summary?from=&to=`(**製造日基準**。稼働の開始時刻が属する製造日で振り分ける。省略時は全期間) | `Core/Entities/Maintenance.cs`: EquipmentLog(`WorkOrderId` 任意=**PQC×EQCの交差点**。ロット履歴 H-30-10-04 はこれを辿る。`EquipmentLogStatus` への追加は**末尾のみ**:JSONが数値) | `/maintenance` `Maintenance/EquipmentLogsTab.razor` | `Tests/MaintenanceTests.cs` |
-| 生産性モニタリング(歩留まり・直行率・標準時間予実) | B-60-10-05 | `ProductivityController.cs` `api/productivity`(製造日で期間指定。**リワーク指図の産出は分母に入れない**=救済分は歩留まりの分子だけ) | Execution.cs: ProductionRecord / WorkTimeRecord / SetupRecord
Production.cs: WorkOrder(標準時間は**展開時の工順スナップショット**。マスタ現在値で引き直さない) | `/productivity` `Web/Pages/Productivity.razor`
`Web/Shared/ProductivityTable.razor` | `Tests/ProductionTests.cs` |
+| 生産性モニタリング(歩留まり・直行率・標準時間予実) | B-60-10-05 | `ProductivityController.cs` `api/productivity`(製造日で期間指定。**リワーク指図の産出は分母に入れない**=救済分は歩留まりの分子だけ)
標準時間の見直し候補 `api/productivity/standard-time-review`(**比べる相手は工順マスタの現在値**。実績は中央値。時間の記録が無い作業指示は件数から外す)
製造リードタイム `api/productivity/lead-time`(**着手・完了は作業の記録の時刻**。状態履歴は実績CSV取込で取込時刻になるため使わない。異常値は四分位から) | Execution.cs: ProductionRecord / WorkTimeRecord / SetupRecord
Production.cs: WorkOrder(標準時間は**展開時の工順スナップショット**。マスタ現在値で引き直さない) | `/productivity` `Web/Pages/Productivity.razor`
`Web/Shared/ProductivityTable.razor` | `Tests/ProductionTests.cs` |
## C. 品質管理
@@ -47,9 +47,9 @@
| 工程管理項目マスタ(指示値・許容範囲。版数付き) | B-30-30-04 | `ControlItemsController.cs` `api/control-items`
展開時のスナップショット取得は `WorkOrdersController.ControlItems` `api/work-orders/{id}/control-items` | Masters.cs: ControlItem(対象品目・工程は持たない)/ **RoutingControlItem**(工順の工程への紐付け。展開はこの紐付けどおり。紐付け中は無効化できない:`MasterDeactivationPolicy`)
Production.cs: **WorkOrderControlItem**(展開時点の指示値。判定・表示はこちらを使い、マスタ現在値を参照しない) | `/masters` `Masters/ControlItemsTab.razor`
工順への紐付けは `Masters/Products/ProductRoutingEditor.razor` | `Tests/MasterTests.cs` / `MasterCsvTests.cs` / `ProductionTests.cs` |
| 検査機・測定器マスタ/校正管理 | C-20-50-03 | `InspectionDevicesController.cs` `api/inspection-devices`
校正の記録は `POST {id}/calibrations`(次回期限は校正周期から自動)/期限接近は `GET expiring?withinDays=` | Masters.cs: InspectionDevice(現在の校正状態)/InspectionDeviceCalibration(実施履歴) | `/masters` `Masters/InspectionDevicesTab.razor` | `Tests/MasterTests.cs` / `MasterCsvTests.cs` |
| 検査項目・基準マスタ | C-10-10 | `InspectionItemsController.cs` `api/inspection-items`
対象品目/工程の意味(**「かつ」で組み合わせ、空は問わない**)と登録時の制約は `Api/Policies/InspectionItemPolicy.cs`(単票API・マスタCSV・検査指示の発行で共通) | Masters.cs: InspectionItem | `/masters` `Masters/InspectionItemsTab.razor` | `Tests/MasterTests.cs` |
-| 検査指示・実績・判定・成績書 | C-20 | `InspectionOrdersController.cs` `api/inspection-orders`(発行・実績・判定の処理は `Api/Services/InspectionService.cs`。実績登録時に**検査機の校正期限を判定**:`InspectionDeviceCalibrationPolicy`。発行できるロットの状態・判定前の指示の重複は `InspectionLotPolicy`。合否(手の指定は自動判定と食い違えば拒否。訂正も同じ)とサンプリング数(判定の下限)は `InspectionJudgmentPolicy`。取消はロットを**発行前のステータス**へ戻す) | `Core/Entities/Quality.cs`
InspectionOrder / InspectionOrderItem(**発行時点の基準スナップショット**。判定・成績書はこちらを使い、マスタ現在値を参照しない:Spec.md 5.7) / InspectionResult / **InspectionResultCorrection**(訂正前の記録。詳細画面・成績書に表示) | `/inspections` `Inspections.razor`
`/inspections/{id}` `InspectionDetail.razor`
`/print/inspection/{id}` `Print/InspectionCertificate.razor` | `Tests/QualityTests.cs` |
+| 検査指示・実績・判定・成績書 | C-20 | `InspectionOrdersController.cs` `api/inspection-orders`(発行・実績・判定の処理は `Api/Services/InspectionService.cs`。実績登録時に**検査機の校正期限を判定**:`InspectionDeviceCalibrationPolicy`。**検査員のスキル照合**も実績登録時(発行時に写した `InspectionOrderItem.RequiredSkillId` → `SkillQualificationPolicy`)。発行できるロットの状態・判定前の指示の重複は `InspectionLotPolicy`。合否(手の指定は自動判定と食い違えば拒否。訂正も同じ)とサンプリング数(判定の下限)は `InspectionJudgmentPolicy`。取消はロットを**発行前のステータス**へ戻す) | `Core/Entities/Quality.cs`
InspectionOrder / InspectionOrderItem(**発行時点の基準スナップショット**。判定・成績書はこちらを使い、マスタ現在値を参照しない:Spec.md 5.7) / InspectionResult / **InspectionResultCorrection**(訂正前の記録。詳細画面・成績書に表示) | `/inspections` `Inspections.razor`
`/inspections/{id}` `InspectionDetail.razor`
`/print/inspection/{id}` `Print/InspectionCertificate.razor` | `Tests/QualityTests.cs` |
| 不適合・逸脱管理(特採・廃棄・保留) | C-30 / B-40-30 | `NonconformanceController.cs` `api/nonconformances`
記録・対応指示・承認と不適合の連鎖は `Api/Services/NonconformanceService.cs` | Quality.cs: NonconformanceReport | `/nonconformances` `Nonconformances.razor` | `Tests/QualityTests.cs` |
-| 品質分析(不良理由別・品目別・工程別・**直別**・期間別) | C-40-10 | `QualityAnalysisController.cs` `api/quality/summary` | Execution.cs: ProductionDefect(不良理由別の内訳)
ProductionRecord.`ShiftId`(**記録時に固定**。集計で引き直さない) | `/quality-analysis` `QualityAnalysis.razor`
`Web/Shared/BarMeter.razor` | `Tests/QualityTests.cs` |
+| 品質分析(不良理由別・品目別・工程別・**直別**・期間別) | C-40-10 | `QualityAnalysisController.cs` `api/quality/summary`
管理図・工程能力(C-50-10-01〜02)は `ControlChartController.cs` `api/quality/control-chart` → 計算は `Api/Services/ControlChartCalculator.cs`(**群=検査指示**。係数表・群の揃え方・9点連続の判定はここだけ)。描画は `Web/Shared/Charts/ControlLineChart.razor` | Execution.cs: ProductionDefect(不良理由別の内訳)
ProductionRecord.`ShiftId`(**記録時に固定**。集計で引き直さない) | `/quality-analysis` `QualityAnalysis.razor`
`Web/Shared/BarMeter.razor` | `Tests/QualityTests.cs`・`ControlChartCalculatorTests.cs` |
| 不良理由マスタ | C-40-10-01 | `DefectReasonsController.cs` `api/defect-reasons` | Masters.cs: DefectReason | `/masters` `Masters/DefectReasonsTab.razor` | `Tests/MasterTests.cs` / `MasterCsvTests.cs` |
| チェックリストマスタ(HSE含む) | B-30-10 / G-20-20-02 | `ChecklistsController.cs` `api/checklists` | Masters.cs: Checklist / ChecklistItem | `/masters` `Masters/ChecklistsTab.razor` | `Tests/MasterTests.cs` |
@@ -73,7 +73,7 @@
|:--|:--|:--|:--|:--|:--|
| 作業区/資源階層(BOR。工場/ライン/エリア/作業区) | I-10-20-02 | `WorkCentersController.cs` `api/work-centers`
`Api/Policies/WorkCenterHierarchyPolicy.cs`(段の妥当性・循環。単票APIとCSV取込の**両方**から呼ぶ) | Masters.cs: WorkCenter(自己参照。`Level` は文字列保存のため**DB側で並べると段の順にならない**。取得後に並べ直す) | `/masters` `Masters/WorkCentersTab.razor` | `Tests/MasterTests.cs` / `MasterCsvTests.cs` |
| 設備台帳/BOE・保全部品 | E-10-10 / I-10-20 | `EquipmentsController.cs` `api/equipments`
保全部品は `api/equipments/{id}/parts`(**設備ごとの一括置換**) | Masters.cs: Equipment(`WorkCenterId`=設置場所の正。**作業区(最下段)のみ**。`Site` は移行用の旧項目)
Masters.cs: **EquipmentPart**(品目参照。資産管理部品/消耗品の区分。`MaintenanceParts` の自由記述は移行元) | `/masters` `Masters/EquipmentsTab.razor` | `Tests/MasterTests.cs` |
-| 保全手順書(版数管理) | E-10-20 / E-20-30 | `MaintenanceProceduresController.cs` `api/maintenance-procedures` | Maintenance.cs: MaintenanceProcedure | `/maintenance` `Maintenance/MaintenanceProceduresTab.razor` | `Tests/MaintenanceTests.cs` |
+| 保全手順書(版数管理) | E-10-20 / E-20-30 | `MaintenanceProceduresController.cs` `api/maintenance-procedures`(**必要スキル**は保全実績の登録時に実施者と照合:`MaintenanceOrderService.AddRecordAsync` → `SkillQualificationPolicy`) | Maintenance.cs: MaintenanceProcedure | `/maintenance` `Maintenance/MaintenanceProceduresTab.razor` | `Tests/MaintenanceTests.cs` |
| 保全計画(中長期・年次) | E-30-10 | `MaintenancePlansController.cs` `api/maintenance-plans`
取消(状態変更)は `Api/Services/MaintenanceOrderService.CancelPlanAsync` | Maintenance.cs: MaintenancePlan | `/maintenance` `Maintenance/MaintenancePlansTab.razor` | `Tests/MaintenanceTests.cs` |
| 保全指示・実績・突発依頼 | E-30-20 / E-30-30 / E-40 | `MaintenanceOrdersController.cs` `api/maintenance-orders`
作成・実績登録・取消(指示と元計画の状態変更)は `Api/Services/MaintenanceOrderService.cs`
消費部材の在庫引落しは `POST {id}/record` の `parts`(**`InventoryService.RemoveAsync` 経由**。区分 `MaintenanceIssue`) | Maintenance.cs: MaintenanceOrder / MaintenanceRecord / **MaintenanceRecordPart**(ロット単位の消費明細。`PartsUsed` の自由記述は補足) | `/maintenance` `Maintenance/MaintenanceOrdersTab.razor` | `Tests/MaintenanceTests.cs` |
| 設備総合効率(OEE) | E-20-30-03 | `OeeController.cs` `api/oee`(**稼働サマリとは別**。あちらは稼働監視の素の時間区分、こちらは製造実績と突き合わせた評価指標)
負荷時間=記録済み総時間(**計画休止の区分は無い**)。理論CTは作業指示の標準作業時間(1個あたり) | Maintenance.cs: EquipmentLog(`WorkOrderId` が無い稼働は**対象外**=カバー率で開示)
Execution.cs: ProductionRecord | `/maintenance` `Maintenance/EquipmentLogsTab.razor`(稼働監視タブ) | `Tests/MaintenanceTests.cs` |
diff --git a/docs-dev/GuideReview3.md b/docs-dev/GuideReview3.md
new file mode 100644
index 0000000..096a685
--- /dev/null
+++ b/docs-dev/GuideReview3.md
@@ -0,0 +1,70 @@
+# 実践的MES導入ガイド 反映バックログ(第3回・業界別/導入/データ活用の章)
+
+`ref/実践的MES導入ガイド-1.0.0.pdf`(ENAA・331頁)のうち、前2回(`mes8-backlog`=第4章・第8章、`GuideReview2.md`=指標と未実装の業務No)で
+当てていなかった章——**5.1 組立・5.4 自動車部品・6.3.2 中堅・中小企業・7.2.2 エネルギー管理・8.3.2 データドリブンマネジメントの実践**——を実装と突き合わせた結果。
+
+**提案であり、決定ではない。** 着手する場合は1項目=1セッションを基本とする(`Orchestration.md` §4.1)。
+
+| ID | 項目 | 区分 | 状態 |
+|:--|:--|:--|:--|
+| GR3-01 | 着手時のスキル・資格照合 | A. 仕様にあるが未実装 | **対応済**(Spec.md 改訂129) |
+| GR3-02 | 検査・保全のスキル照合(仕様と実装のずれ) | A. 仕様にあるが未実装 | **対応済**(Spec.md 改訂130=保全、改訂135=検査) |
+| GR3-03 | 基本的な管理図(X̄-R)と工程能力指数 | A. 仕様にあるが未実装 | **対応済**(Spec.md 改訂131) |
+| GR3-04 | 製造リードタイムの分布 | B. 指標 | **対応済**(Spec.md 改訂132) |
+| GR3-05 | 標準時間の見直し候補 | B. 指標 | **対応済**(Spec.md 改訂133) |
+| GR3-06 | エネルギー管理(FEMS)との範囲を明記する | C. 書くだけ | **対応済**(Spec.md 改訂134。[将来拡張]) |
+
+## 総評
+
+第4章の機能面は前2回で埋まっている。今回残ったのは **`Spec.md` が照合・表示を宣言しているのに経路の一部にしか実装が無いもの**(A群)と、
+ガイド 8.3.2 が代表例に挙げる **「ばらつき」と「業務パラメータの定期見直し」の見える化**(B群)である。
+シリアル番号による全数トレーサビリティ(5.1.2(2)・5.4.2)は既に[将来拡張]と判断済みで、エンティティからの設計になるため本バックログに含めない。
+SaaS型提供・オフライン同期(6.3.2)は配布方式(`Spec.md` 7.8)の方針外として扱わない。
+
+---
+
+## A. `Spec.md` に書いたのに実装が無い/経路の一部にしか無い
+
+### GR3-01 着手時のスキル・資格照合(F-20-30-01)
+
+- 該当: `src/MesApp.Api/Services/WorkOrderExecutionService.cs`(`StartAsync`)、`WorkOrderDispatchService.cs`
+- 現状: スキル照合は差立(作業員割当)にしか無い。着手は「未配布でも着手可能(差立を省略する小規模運用を許容)」であり、照合を通らない。
+ 差立を省略した運用・割当者と異なる者の着手・差立後の有効期限切れのいずれでも、必要スキルを持たない者が作業できる。
+- ガイド: 5.1.2(3)「作業者の認定資格のレベルと作業内容を照合し、適切なスキルを持つ作業者のみが特定作業を実施できるように確認する機能も重要である」。
+- 対応: 照合を `Api/Policies/` に切り出し、差立と着手の両方で通す。着手者のスキルを判定する(割当者ではなく実際に作業する者)。
+
+### GR3-02 検査・保全のスキル照合
+
+- 現状: `Spec.md` 3.6 は「差立・検査・保全の各業務で担当者に必要スキル・資格があるかを照合」と書くが、検査基準・保全計画に必要スキルの項目自体が無い。
+- 対応: 項目を足して照合するか、`Spec.md` の記述を実装に合わせるかを決める。
+- **保全は対応済**(改訂130)。保全手順書に必要スキルを持たせ、保全実績の登録者を照合する。
+- **検査も対応済**(改訂135)。`inspection-fixes` を合流させてから、検査項目・基準に必要スキルを持たせ、発行時に検査指示へ写して検査実績の登録者を照合する。
+
+### GR3-03 基本的な管理図と工程能力指数(C-50-10-01〜02)
+
+- 現状: `Spec.md` 3.3 は「初期は基本的な管理図表示」を実装対象([将来拡張]の印なし)とし、6.1 の品質分析画面にも「管理図」がある。
+ 実装は `QualityAnalysisController` のコメントが「SPC・管理図は将来拡張」としたままで、画面にも無い。
+- ガイド: 4.4.3(QC七つ道具・工程能力指数)、5.1.2(4)「SPC の機能を組み込み、リアルタイムで工程の異常を検知」。
+- 対応: 検査実績の測定値と検査基準の上下限は既にあるため、新規エンティティなしで X̄-R 管理図と Cp/Cpk を出す。
+
+## B. 指標
+
+### GR3-04 製造リードタイムの分布
+
+- 現状: リードタイムの集計が無い。指図の納期超過フラグ(`IsOverdue`)だけではばらつきが見えない。
+- ガイド: 8.3.2(3)。受注(着手)からの経過日数ごとの完成数量のヒストグラムで、実績リードタイムのばらつきと異常値を見る。
+- 対応: 指図の着手〜完了を状態・作業指示の履歴から求め、分布と納期との関係を返す集計API+画面。
+
+### GR3-05 標準時間の見直し候補
+
+- 現状: 標準時間の予実(MESG-02)はあるが、マスタを見直すきっかけにはつながっていない。
+- ガイド: 8.3.2(4)。標準時間などの業務パラメータは影響が顕在化してからではなく、定期的に再設計する。
+- 対応: 実績が標準から一定以上ずれている工順を一覧にする。マスタの自動書き換えはしない(決めるのは業務)。
+
+## C. 書くだけ
+
+### GR3-06 エネルギー管理(FEMS)との範囲を明記する
+
+- 現状: `Spec.md` にエネルギーの記述が無い。
+- ガイド: 3.4.2・7.2.2・5.1.2(5)。MES は FEMS に稼働・生産量を渡し、原単位(kWh/個)の分母になる役割とされる。
+- 対応: 対象外か[将来拡張]かを明記する。
diff --git a/docs/execution.md b/docs/execution.md
index e9a9d1a..44940e7 100644
--- a/docs/execution.md
+++ b/docs/execution.md
@@ -45,7 +45,9 @@ next_title: 物流・在庫管理
作業者を割り当てると、その工程の工順に設定された **必要スキル・資格を持っているか自動チェック** されます。
資格がない場合や、**資格の有効期限が切れている場合**はエラーになり、割当されません。
-> 例:`作業者 '山田 太郎' のスキル '溶接技能' は有効期限切れです。`
+同じ照合は **着手のとき、着手する人に対しても** 行われます。差立を省略した場合や、割り当てた人と別の人が着手する場合、差立のあとで資格の期限が切れた場合も、資格のない人は着手できません。
+
+> 例:`担当者 '山田 太郎' のスキル '溶接技能' は有効期限切れです。`
マスタ管理 → ユーザー のスキル・資格から、資格の追加や有効期限の更新を行ってください。
diff --git a/docs/maintenance.md b/docs/maintenance.md
index 44bcb1a..757bc4a 100644
--- a/docs/maintenance.md
+++ b/docs/maintenance.md
@@ -112,6 +112,7 @@ next_title: 帳票・ラベル・スキャン
上限・下限のどちらも設定していない項目は自動判定できません。 diff --git a/docs/quality.md b/docs/quality.md index 061799e..e40d4eb 100644 --- a/docs/quality.md +++ b/docs/quality.md @@ -98,6 +98,11 @@ next_title: 品質保証 その項目の「判定(手動)」で合格/不合格を選んでください。
必要スキル・資格が設定された検査項目は、その資格を持つ人しか実績を登録できません。 +照合するのは検査指示を出したときの検査基準の設定です(あとで検査基準を変えても、発行済みの検査には効きません)。
+1回の検査で測る個数(サンプル数)はそろえてください。 +個数の違う群は同じ管理図に混ぜられないため、いちばん多い個数に合わない群は除外され、除外した数が表示されます。
+| @L["手順書番号"] | @L["表題"] | @L["対象"] | @L["版数"] | @L["手順"] | |||||
|---|---|---|---|---|---|---|---|---|---|
| @L["手順書番号"] | @L["表題"] | @L["対象"] | @L["必要スキル・資格"] | @L["版数"] | @L["手順"] | @procedure.ProcedureNo | @procedure.Title | @(procedure.TargetEquipmentName ?? procedure.TargetToolName ?? "-") | +@(procedure.RequiredSkillName ?? "-") | v@(procedure.Version) | @procedure.Steps | @@ -76,11 +87,13 @@ public string Title { get; set; } = string.Empty; public int EquipmentId { get; set; } public int ToolId { get; set; } + public int SkillId { get; set; } public string Steps { get; set; } = string.Empty; } private List
| @L["コード"] | @L["名称"] | @L["種別"] | @L["対象"] | @L["規格値"] | @L["方法"] | @L["サンプリング"] | @L["版数"] | ||
|---|---|---|---|---|---|---|---|---|---|
| @L["コード"] | @L["名称"] | @L["種別"] | @L["対象"] | @L["規格値"] | @L["方法"] | @L["サンプリング"] | @L["必要スキル・資格"] | @L["版数"] | @(item.LowerLimit?.ToString() ?? "-") 〜 @(item.UpperLimit?.ToString() ?? "-") | @(item.Method ?? "-") | @(item.SamplingCount?.ToString() ?? "-") | +@(item.RequiredSkillName ?? "-") | v@(item.Version) |
+
+
+@* 製造リードタイムの分布(ガイド 8.3.2)。平均では見えないばらつきと異常値を、完了した指図の分布で見る *@
+@L["標準時間の見直し候補"]++ @L["工順の工程ごとに、実績の中央値(1個あたり作業時間・1回あたり段取り時間)を工順マスタの現在値と比べる。作業時間を記録していない作業指示は数えない。標準を実績に合わせるか、作業のほうを改めるかは現場で判断する。"] + + @if (_review is null) + { +@L["読み込み中..."] + } + else if (_review.Rows.Count == 0) + { +@L["対象期間に作業時間・段取りの記録がある作業指示はありません。"] + } + else + { +
@L["ずれが {0}% 以上で、作業指示が {1} 件以上あるものを見直し候補とする。標準の変更はマスタ管理の工順で行う。", _review.ThresholdPercent.ToString("0.#"), _review.MinSamples] + } +
+
+
@code {
private ProductivitySummaryResponse? _summary;
+ private LeadTimeResponse? _leadTime;
+ private StandardTimeReviewResponse? _review;
+
+ private static string Deviation(decimal? rate) => rate is { } r ? $"{r:+0.#;-0.#;0} %" : "-";
+
+ /// @L["製造リードタイム"]++ @L["完了した製造指図ごとに、最初の作業(段取り・実績の開始)から最後の実績の終了までを製造日で数える。期間は完了した製造日。リワーク指図は含めない。"] + + @if (_leadTime is null) + { +@L["読み込み中..."] + } + else if (_leadTime.OrderCount == 0) + { +@L["対象期間に完了した製造指図はありません。"] + } + else + { +
@L["リードタイムの長い指図"]+
@L["異常値は第3四分位+1.5×四分位範囲({0} 日)を超えるもの。平均を押し上げている原因を個別に調べる対象。", threshold.ToString("0.#")] + } + } +@L["品質分析"]-@L["不良項目別・工程別・直別・期間別の集計(C-40-10-03)、不適合・逸脱発生状況のモニタリング(C-40-10-05)。期間は製造日(業務日付)基準。"] +@L["不良項目別・工程別・直別・期間別の集計(C-40-10-03)、不適合・逸脱発生状況のモニタリング(C-40-10-05)、管理図と工程能力(C-50-10-01〜02)。期間は製造日(業務日付)基準。"]
@@ -194,10 +194,92 @@ else
|
+ @L["検査実績の測定値を検査指示ごとの群にまとめ、X̄-R 管理図(群の大きさが1なら X-Rs 管理図)を描く。赤は管理限界の外、黄は中心線の同じ側に9点以上続く並び。工程能力指数は群内のばらつきから求める。"] +
+@L["対象期間の測定値はありません。"]
+ } + else + { +| @L["管理図"] | +@(_chart.IsIndividuals ? L["X-Rs 管理図"] : L["X̄-R 管理図(群の大きさ {0})", _chart.SubgroupSize]) | +@L["群の数"] | ++ @_chart.Points.Count + @if (_chart.ExcludedSubgroupCount > 0) + { + @L["(大きさの違う {0} 群を除外)", _chart.ExcludedSubgroupCount] + } + | +
|---|---|---|---|
| Cp | +@(_chart.Cp?.ToString("0.00") ?? "-") | +Cpk | ++ @(_chart.Cpk?.ToString("0.00") ?? "-") + @if (_chart.Cpk is { } cpk && cpk < 1.33m) + { + @L["1.33 未満"] + } + | +
@L["群が2つ以上ないと管理限界と工程能力は求められません。"]
+ } + @if (_chart.SpecLimitsChanged) + { +@L["期間内に規格値が改訂されています。工程能力は最新の規格値で求めています。"]
+ } +