{"record":{"id":"37a6062597a10630","repo":"nautechsystems/nautilus_trader","slug":"ax-dated-contract-has-different-quote-and-settl","errorCode":null,"errorMessage":"AX dated contract {} has different quote and settlement currencies: {} and {}","messagePattern":"AX dated contract (.+?) has different quote and settlement currencies: (.+?) and (.+?)","errorType":"validation","errorClass":"anyhow::Error","httpStatus":null,"severity":"error","filePath":"crates/adapters/architect_ax/src/http/parse.rs","lineNumber":300,"sourceCode":"        );\n    }\n\n    if let Some(v) = definition.price_band_upper_deviation_pct {\n        info.insert(\n            \"price_band_upper_deviation_pct\".to_string(),\n            json!(v.to_string()),\n        );\n    }\n\n    if let Some(v) = definition.price_band_lower_deviation_pct {\n        info.insert(\n            \"price_band_lower_deviation_pct\".to_string(),\n            json!(v.to_string()),\n        );\n    }\n\n    if let Some(expiration) = definition.expiration {\n        anyhow::ensure!(\n            definition.quote_currency == definition.funding_settlement_currency,\n            \"AX dated contract {} has different quote and settlement currencies: {} and {}\",\n            definition.symbol,\n            definition.quote_currency,\n            definition.funding_settlement_currency\n        );\n        let expiration_ns = datetime_to_unix_nanos(Some(expiration))\n            .context(\"Failed to convert AX contract expiration to Unix nanoseconds\")?;\n        let multiplier = decimal_to_quantity(definition.multiplier, \"multiplier\")?;\n        info.insert(\n            \"expiration\".to_string(),\n            json!(expiration.display_with_offset(Offset::UTC).to_string()),\n        );\n        info.insert(\n            \"activation_source\".to_string(),\n            json!(\"unavailable_from_ax\"),\n        );\n","sourceCodeStart":282,"sourceCodeEnd":318,"githubUrl":"https://github.com/nautechsystems/nautilus_trader/blob/18893faf8b356be3320add8de2f861b0b647cf06/crates/adapters/architect_ax/src/http/parse.rs#L282-L318","documentation":"For dated (expiring) AX contracts, the quote currency and the funding settlement currency must be identical. The adapter enforces this because dated futures settle in their quote currency in its accounting model; a mismatch would produce inconsistent money calculations.","triggerScenarios":"parse_instrument (via request_instruments/request_instrument) encountering an instrument definition with a non-None `expiration` whose quote_currency differs from funding_settlement_currency (e.g. quote BTC, settlement USDT).","commonSituations":"New AX listing with non-standard settlement (inverse-style contracts quoted in one currency but settled in another); wrong metadata from the venue; fixture copied from a perp and given an expiration without updating currencies.","solutions":["Verify the instrument metadata on the AX venue; if it is genuinely a mixed-settlement contract, the adapter currently does not support it.","Exclude the unsupported instrument from your instrument list or request a different set of symbols.","If the venue metadata is wrong, get it corrected upstream.","Extend the adapter (with maintainer guidance) if support for differing quote/settlement currencies is needed."],"exampleFix":"// before (payload)\n{ \"symbol\": \"BTC-28SEP26\", \"quote\": \"BTC\", \"funding_settlement_currency\": \"USDT\", \"expiration\": \"2026-09-28\" }\n// after\n{ \"symbol\": \"BTC-28SEP26\", \"quote\": \"USDT\", \"funding_settlement_currency\": \"USDT\", \"expiration\": \"2026-09-28\" }","handlingStrategy":"validation","validationCode":"fn dated_contract_supported(d: &InstrumentDefinition) -> bool {\n    d.expiration.is_none() || d.quote_currency == d.funding_settlement_currency\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Filter instrument lists to contracts the adapter supports before parsing","Verify venue metadata for newly listed dated contracts","Do not hand-edit fixtures copied from perps without updating currencies"],"tags":["rust","validation","instrument","currency","futures"],"backgroundTag":"invalid-config-value","analyzedSha":"18893faf8b356be3320add8de2f861b0b647cf06","analyzedAt":"2026-09-08T20:49:34.690Z","contentChangedAt":"2026-09-08T20:49:34.690Z","schemaVersion":2},"datasetVersion":"2026-09-23T08:17:48.524Z"}