让每个餐饮决策,
有据可查。

餐标系统 · Catering Standards

全球食材价格,
一目了然。

40 国零售价采样,自动算基准,生成餐标。

餐饮楼宇档案 · Building Profile

每栋楼,
都有一份档案。

硬件、规模、阶段、动线 —— 结构化沉淀,撑起决策的因果链。

零食标准 · Standard Logic
零食标准背后的逻辑
餐饮服务立足 便利性、高效性、健康、安全 四大原则。 正餐提供饱腹感与核心营养,零食则在健康基础上为员工提供 解渴、适度解馋、提振状态 的轻量补给。 通过投入一个 等值零食篮 (Equivalent Snack Basket), 在不同购买力的市场间拉齐预算投入水平,同时用必选核心品类保证员工体验一致。
1
四大指导原则
所有零食采购、配置、运营决策都围绕这四条原则展开。
便利性
员工随取随用,无需等待与审批,最大化可及性。
高效性
配置与运营模式低管理成本、易规模化。
健康
以膳食指南为锚,控制放纵品比例,优先健康选项。
安全
食品安全是底线,供应商资质与储存条件严格审核。
正餐 · Main Meals

提供饱腹与核心营养

解决员工在职场的基本能量与营养摄入需求,是餐饮服务的主体。

零食 · Snacks

健康基础上的轻量补给

在健康优先的前提下,适度满足员工对解渴、解馋和能量提振的需求,作为正餐之间的补充。

2
标准零食篮
一份标准零食餐由 5 个品类按固定克重/毫升组成(每人每天)。
🥜
坚果
20 g / 人 / 天
🍎
水果
300 g(2 件)
🥤
饮料
2 × 330 ml
🥔
薯片
20 g
🍫
零食棒
20 g
为什么是"等值"而不是"等同"? 由于各国购买力与价格水平差异巨大,直接用同一套 SKU 既不现实、也不一定合理。 等值篮子的做法是:固定 品类构成 + 克重/毫升比例,让每个市场都投入在"营养价值与体验相当"的组合上; 具体 SKU、品牌和配送方式可以灵活本地化。
3
三大需求维度
每一个品类都对应一个明确的员工需求维度,不是随意拼凑。
健康基础
参考 WHO 及欧盟主要国家膳食与营养建议,零食篮中纳入适量的健康品类:
WHO 膳食建议 欧盟主要国家指南
· 坚果 20 g / 人 / 天(一小把)
· 水果 300 g / 人 / 天(两件)
解渴与提振
基于既往运营中观察到的实际消费模式,员工对 日常解渴适度咖啡因/糖分提振 有稳定需求。
· 2 × 330 ml 饮料 / 人 / 天
不限定具体形态(水、气泡饮料、茶、咖啡等),便于本地化选配。
适度解馋
承认员工也有"想吃点小零嘴"的诉求,同时 严格限定克重,把放纵品的比例控制在健康可接受范围。
· 薯片 20 g + 零食棒 20 g / 人 / 天
合计放纵品 40 g,远低于健康品类(坚果+水果)的克重占比。
4
必选 vs 可灵活本地化
全球一致的员工体验,不需要通过"全球一致的 SKU"来实现。
必选核心

所有办公地必须覆盖

保证全球员工都能获得一致的零食基线体验。

  • 饮料 + 零食:免费提供,且尽可能提高健康选项比例
  • 综合坚果 (Mixed Nuts)
  • 基础水果:苹果、香蕉、柑橘类
可灵活

因地制宜,尊重本地特点

不对交付模式做刚性标准化,允许适度调整以提升员工满意度与感知价值。

  • 具体品牌与 SKU:根据当地偏好与可及性选配
  • 配送与运营模式:适应当地市场实践与管理成本
  • 额外丰富度:在核心品类外加入本地特色
5
等值篮子公式
用统一口径把上面的设计翻译成各国零食餐标数字。
零食标准(国家)  =  Σ品类   篮子克重(品类)  ×  单位价(国家, 品类)
展开到 5 个品类就是:
  20 g × P(坚果)  +  300 g × P(水果)  +
  2 × 330 ml × P(饮料)  +  20 g × P(薯片)  +  20 g × P(零食棒)
