構造と境界
現場タブレットアプリを修正したり、他のシステムと連携させたりする際に把握しておくべき構造です。ソースは plantpulse-platform/plantpulse-frontline-web リポジトリです。
構成
태블릿 브라우저 (PWA) frontline 컨테이너 플랫폼
┌──────────────────────┐ HTTPS ┌──────────────────────────────┐ V5 ┌──────────────┐
│ React 웹 앱 │ ──────▶ │ BFF (/api/*) │ ────▶ │ server-web │
│ 서비스워커 · 입력 큐 │ 9701 │ · 기기 토큰 · 작업자 세션 │ 토큰 │ /api/v5/... │
└──────────────────────┘ │ · 범위 검사 · 감사 로그 │ 하나 └──────────────┘
└──────────────┬───────────────┘
│ JDBC
플랫폼 DB pp · 스키마 pf
| 部分 | 内容 | リポジトリ内の位置 |
|---|---|---|
| Web | React 19 + TypeScript + Vite PWA。サービスワーカー、オフライン入力キュー(IndexedDB)、画面別の最終値(localStorage)。グラフは ECharts 6 — グラフがある画面を開く時のみ読み込む別チャンク | web/ |
| BFF | Spring Boot 4.1 WAR。Platform 共用 Tomcat 10.1(runtime-base) 上で動作。ディスパッチャーは /api/* にのみ適用。範囲確認(scope/)、点検(maintenance/)、不良(defect/)、レポート(floor/ReportController)がここに実装 | src/plantpulse/frontline/ |
| DB | Platform データベース pp の pf スキーマ(2026-10-29 前は frontline)、Platform の既存 DB アカウント。テーブルは fl_ で始まる。スキーマは Flyway で適用(V1~V14) | src/db/migration/ |
| イメージ | docker.kopens.io/pp/plantpulse-frontline-web。ポート 9701(TLS) · 9700(ヘルスチェックのみ) | Dockerfile |
スキーマ履歴
| バージョン | 内容 |
|---|---|
| V1~V4 | 作業者 · PIN · 設備 · 設定 · 理由一覧 · 交替メモ · 監査ログ、画面言語 · テーマ |
| V5 | 言語項目の CHECK IN ('ko','en') を削除し fl_operator.lang · fl_operator_revision.lang · fl_device.default_lang を VARCHAR(35)(BCP 47) に拡張。許可言語はスキーマではなくサーバーの一覧で定義 |
| V6 | fl_setting の kiosk.micro_stop_seconds 行を削除。短時間停止基準は Platform 設定に従う(旧値は移行しない) |
| V7 | 担当範囲。以下参照 |
| V8 | 監査ログを個人別にページ単位で読み込むためのインデックス |
| V9 | 作業者ログインと Platform 社員(pp.mm_employee)の連携項目 |
| V10 | 作業者アカウントを Platform へ移行。ログインキャッシュ fl_account_cache と同期状態 fl_account_sync を作成し、セッションが Platform 社員 ID を指すように変更(既存セッションは削除 — 適用後、全タブレットで再ログインが必要)。旧 fl_operator · fl_operator_scope は Platform への移行確認後、V11 で削除 |
| V11 | 旧作業者テーブル(fl_operator · fl_operator_scope および各履歴テーブル)を削除。Platform への移行完了とマークされた導入(fl_account_sync.imported_at)からのみ削除し、未移行の導入は保持 |
| V12 | 設備「主要値» fl_key_value — 設備ごとに概要に優先表示するタグを最大6個まで(タグIDと順序のみ、値は V5 から読み取り) |
| V13 | 顧客ロゴ fl_brand_logo — ライトモード・ダークモードの PNG 各1枚 |
| V14 | 設備デフォルト範囲 fl_device.default_scope_type の許可段階を SITE · AREA · LINE · ASSET の4段階に拡張(以前は LINE · ASSET)。既存行は維持 |
スキーマ名の変更。 アプリは Flyway より先に frontline スキーマが存在し pf がない場合のみ ALTER SCHEMA frontline RENAME TO pf を一括で1回実行する。テーブル · データ · Flyway 履歴 · 設定(ai.url · ai.api_key)はそのまま移行され、コピーは行わない。再起動後は pf が存在するため何もしない(べき等)。新規導入時は Flyway が pf を作成する。両方存在する場合は推測せず警告のみを残し pf を使用する。DB が応答しない場合は起動しない — スキップすると Flyway が空の pf を作成し、データが消失したように見えるため。
作業者アカウントの移行。 起動後の初回同期前に fl_operator · fl_operator_scope を V5 POST /app-accounts/frontline/import へ1回送信する。PIN ハッシュはそのまま移行する(再ハッシュしない)。社員に連携されていないログインは Platform が社員 EMP_FL_<로그인 번호> を作成して紐付ける。Platform に既に存在するログイン番号は Platform 側を優先する(EXISTS)。全行が CREATED · EXISTS で返ってきた時点で完了とマークし、それ以外は次回回に再送する(べき等)。
Platform との境界
OEE · 稼働率 · 性能 · 品質 · 停止時間 · 損失 · MTBF · MTTR は Platform V5 が提供した値のみを表示する。Platform が提供しない値は空欄または«データなし»とするか非表示にし、0 や推定値で埋めない。画面で計算するのは表示用の進捗率(良品 ÷ 計画)のみであり、グラフは V5 の値をそのまま描き、軸単位のみを変更する。これにより、タブレット · Platform Web · レポート · AI が同一の数値を参照する。
- Platform データは V5 経由でのみ読み書きする。同じ
ppデータベースにあっても Platform テーブルを直接参照・更新せず、pfスキーマに Platform データのコピーを保持しない。点検呼出と不良記録もアプリ側にコピーは持たず、正本は V5 の点検オーダー · 不良記録とする。 - 唯一の例外 — ログインキャッシュ
fl_account_cache。 Platform が再起動している間も現場でログイン可能にするために保持する。詳細は以下 作業者アカウント。他のテーブルに PIN ハッシュ · 社員名 · 在籍状態を持たせない(テストで禁止)。 - MES 機能を実装しない。 作業者アカウントはログイン手段(ログイン番号 · 役割 · PIN)と 担当範囲(参照可能範囲)のみを管理する。担当範囲は MES の人員配置ではなく、資格 · 交替編成 · 個人実績 · 人員集計は扱わない。オーダーは選択して開始 · 一時停止 · 再開 · 終了 · 中断(理由コード)を行い、時間基準のオーダー達成率を報告する — 発行 · 編集は Platform で行う。
pfスキーマに保持するのは、設備(デフォルト言語 · 画面テーマ含む) · 設備別理由一覧 · キオスク設定 · 交替メモ · 監査ログ · セッション、およびログインキャッシュ(fl_account_cache·fl_account_sync)である。作業者アカウント(ログイン番号 · PIN ハッシュ · 役割 · 担当範囲 · 画面言語 · テーマ)の正本は Platformpp.mm_app_account·pp.mm_app_account_scopeである。- V5 呼出時は、閲覧者の言語を
Accept-Languageとして送信する。停止理由 · 故障モード · 不良原因名は V5 が返したままの形式で表示する。
判定も Platform が行う
画面に表示する判定はアプリで行わず、V5 が提供した値をそのまま使用する。アプリ側にあった判定コード(計画 · 出典 · 長さ比較、交替ウィンドウ選択と8時間代替ウィンドウ)は削除した。
| 判定 | V5 の出典 |
|---|---|
| 今回の交替ウィンドウ | GET /calendar/shift-schedule/current。勤務表がない場合の«最近9時間»も V5 が提供する(ユーザーが12時間を選択した場合はその分拡張する)。V5 がウィンドウを返せない場合、カードはその拒否内容をそのまま伝え、アプリ側でウィンドウを捏造しない |
| «現在計画» オーダー | 同一レスポンスの planned_order_id |
| 理由が未入力の停止 | 停止ごとの needs_reason |
| 短時間停止 | 停止ごとの short。基準は GET /config/PP_STOP_MICRO_STOP_SECONDS(デフォルト60秒、0~1800、0 の場合は全て問い合わせる) |
アプリが呼ぶ V5
| 読み取り | 用途 |
|---|---|
GET /site · /asset/lines/by-site/… · /asset/equipments/by-line/… · /path/asset/… | 範囲選択(サイト → ライン → 設備) |
GET /asset/… · GET /site/… · GET /asset/equipments/by-line/… | 担当範囲ノード解析(親チェーン)。ラインの計画対比は設備一覧で問い合わせる |
GET /asset/…/status | 状態と持続時間 |
GET /kpi/oee/status/current · /kpi/period | 交替 OEE、ダッシュボード期間指標 |
GET /kpi/daily | ダッシュボード · レポートの日別推移 |
GET /ram/breakdown?by=CAUSE · /failure-dictionary/alarm-cause | 故障原因パレートと原因名 |
GET /asset/…/stops · /asset/…/stop-loss | タイムライン、理由未入力停止、短時間停止、停止理由別損失 |
GET /asset/…/timeline/alarms | アラーム(min_priority, limit=500)。BFF が進行中(最近7日以内に発生したもの)と今日終了したもののみを抽出 |
GET /stop-reasons | 原因辞書(理由ボタン、設定の停止理由一覧) |
GET /calendar/shift-schedule/current | 今回の交替ウィンドウ(asset_id)。応答項目は from_ts · to_ts · shift_code · shift_date · from_plan · planned_order_id |
GET /config/PP_STOP_MICRO_STOP_SECONDS | 短時間停止基準(1分キャッシュ) |
GET /order/query · /order/current-asset · /order/… · /order/…/quantity | オーダー一覧 · 進行オーダー · 詳細 · 数量 |
GET /order/…/revisions · /order/…/progress | 変更履歴、達成率報告履歴。V5 は社員番号のみを返すため、BFF がログインキャッシュから名前を探し names として付与する(社員番号がない場合はそのまま) |
GET /maintenance-orders · /maintenance-orders/options · /maintenance-orders/… | 点検ボード(open=true&order=asc&limit=100, 範囲 · 担当者フィルタ)、症状 · コード一覧、取消前確認 |
GET /asset/…/defects/options · /asset/…/defects · /order/…/defects · /defects/… | 不良原因一覧、設備 · オーダーの不良記録 |
GET /asset/qr/{token} | 読み取った QR ラベルのトークン → 設備。BFF のみが呼び出し、トークンはログに残さない |
GET /order/deviation-summary · /defects/summary · /maintenance-orders/summary | レポートの計画対比 · 不良原因 · 点検要約(遅延読み込み) |
GET /order/query はワークオーダー画面のために line_id · site_id · status=END,ABORTED · end_since · end_before · include=oee · sort · limit=500 · order_id フィルタを使用する。点検ボードの読み取りは BFF が 5秒、点検 · 不良 options は 60秒の共有キャッシュを持ち、書き込み時にクリアする。
| 書き込み | 用途 | ヘッダー |
|---|---|---|
PUT /asset/{asset}/stops/{started_at}/reason | 停止理由記録 | Idempotency-Key |
PUT /order/{order}/quantity | 数量訂正(良品 · 不良 合計 + 理由) | Idempotency-Key |
POST /order/{order}/start · pause · resume · end | オーダー遷移。本文に押下時刻 occurred_at(epoch ms) | If-Match (オーダー version) |
POST /order/{order}/abort | オーダー中断。abort_code · abort_notes · occurred_at | If-Match · Idempotency-Key |
POST /order/{order}/progress | 達成率報告。percent_complete(0~100 整数) · note · reported_at | If-Match · Idempotency-Key |
POST /asset/{asset}/maintenance-orders | 点検呼出(maintenance_kind_code: CORRECTIVE, failure_mode_code · 説明 · 呼出者) | Idempotency-Key · X-PP-Channel: FRONTLINE |
POST /maintenance-orders/{id}/transition | 受付 · 修理開始 · 完了(status_code + 処置 · 部品 · 故障コード)、取消(status_code: CANCELLED + cancel_reason_code)。version は本文に記載 | Idempotency-Key · X-PP-Channel |
POST /asset/{asset}/defects | 不良記録 | Idempotency-Key · X-PP-Channel |
POST /defects/{id}/cancel | 不良記録取消 | If-Match · X-PP-Channel |
- 全ての書き込みに
X-PP-Performed-By: 로그인한 사번を含める。V5 はこれをperformed_byとして記録しchanged_byはアプリアカウントとする。オフラインキューで後送する場合も押下者の社員番号が記録される。 - 書き込みには
Idempotency-Keyを付与する。オフラインキューで再送しても V5 が同一の書き込みを二重に受け取らないようにする。 - オーダー遷移は
If-Matchで version を合わせる。その間に他者が変更していた場合は 409 が返され、画面に«他の人が先に変更しました»と表示する。 - オーダー遷移 · 中断 · 不良記録は 押下時刻 を記録する。キューから後送されても実績時刻は押下時刻となる。
- «前オーダーを終了して開始» は BFF が
endとstartを順に呼び出す。各フェーズで個別のべき等キーを使用し、両フェーズに同一の押下時刻を記録する。2番目が失敗しても1番目は切り戻さず、そのまま通知する。
V5 自体については API 文書を参照。
QR ラベルからのアクセス時
Platform の 公開ページ «frontline で開く» は <PP_UI_FRONTLINE_URL>/#/qr/<token> として遷移する。アドレスに設備 ID は含まれない。
- アプリはトークンをアドレスから直ちに削除し、そのタブの sessionStorage に保持する(
fl.qr_pending)。ログイン前にはサーバーへ送信しない。 - ログイン後、トークンを取り出し BFF
POST /api/v1/qr/resolveの 本文 で送信する — パスに含めると通過するアクセスログに全て残るため。 - BFF はトークンの形式(base64url 43文字)をまず確認し、V5
GET /asset/qr/{token}で設備を特定し、当該アカウント · タブレットがその設備を選択可能か範囲チップと同ルールで確認する。 - 通過した場合、アプリが範囲をその設備に移動させ«現在»を開く。
| 応答 | コード | 画面 |
|---|---|---|
| 400 | qr_token | ラベルトークンではない |
| 404 | qr_unknown | 再発行済みまたは設備が消失した |
| 403 | scope_denied | 担当範囲外である |
作業者アカウント V5
作業者アカウントは Platform V5 /api/v5/app-accounts/frontline に存在する。ADMIN トークンまたは Platform マスターキーのみ呼び出し可能(変更フィードに PIN ハッシュが含まれるため)。
| 呼出 | 用途 |
|---|---|
GET /app-accounts/frontline | アカウント一覧(社員名 · 在籍状態含む)。アプリの読み取り専用«作業者»タブ |
GET /app-accounts/frontline/{employee_id} | 単一レコード(ETag = version) |
PUT /app-accounts/frontline/{employee_id} | アカウント作成 · 修正(ログイン番号 · 役割 · 許可 · 一時 PIN) |
DELETE /app-accounts/frontline/{employee_id} | ログイン削除(社員は保持)。最後の管理者は削除不可 |
PUT /app-accounts/frontline/{employee_id}/scope | 担当範囲 — {"all": true} または {"nodes": [...]} |
POST /app-accounts/frontline/pin/verify | キーパッド PIN 確認。常に 200 と結果(OK · INVALID · LOCKED · DISABLED · PIN_RESET_REQUIRED · EMPLOYEE_INACTIVE · EMPLOYEE_ON_LEAVE)を返す |
POST /app-accounts/frontline/{employee_id}/pin | 本人 PIN 変更(現 PIN · 新 PIN) |
POST /app-accounts/frontline/{employee_id}/pin/reset | 管理者 PIN 初期化(一時 PIN, ロック解除含む) |
POST /app-accounts/frontline/{employee_id}/unlock | ロック解除 |
GET /app-accounts/frontline/changes | 変更フィード(カーソル)。ログインキャッシュがこれを読み取る |
POST /app-accounts/frontline/import | アプリの旧ログイン移行(べき等) |
- ログイン。 Platform に接続できれば BFF は
pin/verifyのみを呼び出す。失敗回数 · ロック(5回ミスで5分) · 退職 · 休職拒否は Platform が制御する。 - ログインキャッシュ。
AccountSyncが 60秒ごとに変更フィードをカーソルから最後まで読み取りfl_account_cacheを同期させる(スナップショットに PIN ハッシュ · 在籍状態 · 範囲が含まれる)。キャッシュは Platform に接続できない場合のみ読み取り、最終成功同期がaccounts.offline_days(管理者«キオスク»画面, デフォルト7日, 1~30日)より古い場合はオフラインログインを拒否する(fail-closed,503 offline_login_expired)。 - オフライン失敗。 キャッシュで確認し PIN が不一致の場合、アプリ側で回数をカウントし(個人別5回で5分、設備別20回で15分)、Platform へは送信しない。
- オフラインで不可な操作。 PIN 変更 · 画面言語 · テーマ変更は Platform 接続時のみ可能。アカウント編集 · PIN 初期化 · ロック解除はアプリ側には実装せず(コンソール«社員»で実施)。
- 本人が変更可能なのは PIN(BFF
PUT /v1/session/pin) · 画面言語 · テーマ(PUT /v1/me/preferences)と, «マイプロファイル» の連絡先 · 写真(PUT /v1/me/profile·PUT /v1/me/photo, Platform 社員情報)である。
二重化(HA)について
Platform 二重化の PG メタ同期により、frontline のデータも待機クラスターへ移行される。
| 移行対象 | 非移行対象(ノード毎) |
|---|---|
作業者アカウントと担当範囲 pp.mm_app_account · pp.mm_app_account_scope(PIN ハッシュ含む) | セッション · 設備登録コード · 監査ログ · 交替メモ · べき等記録 |
キオスク設定 pf.fl_setting · 設備別停止理由一覧 pf.fl_asset_reason_list · 登録タブレット pf.fl_device | ログインキャッシュ fl_account_cache · fl_account_sync — 各ノードが自身の Platform 変更フィードで埋める |
AI キー(fl_setting の ai.api_key)は metasync.include.tokens=true の場合のみ |
Platform 再起動時
Platform の再起動は通常 1~3分、長くとも 10分程度である。その間もアプリは停止しない。
- BFF は V5 または自社 DB に接続できない場合、
503とX-FL-Offlineヘッダーで«現在不可»を通知する。拒否(4xx)とは区別される。 - Web はその応答を受け取ると接続断として表示し、画面は最終値を«3分前基準»のように受信時刻と共に表示する。捏造値は出さず、BFF が最後に提供した値のみを表示する。
- キューに格納されるのは、停止理由 · オーダー遷移(中断含む) · 達成率報告 · 点検呼出 · 不良記録である。同一オーダー · 停止に触れる入力はキュー順を維持し、前のものが拒否された場合は後のものは送信せず、ユーザーの判断を待つ。
- 復帰は
/api/healthを 2 · 4 · 8 · 15秒(以降15秒繰り返し)間隔で問い合わせ、DB と Platform が共にUPであれば接続状態に戻し、キューを送信し、画面を再読み込みする。 - 数量訂正 · 点検段階移行 · 点検呼出取消 · 不良記録取消はキューに入れない — その時点の値と version を基準に判断する書き込みであるため、接続状態でのみ受け付ける。既にキューにある点検呼出の取消は、キューから削除することで完結させる。
- V5 読み取りのタイムアウトは接続 2秒、応答 5秒とする。レポートの重量級要約(計画対比 · 不良 · 点検)のみ 20秒まで待機し、それを超えても回路を開放(サーキットブレイカー)はせず、当該カードのみ
504 platform_slowで失敗させ接続断状態へは移行させない。
PlantPulse AI チャット
タブレットの«AI に聞く»は BFF が PlantPulse AI の現場チャット API へ中継する。Platform V5 とは別接続であるため、AI の遅延や停止が Platform の接続断として扱われることはない。
| BFF | AI 側 | 用途 |
|---|---|---|
GET /api/v1/chat/capabilities | GET /api/v1/chat/capabilities | ボタン表示の可否(60秒記憶)。範囲がないユーザーは AI を呼び出さず«なし»と表示 |
POST /api/v1/chat/stream | POST /api/v1/chat/stream | 応答を SSE で受け取りそのままストリーム送信 |
POST /api/v1/chat/cancel | POST /api/v1/chat/cancel | 停止。同一ユーザーの会話のみ |
- アドレスとキーはアプリ DB
fl_settingのai.url·ai.api_keyに保持(設定 → AI)。キーはX-API-Keyでのみ送信し、ログ · 応答 · 例外文には記載しない。 - リクエストには«代理問い合わせ者»としてログイン済み社員番号(
X-PP-Performed-Byと同一値)とその人物の範囲(範囲確認と同ルール)を載せる。範囲がない場合は AI を呼び出さず 403 を返す。 - 画面言語は
Accept-Languageとして送信する。
認証 — 三層構造
| 層 | 内容 | 保存場所 |
|---|---|---|
| Platform キー | Platform マスター API キー。BFF のみが保持 | コンテナ環境変数 PP_MASTER_API_KEY |
| 設備トークン | タブレット登録時に発行される乱数。DB にはハッシュのみ保存。有効期限はなく、管理者が解除した時点で終了。Authorization: Bearer で送信 | 当該ブラウザの localStorage(fl.device_token)。他ブラウザ · シークレットモード · サイトデータを削除したブラウザでは保持されないため未登録扱い |
| 作業者セッション | ログイン番号 + PIN で生成。PIN は Platform が確認(不可時はログインキャッシュ)。セッションは Platform 社員 ID を指し、自動ログアウト時間まで有効で設備トークンに紐付けられる。X-FL-Session で送信 | 当該タブの sessionStorage — リロード後も保持され、タブを閉じると消滅(ストレージ不可時はメモリ) |
- Platform V5 は USER 役割トークンを受け付けない(ADMIN · API のみ)。そのため個人ごとに Platform トークンを付与せず、マスターキー一つで呼び出す。誰が操作したかは V5 記録の
performed_by(上記X-PP-Performed-By)とアプリの監査ログ(fl_audit— 社員番号 · 設備 · V5 パス · 応答コード · Idempotency-Key)の両方に記録される。 - Platform 監査ログで本アプリの呼出は行為者
master-api-keyとし、プロキシログでは User-AgentPlantPulse-frontline-web/<version>で区別する。 - 全ての BFF ハンドラーはアクセスレベルを明記する — 表記がない場合は拒否をデフォルトとする。
- トークン · PIN はログ · 応答 · 例外文に記載しない。
役割確認
ハンドラーごとに @Access で許可役割を記述する。画面上のボタン非表示とは別に、サーバー側で再度ブロックする。
| 操作 | 許可役割 |
|---|---|
| 点検受付 · 修理開始 · 完了 | 点検 · 管理者 |
| オーダー中断 | 班長 · 管理者 |
| 点検呼出 · 点検呼出取消 · 不良記録 · 不良記録取消 | 全4役割。取消はハンドラーで再確認 — 本人または班長 · 管理者 |
設定(/v1/admin/) | 管理者 |
範囲確認
役割の次に 担当範囲 を確認する。全ての現場リクエストは scope/ScopeInterceptor の一箇所を通過する(認証インターセプタの後)。
- 対象はパス · クエリに含まれる設備 · ライン · オーダー(V5 で設備を確認) · 点検オーダー · 不良記録である。読み取りは範囲内である必要があり、書き込みは
RWである必要がある。 - 範囲外の場合は
403 scope_denied、閲覧専用で書き込みを試みた場合は403 scope_read_onlyを返す。 @OpenToReadOnly(点検呼出, 点検呼出取消)は読み取りレベルでのみ確認する — 設備を«閲覧»権限のみで受け取ったユーザーも点検を呼出できなければならないため。他人の呼出取消はハンドラーで再度ブロックする。- ログイン範囲 = アカウント範囲 ∩ 設備デフォルト範囲(
ScopeGuard.within)。アカウントノードが設備ノードと同一またはその下位にあればそのまま保持し、設備ノードより上位にあれば設備ノードを当該アカウントノードの access として付与する。重複しないノードは破棄する。アカウントがscope_allの場合は設備ノードRWとなる。設備側で範囲を広げたりROをRWに昇格させることはない。管理者役割およびデフォルト範囲を持たない設備は絞り込まない。設備デフォルト範囲はサイト · エリア · ライン · 設備いずれの段階でも設定可能(DeviceScope)。 - ノードは下位へ継承される。1つの設備が
RWとROを同時に受け取った場合RWが優先される。ノードは V5 で親チェーンを解析し 5分間保持する。V5 から削除されたノードのアクセス権は 0 となる。 - ダッシュボード · レポートは そのノード自体 が範囲内である必要がある。設備一つを許可されたからといって、そのラインのダッシュボードが開くことはない。
- 一覧はハンドラーで絞り込む — 範囲ツリー、ラインカード · アラーム数、ワークオーダー(行ごとに access を同封)、点検ボード。
- fail-closed である。
scope_allでもなくノードも存在しない場合は何も読み取れない。範囲は Platform アカウント(pp.mm_app_account.scope_all·pp.mm_app_account_scope)から派生し、アプリ側には範囲を修正する API は存在しない。V5 は空のノード一覧を«何もない»として受け取り、ノードは最大 200個までとする。 - 管理者役割は範囲確認なしで全権限を持つ。管理 API(
/v1/admin/)は範囲確認をスキップし管理者役割のみを確認する。 - ログインしていないタブレット(«PIN なしで «現在» 表示»)は、設備デフォルト範囲のみを
ROで読み取る。
ログイン応答には 4つの範囲項目が含まれる。
| 項目 | 意味 |
|---|---|
scope | {"all": true} またはノード一覧(id · kind · access) |
scope_none | このタブレットで表示可能なものが一切ない — Web はメニューなしで案内とログアウトのみを表示 |
scope_none_reason | scope_none 時の理由。ACCOUNT はアカウントに範囲がない(«範囲未指定»), TABLET はアカウント範囲と本タブレット範囲が重複しない(«このタブレットで表示可能な範囲がありません») |
home_scope | 画面が開始する範囲(最後に選択したもの、なければ設備デフォルト範囲)がユーザー範囲外である場合に代わりに開く最初の設備またはライン |
環境変数
| 変数 | 内容 |
|---|---|
PP_TZ | 表示タイムゾーン(必須)。保存は UTC epoch、画面はこのタイムゾーンで表示。日付跨ぎ · «今日» · 日付跨ぎウィンドウの日付グループもこのタイムゾーンに従う |
PP_LANG | 導入言語(必須)。サポート言語一覧のタグ(現在は ko · en)である必要があり、大文字小文字と地域バリアント(en-US)も許容する。一覧にない場合は起動しない |
PP_SERVER_URL | Platform V5 アドレス |
PP_MASTER_API_KEY | Platform マスター API キー。server-web · batch-web · warehouse-web と同一の値 — 変更時は 4つ同時に再起動する |
PP_POSTGRES_HOST · PP_POSTGRES_PORT | データレイク PostgreSQL |
PP_DB_NAME · PP_PG_USER · PP_PG_PASSWORD | Platform データベース(pp)とアカウント。server-web · batch-web · warehouse-web と同一名称 · 同一値。frontline 専用アカウント · パスワードは存在しない |
PP_MASTER_API_KEY · PP_PG_PASSWORD · PP_POSTGRES_HOST がない場合、コンテナは起動しない。JVM ヒープは 512 MB(direct 128 MB)に固定。担当範囲 · 点検 · 不良 · レポートのために新設された変数はない。
新しい画面言語を追加するには、Web バンドルに web/src/i18n/<태그>.json を含め、サーバーのサポート言語一覧に1行追加する。スキーマは変更しない(V5)。
今後の実装項目
以下の項目はまだアプリに実装されていない。画面上にスペースは確保しておらず、Platform に汎用 V5 API が実装され次第、BFF に呼出を追加して開く。
| 項目 | 現状 | Platform に必要なもの |
|---|---|---|
| 週別推移 · 過去期間比較 | なし(日別推移は /kpi/daily で実装済み) | 週単位の期間系列 |
| エネルギー(EMS) | なし — ダッシュボードタブもレポート節もない | EMS API |
| ライン単位の停止理由別損失 | なし — 設備のみで描画 | ライン範囲の停止損失集計 |
| 時間別 実績 / 目標 | なし | 時間別目標 · 実績 API |
| 交替損失ウォーターフォール | なし — 交替 OEE ウィンドウには OEE · 稼働率 · 性能 · 品質と停止理由上位のみが存在 | 損失分解 |
| 停止手動登録 · 時間帯別数量 | なし | 停止書き込みパス, 時間帯別数量書き込み |
以前のバージョンでこの表にあった項目のうち、以下は実装済みである。
| 項目 | 実装方法 |
|---|---|
| 操作者(Platform 記録の社員番号) | 全書き込みの X-PP-Performed-By → V5 performed_by |
| 点検呼出 → 受付 → 修理開始 → 完了 | V5 /maintenance-orders |
| 不良数量 + 理由 | V5 /defects |
| 日別推移 | V5 /kpi/daily |
| 交替 · 日 · 週間レポート | BFF GET /v1/report が V5 の KPI · オーダー · 要約 API を集約 |