三代手续费后台的设计与实现
2017-06-23高凡
高凡
摘 要:为响应国家税务总局金三期中关于“三代”手续费的税务系统的推广实行,如何整理出准确的数据并利用整理出的数据完成整个“三代”手续费计算是广大税务工作者关心的问题。文章利用数据库技术的多库抽取数据、合并数据计算手续费比例等,准确完成了金三期中关于三代手续费的计算、核实与支付。
关键词:税收;审查;支付;数据库
中图分类号:TP311 文献标识码:A 文章编号:2095-1302(2017)06-00-04
0 引 言
伴随着国家“金税三期”税收系统的正式上线运营,国家为调动相关税种的扣缴义务人、代征单位和个人的积极性,每年在一定时间按其实际代扣代缴、代收代缴和代征税款的一定比例返还给这些单位和人员费用,但由于录入的个人或企业代扣代缴、代收代缴的税额量不同,因此返还给个人或企业的手续费用也不相同。针对扣缴义务人的类型不同,结合税务工作的实际情况,文章主要研究B/S模式下对于发起手续费申请的个人或企业进行审查和发放手续费的设计与实现。
1 三代手续费模块的需求分析
三代手续费模块设计基于国家统一推广运营的“金税三期”税收管理系统。税务人员对想获得手续费的企业或个人从“金三”系统中提取征收代理方式为代扣代缴、代收代缴、委托代征相关数据至特色软件三代手续费管理模块,根据纳税人的申请,在特色软件三代手续费管理模块支付审核功能节点调取该纳税人三代税款数据,按规定的三代手续费比例,计算应付三代手续费金额并推送至财务集中系统支付三代手续费,财务集中系统实时关联反写特色软件三代手续费管理模块决算功能节点,对已支付手续费的三代税款进行标记,下一年度根据上一年度已支付的三代手续费情况从特色软件三代手续费管理模块决算节点中抽取数据至特色软件三代手续费管理模块预算节点中进行粗预算。通过以上各功能节点,实现三代手续费预算、支付、决算管理以及相关查询功能。
2 三代手续费后台模块的设计
2.1 类图用例图的设计
类图与用例图的构建,要综合税务部门的实际需求,保证其准确性与可靠性。
根据主体税务部门的需要,将需求中的业务表现关系通过用例图的形式表现出来,如图1所示。
通过图中的关系来构建此次三代手续费项目的需求,同时对整个过程中的工作流起到了指导作用。
2.2 基表体系的设计
构建好用例图后,根据用例图的关系从税务部门提供的 “金三”系统与生产环境相关的完税证(ZS_WSZ)与缴款书(ZS_JKS)中抽取相关字段属性,见表1所列。
除此之外,抽取的字段依据规定的法律政策依据,具有特定含义,对税务系统中的数据做出相应筛选。在定义基表取数口径时,根据SPUUID唯一主键做关联,同时通过征收代理方式和税收票款结报缴销单编号信息。
指標取数口径(表中ZS_WSZ_JKS_SDSXFC的SPUUID字段)定义为如下形式:
2.3 查询手续费支付条件
在构建基表及取数口径后,根据税务部门的指示和法律政策依据,通过上一年度的缴税明细以及手续费支付情况设计出查询(ZS_WSZ_JKS_SDSXFC)中三代未付手续费的相关数据过程,PROCEDURE P_GETSDSKXX,并通过登记序号等查询条件搜索出未支付手续的相关数据:
SELECT ckzhzhuuid, djxh, djzclx_dm,(select DJZCLXMC from DM_DJ_DJZCLX DJZCLX where A.djzclx_dm=DJZCLX.DJZCLX_DM) as DJZCLXMC, ||
‘to_char(dzsphm) dzsphm, hy_dm ,(select hymc from dm_gy_hy hy where A.hy_dm=hy.hy_dm) as hymc, hzspuuid, hzjksbz, kjdjxh, pzhm, ||
‘ pzzg_dm,(SELECT PZZG
FROM HX_CS_ZDY.CS_PZ_PZZGB@GZLT_SC_FF_01.GZDS.GOV.CN PZZG
其中,djxh、zhuuid是纳税人在税务系统中的唯一编号, djzclx_dm为登记注册类型,hy_dm为行业代码,PZZG_DM则是票证字轨,再通过票证号码的起止作为判断条件,使其查询出的数据更加准确,具体语句如下:
CHR(39) || V_DJXH || CHR(39);
IF V_PZHMQ <> ‘% THEN
V_SQL := V_SQL || ‘ AND PZHM >= TO_NUMBER(‘ || CHR(39) || V_PZHMQ ||
CHR(39) || ‘);
END IF;
IF V_PZHMZ <> ‘% THEN
V_SQL := V_SQL || ‘ AND PZHM <= TO_NUMBER(‘ || CHR(39) || V_PZHMZ ||
CHR(39) || ‘);
END IF;
最终查询结果如图2所示。
2.4 手续费的支付审核
根据之前的查询结果判断申请三代手续费的委托代征单位是否已按时进行票款结报,并推送至相关岗位审核,审核处理规则业务流转到计财股主要领导岗进行初核,后流转至分管领导岗进行审核,分管领导岗审核同意后流转至计财股收入核算岗(每一环节审核未通过均能回退上一环节)。核对无误后提交推送支付申请单到财务集中系统,财务集中系统未支付前发现错误则回退到上一环节。业务流程如图3所示。
审核流程包含4步,每一流程中若发现错误都能返回到上一流程状态,在此以主要领导岗审核为例,供大家理解其状态扭转的过程。
设计出PROCEDURE P_ZGLDSH(V_TY IN CHAR),以数字类型1、0来判断主管领导是否审核通过:
SELECT COUNT(1)
INTO V_CNT
FROM TA_SD_SXFZFSQ_ZB
WHERE ID = V_ID
AND DQZTDM = ‘040001000002;
IF V_CNT >= 1 THEN
--找得到主表数据
IF V_TY = ‘1 THEN
-- --1.同意,推分管领导
SELECT LRR_DM
INTO V_LRR_DM
FROM TA_SD_SXFZFSQ_ZB
WHERE ID = V_ID
AND DQZTDM = ‘040001000002;
SELECT COUNT(1)
INTO V_CNT
FROM DM_GY_SWJG_LD
AND FGLDDM IS NOT NULL
AND FGLDBMBM IS NOT NULL;
其中XH作为扭转状态,表明当前操作所处的审核岗位,当主管领导审核通过时,更新主表、扭转状态,但可能出现意外情况,比如更新失败或此纳税人申请三代手续费的税务机关并无分管领导的状态时,我们需要做出判断,具体过程如下:
IF V_CNT >= 1 THEN
--取得到分管领导
SELECT FGLDDM, FGLDBMBM
INTO V_NEXTCZYBM, V_NEXTCZYBMBM
FROM DM_GY_SWJG_LD
SELECT DQZT, DQZTMC, SYZT, SYZTMC
INTO V_DQZTDM, V_DQZTMC, V_SYZTDM, V_SYZTMC
FROM DM_ZTLZB
WHERE XH = ‘142;
IF (V_RETURN = 1) THEN
UPDATE TA_SD_SXFZFSQ_ZB
SET ZYLD_DM = V_LDDM,
ZYLDMC = V_LDMC,
ZYLDGSHYJ = V_SHYJ,
ZYLDGSHSJ = SYSDATE,
DQZTDM = V_DQZTDM,
DQZTMC = V_DQZTMC,
SYZTDM = V_SYZTDM,
SYZTMC = V_SYZTMC
WHERE ID = V_ID
AND DQZTDM = ‘040001000002;
IF SQL%ROWCOUNT = 1 THEN
--更新成功
V_RESULT := ‘1;
ELSE
--失败,提示
V_RESULT := ‘0;
V_SQLERROR := ‘将工作流推送至分管领导成功,但业务表更新失败,流程ID为: || V_ID;
ROLLBACK;
END IF;
COMMIT;
ELSE
V_RESULT := ‘0;
V_SQLERROR := ‘将工作流推送至分管领导失败,流程ID为: || V_ID;
END IF;
ELSE
--取不得到分管领导
V_RESULT := ‘0;
V_SQLERROR := ‘取不得到分管领导,无法将工作流推送至分管领导,流程ID为: || V_ID;
END IF;
若主管领导审核不通过,则退回收入核算岗:
ELSE
SELECT DJXH, LRR_DM, TEMP3, SQUUID
INTO V_DJXH, V_NEXTCZYBM, V_NEXTCZYBMBM, V_SQUUID
FROM TA_SD_SXFZFSQ_ZB
WHERE ID = V_ID
AND DQZTDM = ‘040001000002;
SELECT DQZT, DQZTMC, SYZT, SYZTMC
INTO V_DQZTDM, V_DQZTMC, V_SYZTDM, V_SYZTMC
FROM DM_ZTLZB
WHERE XH = ‘143;
同時更新主表及扭转状态,更新时出现的意外情况:
IF (V_RETURN = 1) THEN
UPDATE TA_SD_SXFZFSQ_ZB
SET ZYLD_DM = V_LDDM,
ZYLDMC = V_LDMC,
ZYLDGSHYJ = V_SHYJ,
ZYLDGSHSJ = SYSDATE,
DQZTDM = V_DQZTDM,
DQZTMC = V_DQZTMC,
SYZTDM = V_SYZTDM,
SYZTMC = V_SYZTMC
WHERE ID = V_ID
AND DQZTDM = ‘040001000002;
IF (SQL%ROWCOUNT = 1) THEN
--更新成功
V_RESULT := ‘1;
ELSE
--失败,提示
V_RESULT := ‘0;
V_SQLERROR := ‘返回收入核算岗工作流成功,但业务表更新失败,流程ID为: || V_ID;
ROLLBACK;
END IF;
COMMIT;
ELSE
--失败,提示
V_RESULT := ‘0;
V_SQLERROR := ‘返回收入核算岗工作流失败,流程ID为: || V_ID;
END IF;
END IF;
EXCEPTION
WHEN OTHERS THEN
ROLLBACK;
V_RESULT := ‘0;
V_SQLERROR := SUBSTR(SQLERRM, 1, 180) || V_ID;
INSERT INTO TA_HT_RUNLOG
(LOGID, RUNTIME, PROCNAME, LOGTEXT, RUNSTATES)
VALUES
(LPAD(TO_CHAR(SEQ_TA_HT_RUNLOG.NEXTVAL), 20, ‘0),
SYSDATE,
‘PKG_SDSXF.P_ZGLDSH,
‘审核保存异常: || V_SQLERROR || ‘ID: || V_ID,
‘异常);
COMMIT;
END P_ZGLDSH;
由于在岗位审核时需判断的情况较多,容易出现错误,因此建立TA_HT_RUNLOG日志表。该表设计用于记录在审核过程时的运行情况,可以方便的查看当前过程的运行阶段及状态,便于后期调试、维护,记录信息。在审核过程P_ZGLDSH及其他审核过程中,由于定义的参数多,需要判断的情况较复杂,所以对过程的编辑需要很强的逻辑性与严谨性,同时考验掌握SQL语法的熟练程度。
3 三代手续费后台的实现
三代手续费后台根据税务部门的需求考虑采用Oracle数据库架构,其开发运行的环境为Oracle 11g R2,开发语言为SQL。为实现数据的定时抓取,设计采用Oracle定时计划,建立Job,每天凌晨调度过程:
DECLARE
JOB NUMBER;
BEGIN
SYS.DBMS_JOB.SUBMIT(job => JOB,
what => ‘PKG_SDSXF.P_ SDSXF _AUTORUN;,
NEXT_DATE => TRUNC(SYSDATE) + 1,
INTERVAL => ‘TRUNC(SYSDATE)+1);
COMMIT;
END;
当数据量达到一定数量级后,数据库的查询效率会变得很慢,为了提高查询效率,通常我们会在相应的数据表上建立索引以提高效率,这里需要在ZS_WSZ_JKS_SDSXFC和TA_SD_SXFZFSQ_ZB都建立索引。
由于三代手续费采用独立数据库,在抽取相关数据时就需要对远程数据库进行数据抽取,可由Oracle数据库中的DataBase Link来实现这一需要。DataBase Link定义一个数据库访问另一个数据库的路径,允许本地数据库用户访问远程数据库下的数据并查询或执行程序,但需要注意DataBase只是一种单向访问,若想从远程数据库访问本地数据库则必须在远程库上定义访问本地库的DataBase Link。
4 结 语
本文主要探究了基于Oracle数据库的三代手续费后台的设计与实现,并希望对实际的税务部门生产管理产生积极影响。随着国家税务部门需求自动化的逐步推进,“金税三期”系统也将进一步完善。
参考文献
[1]高允斌,吴明泉.手续费及佣金支出会计与税务处理差异分析[J].财务与会计,2010(12):31-33.
[2]张基温.计算机网络原理[M].北京:高等教育出版社,2006.
[3]鄧睿.基于Web的税收辅助管理服务系统设计与实现[D].厦门:厦门大学,2013.
[4]税光泽.VPD技术在贵州地税核心征管系统省级应用集中项目中的应用[D].武汉:湖北大学,2014.
[5]陈双.税收监控预警系统的设计与实现[J].物联网技术,2016,6 (4):96-99.
[6]李鹏飞,徐俊刚,周绍君,等.物联网技术在税源信息管理中的应用[J].物联网技术,2014,4(4):72-75.
[7]张潇月.论如何规范“三代”税款手续费收入的核算[J].普洱学院学报,2011(3):134-135.
[8]洪俊中.企业“三代”手续费收入的会计及税务处理[J].财会月刊,2010(22):59.