零售软件

收银软件、支付、商品核算与连锁门店管理

零售系统的开发与落地:卖场里的收银台与 POS、支付终端、商品目录与价格、门店库存与仓储、会员、员工权限、数据分析,以及连锁的中央管理面板。以下说明每个模块如何构成、与哪些系统和设备相连、覆盖哪一段流程。

零售软件

是什么

零售软件 — 一套系统,把商品从门店收货一路带到打出的小票和入账的营收,并让商品、价格和库存数据在连锁的每一个网点保持一致。

从外面看,门店就是货架加收银台。里面则是几个互相连接的程序:卖场里的收银程序、门店的商品核算、支付链路、连锁的中央系统,以及与财务、仓储、CRM、网店等外部系统的交换层。

「收银程序」和「零售系统」之间的界线,划在门店数量和决策发生的位置上。一台收银台,用收银电脑上的本地程序就够了。一旦门店多于一家,就会出现单店从来不会遇到的问题:唯一那份商品台账放在哪里、谁能一次改遍所有门店的价格、商品在门店之间怎么流转、以谁的库存数为准。

零售连锁的链路——由数据串起来的九个环节:

这条链路由什么构成从货架到中央系统
  • 1门店
  • 2收银台与 POS
  • 3支付终端
  • 4商品与 价格
  • 5仓储与 库存
  • 6会员
  • 7员工
  • 8数据分析
  • 9中央系统

这些环节是双向连通的:台账和规则从中央系统下发到各网点,销售、商品流转和设备事件则回传上来。任何一处断开都会立刻显形——货架价格与小票不一致、库存出现负数,或者营收没有入账。

系统操作的对象是什么

不是页面,也不是表格,而是业务对象——带有自身状态、操作者和历史的记录:

  • 商品项 — 货号、条码、计量单位、是否称重商品的标识、流通规则
  • 价格 — 在某个具体网点、某个具体时刻对该商品套用规则后的结果,而不是商品卡上的一个字段
  • 可售库存 — 某个具体网点上该商品的数量;十家门店的连锁有十个库存数,而不是一个
  • 小票 — 商品明细、折扣、支付、收银员、班次、时间;一经关闭即不可更改的单据
  • 支付操作 — 一条独立记录,与小票关联,但按自己的规则运行
  • 流转单据 — 收货、移库、退供应商、报损、盘点
  • 会员卡 — 顾客标识、积分余额、累计与抵扣历史
  • 员工与班次 — 谁在班、在哪台收银机、从几点到几点、结果如何
  • 设备事件 — 终端报错、断网、陈列柜温度、钱箱打开

一旦流程用对象描述出来,它就变得可核查:报表里的每一个数字背后都有单据,每份单据都有操作者和时间,每一次争议都有记录,而不是口头说法。

第二家门店会带来什么

四个单店根本不存在的问题。对它们的回答,正是连锁系统与收银程序的区别:

  • 台账只有一个来源 — 商品在哪里建档,价格从哪里分发到各网点
  • 用一条规则管不同的价格 — 网点归属于价格组,而不是逐个手工修改
  • 商品在门店之间流转 — 移库是一份有两半的单据,而不是「拉过去打声招呼」
  • 汇总视图 — 所有网点的销售、库存和异常在一个屏幕上,不必挨个给店长打电话

哪些问题 由系统解决

门店或连锁上零售软件的六个理由。没有系统的时候,每一项都要靠表格、门店之间打电话和凭记忆重数来完成。

整个连锁共用一份台账

商品、条码、价格和折扣规则只建一次,然后分发到各网点。市中心的店和郊区的店读的是同一份台账,而不是两个改动历史各不相同的文件。

不用手工录入的小票

商品通过扫条码或称重进入小票,价格由规则填入,折扣由系统计算。收银员不手打价格——也就不会打错,更不会自己定价。

可信的库存数

销售在小票关闭的那一刻扣减商品,收货和移库在单据过账的那一刻扣减。库存不再是上次盘点留下的数字,而成了向供应商下单时可用的实数。

价格可管

价格和折扣按网点组、类目或时间计划用规则设定。促销前给一千个商品调价只要几分钟,而且可以回退,不必带着打印件跑一圈门店。

操作可追溯

退货、撤单、手工折扣、改价和开钱箱,都是带操作者、时间和原值的记录。争议按日志复盘,而不是听当班的人怎么说。

可度量

能看到每个网点在什么时段卖出了什么、哪些商品毫无动销、哪里的退货在增加,以及一场促销扣掉折扣后到底带来了多少。

系统 由什么构成

它不是一个程序,而是一组互相关联的软硬件部件。每个部件各司其职,也可以单独升级:不会因为中央面板加了一张新报表,就去重写卖场里的收银台。

收银软件

运行在收银电脑或 POS 一体机上的程序:收银员界面、与扫描枪和电子秤协同、小票计算、与支付终端的交互、打印单据、班次管理。它可自主运行,与服务器失联时仍能继续为顾客结账。

门店设备

物理层:收银电脑、扫描枪、小票打印机、支付终端、电子秤、数据采集终端、钱箱、显示屏。每一台设备都登记在台账里,并绑定到具体门店和工位。

支付基础设施

无现金支付链路:收银台与支付终端之间的交互、支付操作的状态、把支付与小票对应起来、退款、处理拒付和中断、与收单机构流水的对账。

服务端

接收各网点数据、套用规则、交换队列、任务与报表调度、把台账回发下去。它随门店数量扩容,而不是开到第十一家时就要重写。

数据库

存放业务对象及其历史:商品、价格、库存、小票、支付、流转单据、顾客、员工、事件。操作记录不可篡改,备份按计划创建并做恢复验证。

中央管理面板

连锁管理者的工作台:门店、商品结构、价格、库存、销售、促销、员工、设备、错误和关键指标集中在一个界面里,并按角色划分访问权限。

移动应用

哪里需要就用在哪里:商品专员用于扫码收货和盘点的应用、管理者查看各网点汇总的应用、顾客用的带会员卡和电子小票的应用。

对接层

与外部系统的数据交换:财务、会计、仓储、CRM、网店、支付服务。队列、消息重投递、格式版本、数据交换日志、定期对账。

数据分析系统

建立在业务操作之上的数据看板:销售、客单价、毛利、周转、退货、促销效果、收银员表现。它在数据副本上计算,这样重报表永远不会拖慢卖场里的收银台。

这些部件之间不是「有条件就连」,而是必须相连:没有台账收银台就不工作,没有中央面板台账就没有意义,没有各网点的数据面板就毫无用处。因此系统要整体设计、分块落地——顺序上让每一步都建立在上一步的数据之上。

收银软件

以及卖场里的 POS

收银程序 — 既是营业员的工作台,也是操作变成单据的那个点。卖场里发生的一切只有经过它才会进入系统:销售、退货、折扣、支付、现金存入和取出。

对它的要求比对其他任何模块都苛刻:排队时也得快,与服务器断开时也得能用。因此收银台本地保存一份商品和价格台账,并把操作写进本地队列,而不是为小票上的每一行去问服务器。

收银程序都做什么:

  • 生成小票 — 通过扫条码、按名称检索或称重把商品加入;数量、价格和金额由系统计算
  • 套用价格与折扣 — 按本网点当前生效的规则:促销、优惠码、会员卡、专属条件、最低价限制
  • 与支付终端交互 — 把金额传过去、等待结果、把支付与小票关联
  • 拆分支付 — 一部分现金、一部分刷卡、一部分用积分:同一张小票里有多笔支付操作
  • 打印单据 — 在连接的打印机或税控打印机上打出销售或退货小票
  • 办理退货 — 按原小票号办理,并校验商品明细和已经退过的部分
  • 挂单与恢复小票 — 顾客回去拿忘了的商品,收银台照常继续工作
  • 管理班次 — 开班、中间和最终报表、现金存入与取出、结班时计算差额
  • 区分权限 — 按账号登录;手工折扣、改价和撤销单行不是人人都能做

税务部分的要求——小票打印、内容和数据上传——由所在国家的法规和所连设备的型号决定。具体内容和交互顺序在调研阶段确认,而不是事先宣称。

现代门店的收银区,配有 POS 一体机、扫描枪和小票打印机

断网时会发生什么

与服务器的连接不是销售的前提。收银台会继续用本地台账打小票,把操作堆进队列;链路恢复后队列成批补传。每个操作都带一个键,因此重发绝不会生成第二张小票,也不会重复扣减库存。

限制也如实说明:断网期间,收银台看不到中央系统一分钟前做的改价,也无法在服务器上核对积分余额。离线模式下究竟允许做什么,是项目决策:例如允许销售,但把积分抵扣推迟到恢复连接之后。

作为业务对象的班次

班次不是「收银员的工作日」,而是一份带起止时间、收银员、收银机和汇总结果的单据。这段时间内的所有小票、支付、退货和现金流转都挂在它下面。

  • 开班时记录钱箱里的现金余额
  • 不清零的中间报表——到目前为止卖了多少
  • 现金存入和取出作为带原因的独立操作
  • 结班时计算应有现金与实际现金之间的差额
  • 差额不会被「抹掉」:它会变成一条带金额、收银员和备注的记录

门店的 设备

门店里的程序并非孤立运行:几乎每一个操作都始于或终于某台物理设备。以下是收银和账务软件所交互的设备,以及系统具体从它那里取到什么、又向它传什么。

门店收银设备的技术示意图:POS 工位、扫描枪、打印机、电子秤和支付终端

收银电脑与 POS 一体机

运行收银程序的设备。系统把它视作一个工位:收银机、班次、所连外设组合和登录权限都绑定在它上面。换硬件不会破坏销售历史——工位仍然是同一个业务对象。

条码扫描枪

把商品录入小票和库存单据的主要方式。一个商品项可以对应多个条码——供应商的、自有的、包装上的。识别不出来的码不会丢失:它会进入待关联商品的队列,而不是变成一句「找不到商品」。

小票打印机与税控打印机

打印销售和退货单据。小票的内容、生成顺序和数据上传方式,取决于所在国家的规定和设备型号;具体组合在调研时确认。没打出来或没上传成功的单据会被记为未结操作。

支付终端与密码键盘

受理无现金支付。收银台把金额传过去,终端与持卡人交互并返回结果。终端不是外设,而是有自身状态的第二套系统,因此下面单列一节讲它。

电子秤

处理称重商品:商品以实际重量进入小票,价格按每公斤计算。电子秤分收银秤——重量直接进小票,和包装秤——打印一张条码标签,码里编入商品代码和重量;收银台解析这种码并自动带出商品。

数据采集终端

在卖场和门店库房里直接扫码完成收货、盘点、移库和改价。设备无需常连网络:单据在本地生成,整份上传到系统,并做差异校验。

钱箱与收银外设

钱箱由程序在现金操作发生时打开。每一次打开都是一个带时间、收银员和原因的事件;没有销售却开箱会进入受监控操作清单。工位的辅助外设——键盘、员工卡读卡器——也归入这里。

顾客显示屏与信息屏

收银台旁的显示屏随着扫码逐行显示商品、折扣和合计——顾客在付款前就看到价格,而不是付完才看到。卖场里的屏幕显示促销、专题和价格,取的是与收银台同一份台账,因此屏幕和小票之间不会出现不一致。

电子价签

在已经安装的地方,价签的价格来自与收银台同一套系统。这消除了卖场里最主要的冲突源——改价后货架价格与收银价格不一致。能否接入,取决于具体的价签系统对外提供什么样的管理接口。

我们不预先宣称支持某些品牌和型号的设备。可接入的设备范围在调研时按厂商文档以及设备对外开放的接口来确定;没有现成接口的,在开工前单独解决,而不是给一句「兼容」的承诺。

支付终端

与无现金支付

支付终端是购买唯一变成「已付款」的地方,也是门店里唯一直接跟钱打交道的节点。因此这里不把它写成设备清单里的一行,而是单列成一条链路。

主要的难点在于,收银台和终端是 两套独立的系统。收银台对小票有自己的一套认识,终端则有自己的支付操作,它活在收单机构的链路里,并不听命于收银程序。这两幅图景吻合,并没有物理上的保证:在「钱已扣」和「小票已打」之间总有一段间隙,断网、断电或卡死都可能正好落在里面。

收银台与支付终端的对接覆盖什么:

  • 传送金额 — 小票合计由收银程序发到终端;收银员不在终端上手工输金额
  • 取回结果 — 收银台等待终端应答,在知道操作结果之前不会关闭小票
  • 支付与小票的对应 — 支付操作标识写入小票,小票号写入支付记录
  • 退款 — 一笔独立的支付操作,与原操作和退货小票关联,而不是「从钱箱里拿现金给他」
  • 日终之前撤单 — 在收单机构链路允许的情况下,把整笔支付作废的操作
  • 错误处理 — 卡被拒付、余额不足、密码错误、断网、终端应答超时
  • 终端状态监控 — 可用、忙碌、无应答、需要日终结算、未连上银行
  • 支付方式 — 刷卡、非接触支付、二维码:具体组合由终端和与收单机构的协议决定
  • 与收银系统的关联 — 支付不是一个独立操作,而是关闭小票和结班的一部分

我们不点名银行、终端型号和支付协议:对接范围取决于具体终端提供什么样的交互接口,以及收单协议允许什么。这些在调研时确定并写进项目方案。

顾客在收银系统旁的独立支付终端上刷卡付款

为什么金额不手工输入

在终端上手工输金额,是开发上最便宜、运维上最昂贵的做法。它可能把某一位数字打错、收错金额,更要命的是它切断了小票与支付之间的关联:事后只能按时间和金额去对应,也就是只能大概对上。

由程序传送金额时,支付和小票在两侧都由标识关联起来。与收单机构的对账、争议交易的复盘,以及系统营收与账户资金差异的管控,全都建立在这一点上。

终端状态

轮询终端不只发生在付款那一刻。状态是一份单独的数据,在顾客还没站到收银台前就需要它:

  • 可用,随时可以受理操作
  • 忙碌——此前发起的操作正在进行
  • 无应答——设备不响应收银台的请求
  • 未连上银行——终端是活的,但无法完成交易
  • 需要日终结算——在终端未结班之前,交易不会通过

每一种状态都是日志里的一个事件。应答慢、或者每十笔就掉一笔的终端,早在店长报修之前就已经出现在设备报表里了。

支付操作: 流程与错误

刷卡付款不是一个动作,而是一串状态,其中任何一个都可能中断。以下是系统如何推进这笔操作,以及在结果未知时它会做什么。

传送金额

收银台构造请求:金额、币种、操作标识、小票引用。在终端应答之前,小票处于「待付款」状态,不能关闭、修改或删除。

操作结果

终端返回结果:已批准、被拒付、顾客取消、出错。批准时会连同结果返回交易要素,日后据此在收单机构流水中找到它。

支付与小票的对应

支付操作标识写入小票,小票号写入支付记录。关联是双向的,因此从任一侧都能还原另一侧:从小票找到支付,也能从银行流水的一行找到具体那笔销售。

退款

退款到卡是一笔独立的支付操作,与原操作绑定。系统不会允许退回超过已付金额,也不会超过这张小票上尚未退回的部分;退款结果同样要等终端确认。

中断与不确定

最重要的场景:终端没有应答。系统既不把这笔操作当作成功,也不当作失败——而是标记为待查明,并且不允许把小票悄悄关掉。之后再通过查询操作状态或对账来确认结果。

状态监控

终端可用率、失败操作占比、应答时长和未结日终,按每台设备汇总。有问题的设备出现在报表里,而不是靠卖场的抱怨。

一笔支付操作的全过程2 480 索姆的小票,刷卡支付
  • 小票已生成4 件商品,会员卡折扣已套用,合计已锁定
  • 金额已发往终端带操作键的请求;小票转入「待付款」状态
  • 持卡人完成操作收银台等待应答;重发同一请求不会产生第二笔支付
  • 终端返回结果已批准,取到交易要素
  • 支付与小票已关联标识在两侧都已写入,小票关闭并打印
  • 销售已进入账务库存已扣减,积分已累计,该操作进入班次和交换队列
  • 与收单机构流水对账按计划执行:把该操作与流水中的一行比对,有差异转入排查

系统界面截图:数字为演示用。关键在第二步:只要金额不是由程序传送,第六步和第七步就得由人拿着纸质签购单来做。

异常情况下系统会做什么默认行为,具体在项目中细化
发生了什么收银台怎么做状态
卡被拒付提示重试或改用其他支付方式;小票保持打开正常
顾客取消了操作把小票退回编辑状态,支付操作以「已取消」结案正常
终端未在时限内应答不关闭小票,查询操作状态;若仍不明确,则禁止手工关闭待排查
付款与打印之间断电重启后恢复未完成的小票,并要求查明支付结果待排查
支付成功,小票没打出来保持操作为打开状态,可重打小票而不会二次扣款待排查
流水里有这笔支付,系统里没有小票把差异连同金额、时间和终端一起送入对账队列待排查
终端要求做日终结算在操作开始前就告知收银员,而不是等卡插进去之后提醒

总原则:结果未知,就既不算成功也不算失败。该操作保持打开并进入排查队列——这比让顾客被扣两次款、或让门店有一笔营收没入账要便宜得多。

与终端的具体交互协议、可用支付方式的组合、能否撤单,以及断网时的行为,都由设备型号和收单机构的规则决定。我们描述的是围绕它们搭起来的这条链路,具体范围在调研时确认——不会预先宣称与某家银行或某款终端兼容。

商品目录

与商品结构管理

零售中的商品目录 — 不是展示橱窗,而是收银台赖以运行的台账。它出错的代价比网站出错更高:条码错了会让收银队伍停下来,商品重复建档会把一件商品的库存拆到两张卡上。

一个商品项由什么构成:

  • 货号与名称 — 内部编码,以及收银员和顾客在小票上看到的名称
  • 条码 — 一个商品可以有多个:供应商的码、自有码、包装或整箱码
  • 计量单位 — 件、公斤、升、包;以及它们之间的换算系数
  • 称重商品标识 — 价格按重量计算,商品接收电子秤传来的数据
  • 类目与商品组 — 报表、加价规则和商品结构矩阵的基础
  • 供应商与采购价 — 计算加价率和毛利的来源
  • 流通规则 — 年龄限制、追溯标识、特定时段禁售:规则内容由所在国家的法规决定,并在调研时确认
  • 商品状态 — 已建档、在售、已退出商品结构、已归档。归档不删除:否则旧小票会丢失商品明细

批量操作通过文件导入或与财务系统交换完成。导入在写入之前一定先校验:将新建什么、修改什么、拒绝什么以及为什么。条码重复的商品不会被悄悄创建——它会进入拒绝清单。

