Ancillary Service Offer (ASO)
Ancillary Service Offer (ASO)
An Ancillary Service Offer is used to offer ancillary services from a specified resource. The following diagram describes the structure of an Ancillary Service Offer (ASOffer):
The ASPriceCurve structure when used for ASOffers uses OnLineReserves (to provide price points for Reg-Up, RRS, and/or Online Non-Spin), RegDown elements (to provide price points for Reg-Down), or OffLineNonSpin elements (for Offline Non-Spin and/or OFFEC). The choice depends upon the value of asType, where the values provided can be one of REGUP-RRS-ONNS, Reg-Down or Off-Non-Spin. Up to five points can be specified for OnLineReserves, RegDown, or OffLineNonSpin. This structure is described in the following figure:
The following diagram provides details of the OnLineReserves, RegDown, and OffLineNonSpin structures:
On submission, the following table describes the items used for an ASOffer:
Element | Req? | Datatype | Description | Values |
---|---|---|---|---|
startTime | K | dateTime | Start time for bid | Valid start hour boundary for trade date |
endTime | K | dateTime | End time for bid | Valid end hour boundary for trade date |
externalId | N | string | External ID | QSE supplied |
expirationTime | Y | dateTime | Time of offer expiration | Valid time before trade date |
resource | K | string | Resource | Valid resource name |
asType | K | string | AS key code | Off-Non-Spin Reg-Down REGUP-RRS-ONNS |
combinedCycle | N | string | Combined cycle | Not required. Value ignored if provided. |
PriceCurve/startTime | Y | dateTime | Start time for curve | Valid hour boundary |
PriceCurve/endTime | Y | dateTime | End time for curve | Valid hour boundary |
ASPriceCurve/OnLineReserves/xvalue (Required if asType = REGUP-RRS-ONNS) |
Y | float | Megawatts | Quantity in MW |
ASPriceCurve/OnLineReserves/REGUP | N | float | $/MWh | Price in $/MWh |
ASPriceCurve/OnLineReserves /RRSPF | N | float | $/MWh | Price in $/MWh |
ASPriceCurve/ OnLineReserves /RRSFF | N | float | $/MWh | Price in $/MWh |
ASPriceCurve/ OnLineReserves /RRSUF | N | float | $/MWh | Price in $/MWh |
ASPriceCurve/ OnLineReserves /ONNS | N | float | $/MWh | Price in $/MWh |
ASPriceCurve/ OnLineReserves /ECRS | N | float | $/MWh | Price in $/MWh |
ASPriceCurve/ OnLineReserves /block (Required if asType = REGUP-RRS-ONNS) |
Y | string | Used as an indicator to describe the type of block | FIXED or VARIABLE |
ASPriceCurve/RegDown/xvalue or ASPriceCurve/OffLineNonSpin/xvalue (Required if asType = Reg-Down or Off-Non-Spin) |
Y | float | Megawatts | Quantity in MW |
ASPriceCurve/RegDown/REGDN (Required if asType=Reg-Down) |
Y | float | $/MWh | Price in $/MWh |
ASPriceCurve/OffLineNonSpin/OFFNS (asType=Off-Non-Spin) |
N | float | $/MWh | Price in $/MWh |
ASPriceCurve/OffLineNonSpin/OFFEC (asType=Off-Non-Spin) |
N | float | $/MWh | Price in $/MWh |
ASPriceCurve/RegDown/block or ASPriceCurve/OffLineNonSpin/block (Required if asType = Reg-Down or Off-Non-Spin) |
Y | String | Used as an indicator to describe the type of block | FIXED or VARIABLE |
ASPriceCurve/multiHourBlock | N | Boolean | Indicates if offer must be taken as a block for all hours. | Default is false |
The following is an XML example for an ASOffer, for the AS types of Reg-Up, RRS, and online Non-Spin:
<BidSet>
<tradingDate>2021-11-16</tradingDate>
<ASOffer>
<startTime>2021-11-16T00:00:00-06:00</startTime>
<endTime>2021-11-17T00:00:00-06:00</endTime>
<externalId>ERCOTTEST</externalId>
<expirationTime>2021-11-16T23:59:59-06:00</expirationTime>
<resource>RES_1</resource>
<asType>REGUP-RRS-ONNS</asType>
<ASPriceCurve>
<startTime>2021-11-16T00:00:00.000-06:00</startTime>
<endTime>2021-11-17T00:00:00.000-06:00</endTime>
<OnLineReserves>
<xvalue>11</xvalue>
<REGUP>23.00</REGUP>
<RRSPF>20.00</RRSPF>
<RRSFF>19.00</RRSFF>
<RRSUF>18.00</RRSUF>
<ONNS>1</ONNS>
<ECRS>10</ECRS>
<block>VARIABLE</block>
</OnLineReserves>
</ASPriceCurve>
</ASOffer>
</BidSet>
The following is another XML example for an ASOffer, where the AS type is only Reg-Down:
<ASOffer>
<startTime>2008-01-01T00:00:00-06:00</startTime>
<endTime>2008-01-02T00:00:00-06:00</endTime>
<externalId>MyExternalID12345</externalId>
<expirationTime>2007-12-31T22:00:00-06:00</expirationTime>
<resource>Resource1</resource>
<asType>Reg-Down</asType>
<ASPriceCurve>
<startTime>2008-01-01T00:00:00-06:00</startTime>
<endTime>2008-01-01T03:00:00-06:00</endTime>
<RegDown>
<xvalue>60</xvalue>
<REGDN>20.00</REGDN>
<block>FIXED</block>
</RegDown>
<multiHourBlock>false</multiHourBlock>
</ASPriceCurve>
<ASPriceCurve>
<startTime>2008-01-01T03:00:00-06:00</startTime>
<endTime>2008-01-02T00:00:00-06:00</endTime>
<RegDown>
<xvalue>80</xvalue>
<REGDN>23.00</REGDN>
<block>FIXED</block>
</RegDown>
<multiHourBlock>false</multiHourBlock>
</ASPriceCurve>
</ASOffer>
The following is another XML example for an ASOffer, where the AS type is Off-Non-Spin:
<ASOffer>
<startTime>2008-01-01T00:00:00-06:00</startTime>
<endTime>2008-01-02T00:00:00-06:00</endTime>
<externalId>MyExternalID12341</externalId>
<expirationTime>2007-12-31T22:00:00-06:00</expirationTime>
<resource>Resource1</resource>
<asType>Off-Non-Spin</asType>
<ASPriceCurve>
<startTime>2008-01-01T00:00:00-06:00</startTime>
<endTime>2008-01-01T03:00:00-06:00</endTime>
<OffLineNonSpin>
<xvalue>60</xvalue>
<OFFNS>20.00</OFFNS>
<OFFEC>23.00</OFFEC>
<block>VARIABLE</block>
</OffLineNonSpin>
<multiHourBlock>true</multiHourBlock>
</ASPriceCurve>
</ASOffer>
And the corresponding response:
<ns1:BidSet xmlns:ns1="http://www.ercot.com/schema/2007-06/nodal/ews">
<ns1:tradingDate>2008-01-01</ns1:tradingDate>
<ns1:ASOffer>
<ns1:mRID>QSAMP.20080101.ASO.Resource1.Off-Non-Spin</ns1:mRID>
<ns1:externalId/>
<ns1:status>ACCEPTED</ns1:status>
<ns1:error>
<ns1:severity>INFORMATIVE</ns1:severity>
<ns1:text>Successfully processed the ERCOT As Offer.</ns1:text>
</ns1:error>
</ns1:ASOffer>
</ns1:BidSet>