其中 P 为该国代表 SKU 的单位价(来自"食材价格库",归一到 per-100g / per-330ml)。最终数字会与各地实际花费交叉校验(见下方迭代记录)。
6
2025 年 2 月 · 非中区零食预算标准迭代
把原本只有 2 个品类的篮子扩展到 5 个品类,并与各地实际花费交叉校验。
旧版
2 × 可乐
+ 3 × 零食棒
采样面窄,只覆盖"解渴 + 解馋"两个维度。
2025 年 2 月
新版
2 × 饮料  +  2 × 水果
+ 20 g 坚果
+ 20 g 薯片  +  20 g 零食棒
覆盖健康基础 + 解渴提振 + 适度解馋 三大维度。
① 丰富采样品类 — 从 2 个品类扩展到 5 个品类,让预算数字更全面地反映员工实际消费结构,而不只是"饮料+零食棒"这一窄视角。
结论: 预算公式本身立足健康,兼顾解馋解渴与提振状态,也让我们在全球各职场的零食投入在口径上真正可比。
7
技术逻辑
从零售商网页 → 清洗后的价格库 → 最终零食餐标,整条数据流水线是怎么跑起来的。
Step 1
爬虫
按"每国 × 每品类"去当地头部大型连锁商超/大型电商 C 端页面采集原始 HTML。 对强反爬的站点使用 ZenRows 无头浏览器渲染(模拟真实用户),对其他站点走 r.jina.ai 代理。
ZenRowsr.jina.aiSerper
Step 2
取数
优先抓 结构化状态(Next.js __NEXT_DATA__ / JSON-LD ld+json / Apollo / Redux preloaded state), 拿不到再让 Ark 大模型 按 schema 解析 HTML 切片,输出 {name, price, weight, url, thumbnail}
__NEXT_DATA__ld+jsonArk AI · schema
Step 3
清洗
多语种正则抽克重 / 毫升(g / kg / ml / L / oz / lb),再按类目中位数做兜底估算。 剔除面包屑页、404、广告位、SPA 骨架,留下真正的 SKU。价格统一归一到 单位口径(per-100g / per-330ml)。
weight regexSPA skeleton guardper-100g / per-330ml
Step 4
计算
每个品牌取最新一条价格 → 算术平均 → 乘以标准篮克重 → 累加 6 大食材得到当日零食篮预算。 所有中间结果存进 Supabase 做版本追溯,每周定时刷新一次。
Supabaseweekly refreshaudit trail
搜索代表物 · Search for Representative SKUs
对每个(国家 × 类目),用 site:retailer.com 关键词 调 Serper API 先定位候选页,再用 ZenRows/r.jina.ai 抓渲染后的 HTML。 零售商优先级:大型连锁线下超市 ≻ 主流电商 C 端 ≻ 备选。
结构化状态优先 · Structured-State First
先从页面里提取 __NEXT_DATA__ld+json、Apollo/Redux preloaded state; 取不到再丢给 Ark 大模型按 JSON schema 解析切片。这一步把无结构的 HTML 变成干净的字段。 Schema 约束让模型只能输出被允许的键,避免乱造数据。
分级清洗 · Layered Cleaning
L1 多语种克重正则(中文"克 / 公斤 / 毫升"、英文 g/kg/ml/l、欧语 "gr / grammes" 等); L2 根据 SKU 标题判断"按重量计价 vs 按件计价"; L3 类目中位数估算兜底,并打 ~估算 徽章让后续人工可审。 置信度低的 SKU 会进入"Fix missing weights"批处理任务由人工复核。
价格库沉淀 · Price Library in Supabase
每条记录按 (国家, 类目, 品牌) 去重,保留最新一条,旧记录做版本追溯。 "标准生成"页把价格库里每个品牌的 (raw_price / weight) × item.grams 做算术平均,再累加成零食篮总预算。 所有 Run 都有 sourceRunId,点进去能看到最原始的零售商页面 URL。
定时刷新 · Weekly Refresh
服务端每周自动触发一次全量扫描,失败的任务进 Retry failed 队列。 当数据超过 60 天未刷新 UI 会黄色提醒,超过 180 天红色阻断生成。

