ores.trading.swaption_instrument

Table of Contents

Represents a swaption — an option granting the right to enter into an interest rate swap at a future date. Exercise type may be European, Bermudan, or American.

1. Flags

2. Natural keys

3. Columns

3.1. instrument_id

UUID uniquely identifying this swaption instrument.

Surrogate key for the instrument record.

3.2. trade_type_code

Trade type code (soft FK to ores_trading_trade_types_tbl).

std::string("EuropeanSwaption")

3.3. party_id

Party that owns this instrument.

Set from session variable app.current_party_id.

3.4. trade_id

Optional soft FK to the parent trade.

Links instrument to a trade if applicable.

3.5. expiry_date

Option expiry date.

ISO 8601 date string (YYYY-MM-DD).

std::string("2025-06-15")

3.6. exercise_type

Exercise type: European, Bermudan, or American.

Determines when the option may be exercised.

std::string("European")

3.7. settlement_type

Settlement type: Cash or Physical.

Determines how the swaption is settled upon exercise.

std::string("Physical")

3.8. long_short

Position direction: Long or Short.

Indicates whether the party holds or writes the option.

std::string("Long")

3.9. start_date

Optional underlying swap start date.

ISO 8601 date string (YYYY-MM-DD). Null if not yet determined.

3.10. maturity_date

Optional underlying swap maturity date.

ISO 8601 date string (YYYY-MM-DD). Null if not yet determined.

3.11. description

Optional free-text description.

Human-readable notes about this instrument.

4. SQL

4.1. Flags

4.2. Checks

expression
"exercise_type" in ('European', 'Bermudan', 'American')
"settlement_type" in ('Cash', 'Physical')
"long_short" in ('Long', 'Short')
"maturity_date" is null or "start_date" is null or "maturity_date" > "start_date"

4.3. Indexes

name columns unique current_only where_extra
party tenant_id, party_id false true  
trade_id tenant_id, trade_id true true trade_id is not null

5. Insert trigger

5.1. Validations

column validation_function
trade_type_code ores_trading_validate_trade_type_fn

6. C++

The C++ domain class is decomposed into nested sub-structs (the C1202 pattern from PRs #1047/#1071/#1075/#1083/#1085): the implicit scaffolding columns (version, tenant_id, workspace_id, the primary key) and the columns marked :group: identity below fold into an instrument_identity identity; member (see the ores.trading.instrument_identity field-group model), the implicit audit columns fold into an ores::dq::domain::audit_record audit; member (see the ores.dq.audit_record field-group model), and the remaining columns stay flat in between. The SQL schema, DB entity and column lists are unaffected — only the domain class and the mapper's domain-side accesses nest. The entity templates consume these annotations; domain and repository profiles regenerate correctly.

6.1. Flags

6.2. Repository

6.3. Domain includes

#include <chrono>
#include <string>

6.4. Conventions

6.5. Table display

column header
identity.instrument_id ID
identity.trade_type_code Type
expiry_date Expiry Date
exercise_type Exercise
settlement_type Settlement
long_short Long/Short
start_date Start Date
maturity_date Maturity Date
audit.recorded_at Recorded At

6.6. Custom repository methods

7. See also

Emacs 29.3 (Org mode 9.6.15)