#!/usr/bin/env python3
from __future__ import annotations

import csv
import json
from pathlib import Path


ROOT = Path(__file__).resolve().parent
OUT = ROOT / "sku-manifests"


COMMON_FORBIDDEN = ["初始化", "账号", "密码", "APK", "安装包", "Cookie"]


SKU_DATA = [
    {
        "spu": "营养结算", "sku": "NC-SGL", "name": "单食堂消费结算",
        "buyer": "企业后勤或食堂负责人",
        "one_liner": "一套PC管理端配合消费机，完成单食堂刷卡结算与日结对账。",
        "primary_buying_point": "不做复杂入口，人员、卡片、消费和对账一条线跑通。",
        "suitable_for": ["单一企业员工食堂", "单食堂或少量档口"],
        "standard_combo": ["PC管理端", "双屏消费机", "发卡读卡器＋M1卡"],
        "core_modules": [
            {"name": "人员卡务", "points": ["人员建档与导入", "M1卡绑定与状态管理"]},
            {"name": "账户补贴", "points": ["现金与补贴账户", "充值和批量补贴"]},
            {"name": "刷卡结算", "points": ["定额或自定义金额消费", "订单实时上传或离线补传"]},
            {"name": "统计对账", "points": ["按人员和设备统计", "日结报表与金额核对"]},
        ],
        "main_flow": ["建档绑卡", "充值补贴", "刷卡消费", "统计对账"],
        "customer_values": ["操作简单", "结算快速", "账目清楚"],
        "boundaries": ["仅单食堂", "不含手机端", "第三方接口另行评估"],
        "forbidden_terms": COMMON_FORBIDDEN + ["退款", "消费规则", "账单管理"],
        "infographic_focus": "M1卡、发卡读卡器、双屏消费机和PC报表；康比特橙黄主色、年轻Bento卡片和明快箭头。",
        "representative_projects": "山西焦煤", "deployment": "公有云", "entry_points": "PC管理端＋设备端",
        "options": "支付接口、一卡通、高峰性能", "evidence_status": "B-项目脑图与产品清单；运行事实需持续回读",
    },
    {
        "spu": "营养结算", "sku": "NC-POS", "name": "多档口多食堂消费结算",
        "buyer": "大型园区或交通枢纽后勤负责人",
        "one_liner": "把多个食堂、档口和消费设备放到一套平台统一结算。",
        "primary_buying_point": "高峰消费统一承接，食堂和档口分别看账。",
        "suitable_for": ["交通枢纽员工餐", "大型园区多食堂"],
        "standard_combo": ["多食堂PC管理端", "独立小程序", "多点位消费终端"],
        "core_modules": [
            {"name": "食堂档口", "points": ["食堂和档口分级管理", "设备绑定经营点位"]},
            {"name": "人员账户", "points": ["人员与身份统一管理", "充值和补贴账户"]},
            {"name": "多入口消费", "points": ["刷卡刷码与称重可组合", "异常交易可补录追溯"]},
            {"name": "经营对账", "points": ["订单自动汇总", "按食堂和档口对账"]},
        ],
        "main_flow": ["人员建档", "食堂档口配置", "多入口消费", "订单自动汇总", "分食堂分档口对账"],
        "customer_values": ["高峰结算更顺", "多食堂统一管理", "档口账目清楚"],
        "boundaries": ["高峰指标按项目压测", "订餐外卖另行选配", "第三方卡系统另行评估"],
        "forbidden_terms": COMMON_FORBIDDEN,
        "infographic_focus": "多个食堂档口、消费终端、订单汇总和分级报表；康比特橙黄主色、年轻Bento卡片和明快箭头。",
        "representative_projects": "机场", "deployment": "公有云", "entry_points": "PC管理端＋独立小程序＋设备端",
        "options": "支付接口、高峰性能、设备监控、等保", "evidence_status": "A/B-项目主档与软件范围；终端BOM待合同级冻结",
    },
    {
        "spu": "营养结算", "sku": "NC-GRP", "name": "集团版消费结算",
        "buyer": "集团后勤、财务或园区运营负责人",
        "one_liner": "把多公司组织、账户、补贴、消费和对账统一到集团平台。",
        "primary_buying_point": "集团总部看全局，各公司只看自己的人员、资金和账。",
        "suitable_for": ["多公司集团", "跨区域园区或团餐运营方"],
        "standard_combo": ["集团PC管理端", "员工SaaS小程序", "多食堂消费终端"],
        "core_modules": [
            {"name": "集团组织", "points": ["集团公司分级管理", "公司数据权限隔离"]},
            {"name": "账户补贴", "points": ["个人部门企业账户", "补贴发放与归属"]},
            {"name": "多食堂消费", "points": ["多公司多食堂结算", "订单按组织归集"]},
            {"name": "集团对账", "points": ["公司食堂分级报表", "集团统一汇总"]},
        ],
        "main_flow": ["集团与公司开通", "人员账户归属", "补贴下发", "多食堂消费", "集团分级对账"],
        "customer_values": ["公司权限隔离", "资金归属清楚", "集团统一汇总"],
        "boundaries": ["多法人结算口径需冻结", "硬件接口按需选配", "食安与进销存不包含"],
        "forbidden_terms": COMMON_FORBIDDEN,
        "infographic_focus": "集团、公司、人员账户、多食堂消费和集团报表；康比特橙黄主色、年轻Bento卡片和明快箭头。",
        "representative_projects": "赛迪", "deployment": "公有云", "entry_points": "集团PC管理端＋SaaS小程序＋设备端",
        "options": "多公司隔离、接口、高峰性能、经营驾驶舱", "evidence_status": "B-项目脑图与内部产品梳理；多公司闭环需补系统证据",
    },
    {
        "spu": "营养结算", "sku": "NC-POL", "name": "补贴与多策略结算",
        "buyer": "央国企后勤、财务与福利管理负责人",
        "one_liner": "按人员、餐次和消费场景统一管理补贴、餐标与扣款策略。",
        "primary_buying_point": "复杂人群和福利规则可执行、可追溯、可分类对账。",
        "suitable_for": ["多人群央国企食堂", "补贴与招待场景复杂的单位"],
        "standard_combo": ["策略型PC管理端", "员工H5", "消费终端"],
        "core_modules": [
            {"name": "人员身份", "points": ["组织部门和身份分组", "本人亲友招待访客归类"]},
            {"name": "账户补贴", "points": ["现金与补贴账户", "补贴发放审批和留痕"]},
            {"name": "场景策略", "points": ["班次餐标与消费限额", "按消费场景匹配扣款"]},
            {"name": "异常与财务", "points": ["异常补单审核", "分类汇总和财务对账"]},
        ],
        "main_flow": ["人员身份归类", "补贴餐标配置", "按场景消费", "异常补单审核", "分类汇总对账"],
        "customer_values": ["福利规则可落地", "多人群互不混账", "全过程可追溯"],
        "boundaries": ["资金规则项目级冻结", "新增消费场景需评估", "财务接口另行联调"],
        "forbidden_terms": COMMON_FORBIDDEN,
        "infographic_focus": "员工身份、补贴账户、多场景消费、补单审核和分类对账；康比特橙黄主色、年轻Bento卡片和明快箭头。",
        "representative_projects": "国信、莱迪森（建宁中学）", "deployment": "私有云", "entry_points": "PC管理端＋H5＋设备端",
        "options": "一卡通、移动订餐、财务接口、等保", "evidence_status": "B-国信项目脑图；具体资金口径需项目冻结",
    },
    {
        "spu": "营养结算", "sku": "NC-WGT", "name": "绑盘称重结算",
        "buyer": "高校、医院或大型自助餐线运营负责人",
        "one_liner": "通过身份识别和托盘绑定，把多菜位按克取餐统一归集结算。",
        "primary_buying_point": "多菜位连续取餐，按克计价，结算和设备状态集中管理。",
        "suitable_for": ["高校自助称重餐线", "医院或机构职工食堂"],
        "standard_combo": ["PC管理端", "绑盘终端", "称重餐台＋兜底结算终端"],
        "core_modules": [
            {"name": "身份绑盘", "points": ["人员账户识别", "托盘绑定与解绑"]},
            {"name": "称重取餐", "points": ["多菜位按克计价", "金额与营养累计"]},
            {"name": "统一结算", "points": ["完成扣款与订单归集", "余额和异常兜底"]},
            {"name": "餐线运营", "points": ["设备状态监控", "订单和餐线统计"]},
        ],
        "main_flow": ["身份识别", "托盘绑定", "多菜位称重取餐", "统一结算", "订单设备对账"],
        "customer_values": ["取餐连续高效", "按克计价透明", "餐线统一管理"],
        "boundaries": ["设备型号协议需冻结", "吞吐以真机压测为准", "一卡通接口另行联调"],
        "forbidden_terms": COMMON_FORBIDDEN,
        "infographic_focus": "身份终端、托盘、连续称重餐台、结算终端和运营报表；康比特橙黄主色、年轻Bento卡片和明快箭头。",
        "representative_projects": "滨州、江西206、国康、西康宾馆、重庆环卫", "deployment": "私有云、本地部署或纯离线", "entry_points": "PC管理端＋小程序（可选）＋设备端",
        "options": "一卡通、补贴策略、高峰性能、食安设备", "evidence_status": "A/B-多个项目软件与硬件证据；型号数量点位需逐项目冻结",
    },
    {
        "spu": "营养结算", "sku": "NC-NBW", "name": "免绑盘称重结算",
        "buyer": "追求少步骤、大规模称重取餐的后勤负责人",
        "one_liner": "无需绑定托盘，身份识别后直接完成多菜位称重归集和自动结算。",
        "primary_buying_point": "减少绑盘步骤，让大规模称重餐线更顺畅。",
        "suitable_for": ["大规模称重自助餐线", "希望减少入口操作的单位"],
        "standard_combo": ["PC管理端", "免绑盘称重餐台", "身份终端＋余量看板"],
        "core_modules": [
            {"name": "身份直连", "points": ["身份识别进入餐线", "消费归属自动关联"]},
            {"name": "免绑称重", "points": ["多菜位按克计价", "金额与营养自动归集"]},
            {"name": "自动结算", "points": ["自动扣款生成订单", "异常交易人工兜底"]},
            {"name": "餐线看板", "points": ["菜品余量展示", "设备与经营数据汇总"]},
        ],
        "main_flow": ["身份识别", "免绑盘称重取餐", "自动归集计价", "自动结算", "异常兜底与经营汇总"],
        "customer_values": ["入口步骤更少", "大规模餐线更顺", "数据自动汇总"],
        "boundaries": ["免绑能力须真机验证", "自动扣款规则需冻结", "设备兼容按型号验收"],
        "forbidden_terms": COMMON_FORBIDDEN,
        "infographic_focus": "身份识别、免绑盘称重餐台、自动计价、自动结算和余量看板；康比特橙黄主色、年轻Bento卡片和明快箭头。",
        "representative_projects": "C08", "deployment": "政务云或本地化", "entry_points": "PC管理端＋独立小程序（可选）＋设备端",
        "options": "营养大屏、高峰性能、等保、国产化", "evidence_status": "B-硬件与项目梳理；软件全链路和高峰数据待真机补证",
    },
    {
        "spu": "营养结算", "sku": "NC-AIV", "name": "AI视觉识别结算",
        "buyer": "标准菜品餐线的后勤与食堂运营负责人",
        "one_liner": "通过菜品建模和视觉识别，自动识别餐盘菜品并完成计价结算。",
        "primary_buying_point": "减少逐项录入，让标准菜品结算更直观。",
        "suitable_for": ["标准餐具和标准菜品餐线", "小碗菜或套餐结算场景"],
        "standard_combo": ["PC管理端", "菜品模型服务", "AI视觉识别结算台"],
        "core_modules": [
            {"name": "菜品建模", "points": ["标准菜品与餐具建模", "价格和营养信息关联"]},
            {"name": "视觉识别", "points": ["餐盘菜品自动识别", "识别结果现场展示"]},
            {"name": "纠错结算", "points": ["人工确认或纠错", "自动计价与支付"]},
            {"name": "识别运营", "points": ["识别日志追溯", "订单和经营分析"]},
        ],
        "main_flow": ["菜品建模", "摆餐识别", "人工确认或纠错", "自动计价支付", "识别与经营复盘"],
        "customer_values": ["结算更直观", "人工录入更少", "识别过程可复盘"],
        "boundaries": ["准确率以真实菜品测试为准", "模型范围按项目冻结", "必须保留人工兜底"],
        "forbidden_terms": COMMON_FORBIDDEN,
        "infographic_focus": "菜品建模、餐盘识别、人工纠错、支付和识别复盘；康比特橙黄主色、年轻Bento卡片和明快箭头。",
        "representative_projects": "四方达、无锡新吴区政府", "deployment": "私有云或政务云", "entry_points": "PC管理端＋独立小程序（可选）＋设备端",
        "options": "模型服务、支付接口、营养展示、高峰性能", "evidence_status": "A/B-标准硬件与项目证据；识别指标需绑定菜品与现场条件",
    },
    {
        "spu": "营养结算", "sku": "NC-ORD", "name": "移动订餐与取餐",
        "buyer": "企业后勤、食堂运营与员工服务负责人",
        "one_liner": "员工线上选餐下单，厨房接单出餐，并通过叫号、自提或取餐柜完成核销。",
        "primary_buying_point": "把下单、厨房出餐和取餐核销串成一条可统计的闭环。",
        "suitable_for": ["企业员工预约订餐", "多档口集中出餐"],
        "standard_combo": ["PC管理端", "员工SaaS小程序", "厨房出餐终端"],
        "core_modules": [
            {"name": "菜单订餐", "points": ["菜单和可售库存发布", "员工选餐下单与支付"]},
            {"name": "厨房执行", "points": ["按厨房档口分单", "打印或屏显出餐任务"]},
            {"name": "取餐核销", "points": ["堂食自提或叫号", "取餐码与柜机核销"]},
            {"name": "订单运营", "points": ["订单状态与异常处理", "销量和取餐方式分析"]},
        ],
        "main_flow": ["菜单发布", "员工下单", "厨房分单出餐", "叫号或装柜", "核销取餐", "订单统计"],
        "customer_values": ["提前分流高峰", "厨房出餐有序", "取餐过程可追踪"],
        "boundaries": ["打印与柜机按型号选配", "配送接口另行评估", "营养AI服务不默认包含"],
        "forbidden_terms": COMMON_FORBIDDEN,
        "infographic_focus": "手机选餐、厨房分单、出餐叫号或装柜、核销取餐和订单统计；康比特橙黄主色、年轻Bento卡片和明快箭头。",
        "representative_projects": "金斯瑞", "deployment": "公有云", "entry_points": "PC管理端＋SaaS小程序＋厨房/取餐设备端",
        "options": "厨房打印、叫号大屏、智能取餐柜、配送接口", "evidence_status": "A/B-生产只读使用数据与项目脑图；设备协议按型号冻结",
    },
    {
        "spu": "营养结算", "sku": "NC-K12", "name": "K12家校阳光消费",
        "buyer": "区域教育运营方、学校或银行合作方",
        "one_liner": "学校在PC端开通，家长从邮储App进入，完成学生绑定、餐费缴纳、订餐和查询。",
        "primary_buying_point": "一套平台持续开学校，家长入口统一，学校账目各自独立。",
        "suitable_for": ["区域中小学统一运营", "银行App内嵌家校餐费服务"],
        "standard_combo": ["多学校PC管理端", "邮储App内嵌H5", "学生核销终端"],
        "core_modules": [
            {"name": "学校开通", "points": ["新学校独立开通", "学校数据权限隔离"]},
            {"name": "学生家长", "points": ["学生与班级建档", "家长绑定一个或多个学生"]},
            {"name": "缴费订餐", "points": ["家长缴纳餐费", "查看菜单并为学生订餐"]},
            {"name": "核销对账", "points": ["学生到校核销取餐", "学校按账单完成对账"]},
        ],
        "main_flow": ["学校开通", "学生建档", "家长绑定学生", "缴费并订餐", "学生核销取餐", "学校对账"],
        "customer_values": ["多学校独立管理", "家长入口统一", "餐费流向可追溯"],
        "boundaries": ["只做餐费和餐饮业务", "银行接口按项目联调", "教务食安进销存不包含"],
        "forbidden_terms": COMMON_FORBIDDEN + ["消费规则", "账单管理"],
        "infographic_focus": "学校、学生、家长手机、核销终端和学校对账；康比特橙黄主色、年轻Bento卡片和明快箭头。",
        "representative_projects": "首通智城", "deployment": "私有云", "entry_points": "PC管理端＋邮储App内嵌H5＋核销设备端",
        "options": "邮储App、银行支付、消费通知、菜单公示", "evidence_status": "B-项目手册与脑图；银行接口范围需逐校联调",
    },
    {
        "spu": "营养结算", "sku": "NC-DSP", "name": "营养菜单与电子菜牌",
        "buyer": "学校或单位食堂的运营与宣传负责人",
        "one_liner": "在PC端维护菜单、价格和营养信息，审核后定时发布到多块电子菜牌。",
        "primary_buying_point": "菜单一次维护，多屏统一更新，营养与价格展示更直观。",
        "suitable_for": ["校园菜单与营养公示", "多档口电子菜牌更新"],
        "standard_combo": ["PC内容管理端", "电子菜牌", "屏幕发布与状态服务"],
        "core_modules": [
            {"name": "菜单菜品", "points": ["菜品餐次与价格维护", "图片和营养标签关联"]},
            {"name": "内容审核", "points": ["发布内容预览", "审核通过后进入发布"]},
            {"name": "多屏发布", "points": ["屏幕与档口编组", "定时发布和异常重发"]},
            {"name": "设备状态", "points": ["屏幕关联和在线状态", "发布日志与结果追溯"]},
        ],
        "main_flow": ["菜单菜品维护", "内容预览审核", "屏幕档口编组", "定时统一发布", "状态监测与异常重发"],
        "customer_values": ["菜单更新更快", "多屏内容一致", "营养价格更直观"],
        "boundaries": ["不默认包含消费结算", "不默认包含点餐叫号", "屏幕型号按项目确认"],
        "forbidden_terms": COMMON_FORBIDDEN,
        "infographic_focus": "PC菜单维护、内容审核、多屏编组、定时发布和设备状态；康比特橙黄主色、年轻Bento卡片和明快箭头。",
        "representative_projects": "人大附中、无锡新吴", "deployment": "公有云或政务云", "entry_points": "PC管理端＋电子菜牌设备端",
        "options": "电子价签、营养大屏、菜谱数据接口", "evidence_status": "B-人大附中项目脑图；消费与点餐设备不在默认范围",
    },
    {
        "spu": "营养结算", "sku": "NC-SUP", "name": "集中保障供餐",
        "buyer": "部队或封闭机构的后勤保障负责人",
        "one_liner": "在纯内网或离线环境中，按编制、餐标和供餐批次完成身份核验与对账。",
        "primary_buying_point": "断网也能完成保障供餐，恢复后数据可回传、可审计。",
        "suitable_for": ["部队集中保障供餐", "封闭内网机构食堂"],
        "standard_combo": ["本地PC管理端", "离线身份核验终端", "内网数据与备份服务"],
        "core_modules": [
            {"name": "编制餐标", "points": ["编制人员与身份维护", "餐标和保障批次配置"]},
            {"name": "离线核销", "points": ["本地身份核验", "断网完成供餐核销"]},
            {"name": "恢复对账", "points": ["恢复后数据回传", "重复与差异处理"]},
            {"name": "安全审计", "points": ["权限和终端白名单", "操作日志与备份恢复"]},
        ],
        "main_flow": ["编制人员导入", "餐标批次配置", "离线身份核验", "集中供餐核销", "恢复回传对账", "权限审计"],
        "customer_values": ["离线也能供餐", "保障过程可追溯", "安全边界清楚"],
        "boundaries": ["当前为储备方案", "离线一致性专项验收", "安全等级按项目确认"],
        "forbidden_terms": COMMON_FORBIDDEN,
        "infographic_focus": "编制人员、餐标批次、离线终端、集中供餐、恢复回传和审计；康比特橙黄主色、年轻Bento卡片和明快箭头。",
        "representative_projects": "安徽部队", "deployment": "纯离线或内网", "entry_points": "PC管理端＋本地终端",
        "options": "内网安全、备份恢复、终端白名单", "evidence_status": "C/D-场景与项目线索；尚无合同级软件和验收证据",
    },
    {
        "spu": "营养结算", "sku": "NC-PRO", "name": "营养健康智厨专业版",
        "buyer": "企事业单位后勤、人力健康管理与团餐运营负责人",
        "one_liner": "同一方案覆盖健康测评、营养管理、智能烹饪、称重结算和余量管理。",
        "primary_buying_point": "从员工健康数据到菜品生产、取餐结算和余量复盘，形成专业健康食堂运营框架。",
        "suitable_for": ["企事业单位健康食堂", "需要健康测评与智能厨房协同的团餐运营方"],
        "standard_combo": ["营养健康管理PC＋手机端", "称重餐台＋绑盘终端", "SH-V20健康测评＋TC-40EA智能烹饪", "余量管理＋厨房打印＋云服务"],
        "core_modules": [
            {"name": "健康测评", "points": ["身高体重BMI与血压体脂", "个人档案与历史测量查询"]},
            {"name": "营养运营", "points": ["健康档案与营养目标", "菜单菜品和餐食记录管理"]},
            {"name": "智能烹饪", "points": ["自动控温翻炒和调味", "标准菜谱执行与后厨打印"]},
            {"name": "称重经营", "points": ["绑盘称重取餐与结算", "余量记录和经营复盘"]},
        ],
        "main_flow": ["健康测评建档", "营养菜单编排", "智能烹饪出餐", "绑盘称重取餐", "营养结算留痕", "余量与健康复盘"],
        "customer_values": ["健康服务有数据", "出餐标准更稳定", "取餐经营可复盘"],
        "boundaries": ["健康设备数据接口需联调", "烹饪机器人菜谱联动需验收", "设备数量与余量规则按项目配置"],
        "forbidden_terms": COMMON_FORBIDDEN,
        "infographic_focus": "健康测评、营养菜单、智能烹饪机器人、双秤称重取餐、营养结算和余量复盘；CPT橙黄主色、年轻Bento卡片和明快箭头。",
        "representative_projects": "哈尔滨膳质舍营养结算项目", "deployment": "公有云＋设备端", "entry_points": "PC管理端＋手机端＋健康测评设备＋智能烹饪设备＋称重设备",
        "options": "健康设备数据接口、菜谱联动、余量数据接口、设备数量", "evidence_status": "A-合同确认组合BOM与买方；B-设备参数和厂商手册；数据贯通与项目验收待补证",
    },
    {
        "spu": "智慧食安", "sku": "FS-SGL", "name": "单食堂智慧食安",
        "buyer": "单校或单餐厅的后勤与食品安全负责人",
        "one_liner": "把单个食堂每天应做的检查、留样、台账和整改放到一套系统闭环。",
        "primary_buying_point": "日常工作有记录，问题有人改，结果可复核。",
        "suitable_for": ["单所学校食堂", "单个机关或企业餐厅"],
        "standard_combo": ["PC管理端", "现场H5", "基础食安电子台账"],
        "core_modules": [
            {"name": "责任档案", "points": ["食堂人员岗位和证照", "供应商食材与设备档案"]},
            {"name": "日常执行", "points": ["晨检收货留样快检", "消毒巡检等过程记录"]},
            {"name": "问题闭环", "points": ["发现分派和限时整改", "复核退回关闭与留痕"]},
            {"name": "电子台账", "points": ["记录证据集中归档", "按周期查询和导出"]},
        ],
        "main_flow": ["责任档案建立", "每日晨检与验收", "留样快检和巡检", "问题整改复核", "电子台账归档"],
        "customer_values": ["日常执行不遗漏", "问题整改可闭环", "履责证据可追溯"],
        "boundaries": ["AI视频按点位选配", "智能设备按型号验收", "不包含完整进销存"],
        "forbidden_terms": COMMON_FORBIDDEN,
        "infographic_focus": "责任档案、晨检验收、留样巡检、整改复核和电子台账；康比特橙黄主色、年轻Bento卡片和明快箭头。",
        "representative_projects": "网信办、江西206", "deployment": "本地部署、纯内网或公有云", "entry_points": "PC管理端＋H5",
        "options": "AI视频、智能收货、晨检留样设备、监管接口", "evidence_status": "B-内部项目清单；用户2026-09-02确认纳入最终17个SKU",
    },
    {
        "spu": "智慧食安", "sku": "FS-MLT", "name": "多食堂智慧食安",
        "buyer": "统一管理多个食堂的后勤与食品安全负责人",
        "one_liner": "多个食堂按同一标准执行，管理方统一看风险、督办整改和比较结果。",
        "primary_buying_point": "各食堂自己做，管理方统一看、统一督。",
        "suitable_for": ["一所学校内多食堂", "同一单位多个餐厅或校点"],
        "standard_combo": ["多食堂PC管理端", "现场H5", "分级权限与风险汇总"],
        "core_modules": [
            {"name": "多点档案", "points": ["食堂场所和责任人分级", "人员证照与设备统一纳管"]},
            {"name": "统一执行", "points": ["标准任务和模板下发", "各食堂完成日常台账"]},
            {"name": "风险汇总", "points": ["风险趋势与食堂比较", "严重重复超期问题识别"]},
            {"name": "督办复核", "points": ["重点问题整改督办", "管理复核与证据归档"]},
        ],
        "main_flow": ["统一标准下发", "各食堂日常执行", "风险汇总比较", "重点问题督办", "整改复核归档"],
        "customer_values": ["多点标准一致", "重点风险看得清", "整改进度可督办"],
        "boundaries": ["同一责任主体内使用", "跨法人监管需另行评估", "设备数量按点位核定"],
        "forbidden_terms": COMMON_FORBIDDEN,
        "infographic_focus": "统一标准、多个食堂、风险比较、督办整改和复核归档；康比特橙黄主色、年轻Bento卡片和明快箭头。",
        "representative_projects": "大兴三校", "deployment": "私有云或本地部署", "entry_points": "PC监管端＋H5",
        "options": "AI视频、多点设备、公示大屏、监管接口", "evidence_status": "B-内部项目清单；用户2026-09-02确认纳入最终17个SKU",
    },
    {
        "spu": "智慧食安", "sku": "FS-GRP", "name": "集团智慧食安",
        "buyer": "集团总部后勤、食安或区域监管负责人",
        "one_liner": "集团统一下发食安标准，跨区域汇总风险并督办重点问题闭环。",
        "primary_buying_point": "总部掌握风险全局，区域和场所按责执行。",
        "suitable_for": ["跨区域集团餐厅", "需要总部统一监督的多组织单位"],
        "standard_combo": ["集团PC管理端", "现场H5", "集团风险驾驶舱"],
        "core_modules": [
            {"name": "集团标准", "points": ["标准模板统一下发", "区域场所分级权限"]},
            {"name": "跨区采集", "points": ["多区域台账和风险归集", "视频设备信号按权接入"]},
            {"name": "重点督办", "points": ["严重重复超期问题识别", "集团发起整改和复核"]},
            {"name": "集团驾驶舱", "points": ["区域场所横向比较", "履责趋势和管理报告"]},
        ],
        "main_flow": ["集团标准下发", "多区域执行采集", "集团风险识别", "重点问题督办", "整改复核归档", "驾驶舱汇总"],
        "customer_values": ["集团标准统一", "跨区域风险透明", "重点问题有闭环"],
        "boundaries": ["多级组织按项目冻结", "AI不自动定责", "ERP进销存接口另行评估"],
        "forbidden_terms": COMMON_FORBIDDEN,
        "infographic_focus": "集团标准、跨区域场所、风险识别、重点督办、复核和驾驶舱；康比特橙黄主色、年轻Bento卡片和明快箭头。",
        "representative_projects": "三全、国信", "deployment": "私有云、本地部署或高可用", "entry_points": "PC集团端＋H5＋监管大屏",
        "options": "AI视频、智能收货、SAP或ERP接口、高可用", "evidence_status": "B-内部项目清单；用户2026-09-02确认纳入最终17个SKU",
    },
    {
        "spu": "智慧进销存", "sku": "IM-SGL", "name": "单食堂进销存",
        "buyer": "单食堂采购、库管与财务负责人",
        "one_liner": "把供应商、采购、收货、库存和盘点串成单食堂物资闭环。",
        "primary_buying_point": "每一批食材从采购到库存都有记录，账实更容易核对。",
        "suitable_for": ["单食堂独立采购库存", "单校或单单位后厨"],
        "standard_combo": ["PC管理端", "库管PDA", "采购与库存基础模块"],
        "core_modules": [
            {"name": "供应采购", "points": ["供应商和商品档案", "采购申请订单与审批"]},
            {"name": "收货入库", "points": ["到货验收与票证", "批次和保质期入库"]},
            {"name": "领用盘点", "points": ["出库领用和退库", "盘点差异与库存调整"]},
            {"name": "库存分析", "points": ["库存预警和临期提醒", "出入库和库存报表"]},
        ],
        "main_flow": ["供应商商品建档", "采购申请审批", "收货验收入库", "出库领用", "盘点差异处理", "库存报表"],
        "customer_values": ["采购过程可追溯", "库存账实更清楚", "临期短缺早发现"],
        "boundaries": ["询比价属于选配", "财务接口另行联调", "智能秤按型号验收"],
        "forbidden_terms": COMMON_FORBIDDEN,
        "infographic_focus": "供应商商品、采购审批、收货入库、出库领用、盘点和库存报表；康比特橙黄主色、年轻Bento卡片和明快箭头。",
        "representative_projects": "滨州、保康三中", "deployment": "公有云、私有云或本地部署", "entry_points": "PC管理端＋PDA",
        "options": "采购审批、PDA、成本核算、财务接口", "evidence_status": "B/C-内部清单；保康三中为规划样板，需验收补证",
    },
    {
        "spu": "智慧进销存", "sku": "IM-MLT", "name": "多食堂进销存",
        "buyer": "统一管理多个食堂采购和库存的后勤负责人",
        "one_liner": "多个食堂统一采购、分仓入库、跨仓调拨并汇总库存。",
        "primary_buying_point": "集中采购不混仓，各食堂库存看得清、调得动。",
        "suitable_for": ["同一单位多食堂", "多校点统一采购与分仓"],
        "standard_combo": ["多食堂PC管理端", "多仓库模块", "库管PDA"],
        "core_modules": [
            {"name": "需求采购", "points": ["各食堂需求汇总", "统一采购和分级审批"]},
            {"name": "分仓库存", "points": ["各食堂独立收货入库", "批次保质期分仓管理"]},
            {"name": "跨仓调拨", "points": ["跨食堂调拨申请", "调出调入双向确认"]},
            {"name": "汇总分析", "points": ["分仓和总库存汇总", "差异预警和经营报表"]},
        ],
        "main_flow": ["各食堂需求上报", "统一采购审批", "分仓收货入库", "跨仓调拨", "汇总盘点", "差异处理与报表"],
        "customer_values": ["集中采购更统一", "分仓库存不混账", "跨仓调拨可追踪"],
        "boundaries": ["同一母项目内使用", "供应商协同属于选配", "跨法人结算需评估"],
        "forbidden_terms": COMMON_FORBIDDEN,
        "infographic_focus": "多个食堂需求、统一采购、分仓入库、跨仓调拨、汇总盘点和报表；康比特橙黄主色、年轻Bento卡片和明快箭头。",
        "representative_projects": "大兴三校", "deployment": "私有云或本地部署", "entry_points": "PC管理端＋PDA",
        "options": "供应商协同、PDA、批次追溯、监管接口", "evidence_status": "B-内部项目清单；三校属于同一母项目",
    },
    {
        "spu": "智慧进销存", "sku": "IM-GRP", "name": "集团采购与库存",
        "buyer": "集团采购、仓储、财务与成本管理负责人",
        "one_liner": "集团汇总多公司需求，集中采购，并管理中央仓与门店仓的库存和成本。",
        "primary_buying_point": "集团集中管采购，各公司和仓库权限、库存与成本归属清楚。",
        "suitable_for": ["多公司多食堂集团", "中央仓加门店仓运营模式"],
        "standard_combo": ["集团PC管理端", "多公司多仓模块", "H5＋库管PDA"],
        "core_modules": [
            {"name": "多公司需求", "points": ["公司食堂需求归集", "组织数据与审批隔离"]},
            {"name": "集中采购", "points": ["集团采购计划与审批", "供应商订单统一管理"]},
            {"name": "多级仓储", "points": ["中央仓和门店仓", "调拨出库与批次追溯"]},
            {"name": "集团成本", "points": ["公司食堂成本归集", "集团库存与成本分析"]},
        ],
        "main_flow": ["多公司需求汇总", "集团采购审批", "中央仓收货入库", "门店调拨与领用", "多仓盘点", "集团成本汇总"],
        "customer_values": ["集团采购更集中", "多公司权限不混", "库存成本统一看"],
        "boundaries": ["多公司规则单独计价", "ERP财务接口另行联调", "定制报表按项目评估"],
        "forbidden_terms": COMMON_FORBIDDEN,
        "infographic_focus": "多公司需求、集团采购、中央仓、门店仓、调拨盘点和集团成本；康比特橙黄主色、年轻Bento卡片和明快箭头。",
        "representative_projects": "三全", "deployment": "私有云、本地部署或高可用", "entry_points": "PC集团端＋H5＋PDA",
        "options": "SAP或ERP、供应商协同、成本核算、高可用", "evidence_status": "B-内部项目清单；集团定制项需单独冻结",
    },
]


