System Model: Domain Layer
Table of Contents
This page is part of the System Model. Domain is the reason ORE Studio exists — everything else is infrastructure supporting what lives here. Each domain component is a self-contained vertical that speaks ores.nats to every other vertical; none depends on any application component. To add new domain types, see the Domain Type Creator skill. To understand how tenants and parties are isolated at the messaging layer, see NATS multi-tenancy and multi-party design.
Detail
ores.refdata
Reference data — currencies, countries, coding schemes, FpML taxonomy, and market conventions. The foundational data set that all other domain services read; it is always a dependency, never a dependent.
| Sub-component | Role | Dependencies |
|---|---|---|
| ores.refdata.api | Shared reference data types and ores.nats protocol | — |
| ores.refdata.core | CRUD, validation, coding scheme resolution | ores.refdata.api, ores.database |
| ores.refdata.service | Thin ores.nats entrypoint | ores.refdata.core, ores.nats |
Related documents:
- Entity Catalogue — index of entity_view documents; one per domain entity,
each with
proj:links to every artefact across all projections. - Pricing Configuration — how pricing configurations relate to reference data entities.
- Coding Schemes — FpML coding scheme taxonomy and resolution logic.
- Librarian party & counterparty publication design — how reference data is propagated across party boundaries.
ores.iam
Identity and access management — account lifecycle, login with password/scrypt/SSO, session tracking with geolocation, and role-based authorisation. Multi-tenancy (tenant isolation) and multi-party (party-scoped data access) are both enforced here before any domain request is processed.
| Sub-component | Role | Dependencies |
|---|---|---|
| ores.iam.api | Shared IAM types and ores.nats protocol | — |
| ores.iam.client | ores.nats client for IAM — login, session, RBAC | ores.iam.api, ores.nats |
| ores.iam.core | Account lifecycle, RBAC, session management | ores.iam.api, ores.database, ores.security |
| ores.iam.service | Thin ores.nats entrypoint | ores.iam.core, ores.nats |
Related documents:
- Identity and Access Management — IAM concepts and the account/session model.
- Role-Based Access Control — RBAC graph, permission assignment, and enforcement.
- Multi-Tenancy Architecture — how tenant isolation is implemented in ores.iam.core.
- Multi-Party Architecture — multi-party login flow and party-scoped data access.
ores.dq
Data quality — provenance, validation metadata, change management, and DQ-6
governance. Owns the publish-from-dq cross-service write pattern: target
services expose <service>.v1.<entity>.publish-from-dq subjects so DQ can
initiate writes without violating service table isolation.
| Sub-component | Role | Dependencies |
|---|---|---|
| ores.dq.api | Shared DQ types and ores.nats protocol | — |
| ores.dq.core | DQ rules, provenance tracking, governance | ores.dq.api, ores.database |
| ores.dq.service | Thin ores.nats entrypoint | ores.dq.core, ores.nats |
Related documents:
- Data Quality — DQ-6 governance model, provenance design, and the publish-from-dq pattern.
ores.fpml
FpML processing infrastructure — parsing, validating, and serialising financial product XML. The FpML schema defines every instrument family; ores.fpml translates between FpML XML and ORE Studio internal types.
| Sub-component | Role | Dependencies |
|---|---|---|
| ores.fpml | FpML XML parsing, validation, serialisation | ores.utility |
Related documents:
- Financial Products Markup Language — the FpML standard and how ORE Studio uses it.
- Coding Schemes — how FpML coding schemes are mapped to ores.refdata entities.
ores.ore
| Sub-component | Role | Dependencies |
|---|---|---|
| ores.ore.api | Shared ORE types and ores.nats protocol | — |
| ores.ore.core | ORE XML parsing, domain type conversion | ores.ore.api, ores.database, ores.fpml |
| ores.ore.service | Thin ores.nats entrypoint | ores.ore.core, ores.nats |
ORE XML import/export — converts between Open Source Risk Engine XML format and ORE Studio domain types. The bridge between the ORE Engine computation layer and ORE Studio's domain model.
Related documents:
- ORE Model Configuration — the ORE XML model configuration format used for scenario runs.
ores.trading
Trade booking and lifecycle — FSM-enforced trade status transitions, portfolio and book management, and trade blotters. Every trade enters the system through ores.trading.core and is tracked through its full lifecycle from booking to settlement.
| Sub-component | Role | Dependencies |
|---|---|---|
| ores.trading.api | Shared trade types and ores.nats protocol | — |
| ores.trading.core | Trade FSM, portfolio/book management | ores.trading.api, ores.database, ores.refdata.api |
| ores.trading.service | Thin ores.nats entrypoint | ores.trading.core, ores.nats |
Related documents:
- Trade Blotter — trade lifecycle, blotter design, and FSM state transitions.
- P&L Attribution — how P&L is computed and attributed across trading books.
- Standing Settlement Instructions — SSI model and its relationship to trade booking.
ores.marketdata
Market data — series, observations, fixings, yield curves, and volatility surfaces. The data that flows into ORE Engine scenarios: curve shapes, vol surfaces, and fixing histories.
| Sub-component | Role | Dependencies |
|---|---|---|
| ores.marketdata.api | Shared market data types and ores.nats protocol | ores.refdata.api |
| ores.marketdata.core | Series, observations, curve/surface storage | ores.marketdata.api, ores.database |
| ores.marketdata.service | Thin ores.nats entrypoint | ores.marketdata.core, ores.nats |
Related documents:
- Interest Rate Curves — yield curve structure, interpolation, and storage model.
- FX Volatility Surface — vol surface design and calibration data model.
- Time Structures and Tenors — tenor conventions and time structure model used throughout market data.
ores.synthetic
Synthetic market data and scenario generation for stress testing and demo environments. Produces complete, internally consistent market data sets without requiring real market feeds.
| Sub-component | Role | Dependencies |
|---|---|---|
| ores.synthetic.api | Shared synthetic data types and ores.nats protocol | — |
| ores.synthetic.core | Scenario generation, curve/surface synthesis | ores.synthetic.api, ores.database, ores.marketdata.api |
| ores.synthetic.service | Thin ores.nats entrypoint | ores.synthetic.core, ores.nats |
ores.assets
| Sub-component | Role | Dependencies |
|---|---|---|
| ores.assets.api | Shared asset types and ores.nats protocol | — |
| ores.assets.core | Asset CRUD, tagging, hierarchical storage | ores.assets.api, ores.database |
| ores.assets.service | Thin ores.nats entrypoint | ores.assets.core, ores.nats |
Binary asset storage with hierarchical tagging and CRUD management. Stores images, attachments, and other binary content associated with domain entities.
ores.storage
File storage abstractions — local filesystem paths and HTTP-based remote storage. Used by the compute layer to stage ORE Engine input and output files between runs.
| Sub-component | Role | Dependencies |
|---|---|---|
| ores.storage | File staging abstraction for compute jobs | ores.database, ores.nats |
ores.scheduler
Task scheduling for compute jobs — wraps pg_cron to schedule ORE scenario runs
and report generation at defined intervals or calendar times.
| Sub-component | Role | Dependencies |
|---|---|---|
| ores.scheduler.api | Shared scheduler types and ores.nats protocol | — |
| ores.scheduler.core | pg_cron integration, schedule management | ores.scheduler.api, ores.database |
| ores.scheduler.service | Thin ores.nats entrypoint | ores.scheduler.core, ores.nats |
ores.reporting
Report execution and result persistence — runs ORE Engine output through configured report definitions and stores the results for retrieval by the analytics and UI layers.
| Sub-component | Role | Dependencies |
|---|---|---|
| ores.reporting.api | Shared reporting types and ores.nats protocol | — |
| ores.reporting.core | Report definition, execution, result storage | ores.reporting.api, ores.database, ores.refdata.api |
| ores.reporting.service | Thin ores.nats entrypoint | ores.reporting.core, ores.nats |
Related documents:
- Risk Reporting — report execution design and the relationship between report definitions and ORE output.
- P&L Attribution — how P&L reports are structured and attributed.
ores.analytics
Risk analytics results and aggregation — NPV, sensitivities, Greeks, and scenario analysis. Consumes ores.reporting output and provides the query layer for the analytics UI.
| Sub-component | Role | Dependencies |
|---|---|---|
| ores.analytics.api | Shared analytics types and ores.nats protocol | — |
| ores.analytics.core | NPV, sensitivity, scenario aggregation | ores.analytics.api, ores.database, ores.refdata.api |
| ores.analytics.service | Thin ores.nats entrypoint | ores.analytics.core, ores.nats |
ores.workflow
Workflow management for multi-step compute pipelines — tracks pipeline state, retries failed steps, and signals completion. Works with ores.scheduler and ores.compute to orchestrate end-to-end valuation runs. See Workspace design for how workspaces scope workflow execution.
| Sub-component | Role | Dependencies |
|---|---|---|
| ores.workflow.api | Shared workflow types and ores.nats protocol | — |
| ores.workflow.core | Pipeline state machine, step tracking, retry | ores.workflow.api, ores.database |
| ores.workflow.service | Thin ores.nats entrypoint | ores.workflow.core, ores.nats |
See also
- System Model — the index page with the four-layer architecture overview.
- System Model: Infrastructure Layer — the layer below.
- System Model: Application Layer — the layer above.
- NATS multi-tenancy and multi-party design — how tenant and party isolation is enforced at the messaging layer.
- Domain Type Creator — skill for adding new domain types.