From 00d9320b967d0c2b8dfc4a80efd44a0c26d41b4b Mon Sep 17 00:00:00 2001 From: "fabio.d.mota" Date: Tue, 14 May 2024 17:09:56 +0100 Subject: [PATCH] docs(country risk): Update documentation for arc 42 --- docs/Arc42-Documentation.md | 482 ++-- docs/Images/catalog-page.png | Bin 0 -> 74984 bytes .../negotiation_controller_query_catalog.png | Bin 0 -> 9065 bytes .../Images/negotiation_controller_trigger.png | Bin 0 -> 9022 bytes docs/Images/userInfo.png | Bin 0 -> 30898 bytes docs/User-Guide.md | 110 +- docs/api/dashboard_controller.yml | 6 +- docs/api/negotiation_controller.yml | 196 ++ docs/api/sharing_controller.yml | 4 +- .../Country-Risk-EDC.postman_collection | 889 ------- .../EDC.postman_collection.json | 2329 +++++++++++++++++ 11 files changed, 2915 insertions(+), 1101 deletions(-) create mode 100644 docs/Images/catalog-page.png create mode 100644 docs/Images/negotiation_controller_query_catalog.png create mode 100644 docs/Images/negotiation_controller_trigger.png create mode 100644 docs/Images/userInfo.png create mode 100644 docs/api/negotiation_controller.yml delete mode 100644 docs/postman/Country Risk EDC/Country-Risk-EDC.postman_collection create mode 100644 docs/postman/Country Risk EDC/EDC.postman_collection.json diff --git a/docs/Arc42-Documentation.md b/docs/Arc42-Documentation.md index 9d95d589..0fa0ab07 100644 --- a/docs/Arc42-Documentation.md +++ b/docs/Arc42-Documentation.md @@ -46,14 +46,14 @@ Compliance, Legal, Purchasing, Customer Service or other Company functional depa ### Benefit Hypothesis & Problem Statement -The benefit is to get to know your business partner or potential business partners better. Through more information better decisions can be made, like e.g. in a tender situation or from a marketing point of view. +The benefit is to get to know your business partner or potential business partners better. Through more information better decisions can be made, like e.g. in a tender situation or from a marketing point of view -- This Catena-X solution does not only integrate data from various sources but also matches this data with the existent business partners to enable a risk view towards your customer and supplier base. +- This Catena-X solution does not only integrate data from various sources but also matches this data with the existent business partners to enable a risk view towards your customer and supplier base - Reduced effort for target group - Reduction of costs (internal & external) -- Reduction of own interfaces to external data sources, since these are set up and administered by a service provider. +- Reduction of own interfaces to external data sources, since these are set up and administered by a service provider - Company individual country risk assessments (Lists) can be integrated -- A dashboard will keep you up to date at any time. +- A dashboard will keep you up to date at any time ## Requirements Overview ## Quality Goals @@ -217,10 +217,10 @@ There are many factors to consider, but those factors can largely be categorized ##### The globally available Scores in the Application are currently: -CPI Rating 2021 -CPI Rating 2020 -All underlying CPI Scores 2021 -Basel Score 2021 +CPI Rating 2021; +CPI Rating 2020; +All underlying CPI Scores 2021; +Basel Score 2021; Basel Score 2020 They are currently calculated like this: @@ -235,7 +235,7 @@ Self Created Rating 0 - 100 ascending (0 - negative; 100 - positive) Coface -.0.1.2..4.5.6.7.8 *10 / (0 - negative; 100 - positive) -Oecd tbd +Oecd tbd (open?) ##### Possible Data Sources for Country Risk Assessments @@ -295,22 +295,27 @@ sequenceDiagram ### Handling Country Risk -The handling of country risk within our system is managed by the Country Risk Application. +The handling of country risk within our system is managed by the Country Risk Application. -It involves assessing and consuming data from the Country Risk EDC Consumer, which obtains necessary data from the EDC Gate Provider. +It involves assessing and consuming data from the Country Risk EDC Consumer, which obtains necessary data from the EDC Gate Provider. This process ensures that the data related to country risk is accurate and up-to-date. The Country Risk Application doesn't filter the data; instead, it relies on the Gate service to validate user permissions and deliver the correct set of data based on the user's role and access rights. -### Data EDC Handling +### Data EDC Handling -The security of data and ensuring that companies only access the data they are permitted to see is achieved through a robust authentication and authorization flow provided by Keycloak. +The security of data and ensuring that companies only access the data they are permitted to see is achieved through a robust authentication and authorization flow provided by Keycloak. -When a company requests data, the Gate service validates the OAuth2 token provided in the request. +When a company requests data, the Gate service validates the OAuth2 token provided in the request. -This token contains the roles and permissions associated with the client user. By checking the "resource_access" section of the OAuth2 token, the Gate service ensures that a company can only access data for which it has the correct credentials. +This token contains the roles and permissions associated with the client user. By checking the "resource_access" section of the OAuth2 token, the Gate service ensures that a company can only access data for which it has the correct credentials. Additionally, the EDC Discovery Service can be employed to manage service endpoints and their associated access policies, enhancing the control over which data each company can discover and access. +### Catalog Page Data Handling + +For the `Catalog Page` component, it is necessary to obtain negotiation data directly from the EDC (Enterprise Data Catalog). This ensures that the data related to negotiations is consistent and up-to-date across all platforms. Only users with administrator access can initiate the negotiations, ensuring that the data becomes visible throughout the entire dashboard. Users with less privileged roles can also view the negotiation data, but only after an authorized user has activated the negotiations. This ensures that all users have access to the relevant data while maintaining strict control over who can initiate and manage the negotiation process. + + ## Business Context @@ -410,7 +415,7 @@ For each of these APIs we can consult its input and output in the APIs section. For this component, it is necessary to call just one API that gets the Ratings available for the user. -Some Ratings may be available globally by user or by the company they belong to but for more details we will address in the functionalities section. +Some Ratings may be available globally by user or by the company they belong to, but for more details we will address in the functionalities section. ```mermaid classDiagram @@ -527,6 +532,33 @@ classDiagram ``` +#### Data Offers Catalog View + +![userinfo](../docs/Images/userInfo.png) + +![CatalogView](../docs/Images/catalog-page.png) + +For the NegotiationController component, it is necessary to call two different APIs. The APIs used are triggerNegotiation and queryCatalog. With the data obtained from these APIs, the component can initiate negotiations with selected items and retrieve catalog items available for negotiation. The data from the catalog items is used to display negotiation options, while the negotiation response data is used to update the status and other relevant information about ongoing negotiations. Additionally, only users with administrator access can see and use this page, as shown in the image where the "Negotiation" option appears exclusively for users with permission. +```mermaid +classDiagram + class NegotiationController { + <> + } + class TriggerNegotiation { + <> + +API() + } + class QueryCatalog { + <> + +API() + } + + NegotiationController --|> TriggerNegotiation : API + NegotiationController --|> QueryCatalog : API + +``` + + # Interfaces Please Check Swagger Documentation @@ -539,7 +571,7 @@ https://${hostname}:${port}/swagger-ui/index.html#/ ![apiUpload](../docs/Images/reportUpdate.png) -This endpoint is used to update the report. An example in the dashboard is when a user updates a report such as changing the selected rating ranges to change the rating colour ranges, the user can press the save reports button and the new settings will be updated. +This endpoint is used to update the report. An example in the dashboard is, when a user updates a report such as changing the selected rating ranges to change the rating colour ranges, the user can press the save reports button and the new settings will be updated. ![updateReport](../docs/Images/updateReport.png) @@ -558,7 +590,7 @@ Example: ![shareReport](../docs/Images/shareReport.png) -This endpoint is used to share the ratings report. +This endpoint is used to share the ratings report. When a user has already saved their report and would like to share it, the user can share the report with other users from their company who have the required permissions to the Country Risk Dashboard. ![shareReportIcon](../docs/Images/shareReportIcon.png) @@ -574,7 +606,7 @@ In this endpoint, it is automatically inserted the information from the user tha ![saveReports](../docs/Images/image2022-12-5_12-40-53.png) -This endpoint is used to save an reports. It is used in the report component to save multiple selected data (Selected Ratings, Country, Range Values) and be able to use it in a later time. This endpoint receives as input field the Report name, the Type (Global, Company or Custom) of which the report should be saved for. Also it receives the current user information and an object that gathers all the selected data (Selected Ratings, Country, Range Values). Example: +This endpoint is used to save any reports. It is used in the report component to save multiple selected data (Selected Ratings, Country, Range Values) and be able to use it in a later time. This endpoint receives as input field the Report name, the Type (Global, Company or Custom) of which the report should be saved for. Also it receives the current user information and an object that gathers all the selected data (Selected Ratings, Country, Range Values). Example: ![Report](../docs/Images/Reports.png) @@ -592,15 +624,15 @@ This endpoint retrieves a score based on selected ratings, year and current user ![UserRanges](../docs/Images/image2022-10-10_13-34-17.png) -This endpoint is used for retrieving an the current user ranges. The values retrieved are the three types of ranges (Minimum, middle and Maximum), each associated to a type of value. This values are used to populate the ranges component with the last saved ranges that the user inputted. +This endpoint is used for retrieving the current user ranges. The values retrieved are the three types of ranges (Minimum, middle and Maximum), each associated to a type of value. This values are used to populate the ranges component with the last saved ranges that the user inputted. ![RangesExample](../docs/Images/ranges_example.png) ![template](../docs/Images/getUsersFromCompany.png) -This endpoint allows the retrieval of users from the user's company. -The company is automatically extracted from the authentication token, thus avoiding filters. +This endpoint allows the retrieval of users from the user's company. +The company is automatically extracted from the authentication token, thus avoiding filters. It is used when a report is to be shared for example. ![companyUsersResponse.png](../docs/Images/companyUsersResponse.png) @@ -608,7 +640,7 @@ It is used when a report is to be shared for example. ![template](../docs/Images/image2022-10-10_13-36-1.png) -This endpoint is used for retrieving an CSV file that the user can edit and use it for uploading data. +This endpoint is used for retrieving an CSV file, that the user can edit and use it for uploading data. ![Tableinfo](../docs/Images/image2022-10-10_13-43-5.png) @@ -625,7 +657,7 @@ This endpoint is used to retrieve reports. This endpoint receives as input field ![companyuserinfo](../docs/Images/image2022-12-5_13-31-59.png) -This endpoint is used to retrieve reports. It is used in the report component to to populate the table. This endpoint only receives as input field the current user information. +This endpoint is used to retrieve reports. It is used in the report component to populate the table. This endpoint only receives as input field the current user information. ![exampleuserinfo](../docs/Images/image2022-12-5_13-31-59.png) This endpoint is used to retrieve all the Reports that a user can choose from. @@ -650,7 +682,7 @@ This endpoint retrieves all the countries that are associated to the Business pa ![getBpdmGates](../docs/Images/image2022-12-5_13-32-54.png) -This endpoint returns information from the BPDM Gate to show the User specific Business Partners +This endpoint returns information from the BPDM Gate to show the User specific Business Partners. ![getyears](../docs/Images/image2022-10-10_13-44-13.png) @@ -659,25 +691,23 @@ This endpoint retrieves all the years that are currently saved on the database. ![deleteReport](../docs/Images/image2022-12-30_11-37-34.png) -This endpoint is used to delete an report created by the user. It is used in the report table in the Front-End application. It needs the id related to the report selected and also the user information to proceed with the delete request. +This endpoint is used to delete a report created by the user. It is used in the report table in the Front-End application. It needs the id related to the report selected and also the user information to proceed with the delete request. ![deleteRating](../docs/Images/image2022-12-30_11-50-52.png) -This endpoint is used to delete an rating created by the user. It is used in the report table in the Front-End application. It needs the id related to the rating selected and also the user information to proceed with the delete request. +This endpoint is used to delete a rating created by the user. It is used in the report table in the Front-End application. It needs the id related to the rating selected and also the user information to proceed with the delete request. ## Sharing Controller ![scoreforEachBpn](../docs/Images/scoreforEachBpn.png) -In this endpoint the User can request a Mapping of Business Partners to a specific Rating. As parameters it is needed an Rating and BPNs array and also the company of he user. +In this endpoint the User can request a Mapping of Business Partners to a specific Rating. As parameters it is needed an Rating and BPNs array and also the company of the user. ![examplequery](../docs/Images/image2022-12-5_14-14-19.png) In this picture, we can see how both the Ratings and BPNs are composed. The Ratings array can contain multiple objects that have the dataSourceName and the - following year. Regarding the BPNs array, it can also contain multiple objects, and each of them have the BPN name and a country of which can be given a value - or no value. If the BPN has no country value, the backend will map it according to the BPN. ![exampleForEachBpn](../docs/Images/exampleForEachBpn.png) @@ -690,6 +720,37 @@ In this endpoint it is possible for the user to request Information about which ![exampleratingsforcompany](../docs/Images/image2022-12-5_14-8-29.png) +## Negotiation Controller +![negotiation_query_catalog](../docs/Images/negotiation_controller_query_catalog.png) + +This endpoint is intended to negotiate and receive the available catalog with the data offers that the EDC allows to negotiate. They will then be forwarded and appear on the frontend. + +``` +{ + "id": "1", + "offerId": "offer123", + "provider": "Provider A", + "subject": "cx-taxo:ReadAccessPoolForCatenaXMember", + "description": "Grants the Catena-X Member read access to the Pool API...", + "usagePurpose": "cx.bpdm.pool:1" +} +``` + +![negotiation_query_trigger](../docs/Images/negotiation_controller_trigger.png) + +This endpoint should receive based on the data offers selected in the previous endpoint and initiate negotiation with EDC so that all information becomes available. + +``` +[ + { + "id": "1", + "offerId": "offer123", + "usagePurpose": "cx.bpdm.pool:1" + } +] +``` + + ## How to configure the Gate Connection ### Setting up Company Cluster @@ -698,19 +759,19 @@ The first step to connect the Dashboard to a company specific "Gate" is setting ![addcompanygroup](../docs/Configuration-of-Gates/configofgates03.png) -we create a company group for the Case that a sharing Company has multiple "Gates" to which can be connected. +We create a company group for the Case, that a sharing Company has multiple "Gates" to which can be connected. ### Setting up Company -To be able to connect to a company specific Gate first the Company has to be inserted into the t_company table and connected to a company group: +To be able to connect to a company specific Gate, first the Company has to be inserted into the t_company table and connected to a company group: ![addcompany](../docs/Configuration-of-Gates/configofgates02.png) -- company_name: Insert the Name of the requesting Company +- company_name: Insert the Name of the requesting company - company_group_id: Set a numeric value counting up from the beginning 1 per company -After the company has been added to the Table the next step is to set a "Gate" for this company. +After the company has been added to the Table, the next step is to set a "Gate" for this company. ### Setting up CompanyGate connection @@ -837,21 +898,23 @@ Entities: 2. DataSource and DataSourceValue: Dynamic tables that allow saving the source such as CPI Rating and its values ​​for each country such as GERMANY , DE , 86. 3. Range: Table that keeps the ranges submitted by each user, so that each visit to the page can visualize the data with the ranges that he customized. There are 3 ranges green, yellow and red which are identified by max, between and min. 4. File: Table that stores the template that the user can obtain and then stores any uploads that the user makes regarding their rating. -5. Country: Table that saves all the countries. This table is important to distinguish any bad input that the user can put, because only the countries placed here can be validated with rating. -6. Region: Table that stores each region defined by the user, this can be customized or globalized as is the case of having the countries of the European Union within the EU Region. -7. Report and ReportValue: Dynamic Table that, like the DataSource, allows each Report to have multiple objects added to it, in this case we can define the selected country, the ranges, the ratings and if new features are implemented, they can be added to new reports without the need to change. -8. Type: Enums table that allows you to filter the 3 tables ( DataSource , Region and Reports) that may or may not have globally available data, only for the elements of the Company or for the User who uploaded them. +5. Country: Table that saves all the countries. This table is important to distinguish any bad input that the user can put, because only the countries placed here can be validated with ratings. +6. Region: Table that stores each region defined by the user. This can be customized or globalized as is the case of having the countries of the European Union within the EU Region. +7. Report and ReportValue: Dynamic Table that, like the DataSource, allows each Report to have multiple objects added to it. In this case we can define the selected country, the ranges, the ratings and if new features are implemented, they can be added to new reports without the need to change. +8. Type: Enums table that allows you to filter the 3 tables (DataSource , Region and Reports) that may or may not have globally available data, only for the elements of the Company or for the User who uploaded them. # Development Process We have two repositories in the TractusX Github Environment with the Eclipse Foundation. + Frontend: https://github.com/eclipse-tractusx/vas-country-risk-frontend + Backend: https://github.com/eclipse-tractusx/vas-country-risk-backend To maintain those 2 Github locations we mainly develop in the CatenaX-ng Github. Only for main Changes we push a request to a commiter with the Eclipse Foundation Github. -To contribute to the development please follow these Branching guidelines in the CatenaX-ng environment. +To contribute to the development, please follow these Branching guidelines in the CatenaX-ng environment. ```mermaid flowchart LR @@ -969,7 +1032,7 @@ sequenceDiagram This Get Dashboard World endpoint is the entry point for populating the World Map. It receives parameters that allow knowing which data to filter. -These are: The user, the year and the Ratings chosen. +These are: The user, the year and the ratings chosen. The first important method Get World Map Info is divided into three steps. @@ -1050,7 +1113,7 @@ This endpoint, as mentioned above, receives the selected year and returns the av Here we have an important step that calls two methods. -On findRatingsByYearAndCompanyUser we need to call two methods, findRatingsByYearAndTypeGlobal which returns all global ratings that are for all users based on year and findRatingByYearAndUser all ratings that this user has available to him filtered by year here can be uniquely loaded by you in the api of Upload. +On findRatingsByYearAndCompanyUser we need to call two methods, findRatingsByYearAndTypeGlobal which returns all global ratings that are for all users based on year and findRatingByYearAndUser all ratings that this user has available to him filtered by year here can be uniquely loaded by you in the API of Upload. #### Endpoint: /dashboard/getTemplate @@ -1064,7 +1127,7 @@ sequenceDiagram DashBoardResource-->>-ActorUser: Return Template ``` -This method just implements the download of a template so that users can fill and upload their own ratings. +This method just implements the download of a template, so that users can fill and upload their own ratings. #### Endpoint: /dashboard/uploadCsv @@ -1137,7 +1200,7 @@ sequenceDiagram This endpoint is simple, it only validates if the user already has saved ranges or uses default values, these ranges are used to define the range of each color in the UI, which then defines how each country will be painted based on its score. -Get User Ranges Or Default is the method that validates if they exist if not, by default, it returns their default values. +Get User Ranges Or Default is the method that validates if they exist. If not, by default, it returns their default values. Min → 0-25 that represents red color @@ -1209,9 +1272,9 @@ sequenceDiagram This endpoint retrieves all the Business partners associated to a company. In the DashboardResource we invoke the getExternalBusinessPartners method, in which we send through an CompanyUser (1.1). -Inside the DashboardService class we return the result from the method getExternalBusinessPartners (1.1.1) returns Business Partners associated to a Company User. +Inside the DashboardService class, we return the result from the method getExternalBusinessPartners (1.1.1) returns Business Partners associated to a Company User. -In the end, after the data is retrieved, this data is returned as a List of BussinessPartners objects to the main class DashBoardResource in the method getCompanyBpns. +In the end, after the data is retrieved, this data is returned as a List of BusinessPartners objects to the main class DashBoardResource in the method getCompanyBpns. #### Endpoint: /dashboard/getBpnCountrys @@ -1247,7 +1310,7 @@ sequenceDiagram ``` -This endpoint retrieves all the countries that are associated to the Business partners. In the DashboardResource we invoke the getCountryByAssociatedBPtoUser (1.1) method, in which we send through an CompanyUser. +This endpoint retrieves all the countries that are associated to the Business partners. In the DashboardResource, we invoke the getCountryByAssociatedBPtoUser (1.1) method, in which we send through an CompanyUser. In the DashboardService class, we invoke the method getAssociatedCountries (1.1.1), in which there are two methods: getExternalPartnersCountry (1.1.1.1) and the findByCountryIn (1.1.1.2). @@ -1396,9 +1459,9 @@ The method 1.1.1 getOrCreate will receive the parameter CompanyUser, and will do After that, on the 1.1.2 saveReport, both the companyUserDTO recently created or already present on the database and the ReportDTO will be used as variable on that method. -Firstly an verification is done to check if the ReportDTO has an id associated to him. This will only be he case in the Update endpoint, so this verification will not be true. After this, it is associated to the ReportDTO the companyUserDTO company name and name, and after this the ReportDTO is saved (1.1.2.1.6.1). +Firstly a verification is done to check if the ReportDTO has an id associated to him. This will only be the case in the Update endpoint, so this verification will not be true. After this, it is associated to the ReportDTO the companyUserDTO company name and name, and after this the ReportDTO is saved (1.1.2.1.6.1). -After this an verification is done onto the recently saved ReportDTO, to check if the ReportValuesDTO inside of this object is not empty or null. If this is false, an for each clause will occur and save each reportValues associated to the recently created Report. +After this verification is done onto the recently saved ReportDTO, to check if the ReportValuesDTO inside of this object is not empty or null. If this is false, an for each clause will occur and save each reportValues associated to the recently created Report. After this an Http OK alert is shown. @@ -1455,9 +1518,9 @@ The method 1.1.1 findByNameEmailAndCompany will receive the name, email and comp After that, on the 1.1.2 saveReport, both the companyUserDTO recently created or already present on the database and the ReportDTO will be used as variable on that method. -Firstly an verification is done to check if the ReportDTO has an id associated to him. This will only be he case in the Update endpoint, so this verification will not be true. After this, it is associated to the ReportDTO the companyUserDTO company name and name, and after this the ReportDTO is saved (1.1.2.1.6.1). +Firstly a verification is done to check if the ReportDTO has an id associated to him. This will only be he case in the Update endpoint, so this verification will not be true. After this, it is associated to the ReportDTO the companyUserDTO company name and name, and after this the ReportDTO is saved (1.1.2.1.6.1). -After this an verification is done onto the recently saved ReportDTO, to check if the ReportValuesDTO inside of this object is not empty or null. If this is false, an for each clause will occur and save each reportValues associated to the recently created Report. +After this verification is done onto the recently saved ReportDTO, to check if the ReportValuesDTO inside of this object is not empty or null. If this is false, an for each clause will occur and save each reportValues associated to the recently created Report. After this an Http OK alert is shown. @@ -1520,7 +1583,7 @@ The method 1.1.1 getOrCreate will receive the parameter CompanyUser, and will do After that, on the 1.1.2 saveReport, both the companyUserDTO recently created or already present on the database and the ReportDTO will be used as variable on that method. -Firstly an verification is done to check if the ReportDTO has an id associated to him. This will only be he case in the Update endpoint, so this verification will true in this case. After this, the updateReport method (1.1.2.1) will be opened and in there the method 1.1.2.1.1 findOne will try to find an ReportDTO with respective id. If it is not found, an http not found error will show up. +Firstly a verification is done to check if the ReportDTO has an id associated to him. This will only be he case in the Update endpoint, so this verification will true in this case. After this, the updateReport method (1.1.2.1) will be opened and in there the method 1.1.2.1.1 findOne will try to find an ReportDTO with respective id. If it is not found, an http not found error will show up. Else if this does not occur, an validation is done with the method 1.1.2.1.3 validatePermissionToChangeReport, which will do an cross check between the CompanyUser and the found ReportDTO. If this check is false, an http unauthorized error is shown, else the code continues. @@ -1613,106 +1676,6 @@ The method 1.1.1 getGatesForCompanyUser, it firstly done the method getCompanyBy After this, an List of CompanyGatesDTOS is returned in the main class (DashBoardResouce). -#### Endpoint: /sharing/getAllRatingsForCompany - -```mermaid -sequenceDiagram - participant ActorUser - participant DashBoardResource - participant DashboardService - participant DataSourceLogicService - participant DataSourceService - participant DataSourceRepository - participant EntityMapper - - ActorUser->>+DashBoardResource: 1: getAllRatingsForCompany(CompanyUser, Year) - DashBoardResource->>+DashboardService: 1.1: findRatingsByYearAndCompanyUserCompany(CompanyUser, Year) - DashboardService->>+DataSourceLogicService: 1.1.1: findRatingsByYearAndTypeGlobal(Year) - DataSourceLogicService->>+DataSourceService: 1.1.1.1: findRatingsByYearPublishedAndType(Year, 'Global') - DataSourceService->>+DataSourceRepository: 1.1.1.1.1: findByYearPublishedAndType(Year, 'Global') - DataSourceRepository-->>-DataSourceService: List - DataSourceService->>+EntityMapper: 1.1.1.1.2: toDto(List) - EntityMapper-->>-DataSourceService: List - DataSourceService-->>-DataSourceLogicService: List - DataSourceLogicService->>+DataSourceService: 1.1.1.2: findByYearPublishedAndCompanyUserCompanyNameAndType(Year, CompanyUser.companyName, 'Company') - DataSourceService->>+DataSourceRepository: 1.1.1.2.1: findByYearPublishedAndCompanyUserCompanyNameAndType(Year, CompanyUser.companyName, 'Company') - DataSourceRepository-->>-DataSourceService: List - DataSourceService->>+EntityMapper: 1.1.1.2.2: toDto(List) - EntityMapper-->>-DataSourceService: List - DataSourceService-->>-DataSourceLogicService: List - DataSourceLogicService-->>-DashboardService: Combined List - DashboardService-->>-DashBoardResource: Combined List - DashBoardResource-->>-ActorUser: Display DataSources - -``` - -In this endpoint, it is received as a parameter the CompanyUser and a Integer Year. It is used to return an list of DataSourceDTO related to the CompanyUser and inserted year. - -The method 1.1.1.1 findRatingsByYearAndTypeGlobal will return a list of DataSourceDTO based on the selected year, and only return these DTOs with Type Global. - -After that, the method 1.1.1.2 findByYearPublishedAndCompanyUserCompanyNameAndType will return also an List of DatasoureDTO based on the year, companyUser and the Type Company. - -After this, both lists are join onto one and returned in the main class as an List of DataSourceDTO. - - -#### Endpoint: /sharing/getAllRatingsScoresForEachBpn - -```mermaid -sequenceDiagram - participant ActorUser - participant DashBoardResource - participant DashboardService - participant ShareLogicService - participant ExternalBusinessPartnersLogicService - participant DataSourceValueService - participant DataSourceValueRepository - participant ShareDTO - participant ShareRatingDTO - - ActorUser->>+DashBoardResource: 1: getAllRatingsScoresForEachBpn(CompanyUser, dataSource, businessPartner) - DashBoardResource->>+DashboardService: 1.1: findRatingsScoresForEachBpn(CompanyUser, dataSource, businessPartner) - DashboardService->>+ShareLogicService: 1.1.1: findRatingsScoresForEachBpn - ShareLogicService->>+ExternalBusinessPartnersLogicService: 1.1.1.1: getExternalBusinessPartners - ExternalBusinessPartnersLogicService-->>-ShareLogicService: List - - loop For each BusinessPartner - ShareLogicService->>ShareLogicService: Add country to BusinessPartnerDTO - end - - ShareLogicService->>ShareLogicService: 1.1.1.3: Create List of Countries from BusinessPartnerDTO - ShareLogicService->>ShareLogicService: 1.1.1.4: Create List of Data Source Names from DataSourceDTO - - loop For each DataSource - ShareLogicService->>+DataSourceValueService: 1.1.1.3.1: findRatingAndCountryAndScoreGreaterThanAndYear - DataSourceValueService->>+DataSourceValueRepository: 1.1.1.3.1.1: findByRatingAndCountryAndScoreGreaterThanAndYear - DataSourceValueRepository-->>-DataSourceValueService: List - DataSourceValueService-->>-ShareLogicService: List - end - - loop For each ShareDTO - ShareLogicService->>ShareLogicService: 1.1.1.5: Map DataDTO to ShareDTO - end - - ShareLogicService-->>-DashboardService: List - DashboardService-->>-DashBoardResource: List - DashBoardResource-->>-ActorUser: Display ShareDTOs - -``` - -In this endpoint, it is received as a parameter the CompanyUser an dataSource object and a businessPartner object. It is used to return an list of ShareDTO(Mapped ratings to the business partners) related to the parameters inserted. - -Inside the method 1.1.1 findRatingsScoresForEachBpn, the method 1.1.1.1 will add BusinessPartnerDTO into List of BusinessPartnerDTO. - -After this, an for each clause is done into the received list of businessPartner and other clause into the recently created list. This will set the country into the list of the businessPartners received into the parameter. - -After this, an List of String is created that will store all countries related to the BusinessPartnerDTO (1.1.1.3) and is populated according to the BusinessPartnetDTO countries. - -Then, an List of String that will get the name of the Data Sources will also be populated according the DataSourceDTO. - -With this, the DataSource parameter will be iterated with the for each clause, and an List of DataDTO will be filled according with the method 1.1.1.3.1.1, using as parameter both DataSource names and countries String list. - -Finally, the mapping will be done for each ShareDTO, that then will return inside of an List. - #### Endpoint: /dashboard/deleteReport/{id} @@ -1773,11 +1736,11 @@ Firstly in the method 1.1.1.1 it is used the report id to request the Report ass If that is not the case, an verification is done using the 1.1.1.3 validatePermissionToChangeReport method, which is where an verification is done to see if the found report values (CompanyName, Name) are the same as the CompanyUser, and also if the CompanyUser is an Admin, which only the Admin can delete an report in this case. -If the CompanyUser in not an Admin, and Http Unauthorized is presented. +If the CompanyUser in not an Admin, an Http Unauthorized is presented. If all verifications are met, then the 1.1.1.4 method findByReport will return an list of ReportValuesDTO related to the reportDTO found earlier, which then that list is iterated in an for each clause whit the 1.1.1.5.1 delete method, that received in each run the reportValuesDTO id and then in the 1.1.1.6 fully delte the ReportDTO using its id. -After this, in the main class DashBoardResource, and Http no content is presented as an successful request. +After this, in the main class DashBoardResource, an Http no content is presented as an successful request. #### Endpoint: /dashboard/deleteRating/{id} @@ -1837,15 +1800,15 @@ sequenceDiagram This endpoint receives and CompanyUser and also an Long variable which is the id. It is used to delete an Rating. -Firstly in the method 1.1.1.1 it is used the rating id to request the Rating associated to that id. If this is not found, and Http Not Found error is presented. +Firstly in the method 1.1.1.1 it is used the rating id to request the Rating associated to that id. If this is not found, an Http Not Found error is presented. If that is not the case, an verification is done to see if the found rating values (CompanyName, Name, Email) are the same as the CompanyUser, and also if the CompanyUser is an Admin, which only the Admin can delete an rating in this case. -If the CompanyUser in not an Admin, and Http Unauthorized is presented. +If the CompanyUser in not an Admin, an Http Unauthorized is presented. If all verifications are met, then the 1.1.1.3 method findByDataSource will return an list of DataSourceValuesDTO related to the dataSourceDTO found earlier, which then that list is iterated in an for each clause whit the 1.1.1.4.1 delete method, that received in each run the DataSourceValueDTO id, and then in the 1.1.1.5 fully delte the DataSourceDTO using its id. -After this, in the main class DashBoardResource, and Http no content is presented as an successful request. +After this, in the main class DashBoardResource, an Http no content is presented as an successful request. #### Endpoint: /dashboard/getUserFromCompany @@ -1879,6 +1842,213 @@ This endpoint receives as an parameter an CompanyUser. It is used to retrieve an In the method 1.1.1.1 findAllUserFromCompany, it simply uses the CompanyUser object, gets his company name and does a request to retrieve an List of CompanyUserDTO, which is then returned in the main class DashBoardResouce. +#### Endpoint: /negotiation/triggerNegotiation + +```merdmaid + +sequenceDiagram + participant ActorUser + participant NegotiationController + participant NegotiationServiceLogic + participant EdcLogicService + participant InvokeService + participant EDCGateway + participant Cache + + ActorUser->>+NegotiationController: 1: triggerNegotiation(List) + NegotiationController->>+NegotiationServiceLogic: 1.1: triggerNegotiation(List) + NegotiationServiceLogic->>+EdcLogicService: 1.1.1: executeSequentialNegotiationRequests(NegotiationRequestDTO) + EdcLogicService->>+InvokeService: 1.1.1.1: sendNegotiationInitiateRequest(NegotiationRequestDTO) + InvokeService->>+EDCGateway: 1.1.1.1.1: POST /v2/edrs + EDCGateway-->>-InvokeService: 1.1.1.1.2: negotiationId + InvokeService-->>-EdcLogicService: 1.1.1.1.3: negotiationId + EdcLogicService->>+InvokeService: 1.1.1.2: executeGetRequestForNegotiationDetails(String negotiationId) + InvokeService->>+EDCGateway: 1.1.1.2.1: GET /v2/contractnegotiations/{negotiationId} + EDCGateway-->>-InvokeService: 1.1.1.2.2: contractAgreementId + InvokeService-->>-EdcLogicService: 1.1.1.2.3: contractAgreementId + EdcLogicService->>+InvokeService: 1.1.1.3: executeTransferProcessRequestWithAgreementId(String contractAgreementId) + InvokeService->>+EDCGateway: 1.1.1.3.1: POST /v2/edrs/request + EDCGateway-->>-InvokeService: 1.1.1.3.2: transferProcessId + InvokeService-->>-EdcLogicService: 1.1.1.3.3: transferProcessId + EdcLogicService->>+InvokeService: 1.1.1.4: getAuthCodeAndEndpoint(String transferProcessId) + InvokeService->>+EDCGateway: 1.1.1.4.1: GET /v2/edrs/{transferProcessId}/dataaddress?auto_refresh=true + EDCGateway-->>-InvokeService: 1.1.1.4.2: EDRResponseDTO + InvokeService-->>-EdcLogicService: 1.1.1.4.3: EDRResponseDTO + EdcLogicService-->>-NegotiationServiceLogic: 1.1.1.5: NegotiationResponseDTO + NegotiationServiceLogic->>+Cache: 1.1.2: cache the negotiation result + Cache-->>-NegotiationServiceLogic: 1.1.3: cached result + NegotiationServiceLogic-->>-NegotiationController: 1.2: List + NegotiationController-->>-ActorUser: 1.3: List + +``` + +In this endpoint, a list of `NegotiationRequestDTO` objects is received as a parameter. This is used to initiate the negotiation process for the selected items and return a list of `NegotiationResponseDTO` objects. + +The `triggerNegotiation` method involves the following steps: + +1. The `NegotiationController` receives the request from the user. +2. The request is forwarded to the `NegotiationServiceLogic` service. +3. For each `NegotiationRequestDTO`, the `EdcLogicService` initiates a sequence of negotiation requests: + - Sends a POST request to the EDC Gateway to initiate the negotiation. + - Retrieves the negotiation details using a GET request. + - Sends a POST request with the agreement ID to request a transfer process. + - Retrieves the authentication code and endpoint using a GET request. +4. The results of these negotiation steps are combined into a `NegotiationResponseDTO`. +5. The results are cached for future requests. +6. The combined list of `NegotiationResponseDTO` objects is returned to the `NegotiationController`. +7. The `NegotiationController` sends the response back to the user. + +Only users with the necessary permissions can trigger the negotiations. Once the negotiations are activated, the data becomes visible to all users with lower privilege levels on the dashboard. + + +#### Endpoint: /negotiation/queryCatalog + +```mermaid +sequenceDiagram + participant User + participant NegotiationController + participant EdcLogicService + participant EdcGateway + + User->>+NegotiationController: 1: queryCatalog() + NegotiationController->>+EdcLogicService: 1.1: queryCatalog() + + EdcLogicService->>+EdcGateway: 1.1.1: sendCatalogRequest(httpEntity) + EdcGateway-->>-EdcLogicService: 1.1.2: catalogResponse + + EdcLogicService->>EdcLogicService: 1.1.3: mapResponseFromQueryCatalog(catalogResponse) + EdcLogicService-->>-NegotiationController: 1.2: List + + NegotiationController-->>-User: Display catalog items + +``` +#### Endpoint: /negotiation/queryCatalog + +In this endpoint, the `queryCatalog` method is called to retrieve catalog items available for negotiation. The method returns a list of `CatalogItemDTO` objects. + +The `queryCatalog` method involves the following steps: + +1. The `NegotiationController` receives the request from the user and calls the `queryCatalog` method in the `EdcLogicService`. +2. The `EdcLogicService` constructs the request body and headers, then sends a POST request to the EDC Gateway. +3. The EDC Gateway processes the request and returns the catalog response. +4. The `EdcLogicService` maps the response to a list of `CatalogItemDTO` objects. +5. The `NegotiationController` sends the list of `CatalogItemDTO` objects back to the user. + +The request and response flow is detailed below: + +- **Request Headers**: HTTP headers are created and included in the request. +- **Request Body**: The request body is constructed with the necessary context, type, counter party address, counter party ID, protocol, and query specifications. +- **POST Request**: A POST request is sent to the EDC Gateway to request the catalog. +- **Response Mapping**: The response from the EDC Gateway is mapped to a list of `CatalogItemDTO` objects using the `mapResponseFromQueryCatalog` method. + +The `queryCatalog` endpoint handles the following scenarios: + +- **200 OK**: Successfully retrieved catalog items. +- **401 Unauthorized**: Authentication is required. +- **500 Internal Server Error**: An internal server error occurred. + + +#### Endpoint: /sharing/getAllRatingsForCompany + +```mermaid +sequenceDiagram + participant ActorUser + participant DashBoardResource + participant DashboardService + participant DataSourceLogicService + participant DataSourceService + participant DataSourceRepository + participant EntityMapper + + ActorUser->>+DashBoardResource: 1: getAllRatingsForCompany(CompanyUser, Year) + DashBoardResource->>+DashboardService: 1.1: findRatingsByYearAndCompanyUserCompany(CompanyUser, Year) + DashboardService->>+DataSourceLogicService: 1.1.1: findRatingsByYearAndTypeGlobal(Year) + DataSourceLogicService->>+DataSourceService: 1.1.1.1: findRatingsByYearPublishedAndType(Year, 'Global') + DataSourceService->>+DataSourceRepository: 1.1.1.1.1: findByYearPublishedAndType(Year, 'Global') + DataSourceRepository-->>-DataSourceService: List + DataSourceService->>+EntityMapper: 1.1.1.1.2: toDto(List) + EntityMapper-->>-DataSourceService: List + DataSourceService-->>-DataSourceLogicService: List + DataSourceLogicService->>+DataSourceService: 1.1.1.2: findByYearPublishedAndCompanyUserCompanyNameAndType(Year, CompanyUser.companyName, 'Company') + DataSourceService->>+DataSourceRepository: 1.1.1.2.1: findByYearPublishedAndCompanyUserCompanyNameAndType(Year, CompanyUser.companyName, 'Company') + DataSourceRepository-->>-DataSourceService: List + DataSourceService->>+EntityMapper: 1.1.1.2.2: toDto(List) + EntityMapper-->>-DataSourceService: List + DataSourceService-->>-DataSourceLogicService: List + DataSourceLogicService-->>-DashboardService: Combined List + DashboardService-->>-DashBoardResource: Combined List + DashBoardResource-->>-ActorUser: Display DataSources + +``` + +In this endpoint, it is received as a parameter the CompanyUser and a Integer Year. It is used to return an list of DataSourceDTO related to the CompanyUser and inserted year. + +The method 1.1.1.1 findRatingsByYearAndTypeGlobal will return a list of DataSourceDTO based on the selected year, and only return these DTOs with Type Global. + +After that, the method 1.1.1.2 findByYearPublishedAndCompanyUserCompanyNameAndType will return also an List of DatasoureDTO based on the year, companyUser and the Type Company. + +After this, both lists are join onto one and returned in the main class as an List of DataSourceDTO. + + +#### Endpoint: /sharing/getAllRatingsScoresForEachBpn + +```mermaid +sequenceDiagram + participant ActorUser + participant DashBoardResource + participant DashboardService + participant ShareLogicService + participant ExternalBusinessPartnersLogicService + participant DataSourceValueService + participant DataSourceValueRepository + participant ShareDTO + participant ShareRatingDTO + + ActorUser->>+DashBoardResource: 1: getAllRatingsScoresForEachBpn(CompanyUser, dataSource, businessPartner) + DashBoardResource->>+DashboardService: 1.1: findRatingsScoresForEachBpn(CompanyUser, dataSource, businessPartner) + DashboardService->>+ShareLogicService: 1.1.1: findRatingsScoresForEachBpn + ShareLogicService->>+ExternalBusinessPartnersLogicService: 1.1.1.1: getExternalBusinessPartners + ExternalBusinessPartnersLogicService-->>-ShareLogicService: List + + loop For each BusinessPartner + ShareLogicService->>ShareLogicService: Add country to BusinessPartnerDTO + end + + ShareLogicService->>ShareLogicService: 1.1.1.3: Create List of Countries from BusinessPartnerDTO + ShareLogicService->>ShareLogicService: 1.1.1.4: Create List of Data Source Names from DataSourceDTO + + loop For each DataSource + ShareLogicService->>+DataSourceValueService: 1.1.1.3.1: findRatingAndCountryAndScoreGreaterThanAndYear + DataSourceValueService->>+DataSourceValueRepository: 1.1.1.3.1.1: findByRatingAndCountryAndScoreGreaterThanAndYear + DataSourceValueRepository-->>-DataSourceValueService: List + DataSourceValueService-->>-ShareLogicService: List + end + + loop For each ShareDTO + ShareLogicService->>ShareLogicService: 1.1.1.5: Map DataDTO to ShareDTO + end + + ShareLogicService-->>-DashboardService: List + DashboardService-->>-DashBoardResource: List + DashBoardResource-->>-ActorUser: Display ShareDTOs + +``` + +In this endpoint, it is received as a parameter the CompanyUser an dataSource object and a businessPartner object. It is used to return an list of ShareDTO(Mapped ratings to the business partners) related to the parameters inserted. + +Inside the method 1.1.1 findRatingsScoresForEachBpn, the method 1.1.1.1 will add BusinessPartnerDTO into List of BusinessPartnerDTO. + +After this, an for each clause is done into the received list of businessPartner and other clause into the recently created list. This will set the country into the list of the businessPartners received into the parameter. + +After this, an List of String is created that will store all countries related to the BusinessPartnerDTO (1.1.1.3) and is populated according to the BusinessPartnetDTO countries. + +Then, an List of String that will get the name of the Data Sources will also be populated according the DataSourceDTO. + +With this, the DataSource parameter will be iterated with the for each clause, and an List of DataDTO will be filled according with the method 1.1.1.3.1.1, using as parameter both DataSource names and countries String list. + +Finally, the mapping will be done for each ShareDTO, that then will return inside of an List. + + # Quality Requirements diff --git a/docs/Images/catalog-page.png b/docs/Images/catalog-page.png new file mode 100644 index 0000000000000000000000000000000000000000..ac240fabd4d4fa78bfdc14f9960aa6ae5dcc4a35 GIT binary patch literal 74984 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 CmiHO} literal 0 HcmV?d00001 diff --git a/docs/Images/userInfo.png b/docs/Images/userInfo.png new file mode 100644 index 0000000000000000000000000000000000000000..1ffe01a60b85c093b341a97a3bb327fce577a5ca GIT binary patch literal 30898 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 latestExpirationDate) {", - " latestExpirationDate = currentExpirationDate;", - " // Correct property access for transferProcessId", - " lastNegotiatedTransferProcessId = item[\"transferProcessId\"];", - " }", - " }", - " });", - "}", - "", - "// Log and set the environment variable only if we found a valid ID", - "if (lastNegotiatedTransferProcessId) {", - " pm.collectionVariables.set(\"lastNegotiatedTransferProcessId\", lastNegotiatedTransferProcessId);", - " console.log(\"Last Negotiated Transfer Process ID:\", lastNegotiatedTransferProcessId);", - "} else {", - " console.log(\"No negotiated transfer process ID found in the latest entry.\");", - "}", - "" - ], - "type": "text/javascript", - "packages": {} - } - } - ], - "request": { - "method": "GET", - "header": [], - "url": { - "raw": "{{CONSUMER_URL}}/management/edrs?assetId={{ASSET_COUNTRY_RISK_SHARING_APIS}}", - "host": [ - "{{CONSUMER_URL}}" - ], - "path": [ - "management", - "edrs" - ], - "query": [ - { - "key": "assetId", - "value": "{{ASSET_COUNTRY_RISK_SHARING_APIS}}" - } - ] - } - }, - "response": [] - }, - { - "name": "Initiate EDR Negotation Copy", - "event": [ - { - "listen": "test", - "script": { - "exec": [ - "pm.test(\"Status code is 200\", function () {", - " pm.response.to.have.status(200);", - "});", - "", - "// Parse the JSON response", - "let responseJson = pm.response.json();", - "", - "// Extract the \"@id\" value", - "let negotiationId = responseJson[\"@id\"];", - "", - "// Check if negotiationId is not undefined or empty", - "if (negotiationId) {", - " // Save negotiationId as an environment variable", - " pm.collectionVariables.set(\"negotiationId\", negotiationId);", - " console.log(\"Negotiation ID saved:\", negotiationId);", - "} else {", - " console.log(\"Negotiation ID not found in the response.\");", - "}", - "" - ], - "type": "text/javascript", - "packages": {} - } - } - ], - "request": { - "method": "POST", - "header": [], - "body": { - "mode": "raw", - "raw": "{\n\t\"@context\": {\n\t\t\"odrl\": \"http://www.w3.org/ns/odrl/2/\"\n\t},\n\t\"@type\": \"NegotiationInitiateRequestDto\",\n\t\"counterPartyAddress\": \"{{PROVIDER_URL}}\",\n\t\"protocol\": \"dataspace-protocol-http\",\n\t\"counterPartyId\": \"{{PROVIDER_ID}}\",\n\t\"providerId\": \"{{PROVIDER_ID}}\",\n\t\"offer\": {\n\t\t\"offerId\": \"{{OFFER_ID_COUNTRY_RISK_SHARING_APIS}}\",\n\t\t\"assetId\": \"{{ASSET_COUNTRY_RISK_SHARING_APIS}}\",\n\t\t\"policy\": {\n\t\t\t\"@type\": \"odrl:Set\",\n\t\t\t\"odrl:permission\": {\n\t\t\t\t\"odrl:target\": \"{{ASSET_COUNTRY_RISK_SHARING_APIS}}\",\n\t\t\t\t\"odrl:action\": {\n\t\t\t\t\t\"odrl:type\": \"USE\"\n\t\t\t\t},\n\t\t\t\t\"odrl:constraint\": {\n\t\t\t\t\t\"odrl:or\": {\n\t\t\t\t\t\t\"odrl:leftOperand\": \"BusinessPartnerNumber\",\n\t\t\t\t\t\t\"odrl:operator\": {\n \"@id\": \"odrl:eq\"\n },\n\t\t\t\t\t\t\"odrl:rightOperand\": \"{{POLICY_BPN}}\"\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"odrl:prohibition\": [],\n\t\t\t\"odrl:obligation\": [],\n\t\t\t\"odrl:target\": \"{{ASSET_COUNTRY_RISK_SHARING_APIS}}\"\n\t\t}\n\t}\n}", - "options": { - "raw": { - "language": "json" - } - } - }, - "url": { - "raw": "{{CONSUMER_URL}}/management/edrs", - "host": [ - "{{CONSUMER_URL}}" - ], - "path": [ - "management", - "edrs" - ] - } - }, - "response": [] - }, - { - "name": "GET Contract Negotation by EDR ID Copy 2", - "event": [ - { - "listen": "test", - "script": { - "exec": [ - "pm.test(\"Status code is 200\", function () {", - " pm.response.to.have.status(200);", - "});", - "", - "// Parse the JSON response", - "let responseJson = pm.response.json();", - "", - "// Extract the \"contractAgreementId\" value", - "let contractAgreementId = responseJson[\"contractAgreementId\"];", - "", - "// Check if contractAgreementId is not undefined or empty", - "if (contractAgreementId) {", - " // Save contractAgreementId as an environment variable", - " pm.collectionVariables.set(\"contractAgreementId\", contractAgreementId);", - " console.log(\"Contract Agreement ID saved:\", contractAgreementId);", - "} else {", - " console.log(\"Contract Agreement ID not found in the response.\");", - "}", - "" - ], - "type": "text/javascript", - "packages": {} - } - } - ], - "request": { - "method": "GET", - "header": [], - "url": { - "raw": "{{CONSUMER_URL}}/management/v2/contractnegotiations/{{negotiationId}}", - "host": [ - "{{CONSUMER_URL}}" - ], - "path": [ - "management", - "v2", - "contractnegotiations", - "{{negotiationId}}" - ] - } - }, - "response": [] - }, - { - "name": "Get TransferProcess ID by agreement ID Copy 2", - "event": [ - { - "listen": "test", - "script": { - "exec": [ - "pm.test(\"Status code is 200\", function () {", - " pm.response.to.have.status(200);", - "});", - "", - "// Parse the JSON response", - "let responseJson = pm.response.json();", - "", - "// Initialize a variable to store the transferProcessId", - "let transferProcessId = \"\";", - "", - "// Loop through the response array to find an entry with \"NEGOTIATED\" state", - "responseJson.forEach(function(item) {", - " if (item[\"@type\"] === \"tx:EndpointDataReferenceEntry\" && item[\"tx:edrState\"] === \"NEGOTIATED\") {", - " // If a negotiated entry is found, save its transferProcessId", - " transferProcessId = item[\"transferProcessId\"];", - " // Optional: Break the loop if only the first \"NEGOTIATED\" entry is needed", - " return false; // Note: This will not actually break the forEach loop in JavaScript. Use for...of loop if breaking is necessary.", - " }", - "});", - "", - "// Check if a transferProcessId was found and save it as an environment variable", - "if (transferProcessId !== \"\") {", - " pm.collectionVariables.set(\"transferProcessId\", transferProcessId);", - " console.log(\"Transfer Process ID saved:\", transferProcessId);", - "} else {", - " console.log(\"No negotiated transfer process ID found.\");", - "}", - "" - ], - "type": "text/javascript", - "packages": {} - } - } - ], - "request": { - "method": "GET", - "header": [], - "url": { - "raw": "{{CONSUMER_URL}}/management/edrs?agreementId={{contractAgreementId}}", - "host": [ - "{{CONSUMER_URL}}" - ], - "path": [ - "management", - "edrs" - ], - "query": [ - { - "key": "agreementId", - "value": "{{contractAgreementId}}" - } - ] - } - }, - "response": [] - }, - { - "name": "Get EDR by tp ID Copy", - "event": [ - { - "listen": "test", - "script": { - "exec": [ - "pm.test(\"Status code is 200\", function () {", - " pm.response.to.have.status(200);", - "});", - "// Parse the JSON response", - "var responseBody = pm.response.json();", - "", - "// Check if the response contains the \"edc:authCode\" property", - "if (responseBody.hasOwnProperty(\"authCode\")) {", - " // Get the value of \"edc:authCode\"", - " var authCode = responseBody[\"authCode\"];", - "", - " // Set the collection variable with the value of \"edc:authCode\"", - " pm.collectionVariables.set(\"AUTH_CODE\", authCode);", - "", - " // Log the value to the Postman console", - " console.log(\"authCode: \" + authCode);", - "} else {", - " console.log(\"Response does not contain 'edc:authCode' property.\");", - "}" - ], - "type": "text/javascript", - "packages": {} - } - } - ], - "protocolProfileBehavior": { - "disableBodyPruning": true - }, - "request": { - "method": "GET", - "header": [], - "body": { - "mode": "raw", - "raw": "", - "options": { - "raw": { - "language": "json" - } - } - }, - "url": { - "raw": "{{CONSUMER_URL}}/management/edrs/{{lastNegotiatedTransferProcessId}}", - "host": [ - "{{CONSUMER_URL}}" - ], - "path": [ - "management", - "edrs", - "{{lastNegotiatedTransferProcessId}}" - ] - } - }, - "response": [] - } - ] - }, - { - "name": "Execute Requests", - "item": [ - { - "name": "Public Api GetAllRatingsScoresForEachBpn", - "request": { - "auth": { - "type": "apikey", - "apikey": [ - { - "key": "value", - "value": "{{AUTH_CODE}}", - "type": "string" - }, - { - "key": "key", - "value": "Authorization", - "type": "string" - } - ] - }, - "method": "GET", - "header": [], - "url": { - "raw": "{{COUNTRY_RISK_PUBLIC_URL}}/getAllRatingsScoresForEachBpn?datasource[]={\n \"dataSourceName\": \"CPI Rating 2021\",\n \"yearPublished\": 2021\n}&bpns[]={\n \"bpn\": \"BPN-0001\",\n \"country\": \"ES\"\n}&name=John&email=John@email.com&companyName=TestCompany", - "host": [ - "{{COUNTRY_RISK_PUBLIC_URL}}" - ], - "path": [ - "getAllRatingsScoresForEachBpn" - ], - "query": [ - { - "key": "datasource[]", - "value": "{\n \"dataSourceName\": \"CPI Rating 2021\",\n \"yearPublished\": 2021\n}" - }, - { - "key": "bpns[]", - "value": "{\n \"bpn\": \"BPN-0001\",\n \"country\": \"ES\"\n}" - }, - { - "key": "name", - "value": "John" - }, - { - "key": "email", - "value": "John@email.com" - }, - { - "key": "companyName", - "value": "TestCompany" - } - ] - } - }, - "response": [] - }, - { - "name": "Public Api GetAllRatingsForCompany", - "request": { - "auth": { - "type": "apikey", - "apikey": [ - { - "key": "value", - "value": "{{AUTH_CODE}}", - "type": "string" - }, - { - "key": "key", - "value": "Authorization", - "type": "string" - } - ] - }, - "method": "GET", - "header": [], - "url": { - "raw": "{{COUNTRY_RISK_PUBLIC_URL}}/getAllRatingsForCompany?year=2021&name=John&email=John@email.com&companyName=TestCompany", - "host": [ - "{{COUNTRY_RISK_PUBLIC_URL}}" - ], - "path": [ - "getAllRatingsForCompany" - ], - "query": [ - { - "key": "year", - "value": "2021" - }, - { - "key": "name", - "value": "John" - }, - { - "key": "email", - "value": "John@email.com" - }, - { - "key": "companyName", - "value": "TestCompany" - } - ] - } - }, - "response": [] - } - ] - } - ] - } - ], - "event": [ - { - "listen": "prerequest", - "script": { - "type": "text/javascript", - "packages": {}, - "exec": [ - "" - ] - } - }, - { - "listen": "test", - "script": { - "type": "text/javascript", - "packages": {}, - "exec": [ - "" - ] - } - } - ], - "variable": [ - { - "key": "PROVIDER_URL", - "value": "http://localhost:8080", - "type": "string" - }, - { - "key": "ASSET_COUNTRY_RISK_SHARING_APIS", - "value": "GET_COUNTRY_RISK_SHARING_APIS", - "type": "string" - }, - { - "key": "COUNTRY_RISK_BACKEND_URL", - "value": "https://vas-country-risk-backend.int.demo.catena-x.net", - "type": "string" - }, - { - "key": "COMPANY_ID", - "value": "BPNL00000007RF54", - "type": "string" - }, - { - "key": "ASSET_TOKEN_URL", - "value": "https://centralidp.int.demo.catena-x.net/auth/realms/CX-Central/protocol/openid-connect/token", - "type": "string" - }, - { - "key": "ASSET_CLIENT_ID", - "value": "sa121", - "type": "string" - }, - { - "key": "ASSET_CLIENT_SECRET", - "value": "", - "type": "string" - }, - { - "key": "X-API-KEY", - "value": "", - "type": "string" - }, - { - "key": "POLICY_ID", - "value": "COUNTRY_RISK_POLICY", - "type": "string" - }, - { - "key": "BPNL_SHARING_MEMBER", - "value": "BPNLX01", - "type": "string" - }, - { - "key": "PROVIDER_URL_DSP", - "value": "https://country-risk-edc-provider.int.demo.catena-x.net/api/v1/dsp", - "type": "string" - }, - { - "key": "PROVIDER_ID", - "value": "BPNLX02", - "type": "string" - }, - { - "key": "CONTRACT_ID", - "value": "COUNTRY_RISK_CONTRACT" - }, - { - "key": "EDC_NAMESPACE", - "value": "https://w3id.org/edc/v0.0.1/ns/", - "type": "string" - }, - { - "key": "CONSUMER_URL", - "value": "http://localhost:8081", - "type": "string" - }, - { - "key": "COUNTRY_RISK_SHARING_PATH", - "value": "/api/sharing", - "type": "string" - }, - { - "key": "negotiationId", - "value": "", - "type": "string" - }, - { - "key": "contractAgreementId", - "value": "", - "type": "string" - }, - { - "key": "lastNegotiatedTransferProcessId", - "value": "", - "type": "string" - }, - { - "key": "COUNTRY_RISK_PUBLIC_URL", - "value": "https://country-risk-edc-provider.int.demo.catena-x.net/api/public", - "type": "string" - }, - { - "key": "AUTH_CODE", - "value": "", - "type": "string" - }, - { - "key": "OFFER_ID_COUNTRY_RISK_SHARING_APIS", - "value": "", - "type": "string" - } - ] -} \ No newline at end of file diff --git a/docs/postman/Country Risk EDC/EDC.postman_collection.json b/docs/postman/Country Risk EDC/EDC.postman_collection.json new file mode 100644 index 00000000..50cdf522 --- /dev/null +++ b/docs/postman/Country Risk EDC/EDC.postman_collection.json @@ -0,0 +1,2329 @@ +{ + "info": { + "_postman_id": "375c1284-bb44-4711-bef2-2192c1e42039", + "name": "EDC", + "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json", + "_exporter_id": "29921765" + }, + "item": [ + { + "name": "Country Risk", + "item": [ + { + "name": "Setup Country Risk Provider", + "item": [ + { + "name": "Assets", + "item": [ + { + "name": "Try Dynamic Asset", + "item": [ + { + "name": "Create Asset", + "request": { + "method": "POST", + "header": [ + { + "key": "x-api-key", + "value": "{{X-API-KEY}}" + } + ], + "body": { + "mode": "raw", + "raw": "{\r\n \"@context\": {\r\n \"dct\": \"https://purl.org/dc/terms/\",\r\n \"cx-taxo\": \"https://w3id.org/catenax/taxonomy#\",\r\n \"cx-common\": \"https://w3id.org/catenax/ontology/common#\",\r\n \"@vocab\": \"https://w3id.org/edc/v0.0.1/ns/\"\r\n },\r\n \"@type\": \"Asset\",\r\n \"@id\": \"{{ASSET_COUNTRY_RISK_SHARING_APIS}}\",\r\n \"properties\": {\r\n \"description\": \"GET Sharing States ({{COUNTRY_RISK_BACKEND_URL}}/swagger-ui/index.html#/Sharing Controller/getAllRatingsScoresForEachBpn)\",\r\n \"company\": \"{{PROVIDER_ID}}\",\r\n \"dct:type\": {\r\n \"@id\": \"cx-taxo:ContryRisk\"\r\n },\r\n \"dct:subject\": {\r\n \"@id\": \"cx-taxo:FullAccessCountryRiskSharingForVASUser\"\r\n },\r\n \"dct:description\": \"Grants unrestricted access to business partner data for the Data Consumer of the Country Risk Dashboard and Sharing API. This includes data identified via BPN and enriched from the pool. It allows the use of risk categorizations from various indices within the data consumer's company. Data usage is covered by the framework agreement for the gate.\",\r\n \"cx-common:version\": \"2.0.0\"\r\n },\r\n \"dataAddress\": {\r\n \"@type\": \"DataAddress\",\r\n \"type\": \"HttpData\",\r\n \"baseUrl\": \"{{COUNTRY_RISK_BACKEND_URL}}{{COUNTRY_RISK_SHARING_PATH}}\",\r\n \"oauth2:tokenUrl\": \"{{ASSET_TOKEN_URL}}\",\r\n \"oauth2:clientId\": \"{{ASSET_CLIENT_ID}}\",\r\n \"oauth2:clientSecretKey\": \"{{ASSET_CLIENT_SECRET}}\",\r\n \"proxyPath\": \"true\",\r\n \"proxyQueryParams\": \"true\"\r\n }\r\n}", + "options": { + "raw": { + "language": "json" + } + } + }, + "url": { + "raw": "{{PROVIDER_URL}}/management/v3/assets", + "host": [ + "{{PROVIDER_URL}}" + ], + "path": [ + "management", + "v3", + "assets" + ] + } + }, + "response": [] + }, + { + "name": "Delete Asset", + "request": { + "method": "DELETE", + "header": [ + { + "key": "x-api-key", + "value": "{{X-API-KEY}}", + "type": "text" + } + ], + "url": { + "raw": "{{PROVIDER_URL}}/management/v3/assets/{{ASSET_COUNTRY_RISK_SHARING_APIS}}", + "host": [ + "{{PROVIDER_URL}}" + ], + "path": [ + "management", + "v3", + "assets", + "{{ASSET_COUNTRY_RISK_SHARING_APIS}}" + ] + } + }, + "response": [] + }, + { + "name": "Get Asset", + "request": { + "method": "GET", + "header": [ + { + "key": "x-api-key", + "value": "{{X-API-KEY}}", + "type": "text" + } + ], + "url": { + "raw": "{{PROVIDER_URL}}/management/v3/assets/{{ASSET_COUNTRY_RISK_SHARING_APIS}}", + "host": [ + "{{PROVIDER_URL}}" + ], + "path": [ + "management", + "v3", + "assets", + "{{ASSET_COUNTRY_RISK_SHARING_APIS}}" + ] + } + }, + "response": [] + } + ] + } + ] + }, + { + "name": "Policy", + "item": [ + { + "name": "Create Policy", + "request": { + "method": "POST", + "header": [ + { + "key": "x-api-key", + "value": "{{X-API-KEY}}", + "type": "text" + } + ], + "body": { + "mode": "raw", + "raw": "{\r\n \"@context\": {\r\n \"@vocab\": \"https://w3id.org/edc/v0.0.1/ns/\"\r\n },\r\n \"@id\": \"{{POLICY_ID}}\",\r\n \"policy\": {\r\n \"@context\": \"http://www.w3.org/ns/odrl.jsonld\",\r\n \"@type\": \"Set\",\r\n \"odrl:permission\": [\r\n {\r\n \"odrl:action\": \"USE\",\r\n \"odrl:constraint\": {\r\n \"@type\": \"LogicalConstraint\",\r\n \"odrl:or\": [\r\n {\r\n \"@type\": \"Constraint\",\r\n \"odrl:leftOperand\": \"BusinessPartnerNumber\",\r\n \"odrl:operator\": {\r\n \"@id\": \"odrl:eq\"\r\n },\r\n \"odrl:rightOperand\": \"{{BPNL_SHARING_MEMBER}}\"\r\n }\r\n ]\r\n }\r\n }\r\n ]\r\n }\r\n}", + "options": { + "raw": { + "language": "json" + } + } + }, + "url": { + "raw": "{{PROVIDER_URL}}/management/v2/policydefinitions", + "host": [ + "{{PROVIDER_URL}}" + ], + "path": [ + "management", + "v2", + "policydefinitions" + ] + } + }, + "response": [] + }, + { + "name": "Create Policy Framework", + "request": { + "method": "POST", + "header": [ + { + "key": "x-api-key", + "value": "{{X-API-KEY}}" + } + ], + "body": { + "mode": "raw", + "raw": "{\r\n \"@context\": [\r\n \"https://w3id.org/tractusx/policy/v1.0.0\",\r\n \"http://www.w3.org/ns/odrl.jsonld\",\r\n {\r\n \"@vocab\": \"https://w3id.org/edc/v0.0.1/ns/\"\r\n }\r\n ],\r\n \"@type\": \"PolicyDefinitionRequestDto\",\r\n \"@id\": \"{{POLICY_ID}}\",\r\n \"policy\": {\r\n \"@type\": \"Set\",\r\n \"profile\": \"profile2405\",\r\n \"permission\": [\r\n {\r\n \"action\": \"use\",\r\n \"constraint\": {\r\n \"and\": [\r\n {\r\n \"leftOperand\": \"FrameworkAgreement.businesspartner\",\r\n \"operator\": \"eq\",\r\n \"rightOperand\": \"active\"\r\n },\r\n {\r\n \"leftOperand\": \"UsagePurpose\",\r\n \"operator\": \"eq\",\r\n \"rightOperand\": \"\"\r\n }\r\n ]\r\n }\r\n }\r\n ]\r\n }\r\n}", + "options": { + "raw": { + "language": "json" + } + } + }, + "url": { + "raw": "{{PROVIDER_URL}}/management/v2/policydefinitions", + "host": [ + "{{PROVIDER_URL}}" + ], + "path": [ + "management", + "v2", + "policydefinitions" + ] + } + }, + "response": [] + }, + { + "name": "Get Policy", + "request": { + "method": "GET", + "header": [ + { + "key": "x-api-key", + "value": "{{X-API-KEY}}", + "type": "text" + } + ], + "url": { + "raw": "{{PROVIDER_URL}}/management/v2/policydefinitions/{{POLICY_ID}}", + "host": [ + "{{PROVIDER_URL}}" + ], + "path": [ + "management", + "v2", + "policydefinitions", + "{{POLICY_ID}}" + ] + } + }, + "response": [] + }, + { + "name": "Get All Policy", + "request": { + "method": "POST", + "header": [ + { + "key": "x-api-key", + "value": "{{X-API-KEY}}" + } + ], + "body": { + "mode": "raw", + "raw": "{\r\n \"@context\": {\r\n \"@vocab\": \"https://w3id.org/edc/v0.0.1/ns/\"\r\n },\r\n \"@type\": \"QuerySpec\",\r\n \"offset\": 0,\r\n \"limit\": 10,\r\n \"sortOrder\": \"DESC\",\r\n \"filterExpression\": []\r\n}", + "options": { + "raw": { + "language": "json" + } + } + }, + "url": { + "raw": "{{PROVIDER_URL}}/management/v2/policydefinitions/request", + "host": [ + "{{PROVIDER_URL}}" + ], + "path": [ + "management", + "v2", + "policydefinitions", + "request" + ] + } + }, + "response": [] + }, + { + "name": "Delete Policy", + "request": { + "method": "DELETE", + "header": [ + { + "key": "x-api-key", + "value": "{{X-API-KEY}}", + "type": "text" + } + ], + "url": { + "raw": "{{PROVIDER_URL}}/management/v2/policydefinitions/{{POLICY_ID}}", + "host": [ + "{{PROVIDER_URL}}" + ], + "path": [ + "management", + "v2", + "policydefinitions", + "{{POLICY_ID}}" + ] + } + }, + "response": [] + } + ] + }, + { + "name": "Contract", + "item": [ + { + "name": "Create Contract", + "request": { + "method": "POST", + "header": [ + { + "key": "x-api-key", + "value": "{{X-API-KEY}}" + } + ], + "body": { + "mode": "raw", + "raw": "{\r\n \"@context\": {\r\n \"@vocab\": \"https://w3id.org/edc/v0.0.1/ns/\"\r\n },\r\n \"@id\": \"{{CONTRACT_ID}}\",\r\n \"@type\": \"ContractDefinition\",\r\n \"accessPolicyId\": \"{{POLICY_ID}}\",\r\n \"contractPolicyId\": \"{{POLICY_ID}}\",\r\n \"assetsSelector\": {\r\n \"@type\": \"CriterionDto\",\r\n \"operandLeft\": \"{{EDC_NAMESPACE}}id\",\r\n \"operator\": \"in\",\r\n \"operandRight\": [\r\n \"{{ASSET_COUNTRY_RISK_SHARING_APIS}}\"\r\n ]\r\n }\r\n}", + "options": { + "raw": { + "language": "json" + } + } + }, + "url": { + "raw": "{{PROVIDER_URL}}/management/v2/contractdefinitions", + "host": [ + "{{PROVIDER_URL}}" + ], + "path": [ + "management", + "v2", + "contractdefinitions" + ] + } + }, + "response": [] + }, + { + "name": "Get All Contract Agreements", + "request": { + "method": "POST", + "header": [ + { + "key": "x-api-key", + "value": "{{X-API-KEY}}" + } + ], + "body": { + "mode": "raw", + "raw": "{\r\n \"@context\": {\r\n \"@vocab\": \"https://w3id.org/edc/v0.0.1/ns/\"\r\n },\r\n \"@type\": \"QuerySpec\",\r\n \"offset\": 0,\r\n \"limit\": 10,\r\n \"sortOrder\": \"DESC\",\r\n \"filterExpression\": []\r\n}", + "options": { + "raw": { + "language": "json" + } + } + }, + "url": { + "raw": "{{PROVIDER_URL}}/management/v2/contractagreements/request", + "host": [ + "{{PROVIDER_URL}}" + ], + "path": [ + "management", + "v2", + "contractagreements", + "request" + ] + } + }, + "response": [] + }, + { + "name": "Delete Contract", + "request": { + "method": "DELETE", + "header": [ + { + "key": "x-api-key", + "value": "{{X-API-KEY}}", + "type": "text" + } + ], + "url": { + "raw": "{{PROVIDER_URL}}/management/v2/contractdefinitions/{{CONTRACT_ID}}", + "host": [ + "{{PROVIDER_URL}}" + ], + "path": [ + "management", + "v2", + "contractdefinitions", + "{{CONTRACT_ID}}" + ] + } + }, + "response": [] + }, + { + "name": "Get Contracts", + "protocolProfileBehavior": { + "disableBodyPruning": true + }, + "request": { + "method": "GET", + "header": [ + { + "key": "x-api-key", + "value": "{{X-API-KEY}}" + } + ], + "body": { + "mode": "raw", + "raw": "{\r\n \"@context\": {\r\n \"@vocab\": \"https://w3id.org/edc/v0.0.1/ns/\"\r\n },\r\n \"@type\": \"QuerySpec\",\r\n \"offset\": 5,\r\n \"limit\": 10,\r\n \"sortOrder\": \"DESC\",\r\n \"sortField\": \"fieldName\",\r\n \"filterExpression\": []\r\n}", + "options": { + "raw": { + "language": "json" + } + } + }, + "url": { + "raw": "{{PROVIDER_URL}}/management/v2/contractdefinitions/{{CONTRACT_ID}}", + "host": [ + "{{PROVIDER_URL}}" + ], + "path": [ + "management", + "v2", + "contractdefinitions", + "{{CONTRACT_ID}}" + ] + } + }, + "response": [] + } + ] + } + ] + }, + { + "name": "Negotiate Country Risk Provider", + "item": [ + { + "name": "Query Catalog", + "item": [ + { + "name": "Query Catalog", + "request": { + "method": "POST", + "header": [ + { + "key": "x-api-key", + "value": "{{X-API-KEY}}", + "type": "text" + } + ], + "body": { + "mode": "raw", + "raw": "{\r\n \"@context\": {\r\n \"@vocab\": \"https://w3id.org/edc/v0.0.1/ns/\"\r\n },\r\n \"@type\": \"CatalogRequest\",\r\n \"counterPartyAddress\": \"{{PROVIDER_URL_DSP}}\",\r\n \"counterPartyId\": \"{{PROVIDER_ID}}\",\r\n \"protocol\": \"dataspace-protocol-http\",\r\n \"querySpec\": {\r\n \"offset\": 0,\r\n \"limit\": 50,\r\n \"sortOrder\": \"DESC\",\r\n \"sortField\": \"fieldName\",\r\n \"filterExpression\": []\r\n }\r\n}", + "options": { + "raw": { + "language": "json" + } + } + }, + "url": { + "raw": "{{CONSUMER_URL}}/management/v2/catalog/request", + "host": [ + "{{CONSUMER_URL}}" + ], + "path": [ + "management", + "v2", + "catalog", + "request" + ] + } + }, + "response": [] + } + ] + }, + { + "name": "Negotiate", + "item": [ + { + "name": "Initiate EDR Negotation", + "event": [ + { + "listen": "test", + "script": { + "exec": [ + "pm.test(\"Status code is 200\", function () {", + " pm.response.to.have.status(200);", + "});", + "", + "// Parse the JSON response", + "let responseJson = pm.response.json();", + "", + "// Extract the \"@id\" value", + "let negotiationId = responseJson[\"@id\"];", + "", + "// Check if negotiationId is not undefined or empty", + "if (negotiationId) {", + " // Save negotiationId as an environment variable", + " pm.collectionVariables.set(\"negotiationId\", negotiationId);", + " console.log(\"Negotiation ID saved:\", negotiationId);", + "} else {", + " console.log(\"Negotiation ID not found in the response.\");", + "}", + "" + ], + "type": "text/javascript", + "packages": {} + } + } + ], + "request": { + "method": "POST", + "header": [ + { + "key": "x-api-key", + "value": "{{X-API-KEY}}" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"@context\": {\n \"@vocab\": \"https://w3id.org/edc/v0.0.1/ns/\",\n \"odrl\": \"http://www.w3.org/ns/odrl/2/\"\n },\n \"@type\": \"ContractRequest\",\n \"counterPartyAddress\": \"{{PROVIDER_URL_DSP}}\",\n \"protocol\": \"dataspace-protocol-http\",\n \"counterPartyId\": \"{{PROVIDER_ID}}\",\n \"policy\": {\n \"@id\": \"OFFERID\",\n \"@type\": \"odrl:Offer\",\n \"@context\": \"http://www.w3.org/ns/odrl.jsonld\",\n \"odrl:permission\": {\n \"odrl:target\": \"{{ASSET_COUNTRY_RISK_SHARING_APIS}}\",\n \"odrl:action\": {\n \"odrl:type\": \"USE\"\n },\n \"odrl:constraint\": {\n \"odrl:or\": {\n \"odrl:leftOperand\": \"BusinessPartnerNumber\",\n \"odrl:operator\": {\n \"@id\": \"odrl:eq\"\n },\n \"odrl:rightOperand\": \"{{BPNL_SHARING_MEMBER}}\"\n }\n }\n },\n \"odrl:prohibition\": [],\n \"odrl:obligation\": [],\n \"odrl:target\": {\n \"@id\": \"{{ASSET_COUNTRY_RISK_SHARING_APIS}}\"\n },\n \"assigner\": \"{{PROVIDER_ID}}\"\n }\n}", + "options": { + "raw": { + "language": "json" + } + } + }, + "url": { + "raw": "{{CONSUMER_URL}}/management/v2/edrs", + "host": [ + "{{CONSUMER_URL}}" + ], + "path": [ + "management", + "v2", + "edrs" + ] + } + }, + "response": [] + }, + { + "name": "Initiate EDR Negotation Framework Policy", + "event": [ + { + "listen": "test", + "script": { + "exec": [ + "pm.test(\"Status code is 200\", function () {", + " pm.response.to.have.status(200);", + "});", + "", + "// Parse the JSON response", + "let responseJson = pm.response.json();", + "", + "// Extract the \"@id\" value", + "let negotiationId = responseJson[\"@id\"];", + "", + "// Check if negotiationId is not undefined or empty", + "if (negotiationId) {", + " // Save negotiationId as an environment variable", + " pm.collectionVariables.set(\"negotiationId\", negotiationId);", + " console.log(\"Negotiation ID saved:\", negotiationId);", + "} else {", + " console.log(\"Negotiation ID not found in the response.\");", + "}", + "" + ], + "type": "text/javascript", + "packages": {} + } + } + ], + "request": { + "method": "POST", + "header": [ + { + "key": "x-api-key", + "value": "{{X-API-KEY}}" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"@context\": [\n \"https://w3id.org/tractusx/policy/v1.0.0\",\n \"http://www.w3.org/ns/odrl.jsonld\",\n {\n \"@vocab\": \"https://w3id.org/edc/v0.0.1/ns/\",\n \"cx-policy\": \"https://w3id.org/catenax/policy/\"\n }\n ],\n \"@type\": \"ContractRequest\",\n \"counterPartyAddress\": \"{{PROVIDER_URL_DSP}}\",\n \"protocol\": \"dataspace-protocol-http\",\n \"counterPartyId\": \"{{PROVIDER_ID}}\",\n \"policy\": {\n \"@id\": \"OFFERID\",\n \"@type\": \"Offer\",\n \"permission\": [\n {\n \"target\": \"{{ASSET_COUNTRY_RISK_SHARING_APIS}}\",\n \"action\": \"use\",\n \"constraint\": {\n \"and\": [\n {\n \"leftOperand\": \"cx-policy:FrameworkAgreement\",\n \"operator\": \"eq\",\n \"rightOperand\": \"businessPartner:1.0\"\n },\n {\n \"leftOperand\": \"UsagePurpose\",\n \"operator\": \"eq\",\n \"rightOperand\": \"\"\n }\n ]\n }\n }\n ],\n \"target\": \"{{ASSET_COUNTRY_RISK_SHARING_APIS}}\",\n \"assigner\": \"{{PROVIDER_ID}}\"\n }\n}", + "options": { + "raw": { + "language": "json" + } + } + }, + "url": { + "raw": "{{CONSUMER_URL}}/management/v2/edrs", + "host": [ + "{{CONSUMER_URL}}" + ], + "path": [ + "management", + "v2", + "edrs" + ] + } + }, + "response": [] + }, + { + "name": "GET Contract Negotation By Id", + "event": [ + { + "listen": "test", + "script": { + "exec": [ + "pm.test(\"Status code is 200\", function () {", + " pm.response.to.have.status(200);", + "});", + "", + "// Parse the JSON response", + "let responseJson = pm.response.json();", + "", + "// Extract the \"contractAgreementId\" value", + "let contractAgreementId = responseJson[\"contractAgreementId\"];", + "", + "// Check if contractAgreementId is not undefined or empty", + "if (contractAgreementId) {", + " // Save contractAgreementId as an environment variable", + " pm.collectionVariables.set(\"contractAgreementId\", contractAgreementId);", + " console.log(\"Contract Agreement ID saved:\", contractAgreementId);", + "} else {", + " console.log(\"Contract Agreement ID not found in the response.\");", + "}", + "" + ], + "type": "text/javascript", + "packages": {} + } + } + ], + "request": { + "method": "GET", + "header": [ + { + "key": "x-api-key", + "value": "{{X-API-KEY}}", + "type": "text" + } + ], + "url": { + "raw": "{{CONSUMER_URL}}/management/v2/contractnegotiations/{{negotiationId}}", + "host": [ + "{{CONSUMER_URL}}" + ], + "path": [ + "management", + "v2", + "contractnegotiations", + "{{negotiationId}}" + ] + } + }, + "response": [] + }, + { + "name": "Get TransferProcess ID by agreement ID", + "event": [ + { + "listen": "test", + "script": { + "exec": [ + "// Test that the response status code is 200", + "pm.test(\"Status code is 200\", function () {", + " pm.response.to.have.status(200);", + "});", + "", + "// Parse the JSON response", + "let responseJson = pm.response.json();", + "", + "// Extract the ID from the response and store it in a variable", + "let transferProcessId = responseJson[\"@id\"];", + "", + "// Log the extracted ID to ensure it's correct", + "console.log(\"Extracted Transfer Process ID:\", transferProcessId);", + "", + "// Save the transferProcessId as an environment variable if it exists", + "if (transferProcessId) {", + " pm.collectionVariables.set(\"transferProcessId\", transferProcessId);", + " console.log(\"Transfer Process ID saved:\", transferProcessId);", + "} else {", + " console.log(\"No transfer process ID found.\");", + "}", + "" + ], + "type": "text/javascript", + "packages": {} + } + } + ], + "request": { + "method": "POST", + "header": [ + { + "key": "x-api-key", + "value": "{{X-API-KEY}}" + } + ], + "body": { + "mode": "raw", + "raw": "{\r\n \"@context\": {\r\n \"@vocab\": \"https://w3id.org/edc/v0.0.1/ns/\"\r\n },\r\n \"assetId\": \"0435bb8b-22d7-4f79-a50f-93611db92bc9\",\r\n \"counterPartyAddress\": \"{{PROVIDER_URL_DSP}}\",\r\n \"connectorId\": \"{{PROVIDER_ID}}\",\r\n \"contractId\": \"{{contractAgreementId}}\",\r\n \"transferType\": \"HttpData-PULL\",\r\n \"dataDestination\": {\r\n \"type\": \"HttpProxy\"\r\n },\r\n \"privateProperties\": {\r\n \"receiverHttpEndpoint\": \"{{BACKEND_SERVICE}}\"\r\n },\r\n \"protocol\": \"dataspace-protocol-http\",\r\n \"callbackAddresses\":{\r\n \"events\": [\r\n \"transfer.process.started\"\r\n ],\r\n \"uri\": \"http://mock-util-service:80/edr-log\"\r\n }\r\n}", + "options": { + "raw": { + "language": "json" + } + } + }, + "url": { + "raw": "{{CONSUMER_URL}}/management/v2/transferprocesses", + "host": [ + "{{CONSUMER_URL}}" + ], + "path": [ + "management", + "v2", + "transferprocesses" + ] + } + }, + "response": [] + }, + { + "name": "Get EDR by ContractAgreementID", + "event": [ + { + "listen": "prerequest", + "script": { + "exec": [ + "" + ], + "type": "text/javascript", + "packages": {} + } + }, + { + "listen": "test", + "script": { + "exec": [ + "pm.test(\"Status code is 200\", function () {", + " pm.response.to.have.status(200);", + "});", + "var responseJson = pm.response.json();", + "var transferProcessId = responseJson[0][\"transferProcessId\"];", + "pm.collectionVariables.set(\"transferProcessId\", transferProcessId);" + ], + "type": "text/javascript", + "packages": {} + } + } + ], + "request": { + "method": "POST", + "header": [ + { + "key": "x-api-key", + "value": "{{X-API-KEY}}" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"@context\": {\n \"@vocab\": \"https://w3id.org/edc/v0.0.1/ns/\"\n },\n \"@type\": \"QuerySpec\",\n \"offset\": 0,\n \"limit\": 1,\n \"filterExpression\": [\n {\n \"operandLeft\": \"agreementId\",\n \"operator\": \"=\",\n \"operandRight\": \"{{contractAgreementId}}\"\n }\n ]\n}", + "options": { + "raw": { + "language": "json" + } + } + }, + "url": { + "raw": "{{CONSUMER_URL}}/management/v2/edrs/request", + "host": [ + "{{CONSUMER_URL}}" + ], + "path": [ + "management", + "v2", + "edrs", + "request" + ] + } + }, + "response": [] + }, + { + "name": "Get EDR by TransferProcessID", + "event": [ + { + "listen": "test", + "script": { + "exec": [ + "// Test that the response status code is 200", + "pm.test(\"Status code is 200\", function () {", + " pm.response.to.have.status(200);", + "});", + "", + "// Ensure 'responseBody' is declared only once. Use 'let' or 'var' based on your need.", + "let resBody = pm.response.json();", + "", + "// Check if the response contains the \"authorization\" property", + "if (resBody.hasOwnProperty(\"authorization\")) {", + " // Get the value of \"authorization\"", + " let authCode = resBody[\"authorization\"];", + "", + " // Set the collection variable with the value of \"authorization\"", + " pm.collectionVariables.set(\"AUTH_CODE\", authCode);", + "", + " // Log the value to the Postman console", + " console.log(\"Authorization Code saved:\", authCode);", + "} else {", + " console.log(\"Response does not contain 'authorization' property.\");", + "}", + "" + ], + "type": "text/javascript", + "packages": {} + } + } + ], + "request": { + "method": "GET", + "header": [ + { + "key": "x-api-key", + "value": "{{X-API-KEY}}" + } + ], + "url": { + "raw": "{{CONSUMER_URL}}/management/v2/edrs/{{transferProcessId}}/dataaddress?auto_refresh=true", + "host": [ + "{{CONSUMER_URL}}" + ], + "path": [ + "management", + "v2", + "edrs", + "{{transferProcessId}}", + "dataaddress" + ], + "query": [ + { + "key": "auto_refresh", + "value": "true" + } + ] + } + }, + "response": [] + }, + { + "name": "Refresh Token", + "request": { + "auth": { + "type": "bearer", + "bearer": [ + { + "key": "token", + "value": "", + "type": "string" + } + ] + }, + "method": "POST", + "header": [ + { + "key": "grant_type", + "value": "refresh_token" + }, + { + "key": "refresh_token", + "value": "" + }, + { + "key": "client_id", + "value": "client_id" + }, + { + "key": "client_secret", + "value": "client_secret" + } + ], + "body": { + "mode": "urlencoded", + "urlencoded": [ + { + "key": "grant_type", + "value": "refresh_token", + "type": "text" + }, + { + "key": "refresh_token", + "value": "", + "type": "text" + }, + { + "key": "client_id", + "value": "client_id", + "type": "text" + }, + { + "key": "client_secret", + "value": "client_secret", + "type": "text" + } + ] + }, + "url": { + "raw": "https://edc-country-risk-provider-hostname/api/public/token?grant_type=refresh_token&refresh_token=&client_id", + "protocol": "https", + "host": [ + "country-risk-edc-provider", + "int", + "demo", + "catena-x", + "net" + ], + "path": [ + "api", + "public", + "token" + ], + "query": [ + { + "key": "grant_type", + "value": "refresh_token" + }, + { + "key": "refresh_token", + "value": "refresh_token" + }, + { + "key": "client_id", + "value": "client_id" + } + ] + } + }, + "response": [] + } + ] + }, + { + "name": "Execute Requests", + "item": [ + { + "name": "Public Api GetAllRatingsScoresForEachBpn", + "request": { + "auth": { + "type": "apikey", + "apikey": [ + { + "key": "value", + "value": "{{AUTH_CODE}}", + "type": "string" + }, + { + "key": "key", + "value": "Authorization", + "type": "string" + } + ] + }, + "method": "GET", + "header": [], + "url": { + "raw": "{{COUNTRY_RISK_PUBLIC_URL}}/getAllRatingsScoresForEachBpn?datasource[]={\n \"dataSourceName\": \"CPI Rating 2021\",\n \"yearPublished\": 2021\n}&bpns[]={\n \"bpn\": \"BPN-0001\",\n \"country\": \"ES\"\n}&name=John&email=John@email.com&companyName=TestCompany", + "host": [ + "{{COUNTRY_RISK_PUBLIC_URL}}" + ], + "path": [ + "getAllRatingsScoresForEachBpn" + ], + "query": [ + { + "key": "datasource[]", + "value": "{\n \"dataSourceName\": \"CPI Rating 2021\",\n \"yearPublished\": 2021\n}" + }, + { + "key": "bpns[]", + "value": "{\n \"bpn\": \"BPN-0001\",\n \"country\": \"ES\"\n}" + }, + { + "key": "name", + "value": "John" + }, + { + "key": "email", + "value": "John@email.com" + }, + { + "key": "companyName", + "value": "TestCompany" + } + ] + } + }, + "response": [] + }, + { + "name": "Public Api GetAllRatingsForCompany", + "request": { + "auth": { + "type": "apikey", + "apikey": [ + { + "key": "value", + "value": "{{AUTH_CODE}}", + "type": "string" + }, + { + "key": "key", + "value": "Authorization", + "type": "string" + } + ] + }, + "method": "GET", + "header": [], + "url": { + "raw": "{{COUNTRY_RISK_PUBLIC_URL}}/getAllRatingsForCompany?year=2021&name=John&email=John@email.com&companyName=TestCompany", + "host": [ + "{{COUNTRY_RISK_PUBLIC_URL}}" + ], + "path": [ + "getAllRatingsForCompany" + ], + "query": [ + { + "key": "year", + "value": "2021" + }, + { + "key": "name", + "value": "John" + }, + { + "key": "email", + "value": "John@email.com" + }, + { + "key": "companyName", + "value": "TestCompany" + } + ] + } + }, + "response": [] + } + ] + } + ] + } + ] + }, + { + "name": "BPDM", + "item": [ + { + "name": "Check Setups", + "item": [ + { + "name": "Assets", + "item": [ + { + "name": "Get Asset", + "request": { + "method": "POST", + "header": [ + { + "key": "x-api-key", + "value": "{{X-API-KEY}}" + } + ], + "body": { + "mode": "raw", + "raw": "{\r\n \"@context\": {\r\n \"@vocab\": \"https://w3id.org/edc/v0.0.1/ns/\"\r\n },\r\n \"@type\": \"QuerySpec\",\r\n \"offset\": 0,\r\n \"limit\": 10,\r\n \"sortOrder\": \"DESC\",\r\n \"sortField\": \"fieldName\",\r\n \"filterExpression\": []\r\n}", + "options": { + "raw": { + "language": "json" + } + } + }, + "url": { + "raw": "{{PROVIDER_URL}}/management/v3/assets/request", + "host": [ + "{{PROVIDER_URL}}" + ], + "path": [ + "management", + "v3", + "assets", + "request" + ] + } + }, + "response": [] + } + ] + }, + { + "name": "Policy", + "item": [ + { + "name": "Get Policy", + "request": { + "method": "POST", + "header": [ + { + "key": "x-api-key", + "value": "{{X-API-KEY}}" + } + ], + "body": { + "mode": "raw", + "raw": "{\r\n \"@context\": {\r\n \"@vocab\": \"https://w3id.org/edc/v0.0.1/ns/\"\r\n },\r\n \"@type\": \"QuerySpec\",\r\n \"offset\": 0,\r\n \"limit\": 10,\r\n \"sortOrder\": \"DESC\",\r\n \"filterExpression\": []\r\n}", + "options": { + "raw": { + "language": "json" + } + } + }, + "url": { + "raw": "{{BPDM_PROVIDER_URL}}/management/v2/policydefinitions/request", + "host": [ + "{{BPDM_PROVIDER_URL}}" + ], + "path": [ + "management", + "v2", + "policydefinitions", + "request" + ] + } + }, + "response": [] + } + ] + }, + { + "name": "Contracts", + "item": [ + { + "name": "Get Contracts", + "request": { + "method": "POST", + "header": [ + { + "key": "x-api-key", + "value": "{{X-API-KEY}}" + } + ], + "body": { + "mode": "raw", + "raw": "{\r\n \"@context\": {\r\n \"@vocab\": \"https://w3id.org/edc/v0.0.1/ns/\"\r\n },\r\n \"@type\": \"QuerySpec\",\r\n \"offset\": 0,\r\n \"limit\": 10,\r\n \"sortOrder\": \"DESC\",\r\n \"filterExpression\": []\r\n}", + "options": { + "raw": { + "language": "json" + } + } + }, + "url": { + "raw": "{{BPDM_PROVIDER_URL}}/management/v2/contractdefinitions/request", + "host": [ + "{{BPDM_PROVIDER_URL}}" + ], + "path": [ + "management", + "v2", + "contractdefinitions", + "request" + ] + } + }, + "response": [] + }, + { + "name": "Create Contract", + "request": { + "method": "POST", + "header": [ + { + "key": "x-api-key", + "value": "{{X-API-KEY}}" + } + ], + "body": { + "mode": "raw", + "raw": "{\r\n \"@context\": {\r\n \"@vocab\": \"https://w3id.org/edc/v0.0.1/ns/\"\r\n },\r\n \"@id\": \"country-risk-test-to-bpdm4\",\r\n \"@type\": \"ContractDefinition\",\r\n \"accessPolicyId\": \"{{POLICY_ID}}\",\r\n \"contractPolicyId\": \"{{POLICY_ID}}\",\r\n \"assetsSelector\": {\r\n \"@type\": \"CriterionDto\",\r\n \"operandLeft\": \"{{EDC_NAMESPACE}}id\",\r\n \"operator\": \"in\",\r\n \"operandRight\": [\r\n \"ASSETS NEEDEED\"\r\n ]\r\n }\r\n}", + "options": { + "raw": { + "language": "json" + } + } + }, + "url": { + "raw": "{{BPDM_PROVIDER_URL}}/management/v2/contractdefinitions", + "host": [ + "{{BPDM_PROVIDER_URL}}" + ], + "path": [ + "management", + "v2", + "contractdefinitions" + ] + } + }, + "response": [] + } + ] + } + ] + }, + { + "name": "Negotiate Country Risk to BPDM Provider", + "item": [ + { + "name": "Query Catalog", + "item": [ + { + "name": "Query Catalog", + "request": { + "method": "POST", + "header": [ + { + "key": "x-api-key", + "value": "{{X-API-KEY}}" + } + ], + "body": { + "mode": "raw", + "raw": "{\r\n \"@context\": {\r\n \"@vocab\": \"https://w3id.org/edc/v0.0.1/ns/\"\r\n },\r\n \"@type\": \"CatalogRequest\",\r\n \"counterPartyAddress\": \"{{BPDM_PROVIDER_URL_DSP}}\",\r\n \"counterPartyId\": \"{{PROVIDER_ID}}\",\r\n \"protocol\": \"dataspace-protocol-http\",\r\n \"querySpec\": {\r\n \"offset\": 0,\r\n \"limit\": 50,\r\n \"sortOrder\": \"DESC\",\r\n \"sortField\": \"fieldName\",\r\n \"filterExpression\": []\r\n }\r\n}", + "options": { + "raw": { + "language": "json" + } + } + }, + "url": { + "raw": "{{CONSUMER_URL}}/management/v2/catalog/request", + "host": [ + "{{CONSUMER_URL}}" + ], + "path": [ + "management", + "v2", + "catalog", + "request" + ] + } + }, + "response": [] + } + ] + }, + { + "name": "Select Offer", + "item": [ + { + "name": "Select Pool Member Read Access", + "event": [ + { + "listen": "prerequest", + "script": { + "exec": [ + "" + ], + "type": "text/javascript", + "packages": {} + } + }, + { + "listen": "test", + "script": { + "exec": [ + "pm.test(\"Status code is 200\", function () {", + " pm.response.to.have.status(200);", + "});", + "var responseJson = pm.response.json();", + "var offerId = responseJson[\"dcat:dataset\"][\"odrl:hasPolicy\"][\"@id\"];", + "var assetId = responseJson[\"dcat:dataset\"][\"id\"];", + "pm.collectionVariables.set(\"OFFER\", offerId);", + "pm.collectionVariables.set(\"SELECTED_ASSET\", assetId)", + "pm.collectionVariables.set(\"SELECTED_PURPOSE\", \"\")" + ], + "type": "text/javascript", + "packages": {} + } + } + ], + "request": { + "method": "POST", + "header": [ + { + "key": "x-api-key", + "value": "{{X-API-KEY}}" + } + ], + "body": { + "mode": "raw", + "raw": "{\r\n \"@context\": {\r\n \"@vocab\": \"https://w3id.org/edc/v0.0.1/ns/\"\r\n },\r\n \"@type\": \"CatalogRequest\",\r\n \"counterPartyAddress\": \"{{BPDM_PROVIDER_URL_DSP}}\",\r\n \"counterPartyId\": \"{{PROVIDER_ID}}\",\r\n \"protocol\": \"dataspace-protocol-http\",\r\n \"querySpec\": {\r\n \"offset\": 0,\r\n \"limit\": 1,\r\n \"filterExpression\": [\r\n {\r\n \"operandLeft\": \"https://purl.org/dc/terms/subject\",\r\n \"operator\": \"=\",\r\n \"operandRight\": \"cx-taxo:ReadAccessPoolForCatenaXMember\"\r\n },\r\n {\r\n \"operandLeft\": \"https://w3id.org/catenax/ontology/common/version\",\r\n \"operator\": \"=\",\r\n \"operandRight\": \"6.0\"\r\n }\r\n ]\r\n }\r\n}", + "options": { + "raw": { + "language": "json" + } + } + }, + "url": { + "raw": "{{CONSUMER_URL}}/management/v2/catalog/request", + "host": [ + "{{CONSUMER_URL}}" + ], + "path": [ + "management", + "v2", + "catalog", + "request" + ] + } + }, + "response": [] + }, + { + "name": "Select Gate Output Read Access", + "event": [ + { + "listen": "prerequest", + "script": { + "exec": [ + "" + ], + "type": "text/javascript", + "packages": {} + } + }, + { + "listen": "test", + "script": { + "exec": [ + "pm.test(\"Status code is 200\", function () {", + " pm.response.to.have.status(200);", + "});", + "var responseJson = pm.response.json();", + "var offerId = responseJson[\"dcat:dataset\"][\"odrl:hasPolicy\"][\"@id\"];", + "var assetId = responseJson[\"dcat:dataset\"][\"id\"];", + "pm.collectionVariables.set(\"OFFER\", offerId);", + "pm.collectionVariables.set(\"SELECTED_ASSET\", assetId)", + "pm.collectionVariables.set(\"SELECTED_PURPOSE\", \"cx.bpdm.gate.download:1\")" + ], + "type": "text/javascript", + "packages": {} + } + } + ], + "request": { + "auth": { + "type": "noauth" + }, + "method": "POST", + "header": [ + { + "key": "x-api-key", + "value": "{{X-API-KEY}}" + } + ], + "body": { + "mode": "raw", + "raw": "{\r\n \"@context\": {\r\n \"@vocab\": \"https://w3id.org/edc/v0.0.1/ns/\"\r\n },\r\n \"@type\": \"CatalogRequest\",\r\n \"counterPartyAddress\": \"{{BPDM_PROVIDER_URL_DSP}}\",\r\n \"counterPartyId\": \"{{PROVIDER_ID}}\",\r\n \"protocol\": \"dataspace-protocol-http\",\r\n \"querySpec\": {\r\n \"offset\": 0,\r\n \"limit\": 1,\r\n \"filterExpression\": [\r\n {\r\n \"operandLeft\": \"https://purl.org/dc/terms/subject\",\r\n \"operator\": \"=\",\r\n \"operandRight\": \"cx-taxo:ReadAccessGateOutputForSharingMember\"\r\n },\r\n {\r\n \"operandLeft\": \"https://w3id.org/catenax/ontology/common/version\",\r\n \"operator\": \"=\",\r\n \"operandRight\": \"6.0\"\r\n },\r\n {\r\n \"operandLeft\": \"https://w3id.org/edc/v0.0.1/ns/BusinessPartnerNumber\",\r\n \"operator\": \"=\",\r\n \"operandRight\": \"{{BPNL_SHARING_MEMBER}}\"\r\n }\r\n ]\r\n }\r\n}", + "options": { + "raw": { + "language": "json" + } + } + }, + "url": { + "raw": "{{CONSUMER_URL}}/management/v2/catalog/request", + "host": [ + "{{CONSUMER_URL}}" + ], + "path": [ + "management", + "v2", + "catalog", + "request" + ] + } + }, + "response": [] + } + ] + }, + { + "name": "Negotiate", + "item": [ + { + "name": "Initiate EDR Negotation", + "event": [ + { + "listen": "test", + "script": { + "exec": [ + "pm.test(\"Status code is 200\", function () {", + " pm.response.to.have.status(200);", + "});", + "", + "// Parse the JSON response", + "let responseJson = pm.response.json();", + "", + "// Extract the \"@id\" value", + "let negotiationId = responseJson[\"@id\"];", + "", + "// Check if negotiationId is not undefined or empty", + "if (negotiationId) {", + " // Save negotiationId as an environment variable", + " pm.collectionVariables.set(\"negotiationId\", negotiationId);", + " console.log(\"Negotiation ID saved:\", negotiationId);", + "} else {", + " console.log(\"Negotiation ID not found in the response.\");", + "}", + "" + ], + "type": "text/javascript", + "packages": {} + } + } + ], + "request": { + "method": "POST", + "header": [ + { + "key": "x-api-key", + "value": "{{X-API-KEY}}" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"@context\": [\n \"https://w3id.org/tractusx/policy/v1.0.0\",\n \"http://www.w3.org/ns/odrl.jsonld\",\n {\n \"edc\": \"https://w3id.org/edc/v0.0.1/ns/\"\n }\n ],\n \"@type\": \"ContractRequest\",\n \"edc:counterPartyAddress\": \"{{BPDM_PROVIDER_URL_DSP}}\",\n \"edc:protocol\": \"dataspace-protocol-http\",\n \"edc:counterPartyId\": \"{{PROVIDER_ID}}\",\n \"edc:policy\": {\n \"@id\": \"{{OFFER}}\",\n \"@type\": \"Offer\",\n \"permission\": [\n {\n \"action\": \"use\",\n \"constraint\": {\n \"and\": [\n {\n \"leftOperand\": \"FrameworkAgreement\",\n \"operator\": \"eq\",\n \"rightOperand\": \"businessPartner:1.0\"\n },\n {\n \"leftOperand\": \"UsagePurpose\",\n \"operator\": \"eq\",\n \"rightOperand\": \"{{SELECTED_PURPOSE}}\"\n }\n ]\n }\n }\n ],\n \"target\": \"{{SELECTED_ASSET}}\",\n \"assigner\": \"{{PROVIDER_ID}}\"\n }\n}", + "options": { + "raw": { + "language": "json" + } + } + }, + "url": { + "raw": "{{CONSUMER_URL}}/management/v2/edrs", + "host": [ + "{{CONSUMER_URL}}" + ], + "path": [ + "management", + "v2", + "edrs" + ] + } + }, + "response": [] + }, + { + "name": "GET Contract Negotation By Id", + "event": [ + { + "listen": "test", + "script": { + "exec": [ + "pm.test(\"Status code is 200\", function () {", + " pm.response.to.have.status(200);", + "});", + "", + "// Parse the JSON response", + "let responseJson = pm.response.json();", + "", + "// Extract the \"contractAgreementId\" value", + "let contractAgreementId = responseJson[\"contractAgreementId\"];", + "", + "// Check if contractAgreementId is not undefined or empty", + "if (contractAgreementId) {", + " // Save contractAgreementId as an environment variable", + " pm.collectionVariables.set(\"contractAgreementId\", contractAgreementId);", + " console.log(\"Contract Agreement ID saved:\", contractAgreementId);", + "} else {", + " console.log(\"Contract Agreement ID not found in the response.\");", + "}", + "" + ], + "type": "text/javascript", + "packages": {} + } + } + ], + "request": { + "method": "GET", + "header": [ + { + "key": "x-api-key", + "value": "{{X-API-KEY}}", + "type": "text" + } + ], + "url": { + "raw": "{{CONSUMER_URL}}/management/v2/contractnegotiations/{{negotiationId}}", + "host": [ + "{{CONSUMER_URL}}" + ], + "path": [ + "management", + "v2", + "contractnegotiations", + "{{negotiationId}}" + ] + } + }, + "response": [] + }, + { + "name": "Get EDR by agreement ID", + "event": [ + { + "listen": "test", + "script": { + "exec": [ + "pm.test(\"Status code is 200\", function () {", + " pm.response.to.have.status(200);", + "});", + "var responseJson = pm.response.json();", + "var transferProcessId = responseJson[0][\"transferProcessId\"];", + "pm.collectionVariables.set(\"transferProcessId\", transferProcessId);" + ], + "type": "text/javascript", + "packages": {} + } + } + ], + "request": { + "method": "POST", + "header": [ + { + "key": "x-api-key", + "value": "{{X-API-KEY}}" + } + ], + "body": { + "mode": "raw", + "raw": "{\r\n \"@context\": {\r\n \"@vocab\": \"https://w3id.org/edc/v0.0.1/ns/\"\r\n },\r\n \"@type\": \"QuerySpec\",\r\n \"offset\": 0,\r\n \"limit\": 1,\r\n \"filterExpression\": [\r\n {\r\n \"operandLeft\": \"agreementId\",\r\n \"operator\": \"=\",\r\n \"operandRight\": \"{{contractAgreementId}}\"\r\n }\r\n ]\r\n}", + "options": { + "raw": { + "language": "json" + } + } + }, + "url": { + "raw": "{{CONSUMER_URL}}/management/v2/edrs/request", + "host": [ + "{{CONSUMER_URL}}" + ], + "path": [ + "management", + "v2", + "edrs", + "request" + ] + } + }, + "response": [] + }, + { + "name": "Get Authorization", + "event": [ + { + "listen": "test", + "script": { + "exec": [ + "pm.test(\"Status code is 200\", function () {", + " pm.response.to.have.status(200);", + "});", + "var responseJson = pm.response.json();", + "var transferToken = responseJson[\"authorization\"];", + "pm.collectionVariables.set(\"TRANSFER_TOKEN\", transferToken);" + ], + "type": "text/javascript", + "packages": {} + } + } + ], + "protocolProfileBehavior": { + "disableBodyPruning": true + }, + "request": { + "method": "GET", + "header": [ + { + "key": "x-api-key", + "value": "{{X-API-KEY}}" + } + ], + "body": { + "mode": "raw", + "raw": "", + "options": { + "raw": { + "language": "json" + } + } + }, + "url": { + "raw": "{{CONSUMER_URL}}/management/v2/edrs/{{transferProcessId}}/dataaddress?auto_refresh=true", + "host": [ + "{{CONSUMER_URL}}" + ], + "path": [ + "management", + "v2", + "edrs", + "{{transferProcessId}}", + "dataaddress" + ], + "query": [ + { + "key": "auto_refresh", + "value": "true" + } + ] + } + }, + "response": [] + } + ] + }, + { + "name": "Execute Requests", + "item": [ + { + "name": "Gate", + "item": [ + { + "name": "/output/business-partners/search", + "request": { + "auth": { + "type": "apikey", + "apikey": [ + { + "key": "value", + "value": "{{TRANSFER_TOKEN}}", + "type": "string" + }, + { + "key": "key", + "value": "Authorization", + "type": "string" + } + ] + }, + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + }, + { + "key": "Accept", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "[\n\n]", + "options": { + "raw": { + "headerFamily": "json", + "language": "json" + } + } + }, + "url": { + "raw": "{{BPDM_PROVIDER_URL}}/api/public/output/business-partners/search?page=0&size=100", + "host": [ + "{{BPDM_PROVIDER_URL}}" + ], + "path": [ + "api", + "public", + "output", + "business-partners", + "search" + ], + "query": [ + { + "key": "page", + "value": "0", + "description": "Number of page to get results from" + }, + { + "key": "size", + "value": "100", + "description": "Size of each page" + } + ] + }, + "description": "Get page of business partners output data filtered by a collection of external IDs. An empty external ID list will return a paginated list of all business partners." + }, + "response": [ + { + "name": "The requested page of business partners", + "originalRequest": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + }, + { + "key": "Accept", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "[\n \"\",\n \"\"\n]", + "options": { + "raw": { + "headerFamily": "json", + "language": "json" + } + } + }, + "url": { + "raw": "{{baseUrl}}/output/business-partners/search?page=0&size=10", + "host": [ + "{{baseUrl}}" + ], + "path": [ + "output", + "business-partners", + "search" + ], + "query": [ + { + "key": "page", + "value": "0", + "description": "Number of page to get results from" + }, + { + "key": "size", + "value": "10", + "description": "Size of each page" + } + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"content\": [\n {\n \"address\": {\n \"addressBpn\": \"\",\n \"alternativePostalAddress\": {\n \"geographicCoordinates\": {\n \"latitude\": \"\",\n \"longitude\": \"\",\n \"altitude\": \"\"\n },\n \"country\": \"ZA\",\n \"administrativeAreaLevel1\": \"\",\n \"postalCode\": \"\",\n \"city\": \"\",\n \"deliveryServiceType\": \"PRIVATE_BAG\",\n \"deliveryServiceQualifier\": \"\",\n \"deliveryServiceNumber\": \"\"\n },\n \"confidenceCriteria\": {\n \"checkedByExternalDataSource\": \"\",\n \"confidenceLevel\": \"\",\n \"lastConfidenceCheckAt\": \"\",\n \"nextConfidenceCheckAt\": \"\",\n \"numberOfSharingMembers\": \"\",\n \"sharedByOwner\": \"\"\n },\n \"physicalPostalAddress\": {\n \"geographicCoordinates\": {\n \"latitude\": \"\",\n \"longitude\": \"\",\n \"altitude\": \"\"\n },\n \"country\": \"EA\",\n \"administrativeAreaLevel1\": \"\",\n \"administrativeAreaLevel2\": \"\",\n \"administrativeAreaLevel3\": \"\",\n \"postalCode\": \"\",\n \"city\": \"\",\n \"district\": \"\",\n \"street\": {\n \"namePrefix\": \"\",\n \"additionalNamePrefix\": \"\",\n \"name\": \"\",\n \"nameSuffix\": \"\",\n \"additionalNameSuffix\": \"\",\n \"houseNumber\": \"\",\n \"houseNumberSupplement\": \"\",\n \"milestone\": \"\",\n \"direction\": \"\"\n },\n \"companyPostalCode\": \"\",\n \"industrialZone\": \"\",\n \"building\": \"\",\n \"floor\": \"\",\n \"door\": \"\"\n },\n \"states\": [\n {\n \"validFrom\": \"\",\n \"validTo\": \"\",\n \"type\": \"INACTIVE\"\n },\n {\n \"validFrom\": \"\",\n \"validTo\": \"\",\n \"type\": \"ACTIVE\"\n }\n ],\n \"name\": \"\",\n \"addressType\": \"SiteMainAddress\"\n },\n \"createdAt\": \"\",\n \"externalId\": \"\",\n \"identifiers\": [\n {\n \"type\": \"\",\n \"value\": \"\",\n \"issuingBody\": \"\"\n },\n {\n \"type\": \"\",\n \"value\": \"\",\n \"issuingBody\": \"\"\n }\n ],\n \"isOwnCompanyData\": \"\",\n \"legalEntity\": {\n \"confidenceCriteria\": {\n \"checkedByExternalDataSource\": \"\",\n \"confidenceLevel\": \"\",\n \"lastConfidenceCheckAt\": \"\",\n \"nextConfidenceCheckAt\": \"\",\n \"numberOfSharingMembers\": \"\",\n \"sharedByOwner\": \"\"\n },\n \"legalEntityBpn\": \"\",\n \"states\": [\n {\n \"validFrom\": \"\",\n \"validTo\": \"\",\n \"type\": \"ACTIVE\"\n },\n {\n \"validFrom\": \"\",\n \"validTo\": \"\",\n \"type\": \"INACTIVE\"\n }\n ],\n \"legalName\": \"\",\n \"shortName\": \"\",\n \"legalForm\": \"\"\n },\n \"nameParts\": [\n \"\",\n \"\"\n ],\n \"roles\": [\n \"ONE_TIME_SUPPLIER\",\n \"ONE_TIME_CUSTOMER\"\n ],\n \"states\": [\n {\n \"validFrom\": \"\",\n \"validTo\": \"\",\n \"type\": \"INACTIVE\"\n },\n {\n \"validFrom\": \"\",\n \"validTo\": \"\",\n \"type\": \"ACTIVE\"\n }\n ],\n \"updatedAt\": \"\",\n \"site\": {\n \"confidenceCriteria\": {\n \"checkedByExternalDataSource\": \"\",\n \"confidenceLevel\": \"\",\n \"lastConfidenceCheckAt\": \"\",\n \"nextConfidenceCheckAt\": \"\",\n \"numberOfSharingMembers\": \"\",\n \"sharedByOwner\": \"\"\n },\n \"siteBpn\": \"\",\n \"states\": [\n {\n \"validFrom\": \"\",\n \"validTo\": \"\",\n \"type\": \"INACTIVE\"\n },\n {\n \"validFrom\": \"\",\n \"validTo\": \"\",\n \"type\": \"ACTIVE\"\n }\n ],\n \"name\": \"\"\n }\n },\n {\n \"address\": {\n \"addressBpn\": \"\",\n \"alternativePostalAddress\": {\n \"geographicCoordinates\": {\n \"latitude\": \"\",\n \"longitude\": \"\",\n \"altitude\": \"\"\n },\n \"country\": \"JM\",\n \"administrativeAreaLevel1\": \"\",\n \"postalCode\": \"\",\n \"city\": \"\",\n \"deliveryServiceType\": \"PO_BOX\",\n \"deliveryServiceQualifier\": \"\",\n \"deliveryServiceNumber\": \"\"\n },\n \"confidenceCriteria\": {\n \"checkedByExternalDataSource\": \"\",\n \"confidenceLevel\": \"\",\n \"lastConfidenceCheckAt\": \"\",\n \"nextConfidenceCheckAt\": \"\",\n \"numberOfSharingMembers\": \"\",\n \"sharedByOwner\": \"\"\n },\n \"physicalPostalAddress\": {\n \"geographicCoordinates\": {\n \"latitude\": \"\",\n \"longitude\": \"\",\n \"altitude\": \"\"\n },\n \"country\": \"KE\",\n \"administrativeAreaLevel1\": \"\",\n \"administrativeAreaLevel2\": \"\",\n \"administrativeAreaLevel3\": \"\",\n \"postalCode\": \"\",\n \"city\": \"\",\n \"district\": \"\",\n \"street\": {\n \"namePrefix\": \"\",\n \"additionalNamePrefix\": \"\",\n \"name\": \"\",\n \"nameSuffix\": \"\",\n \"additionalNameSuffix\": \"\",\n \"houseNumber\": \"\",\n \"houseNumberSupplement\": \"\",\n \"milestone\": \"\",\n \"direction\": \"\"\n },\n \"companyPostalCode\": \"\",\n \"industrialZone\": \"\",\n \"building\": \"\",\n \"floor\": \"\",\n \"door\": \"\"\n },\n \"states\": [\n {\n \"validFrom\": \"\",\n \"validTo\": \"\",\n \"type\": \"INACTIVE\"\n },\n {\n \"validFrom\": \"\",\n \"validTo\": \"\",\n \"type\": \"INACTIVE\"\n }\n ],\n \"name\": \"\",\n \"addressType\": \"LegalAndSiteMainAddress\"\n },\n \"createdAt\": \"\",\n \"externalId\": \"\",\n \"identifiers\": [\n {\n \"type\": \"\",\n \"value\": \"\",\n \"issuingBody\": \"\"\n },\n {\n \"type\": \"\",\n \"value\": \"\",\n \"issuingBody\": \"\"\n }\n ],\n \"isOwnCompanyData\": \"\",\n \"legalEntity\": {\n \"confidenceCriteria\": {\n \"checkedByExternalDataSource\": \"\",\n \"confidenceLevel\": \"\",\n \"lastConfidenceCheckAt\": \"\",\n \"nextConfidenceCheckAt\": \"\",\n \"numberOfSharingMembers\": \"\",\n \"sharedByOwner\": \"\"\n },\n \"legalEntityBpn\": \"\",\n \"states\": [\n {\n \"validFrom\": \"\",\n \"validTo\": \"\",\n \"type\": \"INACTIVE\"\n },\n {\n \"validFrom\": \"\",\n \"validTo\": \"\",\n \"type\": \"INACTIVE\"\n }\n ],\n \"legalName\": \"\",\n \"shortName\": \"\",\n \"legalForm\": \"\"\n },\n \"nameParts\": [\n \"\",\n \"\"\n ],\n \"roles\": [\n \"SUPPLIER\",\n \"ONE_TIME_SUPPLIER\"\n ],\n \"states\": [\n {\n \"validFrom\": \"\",\n \"validTo\": \"\",\n \"type\": \"ACTIVE\"\n },\n {\n \"validFrom\": \"\",\n \"validTo\": \"\",\n \"type\": \"ACTIVE\"\n }\n ],\n \"updatedAt\": \"\",\n \"site\": {\n \"confidenceCriteria\": {\n \"checkedByExternalDataSource\": \"\",\n \"confidenceLevel\": \"\",\n \"lastConfidenceCheckAt\": \"\",\n \"nextConfidenceCheckAt\": \"\",\n \"numberOfSharingMembers\": \"\",\n \"sharedByOwner\": \"\"\n },\n \"siteBpn\": \"\",\n \"states\": [\n {\n \"validFrom\": \"\",\n \"validTo\": \"\",\n \"type\": \"ACTIVE\"\n },\n {\n \"validFrom\": \"\",\n \"validTo\": \"\",\n \"type\": \"ACTIVE\"\n }\n ],\n \"name\": \"\"\n }\n }\n ],\n \"contentSize\": \"\",\n \"page\": \"\",\n \"totalElements\": \"\",\n \"totalPages\": \"\"\n}" + }, + { + "name": "On malformed pagination request", + "originalRequest": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "[\n \"\",\n \"\"\n]", + "options": { + "raw": { + "headerFamily": "json", + "language": "json" + } + } + }, + "url": { + "raw": "{{baseUrl}}/output/business-partners/search?page=0&size=10", + "host": [ + "{{baseUrl}}" + ], + "path": [ + "output", + "business-partners", + "search" + ], + "query": [ + { + "key": "page", + "value": "0", + "description": "Number of page to get results from" + }, + { + "key": "size", + "value": "10", + "description": "Size of each page" + } + ] + } + }, + "status": "Bad Request", + "code": 400, + "_postman_previewlanguage": "text", + "header": [], + "cookie": [], + "body": "" + } + ] + } + ] + }, + { + "name": "Pool", + "item": [ + { + "name": "/members/legal-entities/search", + "request": { + "auth": { + "type": "apikey", + "apikey": [ + { + "key": "value", + "value": "{{TRANSFER_TOKEN}}", + "type": "string" + }, + { + "key": "key", + "value": "Authorization", + "type": "string" + } + ] + }, + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + }, + { + "key": "Accept", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"bpnLs\": [\n\n ],\n \"legalName\": \"\"\n}", + "options": { + "raw": { + "headerFamily": "json", + "language": "json" + } + } + }, + "url": { + "raw": "{{BPDM_PROVIDER_URL}}/api/public/members/legal-entities/search?page=0&size=10", + "host": [ + "{{BPDM_PROVIDER_URL}}" + ], + "path": [ + "api", + "public", + "members", + "legal-entities", + "search" + ], + "query": [ + { + "key": "page", + "value": "0", + "description": "Number of page to get results from" + }, + { + "key": "size", + "value": "10", + "description": "Size of each page" + } + ] + } + }, + "response": [ + { + "name": "OK", + "originalRequest": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + }, + { + "key": "Accept", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"bpnLs\": [\n \"\",\n \"\"\n ],\n \"legalName\": \"\"\n}", + "options": { + "raw": { + "headerFamily": "json", + "language": "json" + } + } + }, + "url": { + "raw": "{{baseUrl}}/members/legal-entities/search?page=0&size=10", + "host": [ + "{{baseUrl}}" + ], + "path": [ + "members", + "legal-entities", + "search" + ], + "query": [ + { + "key": "page", + "value": "0", + "description": "Number of page to get results from" + }, + { + "key": "size", + "value": "10", + "description": "Size of each page" + } + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"content\": [\n {\n \"bpnl\": \"\",\n \"confidenceCriteria\": {\n \"checkedByExternalDataSource\": \"\",\n \"confidenceLevel\": \"\",\n \"lastConfidenceCheckAt\": \"\",\n \"nextConfidenceCheckAt\": \"\",\n \"numberOfSharingMembers\": \"\",\n \"sharedByOwner\": \"\"\n },\n \"createdAt\": \"\",\n \"currentness\": \"\",\n \"identifiers\": [\n {\n \"type\": {\n \"name\": \"\",\n \"technicalKey\": \"\"\n },\n \"value\": \"\",\n \"issuingBody\": \"\"\n },\n {\n \"type\": {\n \"name\": \"\",\n \"technicalKey\": \"\"\n },\n \"value\": \"\",\n \"issuingBody\": \"\"\n }\n ],\n \"isCatenaXMemberData\": \"\",\n \"legalAddress\": {\n \"bpna\": \"\",\n \"confidenceCriteria\": {\n \"checkedByExternalDataSource\": \"\",\n \"confidenceLevel\": \"\",\n \"lastConfidenceCheckAt\": \"\",\n \"nextConfidenceCheckAt\": \"\",\n \"numberOfSharingMembers\": \"\",\n \"sharedByOwner\": \"\"\n },\n \"createdAt\": \"\",\n \"identifiers\": [\n {\n \"type\": {\n \"name\": \"\",\n \"technicalKey\": \"\"\n },\n \"value\": \"\"\n },\n {\n \"type\": {\n \"name\": \"\",\n \"technicalKey\": \"\"\n },\n \"value\": \"\"\n }\n ],\n \"isCatenaXMemberData\": \"\",\n \"physicalPostalAddress\": {\n \"city\": \"\",\n \"country\": {\n \"name\": \"\",\n \"technicalKey\": \"AT\"\n },\n \"geographicCoordinates\": {\n \"latitude\": \"\",\n \"longitude\": \"\",\n \"altitude\": \"\"\n },\n \"administrativeAreaLevel1\": {\n \"countryCode\": \"KH\",\n \"regionCode\": \"\",\n \"regionName\": \"\"\n },\n \"administrativeAreaLevel2\": \"\",\n \"administrativeAreaLevel3\": \"\",\n \"postalCode\": \"\",\n \"district\": \"\",\n \"street\": {\n \"name\": \"\",\n \"houseNumber\": \"\",\n \"houseNumberSupplement\": \"\",\n \"milestone\": \"\",\n \"direction\": \"\",\n \"namePrefix\": \"\",\n \"additionalNamePrefix\": \"\",\n \"nameSuffix\": \"\",\n \"additionalNameSuffix\": \"\"\n },\n \"companyPostalCode\": \"\",\n \"industrialZone\": \"\",\n \"building\": \"\",\n \"floor\": \"\",\n \"door\": \"\"\n },\n \"states\": [\n {\n \"type\": {\n \"name\": \"\",\n \"technicalKey\": \"INACTIVE\"\n },\n \"validFrom\": \"\",\n \"validTo\": \"\"\n },\n {\n \"type\": {\n \"name\": \"\",\n \"technicalKey\": \"ACTIVE\"\n },\n \"validFrom\": \"\",\n \"validTo\": \"\"\n }\n ],\n \"updatedAt\": \"\",\n \"name\": \"\",\n \"alternativePostalAddress\": {\n \"city\": \"\",\n \"country\": {\n \"name\": \"\",\n \"technicalKey\": \"RW\"\n },\n \"deliveryServiceNumber\": \"\",\n \"deliveryServiceType\": \"PO_BOX\",\n \"geographicCoordinates\": {\n \"latitude\": \"\",\n \"longitude\": \"\",\n \"altitude\": \"\"\n },\n \"administrativeAreaLevel1\": {\n \"countryCode\": \"QA\",\n \"regionCode\": \"\",\n \"regionName\": \"\"\n },\n \"postalCode\": \"\",\n \"deliveryServiceQualifier\": \"\"\n },\n \"bpnLegalEntity\": \"\",\n \"bpnSite\": \"\",\n \"addressType\": \"LegalAddress\"\n },\n \"legalName\": \"\",\n \"relations\": [\n {\n \"endBpnl\": \"\",\n \"startBpnl\": \"\",\n \"type\": {\n \"name\": \"\",\n \"technicalKey\": \"CX_LEGAL_PREDECESSOR_OF\"\n },\n \"validFrom\": \"\",\n \"validTo\": \"\"\n },\n {\n \"endBpnl\": \"\",\n \"startBpnl\": \"\",\n \"type\": {\n \"name\": \"\",\n \"technicalKey\": \"CX_LEGAL_PREDECESSOR_OF\"\n },\n \"validFrom\": \"\",\n \"validTo\": \"\"\n }\n ],\n \"states\": [\n {\n \"type\": {\n \"name\": \"\",\n \"technicalKey\": \"ACTIVE\"\n },\n \"validFrom\": \"\",\n \"validTo\": \"\"\n },\n {\n \"type\": {\n \"name\": \"\",\n \"technicalKey\": \"INACTIVE\"\n },\n \"validFrom\": \"\",\n \"validTo\": \"\"\n }\n ],\n \"updatedAt\": \"\",\n \"legalShortName\": \"\",\n \"legalForm\": {\n \"name\": \"\",\n \"technicalKey\": \"\",\n \"abbreviation\": \"\"\n }\n },\n {\n \"bpnl\": \"\",\n \"confidenceCriteria\": {\n \"checkedByExternalDataSource\": \"\",\n \"confidenceLevel\": \"\",\n \"lastConfidenceCheckAt\": \"\",\n \"nextConfidenceCheckAt\": \"\",\n \"numberOfSharingMembers\": \"\",\n \"sharedByOwner\": \"\"\n },\n \"createdAt\": \"\",\n \"currentness\": \"\",\n \"identifiers\": [\n {\n \"type\": {\n \"name\": \"\",\n \"technicalKey\": \"\"\n },\n \"value\": \"\",\n \"issuingBody\": \"\"\n },\n {\n \"type\": {\n \"name\": \"\",\n \"technicalKey\": \"\"\n },\n \"value\": \"\",\n \"issuingBody\": \"\"\n }\n ],\n \"isCatenaXMemberData\": \"\",\n \"legalAddress\": {\n \"bpna\": \"\",\n \"confidenceCriteria\": {\n \"checkedByExternalDataSource\": \"\",\n \"confidenceLevel\": \"\",\n \"lastConfidenceCheckAt\": \"\",\n \"nextConfidenceCheckAt\": \"\",\n \"numberOfSharingMembers\": \"\",\n \"sharedByOwner\": \"\"\n },\n \"createdAt\": \"\",\n \"identifiers\": [\n {\n \"type\": {\n \"name\": \"\",\n \"technicalKey\": \"\"\n },\n \"value\": \"\"\n },\n {\n \"type\": {\n \"name\": \"\",\n \"technicalKey\": \"\"\n },\n \"value\": \"\"\n }\n ],\n \"isCatenaXMemberData\": \"\",\n \"physicalPostalAddress\": {\n \"city\": \"\",\n \"country\": {\n \"name\": \"\",\n \"technicalKey\": \"UM\"\n },\n \"geographicCoordinates\": {\n \"latitude\": \"\",\n \"longitude\": \"\",\n \"altitude\": \"\"\n },\n \"administrativeAreaLevel1\": {\n \"countryCode\": \"JE\",\n \"regionCode\": \"\",\n \"regionName\": \"\"\n },\n \"administrativeAreaLevel2\": \"\",\n \"administrativeAreaLevel3\": \"\",\n \"postalCode\": \"\",\n \"district\": \"\",\n \"street\": {\n \"name\": \"\",\n \"houseNumber\": \"\",\n \"houseNumberSupplement\": \"\",\n \"milestone\": \"\",\n \"direction\": \"\",\n \"namePrefix\": \"\",\n \"additionalNamePrefix\": \"\",\n \"nameSuffix\": \"\",\n \"additionalNameSuffix\": \"\"\n },\n \"companyPostalCode\": \"\",\n \"industrialZone\": \"\",\n \"building\": \"\",\n \"floor\": \"\",\n \"door\": \"\"\n },\n \"states\": [\n {\n \"type\": {\n \"name\": \"\",\n \"technicalKey\": \"ACTIVE\"\n },\n \"validFrom\": \"\",\n \"validTo\": \"\"\n },\n {\n \"type\": {\n \"name\": \"\",\n \"technicalKey\": \"ACTIVE\"\n },\n \"validFrom\": \"\",\n \"validTo\": \"\"\n }\n ],\n \"updatedAt\": \"\",\n \"name\": \"\",\n \"alternativePostalAddress\": {\n \"city\": \"\",\n \"country\": {\n \"name\": \"\",\n \"technicalKey\": \"GP\"\n },\n \"deliveryServiceNumber\": \"\",\n \"deliveryServiceType\": \"PO_BOX\",\n \"geographicCoordinates\": {\n \"latitude\": \"\",\n \"longitude\": \"\",\n \"altitude\": \"\"\n },\n \"administrativeAreaLevel1\": {\n \"countryCode\": \"PT\",\n \"regionCode\": \"\",\n \"regionName\": \"\"\n },\n \"postalCode\": \"\",\n \"deliveryServiceQualifier\": \"\"\n },\n \"bpnLegalEntity\": \"\",\n \"bpnSite\": \"\",\n \"addressType\": \"LegalAndSiteMainAddress\"\n },\n \"legalName\": \"\",\n \"relations\": [\n {\n \"endBpnl\": \"\",\n \"startBpnl\": \"\",\n \"type\": {\n \"name\": \"\",\n \"technicalKey\": \"CX_LEGAL_SUCCESSOR_OF\"\n },\n \"validFrom\": \"\",\n \"validTo\": \"\"\n },\n {\n \"endBpnl\": \"\",\n \"startBpnl\": \"\",\n \"type\": {\n \"name\": \"\",\n \"technicalKey\": \"CX_LEGAL_PREDECESSOR_OF\"\n },\n \"validFrom\": \"\",\n \"validTo\": \"\"\n }\n ],\n \"states\": [\n {\n \"type\": {\n \"name\": \"\",\n \"technicalKey\": \"INACTIVE\"\n },\n \"validFrom\": \"\",\n \"validTo\": \"\"\n },\n {\n \"type\": {\n \"name\": \"\",\n \"technicalKey\": \"ACTIVE\"\n },\n \"validFrom\": \"\",\n \"validTo\": \"\"\n }\n ],\n \"updatedAt\": \"\",\n \"legalShortName\": \"\",\n \"legalForm\": {\n \"name\": \"\",\n \"technicalKey\": \"\",\n \"abbreviation\": \"\"\n }\n }\n ],\n \"contentSize\": \"\",\n \"page\": \"\",\n \"totalElements\": \"\",\n \"totalPages\": \"\"\n}" + } + ] + }, + { + "name": "/members/sites/search Copy", + "request": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + }, + { + "key": "Accept", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"legalEntityBpns\": [\n \"\",\n \"\"\n ],\n \"siteBpns\": [\n \"\",\n \"\"\n ],\n \"name\": \"\"\n}", + "options": { + "raw": { + "headerFamily": "json", + "language": "json" + } + } + }, + "url": { + "raw": "{{baseUrl}}/members/sites/search?page=0&size=10", + "host": [ + "{{baseUrl}}" + ], + "path": [ + "members", + "sites", + "search" + ], + "query": [ + { + "key": "page", + "value": "0", + "description": "Number of page to get results from" + }, + { + "key": "size", + "value": "10", + "description": "Size of each page" + } + ] + } + }, + "response": [ + { + "name": "OK", + "originalRequest": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + }, + { + "key": "Accept", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"legalEntityBpns\": [\n \"\",\n \"\"\n ],\n \"siteBpns\": [\n \"\",\n \"\"\n ],\n \"name\": \"\"\n}", + "options": { + "raw": { + "headerFamily": "json", + "language": "json" + } + } + }, + "url": { + "raw": "{{baseUrl}}/members/sites/search?page=0&size=10", + "host": [ + "{{baseUrl}}" + ], + "path": [ + "members", + "sites", + "search" + ], + "query": [ + { + "key": "page", + "value": "0", + "description": "Number of page to get results from" + }, + { + "key": "size", + "value": "10", + "description": "Size of each page" + } + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"content\": [\n {\n \"bpnLegalEntity\": \"\",\n \"bpns\": \"\",\n \"confidenceCriteria\": {\n \"checkedByExternalDataSource\": \"\",\n \"confidenceLevel\": \"\",\n \"lastConfidenceCheckAt\": \"\",\n \"nextConfidenceCheckAt\": \"\",\n \"numberOfSharingMembers\": \"\",\n \"sharedByOwner\": \"\"\n },\n \"createdAt\": \"\",\n \"isCatenaXMemberData\": \"\",\n \"mainAddress\": {\n \"bpna\": \"\",\n \"confidenceCriteria\": {\n \"checkedByExternalDataSource\": \"\",\n \"confidenceLevel\": \"\",\n \"lastConfidenceCheckAt\": \"\",\n \"nextConfidenceCheckAt\": \"\",\n \"numberOfSharingMembers\": \"\",\n \"sharedByOwner\": \"\"\n },\n \"createdAt\": \"\",\n \"identifiers\": [\n {\n \"type\": {\n \"name\": \"\",\n \"technicalKey\": \"\"\n },\n \"value\": \"\"\n },\n {\n \"type\": {\n \"name\": \"\",\n \"technicalKey\": \"\"\n },\n \"value\": \"\"\n }\n ],\n \"isCatenaXMemberData\": \"\",\n \"physicalPostalAddress\": {\n \"city\": \"\",\n \"country\": {\n \"name\": \"\",\n \"technicalKey\": \"KY\"\n },\n \"geographicCoordinates\": {\n \"latitude\": \"\",\n \"longitude\": \"\",\n \"altitude\": \"\"\n },\n \"administrativeAreaLevel1\": {\n \"countryCode\": \"IL\",\n \"regionCode\": \"\",\n \"regionName\": \"\"\n },\n \"administrativeAreaLevel2\": \"\",\n \"administrativeAreaLevel3\": \"\",\n \"postalCode\": \"\",\n \"district\": \"\",\n \"street\": {\n \"name\": \"\",\n \"houseNumber\": \"\",\n \"houseNumberSupplement\": \"\",\n \"milestone\": \"\",\n \"direction\": \"\",\n \"namePrefix\": \"\",\n \"additionalNamePrefix\": \"\",\n \"nameSuffix\": \"\",\n \"additionalNameSuffix\": \"\"\n },\n \"companyPostalCode\": \"\",\n \"industrialZone\": \"\",\n \"building\": \"\",\n \"floor\": \"\",\n \"door\": \"\"\n },\n \"states\": [\n {\n \"type\": {\n \"name\": \"\",\n \"technicalKey\": \"INACTIVE\"\n },\n \"validFrom\": \"\",\n \"validTo\": \"\"\n },\n {\n \"type\": {\n \"name\": \"\",\n \"technicalKey\": \"INACTIVE\"\n },\n \"validFrom\": \"\",\n \"validTo\": \"\"\n }\n ],\n \"updatedAt\": \"\",\n \"name\": \"\",\n \"alternativePostalAddress\": {\n \"city\": \"\",\n \"country\": {\n \"name\": \"\",\n \"technicalKey\": \"AI\"\n },\n \"deliveryServiceNumber\": \"\",\n \"deliveryServiceType\": \"PRIVATE_BAG\",\n \"geographicCoordinates\": {\n \"latitude\": \"\",\n \"longitude\": \"\",\n \"altitude\": \"\"\n },\n \"administrativeAreaLevel1\": {\n \"countryCode\": \"XU\",\n \"regionCode\": \"\",\n \"regionName\": \"\"\n },\n \"postalCode\": \"\",\n \"deliveryServiceQualifier\": \"\"\n },\n \"bpnLegalEntity\": \"\",\n \"bpnSite\": \"\",\n \"addressType\": \"LegalAndSiteMainAddress\"\n },\n \"name\": \"\",\n \"states\": [\n {\n \"type\": {\n \"name\": \"\",\n \"technicalKey\": \"ACTIVE\"\n },\n \"validFrom\": \"\",\n \"validTo\": \"\"\n },\n {\n \"type\": {\n \"name\": \"\",\n \"technicalKey\": \"INACTIVE\"\n },\n \"validFrom\": \"\",\n \"validTo\": \"\"\n }\n ],\n \"updatedAt\": \"\"\n },\n {\n \"bpnLegalEntity\": \"\",\n \"bpns\": \"\",\n \"confidenceCriteria\": {\n \"checkedByExternalDataSource\": \"\",\n \"confidenceLevel\": \"\",\n \"lastConfidenceCheckAt\": \"\",\n \"nextConfidenceCheckAt\": \"\",\n \"numberOfSharingMembers\": \"\",\n \"sharedByOwner\": \"\"\n },\n \"createdAt\": \"\",\n \"isCatenaXMemberData\": \"\",\n \"mainAddress\": {\n \"bpna\": \"\",\n \"confidenceCriteria\": {\n \"checkedByExternalDataSource\": \"\",\n \"confidenceLevel\": \"\",\n \"lastConfidenceCheckAt\": \"\",\n \"nextConfidenceCheckAt\": \"\",\n \"numberOfSharingMembers\": \"\",\n \"sharedByOwner\": \"\"\n },\n \"createdAt\": \"\",\n \"identifiers\": [\n {\n \"type\": {\n \"name\": \"\",\n \"technicalKey\": \"\"\n },\n \"value\": \"\"\n },\n {\n \"type\": {\n \"name\": \"\",\n \"technicalKey\": \"\"\n },\n \"value\": \"\"\n }\n ],\n \"isCatenaXMemberData\": \"\",\n \"physicalPostalAddress\": {\n \"city\": \"\",\n \"country\": {\n \"name\": \"\",\n \"technicalKey\": \"LB\"\n },\n \"geographicCoordinates\": {\n \"latitude\": \"\",\n \"longitude\": \"\",\n \"altitude\": \"\"\n },\n \"administrativeAreaLevel1\": {\n \"countryCode\": \"PH\",\n \"regionCode\": \"\",\n \"regionName\": \"\"\n },\n \"administrativeAreaLevel2\": \"\",\n \"administrativeAreaLevel3\": \"\",\n \"postalCode\": \"\",\n \"district\": \"\",\n \"street\": {\n \"name\": \"\",\n \"houseNumber\": \"\",\n \"houseNumberSupplement\": \"\",\n \"milestone\": \"\",\n \"direction\": \"\",\n \"namePrefix\": \"\",\n \"additionalNamePrefix\": \"\",\n \"nameSuffix\": \"\",\n \"additionalNameSuffix\": \"\"\n },\n \"companyPostalCode\": \"\",\n \"industrialZone\": \"\",\n \"building\": \"\",\n \"floor\": \"\",\n \"door\": \"\"\n },\n \"states\": [\n {\n \"type\": {\n \"name\": \"\",\n \"technicalKey\": \"ACTIVE\"\n },\n \"validFrom\": \"\",\n \"validTo\": \"\"\n },\n {\n \"type\": {\n \"name\": \"\",\n \"technicalKey\": \"INACTIVE\"\n },\n \"validFrom\": \"\",\n \"validTo\": \"\"\n }\n ],\n \"updatedAt\": \"\",\n \"name\": \"\",\n \"alternativePostalAddress\": {\n \"city\": \"\",\n \"country\": {\n \"name\": \"\",\n \"technicalKey\": \"PS\"\n },\n \"deliveryServiceNumber\": \"\",\n \"deliveryServiceType\": \"PO_BOX\",\n \"geographicCoordinates\": {\n \"latitude\": \"\",\n \"longitude\": \"\",\n \"altitude\": \"\"\n },\n \"administrativeAreaLevel1\": {\n \"countryCode\": \"AT\",\n \"regionCode\": \"\",\n \"regionName\": \"\"\n },\n \"postalCode\": \"\",\n \"deliveryServiceQualifier\": \"\"\n },\n \"bpnLegalEntity\": \"\",\n \"bpnSite\": \"\",\n \"addressType\": \"LegalAddress\"\n },\n \"name\": \"\",\n \"states\": [\n {\n \"type\": {\n \"name\": \"\",\n \"technicalKey\": \"INACTIVE\"\n },\n \"validFrom\": \"\",\n \"validTo\": \"\"\n },\n {\n \"type\": {\n \"name\": \"\",\n \"technicalKey\": \"ACTIVE\"\n },\n \"validFrom\": \"\",\n \"validTo\": \"\"\n }\n ],\n \"updatedAt\": \"\"\n }\n ],\n \"contentSize\": \"\",\n \"page\": \"\",\n \"totalElements\": \"\",\n \"totalPages\": \"\"\n}" + } + ] + }, + { + "name": "/members/addresses/search Copy", + "request": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + }, + { + "key": "Accept", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"addressBpns\": [\n \"\",\n \"\"\n ],\n \"legalEntityBpns\": [\n \"\",\n \"\"\n ],\n \"siteBpns\": [\n \"\",\n \"\"\n ],\n \"name\": \"\"\n}", + "options": { + "raw": { + "headerFamily": "json", + "language": "json" + } + } + }, + "url": { + "raw": "{{baseUrl}}/members/addresses/search?page=0&size=10", + "host": [ + "{{baseUrl}}" + ], + "path": [ + "members", + "addresses", + "search" + ], + "query": [ + { + "key": "page", + "value": "0", + "description": "Number of page to get results from" + }, + { + "key": "size", + "value": "10", + "description": "Size of each page" + } + ] + } + }, + "response": [ + { + "name": "OK", + "originalRequest": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + }, + { + "key": "Accept", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"addressBpns\": [\n \"\",\n \"\"\n ],\n \"legalEntityBpns\": [\n \"\",\n \"\"\n ],\n \"siteBpns\": [\n \"\",\n \"\"\n ],\n \"name\": \"\"\n}", + "options": { + "raw": { + "headerFamily": "json", + "language": "json" + } + } + }, + "url": { + "raw": "{{baseUrl}}/members/addresses/search?page=0&size=10", + "host": [ + "{{baseUrl}}" + ], + "path": [ + "members", + "addresses", + "search" + ], + "query": [ + { + "key": "page", + "value": "0", + "description": "Number of page to get results from" + }, + { + "key": "size", + "value": "10", + "description": "Size of each page" + } + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"content\": [\n {\n \"bpna\": \"\",\n \"confidenceCriteria\": {\n \"checkedByExternalDataSource\": \"\",\n \"confidenceLevel\": \"\",\n \"lastConfidenceCheckAt\": \"\",\n \"nextConfidenceCheckAt\": \"\",\n \"numberOfSharingMembers\": \"\",\n \"sharedByOwner\": \"\"\n },\n \"createdAt\": \"\",\n \"identifiers\": [\n {\n \"type\": {\n \"name\": \"\",\n \"technicalKey\": \"\"\n },\n \"value\": \"\"\n },\n {\n \"type\": {\n \"name\": \"\",\n \"technicalKey\": \"\"\n },\n \"value\": \"\"\n }\n ],\n \"isCatenaXMemberData\": \"\",\n \"physicalPostalAddress\": {\n \"city\": \"\",\n \"country\": {\n \"name\": \"\",\n \"technicalKey\": \"RE\"\n },\n \"geographicCoordinates\": {\n \"latitude\": \"\",\n \"longitude\": \"\",\n \"altitude\": \"\"\n },\n \"administrativeAreaLevel1\": {\n \"countryCode\": \"VG\",\n \"regionCode\": \"\",\n \"regionName\": \"\"\n },\n \"administrativeAreaLevel2\": \"\",\n \"administrativeAreaLevel3\": \"\",\n \"postalCode\": \"\",\n \"district\": \"\",\n \"street\": {\n \"name\": \"\",\n \"houseNumber\": \"\",\n \"houseNumberSupplement\": \"\",\n \"milestone\": \"\",\n \"direction\": \"\",\n \"namePrefix\": \"\",\n \"additionalNamePrefix\": \"\",\n \"nameSuffix\": \"\",\n \"additionalNameSuffix\": \"\"\n },\n \"companyPostalCode\": \"\",\n \"industrialZone\": \"\",\n \"building\": \"\",\n \"floor\": \"\",\n \"door\": \"\"\n },\n \"states\": [\n {\n \"type\": {\n \"name\": \"\",\n \"technicalKey\": \"INACTIVE\"\n },\n \"validFrom\": \"\",\n \"validTo\": \"\"\n },\n {\n \"type\": {\n \"name\": \"\",\n \"technicalKey\": \"INACTIVE\"\n },\n \"validFrom\": \"\",\n \"validTo\": \"\"\n }\n ],\n \"updatedAt\": \"\",\n \"name\": \"\",\n \"alternativePostalAddress\": {\n \"city\": \"\",\n \"country\": {\n \"name\": \"\",\n \"technicalKey\": \"YT\"\n },\n \"deliveryServiceNumber\": \"\",\n \"deliveryServiceType\": \"PO_BOX\",\n \"geographicCoordinates\": {\n \"latitude\": \"\",\n \"longitude\": \"\",\n \"altitude\": \"\"\n },\n \"administrativeAreaLevel1\": {\n \"countryCode\": \"SK\",\n \"regionCode\": \"\",\n \"regionName\": \"\"\n },\n \"postalCode\": \"\",\n \"deliveryServiceQualifier\": \"\"\n },\n \"bpnLegalEntity\": \"\",\n \"bpnSite\": \"\",\n \"addressType\": \"LegalAndSiteMainAddress\"\n },\n {\n \"bpna\": \"\",\n \"confidenceCriteria\": {\n \"checkedByExternalDataSource\": \"\",\n \"confidenceLevel\": \"\",\n \"lastConfidenceCheckAt\": \"\",\n \"nextConfidenceCheckAt\": \"\",\n \"numberOfSharingMembers\": \"\",\n \"sharedByOwner\": \"\"\n },\n \"createdAt\": \"\",\n \"identifiers\": [\n {\n \"type\": {\n \"name\": \"\",\n \"technicalKey\": \"\"\n },\n \"value\": \"\"\n },\n {\n \"type\": {\n \"name\": \"\",\n \"technicalKey\": \"\"\n },\n \"value\": \"\"\n }\n ],\n \"isCatenaXMemberData\": \"\",\n \"physicalPostalAddress\": {\n \"city\": \"\",\n \"country\": {\n \"name\": \"\",\n \"technicalKey\": \"ZR\"\n },\n \"geographicCoordinates\": {\n \"latitude\": \"\",\n \"longitude\": \"\",\n \"altitude\": \"\"\n },\n \"administrativeAreaLevel1\": {\n \"countryCode\": \"CH\",\n \"regionCode\": \"\",\n \"regionName\": \"\"\n },\n \"administrativeAreaLevel2\": \"\",\n \"administrativeAreaLevel3\": \"\",\n \"postalCode\": \"\",\n \"district\": \"\",\n \"street\": {\n \"name\": \"\",\n \"houseNumber\": \"\",\n \"houseNumberSupplement\": \"\",\n \"milestone\": \"\",\n \"direction\": \"\",\n \"namePrefix\": \"\",\n \"additionalNamePrefix\": \"\",\n \"nameSuffix\": \"\",\n \"additionalNameSuffix\": \"\"\n },\n \"companyPostalCode\": \"\",\n \"industrialZone\": \"\",\n \"building\": \"\",\n \"floor\": \"\",\n \"door\": \"\"\n },\n \"states\": [\n {\n \"type\": {\n \"name\": \"\",\n \"technicalKey\": \"ACTIVE\"\n },\n \"validFrom\": \"\",\n \"validTo\": \"\"\n },\n {\n \"type\": {\n \"name\": \"\",\n \"technicalKey\": \"ACTIVE\"\n },\n \"validFrom\": \"\",\n \"validTo\": \"\"\n }\n ],\n \"updatedAt\": \"\",\n \"name\": \"\",\n \"alternativePostalAddress\": {\n \"city\": \"\",\n \"country\": {\n \"name\": \"\",\n \"technicalKey\": \"SR\"\n },\n \"deliveryServiceNumber\": \"\",\n \"deliveryServiceType\": \"PO_BOX\",\n \"geographicCoordinates\": {\n \"latitude\": \"\",\n \"longitude\": \"\",\n \"altitude\": \"\"\n },\n \"administrativeAreaLevel1\": {\n \"countryCode\": \"SO\",\n \"regionCode\": \"\",\n \"regionName\": \"\"\n },\n \"postalCode\": \"\",\n \"deliveryServiceQualifier\": \"\"\n },\n \"bpnLegalEntity\": \"\",\n \"bpnSite\": \"\",\n \"addressType\": \"LegalAddress\"\n }\n ],\n \"contentSize\": \"\",\n \"page\": \"\",\n \"totalElements\": \"\",\n \"totalPages\": \"\"\n}" + } + ] + } + ] + } + ] + } + ] + } + ] + } + ], + "event": [ + { + "listen": "prerequest", + "script": { + "type": "text/javascript", + "packages": {}, + "exec": [ + "" + ] + } + }, + { + "listen": "test", + "script": { + "type": "text/javascript", + "packages": {}, + "exec": [ + "" + ] + } + } + ], + "variable": [ + { + "key": "PROVIDER_URL", + "value": "https://edc-country-risk-provider-hostname/api/public", + "type": "string" + }, + { + "key": "ASSET_COUNTRY_RISK_SHARING_APIS", + "value": "GET_COUNTRY_RISK_SHARING_APIS", + "type": "string" + }, + { + "key": "COUNTRY_RISK_BACKEND_URL", + "value": "https://country-risk-backend-hostname/api/public", + "type": "string" + }, + { + "key": "COMPANY_ID", + "value": "BPNL0000000XXXX1", + "type": "string" + }, + { + "key": "ASSET_TOKEN_URL", + "value": "https://auth-url-hostname:8080/auth/realms/CX-Central/protocol/openid-connect/token", + "type": "string" + }, + { + "key": "ASSET_CLIENT_ID", + "value": "client_id", + "type": "string" + }, + { + "key": "ASSET_CLIENT_SECRET", + "value": "vault/path/to/asset-client-secret", + "type": "string" + }, + { + "key": "X-API-KEY", + "value": "", + "type": "string" + }, + { + "key": "POLICY_ID", + "value": "COUNTRY_RISK_POLICY", + "type": "string" + }, + { + "key": "BPNL_SHARING_MEMBER", + "value": "BPNL0000000XXXX2", + "type": "string" + }, + { + "key": "PROVIDER_URL_DSP", + "value": "https://edc-country-risk-provider-hostname/api/public", + "type": "string" + }, + { + "key": "PROVIDER_ID", + "value": "BPNL0000000XXXX1", + "type": "string" + }, + { + "key": "CONTRACT_ID", + "value": "COUNTRY_RISK_CONTRACT" + }, + { + "key": "EDC_NAMESPACE", + "value": "https://w3id.org/edc/v0.0.1/ns/", + "type": "string" + }, + { + "key": "CONSUMER_URL", + "value": "https://edc-country-risk-consumer-hostname/api/public", + "type": "string" + }, + { + "key": "COUNTRY_RISK_SHARING_PATH", + "value": "/api/sharing", + "type": "string" + }, + { + "key": "negotiationId", + "value": "", + "type": "string" + }, + { + "key": "contractAgreementId", + "value": "", + "type": "string" + }, + { + "key": "lastNegotiatedTransferProcessId", + "value": "", + "type": "string" + }, + { + "key": "COUNTRY_RISK_PUBLIC_URL", + "value": "https://edc-country-risk-provider-hostname/api/public", + "type": "string" + }, + { + "key": "AUTH_CODE", + "value": "", + "type": "string" + }, + { + "key": "OFFER_ID_COUNTRY_RISK_SHARING_APIS", + "value": "", + "type": "string" + }, + { + "key": "transferProcessId", + "value": "" + }, + { + "key": "BPDM_PROVIDER_URL_DSP", + "value": "https://edc-bpdm-provider-hostname/api/v1/dsp", + "type": "string" + }, + { + "key": "BPDM_PROVIDER_URL", + "value": "https://edc-bpdm-provider-hostname", + "type": "string" + }, + { + "key": "TRANSFERPROCESS", + "value": "" + }, + { + "key": "PROVIDER_EDC_DATASPACE_API", + "value": "https://edc-hostname/api/public", + "type": "string" + }, + { + "key": "OFFER", + "value": "" + }, + { + "key": "SELECTED_ASSET", + "value": "" + }, + { + "key": "SELECTED_PURPOSE", + "value": "" + }, + { + "key": "TRANSFER_TOKEN", + "value": "" + }, + { + "key": "BPDM_PROVIDER_URL_PUBLIC", + "value": "https://edc-hostname/api/public", + "type": "string" + } + ] +} \ No newline at end of file