# Alder Table Bistro: menus and front of house

The printed menu, allergen menu, drinks list, digital menu and till import for Alder Table Bistro. Currency CAD. Snapshot 2026-09-08.

## Where the prices come from

Every dish, price and allergen declaration in this folder is read from the costing files that shipped first:

- `/files/data/restaurant-costing-v1/restaurant-bistro/plate-costs.csv` for the dish names and menu prices;
- `/files/data/restaurant-costing-v1/restaurant-bistro/allergen-matrix.csv` for the fourteen allergen columns.

The shared operating model `business-restaurant-bistro` carries exactly 4 menu items, and those 4 are the whole priced food menu here. Nothing on a menu in this folder is a dish the costing folder has not costed, which is why `sales-mix-pmix-unknown-items.csv` in the costing folder can name items the menu does not have and be checkable.

| Item | Dish | Menu price | Plate cost | Food cost | Section |
| --- | --- | ---: | ---: | ---: | --- |
| MENU-01 | Roast chicken plate | 24.00 | 3.07 | 12.79% | Mains |
| MENU-02 | Tomato soup | 11.50 | 1.26 | 10.96% | Starters |
| MENU-03 | Garden salad | 13.00 | 1.09 | 8.38% | Starters |
| MENU-04 | Potato gratin | 12.50 | 1.01 | 8.08% | Sides |

## The rules every derived price follows

| Price | Rule |
| --- | --- |
| By the glass | Bottle price divided by 5 pours, rounded up to the next 0.25. |
| Set lunch | Stated price 31.00; the same items ordered separately come to 35.50, so the saving is 4.50. |
| Children's portion | 60 percent of the menu price, rounded to the nearest 0.05. |
| Special | 85 percent of the menu price, rounded to the nearest 0.05. |

The set lunch costs 4.33 CAD to plate against a price of 31.00 CAD, which is 13.97 percent food cost. The same dishes ordered separately run at 11.88 percent on average, so the bundle is priced tighter and this folder says so rather than implying the discount is free.

## Drinks are not costed

The drinks list carries 4 lines by the glass and 4 by the bottle across 5 distinct drinks. None of them appears in the shared ingredient purchase study, so none of them has a plate cost, and neither the drinks list nor the digital menu publishes one. The by the glass price of a drink sold both ways is arithmetic on the bottle price and nothing else.

## Tax codes

`pos-import.csv` uses two codes. `GST5` carries 5.00 percent and is the rate the costing folder's Z read applies to prepared food. `EXEMPT` carries 0.00 percent and is applied to one line only, the stored value top up, so an importer has two codes to map rather than one. These are fixture codes, not tax advice.

## The five deliberate defects

1. **`printed-menu-price-mismatch.pdf` prints a price the costing denies.** MENU-02 Tomato soup is printed at 12.50 CAD. `plate-costs.csv` carries 11.50 CAD for the same item, a difference of 1.00. The printed figure is not invented: it is the `proposed_price` in the shared `menu_price_changes` table, effective 2026-09-15, which is after the period this menu covers. Every other price on the page matches `printed-menu.pdf`.

2. **`allergen-menu-missing-dish.csv` has no row for a dish the menu carries.** MENU-02 Tomato soup is on `printed-menu.pdf` and priced at 11.50 CAD, and `allergen-menu.csv` declares 1 allergen for it: milk: Cream. The file has 3 rows where `allergen-menu.csv` has 4.

3. **`pos-import-duplicate-code.csv` uses one item code twice.** `MENU-02` appears on line 3 at 11.50 CAD and again on line 23 at 12.50 CAD. The file has 22 data rows where `pos-import.csv` has 21, and every other code in it is unique.

4. **`menu-invalid-price.jsonld` carries string prices.** All 27 `Offer` nodes carry `price` as a JSON string with a currency symbol, the first being `"$11.50"`. In `menu.jsonld` the same 27 offers carry `price` as a JSON number. A consumer that expects a number, or that parses the value arithmetically, fails on every offer in the file rather than on one.

5. **`daily-specials-insert-wrong-date.pdf` is dated outside the period.** It reads service date 2026-10-14, which is 42 days after the costing period ends on 2026-09-02. `daily-specials-insert.pdf` is dated 2026-08-28, inside the period. The two pages are otherwise identical, so the date is the only thing that distinguishes them.

## Encoding and line endings

Every file in this folder is UTF-8 with LF line endings, with one stated exception. `pos-import-semicolon-latin1.csv` is Latin-1 with CRLF line endings and a semicolon delimiter, and its price column uses a decimal comma, because that is the dialect a European till exports. It carries the same 21 rows as `pos-import.csv` and the non-ASCII characters `é`, so reading it as UTF-8 fails loudly rather than quietly.

## Files

- `printed-menu.pdf` The printed food menu: sections, allergen markers, prices right aligned.
- `printed-menu.docx` The same menu as a Word document, so the layout can be read twice.
- `allergen-menu.pdf` Every dish against the fourteen listed allergens, plus the sources.
- `allergen-menu.csv` The same matrix as data, joined to the printed menu by menu_item_id.
- `drinks-list.pdf` By the glass and by the bottle, with the pricing rule stated.
- `drinks-list.csv` The same drinks as data, with the till item code for each line.
- `daily-specials-insert.pdf` A dated single page insert for one service date.
- `set-menu.pdf` A fixed price bundle of dishes that are already on the printed menu.
- `kids-menu.pdf` Children's portions of the same dishes at a stated fraction of the price.
- `digital-menu.json` The whole menu as one structured document, including the sources.
- `menu.jsonld` The same menu as schema.org Menu JSON-LD, the format search engines read.
- `pos-import.csv` The till import shape: item code, name, category, price, tax, modifiers.
- `pos-import-semicolon-latin1.csv` The same import in the other common dialect: semicolon, decimal comma, Latin-1, CRLF.
- `printed-menu-price-mismatch.pdf` The printed menu with one price that the costing denies.
- `allergen-menu-missing-dish.csv` The allergen menu with one dish's row absent.
- `pos-import-duplicate-code.csv` The till import with one item code used twice.
- `menu-invalid-price.jsonld` The JSON-LD menu with string prices where numbers belong.
- `daily-specials-insert-wrong-date.pdf` The specials insert dated outside the period.
- `README.md` This file.

## What this folder is not

Fictional operating data for testing importers, renderers and structured data consumers. The allergen matrix is derived from the costed recipe lines only, water, salt and minor seasonings are outside the shared purchase study, and nothing here is food safety, nutrition or tax advice.