价格采样口径说明

受限于数据可得性,本网页上的价格均为当地大型连锁商超数据 / 大型电商 C 端数据。 由于 C 端零售价格B 端采购价格可能存在差异,我们会在每次 RFI 阶段向供应商收集食材报价, 并且沉淀出一套各个国家的 B 端 / C 端价格转化系数,让最终的餐标计算越来越接近供应商"真实的花费"。

餐标(真实) = 餐标(C 端采样) × k国家
其中  k国家 = 历次 RFI 供应商报价 ÷ 同时点 C 端零售价 · 滚动均值

标准生成 Generate Standard from Price Library

Basket = 20g Chips + 20g Chocolate + 20g Nuts + 150g Apple + 150g Banana + 2×330ml Cola · 每个品牌取最新一条记录 → 算术平均 → 新标准
初始化中…
数据齐全 · Ready to Generate 六大类食材均有代表物数据,可直接生成标准
部分缺失 · Needs Maintenance 部分食材缺代表物数据,先去价格库补齐再生成
完全空白 · Not Yet Maintained 请先维护本国食材价格库
Advanced: 在线实时核查 直接联网抓取零售商 + AI 解析 · 耗配额、仅在价格库空白或需要核对时使用

Live Price Survey

Standard Basket = 20g Potato Chips + 20g Chocolate + 20g Nuts + 150g Apple + 150g Banana + 2×330ml Cola
Seed AI Intelligence
Agent Cluster Idle0s
[--:--:--] Standing by. Click “Run Analysis” to fetch real-time global pricing.
Price Analytics
全球物价通胀 + 我们自己爬到的 SKU 时序分析。
准备加载…
各国通胀率 · 按区域分组
最新年度 CPI 同比 · 每区域内部降序
AMS · 美洲
EMEA · 欧洲、中东与非洲
APAC · 亚太
CPI 指数 · 10 年趋势
各国起始年 = 100 · 勾选多个国家叠加对比
Standards Management
Current effective budget per office — with full calculation provenance.
Region
Budget History — All Offices
Step line · USD normalized · low-frequency updates
All Versions
Loading…
Effective Office Version Budget (local) Budget (USD) Source Adjustment Notes
Configure Supabase in Settings and click Refresh.
食材价格库 Price Library
候选池 — All SKUs scraped via the Scrape SKU Grid pipeline, stored in the sku_catalog table. 下游的标准运算直接从这张表取价。
Loading catalog…
Screenshot open retailer page
product screenshot
Price Receipt
Retailer
Scraped
Source URL
Open retailer page to verify
Price context (what our scraper saw)
Loading…
🧪
Diagnostic Sweep 失败国家分桶诊断
每个 0-SKU 国家跑一次样本分类,捕获 http / strategy / grid marker / Ark 结果,按 A/B/C/D/E 分桶。
🧪
Click Run diagnostic above to hit 1 sample category per failing country.
Uses your ZenRows + Ark keys · doesn't write to Supabase · ~2–3 min for 24 countries.
🕷
Scrape SKU Grid 直连电商搜索页 → 全 SKU 抓取
ZenRows 反反爬 + Ark AI 提取。每个 (country × category) 跑一次搜索页,落下整页 SKU。
Countries:
No scrape yet. Pick a scope and click Start scrape above.
Requires ZenRows API key in Settings. Parsing is fully done by Ark AI — no per-retailer selectors.
正餐标准 · Standard Logic
正餐标准背后的逻辑
正餐标准对齐的是 员工用餐体验的可预期性。 一顿饭被拆成 5 大食材类目,以 自下而上的食材成本 (Bottom-up Food Cost) 直接绑定 菜品入口体验, 配合全球统一的克重与配比,让员工在 任意工区都能吃到同样质量的一顿饭
1
可预期的餐饮服务体验长什么样?
餐食体验不是"吃饱就行",是 5 个可感知、可验证的维度。
菜品有样子
· 食材安全有品质
· 尊重地域本味,菜色、口味是应该有的样子
选择有余地
· 菜单结构丰富、轮换机制合理
· 多样性有保障,尽可能满足不同饮食偏好
服务有分寸
· 响应及时但不主动打扰
· 服务态度既不冷漠也不过度热情
安全有保障
· 食品安全是底线
· 营养均衡,健康类产品有充分供给可选择
就餐有效率
· 节约精力、减少决策成本
· 排队动线合理、取餐和找座位的时间可控
2
成本分解
一顿饭的报价里只有食材成本直接对应"入口体验";其余部分是供应商的经营空间。
✨ 我们直接指定

