Add extracted tools: CitrineOS, OpenOCPP, ShapeShifter

- CitrineOS core extracted (CSMS OCPP 2.0.1)
- OpenOCPP extracted (firmware OCPP 1.6J/2.0.1)
- ShapeShifter library installed (pip install -e)
- ShapeShifter specification extracted
- EVerest extracted

TODO updated with progress
This commit is contained in:
Eric F
2026-06-08 00:38:27 -04:00
parent 468cfeaa50
commit d398a6ced2
7326 changed files with 1177561 additions and 7 deletions

View File

@@ -0,0 +1,57 @@
<!--
SPDX-FileCopyrightText: 2020-2023 Contributors to the Shapeshifter project
SPDX-License-Identifier: Apache-2.0
-->
# AGRPortfolioQueryResponse
Upon receiving and processing an AGRPortfolioQuery message, the receiving implementation must reply with an AGRPortfolioUpdate, indicating whether the query was handled successfully.
```
<AGRPortfolioQueryResponse
Metadata…
ReferenceMessageID = UUID
Result = ("Accepted" | "Rejected")
RejectionReason = String (only if Result = "Rejected")
Period = Date
<DSO-View (only if Result = "Accepted")
<DSO-Portfolio (0...n)
DSO-Domain = InternetDomain
<CongestionPoint (1...n)
EntityAddress = EntityAddress
MutexOffersSupported = Boolean
DayAheadRedispatchBy = ("AGR" | "DSO" )
IntradayRedispatchBy = ("AGR" | "DSO" ) (optional)
<Connection = (1...n)
EntityAddress = EntityAddress
/>
/>
<Connection = (0...n)
EntityAddress = EntityAddress
/>
/>
/>
/>
/>
```
| | |
|----------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------|
| Metadata | The metadata for this message. For details, see section [metadata attributes](metadata-attributes.md). |
| ReferenceMessageID | MessageID of the AGRPortfolioQuery message |
| Result | Indication whether the AGRPortfolioQuery was accepted or rejected. |
| RejectionReason | In case the AGRPortfolioQuery was rejected, this attribute must contain a human-readable description of the reason. |
| Period | The Period that the portfolio is valid. |
| DSO-View | |
| ⇥ DSO-Portfolio | Portfolio of a single DSO that shares connections with the AGR |
| ⇥ ⇥ DSO-Domain | The InternetDomain of the DSO the portfolio applied to. |
| ⇥ ⇥ CongestionPoint | A CongestionPoint that contains at least one Connection of a prosumer that is represented by the AGR. |
| ⇥ ⇥ ⇥ EntityAddress | Entity Address of the CongestionPoint entity being updated. |
| ⇥ ⇥ ⇥ MutexOffersSupported | Indicates whether the DSO accepts mutual exclusive FlexOffers on this CongestionPoint |
| ⇥ ⇥ ⇥ DayAheadRedispatchBy | Indicates which party is responsible for day-ahead redispatch, AGR or DSO. |
| ⇥ ⇥ ⇥ IntradayRedispatchBy | Indicates which party is responsible for intraday ahead redispatch, AGR or DSO. If not specified, there will be no intraday trading on this CongestionPoint. |
| ⇥ ⇥ ⇥ Connection | |
| ⇥ ⇥ ⇥ ⇥ EntityAddress | Entity Address of a Connection that is part of this CongestionPoint. |
| ⇥ ⇥ Connection | Connection not belonging to any DSO CongestionPoint |
| ⇥ ⇥ ⇥ EntityAddress | Entity Address of the Connection |

View File

@@ -0,0 +1,21 @@
<!--
SPDX-FileCopyrightText: 2020-2023 Contributors to the Shapeshifter project
SPDX-License-Identifier: Apache-2.0
-->
# AGRPortfolioQuery
The AGRPortfolioQuery is used by the AGR to retrieve additional information on the connections.
```
<AGRPortfolioQuery
Metadata…
Period = Date
/>
```
| | |
|----------|--------------------------------------------------------------------------------------------------------|
| Metadata | The metadata for this message. For details, see section [metadata attributes](metadata-attributes.md). |
| Period | The Period for which the AGR requests the portfolio information. |

View File

@@ -0,0 +1,25 @@
<!--
SPDX-FileCopyrightText: 2020-2023 Contributors to the Shapeshifter project
SPDX-License-Identifier: Apache-2.0
-->
# AGRPortfolioUpdateResponse
Upon receiving and processing an AGRPortfolioUpdate message, the receiving implementation must reply with an AGRPortfolioUpdateResponse, indicating whether the update was handled successfully.
```
<AGRPortfolioUpdateResponse
Metadata…
ReferenceMessageID = UUID
Result = ("Accepted" | "Rejected")
RejectionReadon = String (only if Result = "Rejected")
/>
```
| | |
|--------------------|----------------------------------------------------------------------------------------------------------------------|
| Metadata | The metadata for this message. For details, see [metadata attributes](metadata-attributes.md). |
| ReferenceMessageID | MessageID of the AGRPortfolioUpdate message |
| Result | Indication whether the AGRPortfolioUpdate was accepted or rejected. |
| RejectionReason | In case the AGRPortfolioUpdate was rejected, this attribute must contain a human-readable description of the reason. |

View File

@@ -0,0 +1,28 @@
<!--
SPDX-FileCopyrightText: 2020-2023 Contributors to the Shapeshifter project
SPDX-License-Identifier: Apache-2.0
-->
# AGRPortfolioUpdate
The AGRPortfolioUpdate is used by the AGR to indicate on which Connections it represents prosumers.
```
<AGRPortfolioUpdate
Metadata…
<Connection (0...n)
EntityAddress = EntityAddress
StartPeriod = Date
EndPeriod = Date (optional)
/>
/>
```
| | |
|-----------------|------------------------------------------------------------------------------------------------|
| Metadata | The metadata for this message. For details, see [metadata attributes](metadata-attributes.md). |
| Connection | |
| ⇥ EntityAddress | EntityAddress of the Connection entity being updated. |
| ⇥ StartPeriod | The first Period hat the AGR represents the prosumer at this Connection. |
| ⇥ EndPeriod | The last Period that the AGR represents the prosumer at this Connection, if applicable. |

View File