商品结构矩阵

连锁里的门店并不一样:业态、面积、片区和顾客各不相同。商品结构矩阵回答的是:共用目录里的哪些商品在这个具体网点销售。

  • 矩阵按门店组设定,而不是逐店单独设定——否则根本维护不了
  • 不在矩阵内的商品不会为该网点订货,也不会作为「错失需求」出现在它的报表里
  • 把新商品纳入矩阵是一个带日期的受控动作,而不是「到货了就摆上货架」
  • 把商品移出矩阵不会立刻从网点清除:剩余库存会卖完或调拨到别的门店

同一件商品在三家门店

目录里的商品只有一个,但它在每个网点的状态各不相同。这正是连锁核算与单店核算的主要区别:

商品「研磨咖啡,250 克」中央面板界面截图
门店在矩阵内价格可售库存
市中心39542
住宅区3857
公路店0

数字为演示用。价格不同不是错误,而是规则:公路边的网点和家门口的门店属于不同的价格组。真正的错误,是靠在三个地方分别手工修改而得到同一个数值。

价格、折扣、 促销与优惠码

小票上的价格是按规则计算出来的结果,而不是商品卡上的一个数字。因此调价不需要去改上千个商品,而小票上有争议的金额是按计算的各层来复盘,而不是靠收银员的记忆。

按网点和按网点组的价格

一个商品同时存在多个价格:基础价、按门店价格组的价格、按具体网点的价格。系统在结账那一刻选出适用的那个。市中心的店和公路边的店用同一份台账,规则不同。

加价规则

按类目、供应商或商品组,在采购价上加一个百分比或一个金额。按新采购价入库会自动重算零售价,而不是把它停留在上一批到货的水平。

按时间计划的促销

触发条件、折扣玩法、起止日期、周期性时间窗。促销自行启动和停止——员工不必半夜守在现场去开周末价。

折扣玩法

百分比、固定金额、指定新价、组合中较便宜商品打折、「第二件半价」、满足条件送赠品、小票金额达标时该类目打折。玩法由规则设定,而不是由收银员现算。

优惠码

用于一次活动的单一口令,或按收件人生成的一批唯一码。系统会校验有效期、使用次数上限、单顾客上限,以及与当前促销的兼容性。核销记录在小票上——每个码在何时何地被使用都能查到。

边界与优先级

折扣的兼容关系写得很明确:哪些可以叠加、哪些互斥。最低价限制可以避免多个各自都正确的折扣叠加后把商品压到允许的下限之下。

小票单行的价格计算收银台界面截图,索姆,2 件
  • 基础价,价格组「城区」1 180
  • 促销「该类目 9 折」,有效期至周日−118
  • 会员卡折扣,「银卡」等级−32
  • 秋季推送的优惠码——与该促销不兼容未套用
  • 最低价限制 990,未触发1 030
  • 2 件合计2 060

数字为演示用。关于优惠码未生效的那一行比其余各行更重要:在收银台,顾客应当被告知不能用的原因,而不只是一句「此码无效」。计算的每一步都保存在小票里,在复盘有争议的购买时可以调取。

库存、商品核算

与商品流转

库存不是一个参考数值,而是某个网点上该商品所有已过账单据的结果。如果库存「对不上」,原因一定在单据里:有的没过账、有的过了两遍,或者过错了地方。

因此系统不允许直接改库存。任何变动都是一份带类型、操作者、时间和商品明细的单据。

商品流转单据:

  • 收货 — 来自供应商或配送中心的入库。逐件扫码,实收数量与送货单比对,差异在过账之前就记录下来,而不是过账之后
  • 网点之间的移库 — 同一个操作的两半:发出门店的出库和接收门店的入库。在第二半过账之前,货物记为「在途」,两边都不能销售
  • 退供应商 — 因残次、错发或合同条件而发生的反向流转,并引用原始收货单
  • 扣款 — 摔坏、变质、过期、内部领用。原因是必填的:没有原因就分不清报损和短少
  • 改价 — 一份改价单据,逐项记录每个商品的原值和新值
  • 盘点 — 把账面库存与实物库存核对,并用一份单据把前者调整为后者
  • 顾客退货 — 商品退回库存或转入残次;这个判断在验收时做出,而不是事后补

每份单据都经历两种状态:可以修改的草稿,以及会改变库存、只能用红冲单据更正的已过账状态。这正是账务与表格的区别。

仓库女员工在盘点库存时用数据采集终端扫描纸箱

盘点

盘点不是「一年全盘一次」。在一套能用的系统里,盘点分两种,而第二种比第一种更重要。

  • 全盘 — 覆盖整个网点,需要停止销售,或者以某个固定时刻为准
  • 抽盘 — 按类目、按货架或按问题商品清单进行,门店不停业
  • 清点靠扫码:商品不是从列表里用手勾选的,也就无法「目测」打钩
  • 每个商品的差异由系统同时按件数和金额计算
  • 结果由责任人审批:审批之前库存不变

差异是从哪来的

清单很短,而且几乎总是那几条。系统并不会自己消除这些原因——它做的是让它们可以被区分出来:

  • 按送货单而不是按实收数量过账的收货
  • 已发出但第二个网点没有接收的移库
  • 错货:卖的是一件商品,扣减的却是另一件编码相近的
  • 称重商品被当作计件商品结账,或者反过来
  • 破损报损没有开单据
  • 顾客退货没有把商品退回库存

针对问题类目定期做抽盘,能在一周内而不是一年内发现这些情况——并追溯到具体的单据和责任人。

零售连锁的 集中管理

一家门店,靠喊话和本子就能管。三家,靠表格和电话会议。二十家,就不行了:到那个时候,公司里没有人能在不给每家店打电话的情况下说出某个商品在所有网点的当前价格。需要中央系统,不是「为了规整」,而是因为手工方式在一个相当明确的门店数量上就不再可扩展了。

零售连锁集中管理的技术示意图:服务器节点与相连的各门店

增长会经过三种状态,每一种里坏掉的东西都不一样。 一家门店 — 收银台上的数据就够了。 几家门店 — 开始出现「谁的台账为准」的问题,商品也开始在网点之间流转。 几十上百个网点 — 管理变成一项单独的工作:没有统一的屏幕,连锁负责人得知问题是从门店那里,而不是从系统那里。以下是中央面板能看到什么、能管什么。

