Fluent Commerce Logo
Docs

Configure Multi-Country Sourcing Logic

How-to Guide

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
No alt text provided

Steps

Step arrow right iconCreate 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`

Step arrow right iconCreate 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)

6. Define Sourcing Criteria:

  • `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}

Step arrow right iconUpdate 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}