企业管理财务系统构建实施
2019-09-10李霞
李霞
摘要:近年来,我国企业的信息化建设越来越全面,充分提高了企业管理的效率。企业的资金管理是企业管理中较为重要的一个环节。对于企业资金的信息化管理,实时监控是一种科学化的企业管理手段。许多企业虽然认识到资金管理对企业发展的重要性,但是管理意识不足,管理方案缺乏,尤其是传统企业对于企业信息化管理的认知程度不足。本文就以北京尚诚致远科技有限公司资金管理为背景,采用J2EE技术对企业资金使用实现全方位的管理和监控。
关键词:资金管理;信息化;J2EE
引言
自从全球脱离了经济危机的雾霾之后,经济的复苏和跨国经济活动也越来越多,利率和汇率对企业的经济影响也越加深刻,企业单纯的财务管理已经不能应对当今的经济变化形式。财务管理渐渐转变成了资金管理,随着信息化建设的越来越全面,资金管理体系也越来越完善。资金管理是一个庞大的课题,包括现金管理、投资咨询、风险评估、利率和汇率监控和银行关系维护等等。伴随着国外企业信息化建设的一步一步推进,国内企业传统的管理方式导致企业信息化建设缓慢。资金管理作为企业管理的重中之重,资金管理体系逐渐成为一个衡量一个企业信息化的标准。
国内自动化办公越来越普及,企业的信息化管理也进入快速推进时期。北京尚诚致远科技有限公司在自动化办公方面取得了巨大进展。资金集中管理、预算管理控制、财务集中核算、银行和企业财务管理互联早已有了解决方案,也为我们这套综合的资金管理系统提供了基础模块。根据北京尚诚致远科技有限公司的整体规划,该公司的资金管理业务大致分为以下几块:资金计划额度分配,资金收款认证,资金付款审核,以及资产分配管理。其中资产管理属于公司信息化管理中除了金钱以外的公司财产的管理与使用。各个业务又有不同的子模块,并且各个模块之前也有相互交叉,同时与外围的会计核算系统、TMS等系统集成。对于北京尚诚致远科技公司资金管理系统的业务熟悉后,为了公司的信息化建设,决定开发这套资金管理监控系统。
上世纪40年代便开始有了企业资金管理体系,这个体系近年来也越来越成熟。尤其是计算机的诞生,直接将企业资金管理划入到了自动化办公板块。国外也有很多公司专注于企业自动化办公系统的研发。资金的实时管理是企业信息化管理的重要部分。在发达国家企业资金的实时管理和监控都已经比较成熟,企业都有成熟的解决方案。虽然国内部分企业生产力水平达到世界一流,但我国计算机发展起步较晚,企业信息化建设不全面,尤其是在企业资金管理上更是没有权威的解决方案,这就难以推进国内基于计算机的资金实时监控系统的研究和应用。
国内越来越多的企业也认识到资金管理的重要性,而一批大型企业凭借雄厚的资金实力,借鉴银行资金管理模式,运用理财手段、现代网络技术,实行资金集中管理,取得了显著的成效。他们特别注重用信息化的手段强化企业的资金集中管理。但是,较为完善和专业的企业资金管理解决方案却一直没有创新产品。本文就北京尚诚致远科技有限公司的资金管理监控系统的设计进行简要说明。
1 项目可行性分析
1.1可行性分析
本系统的设计将采用应用较为广泛的B/S模式,技术支撑依托于J2EE体系结构。这个项目采用了现在比较流行的MVC模式,M层使用了javaBean来映射表单数据和对应数据表,V层使用了JSP技术以及大量的css与javaScript,C层使用了Servlet技术,完全满足了这个项目的需求。另外,在操作数据库时底层仍采用JDBC技术,但是得到了很好的封装,使用已经封装好的c3p0数据库连接框架,只要将数据库信息保存到配置文件中,便实现了数据库连接,也实现了javaBean往数据库的映射。这就是北京尚城致遠科技有限公司资金管理监控系统的基本技术概要。
软件技术架构都比较完善,硬件方面windows系统都可以适应。现有硬件的处理速度足以满足项目需求。现有机器大部分可以运行该项目,项目的运行基本不会改变原有计算机的运行状态以及系统架构。而且项目整体操作类似现有大部分信息系统管理软件,业务逻辑上不会有太大问题。并且前期项目搭建,会有专业人士来做。
1.2软件工程设计理论和技术
每一个系统软件在开发之前都要经过软件设计,软件设计具体又包括需求设计,详细设计,系统架构设计。有需求设计来推出详细设计,具体说明用户需要哪些功能模块,有详细设计退出系统架构设计。在系统架构设计中项软件开发人员具体介绍功能点的实现与难点的突破等。
下图为大家简单介绍软件设计的主要组成。
(1)UML技术
UML建模技术,是用来将软件进行可视化建模的一种技术。首先要了解模型是什么,模型就是将现实世界中的物体,进行抽象的模拟和简化。为了使软件系统更容易被理解,就出现了建模。建模有哪些有点:
可以对系统进行可视化分析,使其更接近需求。
可以看出系统构造的模板。
降低了软件系统文档化的难度。
UML建模包括七种视图:
(2)J2EE技术介绍
目前的java平台包括三个版本,一种是用于小型嵌入式设备上的软件开发J2ME,还一种是简单桌面应用的J2SE,以及最后一种用于企业级平台搭建的J2EE。
J2EE平台具有诸多优点,它具有很好的可伸缩性、灵活性、易维护性等。这几点又体现在J2EE平台能够保存现有的IT资产,对于一些现有的基于J2EE平台的项目可以进行迭代开发,既可以加入新的功能模块,也能保留原来功能模块。并且J2EE平台的产品几乎能在任何操作系统上运行,也就免去了对硬件环境的要求,现有的操作系统和硬件资源任然可以使用。
而我们的系统正采用了J2EE平台,这里主要运用到J2EE规范中的JDBC、JSP、Java Servlet、XML等。
(3)Struts2
SSH(Struts +Spring +Hibernate)三大框架,今天来总结一下Struts2的一些知识。所谓框架么,其实就像我们盖房子一样,需要先搭建支架,然后再进行添砖加瓦,使之达到完美。而在软件开发中,框架也是一样的:就是将通用的代码进行封装,使我们可以重复利用,达到了高效开发的效果。当然既然已经搭建好的框架,用到我们的系统中,我们就需要学习它,怎么使我们自己独有的代码和框架进行完美的结合。因为大家都在用这些优秀的框架,所以框架的学习,其实就是框架规范的学习。有了规范,有个约束,有了统一,才能更加有利于合作的开发。
(4)Hibernate
这是一个数据库的操作框架,Hibernate中提供了两个级别的缓存
第一级别的缓存是 Session 级别的缓存,它是属于事务范围的缓存。这一级别的缓存由 hibernate 管理的,一般情况下无需进行干预
第二级别的缓存是 SessionFactory 级别的缓存,它是属于进程范围的缓存
SessionFactory 的缓存可以分为两类:
内置缓存: Hibernate 自带的, 不可卸载. 通常在 Hibernate 的初始化阶段, Hibernate 会把映射元数据和预定义的 SQL 语句放到 SessionFactory 的缓存中, 映射元数据是映射文件中数据的复制, 而预定义 SQL 语句时 Hibernate 根据映射元数据推到出来的. 该内置缓存是只读的.
外置缓存(二级缓存): 一个可配置的缓存插件. 在默认情况下,SessionFactory 不会启用这个缓存插件. 外置缓存中的数据是数据库数据的复制, 外置缓存的物理介质可以是内存或硬盘。
(5) Spring
Spring是一个轻量级的IOC和AOP容器框架:a,轻量级:程序实现不是很复杂,代码不是很多,占用资源不是很多,没有侵入性;b,IOC(Inversion of Control 控制反转):对象创建责任的反转(重点,核心);c, Aop(Aspect Oriented Programming):一种面向横切面编程的思想方式,可以进行功能性扩展,看前边的一篇转载的博客:面向横切面(AOP)编程d,容器:可以容纳对象,并且可以控制对象的生命周期。
Spring框架是进行对象管理,对象关联,解耦的一个中间层框架。SSH(Struts+Spring+Hibernate)三大Spring在中间就起着一个承上启下的作用。好,首先我们先来看一下Spring框架的一些知识点,通过下边这张图来总括一下:
(6) JavaScript
JavaScript虽然是一种编程语言,但它非常简单。它是处理html页面的脚本语言。是由网景公司创建,JavaScript首次出现时功能非常有限,甚至编写完的代码只能运行在一种浏览器。直到W3C的出现,制定了一系列标准使得JavaScript得到了广泛传播。它可以增加页面生动性并使其以全新方式与用户进行交流。我们项目中也大量使用js来增加页面效果。
(7) JQuery
jQuery是一套封装了的IavaScript库。jQuery只是脚本库,并不是脚本框架。它并不能解决脚本的引用管理与功能管理中的问题,这是脚本框架要做的事。但脚本库可以帮我实现很多业务逻辑上的问题,jQuery的出现提高了编写JS脚本的效率,增强了代码的健壮性,让代码看起来更加优雅。
jQuery有哪些特点:首先就是提供了强大的功能函数,让代码更整洁,尤其是其强大的选择器,其次解决浏览器兼容问题,丰富绚丽的UI实现。
(8) MySQL
在互联网技术中,MySql数据库已经是非常普及的数据库。MySql与其他数据相比有它自己独具一格的一面,它的架构应用在多种场景时依然非常合适,能应对自如。MySql不仅性能指标出众,实际装机容量与应用领域都高于其他数据库。MySql相比其他数据库有着更加全面的测试,同时也有着更多的相关技术文档。它的优势体现在应用范围广,运行稳定,高性价比等。
(9) MVC
MVC是现代web开发中非常流行的一种设计模式,将整个应用划分为三层结构:视图层(V),模型层(M)与控制层(C)。
模型是企业数据和业务规则模型。在MVC里面,该模型要处理的任务最多。通过模型返回的数据是与数据格式无关的。该模型可为多个视图提供数据。适用于模型的代码只写一次可复用的多个视图,从而减少重复代码。视图是向用户展示信息并做交互的页面。
视图层既可以显示模型层的数据,也可以转发到控制层将模型层的数据进行处理。视图层也是三层中用户可以直接看到的“层”。控制器层在项目中起到控制转发的作用,其中也包含了对模式数据的操作,處理等事务。
控制层更多的是Servlet来实现,当今能实现控制转发的框架有很多,不单单是Servlet,比如struts。控制层通过模型层来操作数据库,然后将数据转发到视图层显示给用户。
总之,MVC三层是协调工作的,视图层与用户交互,接受用户请求,模型层用于将实体映射到数据库,起到封装作用,让开发者只面对事先封装的模型,控制层来处理用户请求和操作模型层,也是整个项目的难点所在,是整个项目业务逻辑的核心。
(10)JDBC
JDBC是一套API库,专门用来建立数据库连接,操作数据库,它对多所有数据库提供了统一的接口。 简化了开发流程,统一的java接口。每一个支持java的数据库生产商自己来做JDBC驱动程序,然后提供统一的接口供开发者使用,这样简化了java开发者操作数据库的流程,这种做法也是java“一处编写,处处运行”的思想。而需要更换项目的数据库时,只需要修改数据库驱动类即可,所以说JDBC的API有着很大的价值和意义。
(11)DBUtils
这是一个数据库的操作组件,有点类似当今流行的Hibernate,能夠将数据库操作结果转换为各种数据集合,例如List,Map等,但是其底层仍然是JDBC实现的。那么这个数据库操作组件有什么特色呢。首先是对于数据表的读写,结果集能很好的处理为java中的集合,比如List,Map,Set。其次,操作数据表时只需要传入sql语句即可,同样支持占位符。最后,这个组件能够使用数据源,能通过JNDI和数据库连接池技术来进行性能优化,尤其是对数据库连接的重复使用。
1.3项目开发环境与运行平台
(1)运行平台
项目开发所使用的服务器是Tomcat,它是由Apache发起的,是一个开源免费的产品,我们就用它作为项目的服务器。同时,它还是SUN公司推荐的Servlet容器,它能够跟大部分主流的HTTP服务器一起协同工作,并且可靠,稳定,效率高。
Tomcat服务器主要有以下特色:
免费开源,网上资料齐全很适合我们这种小型项目。
安装部署简单,体积小,是一个适合新手使用的WEB容器。
更新快,跨平台。由于Tomcat本身是java写的,所以具有跨平台性。
除了服务器端,前段也用到了大量js与css技术。整体属于JavaEE体系架构。
(2)开发环境
操作系统:Windows 7。
服务器软件:Tomcat6.0。
浏览器:IE、Fire Fox、360。
开发工具:MyEclipse。
(3)C3P0
这是一个开源的连接池库,仍使用JDBC,它实现了jdbc3和jdbc2的拓展与规范。现在流行的Hibernate与Spring都使用了这种连接框架。它的配置信息如下
数据连接配置
2需求分析
在软件开发的过程中,首先要做的就是需求分析。一个项目最终能否符合用户的需求,绝大部分在于需求分析工作做得是否到位。下面就对北京尚诚致远科技有限公司的资金管理与监控系统进行业务上的需求分析介绍。
2.1 企业资金管理业务架构
完善的企业资金管理业务应该主要包括以下三个大的方面:现金管理(CashManagement),资金交易管理(Treasury Transaction Management),即管理企业在多头寸时的投资以及在缺头寸时的融资。风险管理(Risk Management),即对企业所面临的资金风险进行识别和衡量,同时对于可能发生的风险进行有效的防范。对于企业资金管理人员来说,还需要考虑会计处理,和资金报告等相关工作内容。
企业资金管理的主要业务框架
2.1现金管理
企业资金管理之中,最原始的莫过于现金管理,现金管理是近现代企业资金管理中必不可少的一部分。其中包括企业现金流的预测,企业现金池的管理,银行账户的管理,收款及付款的管理四大部分。下面章节中将分别对这四部分做进一步的介绍。
(1) 现金流预测
现金流预测是企业资金管理的基础,企业工作人员应当对企业的现金流向做出一定预测,如果能对现金流作出准确的预测,就可以促进资金的流动,增大投资收益。在预测资金流向的同时,对企业的资金风险也能进行简单的预测与评估。虽然单纯的预测,缺乏理论知识,但是我们可以借助于企业信息化中的技术手段,对当前企业的资金模式进行建模,分析,最终得出资金流向的预测。
对于企业的流动性预测和现金计划来说,首先需要获取内部和外部银行的数据。在获取银行数据后需要对数据进行对帐(银行对帐放在后面章节描述)。然后对现金的头寸和现金的预测进行查询,编制现金计划的报表。在这些工作的基础上,分析实际与预测的匹配程度,对企业的融资成本进行分析,对企业面临的流动性风险进行预测,在此基础上进行投融资的决策。
对企业来说,现金流的预测信息收集主要通过以下四个途径:
①企业的预算数据。一般企业都会制定一定经营周期(一年或半年)的预算数据,并进行滚动式(每季度或每个月)的更新。一般来说,预算数据可以提供给企业现金流的长期预测信息。
②企业的应收/应付信息。企业一般都会有类似供应商付款和销售收入这样的应收应付信息。应收应付周期一般都是一个月,所以应收/应付信息成了企业短期现金流预测的主要来源。
③企业的资金计划。企业的各个分子公司或其他成员单位会定期提交资金计划给资金中心或集团资金部。这类信息可以作为企业中期的现金流预测的主要来源。
④资金业务(Treasury Activity)。企业的资金业务也会影响到企业的现金流预测。举例来说,某企业有一笔10 年长期贷款,每半年付息,到期还本付息,这也就意味着这个企业每半年会有一笔利息支出的现金流,10 年后到期还会有一笔归还本金的现金流。
(2) 企业资金池
企业资金池是为了方便管理人员对企业当前的资金状况有一定的把握。企业需要在资金池中建立多个子账户,并且为每个子账户分配特定的金额。在资金池的使用中需要加上审核流程,只有有相应权限的管理员审核通过后,资金才能在资金池中流转与使用,既保障了企业资金的安全性,也对公司现金进行了高效的管理。
(3) 银行账户管理
企业对银行账户的管理的目的是为了高效地,准确地管理企业(包括总部和各个分公司)的银行账户结构和信息,从而提高企业现金的流动性和有效利用率,为建立企业现金池提供基础保障。企业银行账户管理一般包括银行账户开户信息的维护,银行账户结构的管理,银行账户余额的管理,银行账户交易管理和银行账户对帐管理。如下图所示:
其中收支两条线是目前大多数企业所普遍采用的一种账户管理模式,收支两条线模式的工作方式如图3-2 所示:
从图3-2 中可以看出在分公司有资金需求时可以提交付款申请,企业会从资金中心的总账户下拨资金到分公司支出账户;同时,资金中心也会定期将分公司的收入账户的盈余上收到资金中心总账户供企业内部账户使用。
(4) 资金调拨
资金调拨包括企业内部的资金调拨和企业对外的收付款。
企业内部的资金调拨保证了企业内部资金流转的高效,有利于企业资金的有效利用,达到了企业利益的最大化。一般对企业的资金部门来说,最大的工作量就集中在对企业收款和付款的管理,所以对于收款和付款的管理也是现金管理中一个重要的组成部分。
对收款来说,企业需要及时地了解收入的情况,这是高效地利用资金的前提;对于付款来说,企业需要安全的,完善的流程控制,以降低资金支付的风险。同时企业需要一个集中的付款平台,以保证企业可以使用一个统一的平台通过不同的银行进行资金的支付。
2.2 资金交易管理
企业资金交易管理又叫做投融资管理,是在建立良好现金管理的基础上,企业利用各种金融工具在多头寸的时候进行投资,缺头寸时进行融资的过程。资金管理是资金管理的核心。在当前开放的国际金融市场上,企业在进行投融资的时候,有很多种选择。
从投融资的市场业务角度来区分,主要可以分成四大类,分别是货币市场交易,资本市场交易,衍生品交易,外汇交易。
投资管理是对企业的各种金融投资进行跟踪和管理。一般企业可投资品种包括:银行存款、票据、基金(股票型基金、债券型基金等)、债券(国债、企债、金融债、债券回购)、股权投资等;融资管理是对企业的融资进行统一的管理和跟踪,其中的融资工具包括上市、发债(普通债券、可转债)、银行贷款、票据、保函、信用证等。
当然,为了规避风险,企业还会利用各种对冲(Hedging)金融产品进行套期保值,比如利用外汇远期规避汇率风险;利用利率掉期来规避利率风险等。
2.3风险管理
企业在建立有效现金管理的基础上,会去进行投融资,那么风险管理对于企业来说是非常必要的。市场风险是指在资金融通和货币资金的经营过程中,由于金融市场变动带来的影响,使资金所有者的收入与预期产生偏差。利率、汇率、商品和证券的市场风险是企业面临的最主要的市场风险。对于市场风险,企业可以采用情景分析和对在险价值(VaR)的评估来测算市场风险对于企业资金头寸的影响,以便企业及早地采取措施,降低风险发生所带来的损失。对于流动性风险来说,目前企业主要是通过贷款和内部资金的调拨来解决流动性风险的问题。
操作风险是由于人员操作或者系统失效等外部因素带来的风险。为了避免操作性风险,企业在进行资金交易的时候必须有完善的审核流程控制;同时,建立适合企业资金管理要求的信息系统。
对于法律风险,企业要加强自身法律意识,同时还要加强企业法律部门和审计部门的建设力度,提高法律部门和审计部门的人员素质。
2.4企业资金管理运作模式
借鉴银行的资金管理运作模式,企业资金管理一般也分为对于资金管理部门前、中、后台的管理, 如图3-3 所示。
从图中可以看出前台人员(Front Office)负责交易的录入和日常处理,其中包括贷款交易,债券交易,票据交易,外汇交易和金融衍生品交易等。中台人员(Middle Office)负责风险管理和限额管理等。后台人员(Back Office)负责交易的清算,会计出账,资金报告等。
2.5企业资金管理业务流程
(1)业务流程概述
企业资金管理业务流程包括现金流预测,内部现金管理,资金运作,交易执行管理等,如图3-4 所示:
图3-4 中,现金流预测是基于业务产生的实际应收数据、银行数据以及预算数据,企业根据这些数据进行现金流预测;内部现金管理在现金流预测的基础上,对公司银行账户进行管理,建立合理的资金池结构,并对资金头寸进行管理,实现账户之间资金的调拨;资金运作是在准确的现金流预测和内部现金管理的基础上,企业需要对风险进行分析,确定合理的投融资决策;交易执行管理是根据制定的投融资决策,进行交易的执行管理。在资金运作过程中,前、中、后台人员对流程进行控制,分工合作。前台进行交易的录入、审核与授权,中台进行风险的控制和限额的检查,后台进行结算和会计处理。
(2)资金交易流程分析
企业资金管理中核心的业务流程就是对于交易的生命周期的管理。这里对交易的定义是:一切可以导致企业资金头寸发生变化的资金活动。它不仅包括投融资交易,还包括一般性付款和收款,利息的收入和支出等。交易可能产生企业资金头寸的正向变化,也可能产生企业资金头寸的负向变化,下面本文将以两个实际的例子来解释企业的实际交易流程,从而进一步分析和优化企业的交易流程。
我们先以企业长期贷款(Loan)为例。首先,企业因资金需求,需要向某银行贷款,
银行一般都会对企业授予一定的授信额度(Credit Line),也就是银行愿意向企业贷款的最大限额。接着企业会确认该银行授信额度是否能满足此次贷款的需求,在不能满足企业贷款需求的情况下,企业一般会要求银行增加对其的授信,或者拆分贷款并向多家银行贷款,直至满足企业融资需求。其次,企业会和银行商讨贷款合同的细节,比如贷款利率,还本付息周期等具体内容。接着,双方达成共识,签署合同。最后,银行根据合同金额提供给企业资金,企业根据合同还本付息,直至全部贷款偿还完毕。对于企业来讲,这些活动都涉及到相关业务角色的一系列活动,其中包括交易员录入交易,到后台的审核结算。
对 于 企 业 的 投 资 交 易 (Investment) 来说, 企业一般都会对于不同交易对手方(Counterparty)或者交易类型定义不同交易限额也就是企业在与某一对手方进行交易或者进行某种交易的最大值。以购买债券(Bond)为例。首先企业会检查购买此类债券的限额,如在限额之内,企业可以購买该债券。接着,通过相关人员审核和授权后,交易员可以在市场上购买该债券。最后,企业支付现金并持有债券。在企业持有债券的期间,会获得该债券的利息,同时债券在市场上价格是浮动的,企业也可以在确认获利的情况下,将债券买出,这当然也会涉及到相关业务角色的授权。通过对企业资金管理的交易流程进行深入地分析,可以抽象出企业资金管理中交易的管理流程。图3-5 描述了资金管理中的交易管理的主流程。
从图3-5 中可以看出资金交易的主流程:首先,由前台人员(Front Office) 建立资金交易;接着,中台人员(Middle Office)进行风险的控制,其中包括交易限额或敞口的检查,以及企业关注的其他一些风险指标,例如:VaR;然后,后台人员(Back Office)一般会根据限额和各种风险指标来对交易进行审批。交易审批过后,后台人员还会对交易的结算信息进行审批。企业都会有自身特色的交易和结算的审批流程;审批通过后,出纳可以对交易进行最终地结算。
2.6基于CTR 模型的系统
本节将通过用例的方式阐述了基于 CTR 模型的资金管理系统的需求。
(1)需求概述
图 3-6 用語境图(Context Diagram)方式,概述了相关人员和系统对于企业资金管理系统的需求。
从图中可以看出,IT 人员希望通过系统来维护企业资金相关的一些基础数据,免去了他们手工维护的辛苦;现金管理人员系统通过系统来有效管理企业账户信息,管理企业资金池,提高企业现金的流动性,最好还能通过该系统进行收付款的支付,这样可以减少他们大量的工作量;资金管理人员希望通过该系统管理企业资金交易,维护交易状态并对交易进行估值等平时他们经常要做的工作;风险管理人员希望该系统能提供一个有效评估和控制企业资金风险的平台;企业司库或者财务总监则希望系统能够提供制定企业发展和投融资决策的有效信息;外部系统要和企业资金管理交换数据和信息。
(2)基础数据需求
在进行需求分析之前,首先必须要了解和企业资金管理相关的一些基础数据,以及这些基础数据的哪些信息是需要在本系统中维护的。表3-2 给出了资金管理系统中要维护的一些关键的基础数据。
下面简要介绍一下这些关键的基础数据需要在系统中维护的主要信息:
①企业组织架构主要有业务单位名称、地址、电话、传真、邮件地址、层级、法
人实体、本币币种、报告币种、以及各业务单位的层级关系等信息需要在系统
中维护;
②企业银行账户主要有账户名称,账号,开户人,开户银行名称,账户币种,电
子转账代码,SWIFT 代码等信息需要在系统中维护;
③交易对手主要有交易对手名称、地址、电话、联系人、传真、邮件地址、层级、
交易对手类型等信息需要在系统中维护;
④交易对手银行账户主要有账户名称、账号、开户人、开户银行名称、账户币种、
电子转账代码、SWIFT 代码等信息需要在系统中维护
⑤货币信息需要在系统中维护的信息有:货币名称、计息基准、小数位数、归整
原则、货币发行国、以及货币之间报价方式(直接报价,间接报价)等
⑥市场数据主要有相关货币、报价日期、买入价(Bid Price)、卖出价(Offer Price),
最终价(Last Price)等信息需要在系统中维护;
⑦结算方式主要有结算名称,结算类型需要在系统中维护;
⑧业务种类主要业务名称、相关交易对手等信息需要在系统中维护;
⑨信用额度主要有币种,汇率,复核日,到期日,有效期间,额度,保证金,费
率,使用单位,适用交易等信息需要在系统中维护;
⑩风险敞口主要有敞口值计算标准,敞口分组信息,适用交易,期限,敞口值等
信息需要在系统中维护;
(3)参与者
参与者(Actor)是具有行为能力的事物。参与者不仅可以由人来扮演,也可以是组织,软件或机器。参与者并不属于系统,它通过系统边界直接和系统进行有意义的交互。表3-3 列出了系统的参与者。
表3-3 TMS参与者
(4)资金管理系统的互连
正如前文阐述的一样,作为企业的核心系统,资金管理系统除了本身有若干个子系统构成以外,还要和其他的企业信息系统互连,以获得系统需要的信息。图3-4 展现了典型的资金管理系统与其他企业信息系统的互连情况。
图 3- 4 典型资金管理系统互连
从图中我们可以看出,企业资金管理系统要和以下四个系统互连:
①银企直连系统:资金管理系统一般会作为企业的支付平台与各个银行的银企直
连系统互连。目前国内大多数银行都已经提供了银企直连系统,但是不同的银
行提供的接口会有差异,但是所有的银行都会提供以下3 类接口:支付,账户
余额查询和账户交易明细查询。支付接口需要资金管理系统提供支付账号,支付金额,支付目的等支付信息。账户余额查询和账户交易明细查询需要资金管理系统提供账户号,账户名和日期等信息。
②ERP:资金管理系统需要ERP(例如:SAP,Oracle)的应收/应付信息,从而可以
更准确和全面地进行现金预测和支付管理。
③行情系统:资金管理系统需要获取行情系统(例如:Bloomberg,Reuters)的市场
数据(例如:利率,汇率,股票价等)以支持系统的运行。
④预算系统:资金管理系统也包括了预算系统,预算又分为月度资金预算与年度资金预算,从这两方面结合来提高预算的准确性。
3系统设计
(1)系统公共模块设计与开发
系统公共功能主要分为消息与待办,审核流程,附件上传下载,图表统计,
用户权限,综合查询。这里简单为大家介绍消息、审核流程、附件上传这三个比较常用且关键的模块。
消息与待办模块是公用的模块,每个用户登录进来会看到两个页面,分别是消息和待办。消息主要是显示当前用户的消息和待办事项。消息比如是资金紧张消息,待办比如是资金下发需要审核的消息。消息和待办为系统中共用接口,其他模块来调用,同时需要传递代办的内容和接收人,消息也是如此。
审核流程设计为xml配置模式,审核节点的选择分为通过与驳回,在xml中来配置审核页面与驳回之后的跳转页面。而审核通过页面无需设置,通过代表流程结束。每个需要审核的模块,在提交审核时会调用一个公用的方法,来启动审核流程,但是需要向这个审核流程接口提供一个参数来告诉这个审核流程启动哪一个模块,这时系统就加载之前的xml来指定跳转页面。
附件上传下载主要是针对一些资料的发送和下载。资料可是审核文件,也可以是发票之类的文件。附件作为系统中必不可少的数据元,附件的上传与下载我们采用struts2特有的附件上传功能,这里需要导入文件下载上传的两个文件,一个是commons-fileupload-1.2.2.jar,另一个是commons-io-2.0.1.jar。
企业具体业务模块分析
企业具体的业务模块分为资金计划额度管理、收款管理、付款管理、公司业务管理以及数据集成五个主要模块,各个模块之前业务又有交叉。
资金计划管理分为债权回收、资金筹集、资金预算控制、资金计划发布审核等。债权回收主要是公司记录外企业或个人对公司所欠债务的管理,包括债务清还时的数据增、删、改、查以及债务是否到账的审批流程,和账务资料附件的上传与共享等。资金筹集主要是发布公司资金筹计划,吸纳社会资源,资金筹集需走审核流程,与筹集资金得相关附件上传和筹集计划的增、删、改、查。资金预算控制是资金计划管理中对资金计划发布的资金数进度最大最小以及是否发送提醒消息的控制。资金计划发布审核则应用系统公共功能的审核流程。
收款管理主要是收款项目的增、删、改、查以及收款确认的审核流程。
付款管理同收款管理类似,都是项目的增、删、改、查以及付款项目的审核流程。
公司业务管理主要是公司内部的项目管理,事务管理。项目管理主要是项目成本预算,项目开支管理,项目收益管理,项目在公司收入来源上占有重要地位。事务管理主要是用户管理,部门管理,角色管理等等子模块的增、删、改、查操作。
3.1总体设计
本节从功能架构,逻辑架构,部署架构三个方面阐述了企业资金管理系统的总体设
计思路和方案。
(1)系统功能架构
整个企业资金管理系统从功能上可以分为基础数据管理,现金管理,资金交易管理,
风险管理和对外接口构成,如图4-1 所示:
图 4- 1 系统功能架构
基础数据管理是企业资金管理的基础,用于维护系统其他模块所需要的一些基础数据,包括企业组织架构,交易对手信息,交易类型信息,货币信息等。
现金管理是企业资金管理系统业务的基础功能模块。通过该模块,企业可以进行现金管理的相关业务的操作。
资金交易管理是企业资金管理系统的核心功能模块。通过该模块,企业可以对其投融资交易进行管理。
对外接口子系统是企业资金管理系统对外的接口。通过该模块,系统可以与诸如行
情系统,银行系统,预算系统和ERP 系统交换数据。
(2)系统逻辑架构
本系统采用分层架构(Layered Architecture)的设计。从逻辑上分成三层,分别是数据访问层,业务逻辑层和表现层。
数据访问层(Data Access Layer):数据访问层实现了对数据操作的封装,提供了对数据库中的数据进行读写的接口。系统需要实现的数据层,就是提供对数据库中的数据表进行抽象,对外提供对数据进行操作的接口。其他所有的组件都可以通过直接调用数据层接口的方式,获得或修改数据库数据,而不用考虑数据库的具体实现。如图 4-2 所示,为本系统数据访问层的结构图,其中DALFactory 为创建数据访问层
对象的工厂;IDAL 定义了各种数据访问操作的接口;SQLServerDAL 和OracleDAL 分
别实现了IDAL 中定义的接口,以支持SQLServer 数据库的访问和Oracle 数据库的访问;Entities 中定义了数据访问层需要使用的业务实体对象,对象只有属性,没有行为。
图 4- 2 数据访问层结构图
业务逻辑层(Business Rules Layer):业务逻辑层是系统架构中主要部分。它位于数据访问层与表示层之间。如图4-3 所示,IBLL 定义了系统业务逻辑的操作的接口;BLL 是整个系统的核心,实现了整个系统的业务逻辑。从图中还可以看出,业务逻辑层对数据访问层的访问是通过接口模IDAL 来完成的,与具体的访问逻辑无关,实现了层与层之间的松散耦合。
图 4- 3 业务逻辑层与数据访问层的关系
表现层(Presentation Layer):系统与最终用户的接口,与用户发生交互,接收用户输入,并将接收到的信息发送给逻辑层处理。展现形式可以是窗口模式(Windows Form),也可以是网页形式(Web Form)。
(3)典型部署架构
图 4-4 展示了系统的典型的部署图。从图中可以看出局域网用户,通过使用局域网客户端(LAN Client)访问应用服务器,来使用本系統。应用服务器和数据库服务器部署在企业内部的局域网内。远程客户端则可以通过使用VPN(Virtual Private Network)来访问应用服务。
图 4- 4 系统部署架构图
3.2基础数据管理
基础数据管理子系统分别从用户和组管理,用户权限管理,企业组织架构管理,交易对手的管理,交易类型管理,货币管理,假期管理,市场数据管理,信用额度管理,风险敞口管理等数据进行管理。基础数据管理的目的是对企业资金管理系统需要的基础数据进行维护,设计上最主要的工作就是对基础数据的增加(Add),删除(Delete),修改(Update)和查询(Query),以及建立相关基础数据的关系。
3.3现金管理
现金管理子系统包含企业资金池,企业资金计划,收付款管理,账户头寸管理,账户交易管理等模块,如图4-7 所示。
图4- 7 现金管理子系统功能架构
企业资金池是企业现金管理的关键和基础,主要作用是建立企业银行账户的结构和归集关系;企业资金计划是由相关人员填报的收付款预测信息,或由ERP 系统导入的应收应付信息(AP/AR);收付款管理用于记录企业实际收付款信息,其中付款还可以通过银企直联系统进行支付。具体方式将在4.6 对外接口章节中详细介绍;账户交易管理是用于维护企业账户银行对账单的信息,可以人工输入也可以通过对外接口导入系统。具体导入方式将在后面详细介绍;账户头寸管理是用户维护企业银行账户的可用余额的,可以人工输入也可以通过对外接口导入系统。下面章节中将具体阐述企业资金池的设计。
现金管理的关键数据表及其关系如图 4-11 所示。其中,表trsDEAL,trsDEAL_TRAN 和表trsDEAL_INPUT_CFLOW 用于存放由收付款管理模块录入的实际的收付款交易。表trsSETTLE 和trsSETTLE_DETAIL 存放了实际收付款交易所产生的结算数据;表trsCORP_BANKACCOUNT 用于存放企业银行账户数据; 表trsACCOUNT_POOL 用于存放企业银行账户池的数据; 表trsACCOUNT_POOL_GROUP 用于存放企业银行账户池组的数据; 表trsCASH_FORCAST 用于存放由资金计划产生的收付款预测数据,和从ERP 中导入的应收应付数据;表trsBANK_ACCOUNT_BALANCE 用于存放企业银行账户的余额数据;
表trsBANK_TRAN 用于存放由账户交易管理输入的银行对帐单数据。
图 4- 8 现金管理模块关键数据表
3.4资金交易管理
资金交易管理模块是企业通过各类金融工具进行资金交易的平台。首先,在模块的分类设计上,本系统考虑了交易市场、交易目的、交易期限的因素,将资金交易设计由五大模块组成:
①外汇交易管理模块:主要功能是负责外汇即期,外汇远期,外汇掉期的录入和交易后续的管理。
②债券交易管理模块:主要功能是负责债券发行、债券买卖的录入和交易后续的
管理。
③票据交易管理模块:主要功能是负责票据发行、票据买卖的录入和交易后续的
管理。
④对冲交易管理模块:主要功能是负责利率期权,利率掉期,远期利率协定这些
对冲交易的录入和交易后续的管理
⑤长期资金交易管理模块:主要功能是负责长期贷款和长期投资交易的录入和交
易后续的管理。
⑥短期资金交易管理模块:主要功能是负责短期贷款和短期融资交易的录入和交
易后续的管理。
(1)交易审批流程
从资金交易的录入到交易进入结算这个过程,系统在设计上可以最多支持配置两个审批节点,分别是审核(Check)和授权(Authorize)。如图4-16 所示为系统资金交易审批的流程。
首先前台交易员通过系统进行交易录入,录入交易的基本信息。
接着系统会进行敞口或限额的检查,如果额度超限,系统会提示交易员做限额的调整,待交易员调整限额或修改交易金额后,系统会再次进行限额检查;
然后,如果交易没有超限,系统会对交易作审核状态的检查,确定该交易是否需要审核。如果需要审核,则系统提交交易给交易审核员审核,如果交易被审核通过,则系统对交易进行授权状态检查;如果不需要审核,则系统直接对交易进行授权状态检查。
最后,待系统检查授權状态后,如交易需要授权,则系统提交交易给交易授权员进行授权,如果交易通过授权,则交易进入结算流程。如果交易不需要授权,则交易直接进入结算流程。
图4-9 交易流程图
(2)结算审批流程
同样对于结算流程来说,系统在设计上可以最多支持配置两个审批节点,分别是审核(Check)和授权(Authorize)。如图4-9 所示为系统结算审批的流程。
首先结算人员通过系统录入或修改结算信息。接着系统会根据录入的结算信息判断结算信息是否需要实际的结算。如果不需要,结算过程完成;如果需要,系统进行结算审核状态检查。
然后,系统会对结算信息做审核状态的检查,确定该结算信息是否需要审核。如果需要审核,则系统提交该结算信息给结算审核员审核,如果结算被审核通过,则系统对结算进行授权状态检查;如果不需要审核,则系统直接对结算进行授权状态检查。
最后,待系统检查授权状态后,如结算需要授权,则系统提交结算给结算授权员进行授权,如果结算通过授权,则交易结算成功。如果结算不需要授权,则交易结算完成。
图4- 10 结算审批流程图
3.5风险管理
本系统中风险管理子系统包括情景分析和在险价值(VaR)的计算。
(1)情景分析
目前本系统支持两种情景分析,分别是利率情景分析和汇率情景分析,情景分析计算流程如图4-211 所示
图 4- 11 情景分析流程图
图 4-11 中,确定分析对象是用户选择需要进行情景分析的资产或者负债;接着,用户需要确定分析的基准,比如利率情景分析,用户需要选择某一天的利率收益率曲线(Yield Curve)作为比较基准;然后,用户需要确定分析情景,比如利率上移5 个基点(BasePoint)或下降5 个基点(Base Point);最后,系统利用设定的情景,计算资产或负债在该情景发生时的贴现值NPV(Net Present Value)。系统专门设计了一个 NPVCalculator 类,来计算NPV。要计算资金或负责的NPV,最重要的就是要确定贴现因子(Discount Factor),计算Discount Factor 的公式如下:
Df =1/(1+ Rate×Days) / DIY (4-2)
其中 Df 代表贴现因子,Rate 代表市场利率,Days 代表估值日期到当前的天数,DIY
代表一年的天数,一般为365 或360。
(2)VaR 的计算
目前系统支持“方差-协方差”方式计算VaR 值
“方差—协方差”法是运用历史数据,计算资产组合的 VaR 值。其基本思路为[21]:
首先,通过历史数据计算出资产组合的收益的方差、标准差、协方差;
第二,将资产组合收益模拟为正态分布形式,可以计算得出反映分布偏离均值程度的临界值;
第三,建立各个数值与风险损失的关系模型,推导 VaR 值。
系统设计了一个 VaRCalculator 的类,用于计算VaR 值。计算公式为:
VaR =ω *α *σ Δt
其中ω 为持有期初资产的价值,α 为置信水平,Δt为持有期,σ 为协方差,σ 可用以下公式计算
3.6对外接口
一般来说,企业资金管理系统对外接口主要包括以下4 个部分:银企直连系统接口,ERP 应收/应付(AP/AR)数据接口,市场数据接口,以及预算数据接口。但是为了应对未来可能与其他企业信息系统接口的需求,所以系统的接口必须非常的灵活。本系统中对外接口的核心是数据传输引擎(Data Transfer Engine),其作用主要有两点:
(1) 将系统内的一些基础数据(例如:银行帐号信息)和支付数据导出系统,并形成平面文件(例如:XML,CSV)。
(2) 将其他系统产生的平面文件所包含的信息,导入系统,供相关模块使用。
数据传输引擎的结构
(1) 其中Data Definition 被称为数据定义器,该数据定义器有两个作用:
在数据传输引擎执行导出任务时,确定系统中哪些数据可以被导出;
在数据传输引擎执行导入任务时,确定哪些外部数据可以被导入。
(2) Data Mapping 被称作数据映射器,其也有两个作用:
在数据传输引擎执行导出任务时,确定导出文件的格式
在数据传输引擎执行导入任务时,确定导入的数据与系统的内部数据的对应关系。
(3) Data Transfer 被称作数据传输器,其作用是执行已经被数据定义器定义过,并由数据映射器作过映射的数据传输任务。
4系统实现
4.1系统实现
(1)实现环境
本系统的开发的操作系统主要采用 Windows Server 2003 R2 Standard Edition &
Enterprise Edition。集成开发环境采用Visual Studio .Net 2005 Sp1,源代码版本控制采用Visual SourceSafe 6.0d,数据库采用SQL Server 2000SP4 和Oracle 10.2.0.3,开发语言C#.NET 和ASP.NET,报表工具为Crystal Report XI。
(2)功能实现
本章节将通过外汇交易管理为例,介绍系统的功能实现。
首先,外汇远期交易的录入。图 5-1 显示了系统外汇交易的录入界面。
图 5- 1 外汇远期交易录入界面
从图5-1粗体字为必填项。填好所有的必填项,交易就可以保存了。保存交易时,系统会根据交易金额和所选风险敞口,计算交易是否超限,如果交易超限,系统会提示用户。如没有超限,系统会正常保存交易。
交易保存后系统会自动生成交易单(Deal Ticket),如图5-2 所示
图 5- 2 外汇远期交易单
交易被保存以后,交易就进入审批流程,图5-3 显示了交易审批的主界面。
图 5- 3 交易审核授权主界面
从图5-3 中红色椭圆标注的地方可以看出交易目前只需要授权(Authorize),而不需要审核(Check)。
待交易被审批通过后,用户就可以在系统内管理交易的状态和交易的头寸信息了,
图5-4 显示了系统处理外汇远期交易管理的主界面。从图中标注红色椭圆的地方可以看出,目前该交易可以进行的操作为提前交割(Pre-Deliver),展期(Roll Forward),交割 (Deliver)和查看交易历史明细和产生的现金流(History)。
图 5- 4 外汇交易状态管理
图5-5 显示了交易的明细和产生的现金流。
图 5- 5 外汇远期交易明细
5系统测试
5.1测试的目的与目标
在此系统进行初步实现之后,开始进行对系统进行测试,找出系统中存在的Bug,通过测试,用提交的Bug报告来为以后软件的改进提供标准和参考,能够在以后的系统改进中找到依据。
测试后的软件各模块基本功能可以顺利进行,尽可能的提高软件的健壮性。
5.2测试方法
从是否关心软件内部结构和具体实现的角度划分:黑盒测试和白盒测试;
從是否执行程序的角度:静态测试和动态测试;
从软件开发的过程按阶段划分有:单元测试、集成测试、确认测试、系统测试、
验收测试、回归测试、Alpha测试、Beta测试,单元测试又称模块测试,是针对软件设计的最小单位 ─ 程序模块(这里所说的程序模块在Java中一个模块就是一个方法)。
5.3测试结论
把开始的代码写得越好,它出现的错误也就越少,你也就越能相信所做过的测试是彻底的。系统化测试以一种有序方式设法探测潜在的麻烦位置。同样,毛病最可能出现在边界,这可以通过手工的或者程序的方式检查。自动进行测试是最理想的,用得越多越好,因为机器不会犯错误、不会疲劳、不会用臆想某此实际无法工作的东西能行来欺骗自己。回归测试检查一个程序是否能产生与它们过去相同的输出。在做了小改变之后就测试是一种好技术, 能帮助我们将出现问题的范围局部化,因为新问题一般就出现在新代码里面。
测试和排错常常被说成是一个阶段,实际上它们根本不是同一件事。简单地说,排错是在你已经知道程序有问题时要做的事情。而测试则是在你在认为程序能工作的情况下,排错是在你已经知道程序有问题时要做的事情。而测试则是在你在认为程序能工作的情况下,为设法打败它而进行的一整套确定的系统化的试验。
Edsger Dijkstra有一个非常有名的说法:测试能够说明程序中有错误,但却不能说明其中没有错误。他的希望是,程序可以通过某种构造过程正确地做出来,这样就不再会有错误了,因此测试也就不必要了。这确实是个美好生活的目标,但是,对今天的实际程序而言,这仍然还只是一个理想。所以应该集中精力讨论如何测试,如何才能够更快地发现程序错误,如何才可以使得工作更有成效、效率更高。
6结束语
本文首先介绍了系统的背景与意义,对于企业资金管理业务进行了细化和设计,接下来又简单分析了这个系统的实现方式与数据库设计。北京尚诚致远科技有限公司的资金管理监控系统是本人应用所学计算机理论知识的一次成功实战。深切理解了面向对象的变成思路与MVC的设计模式。更认识到计算机对人们生活的改变无处不在,对于传統行业的转型至关重要。传统行业更加高效的运营与管理离不开企业的信息化建设,同时也希望我国各行各业的信息化建设也越来越完善。
参考文献
[1]种新文.面向对象的管理信息系统分析与设计[J].科技信息,2007,02:23-25
[2]孙鑫.Struts2深入详解[M].电子工业出版社,2008
[3]萨师煊,王珊.数据库系统概论[M].北京:高等教育出版社,2002
[4]邵维忠,杨芙清.面向对象的系统分析[M].北京:清华大学出版社,2003
[5] Ray Harris. Murach’s JavaScript and DOM Scripting,2009.9
[6] Gordon S. Linoff, Michael J. Berry. Data Mining Techniques: For Marketing, Sales, and Customer Relationship Management,2011.4
[7] Jiawei Han, Micheline Kamber, Jian Pei. Data Mining: Concepts and Techniques, Third Edition,2011.7
[8] 张晓东.Java 数据库高级教程[M].北京:清华大学出版社,2002.
[9] 姜芳艽.DBMS 与 DSMS 的比较研究[J].微计算机信息,2011,23(2):158-160.
[10] Couch J 著.马琳译.JavaEE 宝典[M].北京:电子工业出版社,2012.
[11]魏从刚,何卫平,王建利等.基于 JavaEE 的分布式项目管理系统应用研究[J].制造业自动化,2010,26(11):62—65.
[12]安淑名.加强流动资金管理的对策[J].发展,2006,11(2):23-25.
[13]林祝春.银企互联模式探讨[J].华南金融电脑,2006,9(4):34-37.
[14]姬爱华.浅谈对银行承兑汇票的管理[J].煤碳经济研究,2006,5(3):18-19.
[15]朱小华,马筱融.谈谈流动资金管理电脑化问题[J].上海金融,2006,8(6):24-25.
[16]王儒.论强化公司流动资金管理[J].经济与管理研究,2006,24(3):56-58.
[17]桑楠.嵌入式系统原理及应用开发技术[M].北京:北京航空航天大学出版社,2002.
[18]贺贵明,定清.管理系统的面向对象模型设计[J].计算机研究与发展, 1994, 31 (09): 61-65.
[19]谢子松.基于 UML 的工作流建模的研究与应用[J].计算机系统应用,2005,1(2):57-58.
[20]林祝春.银企互联模式探讨[J].华南金融电脑,2006,9(3):45-47.
[21]Emit R Powell SG Manufacturer incentives to improve retail service level[J]. European Journal of Operational Research,1998,104:437-450.
[22]程刚.公司集团信息系统的建设[J].中国信息导报,1998,7(3):13-16.
[23]Thomas Novak, Donna H off man, Adam Detached ,The Influence of Goal—Directed and Experiential Activities on Online Flow Experiences[J], Journal of Consumer Psychology,2003.6
[24]程刚. 论公司集团信息系统的建设[J].决策借鉴,2007,16(3):40-42.
[25]荣敦河.资金管理系统研究生论文.大连理工研究生论文,200868
[26]刘星星.基于 B/S 模式的学生信息管理系统[J].软件导刊,2006.