门店

网点台账:业态、地址、面积、价格组、商品结构矩阵、营业时间、责任人、设备和工位构成。开新店靠复制相似门店的配置,而不是从零搭一遍。

商品结构

统一的商品目录,以及按网点组划分的矩阵。引入和退出某个商品是一个带日期和范围的受控动作:影响哪些门店、从哪一天起、退出商品的剩余库存怎么处理。

价格

按价格组和网点的定价规则、带生效日期的计划调价、变更历史。集中调价在下面单列一节——它是连锁里责任最重的操作。

库存

每个网点每个商品的库存以及全网合计、门店之间在途的货、积压商品、即将断货的商品。从这里也可以发起从富余门店到缺货门店的调拨。

销售

所有网点的小票汇成一条流:营收、客单价、小票数、按商品组的销售、网点之间的横向对比以及与自身上期的对比。

促销

带门店组范围、排期和限额的活动。能看到促销已经在哪里生效、将在哪里开始、按促销价卖了多少,以及扣掉折扣后它带来了什么结果。

员工

账号、角色与权限、与网点的绑定、班次及其汇总。权限按角色发放,而不是逐人单独配置——否则在五十家门店的连锁里根本查不过来。

设备

收银机、终端、电子秤及其他设备的台账,绑定到工位,并带程序版本、状态和维护历史。能看到哪里还装着旧版本、哪台设备经常出故障。

错误与事件

全网异常汇成一条时间线:收银台离线、终端无应答、数据交换未成功、单据未过账、盘点出现差异。异常要指派给责任人并带时限,否则它就只是一本日志。

支付

所有网点的无现金交易、失败占比、终端未结的日终、与收单机构流水的对账结果,以及需要排查的差异清单。

关键指标

营收、毛利、客单价、周转、退货率、损耗、计划完成度——按全网、业态、地区和网点查看。所有人共用一套定义,而不是每张报表都有自己的公式。

数据交换状态

什么在什么时候下发到了网点、什么回传了上来、哪些消息没送达以及原因。一整天没上传销售的门店在这里就能看到,而不是等月结时才发现。

中央与网点之间

数据如何同步

同步不等于「大家共用一个数据库」。门店必须在与中央服务器断连时也能销售,因此每个网点都有一份自己的工作副本,交换以消息方式进行。

向下的流,从中央到网点: 商品与条码台账、价格与定价规则、促销与优惠码、商品结构矩阵、设备配置、账号与权限、收银程序的升级包。

向上的流,从网点到中央: 小票及其明细、支付操作、商品流转、班次汇总、设备事件、盘点结果、员工操作。

它遵循的规则:

  • 异步处理 — 销售不等中央回应。消息入队后单独处理
  • 重投递 — 未送达的消息按递增间隔重试,而不是第一次失败就丢掉
  • 幂等性 — 每个操作都带一个键,因此重复送达的小票不会生成第二笔销售,也不会重复扣减库存
  • 用生效日期而不是送达时刻 — 今天下发的价格从指定日期起生效,而不是从门店恢复连接的那一刻起
  • 应用确认 — 中央不只知道自己发了什么,还知道网点收到了什么、应用了什么
  • 数据交换日志 — 每条消息连同报文、时间、结果和重试次数一并保存
  • 定期对账 — 定期比对中央与网点的关键数字:小票数量、金额、库存

集中调价

连锁里责任最重的操作:它同时影响所有网点,并且当天就会被顾客看到。因此它被做成一份带生效日期的单据,而不是对台账的一次修改。

对 18 家门店的 340 个商品调价中央面板界面截图
  • 单据已准备340 个商品,范围为价格组「城区」,生效时间为周六 00:00
  • 下发前校验低于最低价的商品,以及与生效中促销的重叠,都以清单形式列出
  • 审批由责任人签批;审批之前不会有任何内容下发到网点
  • 下发到网点18 家门店收到单据,17 家确认接收
  • 有一家门店离线单据留在队列里,链路恢复后再应用——但生效日期不变
  • 生效周六 00:00,新价格在各收银台生效;已接入电子价签的地方,价签同步生效

系统界面截图:数字为演示用。第五步的意义在于:断线的门店不会掉出这次调价,也不会无限期地按旧价继续卖。单据会晚一些应用,但生效日期是对的。

回退怎么办

调价是可逆的:单据在生效前可以取消,也可以被新单据覆盖。每个商品的原值都保存着,因此回到原值是一次操作,而不是从备份里恢复。

收银台与 POS

支付链路

商品与库存

连锁管理

会员忠诚度计划

与专属优惠

会员体系的起点不是积分,而是身份识别:只要购买还是匿名的,这套体系就无从下手。这个模块的任务,是在收银台上用几秒钟把小票和顾客关联起来,并且不拖慢队伍。

收银台上的识别方式: 带条码的实体卡、手机号、移动应用里的二维码、虚拟卡。方式按门店业态来选:队伍长的地方,让顾客手输手机号是个糟糕的方案。

这个模块能做什么:

  • 积分累计 — 按小票金额的百分比、对某类目提高百分比,或对促销商品按固定金额累计
  • 积分抵扣 — 用积分支付小票的一部分,并限制抵扣比例、禁用某些类目,以及规定抵扣后须保留的最低余额
  • 积分有效期 — 按计划到期作废,并提前提醒顾客
  • 等级 — 按一段时间内的消费额确定的身份,每个等级有自己的累计比例和条件
  • 折扣玩法 — 在积分方案不适合该业态的地方,直接按卡打折
  • 客户分层 — 按购买频次、客单价、商品偏好和最近一次购买时间划分的顾客群
  • 专属优惠 — 针对某个分层或某位具体顾客生效的规则,有自己的有效期和限额
  • 消息触达 — 积分到账、积分即将过期、专属优惠的通知;以及发送和授权日志

在收银台上必须能跑通什么

会员体系活在卖场里,而不是营销报表里。对它的要求是排队的人提出来的:

  • 识别是一个动作,而不是三问三答的对话
  • 余额和可抵扣金额在付款前就让收银员和顾客都看到
  • 累计和抵扣在小票上各占一行单独显示
  • 退货同时退积分:抵扣掉的退回账户,累计的收回
  • 与服务器断连时,离线模式的规则事先就定好,并且收银员知道

