Skip to content

feat: EXAA client for Austrian day-ahead prices#11

Closed
tommed wants to merge 1 commit intomainfrom
feat/exaa-client
Closed

feat: EXAA client for Austrian day-ahead prices#11
tommed wants to merge 1 commit intomainfrom
feat/exaa-client

Conversation

@tommed
Copy link
Copy Markdown
Contributor

@tommed tommed commented Mar 28, 2026

Summary

  • Adds EXAAClient wrapping nexa-connect-exaa with certificate-based auth (CertificateAuth)
  • Routes BiddingZone.AT to EXAA (removed from Nord Pool's routing); EXAA's Classic auction at 10:15 CET is the authoritative Austrian day-ahead price and the only source of 15-minute products for AT
  • Adds DataSource.EXAA to the types enum
  • NexaClient now accepts exaa_username, exaa_password, exaa_private_key_path, exaa_certificate_path with env var fallbacks (EXAA_*)
  • 11 new EXAAClient tests; 9 new routing tests in test_client.py
  • Uses FakeEXAAClient from nexa-connect-exaa for offline testing (no live API calls)

Design notes

EXAA's Classic auction (AT-only, 10:15 CET) is used rather than Market Coupling — it's the earlier, authoritative Austrian price and uniquely supports 15-minute resolution. DE-LU, NL, BE, FR remain on Nord Pool pending EPEX Spot implementation.

Test plan

  • make ci passes (lint, format-check, type-check, tests)
  • All 73 tests pass (3 pre-existing live ENTSO-E test failures are unrelated — require a real API key)
  • Coverage ≥ 95% overall; exaa.py at 86%
  • BiddingZone.AT confirmed absent from _NORDPOOL_ZONES, present in _EXAA_ZONES

🤖 Generated with Claude Code

EXAA (Energy Exchange Austria) is the home exchange for the AT bidding
zone. Its Classic auction runs at 10:15 CET, earlier than Nord Pool or
EPEX Spot, making it the authoritative Austrian day-ahead price source.
It also uniquely provides 15-minute MTU products for AT.

- Add EXAAClient wrapping nexa-connect-exaa with CertificateAuth
- Route BiddingZone.AT to EXAA; remove from _NORDPOOL_ZONES
- Add DataSource.EXAA to types enum
- Add nexa-connect-exaa git dependency
- Add EXAA_* env var support to NexaClient (username, password,
  private_key_path, certificate_path)
- 11 new tests for EXAAClient; 9 new tests for NexaClient routing
- Update README status table, .env.example, and configuration docs

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
@codecov
Copy link
Copy Markdown

codecov bot commented Mar 28, 2026

Codecov Report

❌ Patch coverage is 87.64045% with 11 lines in your changes missing coverage. Please review.

Files with missing lines Patch % Lines
src/nexa_marketdata/exaa.py 85.71% 11 Missing ⚠️

📢 Thoughts on this report? Let us know!

@tommed tommed closed this Mar 28, 2026
@tommed tommed deleted the feat/exaa-client branch March 28, 2026 19:26
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant