U盘里的数据像一潭深水,表面平静,底下暗流涌动。
周然盯着屏幕,指尖在触控板上缓慢移动。导入过程很顺利,沈清音给的数据包结构清晰,甚至附了字段说明。但她看得懂,问题也看得懂——时间范围两年半,按海西贸易的规模,信用证记录至少该有几千条,可这里只有四百二十七条。
加总金额不到八个亿。
公开渠道估算的融资规模在三十亿上下。
差得太远。
周然没觉得失望,反而有种“果然如此”的平静。沈清音说过,数据是碎片化的。能拿到这些,已是意外之喜。
关键是,这四百多条里有没有她要找的东西?
她开始清洗数据。剔除金额太小的,按受益人分类,同一个名下有多次记录的单独拎出。屏幕上的数据被不断筛选、排序、分组。键盘敲击声密集而规律。
三小时过去。
窗外彻底安静下来。周然停下手,端起凉透的水喝了一口。眼睛干涩,肩颈僵硬。
但她找到了异常。
十七笔信用证的受益人是同一家公司——金海国际贸易有限公司。金额都不小,单笔最低八百万,最高两千三百万。时间集中在2017年下半年到2018年上半年。总金额两亿一千六百万。
企业查询显示,金海注册在开曼群岛,股东信息不详,经营范围泛泛。
典型的壳公司。
另一个异常点:九笔信用证的开证行是同一家城商行——海西城市商业银行。金额更大,单笔都在两千万以上。受益人各不相同,但周然注意到,其中四家的注册地址在同一栋写字楼里。
那栋楼她记得。
海西集团旗下物业公司管理的产业。
巧合?
她不信。
周然把这些异常点一一标记,导出成单独表格。做完这些,天边已泛起灰白。凌晨四点十七分。
该睡了。
但她睡不着。脑子里全是那些数字,那些公司名。它们像散落的拼图碎片,在脑海里漂浮、旋转。
还差得远。
她知道。
关掉电脑前,她加密保存结果,清除所有操作日志。这是德勤养成的习惯——无论用谁的设备,离开前一定要抹掉痕迹。
躺到床上,身体疲惫得像灌了铅,脑子却清醒。黑暗中能看见空调出风口的轮廓。
沈清音。
那个娇小的、沉默的、眼神清澈固执的女人。
为什么给这些数据?真的只是因为认同那篇旧帖子?
陈志远说得对,互相利用。在这儿,有时候只能这样。
周然闭上眼。
第二天早上七点半,她准时出现在海西大厦楼下。早餐是路边便利店买的饭团和豆浆,边走边吃。进入大厅时正好赶上早高峰,等了两趟电梯才挤上去。
临时工位在十八楼,靠近安全通道,偏僻安静。周然放下包,打开电脑,先处理陈志远交代的表面工作——一份关于“贸易流程风险点梳理”的初步框架。
写得很敷衍。
但该有的格式都有,该用的术语都用了,乍一看像模像样。她知道,这份东西不会有人认真看。陈志远要的只是个“在推进”的幌子,而她需要这个幌子。
十点左右,她起身去茶水间接水。
路过信息技术部时,放慢了脚步。
部门大门敞着,里面两排工位大部分空着。只有最角落坐着一个人。
沈清音。
她背对着门,身体微微前倾,盯着屏幕。齐耳短发修剪得整齐,发尾贴着脖颈。深灰色开衫,袖口挽到手肘。
屏幕上滚动的代码快得让人眼花。
周然停住脚步。
她原本只是打算路过,此刻却改了主意。端着空杯子走进信息技术部,径直走向饮水机。
接水的声音很轻。
沈清音似乎没听见,依然专注地盯着屏幕。手指在键盘上敲击,速度快得几乎带出残影。周然端着接满的水杯,没有立刻离开,目光落在屏幕上。
那是一堆混乱的数据。
格式不统一,字段缺失,大量重复记录。像是从老旧系统导出的历史交易明细,时间可追溯到七八年前。
沈清音正在清洗这些数据。
方法很巧妙——不是简单的去重或填充,而是写了一套复杂脚本,自动识别关联关系,根据上下文推断缺失值,同时标记可能存在矛盾的记录。
代码写得干净利落,逻辑严密。
周然看了一会儿,忽然开口:“第三十七行,关联推断的逻辑有点问题。”
声音不大,但在安静的办公室里格外清晰。
沈清音敲击键盘的手猛地停住。
她缓缓转过头,防蓝光眼镜后的眼睛看向周然,先是茫然,随即闪过一丝警惕。没说话,只是盯着。
周然指了指屏幕:“你用的是时间序列外推法,假设相邻交易关联性恒定。但这里——”她往前走了半步,手指虚点在屏幕上某个位置,“数据有明显断层。2014年第三季度到2015年第一季度,系统升级过,数据采集规则变了。用同一个模型推,会引入系统性偏差。”
沈清音愣住了。
她看看屏幕,又看看周然,嘴唇动了动。几秒钟后,忽然转回头,快速滚动代码,找到周然说的那个位置。
盯着看了足足半分钟。
“……你说得对。”声音很轻,带着技术讨论时特有的专注,“这里确实有个规则变更点。我忽略了。”
说完,立刻开始修改代码。手指重新在键盘上飞舞,速度快得惊人。不到两分钟,那段逻辑就被重写了。
周然站在旁边,安静地看着。
修改后的代码更加严谨,增加了对数据采集规则变更的检测和适配。沈清音写完,运行测试,屏幕上跳出一串新结果。她仔细看了看,点点头。
“好了。”
说完这两个字,她才又转过头,看向周然。眼神里的警惕淡了些,多了点好奇。
“你懂这个?”她问。
“懂一点。”周然说,“以前做审计的时候,经常要处理脏数据。自己写过一些清洗脚本,没你的复杂。”
沈清音沉默了一下。
她推了推眼镜,视线重新落回屏幕,声音低了下去:“你知道也没用。”
“嗯?”
“这些数据清干净了,也不会有人看。”沈清音说,语气平淡得像在陈述客观事实,“历史数据,七八年前的。财务部早就不认了,业务部门更不关心。我清它们,只是因为它们在这里,而我觉得数据应该被正确对待。”
她顿了顿,补充道:“像你说的,系统性偏差。错误的数据会污染所有基于它的分析。哪怕没人看,它也不该是错的。”
周然没接话。
她看着沈清音侧脸,看着那双专注盯着屏幕的眼睛,忽然想起陈志远的话——“她技术没得说”。
确实。
这种对数据纯粹性的执着,她懂。
沉默在两人之间蔓延了几秒。茶水间方向传来脚步声,有人来了。周然收回视线,端起水杯,准备离开。
走了两步,又停住。
转身,从旁边桌上抽了张空白A4纸,拿起一支笔。走回沈清音工位旁,把纸铺在桌角空白处,快速画了起来。
线条简洁,结构清晰。
那是一个数据关联模型的草图——中央是核心交易实体,周围辐射出多条关联路径:资金流、货物流、票据流、担保关系……每条路径上都标注了可能的数据来源和验证方法。
画完,把纸推到沈清音面前。
“如果,”周然说,声音很平静,“有人需要它来说真话呢?”
沈清音低头看着那张草图。
看了很久。
手指无意识地蜷缩起来,指尖轻轻敲击桌面,发出细微的嗒嗒声。眼镜片反射着屏幕的光,看不清眼神。
茶水间的脚步声越来越近,已经到了门口。
周然收回手,端起水杯,转身离开。走到门口时,和进来的一个技术部男员工擦肩而过。对方看了她一眼,眼神里带着点疑惑,但没说什么。
回到工位,周然坐下,继续写那份敷衍的报告。
键盘敲击声规律而单调。
但她知道,有些东西已经不一样了。
中午吃饭时,周然照常去了员工食堂。排队打饭,找角落位置坐下,安静地吃。食堂里人声嘈杂。
她听到有人提到“贸易公司那边又出事了”,但具体内容听不清。
也听到有人议论她——“那个新来的顾问,整天关在角落里,也不知道在干嘛”。
周然低头吃饭,没反应。
快吃完时,对面忽然坐了个人。
她抬头,看见沈清音端着餐盘,在她对面坐下。餐盘里食物很简单:一份青菜,一份豆腐,半碗米饭。沈清音没看她,自顾自开始吃饭,动作斯文但速度不慢。
两人都没说话。
食堂的喧闹成了背景音。周然吃完最后一口,放下筷子,拿起纸巾擦嘴。准备起身时,沈清音忽然开口了。
“你画的那个模型,”她说,声音压得很低,眼睛盯着餐盘里的青菜,“需要底层数据支持。”
周然动作顿住。