员工餐食价值 · Food Cost

对应菜品入口体验,也是最能直接体现"体验可预期"的要素。 我们用 Bottom-up 方式算出来,直接指定给供应商,不再进入商务比价

  • 5 大类食材: 肉类 · 蔬菜 · 主食 · 油脂 · 佐料
  • 每类用当地 Top-1 超市零售价采价
  • 全球统一克重 & 配比 (普通肉 70% · 品质肉 30%)
🏪 供应商报价

供餐成本 · Operating & Margin

这部分交给供应商在商务比价中竞争,是他们的专业 & 利润空间。

  • 运营费用: 人工 · 水电燃气 · 损耗 · 设备
  • 税金: 当地增值税 / 营业税
  • 合理利润: 行业基准的 margin 区间
3
食材篮子 · 5 大基础类目
一顿饭 = 肉类 + 蔬菜 + 主食 + 油脂 + 佐料;克重 & 配比全球统一。
🍖
肉类
普通 70% + 品质 30%
🥬
蔬菜
时令绿叶 + 瓜果
🍚
主食
米 / 面 / 薯
🛢️
油脂
中性食用油
🧂
佐料
盐 · 糖 · 酱 · 香辛
普通肉 · Everyday Protein

70%

鸡 / 猪为主 — 成本可控、供应稳定、全球都能吃、承担日常频次。

品质肉 · Premium Protein

30%

牛排 / 羊肋骨等 — 提供"有样子"的高光时刻。不含龙虾等奢侈单品,避免超预期膨胀。

4
三大定价原则
一篮子商品定义一致;单价因地制宜;消耗量基于历史运营数据。
1
统一口径 一篮子商品
5 大类食材 + 70/30 肉类配比在所有国家/工区完全一致。 这是"体验可预期"的前提 — 员工在新加坡、伦敦、纽约吃到的是同一篮子
2
单价因地制宜
每个因子的单价用当地 Top-1 大众超市零售价。 不混入批发价 / 外卖价 / 餐厅菜单价 — 保证各国数字真正可比。
3
消耗量基于历史运营数据
每人每餐的肉 / 菜 / 主食克重,来自历史工区运营数据实测,不是拍脑袋。 这样算出来的是真实供餐的成本,不是理论克重。
5
餐标公式
Food Cost 自下而上加总;运营费用与利润由供应商报价。
餐标 = 食材成本 (Bottom-up)  +  运营费用 (供应商报)  +  税金  +  合理利润
其中  食材成本 = Σ类目 w(类目) × p本地(类目)
  肉类 = 70% × p普通 + 30% × p品质