@@ -0,0 +1,33 @@
<!--
SPDX-FileCopyrightText: 2020-2023 Contributors to the Shapeshifter project
SPDX-License-Identifier: Apache-2.0
-->
# D-PrognosisResponse
Upon receiving and processing a prognosis message, the receiving implementation must reply with a D-PrognosisResponse, indicating whether the prognosis was syntactically and semantically valid, and, where any FlexOrder messages have previously been sent for any ISP in the period the prognosis applies to, a FlexOrderStatus indication for each of those orders.
```
<D-PrognosisResponse
Metadata…
ReferenceMessageID = UUID
Result = ("Accepted" | "Rejected")
RejectionReason = String (Only if Result = "Rejected")
<FlexOrderStatus (0..n)
Sequence = Long
IsValidated = Boolean
/>
/>
```
| | |
|--------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| Metadata | The metadata for this message. For details, see [metadata attributes](metadata-attributes.md). |
| ReferenceMessageID | Reference to the the D-prognosis that was accepted or rejected |
| Result | Indication whether the prognosis was accepted or rejected. A receiving implementation may reject a prognosis if it's syntactically invalid, uses a ISP duration or time zone that deviates from what is agreed upon for the market, is for a unknown Congestion Point or from an AGR that is not listed in the Common Reference, does not contain a full list of ISPs for the Period it applies to, contains implausible power values, applies to a Period for which all ISPs are already pending settlement, or if a Prognosis of the same type and from the same originator with a higher sequence number was already processed previously. |
| RejectionReason | In case the update was rejected, this attribute must contain a human-readable description of the failure. |
| FlexOrderStatus | Status of a previously submitted FlexOrder |
| ⇥ Sequence | Sequence of the previously submitted FlexOrder. |
| ⇥ IsValidated | Indication whether the Prognosis that was just received reflects this previously submitted FlexOrder. |

View File

@@ -0,0 +1,38 @@
<!--
SPDX-FileCopyrightText: 2020-2023 Contributors to the Shapeshifter project
SPDX-License-Identifier: Apache-2.0
-->
# D-Prognosis
D-Prognosis messages are used to communicate D-prognoses between AGRs and DSOs.
D-Prognosis messages always contain data for all ISPs for the period they apply to, even if a prognosis is sent after the start of the period, when one or more ISPs are already in the operate or settlement phase.
Receiving implementations should ignore the information supplied for those ISPs.
```
<D-Prognosis
Metadata…
Period = Period
CongestionPoint = EntityAddress
Revision = Long
<ISP (1...n)
Power = Integer
Start = Integer
Duration = Integer (optional, default = 1)
/>
/>
```
| | |
|-----------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| Metadata | The metadata for this message. For details, see [metadata attributes](metadata-attributes.md). |
| Period | The Period this D-Prognosis applies to. |
| CongestionPoint | Entity Address of the Congestion Point this prognosis applies to. Required for D-prognoses, prohibited for other prognosis types. |
| Revision | Revision of this message. A sequence number that must be incremented each time a new revision of a prognosis is sent. The combination of SenderDomain and PrognosisSequence should be unique. |
| ISP | |
| ⇥ Power | Power specified for this ISP in Watts. Also see the important notes about the sign of this attribute in the main documentation entry for the Power attribute. |
| ⇥ Start | Number of the first ISP this element refers to. The first ISP of a day has number 1. |
| ⇥ Duration | The number of the ISPs this element represents. |
Note: Every day-ahead D-Prognosis must contain a Power value for every single ISP of the specified Period.

View File

@@ -0,0 +1,40 @@
<!--
SPDX-FileCopyrightText: 2020-2023 Contributors to the Shapeshifter project
SPDX-License-Identifier: Apache-2.0
-->
# DSOPortfolioQueryResponse
Upon receiving and processing a DSOPortfolioQuery message, the receiving implementation must reply with a DSOPortfolioQueryResponse, indicating whether the query executed successfully, and if it did, including the query results.
Most queries will return zero or more congestion points
```
<DSOPortfolioQueryResponse
Metadata…
ReferenceMessageID = UUID
Result = ("Success" | "Failure")
RejectionReason = String (only if Result = "Failure")
Period = Date
<CongestionPoint (0..n, 0 if Result = "Success")
EntityAddress = EntityAddress
<Connection (1..n)
EntityAddress = EntityAddress
AGR-Domain = InternetDomain (optional)
/>
/>
/>
```
| | |
|--------------------|-----------------------------------------------------------------------------------------------------------|
| Metadata | The metadata for this message. For details, see [metadata attributes](metadata-attributes.md). |
| ReferenceMessageID | MessageID of the DSOPortfolioQuery message |
| Result | Indication whether the query was executed successfully or failed. |
| RejectionReason | In case the query failed, this attribute must contain a human-readable description of the failure reason. |
| Period | The period that was queried. This is also the Period for which the portfolio is valid. |
| CongestionPoint | The congestion point that was queried. |
| ⇥ EntityAddress | The entity address of the congestion point. |
| ⇥ Connection | A Connection that is part of the congestion point. |
| ⇥ ⇥ EntityAddress | The entity address of the Connection |
| ⇥ ⇥ AGR-Domain | The internet domain of the AGR that represents the prosumer connected on this Connection, if applicable. |

View File

@@ -0,0 +1,23 @@
<!--
SPDX-FileCopyrightText: 2020-2023 Contributors to the Shapeshifter project
SPDX-License-Identifier: Apache-2.0
-->
# DSOPortfolioQuery
DSOPortfolioQuery is used by DSOs to discover which AGRs represent connections on its registered congestion point(s).
```
<DSOPortfolioQuery
Metadata…
EntityAddress = EntityAddress
Period = Date
/>
```
| | |
|---------------|------------------------------------------------------------------------------------------------|
| Metadata | The metadata for this message. For details, see [metadata attributes](metadata-attributes.md). |
| EntityAddress | Entity Address of the CongestionPoint entity being queried. |
| Period | The Period being queried. |

View File

@@ -0,0 +1,25 @@
<!--
SPDX-FileCopyrightText: 2020-2023 Contributors to the Shapeshifter project
SPDX-License-Identifier: Apache-2.0
-->
# DSOPortfolioUpdateResponse
Upon receiving and processing a DSOPortfolioUpdate message, the receiving implementation must reply with a DSOPortfolioUpdateResponse, indicating whether the update was handled successfully.
```
<DSOPortfolioUpdateResponse
Metadata…
ReferenceMessageID = UUID
Result = ("Accepted" | "Rejected")
RejectionReason = String (only if Result = "Rejected")
/>
```
| | |
|--------------------|----------------------------------------------------------------------------------------------------------------------|
| Metadata | The metadata for this message. For details, see [metadata attributes](metadata-attributes.md). |
| ReferenceMessageID | MessageID of the DSOPortfolioUpdate message |
| Result | Indication whether the DSOPortfolioUpdate was accepted or rejected. |
| RejectionReason | In case the DSOPortfolioUpdate was rejected, this attribute must contain a human-readable description of the reason. |

View File

