Version 0.6-draft. The data will change before version 1. Every change is listed in CHANGELOG.md.

This folder holds the generator of the FPABench datasets. The datasets are downloaded or generated, never stored in the repo.

The company is invented. It makes food, drinks, home care and personal care products and sells them in Croatia, Slovenia and Slovakia, which use the euro, and in Poland, Czechia and Hungary. Its customers are retail chains, wholesalers, web shops, independent shops, and hotels, restaurants and cafes.

Sizes

10m100m1b10b
Model cells10.0 M99.7 Mabout 990 Mabout 10 B
Input cells0.6 M5.1 Mabout 54 Mabout 540 M
Country6666
Region123054102
Customer Group48102204408
Customer1153,35026,000186,000
Category8101316
Subcategory24376094
Brand203980154
Product Line1202897571,823
SKU1,0003,00010,00030,000
Material1,8695,57318,44955,271
Cost Center72727272
Sales rows, actuals88,7301,316,49613,965,293139,290,264
Other actual rows191,729507,9791,580,0874,652,065
Plan rows typed, Budget19,34444,753120,562346,938
Plan rows typed, FC 3+910,17918,39341,437111,022
Plan rows typed, FC 6+66,94912,71028,67576,830
Plan rows typed, What-if6,92412,67528,75976,968

Files

UTF-8 CSV with a header row, commas and a decimal point. Months are 2024-03. Codes are text and keep their leading zeros. schema.json gives every column's type, and manifest.json every file's SHA-256. An empty field means no value. Amounts are in the country's currency, except in columns that end in _eur.

FolderWhat it holds
master/Members and their parents: countries, regions, customer groups, customers, the product hierarchy, SKUs with their attributes and weights, materials, cost centers
actuals/Monthly totals from January 2023 to June 2026. sales.csv holds almost all rows, one per customer, material and month. The rest are rebates, growth bonus, trade fees, OPEX, marketing, list prices, standard costs, exchange rates and control totals.
plan/One file per planner input, one row per typed cell, for Budget, FC 3+9, FC 6+6 and What-if in 2026. Plus the two version flags.
picks.jsonThe picks of the tests: for each test, the cells it writes, the values, and how often it runs. picks.mjs makes them from the input cells, as the last step of generate.mjs.
increments/Later loads for the tests: July 2026 actuals, a correction of March 2026 with its restated control totals, master data changes and a new price list. Corrections and new prices replace the old values.

Every code in the actuals is in the master data, and every check of the model is empty or zero on this data.

Download

The datasets and RAMA's expected answers are public on Cloudflare R2, by generator version and size. Each folder holds the dataset as one archive, expected.json for runner/run.mjs --expected, and SHA256SUMS.

B=https://pub-508fd3a914ed495baefdd48005785ed9.r2.dev/data-0.6-draft/10m
curl -O $B/fpabench-10m.tar.gz -O $B/expected.json -O $B/SHA256SUMS
shasum -a 256 -c SHA256SUMS
tar -xzf fpabench-10m.tar.gz

runner/run.mjs --dataset 10m downloads and checks them itself. 10m, 100m and 1b are there so far. The same size and version always give the same bytes, so generate.mjs makes the same dataset too.

How it is built

Each customer is simulated month by month. It buys from a core assortment that changes slowly and from extras that change faster. Units follow the customer's size, the SKU's popularity, the season, the trend and promotions. Some purchases come back later, so a month can be negative. Rebates, fees, OPEX and marketing follow the sales. The plan follows stated rules from last year's actuals.

Every number that shapes the data is in params.mjs, with its public source or marked as an assumption. The sources are Eurostat, the ECB and annual reports of public consumer goods makers. Every random draw depends only on the seed and its own keys, and the generator uses its own log and exp, so any machine writes the same bytes.

Licence

The generator is licensed under Apache 2.0. The data is licensed under CC BY 4.0. Exchange rates are the euro reference rates of the European Central Bank. Source: ECB.