韩双
摘要:通过运用AO审计软件和语句,分析证券公司股东账户和资金账户,发现一个股东账户对应多个资金账号,或一个资金账户与多个股东账户发生联系的行为,进而进一步核查有无违规行为。
关键词:证券审计;AO审计软件;计算机辅助审计
中图分类号:TP311 文献标识码:A 文章编号:1009-3044(2014)01-0001-03
金融企业审计的特点之一是数据量大,证券公司审计也是如此。运用计算机辅助审计技术对大数据进行分析就显得尤为必要。证券公司的账户数量众多,运用计算机审计技术对其进行筛选势在必行,从股东和资金账户入手也是证券审计的基本方法之一。宋伟民,李丙泉在《证券审计的十个必查》中认为,“一个股东账户对应多个资金账号,或一个数额较大的资金账户与多个股东账户发生联系”是证券审计的必查点之一。原因是这种做法可能“一是出于转移、隐匿资金的目的,二是迫于股票一级市场的申购数量限制。由于这些账户往往是机构资金,涉及金额较大,故应成为审计关注对象”。
在审计实践中,从账户入手确实是一种有效的审计方法。在王秀芬的《运用计算机技术开展证券公司的审计》中提到“国债回购资金的审计”,通过计算机技术检索出国债回购中“7 户与证券公司有关联的单位在各营业部的资金账户共计 60 多个”,通过分析初步判断,“其中三个资金账户可能为证券公司的主要国债回购账户,这三个账户中总计国债回购融入资金约30 亿元”。
1 了解审计需求,确定审计目标
通过查找在同一营业部或证券公司拥有多个资金账户或多个股东账号的客户信息,进一步检查证券营业机构可能产生的违规行为,检查是否存在擅自动用投资者账户买卖记名证券、拖延划拨及占用投资者的现金红利等资金、擅自将投资者的证券帐户予以指定或撤销指定、虚假开户、冒用客户信息等违规行为。除检查多开立资金账户、股东账户本身的违规问题外,进一步延伸调查了证券经营机构可能产生的违规行为,对违规行为进行打击,对证券经营机构的日常操作的规范化起到了督促作用。
2 整理审计数据,做好分析准备
根据本次的审计目标,整理出所需的两张所需的基础表。
基础表一,客户资金流水表。
数据元素:[CLIENT_ID]客户编号,[FUND_ACCOUNT]资金账号,[SERIAL_NO]序列号,[INIT_DATE]交易日期,[BUSINESS_TIME]交易时间,[BUSINESS_FLAG]交易标志,[STOCK_CODE]股票代码,[BUSINESS_AMOUNT]交易数量,[BUSINESS_BALANCE]交易金额,[POST_AMOUNT]股票余量,[CLEAR_BALANCE]清算金额,[POST_BALANCE]账户余额,[FARE0]佣金,营业部名称。
基础表二,某营业部客户信息表。
数据元素:客户编号,客户姓名,证件号码,联系电话,家庭电话,办公室电话,开户日期,沪A股东账号,沪A基金账号,沪B股东账号,深A股东账号,深A基金账号。
3 根据审计目标,进行审计分析
1) 数据整理准备。整理好两张基础表的信息,确保关键数据的完整准确。
2) 关联交易流水表和某一营业部的客户信息表,生成该营业部有交易记录的资金账号表,且没有重复记录。通过与交易流水表的关联初步筛选掉了一部分无效的客户信息。
3) 根据生成的资金股东账号表统计同一证件号码下的资金账号个数,然后关联客户信息表,生成开立多个资金账户的客户信息,加入疑点库以备进一步核实并分析原因。
4) 生成已统计出沪市A股股东账户个数的沪A中间表,统计多开立资金账号的人员中开户沪市A股股东账号的情况。关联开立多个资金账户表和沪A股东账户个数表,生成多开沪市股东账户表,对这部分客户信息进行进一步核实。
4 按照审计步骤,运用AO分析
1) 关联交易流水表和某一营业部的客户信息表,生成该营业部有交易记录的资金账号表
var SqlStr; //定义变量
Begin
SqlStr:='select distinct a.client_id,a.FUND_ACCOUNT,b.客户姓名,b.证件号码,b.沪A股东账号 from 客户资金流水表a join 某营业部客户信息表 b on a.client_id=b.客户编号 where a.营业部名称 like ''某营业部'''; //Sql语句赋值给变量
CreateTempTable('资金股东账号表',SqlStr); //生成临时表
end.
2) 根据生成的资金股东账号表统计同一证件号码下的资金账号个数
var SqlStr;
Begin
SqlStr:='select 证件号码,COUNT(fund_account) as 资金账户个数 from 资金股东账号表 group by 证件号码';
CreateTempTable('某营业部资金账户个数表',SqlStr);
end.
3) 生成开立多个资金账户的客户信息,加入疑点库以备进一步核实
var CurQuery,IsEmpty,CurNum,SqlStr;
Begin
SqlStr:='select a.*,b.资金账户个数 from 资金股东账号表 a join 某营业部资金账户个数表 b on a.证件号码=b.证件号码 where 资金账户个数>1';
CreateTempTable('开立多个资金账户表',SqlStr); //执行查询SQL
CurQuery:=createq(SqlStr,-1);
IsEmpty:=qeof(CurQuery); //查询结果集是否为空
if IsEmpty#1 then
begin
repeat //循环将查询结果放入业务疑点临时库
AddTransRslt(CurQuery,'开立多个资金账户 查询结果');
IsEmpty:=qmov(CurQuery,1);
IsEmpty:=qeof(CurQuery);
until IsEmpty=1;
TransBatch(CurQuery,'开立多个资金账户 查询结果'); //将临时库结果集放入疑点库
end;
end.
4) 生成沪市A股股东账户中间表,以备在开立多个资金账户表中筛选出拥有多个沪市A股股东账号的人员
var SqlStr;
Begin
SqlStr:='select distinct 证件号码,沪A股东账号 from 开立多个资金账户表 where 沪A股东账号 not like ''''';
CreateTempTable('沪A股东账户中间表',SqlStr);
end.
5) 统计多开立资金账号的人员中开户沪市A股股东账号的情况
var SqlStr;
Begin
SqlStr:='select 证件号码,count(证件号码) as 沪A股东账户个数 from 沪A股东账户中间表 group by 证件号码';
CreateTempTable('沪A股东账户个数表',SqlStr);
end.
6) 关联开立多个资金账户表和沪A股东账户个数表,生成多开沪市股东账户表
var CurQuery,IsEmpty,CurNum,SqlStr;
Begin
SqlStr:='select a.*,b.沪A股东账户个数 from 开立多个资金账户表 a join 沪A股东账户个数表 b on a.证件号码=b.证件号码 where 沪A股东账户个数>1';
CreateTempTable('多开沪市股东账户表',SqlStr);
CurQuery:=createq(SqlStr,-1);
IsEmpty:=qeof(CurQuery);
if IsEmpty#1 then
begin
repeat
AddTransRslt(CurQuery,'多开沪市股东账户 查询结果');
IsEmpty:=qmov(CurQuery,1);
IsEmpty:=qeof(CurQuery);
until IsEmpty=1;
TransBatch(CurQuery,'多开沪市股东账户 查询结果');
end;
end.
5 提出审计建议,实现审计目的
一个自然人开立多个资金账户甚至沪市股东账号问题,部分因为自然人开立证券账号时开立了资金账户,开立基金账号时又开立了资金账户,部分因为资金账户未及时清理。部分账户已转为小额休眠户,这部分账户将进一步核实。
建议开户时加强信息核实,确保一个自然人只开立一个资金账户。因上海证券交易所实行全面制定交易制度,更需要进一步核实客户开户信息,确保一个自然人只对应一个沪市股东账号。
对于可疑账户,则需大胆猜测,小心求证,作进一步核实,追查其资金去向及用途,排除审计风险。
参考文献:
[1] 王秀芬.运用计算机技术开展证券公司的审计[J].经济师,2012(12).
[2] 本书编写组.AO2011实用手册[M].北京:清华大学出版社,2011.
[3] 何玉洁.数据库基础及应用技术 [M].2版.北京:清华大学出版社,2004.
[4] 宋伟民,李丙泉.证券审计的十个必查[J].中国审计,1988(12).
CurQuery:=createq(SqlStr,-1);
IsEmpty:=qeof(CurQuery); //查询结果集是否为空
if IsEmpty#1 then
begin
repeat //循环将查询结果放入业务疑点临时库
AddTransRslt(CurQuery,'开立多个资金账户 查询结果');
IsEmpty:=qmov(CurQuery,1);
IsEmpty:=qeof(CurQuery);
until IsEmpty=1;
TransBatch(CurQuery,'开立多个资金账户 查询结果'); //将临时库结果集放入疑点库
end;
end.
4) 生成沪市A股股东账户中间表,以备在开立多个资金账户表中筛选出拥有多个沪市A股股东账号的人员
var SqlStr;
Begin
SqlStr:='select distinct 证件号码,沪A股东账号 from 开立多个资金账户表 where 沪A股东账号 not like ''''';
CreateTempTable('沪A股东账户中间表',SqlStr);
end.
5) 统计多开立资金账号的人员中开户沪市A股股东账号的情况
var SqlStr;
Begin
SqlStr:='select 证件号码,count(证件号码) as 沪A股东账户个数 from 沪A股东账户中间表 group by 证件号码';
CreateTempTable('沪A股东账户个数表',SqlStr);
end.
6) 关联开立多个资金账户表和沪A股东账户个数表,生成多开沪市股东账户表
var CurQuery,IsEmpty,CurNum,SqlStr;
Begin
SqlStr:='select a.*,b.沪A股东账户个数 from 开立多个资金账户表 a join 沪A股东账户个数表 b on a.证件号码=b.证件号码 where 沪A股东账户个数>1';
CreateTempTable('多开沪市股东账户表',SqlStr);
CurQuery:=createq(SqlStr,-1);
IsEmpty:=qeof(CurQuery);
if IsEmpty#1 then
begin
repeat
AddTransRslt(CurQuery,'多开沪市股东账户 查询结果');
IsEmpty:=qmov(CurQuery,1);
IsEmpty:=qeof(CurQuery);
until IsEmpty=1;
TransBatch(CurQuery,'多开沪市股东账户 查询结果');
end;
end.
5 提出审计建议,实现审计目的
一个自然人开立多个资金账户甚至沪市股东账号问题,部分因为自然人开立证券账号时开立了资金账户,开立基金账号时又开立了资金账户,部分因为资金账户未及时清理。部分账户已转为小额休眠户,这部分账户将进一步核实。
建议开户时加强信息核实,确保一个自然人只开立一个资金账户。因上海证券交易所实行全面制定交易制度,更需要进一步核实客户开户信息,确保一个自然人只对应一个沪市股东账号。
对于可疑账户,则需大胆猜测,小心求证,作进一步核实,追查其资金去向及用途,排除审计风险。
参考文献:
[1] 王秀芬.运用计算机技术开展证券公司的审计[J].经济师,2012(12).
[2] 本书编写组.AO2011实用手册[M].北京:清华大学出版社,2011.
[3] 何玉洁.数据库基础及应用技术 [M].2版.北京:清华大学出版社,2004.
[4] 宋伟民,李丙泉.证券审计的十个必查[J].中国审计,1988(12).
CurQuery:=createq(SqlStr,-1);
IsEmpty:=qeof(CurQuery); //查询结果集是否为空
if IsEmpty#1 then
begin
repeat //循环将查询结果放入业务疑点临时库
AddTransRslt(CurQuery,'开立多个资金账户 查询结果');
IsEmpty:=qmov(CurQuery,1);
IsEmpty:=qeof(CurQuery);
until IsEmpty=1;
TransBatch(CurQuery,'开立多个资金账户 查询结果'); //将临时库结果集放入疑点库
end;
end.
4) 生成沪市A股股东账户中间表,以备在开立多个资金账户表中筛选出拥有多个沪市A股股东账号的人员
var SqlStr;
Begin
SqlStr:='select distinct 证件号码,沪A股东账号 from 开立多个资金账户表 where 沪A股东账号 not like ''''';
CreateTempTable('沪A股东账户中间表',SqlStr);
end.
5) 统计多开立资金账号的人员中开户沪市A股股东账号的情况
var SqlStr;
Begin
SqlStr:='select 证件号码,count(证件号码) as 沪A股东账户个数 from 沪A股东账户中间表 group by 证件号码';
CreateTempTable('沪A股东账户个数表',SqlStr);
end.
6) 关联开立多个资金账户表和沪A股东账户个数表,生成多开沪市股东账户表
var CurQuery,IsEmpty,CurNum,SqlStr;
Begin
SqlStr:='select a.*,b.沪A股东账户个数 from 开立多个资金账户表 a join 沪A股东账户个数表 b on a.证件号码=b.证件号码 where 沪A股东账户个数>1';
CreateTempTable('多开沪市股东账户表',SqlStr);
CurQuery:=createq(SqlStr,-1);
IsEmpty:=qeof(CurQuery);
if IsEmpty#1 then
begin
repeat
AddTransRslt(CurQuery,'多开沪市股东账户 查询结果');
IsEmpty:=qmov(CurQuery,1);
IsEmpty:=qeof(CurQuery);
until IsEmpty=1;
TransBatch(CurQuery,'多开沪市股东账户 查询结果');
end;
end.
5 提出审计建议,实现审计目的
一个自然人开立多个资金账户甚至沪市股东账号问题,部分因为自然人开立证券账号时开立了资金账户,开立基金账号时又开立了资金账户,部分因为资金账户未及时清理。部分账户已转为小额休眠户,这部分账户将进一步核实。
建议开户时加强信息核实,确保一个自然人只开立一个资金账户。因上海证券交易所实行全面制定交易制度,更需要进一步核实客户开户信息,确保一个自然人只对应一个沪市股东账号。
对于可疑账户,则需大胆猜测,小心求证,作进一步核实,追查其资金去向及用途,排除审计风险。
参考文献:
[1] 王秀芬.运用计算机技术开展证券公司的审计[J].经济师,2012(12).
[2] 本书编写组.AO2011实用手册[M].北京:清华大学出版社,2011.
[3] 何玉洁.数据库基础及应用技术 [M].2版.北京:清华大学出版社,2004.
[4] 宋伟民,李丙泉.证券审计的十个必查[J].中国审计,1988(12).