@@ -140,7 +140,6 @@ status tags are:
140
140
: <dfn>Transport Service User</dfn>
141
141
:: Refers to the party that purchases and or utilizes a transport service. It could be a [=shipper=] or a [=Transport Service Organizer=] . See [[!ISO14083]] , Section 3.1.33.
142
142
143
-
144
143
## Auxillary Definitions ## {#auxillary-definitions}
145
144
146
145
: <dfn>Access Token</dfn>
@@ -2502,9 +2501,111 @@ the links above for further details.
2502
2501
Any optional property that is not explicitly mentioned above MAY remain unset. All mandatory
2503
2502
properties that cannot be derived from `HOC` CAN be populated in a best-effort manner.
2504
2503
2504
+ # Conformance # {#conformance}
2505
+
2506
+ The iLEAP Technical Specifications are designed to be incrementally adopted and
2507
+ realized in [=host systems=] for different stakeholder groups. Therefore,
2508
+ there are 2 kinds of <dfn>iLEAP conformance</dfn> defined:
2509
+
2510
+ 1. [=iLEAP Emissions Data Conformance=]
2511
+ 1. [=iLEAP Activity Data Conformance=]
2512
+
2513
+ For each kind of iLEAP Conformance, a host system achieves conformity by
2514
+
2515
+ 1. realizing the normative statements and relevant test cases referenced
2516
+ in [[#ileap-conformance-matrix]] below,
2517
+ 2. successfully passing Bilateral Testing ([[#conformity-bilateral-testing]] )
2518
+ 3. succesfully passing the [Automated Conformance Testing] (https://act.sine.dev)
2519
+
2520
+ To achieve iLEAP Emissions Data Conformance, [=host systems=] are further REQUIRED to support the
2521
+ following features:
2522
+ 1. fetching <{TAD}> from another host system and
2523
+ 2. using it to generate <{TOC}> , <{HOC}> , or <{ShipmentFootprint}> data.
2524
+
2525
+ It is RECOMMENDED for host systems to conform to both kinds of [=iLEAP conformance=] .
2526
+
2527
+ Sections marked as non-normative, all authoring guidelines, diagrams, examples,
2528
+ and notes in this specification are non-normative. Everything else in this
2529
+ specification is normative.
2530
+
2531
+ The key words MAY, MUST, MUST NOT, OPTIONAL, RECOMMENDED, REQUIRED, SHOULD,
2532
+ and SHOULD NOT in this document are to be interpreted as described in
2533
+ [[!RFC2119]] [[!RFC8174]] when, and only when, they appear in all capitals,
2534
+ as shown here.
2535
+
2536
+ Advisement: Currently, iLEAP Conformance ensures interoperability and syntactic correctness. Future
2537
+ updates will extend coverage to include semantic correctness, ensuring that emissions calculations
2538
+ are performed accurately in end-to-end scenarios.
2539
+
2540
+ ## Conformance Matrix ## {#ileap-conformance-matrix}
2541
+
2542
+ <figure>
2543
+ <table class="complex data">
2544
+ <thead>
2545
+ <tr>
2546
+ <th style="text-align: left"> Test Case
2547
+ <th style="text-align: left"> Conformance
2548
+ <tbody >
2549
+ <tr>
2550
+ <td style="text-align: left"> All [PACT Required Test Cases] (https://wbcsd.github.io/pact-conformance-testing/checklist.html#required-tests)
2551
+ <td rowspan="4"> <dfn>iLEAP Emissions Data Conformance</dfn>
2552
+
2553
+ <tr>
2554
+ <td style="text-align: left"> [[#test-case-001]]
2555
+
2556
+ <tr>
2557
+ <td style="text-align: left"> [[#test-case-002]]
2558
+
2559
+ <tr>
2560
+ <td style="text-align: left"> [[#test-case-003]]
2561
+
2562
+ <tr>
2563
+ <td style="text-align: left"> [[#test-case-004]]
2564
+ <td rowspan="5"> <dfn>iLEAP Activity Data Conformance</dfn>
2565
+
2566
+ <tr>
2567
+ <td style="text-align: left"> [[#test-case-005]]
2568
+
2569
+ <tr>
2570
+ <td style="text-align: left"> [[#test-case-006]]
2571
+
2572
+ <tr>
2573
+ <td style="text-align: left"> [[#test-case-007]]
2574
+
2575
+ <tr>
2576
+ <td style="text-align: left"> [[#test-case-008]]
2577
+
2578
+ </table>
2579
+ <figcaption> iLEAP Conformance Matrix</figcaption>
2580
+ </figure>
2581
+
2582
+
2583
+ ## Bilateral Testing ## {#conformity-bilateral-testing}
2584
+
2585
+ A Bilateral Test is an interoperability test where two different [=host system=]
2586
+ implementations participate to verify conformance ([[#conformance]] ) and their
2587
+ ability to work together.
2588
+
2589
+ One system acts as the [=data owner=] . It is called the <dfn>target host system</dfn> and is the system under test.
2590
+ The second system acts as the testing party.
2591
+
2592
+ Note:
2593
+ The objective of Bilateral Testing is to ensure that systems can effectively
2594
+ communicate despite having independent codebases.
2595
+
2596
+
2597
+ ## Submission ## {#conformity-submission}
2598
+
2599
+ Note: non-normative
2600
+
2601
+ Once a [=host system=] achieved [=iLEAP conformance=] in 1 or all kinds of iLEAP conformance,
2602
+ the implementer is requested to reach out to the authors of this Technical Specifications to
2603
+ apply for additional support, materials, and marketing opportunities.
2604
+
2605
+
2505
2606
# Appendix A: Changelog # {#changelog}
2506
2607
2507
- ## Version 0.2.1-20250213 (2025-02-13 ) ## {#version-2025MMDD}
2608
+ ## Version 0.2.1-2025MMDD (2025-MM-DD ) ## {#version-2025MMDD}
2508
2609
2509
2610
- add [[#conformance]] chapter
2510
2611
- improve [[#appendix-b]] 's guidance and readability
@@ -2870,17 +2971,17 @@ In order to test the conformance of an iLEAP implementation, the following tests
2870
2971
## PACT Conformance Tests ## {#pact-conformance-tests}
2871
2972
2872
2973
Since the iLEAP Technical Specifications were conceived as an extension to the PACT Data Model and
2873
- Data Exchange Protocol, any iLEAP conformant implementation must also be PACT Conformant . For that
2874
- reason, the tests in the [PACT Conformance Testing
2875
- Checklist](https://wbcsd.github.io/pact-conformance-testing/checklist.html) must be performed.
2974
+ Data Exchange Protocol, any iLEAP conformant implementation must also implement [[!PACTDX]] v2.1.0 or above . For that
2975
+ reason, the required tests in the [PACT Conformance Testing
2976
+ Checklist](https://wbcsd.github.io/pact-conformance-testing/checklist.html#required-tests) should also be performed.
2876
2977
2877
2978
## iLEAP Specific Conformance Tests ## {#ileap-specific-conformance-tests}
2878
2979
2879
2980
The following tests are specific to the iLEAP Technical Specifications:
2880
2981
2881
2982
### Test Case 001: Get ProductFootprint with ShipmentFootprint ### {#test-case-001}
2882
2983
2883
- Tests the target host system's ability to return `ProductFootprints` with `ShipmentFootprint`s as
2984
+ Tests the [= target host system=] 's ability to return `ProductFootprints` with `ShipmentFootprint`s as
2884
2985
extensions.
2885
2986
2886
2987
#### Request #### {#test-case-001-request}
@@ -2891,7 +2992,7 @@ system with a valid access token and the syntax specified in [PACT Tech Specs V2
2891
2992
2892
2993
#### Expected Response #### {#test-case-001-response}
2893
2994
2894
- The test target host system must respond with 200 OK with a JSON body containing a list of
2995
+ The test [= target host system=] must respond with 200 OK with a JSON body containing a list of
2895
2996
`ProductFootprints` (as per the [PACT Tech Specs V2.2
2896
2997
§api-action-list-response](https://wbcsd.github.io/data-exchange-protocol/v2/#api-action-list-response)).
2897
2998
Those which include `productIds` with [the format specified for ShipmentFootprints] (#pcf-mapping-sf)
@@ -2900,15 +3001,18 @@ must be conformant with the Data Model specified in [[#dt-sf]]. The relevant pro
2900
3001
2901
3002
### Test Case 002: Get ProductFootprint with TOC ### {#test-case-002}
2902
3003
3004
+ Tests the [=target host system=] 's ability to return `ProductFootprints` with `TOC`s as
3005
+ extensions.
3006
+
2903
3007
#### Request #### {#test-case-002-request}
2904
3008
2905
- A `ListFootprints` GET request must be sent to the `/2/footprints` endpoint of the test target host
2906
- system with a valid access token and the syntax specified in [PACT Tech Specs V2.2
3009
+ A `ListFootprints` GET request must be sent to the `/2/footprints` endpoint of the test [= target host
3010
+ system=] with a valid access token and the syntax specified in [PACT Tech Specs V2.2
2907
3011
§api-action-list-request](https://wbcsd.github.io/data-exchange-protocol/v2/#api-action-list-request).
2908
3012
2909
3013
#### Expected Response #### {#test-case-002-response}
2910
3014
2911
- The test target host system must respond with 200 OK with a JSON body containing a list of
3015
+ The test [= target host system=] must respond with 200 OK with a JSON body containing a list of
2912
3016
`ProductFootprints` (as per the [PACT Tech Specs V2.2
2913
3017
§api-action-list-response](https://wbcsd.github.io/data-exchange-protocol/v2/#api-action-list-response)).
2914
3018
@@ -2922,15 +3026,17 @@ relevant properties of the `ProductFootprint` must also be confomant with the gu
2922
3026
2923
3027
### Test Case 003: Get ProductFootprint with HOC ### {#test-case-003}
2924
3028
3029
+ Tests the [=target host system=] 's ability to return `ProductFootprints` with `HOC`s as extensions.
3030
+
2925
3031
#### Request #### {#test-case-003-request}
2926
3032
2927
- A `ListFootprints` GET request must be sent to the `/2/footprints` endpoint of the test target host
2928
- system with a valid access token and the syntax specified in [PACT Tech Specs V2.2
3033
+ A `ListFootprints` GET request must be sent to the `/2/footprints` endpoint of the test [= target host
3034
+ system=] with a valid access token and the syntax specified in [PACT Tech Specs V2.2
2929
3035
§api-action-list-request](https://wbcsd.github.io/data-exchange-protocol/v2/#api-action-list-request).
2930
3036
2931
3037
#### Expected Response #### {#test-case-003-response}
2932
3038
2933
- The test target host system must respond with 200 OK with a JSON body containing a list of
3039
+ The test [= target host system=] must respond with 200 OK with a JSON body containing a list of
2934
3040
`ProductFootprints` (as per the [PACT Tech Specs V2.2
2935
3041
§api-action-list-response](https://wbcsd.github.io/data-exchange-protocol/v2/#api-action-list-response)).
2936
3042
@@ -2944,33 +3050,102 @@ relevant properties of the `ProductFootprint` must also be confomant with the gu
2944
3050
2945
3051
### Test Case 004: Get All TransportActivityData ### {#test-case-004}
2946
3052
3053
+ Tests the [=target host system=] 's ability to return all `TransportActivityData`.
3054
+
2947
3055
#### Request #### {#test-case-004-request}
2948
3056
2949
- A `TransportActivityData` GET request must be sent to the `/2/ileap/tad` endpoint of the test target
2950
- host system with a valid access token and the syntax specified in [[#action-tad-request]] .
3057
+ A `TransportActivityData` GET request must be sent to the `/2/ileap/tad` endpoint of the test [=target
3058
+ host system=] with a valid [=access token=] and the syntax specified in [[#action-tad-request]] .
3059
+
3060
+ The access token must be obtained through the [PACT's Authentication Flow] (https://wbcsd.github.io/tr/2023/data-exchange-protocol-20231207/#api-auth). This can be tested through PACT's Test Cases [001] (https://wbcsd.github.io/pact-conformance-testing/checklist.html#tc001) and [002] (https://wbcsd.github.io/pact-conformance-testing/checklist.html#tc002).
2951
3061
2952
3062
#### Expected Response #### {#test-case-004-response}
2953
3063
2954
- The test target host system must respond with 200 OK and a JSON body containing a list of
3064
+ The test [= target host system=] must respond with 200 OK and a JSON body containing a list of
2955
3065
`TransportActivityData`, in conformance with [[#action-tad-response]] and following the data model
2956
3066
specified at [[#dt-tad]] .
2957
3067
2958
3068
### Test Case 005: Get Filtered List of TransportActivityData ### {#test-case-005}
2959
3069
2960
- Issue: TBD
3070
+ Tests the [=target host system=] 's ability to return a filtered list of `TransportActivityData`.
3071
+
3072
+ #### Request #### {#test-case-005-request}
3073
+
3074
+ A `TransportActivityData` GET request must be sent to the `/2/ileap/tad` endpoint of the test [=target
3075
+ host system=] with a valid [=access token=] and the syntax specified in [[#action-tad-request]] .
3076
+
3077
+ The request must include a query parameter [=Filter=] . Any property can be used as a filter, but we
3078
+ recomen using {{TransportMode}} , iterating over all possible values:
3079
+
3080
+ - `GET /2/ileap/tad?mode=Road HTTP/1.1`
3081
+ - `GET /2/ileap/tad?mode=Rail HTTP/1.1`
3082
+ - `GET /2/ileap/tad?mode=Air HTTP/1.1`
3083
+ - `GET /2/ileap/tad?mode=Sea HTTP/1.1`
3084
+ - `GET /2/ileap/tad?mode=InlandWaterway HTTP/1.1`
3085
+
3086
+ The access token must be obtained through the [PACT's Authentication Flow] (https://wbcsd.github.io/tr/2023/data-exchange-protocol-20231207/#api-auth). This can be tested through PACT's Test Cases [001] (https://wbcsd.github.io/pact-conformance-testing/checklist.html#tc001) and [002] (https://wbcsd.github.io/pact-conformance-testing/checklist.html#tc002).
3087
+
3088
+ #### Expected Response #### {#test-case-005-response}
3089
+
3090
+ For at least one filter, the test [=target host system=] must respond with 200 OK and a JSON body
3091
+ containing a list of `TransportActivityData` matching the filter, in conformance with
3092
+ [[#action-tad-response]] and following the data model specified at [[#dt-tad]] .
2961
3093
2962
3094
### Test Case 006: Get Limited List of TransportActivityData ### {#test-case-006}
2963
3095
2964
- Issue: TBD
3096
+ Tests the [=target host system=] 's ability to return a limited list of `TransportActivityData`.
3097
+
3098
+ #### Request #### {#test-case-006-request}
3099
+
3100
+ A `TransportActivityData` GET request must be sent to the `/2/ileap/tad` endpoint of the test
3101
+ [=target host system=] with a valid [=access token=] and the syntax specified in
3102
+ [[#action-tad-request]] . The request must include a query parameter [=Limit=] with value `1`.
3103
+
3104
+ The access token must be obtained through the [PACT's Authentication
3105
+ Flow](https://wbcsd.github.io/tr/2023/data-exchange-protocol-20231207/#api-auth). This can be tested
3106
+ through PACT's Test Cases
3107
+ [001] (https://wbcsd.github.io/pact-conformance-testing/checklist.html#tc001) and
3108
+ [002] (https://wbcsd.github.io/pact-conformance-testing/checklist.html#tc002).
3109
+
3110
+ #### Expected Response #### {#test-case-006-response}
3111
+
3112
+ The test [=target host system=] must respond with 200 OK and a JSON body containing one or less
3113
+ `TransportActivityData`, in conformance with [[#action-tad-response]] and following the data model
3114
+ specified at [[#dt-tad]] .
2965
3115
2966
3116
### Test Case 007: Attempt TransportActivityData with Invalid Token ### {#test-case-007}
2967
3117
2968
- Issue: TBD
3118
+ Tests the [=target host system=] 's ability to handle a `TransportActivityData` request with an invalid
3119
+ access token.
3120
+
3121
+ #### Request #### {#test-case-007-request}
3122
+
3123
+ A `TransportActivityData` GET request must be sent to the `/2/ileap/tad` endpoint of the test [=target
3124
+ host system=] with an invalid access token and the syntax specified in [[#action-tad-request]] .
3125
+
3126
+ #### Expected Response #### {#test-case-007-response}
3127
+
3128
+ The test [=target host system=] must respond with a 401 Unauthorized status code.
2969
3129
2970
3130
### Test Case 008: Attempt TransportActivityData with Expired Token ### {#test-case-008}
2971
3131
2972
- Issue: TBD
3132
+ Tests the [=target host system=] 's ability to handle a `TransportActivityData` request with an expired
3133
+ access token.
3134
+
3135
+ #### Request #### {#test-case-008-request}
3136
+
3137
+ A `TransportActivityData` GET request must be sent to the `/2/ileap/tad` endpoint of the test [=target
3138
+ host system=] with an expired access token and the syntax specified in [[#action-tad-request]] .
3139
+
3140
+ The access token must have been obtained through the [PACT's Authentication
3141
+ Flow](https://wbcsd.github.io/tr/2023/data-exchange-protocol-20231207/#api-auth). This can be tested
3142
+ through PACT's Test Cases
3143
+ [001] (https://wbcsd.github.io/pact-conformance-testing/checklist.html#tc001) and
3144
+ [002] (https://wbcsd.github.io/pact-conformance-testing/checklist.html#tc002).
3145
+
3146
+ #### Expected Response #### {#test-case-008-response}
2973
3147
3148
+ The test [=target host system=] must respond with a 401 Unauthorized status code.
2974
3149
2975
3150
<pre class=biblio>
2976
3151
{
0 commit comments