Skip to main content

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 FSMidle → running → held → completed state 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, IDetector interfaces)
  • 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.