From 76b236344850301b83e1515c04349cb0c9486342 Mon Sep 17 00:00:00 2001 From: Nico Koprowski Date: Mon, 25 Dec 2023 14:58:52 +0800 Subject: [PATCH] feat(Api): add confidence criteria fields to L/S/A business partner model - added confidence criteria on all LSA business partner API dtos - added persistence for the confidence criteria in the Pool - changed test and test values accordingly --- .../bridge/dummy/service/PoolUpdateService.kt | 20 ++++++- .../service/GenericBusinessPartnerMappings.kt | 21 +++++-- .../bpdm/cleaning/testdata/CommonValues.kt | 12 ++-- .../bpdm/common/dto/IBaseLegalEntityDto.kt | 2 + .../common/dto/IBaseLogisticAddressDto.kt | 2 + .../tractusx/bpdm/common/dto/IBaseSiteDto.kt | 2 + .../bpdm/common/dto/IConfidenceCriteriaDto.kt | 31 ++++++++++ .../gate/api/model/ConfidenceCriteriaDto.kt | 33 ++++++++++ .../bpdm/gate/api/model/LegalEntityDto.kt | 4 +- .../bpdm/gate/api/model/LogisticAddressDto.kt | 4 +- .../api/model/ConfidenceCriteria.kt | 32 ++++++++++ .../orchestrator/api/model/LegalEntityDto.kt | 4 +- .../api/model/LogisticAddressDto.kt | 4 +- .../orchestrator/api/model/SiteDto.kt | 4 +- .../testdata/BusinessPartnerTestValues.kt | 60 +++++++++++++++++-- .../pool/api/model/ConfidenceCriteriaDto.kt | 32 ++++++++++ .../bpdm/pool/api/model/LegalEntityDto.kt | 3 +- .../pool/api/model/LegalEntityVerboseDto.kt | 4 +- .../bpdm/pool/api/model/LogisticAddressDto.kt | 4 +- .../api/model/LogisticAddressVerboseDto.kt | 4 +- .../tractusx/bpdm/pool/api/model/SiteDto.kt | 4 +- .../bpdm/pool/api/model/SiteVerboseDto.kt | 4 +- .../bpdm/pool/entity/ConfidenceCriteria.kt | 41 +++++++++++++ .../tractusx/bpdm/pool/entity/LegalEntity.kt | 5 +- .../bpdm/pool/entity/LogisticAddress.kt | 5 +- .../eclipse/tractusx/bpdm/pool/entity/Site.kt | 3 + .../service/BusinessPartnerBuildService.kt | 27 +++++++-- .../bpdm/pool/service/ResponseMappings.kt | 16 ++++- .../bpdm/pool/service/TaskStepBuildService.kt | 4 +- .../V5_0_0_0__add_confidence_criteria.sql | 24 ++++++++ .../bpdm/pool/controller/SiteControllerIT.kt | 13 ++-- .../TaskStepFetchAndReserveServiceTest.kt | 28 +++++++-- .../util/BusinessPartnerNonVerboseValues.kt | 30 +++++++--- .../pool/util/BusinessPartnerVerboseValues.kt | 43 +++++++++++++ 34 files changed, 469 insertions(+), 60 deletions(-) create mode 100644 bpdm-common/src/main/kotlin/org/eclipse/tractusx/bpdm/common/dto/IConfidenceCriteriaDto.kt create mode 100644 bpdm-gate-api/src/main/kotlin/org/eclipse/tractusx/bpdm/gate/api/model/ConfidenceCriteriaDto.kt create mode 100644 bpdm-orchestrator-api/src/main/kotlin/org/eclipse/tractusx/orchestrator/api/model/ConfidenceCriteria.kt create mode 100644 bpdm-pool-api/src/main/kotlin/org/eclipse/tractusx/bpdm/pool/api/model/ConfidenceCriteriaDto.kt create mode 100644 bpdm-pool/src/main/kotlin/org/eclipse/tractusx/bpdm/pool/entity/ConfidenceCriteria.kt create mode 100644 bpdm-pool/src/main/resources/db/migration/V5_0_0_0__add_confidence_criteria.sql diff --git a/bpdm-bridge-dummy/src/main/kotlin/com/catenax/bpdm/bridge/dummy/service/PoolUpdateService.kt b/bpdm-bridge-dummy/src/main/kotlin/com/catenax/bpdm/bridge/dummy/service/PoolUpdateService.kt index a9dcebc2a..fa1575ebc 100644 --- a/bpdm-bridge-dummy/src/main/kotlin/com/catenax/bpdm/bridge/dummy/service/PoolUpdateService.kt +++ b/bpdm-bridge-dummy/src/main/kotlin/com/catenax/bpdm/bridge/dummy/service/PoolUpdateService.kt @@ -24,11 +24,13 @@ import mu.KotlinLogging import org.eclipse.tractusx.bpdm.common.dto.BusinessPartnerType import org.eclipse.tractusx.bpdm.gate.api.client.GateClient import org.eclipse.tractusx.bpdm.pool.api.client.PoolApiClient +import org.eclipse.tractusx.bpdm.pool.api.model.ConfidenceCriteriaDto import org.eclipse.tractusx.bpdm.pool.api.model.LogisticAddressDto import org.eclipse.tractusx.bpdm.pool.api.model.SiteDto import org.eclipse.tractusx.bpdm.pool.api.model.request.* import org.eclipse.tractusx.bpdm.pool.api.model.response.* import org.springframework.stereotype.Service +import java.time.LocalDateTime @Service class PoolUpdateService( @@ -39,6 +41,15 @@ class PoolUpdateService( private val logger = KotlinLogging.logger { } + private val dummyConfidenceCriteria = ConfidenceCriteriaDto( + sharedByOwner = false, + numberOfBusinessPartners = 1, + checkedByExternalDataSource = false, + lastConfidenceCheckAt = LocalDateTime.now(), + nextConfidenceCheckAt = LocalDateTime.now().plusDays(5), + confidenceLevel = 0 + ) + fun createLegalEntitiesInPool(entriesToCreate: Collection): LegalEntityPartnerCreateResponseWrapper { val createRequests = entriesToCreate.map { LegalEntityPartnerCreateRequest( @@ -77,6 +88,7 @@ class PoolUpdateService( name = entry.site.nameParts.firstOrNull() ?: "", states = entry.site.states.map(::gateToPoolSiteState), mainAddress = gateToPoolLogisticAddress(entry.mainAddress), + confidenceCriteria = dummyConfidenceCriteria ), index = entry.externalId, bpnlParent = leParentBpn @@ -101,6 +113,7 @@ class PoolUpdateService( name = it.site.nameParts.firstOrNull() ?: "", states = it.site.states.map(::gateToPoolSiteState), mainAddress = gateToPoolLogisticAddress(it.mainAddress), + confidenceCriteria = dummyConfidenceCriteria ), bpns = it.bpn!! ) @@ -141,7 +154,8 @@ class PoolUpdateService( states = entry.address.states.map(::gateToPoolAddressState), identifiers = entry.address.identifiers.map(::gateToPoolAddressIdentifier), physicalPostalAddress = gateToPoolPhysicalAddress(entry.address.physicalPostalAddress), - alternativePostalAddress = entry.address.alternativePostalAddress?.let(::gateToPoolAlternativeAddress) + alternativePostalAddress = entry.address.alternativePostalAddress?.let(::gateToPoolAlternativeAddress), + confidenceCriteria = dummyConfidenceCriteria ), index = entry.externalId, bpnParent = siteParentBpn @@ -181,7 +195,8 @@ class PoolUpdateService( states = it.address.states.map(::gateToPoolAddressState), identifiers = it.address.identifiers.map(::gateToPoolAddressIdentifier), physicalPostalAddress = gateToPoolPhysicalAddress(it.address.physicalPostalAddress), - alternativePostalAddress = it.address.alternativePostalAddress?.let(::gateToPoolAlternativeAddress) + alternativePostalAddress = it.address.alternativePostalAddress?.let(::gateToPoolAlternativeAddress), + confidenceCriteria = dummyConfidenceCriteria ), bpna = it.bpn!! ) @@ -190,5 +205,4 @@ class PoolUpdateService( return poolClient.addresses.updateAddresses(updateRequests) .also { logger.info { "Pool accepted ${it.entityCount} updated addresses, ${it.errorCount} were refused" } } } - } diff --git a/bpdm-cleaning-service-dummy/src/main/kotlin/org/eclipse/tractusx/bpdm/cleaning/service/GenericBusinessPartnerMappings.kt b/bpdm-cleaning-service-dummy/src/main/kotlin/org/eclipse/tractusx/bpdm/cleaning/service/GenericBusinessPartnerMappings.kt index a43820345..90ac07072 100644 --- a/bpdm-cleaning-service-dummy/src/main/kotlin/org/eclipse/tractusx/bpdm/cleaning/service/GenericBusinessPartnerMappings.kt +++ b/bpdm-cleaning-service-dummy/src/main/kotlin/org/eclipse/tractusx/bpdm/cleaning/service/GenericBusinessPartnerMappings.kt @@ -22,8 +22,18 @@ package org.eclipse.tractusx.bpdm.cleaning.service import org.eclipse.tractusx.bpdm.common.dto.AddressType import org.eclipse.tractusx.orchestrator.api.model.* +import java.time.LocalDateTime +val dummyConfidenceCriteria = ConfidenceCriteria( + sharedByOwner = false, + numberOfBusinessPartners = 1, + checkedByExternalDataSource = false, + lastConfidenceCheckAt = LocalDateTime.now(), + nextConfidenceCheckAt = LocalDateTime.now().plusDays(5), + confidenceLevel = 0 +) + fun BusinessPartnerGenericDto.toLegalEntityDto(bpnReferenceDto: BpnReferenceDto, legalAddress: LogisticAddressDto): LegalEntityDto { return LegalEntityDto( @@ -35,8 +45,8 @@ fun BusinessPartnerGenericDto.toLegalEntityDto(bpnReferenceDto: BpnReferenceDto, legalForm = legalEntity.legalForm, states = states.mapNotNull { it.toLegalEntityState() }, classifications = legalEntity.classifications.map { it.toLegalEntityClassificationDto() }, - legalAddress = legalAddress - + legalAddress = legalAddress, + confidenceCriteria = dummyConfidenceCriteria ) } @@ -75,7 +85,8 @@ fun BusinessPartnerGenericDto.toLogisticAddressDto(bpnReferenceDto: BpnReference states = emptyList(), identifiers = emptyList(), physicalPostalAddress = address.physicalPostalAddress, - alternativePostalAddress = address.alternativePostalAddress + alternativePostalAddress = address.alternativePostalAddress, + confidenceCriteria = dummyConfidenceCriteria ) } @@ -87,8 +98,8 @@ fun BusinessPartnerGenericDto.toSiteDto(bpnReferenceDto: BpnReferenceDto, legalN hasChanged = address.addressType in setOf(AddressType.SiteMainAddress, AddressType.LegalAndSiteMainAddress), name = legalName, states = states.mapNotNull { it.toSiteState() }, - mainAddress = siteAddressReference - + mainAddress = siteAddressReference, + confidenceCriteria = dummyConfidenceCriteria ) } diff --git a/bpdm-cleaning-service-dummy/src/test/kotlin/org/eclipse/tractusx/bpdm/cleaning/testdata/CommonValues.kt b/bpdm-cleaning-service-dummy/src/test/kotlin/org/eclipse/tractusx/bpdm/cleaning/testdata/CommonValues.kt index a296aeae8..782d2e2ff 100644 --- a/bpdm-cleaning-service-dummy/src/test/kotlin/org/eclipse/tractusx/bpdm/cleaning/testdata/CommonValues.kt +++ b/bpdm-cleaning-service-dummy/src/test/kotlin/org/eclipse/tractusx/bpdm/cleaning/testdata/CommonValues.kt @@ -20,10 +20,7 @@ package org.eclipse.tractusx.bpdm.cleaning.testdata import com.neovisionaries.i18n.CountryCode -import org.eclipse.tractusx.bpdm.cleaning.service.toLegalEntityClassificationDto -import org.eclipse.tractusx.bpdm.cleaning.service.toLegalEntityIdentifierDto -import org.eclipse.tractusx.bpdm.cleaning.service.toLegalEntityState -import org.eclipse.tractusx.bpdm.cleaning.service.toSiteState +import org.eclipse.tractusx.bpdm.cleaning.service.* import org.eclipse.tractusx.bpdm.common.dto.AddressType import org.eclipse.tractusx.bpdm.common.dto.BusinessPartnerRole import org.eclipse.tractusx.bpdm.common.dto.GeoCoordinateDto @@ -180,13 +177,15 @@ object CommonValues { identifiers = identifiers.mapNotNull { it.toLegalEntityIdentifierDto() }, legalForm = legalForm, states = states.mapNotNull { it.toLegalEntityState() }, - classifications = classifications.map { it.toLegalEntityClassificationDto() } + classifications = classifications.map { it.toLegalEntityClassificationDto() }, + confidenceCriteria = dummyConfidenceCriteria ) val expectedSiteDto = SiteDto( hasChanged = true, name = nameParts.joinToString(" "), states = states.mapNotNull { it.toSiteState() }, + confidenceCriteria = dummyConfidenceCriteria ) val expectedLogisticAddressDto = LogisticAddressDto( @@ -195,7 +194,8 @@ object CommonValues { name = nameParts.joinToString(" "), states = emptyList(), identifiers = emptyList(), - physicalPostalAddress = physicalPostalAddress + physicalPostalAddress = physicalPostalAddress, + confidenceCriteria = dummyConfidenceCriteria ) diff --git a/bpdm-common/src/main/kotlin/org/eclipse/tractusx/bpdm/common/dto/IBaseLegalEntityDto.kt b/bpdm-common/src/main/kotlin/org/eclipse/tractusx/bpdm/common/dto/IBaseLegalEntityDto.kt index 39808327f..2ef71bd77 100644 --- a/bpdm-common/src/main/kotlin/org/eclipse/tractusx/bpdm/common/dto/IBaseLegalEntityDto.kt +++ b/bpdm-common/src/main/kotlin/org/eclipse/tractusx/bpdm/common/dto/IBaseLegalEntityDto.kt @@ -40,4 +40,6 @@ interface IBaseLegalEntityDto { @get:ArraySchema(arraySchema = Schema(description = LegalEntityDescription.classifications, required = false)) val classifications: Collection + + val confidenceCriteria: IConfidenceCriteriaDto? } diff --git a/bpdm-common/src/main/kotlin/org/eclipse/tractusx/bpdm/common/dto/IBaseLogisticAddressDto.kt b/bpdm-common/src/main/kotlin/org/eclipse/tractusx/bpdm/common/dto/IBaseLogisticAddressDto.kt index 4c5dd0cd6..e9659036d 100644 --- a/bpdm-common/src/main/kotlin/org/eclipse/tractusx/bpdm/common/dto/IBaseLogisticAddressDto.kt +++ b/bpdm-common/src/main/kotlin/org/eclipse/tractusx/bpdm/common/dto/IBaseLogisticAddressDto.kt @@ -39,4 +39,6 @@ interface IBaseLogisticAddressDto { // TODO OpenAPI description for complex field does not work!! @get:Schema(description = LogisticAddressDescription.alternativePostalAddress) val alternativePostalAddress: IBaseAlternativePostalAddressDto? + + val confidenceCriteria: IConfidenceCriteriaDto? } diff --git a/bpdm-common/src/main/kotlin/org/eclipse/tractusx/bpdm/common/dto/IBaseSiteDto.kt b/bpdm-common/src/main/kotlin/org/eclipse/tractusx/bpdm/common/dto/IBaseSiteDto.kt index b7d4b88bc..85d9afa0e 100644 --- a/bpdm-common/src/main/kotlin/org/eclipse/tractusx/bpdm/common/dto/IBaseSiteDto.kt +++ b/bpdm-common/src/main/kotlin/org/eclipse/tractusx/bpdm/common/dto/IBaseSiteDto.kt @@ -31,4 +31,6 @@ interface IBaseSiteDto { @get:ArraySchema(arraySchema = Schema(description = SiteDescription.states)) val states: Collection + + val confidenceCriteria: IConfidenceCriteriaDto } diff --git a/bpdm-common/src/main/kotlin/org/eclipse/tractusx/bpdm/common/dto/IConfidenceCriteriaDto.kt b/bpdm-common/src/main/kotlin/org/eclipse/tractusx/bpdm/common/dto/IConfidenceCriteriaDto.kt new file mode 100644 index 000000000..760198208 --- /dev/null +++ b/bpdm-common/src/main/kotlin/org/eclipse/tractusx/bpdm/common/dto/IConfidenceCriteriaDto.kt @@ -0,0 +1,31 @@ +/******************************************************************************* + * Copyright (c) 2021,2023 Contributors to the Eclipse Foundation + * + * See the NOTICE file(s) distributed with this work for additional + * information regarding copyright ownership. + * + * This program and the accompanying materials are made available under the + * terms of the Apache License, Version 2.0 which is available at + * https://www.apache.org/licenses/LICENSE-2.0. + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + * + * SPDX-License-Identifier: Apache-2.0 + ******************************************************************************/ + +package org.eclipse.tractusx.bpdm.common.dto + +import java.time.LocalDateTime + +interface IConfidenceCriteriaDto { + val sharedByOwner: Boolean? + val checkedByExternalDataSource: Boolean? + val numberOfBusinessPartners: Int? + val lastConfidenceCheckAt: LocalDateTime? + val nextConfidenceCheckAt: LocalDateTime? + val confidenceLevel: Int? +} diff --git a/bpdm-gate-api/src/main/kotlin/org/eclipse/tractusx/bpdm/gate/api/model/ConfidenceCriteriaDto.kt b/bpdm-gate-api/src/main/kotlin/org/eclipse/tractusx/bpdm/gate/api/model/ConfidenceCriteriaDto.kt new file mode 100644 index 000000000..4ef1e401c --- /dev/null +++ b/bpdm-gate-api/src/main/kotlin/org/eclipse/tractusx/bpdm/gate/api/model/ConfidenceCriteriaDto.kt @@ -0,0 +1,33 @@ +/******************************************************************************* + * Copyright (c) 2021,2023 Contributors to the Eclipse Foundation + * + * See the NOTICE file(s) distributed with this work for additional + * information regarding copyright ownership. + * + * This program and the accompanying materials are made available under the + * terms of the Apache License, Version 2.0 which is available at + * https://www.apache.org/licenses/LICENSE-2.0. + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + * + * SPDX-License-Identifier: Apache-2.0 + ******************************************************************************/ + +package org.eclipse.tractusx.bpdm.gate.api.model + +import org.eclipse.tractusx.bpdm.common.dto.IConfidenceCriteriaDto +import java.time.LocalDateTime + +data class ConfidenceCriteriaDto( + override val sharedByOwner: Boolean?, + override val checkedByExternalDataSource: Boolean?, + override val numberOfBusinessPartners: Int?, + override val lastConfidenceCheckAt: LocalDateTime?, + override val nextConfidenceCheckAt: LocalDateTime?, + override val confidenceLevel: Int? + +) : IConfidenceCriteriaDto diff --git a/bpdm-gate-api/src/main/kotlin/org/eclipse/tractusx/bpdm/gate/api/model/LegalEntityDto.kt b/bpdm-gate-api/src/main/kotlin/org/eclipse/tractusx/bpdm/gate/api/model/LegalEntityDto.kt index 0de842705..516ce27ac 100644 --- a/bpdm-gate-api/src/main/kotlin/org/eclipse/tractusx/bpdm/gate/api/model/LegalEntityDto.kt +++ b/bpdm-gate-api/src/main/kotlin/org/eclipse/tractusx/bpdm/gate/api/model/LegalEntityDto.kt @@ -39,6 +39,8 @@ data class LegalEntityDto( override val classifications: Collection = emptyList(), @get:ArraySchema(arraySchema = Schema(description = CommonDescription.roles)) - val roles: Collection = emptyList() + val roles: Collection = emptyList(), + + override val confidenceCriteria: ConfidenceCriteriaDto? = null ) : IBaseLegalEntityDto diff --git a/bpdm-gate-api/src/main/kotlin/org/eclipse/tractusx/bpdm/gate/api/model/LogisticAddressDto.kt b/bpdm-gate-api/src/main/kotlin/org/eclipse/tractusx/bpdm/gate/api/model/LogisticAddressDto.kt index a6487c526..658129481 100644 --- a/bpdm-gate-api/src/main/kotlin/org/eclipse/tractusx/bpdm/gate/api/model/LogisticAddressDto.kt +++ b/bpdm-gate-api/src/main/kotlin/org/eclipse/tractusx/bpdm/gate/api/model/LogisticAddressDto.kt @@ -37,6 +37,8 @@ data class LogisticAddressDto( override val alternativePostalAddress: AlternativePostalAddressDto? = null, @get:ArraySchema(arraySchema = Schema(description = LogisticAddressDescription.roles)) - val roles: Collection = emptyList() + val roles: Collection = emptyList(), + + override val confidenceCriteria: ConfidenceCriteriaDto? = null ) : IBaseLogisticAddressDto diff --git a/bpdm-orchestrator-api/src/main/kotlin/org/eclipse/tractusx/orchestrator/api/model/ConfidenceCriteria.kt b/bpdm-orchestrator-api/src/main/kotlin/org/eclipse/tractusx/orchestrator/api/model/ConfidenceCriteria.kt new file mode 100644 index 000000000..dd8b8dac6 --- /dev/null +++ b/bpdm-orchestrator-api/src/main/kotlin/org/eclipse/tractusx/orchestrator/api/model/ConfidenceCriteria.kt @@ -0,0 +1,32 @@ +/******************************************************************************* + * Copyright (c) 2021,2023 Contributors to the Eclipse Foundation + * + * See the NOTICE file(s) distributed with this work for additional + * information regarding copyright ownership. + * + * This program and the accompanying materials are made available under the + * terms of the Apache License, Version 2.0 which is available at + * https://www.apache.org/licenses/LICENSE-2.0. + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + * + * SPDX-License-Identifier: Apache-2.0 + ******************************************************************************/ + +package org.eclipse.tractusx.orchestrator.api.model + +import org.eclipse.tractusx.bpdm.common.dto.IConfidenceCriteriaDto +import java.time.LocalDateTime + +data class ConfidenceCriteria( + override val sharedByOwner: Boolean? = null, + override val checkedByExternalDataSource: Boolean? = null, + override val numberOfBusinessPartners: Int? = null, + override val lastConfidenceCheckAt: LocalDateTime? = null, + override val nextConfidenceCheckAt: LocalDateTime? = null, + override val confidenceLevel: Int? = null +) : IConfidenceCriteriaDto diff --git a/bpdm-orchestrator-api/src/main/kotlin/org/eclipse/tractusx/orchestrator/api/model/LegalEntityDto.kt b/bpdm-orchestrator-api/src/main/kotlin/org/eclipse/tractusx/orchestrator/api/model/LegalEntityDto.kt index 4888d3651..581671db6 100644 --- a/bpdm-orchestrator-api/src/main/kotlin/org/eclipse/tractusx/orchestrator/api/model/LegalEntityDto.kt +++ b/bpdm-orchestrator-api/src/main/kotlin/org/eclipse/tractusx/orchestrator/api/model/LegalEntityDto.kt @@ -44,6 +44,8 @@ data class LegalEntityDto( override val classifications: Collection = emptyList(), - val legalAddress: LogisticAddressDto? = null + val legalAddress: LogisticAddressDto? = null, + + override val confidenceCriteria: ConfidenceCriteria = ConfidenceCriteria() ) : IBaseLegalEntityDto diff --git a/bpdm-orchestrator-api/src/main/kotlin/org/eclipse/tractusx/orchestrator/api/model/LogisticAddressDto.kt b/bpdm-orchestrator-api/src/main/kotlin/org/eclipse/tractusx/orchestrator/api/model/LogisticAddressDto.kt index 2c51b87bd..fd7f3574c 100644 --- a/bpdm-orchestrator-api/src/main/kotlin/org/eclipse/tractusx/orchestrator/api/model/LogisticAddressDto.kt +++ b/bpdm-orchestrator-api/src/main/kotlin/org/eclipse/tractusx/orchestrator/api/model/LogisticAddressDto.kt @@ -40,6 +40,8 @@ data class LogisticAddressDto( override val physicalPostalAddress: PhysicalPostalAddressDto? = null, - override val alternativePostalAddress: AlternativePostalAddressDto? = null + override val alternativePostalAddress: AlternativePostalAddressDto? = null, + + override val confidenceCriteria: ConfidenceCriteria = ConfidenceCriteria() ) : IBaseLogisticAddressDto diff --git a/bpdm-orchestrator-api/src/main/kotlin/org/eclipse/tractusx/orchestrator/api/model/SiteDto.kt b/bpdm-orchestrator-api/src/main/kotlin/org/eclipse/tractusx/orchestrator/api/model/SiteDto.kt index b51608f6a..806f6d089 100644 --- a/bpdm-orchestrator-api/src/main/kotlin/org/eclipse/tractusx/orchestrator/api/model/SiteDto.kt +++ b/bpdm-orchestrator-api/src/main/kotlin/org/eclipse/tractusx/orchestrator/api/model/SiteDto.kt @@ -33,6 +33,8 @@ data class SiteDto( override val name: String? = null, override val states: Collection = emptyList(), - val mainAddress: LogisticAddressDto? = null + val mainAddress: LogisticAddressDto? = null, + + override val confidenceCriteria: ConfidenceCriteria = ConfidenceCriteria() ) : IBaseSiteDto diff --git a/bpdm-orchestrator/src/test/kotlin/org/eclipse/tractusx/bpdm/orchestrator/testdata/BusinessPartnerTestValues.kt b/bpdm-orchestrator/src/test/kotlin/org/eclipse/tractusx/bpdm/orchestrator/testdata/BusinessPartnerTestValues.kt index aa67d1a19..a241fe277 100644 --- a/bpdm-orchestrator/src/test/kotlin/org/eclipse/tractusx/bpdm/orchestrator/testdata/BusinessPartnerTestValues.kt +++ b/bpdm-orchestrator/src/test/kotlin/org/eclipse/tractusx/bpdm/orchestrator/testdata/BusinessPartnerTestValues.kt @@ -277,7 +277,15 @@ object BusinessPartnerTestValues { referenceType = BpnReferenceType.Bpn, referenceValue = "BPNATEST-1" ), - hasChanged = true + hasChanged = true, + confidenceCriteria = ConfidenceCriteria( + sharedByOwner = true, + checkedByExternalDataSource = true, + numberOfBusinessPartners = 7, + lastConfidenceCheckAt = LocalDateTime.of(2022, 4, 3, 2, 1), + nextConfidenceCheckAt = LocalDateTime.of(2026, 4, 3, 2, 1), + confidenceLevel = 1 + ) ) val logisticAddress2 = LogisticAddressDto( @@ -335,7 +343,15 @@ object BusinessPartnerTestValues { referenceType = BpnReferenceType.BpnRequestIdentifier, referenceValue = "BPN_REQUEST_ID_TEST" ), - hasChanged = true + hasChanged = true, + confidenceCriteria = ConfidenceCriteria( + sharedByOwner = false, + checkedByExternalDataSource = false, + numberOfBusinessPartners = 2, + lastConfidenceCheckAt = LocalDateTime.of(2023, 5, 6, 7, 8), + nextConfidenceCheckAt = LocalDateTime.of(2026, 5, 6, 7, 8), + confidenceLevel = 2 + ) ) val legalEntity1 = LegalEntityDto( @@ -385,7 +401,15 @@ object BusinessPartnerTestValues { referenceValue = "BPNL1-TEST", referenceType = BpnReferenceType.Bpn ), - hasChanged = false + hasChanged = false, + confidenceCriteria = ConfidenceCriteria( + sharedByOwner = false, + checkedByExternalDataSource = false, + numberOfBusinessPartners = 2, + lastConfidenceCheckAt = LocalDateTime.of(2023, 5, 6, 7, 8), + nextConfidenceCheckAt = LocalDateTime.of(2026, 5, 6, 7, 8), + confidenceLevel = 3 + ) ) val legalEntity2 = LegalEntityDto( @@ -419,7 +443,15 @@ object BusinessPartnerTestValues { referenceValue = "BPNL-REQUEST_ID_TEST", referenceType = BpnReferenceType.BpnRequestIdentifier ), - hasChanged = false + hasChanged = false, + confidenceCriteria = ConfidenceCriteria( + sharedByOwner = false, + checkedByExternalDataSource = false, + numberOfBusinessPartners = 2, + lastConfidenceCheckAt = LocalDateTime.of(2023, 5, 6, 7, 8), + nextConfidenceCheckAt = LocalDateTime.of(2026, 5, 6, 7, 8), + confidenceLevel = 4 + ) ) val site1 = SiteDto( @@ -443,7 +475,15 @@ object BusinessPartnerTestValues { referenceValue = "BPNS_TEST", referenceType = BpnReferenceType.Bpn ), - hasChanged = false + hasChanged = false, + confidenceCriteria = ConfidenceCriteria( + sharedByOwner = false, + checkedByExternalDataSource = false, + numberOfBusinessPartners = 2, + lastConfidenceCheckAt = LocalDateTime.of(2023, 5, 6, 7, 8), + nextConfidenceCheckAt = LocalDateTime.of(2026, 5, 6, 7, 8), + confidenceLevel = 5 + ) ) val site2 = SiteDto( @@ -461,7 +501,15 @@ object BusinessPartnerTestValues { referenceValue = "BPNS_REQUEST_ID_TEST", referenceType = BpnReferenceType.BpnRequestIdentifier ), - hasChanged = true + hasChanged = true, + confidenceCriteria = ConfidenceCriteria( + sharedByOwner = false, + checkedByExternalDataSource = false, + numberOfBusinessPartners = 2, + lastConfidenceCheckAt = LocalDateTime.of(2023, 5, 6, 7, 8), + nextConfidenceCheckAt = LocalDateTime.of(2026, 5, 6, 7, 8), + confidenceLevel = 6 + ) ) val businessPartner1Full = BusinessPartnerFullDto( diff --git a/bpdm-pool-api/src/main/kotlin/org/eclipse/tractusx/bpdm/pool/api/model/ConfidenceCriteriaDto.kt b/bpdm-pool-api/src/main/kotlin/org/eclipse/tractusx/bpdm/pool/api/model/ConfidenceCriteriaDto.kt new file mode 100644 index 000000000..37c3cb2ec --- /dev/null +++ b/bpdm-pool-api/src/main/kotlin/org/eclipse/tractusx/bpdm/pool/api/model/ConfidenceCriteriaDto.kt @@ -0,0 +1,32 @@ +/******************************************************************************* + * Copyright (c) 2021,2023 Contributors to the Eclipse Foundation + * + * See the NOTICE file(s) distributed with this work for additional + * information regarding copyright ownership. + * + * This program and the accompanying materials are made available under the + * terms of the Apache License, Version 2.0 which is available at + * https://www.apache.org/licenses/LICENSE-2.0. + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + * + * SPDX-License-Identifier: Apache-2.0 + ******************************************************************************/ + +package org.eclipse.tractusx.bpdm.pool.api.model + +import org.eclipse.tractusx.bpdm.common.dto.IConfidenceCriteriaDto +import java.time.LocalDateTime + +data class ConfidenceCriteriaDto( + override val sharedByOwner: Boolean, + override val checkedByExternalDataSource: Boolean, + override val numberOfBusinessPartners: Int, + override val lastConfidenceCheckAt: LocalDateTime, + override val nextConfidenceCheckAt: LocalDateTime, + override val confidenceLevel: Int +) : IConfidenceCriteriaDto diff --git a/bpdm-pool-api/src/main/kotlin/org/eclipse/tractusx/bpdm/pool/api/model/LegalEntityDto.kt b/bpdm-pool-api/src/main/kotlin/org/eclipse/tractusx/bpdm/pool/api/model/LegalEntityDto.kt index d84e1820a..d8fe28959 100644 --- a/bpdm-pool-api/src/main/kotlin/org/eclipse/tractusx/bpdm/pool/api/model/LegalEntityDto.kt +++ b/bpdm-pool-api/src/main/kotlin/org/eclipse/tractusx/bpdm/pool/api/model/LegalEntityDto.kt @@ -33,6 +33,7 @@ data class LegalEntityDto( override val legalForm: String? = null, override val identifiers: Collection = emptyList(), override val states: Collection = emptyList(), - override val classifications: Collection = emptyList() + override val classifications: Collection = emptyList(), + override val confidenceCriteria: ConfidenceCriteriaDto ) : IBaseLegalEntityDto diff --git a/bpdm-pool-api/src/main/kotlin/org/eclipse/tractusx/bpdm/pool/api/model/LegalEntityVerboseDto.kt b/bpdm-pool-api/src/main/kotlin/org/eclipse/tractusx/bpdm/pool/api/model/LegalEntityVerboseDto.kt index 702135afc..9506785ef 100644 --- a/bpdm-pool-api/src/main/kotlin/org/eclipse/tractusx/bpdm/pool/api/model/LegalEntityVerboseDto.kt +++ b/bpdm-pool-api/src/main/kotlin/org/eclipse/tractusx/bpdm/pool/api/model/LegalEntityVerboseDto.kt @@ -53,11 +53,13 @@ data class LegalEntityVerboseDto( @get:Schema(description = LegalEntityDescription.currentness) val currentness: Instant, + override val confidenceCriteria: ConfidenceCriteriaDto, + @get:Schema(description = CommonDescription.createdAt) val createdAt: Instant, @get:Schema(description = CommonDescription.updatedAt) - val updatedAt: Instant + val updatedAt: Instant, ) : IBaseLegalEntityDto { diff --git a/bpdm-pool-api/src/main/kotlin/org/eclipse/tractusx/bpdm/pool/api/model/LogisticAddressDto.kt b/bpdm-pool-api/src/main/kotlin/org/eclipse/tractusx/bpdm/pool/api/model/LogisticAddressDto.kt index 15321145f..069f29bdc 100644 --- a/bpdm-pool-api/src/main/kotlin/org/eclipse/tractusx/bpdm/pool/api/model/LogisticAddressDto.kt +++ b/bpdm-pool-api/src/main/kotlin/org/eclipse/tractusx/bpdm/pool/api/model/LogisticAddressDto.kt @@ -38,6 +38,8 @@ data class LogisticAddressDto( override val physicalPostalAddress: PhysicalPostalAddressDto, - override val alternativePostalAddress: AlternativePostalAddressDto? = null + override val alternativePostalAddress: AlternativePostalAddressDto? = null, + + override val confidenceCriteria: ConfidenceCriteriaDto ) : IBaseLogisticAddressDto diff --git a/bpdm-pool-api/src/main/kotlin/org/eclipse/tractusx/bpdm/pool/api/model/LogisticAddressVerboseDto.kt b/bpdm-pool-api/src/main/kotlin/org/eclipse/tractusx/bpdm/pool/api/model/LogisticAddressVerboseDto.kt index bd5415345..2dd490ef0 100644 --- a/bpdm-pool-api/src/main/kotlin/org/eclipse/tractusx/bpdm/pool/api/model/LogisticAddressVerboseDto.kt +++ b/bpdm-pool-api/src/main/kotlin/org/eclipse/tractusx/bpdm/pool/api/model/LogisticAddressVerboseDto.kt @@ -55,6 +55,8 @@ data class LogisticAddressVerboseDto( val createdAt: Instant, @get:Schema(description = CommonDescription.updatedAt) - val updatedAt: Instant + val updatedAt: Instant, + + override val confidenceCriteria: ConfidenceCriteriaDto ) : IBaseLogisticAddressDto diff --git a/bpdm-pool-api/src/main/kotlin/org/eclipse/tractusx/bpdm/pool/api/model/SiteDto.kt b/bpdm-pool-api/src/main/kotlin/org/eclipse/tractusx/bpdm/pool/api/model/SiteDto.kt index b8a5a40bd..078743c73 100644 --- a/bpdm-pool-api/src/main/kotlin/org/eclipse/tractusx/bpdm/pool/api/model/SiteDto.kt +++ b/bpdm-pool-api/src/main/kotlin/org/eclipse/tractusx/bpdm/pool/api/model/SiteDto.kt @@ -29,6 +29,8 @@ data class SiteDto( override val name: String, override val states: Collection = emptyList(), - val mainAddress: LogisticAddressDto + val mainAddress: LogisticAddressDto, + + override val confidenceCriteria: ConfidenceCriteriaDto ) : IBaseSiteDto diff --git a/bpdm-pool-api/src/main/kotlin/org/eclipse/tractusx/bpdm/pool/api/model/SiteVerboseDto.kt b/bpdm-pool-api/src/main/kotlin/org/eclipse/tractusx/bpdm/pool/api/model/SiteVerboseDto.kt index 3328812e3..73f07c2bc 100644 --- a/bpdm-pool-api/src/main/kotlin/org/eclipse/tractusx/bpdm/pool/api/model/SiteVerboseDto.kt +++ b/bpdm-pool-api/src/main/kotlin/org/eclipse/tractusx/bpdm/pool/api/model/SiteVerboseDto.kt @@ -41,6 +41,8 @@ data class SiteVerboseDto( val createdAt: Instant, @get:Schema(description = CommonDescription.updatedAt) - val updatedAt: Instant + val updatedAt: Instant, + + override val confidenceCriteria: ConfidenceCriteriaDto ) : IBaseSiteDto diff --git a/bpdm-pool/src/main/kotlin/org/eclipse/tractusx/bpdm/pool/entity/ConfidenceCriteria.kt b/bpdm-pool/src/main/kotlin/org/eclipse/tractusx/bpdm/pool/entity/ConfidenceCriteria.kt new file mode 100644 index 000000000..d6863fe02 --- /dev/null +++ b/bpdm-pool/src/main/kotlin/org/eclipse/tractusx/bpdm/pool/entity/ConfidenceCriteria.kt @@ -0,0 +1,41 @@ +/******************************************************************************* + * Copyright (c) 2021,2023 Contributors to the Eclipse Foundation + * + * See the NOTICE file(s) distributed with this work for additional + * information regarding copyright ownership. + * + * This program and the accompanying materials are made available under the + * terms of the Apache License, Version 2.0 which is available at + * https://www.apache.org/licenses/LICENSE-2.0. + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + * + * SPDX-License-Identifier: Apache-2.0 + ******************************************************************************/ + +package org.eclipse.tractusx.bpdm.pool.entity + +import jakarta.persistence.Column +import jakarta.persistence.Embeddable +import java.time.LocalDateTime + + +@Embeddable +data class ConfidenceCriteria( + @Column(name = "shared_by_owner", nullable = false) + val sharedByOwner: Boolean, + @Column(name = "checked_by_external_data_source", nullable = false) + val checkedByExternalDataSource: Boolean, + @Column(name = "number_of_business_partners", nullable = false) + val numberOfBusinessPartners: Int, + @Column(name = "last_confidence_check_at", nullable = false) + val lastConfidenceCheckAt: LocalDateTime, + @Column(name = "next_confidence_check_at", nullable = false) + val nextConfidenceCheckAt: LocalDateTime, + @Column(name = "confidence_level", nullable = false) + val confidenceLevel: Int, +) \ No newline at end of file diff --git a/bpdm-pool/src/main/kotlin/org/eclipse/tractusx/bpdm/pool/entity/LegalEntity.kt b/bpdm-pool/src/main/kotlin/org/eclipse/tractusx/bpdm/pool/entity/LegalEntity.kt index 1766bb583..bfdc21ca5 100644 --- a/bpdm-pool/src/main/kotlin/org/eclipse/tractusx/bpdm/pool/entity/LegalEntity.kt +++ b/bpdm-pool/src/main/kotlin/org/eclipse/tractusx/bpdm/pool/entity/LegalEntity.kt @@ -40,7 +40,10 @@ class LegalEntity( var legalForm: LegalForm?, @Column(name = "currentness", nullable = false) - var currentness: Instant + var currentness: Instant, + + @Embedded + var confidenceCriteria: ConfidenceCriteria ) : BaseEntity() { @OneToMany(mappedBy = "legalEntity", cascade = [CascadeType.ALL], orphanRemoval = true) diff --git a/bpdm-pool/src/main/kotlin/org/eclipse/tractusx/bpdm/pool/entity/LogisticAddress.kt b/bpdm-pool/src/main/kotlin/org/eclipse/tractusx/bpdm/pool/entity/LogisticAddress.kt index f48d0b436..1eb442f94 100644 --- a/bpdm-pool/src/main/kotlin/org/eclipse/tractusx/bpdm/pool/entity/LogisticAddress.kt +++ b/bpdm-pool/src/main/kotlin/org/eclipse/tractusx/bpdm/pool/entity/LogisticAddress.kt @@ -49,7 +49,10 @@ class LogisticAddress( var physicalPostalAddress: PhysicalPostalAddress, @Embedded - var alternativePostalAddress: AlternativePostalAddress? + var alternativePostalAddress: AlternativePostalAddress?, + + @Embedded + var confidenceCriteria: ConfidenceCriteria ) : BaseEntity() { @OneToMany(mappedBy = "address", cascade = [CascadeType.ALL], orphanRemoval = true) diff --git a/bpdm-pool/src/main/kotlin/org/eclipse/tractusx/bpdm/pool/entity/Site.kt b/bpdm-pool/src/main/kotlin/org/eclipse/tractusx/bpdm/pool/entity/Site.kt index 421e5bc1e..934554855 100644 --- a/bpdm-pool/src/main/kotlin/org/eclipse/tractusx/bpdm/pool/entity/Site.kt +++ b/bpdm-pool/src/main/kotlin/org/eclipse/tractusx/bpdm/pool/entity/Site.kt @@ -31,6 +31,9 @@ class Site( @Column(name = "name", nullable = false) var name: String, + @Embedded + var confidenceCriteria: ConfidenceCriteria, + @ManyToOne @JoinColumn(name = "legal_entity_id", nullable = false) var legalEntity: LegalEntity, diff --git a/bpdm-pool/src/main/kotlin/org/eclipse/tractusx/bpdm/pool/service/BusinessPartnerBuildService.kt b/bpdm-pool/src/main/kotlin/org/eclipse/tractusx/bpdm/pool/service/BusinessPartnerBuildService.kt index acb76e828..ec6aab7dc 100644 --- a/bpdm-pool/src/main/kotlin/org/eclipse/tractusx/bpdm/pool/service/BusinessPartnerBuildService.kt +++ b/bpdm-pool/src/main/kotlin/org/eclipse/tractusx/bpdm/pool/service/BusinessPartnerBuildService.kt @@ -344,7 +344,8 @@ class BusinessPartnerBuildService( site = null, physicalPostalAddress = createPhysicalAddress(dto.physicalPostalAddress, metadataMap.regions), alternativePostalAddress = dto.alternativePostalAddress?.let { createAlternativeAddress(it, metadataMap.regions) }, - name = dto.name + name = dto.name, + confidenceCriteria = createConfidenceCriteria(dto.confidenceCriteria) ) updateLogisticAddress(address, dto, metadataMap) @@ -365,6 +366,8 @@ class BusinessPartnerBuildService( clear() addAll(dto.states.map { toAddressState(it, address) }) } + + address.confidenceCriteria = createConfidenceCriteria(dto.confidenceCriteria) } private fun LegalEntityMetadataDto.toMapping() = @@ -470,8 +473,9 @@ class BusinessPartnerBuildService( site.name = name site.states.clear() - site.states.addAll(siteDto.states - .map { toSiteState(it, site) }) + site.states.addAll(siteDto.states.map { toSiteState(it, site) }) + + site.confidenceCriteria = createConfidenceCriteria(siteDto.confidenceCriteria) } fun createSite( @@ -482,7 +486,7 @@ class BusinessPartnerBuildService( val name = siteDto.name ?: throw BpdmValidationException(TaskStepBuildService.CleaningError.SITE_NAME_IS_NULL.message) - val site = Site( bpn = bpnS, name = name, legalEntity = partner) + val site = Site(bpn = bpnS, name = name, legalEntity = partner, confidenceCriteria = createConfidenceCriteria(siteDto.confidenceCriteria)) site.states.addAll(siteDto.states .map { toSiteState(it, site) }) @@ -509,6 +513,7 @@ class BusinessPartnerBuildService( legalName = legalName, legalForm = legalForm, currentness = Instant.now().truncatedTo(ChronoUnit.MICROS), + confidenceCriteria = createConfidenceCriteria(legalEntityDto.confidenceCriteria!!) ) updateLegalEntity(newLegalEntity, legalEntityDto, legalNameValue, metadataMap) @@ -532,8 +537,8 @@ class BusinessPartnerBuildService( legalEntity.identifiers.replace(legalEntityDto.identifiers.map { toLegalEntityIdentifier(it, metadataMap.idTypes, legalEntity) }) legalEntity.states.replace(legalEntityDto.states.map { toLegalEntityState(it, legalEntity) }) - legalEntity.classifications.replace( legalEntityDto.classifications.map { toLegalEntityClassification(it, legalEntity) }.toSet() - ) + legalEntity.classifications.replace(legalEntityDto.classifications.map { toLegalEntityClassification(it, legalEntity) }.toSet()) + legalEntity.confidenceCriteria = createConfidenceCriteria(legalEntityDto.confidenceCriteria!!) } fun createPhysicalAddress(physicalAddress: IBasePhysicalPostalAddressDto, regions: Map): PhysicalPostalAddress { @@ -587,6 +592,16 @@ class BusinessPartnerBuildService( deliveryServiceQualifier = alternativeAddress.deliveryServiceQualifier ) } + + fun createConfidenceCriteria(confidenceCriteria: IConfidenceCriteriaDto) = + ConfidenceCriteria( + sharedByOwner = confidenceCriteria.sharedByOwner!!, + checkedByExternalDataSource = confidenceCriteria.checkedByExternalDataSource!!, + numberOfBusinessPartners = confidenceCriteria.numberOfBusinessPartners!!, + lastConfidenceCheckAt = confidenceCriteria.lastConfidenceCheckAt!!, + nextConfidenceCheckAt = confidenceCriteria.nextConfidenceCheckAt!!, + confidenceLevel = confidenceCriteria.confidenceLevel!! + ) } diff --git a/bpdm-pool/src/main/kotlin/org/eclipse/tractusx/bpdm/pool/service/ResponseMappings.kt b/bpdm-pool/src/main/kotlin/org/eclipse/tractusx/bpdm/pool/service/ResponseMappings.kt index e723f6fdb..c4b968a4a 100644 --- a/bpdm-pool/src/main/kotlin/org/eclipse/tractusx/bpdm/pool/service/ResponseMappings.kt +++ b/bpdm-pool/src/main/kotlin/org/eclipse/tractusx/bpdm/pool/service/ResponseMappings.kt @@ -67,6 +67,7 @@ fun LegalEntity.toDto(): LegalEntityVerboseDto { classifications = classifications.map { it.toDto() }, relations = startNodeRelations.plus(endNodeRelations).map { it.toDto() }, currentness = currentness, + confidenceCriteria = confidenceCriteria.toDto(), createdAt = createdAt, updatedAt = updatedAt, ) @@ -118,7 +119,8 @@ fun LogisticAddress.toDto(): LogisticAddressVerboseDto { states = states.map { it.toDto() }, identifiers = identifiers.map { it.toDto() }, physicalPostalAddress = physicalPostalAddress.toDto(), - alternativePostalAddress = alternativePostalAddress?.toDto() + alternativePostalAddress = alternativePostalAddress?.toDto(), + confidenceCriteria = confidenceCriteria.toDto(), ) } @@ -215,6 +217,7 @@ fun Site.toDto(): SiteVerboseDto { name, states = states.map { it.toDto() }, bpnLegalEntity = legalEntity.bpn, + confidenceCriteria = confidenceCriteria.toDto(), createdAt = createdAt, updatedAt = updatedAt, ) @@ -228,6 +231,7 @@ fun Site.toPoolDto(): SiteWithMainAddressVerboseDto { name, states = states.map { it.toDto() }, bpnLegalEntity = legalEntity.bpn, + confidenceCriteria = confidenceCriteria.toDto(), createdAt = createdAt, updatedAt = updatedAt, ), @@ -265,3 +269,13 @@ fun Region.toRegionDto(): RegionDto { fun Region.toCountrySubdivisionDto(): CountrySubdivisionDto { return CountrySubdivisionDto(countryCode = countryCode, code = regionCode, name = regionName) } + +fun ConfidenceCriteria.toDto(): ConfidenceCriteriaDto = + ConfidenceCriteriaDto( + sharedByOwner, + checkedByExternalDataSource, + numberOfBusinessPartners, + lastConfidenceCheckAt, + nextConfidenceCheckAt, + confidenceLevel + ) diff --git a/bpdm-pool/src/main/kotlin/org/eclipse/tractusx/bpdm/pool/service/TaskStepBuildService.kt b/bpdm-pool/src/main/kotlin/org/eclipse/tractusx/bpdm/pool/service/TaskStepBuildService.kt index fe45599dc..848f027d5 100644 --- a/bpdm-pool/src/main/kotlin/org/eclipse/tractusx/bpdm/pool/service/TaskStepBuildService.kt +++ b/bpdm-pool/src/main/kotlin/org/eclipse/tractusx/bpdm/pool/service/TaskStepBuildService.kt @@ -193,7 +193,8 @@ class TaskStepBuildService( addressMetadataMap.regions ) }, - name = dto.name + name = dto.name, + confidenceCriteria = BusinessPartnerBuildService.createConfidenceCriteria(dto.confidenceCriteria) ) updateAddressIdentifiersAndStates(address, dto, addressMetadataMap.idTypes) @@ -210,6 +211,7 @@ class TaskStepBuildService( address.name = dto.name address.physicalPostalAddress = BusinessPartnerBuildService.createPhysicalAddress(dto.physicalPostalAddress!!, metadataMap.regions) address.alternativePostalAddress = dto.alternativePostalAddress?.let { BusinessPartnerBuildService.createAlternativeAddress(it, metadataMap.regions) } + address.confidenceCriteria = BusinessPartnerBuildService.createConfidenceCriteria(dto.confidenceCriteria) updateAddressIdentifiersAndStates(address, dto, metadataMap.idTypes) } diff --git a/bpdm-pool/src/main/resources/db/migration/V5_0_0_0__add_confidence_criteria.sql b/bpdm-pool/src/main/resources/db/migration/V5_0_0_0__add_confidence_criteria.sql new file mode 100644 index 000000000..4c2cc67b6 --- /dev/null +++ b/bpdm-pool/src/main/resources/db/migration/V5_0_0_0__add_confidence_criteria.sql @@ -0,0 +1,24 @@ +ALTER TABLE legal_entities +ADD COLUMN shared_by_owner boolean NOT NULL, +ADD COLUMN checked_by_external_data_source boolean NOT NULL, +ADD COLUMN number_of_business_partners INT NOT NULL, +ADD COLUMN last_confidence_check_at TIMESTAMP NOT NULL, +ADD COLUMN next_confidence_check_at TIMESTAMP NOT NULL, +ADD COLUMN confidence_level INT NOT NULL; + +ALTER TABLE sites +ADD COLUMN shared_by_owner boolean NOT NULL, +ADD COLUMN checked_by_external_data_source boolean NOT NULL, +ADD COLUMN number_of_business_partners INT NOT NULL, +ADD COLUMN last_confidence_check_at TIMESTAMP NOT NULL, +ADD COLUMN next_confidence_check_at TIMESTAMP NOT NULL, +ADD COLUMN confidence_level INT NOT NULL; + +ALTER TABLE logistic_addresses +ADD COLUMN shared_by_owner boolean NOT NULL, +ADD COLUMN checked_by_external_data_source boolean NOT NULL, +ADD COLUMN number_of_business_partners INT NOT NULL, +ADD COLUMN last_confidence_check_at TIMESTAMP NOT NULL, +ADD COLUMN next_confidence_check_at TIMESTAMP NOT NULL, +ADD COLUMN confidence_level INT NOT NULL; + diff --git a/bpdm-pool/src/test/kotlin/org/eclipse/tractusx/bpdm/pool/controller/SiteControllerIT.kt b/bpdm-pool/src/test/kotlin/org/eclipse/tractusx/bpdm/pool/controller/SiteControllerIT.kt index a51c7d030..dedf0afb3 100644 --- a/bpdm-pool/src/test/kotlin/org/eclipse/tractusx/bpdm/pool/controller/SiteControllerIT.kt +++ b/bpdm-pool/src/test/kotlin/org/eclipse/tractusx/bpdm/pool/controller/SiteControllerIT.kt @@ -24,7 +24,10 @@ import org.eclipse.tractusx.bpdm.common.dto.PageDto import org.eclipse.tractusx.bpdm.common.dto.PaginationRequest import org.eclipse.tractusx.bpdm.pool.Application import org.eclipse.tractusx.bpdm.pool.api.client.PoolClientImpl -import org.eclipse.tractusx.bpdm.pool.api.model.* +import org.eclipse.tractusx.bpdm.pool.api.model.IdentifierBusinessPartnerType +import org.eclipse.tractusx.bpdm.pool.api.model.IdentifierTypeDto +import org.eclipse.tractusx.bpdm.pool.api.model.LogisticAddressVerboseDto +import org.eclipse.tractusx.bpdm.pool.api.model.SiteVerboseDto import org.eclipse.tractusx.bpdm.pool.api.model.request.SiteBpnSearchRequest import org.eclipse.tractusx.bpdm.pool.api.model.response.* import org.eclipse.tractusx.bpdm.pool.util.* @@ -225,7 +228,7 @@ class SiteControllerIT @Autowired constructor( val request1 = with(BusinessPartnerNonVerboseValues.siteCreate1) { copy( index = BusinessPartnerNonVerboseValues.siteCreate1.index, - site = SiteDto( + site = site.copy( name = BusinessPartnerNonVerboseValues.siteCreate1.site.name, states = listOf(BusinessPartnerNonVerboseValues.siteStatus1), mainAddress = BusinessPartnerNonVerboseValues.logisticAddress3.copy( @@ -237,7 +240,7 @@ class SiteControllerIT @Autowired constructor( val request2 = with(BusinessPartnerNonVerboseValues.siteCreate2) { copy( index = BusinessPartnerNonVerboseValues.siteCreate1.index, - site = SiteDto( + site = site.copy( name = BusinessPartnerNonVerboseValues.siteCreate1.site.name, states = listOf(BusinessPartnerNonVerboseValues.siteStatus1), mainAddress = BusinessPartnerNonVerboseValues.logisticAddress2.copy( @@ -296,7 +299,7 @@ class SiteControllerIT @Autowired constructor( val toUpdate1 = with(BusinessPartnerNonVerboseValues.siteUpdate1) { copy( bpns = bpnList[0], - site = SiteDto( + site = site.copy( name = BusinessPartnerNonVerboseValues.siteUpdate1.site.name, states = listOf(BusinessPartnerNonVerboseValues.siteStatus1), mainAddress = BusinessPartnerNonVerboseValues.logisticAddress3.copy( @@ -308,7 +311,7 @@ class SiteControllerIT @Autowired constructor( val toUpdate2 = with(BusinessPartnerNonVerboseValues.siteUpdate2) { copy( bpns = bpnList[1], - site = SiteDto( + site = site.copy( name = BusinessPartnerNonVerboseValues.siteUpdate1.site.name, states = listOf(BusinessPartnerNonVerboseValues.siteStatus1), mainAddress = BusinessPartnerNonVerboseValues.logisticAddress2.copy( diff --git a/bpdm-pool/src/test/kotlin/org/eclipse/tractusx/bpdm/pool/service/TaskStepFetchAndReserveServiceTest.kt b/bpdm-pool/src/test/kotlin/org/eclipse/tractusx/bpdm/pool/service/TaskStepFetchAndReserveServiceTest.kt index 1e4ee9178..51664fa9a 100644 --- a/bpdm-pool/src/test/kotlin/org/eclipse/tractusx/bpdm/pool/service/TaskStepFetchAndReserveServiceTest.kt +++ b/bpdm-pool/src/test/kotlin/org/eclipse/tractusx/bpdm/pool/service/TaskStepFetchAndReserveServiceTest.kt @@ -1059,7 +1059,8 @@ class TaskStepFetchAndReserveServiceTest @Autowired constructor( return LegalEntityDto( bpnLReference = bpnLReference, legalName = "legalName_" + bpnLReference.referenceValue, - legalAddress = minLogisticAddress(bpnAReference = bpnAReference) + legalAddress = minLogisticAddress(bpnAReference = bpnAReference), + confidenceCriteria = fullConfidenceCriteria() ) } @@ -1082,7 +1083,8 @@ class TaskStepFetchAndReserveServiceTest @Autowired constructor( classificationDto(bpnLReference.referenceValue, 1L, ClassificationType.NACE), classificationDto(bpnLReference.referenceValue, 2L, ClassificationType.NAICS) ), - legalAddress = fullLogisticAddressDto(bpnAReference) + legalAddress = fullLogisticAddressDto(bpnAReference), + confidenceCriteria = fullConfidenceCriteria() ) } @@ -1147,7 +1149,8 @@ class TaskStepFetchAndReserveServiceTest @Autowired constructor( return LogisticAddressDto( bpnAReference = bpnAReference, - physicalPostalAddress = minPhysicalPostalAddressDto(bpnAReference) + physicalPostalAddress = minPhysicalPostalAddressDto(bpnAReference), + confidenceCriteria = fullConfidenceCriteria() ) } @@ -1203,7 +1206,8 @@ class TaskStepFetchAndReserveServiceTest @Autowired constructor( deliveryServiceType = DeliveryServiceType.PO_BOX, deliveryServiceQualifier = "deliveryServiceQualifier_" + bpnAReference.referenceValue, deliveryServiceNumber = "deliveryServiceNumber_" + bpnAReference.referenceValue, - ) + ), + confidenceCriteria = fullConfidenceCriteria() ) } @@ -1212,7 +1216,8 @@ class TaskStepFetchAndReserveServiceTest @Autowired constructor( return SiteDto( bpnSReference = bpnSReference, name = "siteName_" + bpnSReference.referenceValue, - mainAddress = minLogisticAddress(bpnAReference = bpnAReference) + mainAddress = minLogisticAddress(bpnAReference = bpnAReference), + confidenceCriteria = fullConfidenceCriteria() ) } @@ -1224,10 +1229,21 @@ class TaskStepFetchAndReserveServiceTest @Autowired constructor( states = listOf( siteState(bpnSReference.referenceValue, 1L, BusinessStateType.ACTIVE), siteState(bpnSReference.referenceValue, 2L, BusinessStateType.INACTIVE) ), - mainAddress = fullLogisticAddressDto(bpnAReference) + mainAddress = fullLogisticAddressDto(bpnAReference), + confidenceCriteria = fullConfidenceCriteria() ) } + fun fullConfidenceCriteria() = + ConfidenceCriteria( + sharedByOwner = true, + numberOfBusinessPartners = 1, + checkedByExternalDataSource = true, + lastConfidenceCheckAt = LocalDateTime.now(), + nextConfidenceCheckAt = LocalDateTime.now().plusDays(1), + confidenceLevel = 10 + ) + fun assertTaskError(step: TaskStepResultEntryDto, taskId: String, error: CleaningError) { assertThat(step.taskId).isEqualTo(taskId) diff --git a/bpdm-pool/src/test/kotlin/org/eclipse/tractusx/bpdm/pool/util/BusinessPartnerNonVerboseValues.kt b/bpdm-pool/src/test/kotlin/org/eclipse/tractusx/bpdm/pool/util/BusinessPartnerNonVerboseValues.kt index 8e7b44112..cb8b5af6e 100644 --- a/bpdm-pool/src/test/kotlin/org/eclipse/tractusx/bpdm/pool/util/BusinessPartnerNonVerboseValues.kt +++ b/bpdm-pool/src/test/kotlin/org/eclipse/tractusx/bpdm/pool/util/BusinessPartnerNonVerboseValues.kt @@ -214,23 +214,30 @@ object BusinessPartnerNonVerboseValues { street = BusinessPartnerVerboseValues.address3.street, ) - private val logisticAddress1 = LogisticAddressDto( - physicalPostalAddress = postalAddress1 + val logisticAddress1 = LogisticAddressDto( + physicalPostalAddress = postalAddress1, + confidenceCriteria = BusinessPartnerVerboseValues.addressPartner1.confidenceCriteria ) val logisticAddress2 = LogisticAddressDto( physicalPostalAddress = postalAddress2, + confidenceCriteria = BusinessPartnerVerboseValues.addressPartner2.confidenceCriteria ) val logisticAddress3 = LogisticAddressDto( physicalPostalAddress = postalAddress3, + confidenceCriteria = BusinessPartnerVerboseValues.addressPartner3.confidenceCriteria ) - private val logisticAddress4 = LogisticAddressDto( - physicalPostalAddress = postalAddress1, name = BusinessPartnerVerboseValues.legalEntityUpsert1.legalEntity.legalName + val logisticAddress4 = LogisticAddressDto( + physicalPostalAddress = postalAddress1, + name = BusinessPartnerVerboseValues.legalEntityUpsert1.legalEntity.legalName, + confidenceCriteria = BusinessPartnerVerboseValues.addressPartner1.confidenceCriteria ) val logisticAddress5 = LogisticAddressDto( - physicalPostalAddress = postalAddress1, identifiers = listOf(addressIdentifier) + physicalPostalAddress = postalAddress1, + identifiers = listOf(addressIdentifier), + confidenceCriteria = BusinessPartnerVerboseValues.addressPartner1.confidenceCriteria ) val legalEntityCreate1 = LegalEntityPartnerCreateRequest( @@ -241,6 +248,7 @@ object BusinessPartnerNonVerboseValues { identifiers = listOf(identifier1), states = listOf(leStatus1), classifications = listOf(classification1, classification2), + confidenceCriteria = BusinessPartnerVerboseValues.legalEntity1.legalEntity.confidenceCriteria ), legalAddress = logisticAddress1, index = BusinessPartnerVerboseValues.legalEntityUpsert1.index @@ -254,6 +262,7 @@ object BusinessPartnerNonVerboseValues { identifiers = listOf(identifier2), states = listOf(leStatus2), classifications = listOf(classification3, classification4), + confidenceCriteria = BusinessPartnerVerboseValues.legalEntity2.legalEntity.confidenceCriteria ), legalAddress = logisticAddress2, index = BusinessPartnerVerboseValues.legalEntityUpsert2.index @@ -267,6 +276,7 @@ object BusinessPartnerNonVerboseValues { identifiers = listOf(identifier3), states = listOf(leStatus3), classifications = listOf(classification5), + confidenceCriteria = BusinessPartnerVerboseValues.legalEntity3.legalEntity.confidenceCriteria ), legalAddress = logisticAddress3, index = BusinessPartnerVerboseValues.legalEntityUpsert3.index @@ -280,6 +290,7 @@ object BusinessPartnerNonVerboseValues { identifiers = listOf(identifier1, identifier2), states = listOf(leStatus1), classifications = listOf(classification1, classification2), + confidenceCriteria = BusinessPartnerVerboseValues.legalEntity1.legalEntity.confidenceCriteria ), legalAddress = logisticAddress1, index = BusinessPartnerVerboseValues.legalEntityUpsertMultipleIdentifier.index @@ -314,7 +325,8 @@ object BusinessPartnerNonVerboseValues { site = SiteDto( name = BusinessPartnerVerboseValues.siteUpsert1.site.name, states = listOf(siteStatus1), - mainAddress = logisticAddress1 + mainAddress = logisticAddress1, + confidenceCriteria = BusinessPartnerVerboseValues.site1.confidenceCriteria ), index = BusinessPartnerVerboseValues.siteUpsert1.index, bpnlParent = legalEntityUpdate1.bpnl @@ -324,7 +336,8 @@ object BusinessPartnerNonVerboseValues { site = SiteDto( name = BusinessPartnerVerboseValues.siteUpsert2.site.name, states = listOf(siteStatus2), - mainAddress = logisticAddress2 + mainAddress = logisticAddress2, + confidenceCriteria = BusinessPartnerVerboseValues.site2.confidenceCriteria ), index = BusinessPartnerVerboseValues.siteUpsert2.index, bpnlParent = legalEntityUpdate2.bpnl @@ -334,7 +347,8 @@ object BusinessPartnerNonVerboseValues { site = SiteDto( name = BusinessPartnerVerboseValues.siteUpsert3.site.name, states = listOf(siteStatus3), - mainAddress = logisticAddress3 + mainAddress = logisticAddress3, + confidenceCriteria = BusinessPartnerVerboseValues.site3.confidenceCriteria ), index = BusinessPartnerVerboseValues.siteUpsert3.index, bpnlParent = legalEntityUpdate3.bpnl diff --git a/bpdm-pool/src/test/kotlin/org/eclipse/tractusx/bpdm/pool/util/BusinessPartnerVerboseValues.kt b/bpdm-pool/src/test/kotlin/org/eclipse/tractusx/bpdm/pool/util/BusinessPartnerVerboseValues.kt index c047bb3fc..f8bd0ad7f 100644 --- a/bpdm-pool/src/test/kotlin/org/eclipse/tractusx/bpdm/pool/util/BusinessPartnerVerboseValues.kt +++ b/bpdm-pool/src/test/kotlin/org/eclipse/tractusx/bpdm/pool/util/BusinessPartnerVerboseValues.kt @@ -97,6 +97,33 @@ object BusinessPartnerVerboseValues { val classification4 = LegalEntityClassificationVerboseDto("Financial and insurance activities", null, classificationType) val classification5 = LegalEntityClassificationVerboseDto("Accounting, bookkeeping and auditing activities; tax consultancy", null, classificationType) + private val confidenceCriteria1 = ConfidenceCriteriaDto( + sharedByOwner = true, + checkedByExternalDataSource = true, + numberOfBusinessPartners = 1, + lastConfidenceCheckAt = LocalDateTime.of(2023, 10, 10, 10, 10, 10), + nextConfidenceCheckAt = LocalDateTime.of(2024, 10, 10, 10, 10, 10), + confidenceLevel = 10 + ) + + private val confidenceCriteria2 = ConfidenceCriteriaDto( + sharedByOwner = false, + checkedByExternalDataSource = false, + numberOfBusinessPartners = 3, + lastConfidenceCheckAt = LocalDateTime.of(2022, 10, 10, 10, 10, 10), + nextConfidenceCheckAt = LocalDateTime.of(2025, 10, 10, 10, 10, 10), + confidenceLevel = 6 + ) + + private val confidenceCriteria3 = ConfidenceCriteriaDto( + sharedByOwner = true, + checkedByExternalDataSource = false, + numberOfBusinessPartners = 10, + lastConfidenceCheckAt = LocalDateTime.of(2021, 10, 10, 10, 10, 10), + nextConfidenceCheckAt = LocalDateTime.of(2026, 10, 10, 10, 10, 10), + confidenceLevel = 3 + ) + val address1 = PhysicalPostalAddressVerboseDto( geographicCoordinates = null, countryVerbose = country1, @@ -153,6 +180,7 @@ object BusinessPartnerVerboseValues { physicalPostalAddress = address1, bpnLegalEntity = null, bpnSite = null, + confidenceCriteria = confidenceCriteria1, createdAt = Instant.now(), updatedAt = Instant.now() ) @@ -162,6 +190,7 @@ object BusinessPartnerVerboseValues { physicalPostalAddress = address2, bpnLegalEntity = null, bpnSite = null, + confidenceCriteria = confidenceCriteria2, createdAt = Instant.now(), updatedAt = Instant.now() ) @@ -171,6 +200,7 @@ object BusinessPartnerVerboseValues { physicalPostalAddress = address3, bpnLegalEntity = null, bpnSite = null, + confidenceCriteria = confidenceCriteria3, createdAt = Instant.now(), updatedAt = Instant.now() ) @@ -195,6 +225,7 @@ object BusinessPartnerVerboseValues { name = "Stammwerk A", states = listOf(siteStatus1), bpnLegalEntity = "BPNL000000000001", + confidenceCriteria = confidenceCriteria1, createdAt = Instant.now(), updatedAt = Instant.now(), ) @@ -204,6 +235,7 @@ object BusinessPartnerVerboseValues { name = "Halle B1", states = listOf(siteStatus2), bpnLegalEntity = "BPNL0000000001YN", + confidenceCriteria = confidenceCriteria2, createdAt = Instant.now(), updatedAt = Instant.now(), ) @@ -213,6 +245,7 @@ object BusinessPartnerVerboseValues { name = "主厂房 C", states = listOf(siteStatus3), bpnLegalEntity = "BPNL0000000002XY", + confidenceCriteria = confidenceCriteria3, createdAt = Instant.now(), updatedAt = Instant.now(), ) @@ -254,6 +287,7 @@ object BusinessPartnerVerboseValues { states = listOf(leStatus1), classifications = listOf(classification1, classification2), currentness = createdTime1.toInstant(ZoneOffset.UTC), + confidenceCriteria = confidenceCriteria1, createdAt = Instant.now(), updatedAt = Instant.now(), ), @@ -277,6 +311,7 @@ object BusinessPartnerVerboseValues { ), bpnLegalEntity = null, bpnSite = null, + confidenceCriteria = confidenceCriteria1, createdAt = Instant.now(), updatedAt = Instant.now() ) @@ -291,6 +326,7 @@ object BusinessPartnerVerboseValues { states = listOf(leStatus2), classifications = listOf(classification3, classification4), currentness = createdTime1.toInstant(ZoneOffset.UTC), + confidenceCriteria = confidenceCriteria2, createdAt = Instant.now(), updatedAt = Instant.now(), ), @@ -314,6 +350,7 @@ object BusinessPartnerVerboseValues { ), bpnLegalEntity = null, bpnSite = null, + confidenceCriteria = confidenceCriteria2, createdAt = Instant.now(), updatedAt = Instant.now() ) @@ -328,6 +365,7 @@ object BusinessPartnerVerboseValues { states = listOf(leStatus3), classifications = listOf(classification5), currentness = createdTime1.toInstant(ZoneOffset.UTC), + confidenceCriteria = confidenceCriteria3, createdAt = Instant.now(), updatedAt = Instant.now(), ), @@ -351,6 +389,7 @@ object BusinessPartnerVerboseValues { ), bpnLegalEntity = null, bpnSite = null, + confidenceCriteria = confidenceCriteria3, createdAt = Instant.now(), updatedAt = Instant.now() ) @@ -365,6 +404,7 @@ object BusinessPartnerVerboseValues { states = listOf(leStatus1), classifications = listOf(classification1, classification2), currentness = createdTime1.toInstant(ZoneOffset.UTC), + confidenceCriteria = confidenceCriteria1, createdAt = Instant.now(), updatedAt = Instant.now() ), @@ -384,6 +424,7 @@ object BusinessPartnerVerboseValues { states = listOf(leStatus2), classifications = listOf(classification3, classification4), currentness = createdTime1.toInstant(ZoneOffset.UTC), + confidenceCriteria = confidenceCriteria2, createdAt = Instant.now(), updatedAt = Instant.now() ), @@ -403,6 +444,7 @@ object BusinessPartnerVerboseValues { states = listOf(leStatus3), classifications = listOf(classification5), currentness = createdTime1.toInstant(ZoneOffset.UTC), + confidenceCriteria = confidenceCriteria3, createdAt = Instant.now(), updatedAt = Instant.now() ), @@ -425,6 +467,7 @@ object BusinessPartnerVerboseValues { states = listOf(leStatus1), classifications = listOf(classification1, classification2), currentness = createdTime1.toInstant(ZoneOffset.UTC), + confidenceCriteria = confidenceCriteria1, createdAt = Instant.now(), updatedAt = Instant.now() ),