def validate(item: dict) -> None:
    required = [
        "sequence", "spu_sequence", "sku_sequence", "release_code", "release_name",
        "spu", "sku", "name", "buyer", "one_liner", "primary_buying_point",
        "suitable_for", "standard_combo", "core_modules", "main_flow",
        "customer_values", "boundaries", "forbidden_terms", "infographic_focus",
        "representative_projects", "deployment", "entry_points", "options", "evidence_status",
    ]
    missing = [key for key in required if key not in item]
    if missing:
        raise ValueError(f"{item.get('sku', '?')}: missing {missing}")
    if len(item["core_modules"]) != 4:
        raise ValueError(f"{item['sku']}: core_modules must equal 4")
    if not 4 <= len(item["main_flow"]) <= 6:
        raise ValueError(f"{item['sku']}: main_flow must contain 4-6 steps")
    if len(item["customer_values"]) != 3 or len(item["boundaries"]) != 3:
        raise ValueError(f"{item['sku']}: values and boundaries must equal 3")
    if len({item["sku"] for item in SKU_DATA}) != len(SKU_DATA):
        raise ValueError("duplicate SKU code")


def main() -> int:
    OUT.mkdir(parents=True, exist_ok=True)
    spu_sequences = {"营养结算": "01", "智慧食安": "02", "智慧进销存": "03"}
    spu_counts: dict[str, int] = {}
    for index, item in enumerate(SKU_DATA, 1):
        item["sequence"] = f"{index:02d}"
        item["spu_sequence"] = spu_sequences[item["spu"]]
        spu_counts[item["spu"]] = spu_counts.get(item["spu"], 0) + 1
        item["sku_sequence"] = f"{spu_counts[item['spu']]:02d}"
        item["release_code"] = f"SPU{item['spu_sequence']}-SKU{item['sku_sequence']}"
        item["release_name"] = f"{item['release_code']}-{item['name']}"
        item["sku"] = item["release_code"]
        validate(item)
        (OUT / f"{item['sku']}.json").write_text(
            json.dumps(item, ensure_ascii=False, indent=2) + "\n", encoding="utf-8"
        )
    fields = [
        "sequence", "release_name", "spu_sequence", "sku_sequence", "spu", "sku", "name", "buyer", "primary_buying_point", "representative_projects",
        "deployment", "entry_points", "options", "evidence_status", "main_flow", "boundaries",
    ]
    with (ROOT / "sku-evidence-matrix.csv").open("w", newline="", encoding="utf-8-sig") as handle:
        writer = csv.DictWriter(handle, fieldnames=fields)
        writer.writeheader()
        for item in SKU_DATA:
            row = {key: item[key] for key in fields}
            row["main_flow"] = " → ".join(item["main_flow"])
            row["boundaries"] = "；".join(item["boundaries"])
            writer.writerow(row)
    print(json.dumps({"count": len(SKU_DATA), "output": str(OUT)}, ensure_ascii=False))
    return 0


if __name__ == "__main__":
    raise SystemExit(main())
