Merges the BS14 Members, Non-Members and Modifier files into one Flint-format workbook (Products, PriceLevels, Configurators sheets) and downloads it to your device. The format is read live from PRODUCT_IMPORT.md.
This document is the single source of truth for the consolidated product import
format. The import builder (src/lib/buildProductImport.js) reads the
machine-readable spec block below from this file at runtime, so the column
layout, sheet names, price levels and configurators defined here are exactly
what the generated workbook will contain.
If you change the format, edit this file — the builder picks up the change on the next run. No code changes required for structural edits (column additions/renames, sheet renames, price-level or configurator definitions).
The generator merges three BS14 source workbooks:
| File | Role | |----------------|-----------------------------------------------------------| | Members | Member pricing + container/variant structure | | Non-Members | Default (non-member) sell price per SKU | | Modifiers | SKUs that should attach the "Splash / Fill Up" configurator |
Source URLs are configured in SOURCE_URLS in src/lib/buildProductImport.js.
The generated workbook contains three sheets:
Products sheetOne row per product. Containers produce one row with their variants spread
across variant_n_* columns; regular products use variant_1_*.
| Column | Meaning |
|---------------------------------|---------------------------------------------------------------|
| product_name | Product display name |
| product_type | Container or Regular |
| sku | Product SKU |
| dept_code | Department code |
| tax_code | Tax code (e.g. VAT20) |
| tax_rate | Numeric tax rate parsed from tax_code |
| barcode | Product barcode |
| cost_price | Buy price |
| product_group_codes | Product group codes |
| configurator | Configurator name (e.g. Splash / Fill Up) or blank |
| import_record | *Import Record flag from source |
| delete | Delete flag from source |
| variant_n_name | Variant display name (container child short name) |
| variant_n_sku | Variant SKU |
| variant_n_measure | Measure / size |
| variant_n_price_nonmember | Non-member sell price (from Non-Members file, fallback member)|
| variant_n_price_member | Member sell price (from Members file) |
n runs from 1 up to the maximum number of variants on any container.
PriceLevels sheetDefines the named price levels used by the variant_n_price_* columns.
Configurators sheetDefines product configurators referenced by the configurator column.
*Product Type = Container become one
product row each. Their child rows (same Parent SKU) become variants.variant_1).Splash / Fill Up in the configurator column.The builder parses the JSON block below from this file. Do not remove the
import-spec tag.
{
"sheets": {
"products": "Products",
"price_levels": "PriceLevels",
"configurators": "Configurators"
},
"product_columns": [
"product_name",
"product_type",
"sku",
"dept_code",
"tax_code",
"tax_rate",
"barcode",
"cost_price",
"product_group_codes",
"configurator",
"import_record",
"delete"
],
"variant_columns": [
"variant_{n}_name",
"variant_{n}_sku",
"variant_{n}_measure",
"variant_{n}_price_nonmember",
"variant_{n}_price_member"
],
"price_levels": [
{ "level_name": "Non-Member", "is_default": "Yes" },
{ "level_name": "Member", "is_default": "No" }
],
"configurators": [
{
"name": "Splash / Fill Up",
"step_name": "Choose",
"selectable_items": "SPLASH;FILL UP",
"min_selection": 0,
"max_selection": 1,
"price_mode": "Follow Transaction"
}
]
}