6
技术逻辑
从零售商网页 → 清洗后的价格库 → 最终正餐餐标,整条数据流水线是怎么跑起来的。
Step 1
爬虫
按"每国 × 每类目"去当地头部大型连锁商超/大型电商 C 端页面采集原始 HTML。 强反爬站点走 ZenRows 无头浏览器渲染,其他站点走 r.jina.ai 代理。
ZenRowsr.jina.aiSerper
Step 2
取数
优先读页面结构化状态__NEXT_DATA__ / ld+json / Apollo / Redux preloaded state), 取不到再让 Ark 大模型按 schema 解析切片,输出 {name, price, weight, url, thumbnail}
__NEXT_DATA__ld+jsonArk AI · schema
Step 3
清洗
多语种正则抽克重(g / kg / ml / L / oz / lb),再用类目中位数兜底。 剔除面包屑页、404、广告位、SPA 骨架,统一归一到单位口径(肉 / 菜 / 主食 per-kg,油盐酱醋 per-L)。
weight regexSPA skeleton guardper-kg / per-L
Step 4
计算
每类目按"最新一条 · 多品牌 · 算术平均"得到当地单位价;再乘以历史运营消耗克重/类目,累加得到食材成本。 肉类按 70% 普通 + 30% 品质加权。运营费用、税金、合理利润由供应商报。
Bottom-up Food Cost70/30 meat blendSupabase
搜索代表物 · Search for Representative SKUs
对每个(国家 × 类目),用 site:retailer.com 关键词 调 Serper API 先定位候选页,再用 ZenRows/r.jina.ai 抓渲染后的 HTML。 零售商优先级:大型连锁线下超市 ≻ 主流电商 C 端 ≻ 备选。
结构化状态优先 · Structured-State First
先从页面里提取 __NEXT_DATA__ld+json、Apollo/Redux preloaded state; 取不到再丢给 Ark 大模型按 JSON schema 解析切片。这一步把无结构的 HTML 变成干净的字段。 Schema 约束让模型只能输出被允许的键,避免乱造数据。
分级清洗 · Layered Cleaning
L1 多语种克重正则;L2 按 SKU 标题判断"按重量 vs 按件";L3 类目中位数兜底并打 ~估算徽章。 置信度低的 SKU 会进入"Fix missing weights"批处理由人工复核。
价格库沉淀 · Price Library in Supabase
每条记录按 (国家, 类目, 品牌) 去重,保留最新一条,旧记录做版本追溯。 "标准生成"页对价格库里每个品牌做算术平均,再乘以历史消耗量累加成一顿饭的食材成本。
定时刷新 · Weekly Refresh
服务端每周自动触发一次全量扫描,失败的任务进 Retry failed队列。 超过 60 天未刷新 UI 会黄色提醒,超过 180 天红色阻断生成。

价格采样口径说明

受限于数据可得性,本网页上的价格均为当地大型连锁商超数据 / 大型电商 C 端数据。 由于 C 端零售价格B 端采购价格可能存在差异,我们会在每次 RFI 阶段向供应商收集食材报价, 并且沉淀出一套各个国家的 B 端 / C 端价格转化系数,让最终的餐标计算越来越接近供应商"真实的花费"。

餐标(真实) = 餐标(C 端采样) × k国家
其中  k国家 = 历次 RFI 供应商报价 ÷ 同时点 C 端零售价 · 滚动均值
食材价格库 Ingredient Library
候选池 — All meal SKUs scraped via the Scrape SKU Grid pipeline, stored in the sku_catalog_meal table. 下游的正餐标准运算直接从这张表取价。
Loading catalog…
正餐价格分析 · Meal Price Analytics
全球物价通胀 + 我们自己爬到的正餐 SKU 时序分析。
准备加载…
各国通胀率 · 按区域分组
最新年度 CPI 同比 · 每区域内部降序
AMS · 美洲
EMEA · 欧洲、中东与非洲
APAC · 亚太
CPI 指数 · 10 年趋势
各国起始年 = 100 · 勾选多个国家叠加对比

正餐标准生成 Generate Meal Standard from Price Library