@@ -0,0 +1,43 @@
<!--
SPDX-FileCopyrightText: 2020-2023 Contributors to the Shapeshifter project
SPDX-License-Identifier: Apache-2.0
-->
# DSOPortfolioUpdate
The DSOPortfolioUpdate is used by the DSO to indicate on which congestion points it wants to engage in flexibility trading.
```
<DSOPortfolioUpdate
Metadata…
<CongestionPoint (0...n)
EntityAddress = EntityAddress
StartPeriod = Date
EndPeriod = Date (optional)
MutexOffersSupported = Boolean
DayAheadRedispatchBy = ("AGR" | "DSO" )
IntradayRedispatchBy = ("AGR" | "DSO" ) (optional)
<Connection (1...n)
EntityAddress = EntityAddress
StartPeriod = Date
EndPeriod = Date (optional)
/>
/>
/>
```
| | |
|------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| Metadata | The metadata for this message. For details, see [metadata attributes](metadata-attributes.md). |
| CongestionPoint | |
| ⇥ EntityAddress | Entity Address of the CongestionPoint entity being updated. |
| ⇥ StartPeriod | The first Period that the DSO is trading on this CongestionPoint. |
| ⇥ EndPeriod | The last Period that the DSO is trading on this CongestionPoint. |
| ⇥ MutexOffersSupported | Indicates whether the DSO accepts mutual exclusive FlexOffers on this CongestionPoint |
| ⇥ DayAheadRedispatchBy | Indicates which party is responsible for day-ahead redispatch, AGR or DSO. |
| ⇥ IntradayRedispatchBy | Indicates which party is responsible for intraday ahead redispatch, AGR or DSO. If not specified, there will be no intraday trading on this CongestionPoint. |
| ⇥ Connection | |
| ⇥ ⇥ EntityAddress | Entity Address of a Connection that is part of this CongestionPoint. |
| ⇥ ⇥ StartPeriod | The first Period that the Connection is part of this CongestionPoint. Notes: <ul><li>The StartPeriod of a Connection should be greater than or equal to the StartPeriod of the CongestionPoint.</li><li>The StartPeriod of a Connection should be smaller than or equal to the EndPeriod of the CongestionPoint.</li><li>CRO implementors may choose to explicitly check for this and reject updates that do not comply.</li></ul> |
| ⇥ ⇥ EndPeriod | The last Period that the Connection is part of this CongestionPoint. Notes: <ul><li>The EndPeriod of a Connection should be null if and only if the EndPeriod of the CongestionPoint is null.</br>The EndPeriod of a Connection should be greater than or equal to the StartPeriod of the CongestionPoint.</li><li>The EndPeriod of a Connection should be smaller than or equal to the EndPeriod of the CongestionPoint.</li><li>CRO implementors may choose to explicitly check for this and reject updates that do not comply.</li></ul> |

View File

@@ -0,0 +1,25 @@
<!--
SPDX-FileCopyrightText: 2020-2023 Contributors to the Shapeshifter project
SPDX-License-Identifier: Apache-2.0
-->
# FlexOfferResponse
Upon receiving and processing a FlexOffer message, the receiving implementation must reply with a FlexOfferResponse, indicating whether the flexibility offer was processed successfully.
```
<FlexOfferResponse
Metadata…
ReferenceMessageID = UUID
Result = ("Accepted" | "Rejected")
RejectionReason = String (Only if Result = "Rejected")
/>
```
| | |
|--------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| Metadata | The metadata for this message. For details, see [metadata attributes](metadata-attributes.md). |
| ReferenceMessageID | MessageID of the FlexOffer that has been accepted or rejected. |
| Result | Indication whether the flex offer was accepted or rejected. Rejection is allowed in case no matching FlexRequest can be found, or the FlexOffer does not contain a valid price for each ISP with Disposition=Requested in the corresponding FlexRequest. |
| RejectionReason | In case the offer was rejected, this attribute must contain a human-readable description of the reason. |

View File

@@ -0,0 +1,25 @@
<!--
SPDX-FileCopyrightText: 2020-2023 Contributors to the Shapeshifter project
SPDX-License-Identifier: Apache-2.0
-->
# FlexOfferRevocationResponse
Upon receiving and processing a FlexOfferRevocation message, the receiving implementation must reply with a FlexOfferRevocationResponse, indicating whether the revocation was handled successfully.
```
<FlexOfferRevocationResponse
Metadata...
ReferenceMessageID = UUID
Result = ("Accepted" | "Rejected")
RejectionReason = String (Only if Result = "Rejected")
/>
```
| | |
|--------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| Metadata | The metadata for this message. For details, see [metadata attributes](metadata-attributes.md). |
| ReferenceMessageID | MessageID of the FlexOfferRevocation that has been accepted or rejected. |
| Result | Indication whether the revocation was accepted or rejected. Rejection is allowed in case the FlexOffer is unknown (it is the responsibility of the sending party not to revoke FlexOffer messages that have not yet been accepted), or the offered flexibility has already been ordered. |
| RejectionReason | In case the revocation was rejected, this attribute must contain a human-readable description of the reason. |

View File

@@ -0,0 +1,23 @@
<!--
SPDX-FileCopyrightText: 2020-2023 Contributors to the Shapeshifter project
SPDX-License-Identifier: Apache-2.0
-->
# FlexOfferRevocation
The FlexOfferRevocation message is used by the AGR to revoke a FlexOffer previously sent to a DSO.
It voids the FlexOffer, even if its validity time has not yet expired.
Revocation is not allowed for FlexOffers that already have associated accepted FlexOrders.
```
<FlexOfferRevocation
Metadata...
FlexOfferMessageID = UUID
/>
```
| | |
|--------------------|--------------------------------------------------------------------------------------------------------------|
| Metadata | The metadata for this message. For details, see [metadata attributes](metadata-attributes.md). |
| FlexOfferMessageID | MessageID of the FlexOffer message that is being revoked: this FlexOffer must have been accepted previously. |

View File

