零点前十分钟,最后一只汤圆裂了。
黑芝麻馅从白皮里流出来,在铝锅里拖出一条灰黑色的尾巴。小郭拿漏勺去捞,反而把另外两只压破。周会计心疼地关小电炉,说你们写程序的人连煮汤圆都喜欢多操作一步。
那晚是正月十五。
林海没有来。他提前一周在值班表上写了“陪女儿看灯”,交接完整,电话只用于严重故障。陈维明在客户饭局,赵秋寒回家陪父亲。办公室里只有马飞、苏雨桐、周会计和小郭,守着支付试验的第一次零点清算。
一百笔试付之后,三家参与单位又运行了一个月。交易仍然小额、封闭,资金仍由银行直接划转。星辰把每日指令、受理、到账、失败和退款汇成批次,夜里与财务账、服务履约账和银行回执逐项核对。
过去二十九天,他们都在银行下班后完成日结。今天第一次把整个月未完状态带到零点,验证系统能否区分“今天发生”和“今天完成”。
桌上有四叠纸。
第一叠是付款指令,共三百二十七笔。第二叠是银行回执。第三叠是取消、失败与退款。第四叠只有一张,来自仪器厂的一笔四十五元退款,银行已在下午受理,收款方尚未确认到账。
程序把它标成“跨日处理中”。
周会计却发现,月度汇总里这四十五元已从原付款净额扣除,仿佛退款完成。
“不能结。”她说。
小郭指着交易状态:“银行已经受理,早晚会退。”
“早晚不是现在。”
“不扣的话,报表会显示客户多付四十五元。”
“客户此刻确实还没拿回。”
距离零点只剩八分钟。
按宣传材料,星辰要在今夜完成“首月全部交易清算”。陈维明已经约了第二天上午与五家新客户见面。如果一笔退款拖到下一天,全部两个字就不能用。
马飞看向小郭:“汇总为什么提前扣?”
“我把已受理退款算进预计净额,想着更接近最后结果。”
“预计可以单列,不能改实际。”
“现在改来不及重新跑全部。”
“那就不在零点宣布全部完成。”
小郭的脸垮下来。他已经连续三晚准备这次清算,偏偏最后十分钟被自己一行看似体贴的代码绊住。
苏雨桐把一碗汤圆推到他面前:“先吃。四十五元不是世界末日。”
“可客户明天来。”
“让他们看到我们怎么处理跨日,比看一张假的全完成报表有用。”
窗外,附近公园的灯会放起烟花。玻璃被映得一阵红一阵绿,办公室电灯反而显得苍白。街上传来孩子尖叫和自行车铃声,所有人都在向热闹处走,只有他们围着一笔没有走完的退款。
零点到了。
系统按计划冻结当日批次,不再接受回填。三百二十六笔进入已完成或已结束状态,一笔四十五元退款结转次日。财务实际、银行已确认回执与交易账相等;预计净额被单独标明,不参与清算平衡。
屏幕上没有出现“全部成功”,只显示:本日已闭合,跨日一笔,状态可追踪。
周会计重新拨算盘。左右相等。
“这也算清算完成?”小郭问。
“算。”她说,“完成清算不等于所有事情都完成。是今天的账知道哪些结束,哪些带着证据留到明天。”
马飞给银行值班传真留下一份查询单,写明次日上午首次核查时间。系统自动生成给仪器厂的状态说明:退款已由银行受理,尚未确认到账,不建议重复申请;下一次更新在上午十点前。
该做的都做完后,四个人端着已经煮烂的汤圆上楼顶。
正月的风很冷,屋顶边缘结着薄冰。远处灯会扎出一条发光的龙,隔得太远,只能看见它缓慢起伏。小郭把最后一只完整汤圆夹给周会计,说是感谢她守住那四十五元。周会计咬开才发现里面没有馅,众人笑得差点把碗摔了。
苏雨桐的研究计划也在这一个月里开始运行。她没有用三百多笔数据训练一个“智能裁判”,只建立了基线:哪些规则准确抓到重复,哪些金额变化只是业务正常波动,哪些暂停最后被人工确认无风险。那笔跨日退款会被标成流程状态,不被误当作异常交易。
“样本够了吗?”马飞问。
“不够。”
“什么时候够?”
“看问题。判断重复指令可以先改进,判断人的信用远远不够。”
“明天五家客户会问智能风控。”
“你就告诉他们,我们现在有可解释规则和人工复核,没有能预测所有欺诈的智能风控。”
“陈维明会嫌难卖。”
“让他学会卖真话。”
楼下电话响起来。四个人以为是银行,跑下两层才接到。电话那头是林海,背景里全是锣鼓声。林小满看完灯,非要知道公司的“钱有没有对上”。
“对上了。”小郭说,“但有一笔明天继续。”
林小满在电话那头问:“那你们输了吗?”
“没输。”周会计接过话,“是今天做完今天的,明天做明天的。”
小姑娘似懂非懂,说她的兔子灯摔坏一只轮子,爸爸答应回家修。林海确认没有严重故障,按约定没有赶回公司。
电话挂断后,马飞在值班表“未呼叫”一栏签字。星辰第一次零点清算,不仅没有依赖创始人一个人,也没有把所有能干的人从家里召回。一个系统能在林海陪女儿看灯时照常结账,正是他们建立轮班与权限的意义。
第二天上午九点二十一分,银行回执到达。四十五元退款已入收款方账户。小郭新增“已到账”状态,关联昨夜跨日记录。系统没有改动零点快照,月度最终报告则同时展示零点时状态和次日完成时间。
五家新客户十点到公司。
陈维明果然希望把报告第一页的“跨日一笔”移到附录。马飞没有同意。他向客户演示的不是一条全绿的结果,而是那笔退款怎样在零点结转、怎样防止重复申请、怎样在银行回执到来后闭合。
一家文具批发商的老板问:“你们不能让银行快点?”
“现阶段不能替银行承诺。”马飞说,“能做的是不让这笔钱在等待时失去名字。”
另一家软件服务商问,星辰能否让员工直接在网上付款。马飞说,下一阶段可以在受控环境提交指令,但真实执行仍要经过参与银行认可的授权路径;公司不会因为网页能收密码,就把它叫移动支付全面上线。
五家里有三家愿意加入下一轮,两家决定观望。
陈维明散会后算了一遍,觉得六成不算坏。赵秋寒下午来审新协议,要求参与单位上限、金额上限和退出程序一项不减。周会计则提出,支付业务若开始收费,必须与搜索合同和先进工程预算继续分账。
马飞在路线图“二〇〇〇年支付预研”后画下一枚小小的勾。
他没有写“星辰支付正式上线”。一百笔试付和首月清算只证明,他们能在小范围内保存授权、追踪银行状态、处理失败与退款。它没有证明系统能承受公众流量,没有证明陌生交易风险可控,也没有证明监管会允许更大范围的服务。
同一页的“航天技术储备”后面,也有另一枚勾。先进工程组已建立事故问题册,完成跨系统时间桌面推演,并开始搜集可公开获取的材料与试验方法。仍没有发动机,更没有火箭。
两个勾都很小。
生活却已经因此改变。苏雨桐有了自己的研究线和合租房,林海能按值班表陪女儿看灯,周会计不用把不属于公司的钱硬塞进收入科目,陈维明开始学着向客户销售限制条件,马飞也第一次接受一笔未完退款可以带着清楚状态跨过零点。
晚上,苏雨桐把公司那只牡丹保温瓶带回办公室。合租房煤气灶已经修好,她不再需要每天提热水。
“放这儿公用。”她说。
马飞看着瓶身的大红牡丹:“你不是嫌它难看?”
“难看也能保温。”
她把它放到饮水机旁,正好在锦旗下方。墙上红绸、故障表、火箭画、小风筝和牡丹瓶挤在一起,没有一样像精心设计的公司装饰,却把过去几年全留了下来。
零点清算完成后的第二天,星辰搜索照常响应查询,支付试验照常等待银行回执,先进工程问题册里仍有十几个问题没有答案。
没有哪一条线因为跨过二〇〇〇年就突然成熟。
但它们终于能在同一家公司里分账、分权、分时推进,又在需要的时候交换方法:搜索教会支付记录失败,支付教会航天尊重授权与状态,航天事故又提醒所有系统,不能把局部正常写成整体安全。
马飞站在那面杂乱的墙前,听见楼下早班公交驶过。
通向更大世界的入口,没有发出轰鸣。
它只在零点留下了一张左右相等、仍有一笔待办的清算表。