FloCafe
FloCafe는 구독 없이 무료로 주문·테이블·주방 디스플레이·로컬 데이터를 관리하는 로컬 퍼스트 레스토랑 POS입니다
Open dataset of the additives declared in wines sold by Systembolaget
README 전체를 불러오는 중입니다.
README 전문 보기 ↗A public dataset of the additives declared in wines sold by Systembolaget, and a bilingual site on top of it at vindeklaration.se.
Since 8 December 2023 the EU requires wine to declare its ingredients and nutritional values. Systembolaget shows that declaration on each product page, but it cannot be searched, filtered or compared — you can look up one wine at a time and nothing more. This project reads every wine's declaration, turns the free text into structured data, and publishes the result.
| File | Contents |
|---|---|
data/wines.json | The dataset: one record per wine, with parsed additives. Not in git — download wines.json.gz, mirrored on the latest release. Monthly snapshots live in their own releases. |
data/wines.sqlite | The same rows, for querying — built by src.build from wines.json, not committed |
data/additives.yaml | The substance dictionary — names, E-numbers, aliases |
data/unknown.json | Text the parser could not identify, ranked by impact |
data/producer-declarations.json | A second source: declarations found at the producer's own e-label where Systembolaget carries none. Kept separate and never merged into the dataset |
src/site.py, templates/ | The site — a static build, uv run python -m src.site |
worker/index.js, cf-build.sh | What serves the dataset at /data/*, and what Cloudflare's build runs |
Most wines declare nothing yet. The requirement turns on when the wine was produced: wine produced before 8 December 2023 may be sold under the old rules until stocks run out. "The 2024 harvest onwards" is the Commission's own shorthand for this, and it is not the criterion — a wine produced in, say, January 2024, or a non-vintage sparkling wine whose second fermentation happened later, is covered without carrying a 2024 vintage.
The dataset has no production date, and Systembolaget publishes none, so vintage is used as a stand-in throughout. The error runs one way: every wine of vintage 2024 or later was necessarily produced after the cutoff, so nothing is counted as covered when it is not. But 33.2% of the catalogue carries vintage 2023 or none at all, and an unknown share of that sits inside the requirement while a vintage filter cannot see it. Any figure here computed "over the wines the requirement covers" means the wines it certainly covers.
20.4% of the assortment currently carries a declaration, rising to 66%
among wines of vintage 2024 or later. Coverage improves on its own as stock
rotates. See docs/legal-notes.md §1f for the sources.
The text is supplier-entered. Each importer types the declaration by hand,
so spelling, terminology and completeness vary. raw_ingredients is kept on
every record so any claim here can be checked against the source.
Counting is a judgement call, and here is the one made. additive_count
counts declared additives, sulfites included. Grapes, must and added sugar are
raw materials and are not counted. Bottling gases (nitrogen, CO₂, argon) are
recorded separately in gases and not counted, because they are a packaging
step rather than something that stays in the wine. A wine with text the parser
could not read is marked parse_status: "partial" and is excluded from any
ranking — omitting a wine is better than understating its additives.
Fewer additives does not mean healthier. This is a record of what is on the label, not a health assessment. Wine is alcohol; that is the relevant risk.
The label wins. The bottle in your hand is more current than this dataset.
{
"product_number": "253108",
"name": "Adobe Sauvignon Blanc",
"vintage": "2025",
"country": "Chile",
"price": 249.0,
"declaration_status": "declared",
"parse_status": "complete",
"additive_count": 2,
"additives": [
{"id": "sulfites", "e_number": "E220-E228", "category": "preservative",
"name": {"sv": "Sulfiter", "en": "Sulfites"}, "allergen": "sulfites"}
],
"gases": [{"id": "carbon_dioxide", "e_number": "E290"}],
"base_ingredients": [{"id": "grapes"}],
"processing_notes": [{"id": "protective_atmosphere"}],
"allergens": ["sulfites"],
"nutrition": {"kcal_per_100ml": 73, "sugar_g_per_100ml": 0.2},
"raw_ingredients": "Druvor*, koldioxid, konserveringsmedel (SULFITER), ...",
"source_url": "https://www.systembolaget.se/produkt/vin/x-253108/"
}
declaration_status is declared or not_declared; parse_status is
complete, partial or not_declared. Undeclared wines are kept in the
dataset — leaving them out would hide how much of the assortment says nothing.
여기까지가 README 앞부분입니다. 나머지는 원문에서 읽을 수 있습니다. README 전문 보기 ↗