Software Layers
Jope.SMB 由自家開發的三層軟體堆疊構成,外加一個獨立的 Python 推論 process。 每層邊界明確,個別層可獨立演進不影響其他層。
Layer Stack
Layer 職責
Jope.Core · 底層框架
- Transport — Messaging (ZMQ abstractions)、HTTP helpers、WebSocket (future)
- Compliance — Append-only Audit trail、Electronic Signature service、hash-chain 完整性驗證
- Identity — User / Role / Permission / Session 管理、RBAC enforcement、4-eyes 輔助
- FileStorage — WAL-enabled file system 抽象、原子寫入
- Logging — 跨層 structured log 合約
- Localization — i18n service 與 resource loader
所有基於 Jope.Core 的應用都繼承相同的 compliance 與 identity 保證。
Jope.UI · 共用 WPF Shell
- Shell Framework — 主視窗 chrome、導覽 rail、routing、theme 切換(Light / Dark)、執行時 locale 切換
- Login / Session / Idle Lock — Layout A/B 自適應登入、閒置自動鎖定、session restore
- Electronic Signature Dialog — 可重用簽章 UI,強制執行 21 CFR 11.100 流程(password + meaning + reason)
- Dialogs — MessageDialog (5 levels)、Toast、LoadingOverlay、ChangePassword、UserSwitch、VendorAdminGate
- Design System — JopeDataTable、Card、StatusPill、IconBadge、PasswordStrengthMeter、JopeButton
Jope.UI 與產品無關。Jope.SMB、Jope.Raman 及未來的 Jope app 共用同一個 shell。
Jope.SMB.App · 應用層
- Batch FSM —
idle → running → held → completedstate machine(Stateless 驅動),transition 需簽章並 audit - Recipe / Script Engine — YAML recipe parser、trigger conditions、validation
- Device I/O — Pump / Valve / Raman / UV driver 實作(
IPump、IValve、IDetectorinterfaces) - PID Controller — 多迴路獨立流量控制,支援 setpoint ramping
- Process Flow — GST.Plugin.ProcessFlow 整合、flow diagram 視覺化
- FlexReport — Batch record report templates、匯出 PDF / Excel
Jope.SMB.App 建構於 Jope.Core + Jope.UI 之上,僅加入層析專用邏輯。
Inference Server · 獨立 Process
- 獨立 Python 3.11 process,以常駐 daemon 形式執行於專用 plant-LAN 主機(推薦 Linux + systemd,或 Docker / Podman)
- Stateless — 與 Console 無共享記憶體
- 鬆散耦合:可替換而不影響 C# codebase
- 只要遵守 ZMQ Protocol,可透明替換為其他演算法(SVR / DANN / ensemble)
Runtime deployment 見 Topology、wire contract 見 ZMQ Protocol。
依賴規則
- Jope.SMB.App 依賴 Jope.UI + Jope.Core
- Jope.UI 只依賴 Jope.Core — 不向上依賴
- Jope.Core 無 Jope-layer 依賴(僅 3rd-party + .NET SDK)
- Inference Server process 隔離;只透過 ZMQ + REST 通訊
靜態 code analyzer (Jope.UI.Analyzers) 在編譯時強制執行這些邊界。