Basket = 蛋白质 (5子类) · 碳水 (米饭) · 蔬菜 (2子类) · 脂肪 (橄榄油) · 佐料 (5子类) · 水果 (3子类) · 每类取库存均价 → 填入正餐配置 → 正餐标准
初始化中…
数据齐全 · Ready to Generate 全部 6 大类均有价格数据,可直接生成标准
部分缺失 · Needs Maintenance 部分类目缺数据,先去正餐价格库补齐再生成
完全空白 · Not Yet Maintained 请先维护本国正餐食材价格库
正餐 标准管理
形式将与零食标准的标准管理一致 — 各国当前餐标卡片 + 历史版本表。
正在开发中 · Coming soon
餐饮楼宇档案 · Building Profile
为什么要给每栋楼建一份"餐饮楼宇档案"
把每栋楼里影响餐饮服务的基础设施信息(硬件、规模、阶段、动线、能源 …) 结构化地记录下来 —— 这就是"餐饮楼宇档案"。
我们目前用它做两件事: ① 控制变量做满意度对比② 反推餐标的合理区间

缺少这层数据,"楼之间的对比"容易得出偏差结论 —— 比如拿一栋小开业楼和一栋大稳定楼比满意度, 得出"供应商不行"的结论,但其实差距更多来自楼宇条件本身。
1
是什么 · 每栋楼一份"餐饮基础设施画像"
把每栋楼影响餐饮服务的基础设施信息(硬件 / 规模 / 阶段 / 动线 / 能源 …)以字段形式沉淀
一栋楼一份
每栋楼一份档案,按同一套字段填写;跨楼对比时口径一致
餐饮相关字段
供餐模式 / 规模 / 厨房硬件 / 洗消条件 / 空间动线 / 能源类型 —— 每一项都直接影响餐饮服务
覆盖目标
xx 栋楼宇 · xx 个工区
填写人
各楼宇餐饮运营
2
为什么需要 · 缺少这层数据,"楼之间的比较"容易出现偏差
基于 193 条真实运营数据(2025 全年,10 家供应商,20+ 楼宇)—— 楼宇之间的客观条件存在明显差异,先把条件对齐再比,结论会更稳
人力费率 · 13% ~ 45%
同样规模不同档口数、不同跨层,人力成本可相差约 3 倍
能源费率 · 1% ~ 8%
燃气 / 纯电 / 混合 三种供能方式存在差异,用电约高 3 个点
清洗费率 · 0% ~ 11%
有无洗碗间、传送带、回盘点数对洗碗人力成本影响较明显
供应商盈亏 · -46% ~ +8%
条件较差的楼宇供应商容易亏钱,往往会影响出餐质量;原因更多在楼宇条件本身,而不是供应商
3
下游用途 ① · 控制变量做满意度对比 待启动
楼宇之间满意度有差距时,先用档案分组确认"是否可比",再做归因 —— 避免拿条件差异较大的楼宇硬比
楼宇分群
按"硬件 + 规模 + 阶段"画像聚类 → 类似条件的楼放一组
组内对比
满意度差距只在"组内"做归因 → 排除"楼宇条件"这个混淆变量
能识别什么
同条件下满意度异常低 → 真问题(供应商 / 菜单 / 服务);异常高 → 可复制的好实践
前置条件
楼宇档案覆盖率 ≥ xx% · 满意度数据接入
4
下游用途 ② · 反推餐标的合理区间 进行中
把楼宇档案和供应商财务数据交叉,识别"楼宇条件 → 运营费率"关联,反推每类楼宇的合理餐标区间
输入
楼宇档案 × 月度运营费用报表(人力 / 能源 / 清洗 / 物耗 / 折旧 / 物流)
方法
数据对照 · 识别每个条件对 7 大费率科目的边际贡献
输出 · 规律举例
无洗碗间 → 清洗费率 +xx pt
纯电供能 → 能源费率 +xx pt
跨 >3 层 → 人力费率 +xx pt
输出 · 分档餐标
条件 → A/B/C/D 档 → 每档对应一个固定餐标。具体设计在「标准管理」页
A
最优条件楼宇
硬件齐全 / 大规模 / 稳定期
¥xx
B
标准条件楼宇
大多数稳态项目
¥xx
C
较差条件楼宇
硬件受限 / 规模偏小
¥xx
D
困难条件楼宇
多项受限 + 开业期
¥xx
Loading…
Loading…
Loading…
Loading…