同一张小票上的累计与抵扣

用积分支付了一部分的小票收银台界面截图,索姆
  • 商品小计3 420
  • 「银卡」等级折扣,3%−103
  • 已抵扣积分——不超过小票的 30%−995
  • 应刷卡支付2 322
  • 按实付部分累计的积分+116
  • 购买后的余额341

数字为演示用。第三行很关键:积分抵扣比例的上限是一条规则,不是收银员的决定。第五行同样:积分只按真正用钱付掉的那部分累计,否则这套体系就开始给自己发积分了。

购买和分层数据,正是把会员体系与下面的数据分析和 AI 场景连起来的东西:只有建立在某位顾客的购买历史之上,优惠才有意义,而不是对着数据库群发。

员工

与访问权限

门店里既有钱又有货,在里面工作的人责任各不相同。访问权限说的不是保密,而是让每个动作都有操作者、让日常操作不必惊动上级、让高风险操作不会悄无声息地发生。

权限模型是怎么搭的: 权限发给角色,角色分配给员工,员工绑定到网点。在五十家门店的连锁里,逐人做个性化配置,既发不出去也查不过来。

  • 角色 — 收银员、当班主管、商品专员、店长、区域负责人、系统管理员
  • 作用范围 — 本网点、一组网点、整张网络。店长看不到隔壁门店的营收
  • 上级确认 — 操作在收银员账号下执行,但需要第二个人确认
  • 按账号登录 — 在收银台、门店面板和中央面板;会话与班次绑定
  • 操作日志 — 谁、做了什么、什么时候、在哪台收银机、原值是多少
  • 吊销访问 — 离职会一次性关闭在所有网点的登录,而不只是他在册的那一家

操作日志不是「以防万一」的存档。它是一个工作工具:用来复盘有争议的购买、班次短款和顾客投诉,同时也为下面的操作管控一节提供数据。

权限矩阵:一个划分示例

操作的集合以及在各角色间的分配,要按具体连锁来配置。以下是配置时作为出发点的一个典型框架:

谁能做什么典型框架,按连锁配置
  • 销售、收款、打印小票收银员班次的基础操作:所有在收银台工作的角色都可以做
  • 小票关闭前删除某一行收银员,需确认当班主管和店长无需确认即可执行;每一次删除都写入日志
  • 超出规则的手工折扣当班主管收银员没有此权限;主管在限额内可用,店长不受限额
  • 对上一班次小票办理退货当班主管本班次内的退货由收银员自行办理;跨班次则需要第二个角色
  • 修改商品价格店长而且只能在定价规则范围内——低于最低价,谁都无法执行
  • 从收银机取出现金当班主管一项带原因和金额的独立操作,绑定到班次和工位
  • 执行盘点当班主管——负责清点审批结果并变更库存由店长执行,而不是清点的那个人
  • 查看全网营收门店角色一概不可全网数据属于区域角色和总部的范围

最后一行不是笔误。「看到全部」的权限,与改价权限一样是谨慎发放的:店长对自己的网点负责,看到的也是自己的,而不是隔壁的。

操作管控 与反欺诈

系统不会自动阻止舞弊,也不会给出判决。它做的是让操作可被观察:设定规则、记录每一次偏离,并把相似案例汇成一个供人工复核的队列。这是一条管控链路,而不是「什么都能抓住的反欺诈引擎」。

退货次数异常地多

退货率按收银员、网点、商品组和时段分别统计。偏离平常水平就是信号:没有顾客在场的退货、班次末尾的退货、同一商品反复退货。

频繁撤单

小票关闭前作废、以及从小票中删除某行,都是正常操作,但某个收银员的发生频率会与本班次和本网点的水平作对比。明显偏离就进入观察。

可疑折扣

手工套用的折扣、同一位顾客每次购买都有的折扣、班次末尾给高毛利商品的折扣。每一例都连同操作者、依据和金额一并保存。

手工改价

在收银台改价的权限是例外,而不是常态。在已经发放该权限的地方,每一次使用都会连同原值和新值记录下来,并进入一份单独的报表,而不是消融在总日志里。

收银员行为

工作画像:客单价、现金占比、退货和撤单占比、无销售开钱箱的次数、替他人班次上岗。对比对象是该收银员自己的过去,以及同一网点的同事。

支付与小票不一致

收单机构流水里有支付但系统里没有小票、有小票却没有支付操作、小票金额与支付金额不同。每一处差异都连同金额、时间、收银机和终端一并提出。

异常操作

在网点营业时间之外的销售、金额为零的小票、商品明细完全相同的重复小票、无销售开钱箱、用他人账号登录。

操作日志

每一项重要操作都有一条不可篡改的记录:操作者、时间、工位、原值和新值。它与业务数据分开存放,因此不会随业务数据一起被改动。

权限与关键事件

发放和吊销权限、修改定价规则、关闭某项校验、手工结班、访问客户库导出——这些单独记录,并立即送到责任人手上,而不是等到月底。

排查队列中央面板界面截图,本周
信号系统知道什么人要核查什么
某收银员的退货率是本网点平均值的三倍一个班次 14 笔退货,其中 11 笔发生在最后一小时,全部为现金监控录像、当时是否有顾客在场、员工的说明
手工折扣被套用了 23 次同一名收银员、金额区间一致、商品组各不相同折扣的依据、是否有审批指令、顾客是否重复出现
流水里有支付,系统里没有小票金额和时间与该班次吻合,小票缺失是通信故障还是未开单的销售——查收银台日志
钱箱在无销售的情况下被打开 40 次同一台收银机、同一个班次、间隔 3–5 分钟是找零、锁具技术故障,还是取现金
盘点:某一个类目出现短少差异只出现在烟草组,连续三个网点收货、移库、报损,以及存放区域的出入权限

系统界面截图:数字为演示用。没有任何一行意味着违规——每一行的意思是数字偏离了常态,需要一个解释。这个区别很关键:规则提出问题,答案由人给出。

这条链路的现实意义在于快。没有它,差异要等到盘点时才被发现,那已是事发几个月之后,既没有记录也没有记忆。有了它,偏离在第二天就能看到,排查针对的是具体的小票、具体的班次和具体的操作。

报表

与销售分析

零售里的数据分析不是「好看的图表」,而是回答四个问题:赚了多少、具体靠什么赚的、什么在拖后腿、下周的订货怎么下。其余都是派生出来的。

