ores.synthetic.api

Table of Contents

1. Diagram

ores.synthetic.api component diagram

Figure 1: ores.synthetic.api

2. Summary

ores.synthetic.api defines the types and the NATS protocol of the synthetic data component. All nine entities (folder, fx_spot_generation_config, gmm_component, ir_curve_generation_config, ir_curve_generation_config_process_parameter_value, ir_curve_template_entry, market_data_generation_config, yield_curve_process_parameter_definition, yield_curve_process_type) are code-generated from the entity models in modeling/. The facet also carries the feed classes that generate synthetic market data (fx_spot_feed, ir_curve_feed), the feed factory, and the IR curve template resolver.

3. Inputs

  • Entity models: modeling/ores.synthetic.{entity}.org, each bound to a variability profile. Codegen generates the domain types, table and JSON I/O, the per-entity test data generators, the changed-event types, and the NATS protocol headers from them.
  • Hand-written code: the feed classes, the template resolver, and the catalog generation types from the component's original purpose (synthetic_catalog.hpp and kin). The organisation generator that stood beside them is gone: what it built – parties, counterparties, business units, portfolios, books and contacts for a tenant – is not supported any more, and synthetic tenants and parties are their own work when they return.

4. Outputs

  • Domain headers for the nine entities, with JSON and table I/O.
  • Per-entity data generators used by tests and seeds.
  • NATS protocol headers for entity CRUD and history, feed configuration and control, simulation, and preview requests, including the shared simulate_paths_common.hpp bounds both simulate requests alias.
  • Feed classes that produce synthetic FX spot rates and IR curves.

5. Entry points

  • include/ores.synthetic.api/domain/ — entity, enum, and validation headers.
  • include/ores.synthetic.api/messaging/ — NATS protocol message headers.
  • include/ores.synthetic.api/eventing/ — per-entity changed-event types.
  • include/ores.synthetic.api/feeds/ — feed classes and the template resolver.
  • include/ores.synthetic.api/generators/ — per-entity data generators.

6. Dependencies

Public, because the domain and protocol headers name their types:

  • ores.marketdata.api — the i_feed interface and the market tick.
  • ores.refdata.api, ores.iam.api, ores.dq.api, ores.analytics.quant — types the generated entities and the feed classes carry.
  • ores.database — the context the IR template resolver reads reference data through.
  • ores.eventing.api — entity change event types.
  • ores.nats, ores.platform.

Private:

  • ores.marketdata.client and ores.marketdata.core — the fixing reads an FX feed starts from.
  • ores.refdata.core — the reference data the IR resolver resolves.
  • ores.utility — UUID and timestamp helpers.

The facet cannot depend on ores.synthetic.core, because core links api. Anything that reads a synthetic repository therefore lives in the service facet.

7. Build dependencies

What the shared profile cannot know, declared here rather than hand-edited into the generated build file. Each block is spliced into its generated file after the profile's baseline.

8. See also

9. Test dependencies

The suites link what the profile cannot know about.

target_link_libraries(${lib_target_name}
    PUBLIC
        ores.analytics.quant.lib
        ores.dq.api.lib
        ores.iam.api.lib
        ores.refdata.api.lib
        ores.eventing.api.lib
        ores.platform.lib
        ores.nats.lib
        ores.marketdata.api.lib
        ores.database.lib
    PRIVATE
        ores.utility.lib
        ores.marketdata.client.lib
        ores.marketdata.core.lib
        ores.refdata.core.lib
        faker-cxx::faker-cxx
        libfort::fort)

target_link_libraries(${lib_target_name} PRIVATE ores.codec.pch)
target_link_libraries(${tests_target_name}
    PRIVATE
        ores.synthetic.api.lib
        ores.marketdata.core.lib
        ores.utility.lib
        ores.testing.lib
        faker-cxx::faker-cxx
        Catch2::Catch2
        Threads::Threads)

Emacs 29.3 (Org mode 9.6.15)