diff --git a/source/B2BApi/IncomingMessages/EbixIncomingMessageReceiver.cs b/source/B2BApi/IncomingMessages/EbixIncomingMessageReceiver.cs index cec4ef17cf..6dfd59550e 100644 --- a/source/B2BApi/IncomingMessages/EbixIncomingMessageReceiver.cs +++ b/source/B2BApi/IncomingMessages/EbixIncomingMessageReceiver.cs @@ -62,7 +62,7 @@ public async Task RunAsync( .ReceiveIncomingMarketMessageAsync( incomingMarketMessageStream, incomingDocumentFormat: DocumentFormat.Ebix, - IncomingDocumentType.MeteredDataForMeasurementPoint, + IncomingDocumentType.NotifyValidatedMeasureData, responseDocumentFormat: DocumentFormat.Ebix, cancellationToken) .ConfigureAwait(false); diff --git a/source/B2BApi/IncomingMessages/IncomingMessageReceiver.cs b/source/B2BApi/IncomingMessages/IncomingMessageReceiver.cs index ec318d81c8..87ffc8477e 100644 --- a/source/B2BApi/IncomingMessages/IncomingMessageReceiver.cs +++ b/source/B2BApi/IncomingMessages/IncomingMessageReceiver.cs @@ -137,7 +137,7 @@ private static async Task CreateResponseAsync( { { IncomingDocumentType.RequestAggregatedMeasureData, AuditLogEntityType.RequestAggregatedMeasureData }, { IncomingDocumentType.RequestWholesaleSettlement, AuditLogEntityType.RequestWholesaleServices }, - { IncomingDocumentType.MeteredDataForMeasurementPoint, AuditLogEntityType.MeteredDataForMeasurementPointReceived }, + { IncomingDocumentType.NotifyValidatedMeasureData, AuditLogEntityType.MeteredDataForMeasurementPointReceived }, }; entityTypeMapping.TryGetValue(incomingDocumentType, out var affectedEntityType); diff --git a/source/BuildingBlocks.Domain/Models/DocumentType.cs b/source/BuildingBlocks.Domain/Models/DocumentType.cs index 16343e88a0..106b4ec379 100644 --- a/source/BuildingBlocks.Domain/Models/DocumentType.cs +++ b/source/BuildingBlocks.Domain/Models/DocumentType.cs @@ -20,7 +20,7 @@ public class DocumentType : EnumerationType public static readonly DocumentType RejectRequestAggregatedMeasureData = new(nameof(RejectRequestAggregatedMeasureData), MessageCategory.Aggregations); public static readonly DocumentType NotifyWholesaleServices = new(nameof(NotifyWholesaleServices), MessageCategory.Aggregations); public static readonly DocumentType RejectRequestWholesaleSettlement = new(nameof(RejectRequestWholesaleSettlement), MessageCategory.Aggregations); - public static readonly DocumentType MeteredDataForMeasurementPoint = new(nameof(MeteredDataForMeasurementPoint), MessageCategory.TimeSeries); + public static readonly DocumentType NotifyValidatedMeasureData = new(nameof(NotifyValidatedMeasureData), MessageCategory.TimeSeries); private DocumentType(string name, MessageCategory category) : base(name) diff --git a/source/BuildingBlocks.Domain/Models/IncomingDocumentType.cs b/source/BuildingBlocks.Domain/Models/IncomingDocumentType.cs index 033da05b71..af9376fe0a 100644 --- a/source/BuildingBlocks.Domain/Models/IncomingDocumentType.cs +++ b/source/BuildingBlocks.Domain/Models/IncomingDocumentType.cs @@ -20,7 +20,7 @@ public class IncomingDocumentType : EnumerationType public static readonly IncomingDocumentType B2CRequestAggregatedMeasureData = new(nameof(B2CRequestAggregatedMeasureData)); public static readonly IncomingDocumentType RequestWholesaleSettlement = new(nameof(RequestWholesaleSettlement)); public static readonly IncomingDocumentType B2CRequestWholesaleSettlement = new(nameof(B2CRequestWholesaleSettlement)); - public static readonly IncomingDocumentType MeteredDataForMeasurementPoint = new(nameof(MeteredDataForMeasurementPoint)); + public static readonly IncomingDocumentType NotifyValidatedMeasureData = new(nameof(NotifyValidatedMeasureData)); private IncomingDocumentType(string name) : base(name) diff --git a/source/Edi.UnitTests/Validators/WholesaleServicesRequest/WholesaleServicesRequestValidatorTests.cs b/source/Edi.UnitTests/Validators/WholesaleServicesRequest/WholesaleServicesRequestValidatorTests.cs index a33cd88835..fa9643bb8d 100644 --- a/source/Edi.UnitTests/Validators/WholesaleServicesRequest/WholesaleServicesRequestValidatorTests.cs +++ b/source/Edi.UnitTests/Validators/WholesaleServicesRequest/WholesaleServicesRequestValidatorTests.cs @@ -83,14 +83,16 @@ public async Task Validate_WhenPeriodStartAndPeriodEndAreInvalidFormat_ReturnsUn // Arrange var now = SystemClock.Instance.GetCurrentInstant().ToDateTimeOffset(); + var startToYearsAgo = now.AddYears(-2); + var endToYearsAgo = now.AddYears(-2).AddMonths(1); var request = new WholesaleServicesRequestBuilder() .WithPeriodStart( - new LocalDateTime(now.Year - 2, now.Month, 1, 17, 45, 12) + new LocalDateTime(startToYearsAgo.Year, startToYearsAgo.Month, 1, 17, 45, 12) .InZoneStrictly(DateTimeZoneProviders.Tzdb.GetZoneOrNull("Europe/Copenhagen")!) .ToInstant() .ToString()) .WithPeriodEnd( - new LocalDateTime(now.Year - 2, now.Month + 1, 1, 8, 13, 56) + new LocalDateTime(endToYearsAgo.Year, endToYearsAgo.Month, 1, 8, 13, 56) .InZoneStrictly(DateTimeZoneProviders.Tzdb.GetZoneOrNull("Europe/Copenhagen")!) .ToInstant() .ToString()) @@ -100,8 +102,7 @@ public async Task Validate_WhenPeriodStartAndPeriodEndAreInvalidFormat_ReturnsUn var validationErrors = await _sut.ValidateAsync(request); // Assert - validationErrors.Should().HaveCount(2); - validationErrors.Select(e => e.ErrorCode).Should().BeEquivalentTo(["D66", "D66"]); + validationErrors.Where(x => x.ErrorCode == "D66").Should().HaveCount(2); } [Fact] diff --git a/source/IncomingMessages.Application/DelegateIncomingMessage.cs b/source/IncomingMessages.Application/DelegateIncomingMessage.cs index 0f978d5af1..d22d0a8db1 100644 --- a/source/IncomingMessages.Application/DelegateIncomingMessage.cs +++ b/source/IncomingMessages.Application/DelegateIncomingMessage.cs @@ -156,7 +156,7 @@ private ProcessType MapToProcessType(IncomingDocumentType incomingDocumentType) { IncomingDocumentType.B2CRequestAggregatedMeasureData, ProcessType.RequestEnergyResults }, { IncomingDocumentType.RequestWholesaleSettlement, ProcessType.RequestWholesaleResults }, { IncomingDocumentType.B2CRequestWholesaleSettlement, ProcessType.RequestWholesaleResults }, - { IncomingDocumentType.MeteredDataForMeasurementPoint, ProcessType.IncomingMeteredDataForMeasurementPoint }, + { IncomingDocumentType.NotifyValidatedMeasureData, ProcessType.IncomingMeteredDataForMeasurementPoint }, }; if (documentTypeToProcessTypeMap.TryGetValue(incomingDocumentType, out var processType)) diff --git a/source/IncomingMessages.Application/UseCases/ReceiveIncomingMarketMessage.cs b/source/IncomingMessages.Application/UseCases/ReceiveIncomingMarketMessage.cs index 48953ae255..bcfe9b9006 100644 --- a/source/IncomingMessages.Application/UseCases/ReceiveIncomingMarketMessage.cs +++ b/source/IncomingMessages.Application/UseCases/ReceiveIncomingMarketMessage.cs @@ -144,7 +144,7 @@ await _delegateIncomingMessage private static bool ShouldArchive(IncomingDocumentType documentType) { - return documentType != IncomingDocumentType.MeteredDataForMeasurementPoint; + return documentType != IncomingDocumentType.NotifyValidatedMeasureData; } private async Task ParseIncomingMessageAsync( diff --git a/source/IncomingMessages.Domain/MessageParsers/RSM012/MeteredDateForMeasurementPointEbixMessageParser.cs b/source/IncomingMessages.Domain/MessageParsers/RSM012/MeteredDateForMeasurementPointEbixMessageParser.cs index ba5dc7c7b7..8877ebbc73 100644 --- a/source/IncomingMessages.Domain/MessageParsers/RSM012/MeteredDateForMeasurementPointEbixMessageParser.cs +++ b/source/IncomingMessages.Domain/MessageParsers/RSM012/MeteredDateForMeasurementPointEbixMessageParser.cs @@ -37,7 +37,7 @@ public class MeteredDateForMeasurementPointEbixMessageParser(EbixSchemaProvider private const string QuantityQuality = "QuantityQuality"; private const string IntervalEnergyObservation = "IntervalEnergyObservation"; - public override IncomingDocumentType DocumentType => IncomingDocumentType.MeteredDataForMeasurementPoint; + public override IncomingDocumentType DocumentType => IncomingDocumentType.NotifyValidatedMeasureData; public override DocumentFormat DocumentFormat => DocumentFormat.Ebix; diff --git a/source/IncomingMessages.Domain/MessageParsers/RSM012/MeteredDateForMeasurementPointJsonMessageParser.cs b/source/IncomingMessages.Domain/MessageParsers/RSM012/MeteredDateForMeasurementPointJsonMessageParser.cs index 53aed69ab9..fdde2b3336 100644 --- a/source/IncomingMessages.Domain/MessageParsers/RSM012/MeteredDateForMeasurementPointJsonMessageParser.cs +++ b/source/IncomingMessages.Domain/MessageParsers/RSM012/MeteredDateForMeasurementPointJsonMessageParser.cs @@ -38,7 +38,7 @@ public class MeteredDateForMeasurementPointJsonMessageParser(JsonSchemaProvider private const string QuantityElementName = "quantity"; private const string RegistrationDateAndOrTimeElementName = "registration_DateAndOrTime.dateTime"; - public override IncomingDocumentType DocumentType => IncomingDocumentType.MeteredDataForMeasurementPoint; + public override IncomingDocumentType DocumentType => IncomingDocumentType.NotifyValidatedMeasureData; public override DocumentFormat DocumentFormat => DocumentFormat.Json; diff --git a/source/IncomingMessages.Domain/MessageParsers/RSM012/MeteredDateForMeasurementPointXmlMessageParser.cs b/source/IncomingMessages.Domain/MessageParsers/RSM012/MeteredDateForMeasurementPointXmlMessageParser.cs index 6ffa82d2c4..6b1026a0ae 100644 --- a/source/IncomingMessages.Domain/MessageParsers/RSM012/MeteredDateForMeasurementPointXmlMessageParser.cs +++ b/source/IncomingMessages.Domain/MessageParsers/RSM012/MeteredDateForMeasurementPointXmlMessageParser.cs @@ -39,7 +39,7 @@ public class MeteredDateForMeasurementPointXmlMessageParser(CimXmlSchemaProvider private const string QualityElementName = "quality"; private const string RegistrationDateAndOrTimeElementName = "registration_DateAndOrTime.dateTime"; - public override IncomingDocumentType DocumentType => IncomingDocumentType.MeteredDataForMeasurementPoint; + public override IncomingDocumentType DocumentType => IncomingDocumentType.NotifyValidatedMeasureData; protected override string RootPayloadElementName => "NotifyValidatedMeasureData_MarketDocument"; diff --git a/source/IncomingMessages.IntegrationTests/IncomingMessages/GivenIncomingMessagesTests.cs b/source/IncomingMessages.IntegrationTests/IncomingMessages/GivenIncomingMessagesTests.cs index c925d35d15..c4e77590e8 100644 --- a/source/IncomingMessages.IntegrationTests/IncomingMessages/GivenIncomingMessagesTests.cs +++ b/source/IncomingMessages.IntegrationTests/IncomingMessages/GivenIncomingMessagesTests.cs @@ -68,9 +68,9 @@ public static TheoryData WriteAsync( diff --git a/source/OutgoingMessages.Domain/DocumentWriters/RSM012/MeteredDateForMeasurementPointCimXmlDocumentWriter.cs b/source/OutgoingMessages.Domain/DocumentWriters/RSM012/MeteredDateForMeasurementPointCimXmlDocumentWriter.cs index 2aab3916cc..248dce52bf 100644 --- a/source/OutgoingMessages.Domain/DocumentWriters/RSM012/MeteredDateForMeasurementPointCimXmlDocumentWriter.cs +++ b/source/OutgoingMessages.Domain/DocumentWriters/RSM012/MeteredDateForMeasurementPointCimXmlDocumentWriter.cs @@ -27,7 +27,7 @@ public bool HandlesFormat(DocumentFormat format) public bool HandlesType(DocumentType documentType) { - return documentType == DocumentType.MeteredDataForMeasurementPoint; + return documentType == DocumentType.NotifyValidatedMeasureData; } public Task WriteAsync( diff --git a/source/OutgoingMessages.Domain/DocumentWriters/RSM012/MeteredDateForMeasurementPointMarketActivityRecord.cs b/source/OutgoingMessages.Domain/DocumentWriters/RSM012/MeteredDateForMeasurementPointMarketActivityRecord.cs index 77bd0855c8..066057df5a 100644 --- a/source/OutgoingMessages.Domain/DocumentWriters/RSM012/MeteredDateForMeasurementPointMarketActivityRecord.cs +++ b/source/OutgoingMessages.Domain/DocumentWriters/RSM012/MeteredDateForMeasurementPointMarketActivityRecord.cs @@ -27,4 +27,7 @@ public record MeteredDateForMeasurementPointMarketActivityRecord( string EndedDateTime, IReadOnlyList Points); -public record PointActivityRecord(int Position, string? Quality, int? Quantity); +public record PointActivityRecord( + int Position, + string? Quality, + int? Quantity); diff --git a/source/OutgoingMessages.IntegrationTests/OutgoingMessages/DocumentFactory/DocumentFactoryTests.cs b/source/OutgoingMessages.IntegrationTests/OutgoingMessages/DocumentFactory/DocumentFactoryTests.cs index ceddbf08ea..412766d811 100644 --- a/source/OutgoingMessages.IntegrationTests/OutgoingMessages/DocumentFactory/DocumentFactoryTests.cs +++ b/source/OutgoingMessages.IntegrationTests/OutgoingMessages/DocumentFactory/DocumentFactoryTests.cs @@ -64,7 +64,7 @@ public void Ensure_that_all_document_support_ebix(DocumentType documentType) var writer = _documentWriters.FirstOrDefault(writer => writer.HandlesType(documentType) && writer.HandlesFormat(DocumentFormat.Ebix)); - if (documentType == DocumentType.MeteredDataForMeasurementPoint) + if (documentType == DocumentType.NotifyValidatedMeasureData) { writer.Should().BeNull($"{documentType} does not support ebix"); } diff --git a/source/Tests/Application/OutgoingMessages/MetricNameGenerationTests.cs b/source/Tests/Application/OutgoingMessages/MetricNameGenerationTests.cs index 671c649045..b637ccf812 100644 --- a/source/Tests/Application/OutgoingMessages/MetricNameGenerationTests.cs +++ b/source/Tests/Application/OutgoingMessages/MetricNameGenerationTests.cs @@ -21,7 +21,22 @@ namespace Energinet.DataHub.EDI.Tests.Application.OutgoingMessages; public class MetricNameGenerationTests { - // The following values has to be hardcoded, since they are hardcoded in the terraform defining the dashboard + // The following values have to be hardcoded, since they are hardcoded in the terraform defining the dashboard. + // When a new document type is introduced, the following needs to be inserted into to the terraform script: + // { + // "resourceMetadata": { + // "id": "${appi_sharedres_id}" + // }, + // "name": "MeteredDataForMeasurementPoint{format}", + // "aggregationType": 7, + // "namespace": "azure.applicationinsights", + // "metricVisualization": { + // "displayName": "MeteredDataForMeasurementPoint{format}" + // } + // } + // replace {format} with the supported formats for the new document type. + // and include this link to the file: https://github.com/Energinet-DataHub/dh3-infrastructure/blob/main/edi/terraform/main/dashboard-templates/edi_monitor.tpl + // Look for RejectRequestWholesaleSettlement in the script for an example. private static readonly string[] _formats = ["Json", "Xml", "Ebix" ]; private static readonly string[] _documentMetrics = [ @@ -31,7 +46,14 @@ public class MetricNameGenerationTests "NotifyWholesaleServices", "NotifyWholesaleServicesResponse", "RejectRequestWholesaleSettlement", - "MeteredDataForMeasurementPoint", + "NotifyValidatedMeasureData", + "NotifyValidatedMeasureDataResponse", + ]; + + private static readonly DocumentType[] _isOnlyTriggeredByIncomingMessage = + [ + DocumentType.RejectRequestWholesaleSettlement, + DocumentType.RejectRequestAggregatedMeasureData ]; private readonly string[] _loggedMessageGenerationMetric = _formats.Select( @@ -63,13 +85,15 @@ private static List AllMessageGenerationsMetricsNames() { foreach (var documentType in documentTypes) { + // Most documents are logged as an outgoing message and as a response to a corresponding incoming message names.Add(MetricNameMapper.MessageGenerationMetricName( documentType, documentFormat, false)); - if (documentType.Name.Contains("Notify")) + + // Some documents are only logged as an outgoing message + if (!_isOnlyTriggeredByIncomingMessage.Contains(documentType)) { - // We're logging a response of a request as a separate message generation, even though it's the same document names.Add(MetricNameMapper.MessageGenerationMetricName( documentType, documentFormat, diff --git a/source/Tests/B2CWebApi/Mappers/DocumentTypeMapperTests.cs b/source/Tests/B2CWebApi/Mappers/DocumentTypeMapperTests.cs index f0f049a525..05bfbadc27 100644 --- a/source/Tests/B2CWebApi/Mappers/DocumentTypeMapperTests.cs +++ b/source/Tests/B2CWebApi/Mappers/DocumentTypeMapperTests.cs @@ -67,7 +67,7 @@ public void Ensure_all_DocumentTypes_are_supported() // TODO - Remove this line when all DocumentTypes are supported in B2C supportedDocumentTypes = supportedDocumentTypes - .Where(x => x != IncomingDocumentType.MeteredDataForMeasurementPoint.Name); + .Where(x => x != IncomingDocumentType.NotifyValidatedMeasureData.Name); // Act & Assert documentTypes.Should().BeEquivalentTo(supportedDocumentTypes.ToList());