这些是在业务数据的副本上计算的,而不是在生产库上:一张跑全年的重报表不该拖慢卖场里的收银台。

系统计算什么:

  • 销售 — 营收、小票数、客单价、单票件数;按网点、日期、小时、收银员和商品组切分
  • 毛利 — 按商品、类目和网点统计,依据的是实际给出的折扣,而不是标价
  • 商品 — 销售冠军与垫底商品、周转率、积压商品、即将断货的商品
  • 时段与日期 — 营收在时间上的分布:排班表和货架补货计划的依据
  • 促销 — 按促销价卖出了多少、让出的折扣总额,以及计入折扣后的营收和毛利
  • 退货与报损 — 占比、原因,以及在网点、类目和员工上的集中程度
  • 损耗 — 盘点差异的件数和金额,以及各类目的趋势变化
  • 会员 — 有身份识别的购买占比、顾客回头频率、有卡与无卡的客单价
  • 员工 — 每班产出、客单价、撤单和退货占比、服务时长

另有一块是合规报表:按网点的班次和日报、给会计的单据、与收单机构的对账、给财务系统的数据。它有排期和接收人,因此不需要谁在月底还记着这件事。

分析人员在工作屏幕上查看各门店的销售、库存和指标

所有人共用一套定义

连锁报表最常见的问题不是没有数字,而是同一个指标有好几个数字。营收「含退货」和「不含退货」、客单价「按小票算」和「按顾客算」、毛利「按标价算」和「按实际折扣算」,得出的数各不相同,而围绕它们的争论比分析本身还费时间。

因此指标的定义在系统里只设定一次,所有报表都用它。改定义是一个带日期的受控动作,而不是去改某人表格里的一个公式。

全网概览

本周,18 家门店面板界面截图
18个网点在线
2个网点未上传数据 24 小时内
7处支付差异
31个商品 即将断货
  • 食品44%
  • 饮料21%
  • 日化18%
  • 其他17%

系统界面截图:数字为演示用。磁贴的顺序不是随手排的:排在最前面的不是销售,而是没有上传数据的网点——只要它们缺席,下面的每一个百分比都是在不完整的图景上算出来的。

与外部系统 的对接

零售系统在一家公司里很少是唯一的:财务、会计、仓储和网店通常早就在跑了。做对接不是为了走形式,而是为了让同一份数据不被录入两遍、不在系统之间跑偏。

财务系统与 ERP

它通常拥有商品清单、供应商和采购价;零售系统则拥有销售、零售价和各网点库存。每一份台账的交换方向都写得很明确——否则两个「主源」就会开始互相覆盖。

会计

导出按网点和法人主体的营收、商品流转单据、报损单、退货和无现金交易数据。频率和内容由核算要求决定,而不是由导出是否方便决定。

CRM

顾客、分层、购买历史、积分和专属优惠。购买事实从零售系统出去,分层和活动从 CRM 进来——在收银台上它们变成具体的折扣或优惠。

仓储系统

用在连锁设有配送中心的场合:门店要货申请、发往网点、收货、退回仓库。即使两半分属不同系统,移库仍然是一个有两半的操作。

网店

共用的商品目录和价格、把门店库存作为自提的来源、在门店拣配的订单、在收银台办理线上购买的退货。橱窗和订单的详细解析见 电子商务.

支付链路

收银台与终端的交互、取回用于对账的操作流水、退款状态。具体内容由终端型号和收单协议决定,并在调研时确认。

人事与考勤

员工、网点分配、排班表。收银台上的班次与考勤表上的班次不再是两条需要人工核对的记录。

外部 API 与服务

面向第三方使用者的文档化系统 API,以及外部服务的接入:推送、即时通讯、凭证与通知服务、伙伴计划。格式带版本管理——变更以新版本发布,旧版本继续可用。

交换规则

异步处理、按递增间隔重投递、接收端幂等、每条消息连同报文和结果的日志、关键数字的定期核对。差异变成一个待办任务,而不是等月结时才被发现。

在开发任何数据交换之前,总要先定一个问题:哪个系统拥有哪份台账。这个问题没有答案之前,对接就会变成一个互相覆盖的循环,根本没法调试。

人工智能

在零售中的应用

零售连锁积累数据的速度,快过它读取数据的速度:按商品和按小时的小票、各网点库存、商品流转、员工操作、设备事件。这里的 AI 不是一个独立产品,而是覆在这些数据之上的一层,回答那些人没有时间去回答的问题。

每个场景里的套路都一样: 数据 → 分析 → 结果 → 行动。缺了最后一环的场景,只能停留在演示阶段。

实际可落地的场景:

  • 销售分析 — 各网点和各类目什么在涨什么在跌、哪些商品会被一起买走、需求对调价如何反应
  • 需求预测 — 某个商品在某个具体网点、在下一个订货周期内的预计销量,并计入季节、星期几和促销
  • 库存分析 — 积压商品、下次到货前断货的风险、一个网点富余而隔壁网点短缺
  • 订货建议 — 给出建议的采购或调拨数量;决定权仍在商品专员手里,而不在模型手里
  • 异常检测 — 销售、退货、折扣和操作中那些在常规报表里看不出来的偏离
  • 专属优惠 — 依据某位顾客的购买历史来挑选优惠,而不是对着数据库群发
  • 数据自动处理 — 解析供应商的送货单和价目表、把商品与商品清单做匹配、在目录中查找重复建档
  • 机器视觉 — 用在设备和拍摄条件都支持的任务上:陈列合规检查、排队长度、电子秤上的商品识别
  • 识别可疑场景 — 操作中的行为特征,作为管控一节里那些规则的补充

边界如实说明:模型依赖已积累的历史。只要销售还没有按商品和按小时记录、商品流转还是事后补单,就没有什么可预测的——先有账务链路,再谈覆在其上的分析。这个方向的详细解析见 人工智能落地.

类目经理在下订单前查看需求预测和销售异常

一个完整场景

给某个网点下订单数据 → 分析 → 结果 → 行动
  • 数据该商品在这个网点 14 个月的逐日销售、当前库存、到货周期、促销与断货历史
  • 分析模型把季节性和促销效应从基础需求中剥离出来,估算到下次到货之前的预计销量
  • 结果给出建议订货量,并提示:按当前库存,该商品会在到货前两天卖空
  • 行动商品专员接受、修改或否决这条建议;申请进入向供应商的订货
  • 验证过一段时间后把预测与实际比对;偏差回流到训练中,而不是无人过问

