...
Returns the list of active locations for a customer, each with its
electricity service(s).
It first validates the customer exists
(commonValidator.ValidateCustomer) and validates input
(customerId required; limit, if supplied, must be 1-1000, default 100).
It then loads location headers, loads the electricity services for those
installations, attaches each service's current supply start/end dates, and
maps everything to the BrightLocation response.
...
installation for the customer.
| Code Block |
|---|
[ |
...
{ |
...
"Id": <value> // Data: SonWin installation number (AINSD.INSTNR), as string |
...
"Address": <value> // Data: street + house number (AINSD.ADRESSE + AINSD.HUSNUMMER) |
...
"ZipCode": <value> // Data: postal code (AINSD.POSTNUM) |
...
"City": <value> // Data: city name (IPOST.NAVN, falling back to AINSD.STED; empty string if both null) |
...
"Properties": null // Hardcoded null: BrightLocationProperties is never populated by the mapper |
...
// (PropertyType, NumberOfResidents, Size, HouseAge, Cars[], Heating, |
...
// HeatingSecondary, Gadgets[] are all unused today) |
...
"PriceZone": <value> // Derived: from ZipCode -> "DK1" if zip >= 6000, "DK2" if zip < 6000, |
...
// null if the zip code cannot be parsed |
...
"Services": [ // Data: the electricity service(s) for this installation (empty array if none) |
...
{ |
...
"Id": <value> // Data: metering point id / EAN (IndividualMPoints.MeteringPointId, aka AftageNr) |
...
"Type": <value> // Derived: mapped from SonWin forsyningsart. For electricity this is |
...
// always "consumption_trade". (Other types map to water/heating/ |
...
// cooling/tv/broadband/waste/gas_trade, but only El is queried today.) |
...
"Status": "Active" // Hardcoded: BrightServiceStatus.Active.ToString(). |
...
// NOTE: this emits the enum NAME "Active" (capital A), NOT the |
...
// display value "active". TODO in code: derive real status from SonWin. |
...
"MeasurementResolution": <value> // Derived from forsyningsart: electricity => "hour" |
...
// (broadband => "none"; other types default to "none" - TODO). |
...
"MeasurementId": <value> // Data: metering point id (same value as Service.Id / AftageNr) |
...
"DeliveryPointId": null // Hardcoded null: never set by the mapper |
...
"CostResolution": null // Hardcoded null: never set by the mapper |
...
"CostId": null // Hardcoded null: never set by the mapper |
...
"Properties": null // Hardcoded null: BrightServiceProperties (ShowCost, |
...
// RealtimeMeasurements) is never populated |
...
"StartDate": <value> // Data: current supply start date (SWMarket MeteringPointRoleOccurrence.FromDate), |
...
// as DateTimeOffset (UTC/zero offset). Required - null fails validation. |
...
"EndDate": <value> // Data: current supply end date (SWMarket ...ToDate), as DateTimeOffset. |
...
// OMITTED from the JSON entirely when null (JsonIgnore WhenWritingNull); |
...
// null/absent means the supply has no scheduled end (still active). |
...
} |
...
], |
...
"Longitude": null // Hardcoded null: never set by the mapper |
...
"Latitude": null // Hardcoded null: never set by the mapper |
...
} |
...
] |
Notes:
- Properties, Longitude and Latitude on the location are always null/absent.
...