@@ -62,6 +62,45 @@ serializer = NordPoolSerializer()
6262payload = serializer.serialize(Portfolio(bids = [bid]))
6363```
6464
65+ +++ mFRR Bids
66+
67+ ** nexa-mfrr-nordic-eam** is the starting point for BSPs building Nordic mFRR energy activation market bid workflows.
68+
69+ ``` python
70+ pip install nexa- mfrr- nordic- eam
71+ ```
72+
73+ ``` python
74+ from nexa_mfrr_eam import (
75+ Bid, BidDocument, Direction, MarketProductType,
76+ BiddingZone, TSO , MARIMode,
77+ )
78+
79+ # Create a simple divisible up-regulation bid
80+ bid = (
81+ Bid.up(volume_mw = 50 , price_eur = 85.50 )
82+ .divisible(min_volume_mw = 10 )
83+ .for_mtu(" 2026-03-21T10:00Z" )
84+ .resource(" NOKG90901" , coding_scheme = " NNO" )
85+ .product_type(MarketProductType.SCHEDULED_AND_DIRECT )
86+ .build()
87+ )
88+
89+ # Wrap in a document targeting Statnett
90+ doc = (
91+ BidDocument(tso = TSO .STATNETT )
92+ .sender(party_id = " 9999909919920" , coding_scheme = " A10" )
93+ .add_bid(bid)
94+ .build()
95+ )
96+
97+ # Validate, then serialise to CIM XML
98+ errors = doc.validate(mari_mode = MARIMode.PRE_MARI )
99+ if not errors:
100+ xml_bytes = doc.to_xml()
101+ # Send xml_bytes via your ECP/EDX endpoint
102+ ```
103+
65104+++ Exchange Connectivity
66105
67106** nexa-connect** is for teams building or maintaining direct exchange connections.
@@ -112,6 +151,7 @@ func main() {
112151| nexa-marketdata | Python | 3.10+ |
113152| nexa-bidkit | Python | 3.10+ |
114153| nexa-connect | Go | 1.21+ |
154+ | nexa-mfrr-nordic-eam | Python | 3.11+ |
115155| nexa-mcp | Python | 3.10+ |
116156
117157---
0 commit comments