Software Layers
Jope.SMB is built on a three-layer software stack developed in-house, plus one independent Python process for AI inference. Each layer has a clear boundary, so individual layers can evolve without disturbing others.
Layer Stack
Layer Responsibilities
Jope.Core · Foundational Framework
- Transport — Messaging (ZMQ abstractions), HTTP helpers, WebSocket (future)
- Compliance — Append-only Audit trail, Electronic Signature service, hash-chain integrity
- Identity — User / Role / Permission / Session management, RBAC enforcement, 4-eyes helpers
- FileStorage — WAL-enabled file system abstractions, atomic writes
- Logging — Structured log contracts used across the stack
- Localization — i18n service and resource loader
Every application built on Jope.Core inherits the same compliance and identity guarantees.
Jope.UI · Shared WPF Shell
- Shell Framework — Main window chrome, navigation rail, routing, theme switcher (Light / Dark), runtime locale switch
- Login / Session / Idle Lock — Layout A/B adaptive login, auto-lock after inactivity, session restore
- Electronic Signature Dialog — Reusable signature UI enforcing 21 CFR 11.100 flows (password + meaning + reason)
- Dialogs — MessageDialog (5 levels), Toast, LoadingOverlay, ChangePassword, UserSwitch, VendorAdminGate
- Design System — JopeDataTable, Card, StatusPill, IconBadge, PasswordStrengthMeter, JopeButton
Jope.UI is product-agnostic. Jope.SMB, Jope.Raman, and future Jope apps all use the same shell.
Jope.SMB.App · Application Layer
- Batch FSM —
idle → running → held → completedstate machine (Stateless-backed), transitions signed and audited - Recipe / Script Engine — YAML recipe parser, trigger conditions, validation
- Device I/O — Pump / Valve / Raman / UV driver implementations (
IPump,IValve,IDetectorinterfaces) - PID Controller — Multi-loop independent flow control with setpoint ramping
- Process Flow — GST.Plugin.ProcessFlow integration, flow diagram visualization
- FlexReport — Batch record report templates, export to PDF / Excel
Jope.SMB.App sits on top of Jope.Core + Jope.UI, adding only chromatography-specific logic.
Inference Server · Independent Process
- Separate Python 3.11 process, runs as a long-lived daemon on a dedicated plant-LAN host (Linux + systemd recommended; Docker / Podman alternative)
- Stateless — no shared memory with Console
- Loose coupling: replaceable without touching the C# codebase
- Can be swapped for a different algorithm (SVR / DANN / ensemble) transparently as long as the ZMQ Protocol is honored
See Topology for runtime deployment and ZMQ Protocol for wire contract.
Dependency Rules
- Jope.SMB.App references Jope.UI + Jope.Core
- Jope.UI references Jope.Core only — no upward dependencies
- Jope.Core has zero Jope-layer dependencies (only 3rd-party + .NET SDK)
- Inference Server is process-isolated; communicates only via ZMQ + REST
Static code analyzer (Jope.UI.Analyzers) enforces these boundaries at compile time.