Configure Multi-Country Sourcing Logic
Author:
Kirill Gaiduk
Changed on:
2 Oct 2025
Key Points
- Use the Responsive Sourcing Framework to implement sourcing logic that prioritize country-level constraints
- Use the
`createSourcingProfile`
mutation to create new versions of Sourcing Profiles, which are immutable - Activate relevant Sourcing Profiles versions with the
`activateSourcingProfile`
mutation - Reference Sourcing Profiles within the corresponding Workflows

Prerequisites
Steps
Create Networks
1. Use the `createNetwork`
mutation to create the Warehouse (`WH`
) Network for your Sourcing Profile, including all the Locations from `UK_WH`
, `BEL_WH`
, `FRA_WH`
Networks.
2. Configure your Network using the `CreateNetworkInput`
fields:
- Use a unique
`CreateNetworkInput.name`
value (it is saved in the`Network.ref`
field). - Use the
`network`
query to get the list of Location Ids by Network Reference.
3. Repeat the points 1 and 2 for the following Networks creation:
`UK`
with Locations from`UK_LS`
and`WH`
`EU`
with Locations from`BEL_LS`
,`FRA_LS`
, and`WH`
Create Sourcing Profile
1. Use the `createSourcingProfile`
mutation to create a new Sourcing Profile, including its:
- Primary Sourcing Strategies with their
- Sourcing Conditions and Criteria
2. Configure your Sourcing Profile using the `CreateSourcingProfileInput`
fields:
- Assign a unique Reference for the Profile (e.g.,
`Europe`
) - Set Default Virtual Catalog to
`BASE:EU`
(or as required) - Set Default Network to
`EU`
- Set Default Max Split to 5 (or as required)
3. Configure Primary Sourcing Strategies for:
- U.K. Jewellery Strategy: Restricts Jewellery Category to the U.K. Networks (
`UK_LS`
,`UK_WH`
) to comply with import restrictions - U.K. General Strategy: Prioritizes U.K. local stores, applies distance banding and daily capacity ranking
- Belgium Strategy: Prioritizes Belgian local stores (
`BEL_LS`
), then French stores if Belgian stock is insufficient - France Strategy: Prioritizes French local stores (
`FRA_LS`
), then Belgian stores when needed
4. Organize Strategies in the `"sourcingStrategies": []`
array to reflect the priority order:
- Priority 1 →
`Jewellery`
(U.K.) - Priority 2 →
`UK`
(general) - Priority 3 →
`Belgium`
- Priority 4 →
`France`
5. Define Sourcing Conditions:
`deliveryCountryIn`
to bind each Strategy to its country`anyProductCategoryIn`
or`allProductCategoryNotIn`
to apply product-specific sourcing (e.g., Jewellery)
`networkPriority`
to prefer local stores before cross-border or warehouse sourcing`locationDistanceBanded`
or`locationDistanceExclusion`
to enforce distance rules`locationDailyCapacity`
to manage fulfillment limits by capacity`inventoryAvailability`
to ensure fulfillment only from stocked Locations
Sample createSourcingProfile Payload
1mutation createSourcingProfile($input: CreateSourcingProfileInput) {
2 createSourcingProfile (input: $input) {
3 id
4 ref
5 version
6 versionComment
7 name
8 description
9 status
10 user {
11 id
12 }
13 createdOn
14 updatedOn
15 retailer {
16 id
17 }
18 defaultVirtualCatalogue {
19 ref
20 }
21 defaultNetwork {
22 ref
23 }
24 defaultMaxSplit
25 sourcingStrategies {
26 id
27 ref
28 sourcingProfile {
29 id
30 }
31 name
32 description
33 status
34 priority
35 createdOn
36 updatedOn
37 virtualCatalogue {
38 ref
39 }
40 network {
41 ref
42 }
43 maxSplit
44 sourcingConditions {
45 name
46 type
47 params
48 }
49 sourcingCriteria {
50 name
51 type
52 params
53 }
54 }
55 sourcingFallbackStrategies {
56 id
57 ref
58 sourcingProfile {
59 id
60 }
61 name
62 description
63 status
64 priority
65 createdOn
66 updatedOn
67 virtualCatalogue {
68 ref
69 }
70 network {
71 ref
72 }
73 maxSplit
74 sourcingConditions {
75 name
76 type
77 params
78 }
79 sourcingCriteria {
80 name
81 type
82 params
83 }
84 }
85 }
86}
1{
2 "input": {
3 "ref": "Europe",
4 "versionComment": "First version of Europe SP",
5 "name": "Europe",
6 "description": "Europe SP",
7 "retailer": {
8 "id": 1
9 },
10 "defaultVirtualCatalogue": {
11 "ref": "BASE:EU"
12 },
13 "defaultNetwork": {
14 "ref": "EU"
15 },
16 "defaultMaxSplit": 5,
17 "sourcingStrategies": [
18 {
19 "ref": "Jewellery",
20 "name": "U.K. Jewellery",
21 "description": "U.K. Jewellery SS",
22 "status": "ACTIVE",
23 "network": {
24 "ref": "UK"
25 },
26 "sourcingConditions": [
27 {
28 "name": "deliveryCountryIn",
29 "type": "fc.sourcing.condition.path",
30 "params": {
31 "path": "fulfilmentChoice.address.country",
32 "operator": "in",
33 "value": ["United Kingdom"]
34 }
35 },
36 {
37 "name": "anyProductCategoryIn",
38 "type": "fc.sourcing.condition.path",
39 "params": {
40 "path": "unfulfilledItems.product.categories.ref",
41 "conditionScope": "ANY",
42 "operator": "in",
43 "value": ["Jewellery"]
44 }
45 }
46 ],
47 "sourcingCriteria": [
48 {
49 "name": "locationNetworkExclusion",
50 "type": "fc.sourcing.criterion.locationNetworkExclusion",
51 "params": {
52 "value": ["BEL_WH", "FRA_WH"]
53 }
54 },
55 {
56 "name": "networkPriority",
57 "type": "fc.sourcing.criterion.networkPriority",
58 "params": {
59 "value": ["UK_LS", "UK_WH"]
60 }
61 },
62 {
63 "name": "locationDistanceBanded",
64 "type": "fc.sourcing.criterion.locationDistanceBanded",
65 "params": {
66 "value": [5, 15, 50, 150],
67 "valueUnit": "miles"
68 }
69 },
70 {
71 "name": "locationDailyCapacity",
72 "type": "fc.sourcing.criterion.locationDailyCapacity"
73 }
74 ]
75 },
76 {
77 "ref": "UK",
78 "name": "U.K. General",
79 "description": "U.K. General SS",
80 "status": "ACTIVE",
81 "network": {
82 "ref": "UK"
83 },
84 "sourcingConditions": [
85 {
86 "name": "deliveryCountryIn",
87 "type": "fc.sourcing.condition.path",
88 "params": {
89 "path": "fulfilmentChoice.address.country",
90 "operator": "in",
91 "value": ["United Kingdom"]
92 }
93 },
94 {
95 "name": "allProductCategoryNotIn",
96 "type": "fc.sourcing.condition.path",
97 "params": {
98 "path": "unfulfilledItems.product.categories.ref",
99 "conditionScope": "ALL",
100 "operator": "not_in",
101 "value": ["Jewellery"]
102 }
103 }
104 ],
105 "sourcingCriteria": [
106 {
107 "name": "networkPriority",
108 "type": "fc.sourcing.criterion.networkPriority",
109 "params": {
110 "value": ["UK_LS", "UK_WH", "WH"]
111 }
112 },
113 {
114 "name": "locationDistanceBanded",
115 "type": "fc.sourcing.criterion.locationDistanceBanded",
116 "params": {
117 "value": [5, 15, 50, 150],
118 "valueUnit": "miles"
119 }
120 },
121 {
122 "name": "locationDailyCapacity",
123 "type": "fc.sourcing.criterion.locationDailyCapacity"
124 }
125 ]
126 },
127 {
128 "ref": "Belgium",
129 "name": "Belgium",
130 "description": "Belgium SS",
131 "status": "ACTIVE",
132 "sourcingConditions": [
133 {
134 "name": "deliveryCountryIn",
135 "type": "fc.sourcing.condition.path",
136 "params": {
137 "path": "fulfilmentChoice.address.country",
138 "operator": "in",
139 "value": ["Belgium"]
140 }
141 }
142 ],
143 "sourcingCriteria": [
144 {
145 "name": "networkPriority",
146 "type": "fc.sourcing.criterion.networkPriority",
147 "params": {
148 "value": ["BEL_LS", "FRA_LS", "WH"]
149 }
150 },
151 {
152 "name": "locationDistance",
153 "type": "fc.sourcing.criterion.locationDistance"
154 }
155 ]
156 },
157 {
158 "ref": "France",
159 "name": "France",
160 "description": "France SS",
161 "status": "ACTIVE",
162 "sourcingConditions": [
163 {
164 "name": "deliveryCountryIn",
165 "type": "fc.sourcing.condition.path",
166 "params": {
167 "path": "fulfilmentChoice.address.country",
168 "operator": "in",
169 "value": ["France"]
170 }
171 }
172 ],
173 "sourcingCriteria": [
174 {
175 "name": "locationDistanceExclusion",
176 "type": "fc.sourcing.criterion.locationDistanceExclusion",
177 "params": {
178 "value": 200,
179 "valueUnit": "kilometres"
180 }
181 },
182 {
183 "name": "networkPriority",
184 "type": "fc.sourcing.criterion.networkPriority",
185 "params": {
186 "value": ["FRA_LS", "BEL_LS", "WH"]
187 }
188 },
189 {
190 "name": "inventoryAvailability",
191 "type": "fc.sourcing.criterion.inventoryAvailability"
192 }
193 ]
194 }
195 ],
196 "sourcingFallbackStrategies": []
197 }
198}
1{
2 "data": {
3 "createSourcingProfile": {
4 "id": "5017",
5 "ref": "Europe",
6 "version": 1,
7 "versionComment": "First version of Europe SP",
8 "name": "Europe",
9 "description": "Europe SP",
10 "status": "ACTIVE",
11 "user": {
12 "id": "1982"
13 },
14 "createdOn": "2025-09-27T09:35:48.162Z",
15 "updatedOn": "2025-09-27T09:35:48.162Z",
16 "retailer": {
17 "id": "1"
18 },
19 "defaultVirtualCatalogue": {
20 "ref": "BASE:EU"
21 },
22 "defaultNetwork": {
23 "ref": "EU"
24 },
25 "defaultMaxSplit": 5,
26 "sourcingStrategies": [
27 {
28 "id": "9737",
29 "ref": "Jewellery",
30 "sourcingProfile": {
31 "id": "5017"
32 },
33 "name": "U.K. Jewellery",
34 "description": "U.K. Jewellery SS",
35 "status": "ACTIVE",
36 "priority": 1,
37 "createdOn": "2025-09-27T09:35:48.183Z",
38 "updatedOn": "2025-09-27T09:35:48.183Z",
39 "virtualCatalogue": null,
40 "network": {
41 "ref": "UK"
42 },
43 "maxSplit": null,
44 "sourcingConditions": [
45 {
46 "name": "deliveryCountryIn",
47 "type": "fc.sourcing.condition.path",
48 "params": {
49 "path": "fulfilmentChoice.address.country",
50 "value": [
51 "United Kingdom"
52 ],
53 "operator": "in"
54 }
55 },
56 {
57 "name": "anyProductCategoryIn",
58 "type": "fc.sourcing.condition.path",
59 "params": {
60 "path": "unfulfilledItems.product.categories.ref",
61 "value": [
62 "Jewellery"
63 ],
64 "operator": "in",
65 "conditionScope": "ANY"
66 }
67 }
68 ],
69 "sourcingCriteria": [
70 {
71 "name": "locationNetworkExclusion",
72 "type": "fc.sourcing.criterion.locationNetworkExclusion",
73 "params": {
74 "value": [
75 "BEL_WH",
76 "FRA_WH"
77 ]
78 }
79 },
80 {
81 "name": "networkPriority",
82 "type": "fc.sourcing.criterion.networkPriority",
83 "params": {
84 "value": [
85 "UK_LS",
86 "UK_WH"
87 ]
88 }
89 },
90 {
91 "name": "locationDistanceBanded",
92 "type": "fc.sourcing.criterion.locationDistanceBanded",
93 "params": {
94 "value": [
95 5,
96 15,
97 50,
98 150
99 ],
100 "valueUnit": "miles"
101 }
102 },
103 {
104 "name": "locationDailyCapacity",
105 "type": "fc.sourcing.criterion.locationDailyCapacity",
106 "params": null
107 }
108 ]
109 },
110 {
111 "id": "9736",
112 "ref": "UK",
113 "sourcingProfile": {
114 "id": "5017"
115 },
116 "name": "U.K. General",
117 "description": "U.K. General SS",
118 "status": "ACTIVE",
119 "priority": 2,
120 "createdOn": "2025-09-27T09:35:48.174Z",
121 "updatedOn": "2025-09-27T09:35:48.174Z",
122 "virtualCatalogue": null,
123 "network": {
124 "ref": "UK"
125 },
126 "maxSplit": null,
127 "sourcingConditions": [
128 {
129 "name": "deliveryCountryIn",
130 "type": "fc.sourcing.condition.path",
131 "params": {
132 "path": "fulfilmentChoice.address.country",
133 "value": [
134 "United Kingdom"
135 ],
136 "operator": "in"
137 }
138 },
139 {
140 "name": "allProductCategoryNotIn",
141 "type": "fc.sourcing.condition.path",
142 "params": {
143 "path": "unfulfilledItems.product.categories.ref",
144 "value": [
145 "Jewellery"
146 ],
147 "operator": "not_in",
148 "conditionScope": "ALL"
149 }
150 }
151 ],
152 "sourcingCriteria": [
153 {
154 "name": "networkPriority",
155 "type": "fc.sourcing.criterion.networkPriority",
156 "params": {
157 "value": [
158 "UK_LS",
159 "UK_WH",
160 "WH"
161 ]
162 }
163 },
164 {
165 "name": "locationDistanceBanded",
166 "type": "fc.sourcing.criterion.locationDistanceBanded",
167 "params": {
168 "value": [
169 5,
170 15,
171 50,
172 150
173 ],
174 "valueUnit": "miles"
175 }
176 },
177 {
178 "name": "locationDailyCapacity",
179 "type": "fc.sourcing.criterion.locationDailyCapacity",
180 "params": null
181 }
182 ]
183 },
184 {
185 "id": "9738",
186 "ref": "Belgium",
187 "sourcingProfile": {
188 "id": "5017"
189 },
190 "name": "Belgium",
191 "description": "Belgium SS",
192 "status": "ACTIVE",
193 "priority": 3,
194 "createdOn": "2025-09-27T09:35:48.173Z",
195 "updatedOn": "2025-09-27T09:35:48.173Z",
196 "virtualCatalogue": null,
197 "network": null,
198 "maxSplit": null,
199 "sourcingConditions": [
200 {
201 "name": "deliveryCountryIn",
202 "type": "fc.sourcing.condition.path",
203 "params": {
204 "path": "fulfilmentChoice.address.country",
205 "value": [
206 "Belgium"
207 ],
208 "operator": "in"
209 }
210 }
211 ],
212 "sourcingCriteria": [
213 {
214 "name": "networkPriority",
215 "type": "fc.sourcing.criterion.networkPriority",
216 "params": {
217 "value": [
218 "BEL_LS",
219 "FRA_LS",
220 "WH"
221 ]
222 }
223 },
224 {
225 "name": "locationDistance",
226 "type": "fc.sourcing.criterion.locationDistance",
227 "params": null
228 }
229 ]
230 },
231 {
232 "id": "9739",
233 "ref": "France",
234 "sourcingProfile": {
235 "id": "5017"
236 },
237 "name": "France",
238 "description": "France SS",
239 "status": "ACTIVE",
240 "priority": 4,
241 "createdOn": "2025-09-27T09:35:48.171Z",
242 "updatedOn": "2025-09-27T09:35:48.171Z",
243 "virtualCatalogue": null,
244 "network": null,
245 "maxSplit": null,
246 "sourcingConditions": [
247 {
248 "name": "deliveryCountryIn",
249 "type": "fc.sourcing.condition.path",
250 "params": {
251 "path": "fulfilmentChoice.address.country",
252 "value": [
253 "France"
254 ],
255 "operator": "in"
256 }
257 }
258 ],
259 "sourcingCriteria": [
260 {
261 "name": "locationDistanceExclusion",
262 "type": "fc.sourcing.criterion.locationDistanceExclusion",
263 "params": {
264 "value": 200,
265 "valueUnit": "kilometres"
266 }
267 },
268 {
269 "name": "networkPriority",
270 "type": "fc.sourcing.criterion.networkPriority",
271 "params": {
272 "value": [
273 "FRA_LS",
274 "BEL_LS",
275 "WH"
276 ]
277 }
278 },
279 {
280 "name": "inventoryAvailability",
281 "type": "fc.sourcing.criterion.inventoryAvailability",
282 "params": null
283 }
284 ]
285 }
286 ],
287 "sourcingFallbackStrategies": []
288 }
289 }
290}
Update your Workflow
Ensure the Sourcing Profile `ref`
is specified in the `sourcingProfileRef`
parameter of the CreateFulfilmentWithSourcingProfile Rule.
1{
2 "name": "SourceOrder",
3 "description": "Creates fulfilments at a location based on sourcing profile. If there are unfulfilled items in the order, trigger an event for sourcing from another location to fulfil remaining items",
4 "type": "ORDER",
5 "eventType": "NORMAL",
6 "rules": [
7 {
8 "name": "[[account.id]].order.CreateFulfilmentWithSourcingProfile",
9 "props": {
10 "sourcingProfileRef": "Europe"
11 }
12 },
13 {
14 "name": "{{account}}.order.CreateRejectedFulfilment",
15 "props": {
16 "systemRejectedLocationRef": "RJT_EU"
17 }
18 }
19 ],
20 "triggers": [
21 {
22 "status": "BOOKED"
23 },
24 {
25 "status": "PICK_PACK"
26 }
27 ],
28 "userActions": []
29}