第四步是必须的。一条不经过人就直接变成订单的建议,会把模型的错误变成一次真实采购——而最后一步则把这个错误变成一次修正。

有些事需要事先说清楚

  • 模型给出的是概率而不是事实:结果有一个准确度,而且这个准确度是被度量的
  • 第一个可用的时间点是历史积累若干周到若干月之后,而不是上线的第一天
  • 异常是核查的理由,而不是指控:这与管控一节的原则相同
  • 机器视觉受限于物理条件——角度、光照、摄像头素质;能否适用要到现场验证

门店设备的

物联网监控

门店里有一部分商品存放在有运行工况的设备里:冷藏陈列柜、冷冻岛柜、后场的冷库。工况偏离在商品核算里看不见——它要过几天才以报损的形式显现。

因此零售链路旁边就接着设备监控:同一批网点、同一批责任人、同样的原则「偏离要指派给人并带时限」。

门店里把什么纳入观察:

  • 冷藏柜、冷冻柜与陈列柜 — 温度及其随时间的变化,而不只是当前读数
  • 温度传感器 — 装在冷库、陈列柜或某一层货架上,阈值按所存商品的类型设定
  • — 开启及其持续时长,门未关好作为一个独立事件
  • 供电 — 场地和具体设备上的断电与复电
  • 设备状态 — 压缩机运行、循环周期、是否需要化霜
  • 控制器报错 — 设备对外输出的错误码,归并到一份统一的状态清单里
  • 失联 — 设备沉默是一个事件,而不是图表上的一段空白

它与零售的关联很直接:温度历史可以向检查方和交易对手证明存储工况,而及早发现偏离能减少报损——也就是说,它进入的是与盘点短少同一批损耗报表。

技师检查温度传感器和门店冷藏陈列柜的远程读数

监控给门店带来什么

  • 温度上升在商品变质之前就能看到,而不是等报损之后
  • 陈列柜门没关好,在几分钟内就变成当班的任务,而不是几小时
  • 经常出故障的设备与偶发一次可以区分开——靠历史,而不是靠记忆
  • 任何场地、任何日期的一段温度曲线都能随时调出
  • 网点断电会被记录下来,哪怕当时门店是关着的

具体某台设备实际能取到什么数据,取决于它的控制器:有些型号对外输出数值和错误码,有些则需要外加传感器。这要在调研时按厂商文档确认。

这个方向的完整解析——传感器与控制器、通信链路、服务端、统一面板、告警与远程管理——见单独页面 物联网监控与设备管理.

系统 模块

具体范围按需求组装:单店不需要商品结构矩阵和网点间调拨,四十家门店的连锁离了它们则寸步难行。以下是配置时可选的完整清单。

收银工位

收银员界面、小票生成、与扫描枪和电子秤协同、收款、打印单据、挂单、离线模式。

班次与现金

开班与结班、中间和最终报表、现金存入与取出、差额计算。

支付链路

与支付终端的交互、操作状态、把支付与小票对应、退款、处理未完成操作、对账。

收银台退货

按小票号退货、部分退货、校验已退过的部分、退款与退积分、退货凭证。

商品目录

商品、条码、计量单位、称重商品、类目、供应商、流通规则、状态与归档。

商品结构矩阵

按网点组划分的商品结构、带日期的商品引入与退出、矩阵外销售的管控。

价格与调价

价格组、加价规则、带生效日期的计划调价、最低价、变更历史。

折扣、促销与优惠码

触发条件、玩法、排期、按网点的覆盖范围、限额、兼容关系、优惠码生成与核销。

库存

按网点和全网的库存、在途商品、预留、库存偏低阈值、毫无动销的商品。

商品收货

来自供应商和配送中心的入库、扫码、与送货单核对、记录差异。

网点之间的移库

发出与接收作为一个操作的两半、在途商品、未结移库的管控。

报损与退供应商

摔坏、变质、保质期、内部领用,以及引用原始收货单的残次退货。

盘点

全盘与抽盘、扫码清点、按件数和金额的差异、结果审批。

连锁管理

门店台账、网点组、业态配置、通过复制配置开设新网点。

中央面板

整张网络的统一屏幕:销售、库存、价格、促销、设备、错误、关键指标、数据交换状态。

与网点的同步

交换队列、生效日期、应用确认、重投递、日志与对账。

会员忠诚度计划

顾客识别、积分、等级、有效期、客户分层、专属优惠、消息触达。

顾客

档案、数据处理授权、购买历史、联系渠道、重复档案合并。

员工与权限

角色与权限、按网点的作用范围、上级确认操作、操作日志、吊销访问。

操作管控

观察规则、排查队列、退货、折扣和撤单报表、关键事件记录。

设备台账

收银机、终端、电子秤、扫描枪及其他设备,绑定到工位,并带版本和维护历史。

设备监控

温度、门、供电、控制器报错、失联;事件带接收人和响应时限。

数据分析与报表

销售、毛利、周转、退货、损耗、促销效果、员工表现、任意维度切分。

对接与 API

与 ERP、会计、CRM、仓库、网店和外部服务的数据交换。API、Webhook、队列、日志。

落地实施的 顺序

系统不会一次性在整张网络上全量上线。下面的顺序体现的是依赖关系:每一步都建立在上一步产出的数据之上,并且先在一个网点验证再推广。

调研

现有流程、台账、各网点的设备、各类数据的归属系统、税务部分的要求。产出是实体图、对接地图和限制清单。

收银与商品

迁移商品清单、条码、价格、收货与库存,以及连好设备和支付终端的收银工位。先在一个网点上线。

连锁

中央面板、商品结构矩阵、集中价格与促销、网点之间的移库、同步与访问权限。接入其余门店。

扩展

会员、操作管控、数据分析、设备监控,以及基于已积累历史的 AI 场景。每一块都是一个有可度量结果的独立版本。

聊聊贵公司零售业务的自动化

立即联系我们

请写明贵公司有多少个网点、现在已经有什么——收银台、财务系统、仓库、网店——以及卖场里装了哪些设备。我们会梳理流程,说明哪些可以迁移、哪些必须重建,并给出落地实施的顺序。