@@ -0,0 +1,62 @@
<!--
SPDX-FileCopyrightText: 2020-2023 Contributors to the Shapeshifter project
SPDX-License-Identifier: Apache-2.0
-->
# FlexOffer
FlexOffer messages are used by AGRs to make DSOs an offer for provision of flexibility.
A FlexOffer message contains a list of ISPs and, for each ISP, the change in consumption or production offered and the price for the total amount of flexibility offered.
FlexOffer messages can be sent once a FlexRequest message has been received but can also be sent unsolicited.
Note that multiple FlexOffer messages may be sent based on a single FlexRequest, e.g. to increase the chance that the DSO will order at least part of its available flexibility.
The AGR must make sure that it can actually provide the flexibility offered across all of its FlexOffers.
```
<FlexOffer
Metadata…
Period = Period
CongestionPoint = EntityAddress
ExpirationDateTime = DateTime
Unsolicited = Boolean
FlexRequestMessageID = UUID (mandatory if and only if solicited)
ContractID = Text (only if this offer refers to a bilateral contract)
D-PrognosisMessageID = UUID (mandatory if and only if unsolicited)
BaselineReference = Text (only if another baseline methodology is used)
Currency = ISO4217Currency
<OfferOption (1...n)
OptionReference = String (only if there are multiple OfferOptions)
Price = ISO4217Currency
MinActivationFactor = Number (optional [0.01-1.00])
<ISP (1...n)
Power = Integer
Start = Integer
Duration = Integer (optional, default = 1)
/>
/>
/>
```
| | |
|-----------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| Metadata | The metadata for this message. For details, see section [metadata attributes](metadata-attributes.md). |
| Period | The Period the ISPs referenced in this FlexOffer message belong to. |
| CongestionPoint | Entity Address of the Congestion Point this FlexOffer message applies to. |
| ExpirationDateTime | Date and time, including the time zone (ISO 8601 formatted as per [http://www.w3.org/TR/NOTE-datetime](http://www.w3.org/TR/NOTE-datetime)) until when the FlexOffer message is valid. |
| Unsolicited | Indicates whether this FlexOffer is intended to be unsolicited (i.e. without a preceding FlexRequest). |
| FlexRequestMessageID | MessageID of the FlexRequest message this request is based on (mandatory if and only if solicited). |
| ContractID | Reference to the concerning bilateral contract, if applicable. |
| D-PrognosisMessageID | MessageID of the D-Prognosis this request is based on, if it has been agreed that the baseline is based on D-prognoses. |
| BaselineReference | Identification of the baseline prognosis, if another baseline methodology is used than based on D-prognoses. |
| Currency | ISO 4217 code indicating the currency that applies to the price of the FlexOffer. |
| OfferOption | If the DSO does not support mutually exclusive offers it will reject FlexOffers that contain more than one OfferOption. |
| ⇥ OptionReference | The identification of this option |
| ⇥ Price | The asking price for the flexibility offered in this option. |
| ⇥ MinActivationFactor | The minimal activation factor for this OfferOption. If this attribute is omitted, a default value of 1.00 must be assumed.</br>An AGR may choose to include MinActivationFactor in FlexOffers even if the DSO is not interested in partial activation. In that case the DSO will simply use an ActivationFactor of 1.00 in every FlexOrder. |
| ⇥ ISP | |
| ⇥ ⇥ Disposition | Optional, used only for FlexRequest messages: indication whether the Power specified for this ISP represents available capacity or a request for reduction/increase. |
| ⇥ ⇥ Power | Power specified for this ISP in Watts. Also see the important notes about the sign of this attribute in the main documentation entry for the ISP element, section [power](power.md). |
| ⇥ ⇥ Start | Number of the first ISP this element refers to. The first ISP of a day has number 1. |
| ⇥ ⇥ Duration | The number of the ISPs this element represents. Optional, default value is 1. |
<!-- TODO: OfferOption.ISP.Disposition is not part of the XML structure -->

View File

@@ -0,0 +1,25 @@
<!--
SPDX-FileCopyrightText: 2020-2023 Contributors to the Shapeshifter project
SPDX-License-Identifier: Apache-2.0
-->
# FlexOrderResponse
Upon receiving and processing a FlexOrder message, the receiving implementation must reply with a FlexOrderResponse, indicating whether the update was handled successfully.
```
<FlexOrderResponse
Metadata…
ReferenceMessageID = UUID
Result = ("Accepted" | "Rejected")
RejectionReason = String (Only if Result = "Rejected")
/>
```
| | |
|--------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| Metadata | The metadata for this message. For details, see [metadata attributes](metadata-attributes.md). |
| ReferenceMessageID | MessageID of the FlexOrder that has just been accepted or rejected. |
| Result | Indication whether the order was accepted or rejected. Rejection is only allowed in case the FlexOrder was already accepted previously, cannot be found, or does not exactly match the contents of the corresponding FlexOffer. |
| RejectionReason | In case the order was rejected, this attribute must contain a human-readable description of the reason. |

View File

@@ -0,0 +1,54 @@
<!--
SPDX-FileCopyrightText: 2020-2023 Contributors to the Shapeshifter project
SPDX-License-Identifier: Apache-2.0
-->
# FlexOrder
FlexOrder messages are used by DSOs to purchase flexibility from an AGR, either based on a previous FlexOffer or directly.
A FlexOrder message contains a list of ISPs, with, for each ISP, the change in consumption or production to be realized by the AGR, and the accepted price to be paid by the DSO for this amount of flexibility.
This ISP list should be copied from the FlexOffer message (if any) without modification: AGR implementations will (and must) reject FlexOrder messages where the ISP list is not exactly the same as offered.
```
<FlexOrder
Metadata…
Period = Period
CongestionPoint = EntityAddress
Unsolicited = Boolean
FlexOfferMessageID = UUID (mandatory if and only if solicited)
ContractID = Text (only if the offer and order refer to a bilateral contract)
D-PrognosisMessageID = UUID (if present)
BaselineReference = Text (if present)
Price = CurrencyAmount
Currency = ISO4217Currency
OrderReference = String
OptionReference = String (if applicable)
ActivationFactor = Number (optional [0.01-1.00])
<ISP (1...n)
Power = Integer
Start = Integer
Duration = Integer (optional, default = 1)
/>
/>
```
| | |
|----------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| Metadata | The metadata for this message. For details, see [metadata attributes](metadata-attributes.md). |
| Period | Period the ISPs referenced in this FlexOrder message belong to. |
| CongestionPoint | Entity Address of the Congestion Point this FlexOrder message applies to |
| Unsolicited | Indicates whether this FlexOrder is intended to be unsolicited (i.e. without a preceding FlexOffer). |
| FlexOfferMessageID | MessageID of the FlexOffer message this order is based on (mandatory if and only if solicited). |
| ContractID | Reference to the bilateral contract in question, if applicable. |
| D-PrognosisMessageID | MessageID of the D-Prognosis this order is based on, if present. |
| BaselineReference | Identification of the baseline prognosis, if another baseline methodology is used than based on D-prognoses. |
| Price | The price for the flexibility ordered. Usually, the price should match the price of the related FlexOffer. |
| Currency | ISO 4217 code indicating the currency that applies to the price of the FlexOrder. |
| OrderReference | Order number assigned by the DSO originating the FlexOrder. To be stored by the AGR and used in the settlement phase. |
| OptionReference | The OptionReference from the OfferOption chosen from the FlexOffer, if applicable. |
| ActivationFactor | The activation factor for this OfferOption. If this attribute is omitted, a default value of 1.00 must be assumed.</br>Notes:</br>The ActivationFactor must be greater than or equal to the MinActivationFactor in the OfferOption chosen from the FlexOffer. |
| ISP | |
| ⇥ Power | Power specified for this ISP in Watts. Also see the important notes about the sign of this attribute in the main documentation entry for the ISP element, section [power](power.md). |
| ⇥ Start | Number of the first ISP this element refers to. The first ISP of a day has number 1. |
| ⇥ Duration | The number of the ISPs this element represents. Optional, default value is 1. |

View File

@@ -0,0 +1,25 @@
<!--
SPDX-FileCopyrightText: 2020-2023 Contributors to the Shapeshifter project
SPDX-License-Identifier: Apache-2.0
-->
# FlexRequestResponse
Upon receiving and processing a FlexRequest message, the receiving implementation must reply with a FlexRequestResponse, indicating whether the flexibility request was processed successfully.
```
<FlexRequestResponse
Metadata…
ReferenceMessageID = UUID
Result = ("Accepted" | "Rejected")
RejectionReason = String (Only if Result = "Rejected")
/>
```
| | |
|---------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| Metadata | The metadata for this message. For details, see [metadata attributes](metadata-attributes.md). |
| ReferenceMessageID | MessageID of the FlexRequest that has been accepted or rejected. |
| Result | Indication whether the flex request was accepted or rejected. Rejection is allowed in case the FlexRequest is not based on our latest Prognosis, a FlexRequest from the same participant for the indicated period with a higher sequence number was already accepted previously or the FlexRequest does not contain any ISPs with Disposition=Requested. |
| RejectionReason | In case the request was rejected, this attribute must contain a human-readable description of the reason. |

View File

@@ -0,0 +1,45 @@
<!--
SPDX-FileCopyrightText: 2020-2023 Contributors to the Shapeshifter project
SPDX-License-Identifier: Apache-2.0
-->
# FlexRequest
FlexRequest messages are used by DSOs to request flexibility from AGRs.
In addition to one or more ISP elements with Disposition=Requested, indicating the actual need to reduce consumption or production, the message should also include the remaining ISPs for the current period where Disposition=Available.
```
<FlexRequest
Metadata…
Period = Period
ContractID = String (optional)
ServiceType = String (optional)
CongestionPoint = EntityAddress
Revision = Long
ExpirationDateTime = DateTime
<ISP (1...n)
Disposition = "Available" | "Requested"
MinPower = Integer
MaxPower = Integer
Start = Integer
Duration = Integer (optional, default = 1)
/>
/>
```
| | |
|--------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| Metadata | The metadata for this message. For details, see [metadata attributes](metadata-attributes.md). |
| Period | The Period this FlexRequest message applies to. |
| ContractID | Reference to the concerning contract, if applicable. The contract may be either bilateral or commoditized market contract. |
| ServiceType | Service type for this request, the service type determines response characteristics such as latency or asset participation type. Each contract may specify multiple service-types. |
| CongestionPoint | Entity Address of the Congestion Point this FlexRequest message applies to. |
| Revision | Revision of this message, a sequence number that must be incremented each time a new revision of a FlexRequest message is sent. |
| ExpirationDateTime | Date and time, including the time zone (ISO 8601 formatted as per [http://www.w3.org/TR/NOTE-datetime](http://www.w3.org/TR/NOTE-datetime)) until when the FlexRequest message is valid. |
| ISP | |
| ⇥ Disposition | indication whether the Power specified for this ISP represents available capacity or a request for reduction/increase.</br>At least one ISP should have Disposition = Requested |
| ⇥ MinPower | Lower bound for available/requested space to deviate from the baseline (in Watts).</br>For further explanation, see section [Flexibility trading between the AGR and DSO](../../general-description/validate-phase.md#flexibility-trading-between-the-agr-and-dso). Also see the important notes about the sign of this attribute in the ISP element, section [power](power.md). |
| ⇥ MaxPower | Upper bound for available/requested space to deviate from the baseline (in Watts).</br>For further explanation, see section [Flexibility trading between the AGR and DSO](../../general-description/validate-phase.md#flexibility-trading-between-the-agr-and-dso). Also see the important notes about the sign of this attribute in the ISP element, section [power](power.md). |
| ⇥ Start | Number of the first ISP this element refers to. The first ISP of a day has number 1. |
| ⇥ Duration | The number of the ISPs this element represents. Optional, default value is 1. |

View File

@@ -0,0 +1,25 @@
<!--
SPDX-FileCopyrightText: 2020-2023 Contributors to the Shapeshifter project
SPDX-License-Identifier: Apache-2.0
-->
# FlexReservationUpdateResponse
Upon receiving and processing a FlexReservationUpdate message, the AGR must reply with a FlexReservationUpdateResponse, indicating whether the FlexReservationUpdate was processed successfully.
```
<FlexReservationUpdateResponse
Metadata…
ReferenceMessageID = UUID
Result = ("Accepted" | "Rejected")
RejectionReason = String (only if Result = "Rejected")
/>
```
| | |
|--------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| Metadata | The metadata for this message. For details, see section [metadata attributes](metadata-attributes.md). |
| ReferenceMessageID | MessageID of the concerning FlexReservationUpdate message |
| Result | Indication whether the FlexReservationUpdate was accepted or rejected. Rejection is allowed in case the FlexReservationUpdate does not match the bilateral contract or its agreements or the deadline for sending the update has expired. |
| RejectionReason | In case the request was rejected, this attribute must contain a human-readable description of the reason. |

View File

@@ -0,0 +1,37 @@
<!--
SPDX-FileCopyrightText: 2020-2023 Contributors to the Shapeshifter project
SPDX-License-Identifier: Apache-2.0
-->
# FlexReservationUpdate
For bilateral contracts, FlexReservationUpdate messages are used by DSOs to signal to an AGR which part of the contracted volume is still reserved and which part is not needed and may be used for other purposes.
For each ISP, a power value is given which indicates how much power is still reserved. Zero power means that no power is reserved for that ISP and the sign of the power indicates the direction.
```
<FlexReservationUpdate
Metadata…
Period = Period
CongestionPoint = EntityAddress
ContractID = Text
Reference = String
<ISP (1...n)
Power = Integer
Start = Integer
Duration = Integer (optional, default = 1)
/>
/>
```
| | |
|-----------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| Metadata | The metadata for this message. For details, see section [metadata attributes](metadata-attributes.md). |
| Period | The Period this FlexRequest message applies to. |
| CongestionPoint | Entity Address of the Congestion Point this FlexRequest message applies to. |
| ContractID | Reference to the bilateral contract in question. |
| Reference | Message reference, assigned by the DSO originating the FlexReservationUpdate. |
| ISP | |
| ⇥ Power | Remaining reserved power specified for this ISP in Watts. See important notes about the [flex reservation mechanism](../../appendix/flex-reservation-mechanism.md). |
| ⇥ Start | Number of the first ISP this element refers to. The first ISP of a day has number 1. |
| ⇥ Duration | The number of the ISPs this element represents. Optional, default value is 1. |

View File

@@ -0,0 +1,58 @@
<!--
SPDX-FileCopyrightText: 2020-2023 Contributors to the Shapeshifter project
SPDX-License-Identifier: Apache-2.0
-->
# FlexSettlementResponse
Upon receiving and processing a FlexSettlement message, the AGR must reply with a FlexSettlementResponse, indicating whether the initial message was handled successfully.
When a FlexSettlement message is rejected, the DSO should consider all FlexOrderSettlement elements of that message related to potential dispute.
```
<FlexSettlementResponse
Metadata…
ReferenceMessageID = UUID
Result = ("Accepted" | "Rejected")
RejectionReason = String (Only if Result = "Rejected")
<FlexOrderSettlementStatus (0...n, only if Result = "Accepted")
OrderReference = String
Disposition = ("Accepted" | "Disputed")
DisputeReason = String (Only if Disposition = "Disputed")
/>
<ContractSettlementStatus (0...n, only if Result = "Accepted")
ContractID = Text
<Period (0...n)
Period = Period
<ISP (0...n)
Start = Integer
Duration = Integer (optional, default = 1)
Disposition = ("Accepted" | "Disputed")
DisputeReason = String (Only if Disposition = "Disputed")
/>
/>
/>
/>
```
| | |
|---------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| Metadata | The metadata for this message. For details, see [metadata attributes](metadata-attributes.md). |
| ReferenceMessageID | MessageID of the FlexSettlement that has just been accepted or rejected |
| Result | Indication whether the message was accepted or rejected. Rejection is only allowed in case a FlexSettlement covering a given period was already accepted previously, or contains invalid data. If one or more settlement items included in the message are not in accordance with the AGRs accounting, the message should still be accepted, and the dispute communicated using the appropriate FlexOrderSettlementStatus elements. |
| RejectionReason | In case the message was rejected, this attribute must contain a human-readable description of the reason. |
| FlexOrderSettlementStatus | Each FlexOrderSettlementStatus element indicates whether the settlement details about a FlexOrder, included in the corresponding FlexOrderSettlement element, are accepted or disputed by the AGR. |
| ⇥ OrderReference | Order reference assigned by the DSO when originating the FlexOrder. |
| ⇥ Disposition | Indication whether the AGR accepts the order settlement details provided by the DSO (and will invoice accordingly), or disputes these details. |
| ⇥ DisputeReason | In case the order settlement was disputed, this attribute must contain a human-readable description of the reason. |
| ContractSettlementStatus | Each ContractSettlementStatus element indicates whether the settlement details about a bilateral contract, included in the corresponding ContractSettlement element, are accepted or disputed by the AGR. |
| ⇥ ContractID | Reference to the concerning bilateral contract. |
| ⇥ Period | List of all periods from the ContractSettlement, including possible lacking periods |
| ⇥ ⇥ Period | Period the settlement status refers to. |
| ⇥ ⇥ ISP | |
| ⇥ ⇥ ⇥ Start | Number of the first ISP this element refers to. The first ISP of a day has number 1. |
| ⇥ ⇥ ⇥ Duration | The number of ISPs this element represents. It is recommended to merge consecutive ISPs with the same disposition. |
| ⇥ ⇥ ⇥ Disposition | Indication whether the AGR accepts the settlement details as provided by the DSO from the ISP(s) in question (and will invoice accordingly), or disputes these details. |
| ⇥ ⇥ ⇥ DisputeReason | In case the settlement from the ISP(s) was disputed, this attribute must contain a human-readable description of the reason. |
Handling disputed settlement details is a manual process outside the UFTP scope.

View File

@@ -0,0 +1,92 @@
<!--
SPDX-FileCopyrightText: 2020-2023 Contributors to the Shapeshifter project
SPDX-License-Identifier: Apache-2.0
-->
# FlexSettlement
The FlexSettlement message is sent by DSOs on a regular basis (typically monthly) to AGRs, in order to initiate settlement.
It includes a list of all FlexOrders placed by the originating party during the settlement period.
```
<FlexSettlement
Metadata…
PeriodStart = Period
PeriodEnd = Period
Currency = ISO4217Currency
<FlexOrderSettlement (0...n)
Period = Period
ContractID = Text (only if the offer and order refer to a bilateral contract)
D-PrognosisMessageID = UUID(only if it has been agreed that the baseline is based on D-prognoses)
BaselineReference = Text (only if another baseline methodology is used)
OrderReference = String
CongestionPoint = EntityAddress
Price = CurrencyAmount
Penalty = CurrencyAmount (optional)
NetSettlement = CurrencyAmount
<ISP (0...n)
Start = Integer
Duration = Integer (optional, default = 1)
BaselinePower = Integer
OrderedFlexPower = Integer
ActualPower = Integer
DeliveredFlexPower = Integer
PowerDeficiency = Integer (optional)
/>
/>
<ContractSettlement (0...n, only in case of bilateral contracts)
ContractID = Text
<Period (0...n)
Period = Period
<ISP (0...n)
Start = Integer
Duration = Integer (optional, default = 1)
ReservedPower = Integer
RequestedPower = Integer (optional, only if present)
AvailablePower = Integer (optional)
OfferedPower = Integer (optional, only if present)
OrderedPower = Integer (optional, only if present)
/>
/>
/>
/>
```
| | |
|------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| Metadata | The metadata for this message. For details, see [metadata attributes](metadata-attributes.md). |
| PeriodStart | First Period of the settlement period this message applies to. |
| PeriodEnd | Last Period of the settlement period this message applies to. |
| Currency | ISO 4217 code indicating the currency that applies to all amounts (flex price, penalty and net settlement) in this message. |
| FlexOrderSettlement | |
| ⇥ Period | Period the FlexOrder refers to. |
| ⇥ ContractID | Reference to the concerning bilateral contract, if it is linked to it. |
| ⇥ MessageID | MessageID of the Prognosis message (more specifically: the D-Prognosis) the FlexOrder is based on, if it has been agreed that the baseline is based on D-prognoses. |
| ⇥ BaselineReference | Identification of the baseline prognosis, if another baseline methodology is used than based on D-prognoses. |
| ⇥ OrderReference | Order reference assigned by the DSO when originating the FlexOrder. |
| ⇥ CongestionPoint | Entity Address of the Congestion Point the FlexOrder applies to. |
| ⇥ Price | The price accepted for supplying the ordered amount of flexibility as per the referenced FlexOrder messages. |
| ⇥ Penalty | Optional (default zero) penalty due a non-zero PowerDeficiency. |
| ⇥ NetSettlement | Net settlement amount for this Period: Price minus Penalty |
| ⇥ ISP | |
| ⇥ ⇥ Start | Number of the first ISP this element refers to. The first ISP of a day has number 1. |
| ⇥ ⇥ Duration | The number of ISPs this element represents. Optional, default value is 1. |
| ⇥ ⇥ BaselinePower | Power originally forecast (as per the referenced baseline) for this ISP in Watts. |
| ⇥ ⇥ OrderedFlexPower | Amount of flex power ordered (as per the referenced FlexOrder message) for this ISP in Watts. |
| ⇥ ⇥ ActualPower | Actual amount of power for this ISP in Watts, as measured/determined by the DSO and allocated to the AGR. |
| ⇥ ⇥ DeliveredFlexPower | Actual amount of flex power delivered for this ISP in Watts, as determined by the DSO. |
| ⇥ ⇥ PowerDeficiency | Optional (default zero) amount of flex power sold but not delivered for this ISP in Watts, as determined by the DSO. |
| ContractSettlement | |
| ⇥ ContractID | Reference to the bilateral contract in question. |
| ⇥ Period | List of periods containing reservations |
| ⇥ ⇥ Period | Period the settlement refers to. |
| ⇥ ⇥ ISP | |
| ⇥ ⇥ ⇥ Start | Number of the first ISP this element refers to. The first ISP of a day has number 1. |
| ⇥ ⇥ ⇥ Duration | The number of ISPs this element represents. Optional, default value is 1. |
| ⇥ ⇥ ⇥ ReservedPower | Amount of flex power that has been reserved (and not released using a FlexReservationUpdate message) |
| ⇥ ⇥ ⇥ RequestedPower | Amount of flex power that has been both reserved in advance and has been requested using a FlexRequest (i.e. the lowest amount of flex power for this ISP). If there was no FlexRequest, this field is omitted. |
| ⇥ ⇥ ⇥ AvailablePower | Amount of flex power that is considered available based on the FlexRequest in question.</br>In case RequestedPower=0, AvailablePower is defined so that the offered power is allowed to be between 0 and AvailablePower in terms of compliancy (see [Flex reservation mechanism](../../appendix/flex-reservation-mechanism.md) for details).</br>In case RequestedPower ≠0, AvailablePower is defined so that the offered power is allowed to exceed the amount of requested power up to AvailablePower.</br>If this is relevant for settlement, the DSO can include this field. |
| ⇥ ⇥ ⇥ OfferedPower | Amount of flex power that has been reserved in advance, requested using a FlexRequest and covered in an offer from the AGR. If there was no offer, this field is omitted. If there were multiple offers, only the one is considered that is most compliant (see [Flex reservation mechanism](../../appendix/flex-reservation-mechanism.md) for details about compliancy). |
| ⇥ ⇥ ⇥ OrderedPower | Amount of flex power that has been ordered using a FlexOrder message that was based on a FlexOffer, both linked to this contract. If there was no order, this field is omitted. |

View File

@@ -0,0 +1,13 @@
<!--
SPDX-FileCopyrightText: 2020-2023 Contributors to the Shapeshifter project
SPDX-License-Identifier: Apache-2.0
-->
# Message catalog
USEF messages consist of XML, use UTF-8 encoding, and should validate against the USEF schema corresponding to the specification version implemented by a participant.
The current version of this schema, as well as historic production versions are available for download from the [Shapeshifter Github](https://github.com/shapeshifter/shapeshifter-specification).
Message types can be differentiated using the name of their root node.
To allow extensibility as well as forward and backward compatibility of XML messages, the USEF schema allows additional elements in each defined sequence, as long as these elements have an explicit, non-default XML namespace.

View File

@@ -0,0 +1,33 @@
<!--
SPDX-FileCopyrightText: 2020-2023 Contributors to the Shapeshifter project
SPDX-License-Identifier: Apache-2.0
-->
# Metadata attributes
The Metadata attributes contain metadata that are common for each non-wrapper USEF message.
XML representation summary
```
SenderDomain = InternetDomain
RecipientDomain = InternetDomain
TimeStamp = DateTime
MessageID = UUID
ConversationID = UUID
ISP-Duration = Duration
TimeZone = TimezoneName
Version = SpecVersion
```
| | |
|-----------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| SenderDomain | The Internet domain of the USEF participant sending this message. When receiving a message, its value should match the value specified in the SignedMessage wrapper: otherwise, the message must be rejected as invalid. When replying to this message, this attribute, combined with the SenderRole, is used to look up the USEF endpoint the reply message should be delivered to. |
| RecipientDomain | Internet domain of the participant this message is intended for. When sending a message this attribute is used to look up the Shapeshifter endpoint the message should be delivered to. |
| TimeStamp | Date and time this message was created, including the time zone (ISO 8601 formatted as per [http://www.w3.org/TR/NOTE-datetime](http://www.w3.org/TR/NOTE-datetime)). |
| MessageID | Unique identifier (UUID/GUID as per IETF RFC 4122) for this message, to be generated when composing each message. |
| ConversationID | Unique identifier (UUID/GUID as per IETF RFC 4122) used to correlate responses with requests, to be generated when composing the first message in a conversation and subsequently copied from the original message to each reply message. |
| ISP-Duration | ISO 8601 time interval (minutes only, for example PT15M) indicating the duration of the ISPs referenced in this message. Although the ISP length is a market-wide fixed value, making this assumption explicit in relevant messages is important for validation purposes, allowing implementations to reject messages with an errant ISP duration.</br>Only messages that refer to individual ISPs must include this attribute in the metadata. |
| TimeZone | Time zone ID (as per the IANA time zone database, [http://www.iana.org/time-zones](http://www.iana.org/time-zones), for example: Europe/Amsterdam) indicating the UTC offset that applies to the Period referenced in this message. Although the time zone is a market-wide fixed value, making this assumption explicit in relevant messages is important for validation purposes, allowing implementations to reject messages with an errant UTC offset.</br>Only messages that refer to a specific Period must include this attribute in the metadata. |
| Version | Shapeshifter specification version following semantic versioning rules e.g. 4.0.0 |

View File

@@ -0,0 +1,25 @@
<!--
SPDX-FileCopyrightText: 2020-2023 Contributors to the Shapeshifter project
SPDX-License-Identifier: Apache-2.0
-->
# MeteringResponse
Upon receiving and processing a Metering message, the receiving implementation must reply with a MeteringResponse, indicating whether the update was handled successfully.
```
<MeteringResponse
Metadata…
ReferenceMessageID = UUID
Result = ("Accepted" | "Rejected")
RejectionReason = String (Only if Result = "Rejected")
/>
```
| | |
|---------------------|------------------------------------------------------------------------------------------------------------|
| Metadata | The metadata for this message. For details, see section [metadata attributes](metadata-attributes.md). |
| ReferenceMessageID | MessageID of the Metering message that has just been accepted or rejected. |
| Result | Indication whether the order was accepted or rejected. |
| RejectionReason | In case the metering was rejected, this attribute must contain a human-readable description of the reason. |

View File

@@ -0,0 +1,50 @@
<!--
SPDX-FileCopyrightText: 2020-2023 Contributors to the Shapeshifter project
SPDX-License-Identifier: Apache-2.0
-->
# Metering
The Metering message is an optional message.
The DSO will specify whether metering messages are required for a given program.
If metering messages are used then the AGR must send metering messages, with one message sent per connection point per day.
The metering messages must all be sent before the settlement can be performed.
It is recommend to send the metering messages daily, once the metering data has been collected for the day.
```
<Metering
Metadata…
Period = Period
EAN = EntityAddress
Currency = ISO4217Currency (optional field, no longer used)
<Profile (1...n)
ProfileType = MeteringProfileEnum
Unit = MeteringUnitType
<ISP (1...n)
Value = Integer
Start = Integer
/>
/>
/>
```
The profile types to use will be agreed between the DSO and AGR and all agreed profile types must be included.
It is recommended to include the Power profile and in a following major version the Power profile will become a mandatory profile.
Note: _The power profile represents the average active power during ISP, considering both import and export energy.
Power=(ImportEnergy-ExportEnergy)*(60/ISP-Length-Minutes).
For example with a 15 minute ISP length we have a multiplier of 4, with a 30 minute ISP length we have a multiplier of 2._
| | |
|---------------|---------------------------------------------------------------------------------------------------------------------|
| Metadata | The metadata for this message. For details, see section [metadata attributes](metadata-attributes.md) |
| Period | The day that the metering data covers |
| EAN | The connection ID which this data refers to |
| Profile | A profile carries a sequence of ISPs with a defined type of metering data |
| ⇥ ProfileType | A value from the ProfileType enum, one of Power, ImportEnergy, ExportEnergy, ImportMeterReading, ExportMeterReading |
| ⇥ Unit | MeteringUnit type, use kW for Power and kWh for energy profile types. |
| ⇥ ISP | |
| ⇥ ⇥ Start | Number of the ISP this element refers to. The first ISP of a day has number 1. |
| ⇥ ⇥ Value | Metering, energy or price value at the end of this ISP, in the designated profile units |

View File

@@ -0,0 +1,15 @@
<!--
SPDX-FileCopyrightText: 2020-2023 Contributors to the Shapeshifter project
SPDX-License-Identifier: Apache-2.0
-->
# Power
Power values occur in many USEF messages.
The sign of a power value is used to distinguish between production and consumption, from the perspective of the prosumer.
A positive value indicates that power flows towards the prosumer (consumption), a negative value indicates flow towards the grid (production).
The following statements are true for ISP elements in all USEF messages:
- Each ISP in a period may only be addressed once.
- ISP elements may not cross period boundaries.

View File

@@ -0,0 +1,26 @@
<!--
SPDX-FileCopyrightText: 2020-2023 Contributors to the Shapeshifter project
SPDX-License-Identifier: Apache-2.0
-->
# SignedMessage
The SignedMessage element represents the secure wrapper used to submit USEF XML messages from the local message queue to the message queue of a remote participant.
It contains minimal metadata (which is distinct from the common metadata used for all other messages), allowing the recipient to look up the sender's cryptographic scheme and public keys, and the actual XML message, as transformed (signed/sealed) using that cryptographic scheme.
XML representation summary
```
<SignedMessage
SenderDomain = InternetDomain
SenderRole = ("AGR" | "CRO" | "DSO")
Body = base64Binary
/>
```
| | |
|--------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| SenderDomain | The Internet domain of the USEF participant sending this message. Upon receiving a message, the recipient should validate that its value matches the corresponding attribute value specified in the inner XML message, once un-sealed: if not, the message must be rejected as invalid.</br>Domain name matching regular expression `^([a-z0-9]+(-[a-z0-9]+)*\.)+[a-z]{2,}$` |
| SenderRole | The USEF role of the participant sending this message: AGR, CRO or DSO. Receive-time validation should take place as described for the SenderDomain attribute above. The USEF specification identifies additional roles such as BRP and MDC. These are however not in scope of UFTP. |
| Body | The Base-64 encoded inner XML message contained in this wrapper, as transformed (signed/sealed) using the sender's cryptographic scheme. The recipient can determine which scheme applies using a DNS or configuration file lookup, based on the combination of SenderDomain and SenderRole. |

View File

@@ -0,0 +1,26 @@
<!--
SPDX-FileCopyrightText: 2020-2023 Contributors to the Shapeshifter project
SPDX-License-Identifier: Apache-2.0
-->
# TestMessageResponse
Upon receiving a TestMessage, the receiving implementation must reply with a TestMessageResponse.
Like the TestMessage itself, the TestMessageResponse does not have any content (other than the mandatory metadata).
```
<TestMessageResponse
Metadata...
ReferenceMessageID = UUID
Result = ("Accepted" | "Rejected")
RejectionReason = String (Only if Result = "Rejected")
/>
```
| | |
|--------------------|---------------------------------------------------------------------------------------------------------------|
| Metadata | The metadata for this message. For details, see [metadata attributes](metadata-attributes.md). |
| ReferenceMessageID | MessageID of the TestMessage message that has just been accepted or rejected. |
| Result | Indication whether the TestMessage was accepted or rejected. |
| RejectionReason | In case the TestMessage was rejected, this attribute must contain a human-readable description of the reason. |

View File

@@ -0,0 +1,21 @@
<!--
SPDX-FileCopyrightText: 2020-2023 Contributors to the Shapeshifter project
SPDX-License-Identifier: Apache-2.0
-->
# TestMessage
TestMessage does not have any content (other than the mandatory metadata) and may be used by implementations for (connectivity) testing purposes.
XML representation summary
```
<TestMessage
Metadata...
/>
```
| | |
|----------|------------------------------------------------------------------------------------------------|
| Metadata | The metadata for this message. For details, see [metadata attributes](metadata-attributes.md). |

View File

@@ -0,0 +1,21 @@
<!--
SPDX-FileCopyrightText: 2020-2023 Contributors to the Shapeshifter project
SPDX-License-Identifier: Apache-2.0
-->
# Scope
USEF defines the content of XML messages between role processes, as required for implementation of USEFs MCM.
Each message has a unique recipient, identified by the Internet domain and USEF role of the participant.
The message transfer mechanism is responsible for sending and receiving these messages.
<figure markdown>
![Relationship between the normative USEF XML messages (yellow pane) and the best-practice message transfer mechanism (light-blue pane).](../assets/images/image18.emf.odg.svg.png){ width=1000px }
<figcaption>Relationship between the normative USEF XML messages (yellow pane) and the best-practice message transfer mechanism (light-blue pane).</figcaption>
</figure>
When selecting a message transfer mechanism, local market conditions should be considered and the USEF privacy and security guidelines should be followed [^B5].
Further recommendations about the message transport mechanism are given in [Message transport mechanism](../appendix/message-transport-mechanism.md).
[^B5]: USEF Foundation, "USEF: The Privacy and Security Guideline," USEF Foundation, Arnhem, 2015. Available: [https://www.usef.energy/app/uploads/2016/12/USEF_PrivacySecurityGuideline_3nov15.pdf](https://www.usef.energy/app/uploads/2016/12/USEF_PrivacySecurityGuideline_3nov15.pdf)