存档

‘WORK’ 分类的存档

轻量级统一会计系统

2008年9月15日 robertbao 没有评论

和几个同事(其中一位做会计方面的工作很长时间,有很丰富的经验)对原有会计系统进行了一番改造,可以说是彻底的重写,用了一些新的思想在里面。最终这个系统由于种种原因没有上线采用,而只是束之高阁,所以我在这里才能够把它公开,抛砖引玉,供大家研究、思考。

[功能特点]

1、功能集中

本系统只专注于会计记账模块,其外围功能及设计皆围绕会计记账。

其目的是为了保证会计记账准确、配置方便、有较强扩展性。

在保证会计记账准确的前提下,额外的或者项目自身特殊的会计核算功能以外围扩展的方式补充进记账模块。

2、功能齐全

目前的会计系统的功能主要有如下几块:

基础配置类
代码配置,科目配置,分录配置(含手工事项配置),交易-分录设置

会计交易类
记账流水查询,汇总凭证查询,分户余额查询、手工事项登记,通用记账

批量处理类
分录拆分,余额汇总,总分校验,凭证汇总

应用API
c接口,java接口

报表统计类

3、易于整合扩展

记账模块功能集中,所需功能基本在本模块内即可实现,与其他模块松耦合;本模块可提供java版本的API和c版本API,与其他系统较易整合。

如果将后台批量功能也由java实现,则在部分项目中无需c环境即可轻松实现会计记账功能。

模块中的很多配置采用xml格式存储,可以通过增加xml标签和增加标签属性来满足扩展的需要。

4、配置为主

在会计记账模块设计之初的一个原则就是尽量采用配置的方法实现部分功能,尤其是分录的配置。

目前1.0的版本已经实现了会计分录的完全配置化实现,可以在线增改科目、更改会计分录、更改交易码对应分录码等。

5、多币种支持

由于本模块在设计上的考虑,对于币种可以先天支持,对于有外币要求或虚拟币种要求的系统能有很好的支持。

6、轻量级

记账模块的全部功能通过10张数据表实现;

底层记账API只提供一个函数;

业务层API所需函数较少;

配置功能和会计交易在java控制台上实现;

用了一个免费第三方xml解析库支持(c环境下需要,java环境不需要额外类库);

适合中小型系统(目前在2CPU,4G内存的UNIX下,速度在100笔/秒左右);

[功能设计]

1、基础信息设置

此类功能主要是设置会计模块相关的基础信息,包括:

代码设置:会计配置中用的一些代码,比如业务属性、金额属性、币种等。

业务要素集设置:每个交易可以指定携带的不同业务要素,从而增加核算和统计维度。

科目维护:维护会计科目,增删改。

account_01.png

account_02.png

2、分录设置及交易-分录匹配设置

此配置功能是此会计模块的核心配置功能。主要包括:

分录设置
设置分录借贷方科目及借贷方科目可携带的业务要素,每条分录的识别码称为事件码。分录设置的时候,可以指明该分录是用于联机交易还是手工事项。

交易码-事件码设置
将系统中交易码与对应的会计事件码进行匹配。

account_03.png

3、会计交易

此类功能主要是为了满足会计人员的日常一些管理工作,主要包括会计流水查询,汇总凭证查询,余额查询,手工事项,通用记账。

其中余额查询可以查询科目余额不同的分户余额;通用记账是为了满足特殊情况的调帐进行使用的,可以有人工随意选择借贷方科目。

account_04.png

4、批量处理

对于批量需要处理的会计功能,主要有如下几个:

1.分录拆分:其功能是为了将分录中携带的业务要素拆分出来,为下一步的明细核算提供数据基础。
2.汇总凭证:将相同事件码的记录进行汇总,从而对于财务人员来讲,每天看到的凭证很少,只有出现帐务问题的时候才会去查会计流水;至于凭证汇总的粒度是可调的。
3.总分核对
4.业会核对
5.科目汇总
6…..

5、报表统计

会计中的报表统计较少,比较关键的是资产负债表、科目余额表等。

另外,本系统中的会计数据含有大量的业务要素,可以为一些统计提供另外一个角度的数据,在后续”综合应用”里再详细说明。

[技术设计及实现]

1、设计理念

“会计是一项服务性的活动。它的职能是提供有关经济个体的数量信息,主要是财务性质方面的。这些信息,在企图作出经济决策时肯定是有用的。”
–美国注册会计师协会

本系统设计的目的是为了准确、详细、全面的处理和揭示各种交易中的财务性质。

对于财务性质的描述,在本系统中称之为”要素”。

本系统中的要素分为两类:

业务要素

指的是能够体现和区分不同交易业务背景的东西,这些东西在具体表现中应该是交易的一些属性,明的或是暗的,那么当这些属性在会计记账的时候,跟随着会计科目进行会计系统的时候,那么这些交易属性就变成的财务属性。

它可以是任何东西或其组合:机构、往来机构、客户、部门、人员、产品、业务种类、币种、供应商、合作机构、银行、账户、卡种、国家、地区、分销商、货物代码、卡号、条形码、汇票号、支票号、自定义要素等等。

金额要素

金额要素较好理解,在一个交易中会含有不同的业务要素,同时交易的金额也同样会根据用途的不同也会被拆分开。一般来讲,通过交易金额以及部分业务要素,我们直接或者间接可以得到如下的金额要素:交易金额、业务主要收入、业务附属收入、应付金额、应收金额、应分利润、应付成本等等。

2、功能逻辑

account_05.png

添加业务要素和金额要素代码:

account_06.png

必须设置代码形式。(长度限制在12个字符以内)

比如业务要素
项目 TxnPrj
往来项目 CurtPrj
产品 ProdCd
往来产品 CurtProd
客户 TxnCust
往来客户 CurtCust
渠道 TxnChnl
帐号 AcctId
参考号 RefId

比如金额要素
交易金额 ATSAmt
业务主收入 TxnMReve
业务副收入 TxnSReve
交易成本 TxnExps
应付金额 ATSPaye
应分金额 ATSDivs
备用金额1 ATSFAmt
备用金额2 ATSSAmt

3、数据库设计

account_14.png account_15.png account_16.png account_17.png

[系统整合示例]

在本示例中,将按照在实施会计记账过程中的流程进行说明每一步骤中所需需要承担的工作。
为简化过程,我挑选商户汇款业务和支付网关业务作为讲解对象。

整合步骤

1、分析业务流程和资金流程,确定客户会计核算要求

商户汇款业务流程

account_07.png

商户汇款资金流程

account_08.png

流程中涉及的成本、收入,债权、债务

account_09.png

支付网关业务流程

account_10.png

支付网关资金流程

account_11.png

流程中涉及的成本、收入,债权、债务

account_12.png

客户针对会计系统的核算要求

明细核算应收应付款
明细核算各个银行存款及现金流
明细核算收入和成本
自动生成会计汇总凭证
将汇总凭证提供公司财务,满足财务并表需求

2、研究确认会计分录及交易流程关联关系

具体分析讨论需要客户积极的全程参与
需要客户认可
考虑全面,替客户着想
要经过多笔评审
涉及业务流程变动的,要协调业务部门

3、整理会计科目

需要客户认可科目名称
以客户会计部门为主
会计科目一旦确定,上线后不得随意进行修改

4、编制会计分录事件及交易关联表

仔细分析交易过程,区分单个交易中的辅助识别码
认真测试,必须将涉及的分录在测试案例中全部体现

5、确定业务-会计接口方案

会计接口的执行方案是实施会计记账功能的关键。
不要拘泥一种形式,需要根据项目情况灵活考虑。
在考虑接口方案的时候,有几个原则:
业务交易程序改变最小
与业务逻辑耦合最小
业务开发人员逻辑参与最少


account_13.png

此种会计接口实现方案的特点:

对原有系统的改动较小,只是扩展了交易信息表的属性
原有业务交易的程序逻辑不需要做任何改动,会计记账对业务交易是透明的,避免业务交易开发人员由于对会计不熟悉而造成记账错误。
会计记账根源统一,便于会计记账问题查找溯源。

6、编码和会计数据配置

其后进行编码和会计数据的配置

[综合应用举例]

本系统虽然较为轻量,但由于在记账凭证中可以携带大量的业务要素,因此通过对现有模块中的数据进行”挖掘”和部分扩展,可以为部分非会计的功能提供帮助。
在以下的内容中,简单的将这类的数据应用展现出来。只是一个抛砖引玉的作用,希望大家能够尽量的去扩展这部分的应用,从而将会计记账模块的功能完善的更彻底充分。

辅助业务统计

在记账流水表中,有交易流水,根据交易流水和会计事件码,我们可以得到该笔交易的做了何种交易逻辑。
根据这种方式,我们可以通过记账流水完成部分业务统计。
例如:需要统计银行退汇和重汇的数据,但是银行退汇的数据来源于多个交易,由于设计初并未将该部分数据做重点考虑,导致系统在该类统计数据时存在困难。
在记账流水中,通过统计几种事件码的数据,就可以获得此类数据。

清算处理

在记账流水中,如果将交易机构、交易对象,甚至是交易对象下的子对象都作为业务要素携带。
在根据业务要素分拆记账凭证后,我们就可以很容易的获得各个层次的对象在各个科目上的发生额。
以这个数据为基础,可以较为容易的提供清算报表使用。
而且由于这个清算是以会计为基础的,在保证会计记账完全正确的前提下,不会发生业会不符的问题。

财务指标统计(利润贡献率等)

如果携带的业务要素中有渠道代码、部门代码、操作员代码、合作机构代码、分支机构代码,那么根据业务要素进行统计的时候,我们很容易得到任何一个层次对象的利润贡献率、成本消耗,成本费用率, 净资产收益率等等。
在比如根据每天的发生额,在进行一些序列分析的时候,根据业务要素统计的粗粒度,可以统计各个对象的交易指标分析数据。
而且保证是业会一致的。

多币种游戏

[待完善功能]

本系统中缺少收入分配的功能,虽然收入分配可以作为会计外挂功能,但如果集成了收入分配,将更加完善。
本系统暂未提供总分核对的功能,因为目前的设计中已经将分户的数据从同一个数据源汇集的,只要程序无bug,总分在先天上是一致的。
本系统暂未开发业会核对的功能,如果后续需要完善,应该将业会核对以规则的形式在系统中实现。
在业务核算上,希望能够将核算规则通过配置的方式实现,目前在本版本中暂未实现。

[FAQ]

Q:为什么说本系统先天是支持多币种的?
A:因为币种其实就是交易附带而来的一个业务要素而已。如果有需要,甚至一个交易可以附带好几个币种进行表示都可以,这并不会增加任何额外的会计记账功能。

Q:为何要用字母设定元素?
A:原因是因为在分录存储数据时是采用xml格式的,所以最好采用较易理解的名称,另外,这些设定是比较底层的功能,这些代码一旦设定,在后台的程序代码处理逻辑中是直接coding的,所以一旦设置完成,就不能随意修改。

Q:为什么要采用xml?
A:xml格式作为载体,其信息变现丰富;格式较为灵活,扩展性好;解析方式较为成熟,比如在java中不需要额外类库就能实现xml的解析使用,在一些配置功能中能够满足复杂的应用要求和扩展要求,而c环境中xml解析库libxml2也是比较成熟的。
对于xml的解析效率低和数据传输量较大是一个缺点,如果此要求很高,可以考虑如何在会计模块中用Google的protocol buffers替换xml。它的介绍可以参考如下网页:
http://www.yeeyan.com/articles/view/sevenever/11040

Q:xml格式数据存放在什么地方?
A:目前xml数据全部存放在数据库字段中,字段长度是varchar2(2048)。排除xml标签,最多可以容纳大概有150个左右的业务要素和标签,可以满足大部分业务的需要。存储在数据库中也是为了方便管理,暂不引入任何外部配置或数据存储文件。

Q:为什么要支持设置多个要素集?
A:在一个项目或系统中,一般来讲业务要素和金额要素都是有限的,完全可以设置一个大的全集,从这个角度来讲,没有必要设置多个集合,甚至一个配置文件就可以搞定了,但在设计时,考虑到这种业务场景:如果是一个会计记账核心平台,他支持的交易的业务背景很多,每个交易携带的业务要素也有可能差别很大,在这种情况下,如果完全是一个大的全集的形式,在管理和理解上会增加困难,此时最好是不同业务背景不同的要素集合。另外,在及其复杂的应用下,将要素集分开管理,也可以在要素集上扩展校验功能,比如,要求某类交易必须携带某种要素的值;或者某个要素的值必须是某个数据序列中,否则报错等等,通过在xml的里增加属性,比较容易达成这种校验。

Q:产品码有用吗?
A:一般来讲,产品码在很多地方是没有设计的,其实质意义指的是一个企业中推出的不同应用(服务)。有可能一个系统提供好几种产品,也有可能一个产品是由好几个系统协助完成的。
只有在多种产品要求不同的记账规则和手段的时候,用产品码进行区分是比较清晰的。


#更新记录

日期 版本 说明
2008-09-15 0.1 初稿
2008-09-16 0.2 增加待完善功能、FAQ
分类: WORK 标签: , ,

一个小型工作流系统介绍

2008年9月3日 robertbao 没有评论

老大临时通知明天做一个设备报修平台工作流系统的交流,本来觉得没意思,不过老大既然安排下来了,面子还是要给的。抽了一个小时从文档里翻出点材料,又顺手画了几张图,贴成几张PPT,就这么凑合凑合用吧。

workflow_01.png

workflow_02.png

workflow_03.png

workflow_04.png

workflow_05.png

workflow_06.png

workflow_07.png

workflow_08.png

workflow_09.png

workflow_10.png

workflow_11.png

workflow_12.png

workflow_13.png

系统比较小,功能简单,不过却刚刚好发挥出工作流的优势。系统基本功能模块如下:

workflow_00.png

分类: WORK 标签: ,

项目组餐饮结算系统

2008年7月5日 robertbao 没有评论

经常跟项目组同事一起吃饭,时间长了,每次AA很麻烦,结帐的人还要给别人找零什么的,就用业余时间自己写了个项目组餐饮结算系统,方便具有相对固定成员的项目组使用,可以定期结算(期限可参数设置)或临时结算(随时发起),解决大家每次吃饭后都要算帐的问题。

daisy_01.png

daisy_09.png

[功能列表]

daisy_00.png

[外页功能]

daisy_02.png

daisy_03.png

daisy_04.png

daisy_05.png

daisy_06.png

daisy_07.png

daisy_08.png

[内页功能]

daisy_10.png

daisy_11.png

daisy_12.png

daisy_13.png

daisy_14.png

daisy_15.png

daisy_16.png

daisy_17.png

daisy_18.png


daisy_19.png


#更新记录

日期 版本 说明
2008-05-07 0.1 初稿
2008-05-10 0.2 增加功能列表、版本更新记录
分类: WORK 标签: ,

金融法律笔记-07:票据法

2008年6月15日 robertbao 没有评论

下面是阅读《票据法》摘录的重点内容和做的一些笔记,《票据法》的制定和实施,不仅在于它能有效地规范票据行为,保护票据当事人的合法权益,促进票据的使用和流通,更重要地还在于它能极大地提高公民、法人乃至整个社会的信用观念和法律意识,促进商业信用、银行信用的形成和发展,加速资金流通,推动市场经济发展。

1、本法所称票据,是指狭义票据,即汇票、本票和支票;

2、票据权利,是指持票人向票据债务人请求支付票据金额的权利,包括付款请求权和追索权。票据责任,是指票据债务人向持票人支付票据金额的义务;

3、票据金额以中文大写和数码同时记载,二者必须一致,二者不一致的,票据无效;

4、票据的取得,必须给付对价,即应当给付票据双方当事人认可的相对应的代价;

5、票据权利的一些期限规定;

6、汇票是出票人签发的,委托付款人在见票时或者在指定日期无条件支付确定的金额给收款人或者持票人的票据;

7、票据凭证不能满足背书人记载事项的需要,可以加附粘单,粘附于票据凭证上;

8、以背书转让的汇票,背书应当连续。持票人以背书的连续,证明其汇票权利;非经背书转让,而以其他合法方式取得汇票的,依法举证,证明其汇票权利;

9、将汇票金额的一部分转让的背书或者将汇票金额分别转让给二人以上的背书无效;

10、提示承兑是指持票人向付款人出示汇票,并要求付款人承诺付款的行为;

11、付款人承兑汇票,不得附有条件;承兑附有条件的,视为拒绝承兑;

12、持票人获得付款的,应当在汇票上签收,并将汇票交给付款人。持票人委托银行收款的,受委托的银行将代收的汇票金额转账收入持票人账户,视同签收;

13、本票是出票人签发的,承诺自己在见票时无条件支付确定的金额给收款人或者持票人的票据;

14、本票自出票日起,付款期限最长不得超过二个月;

15、支票是出票人签发的,委托办理支票存款业务的银行或者其他金融机构在见票时无条件支付确定的金额给收款人或者持票人的票据;

16、开立支票存款账户,申请人应当预留其本名的签名式样和印鉴;

17、出票人签发的支票金额超过其付款时在付款人处实有的存款金额的,为空头支票。禁止签发空头支票;

18、按月计算期限的,按到期月的对日计算;无对日的,月末日为到期日。

分类: WORK 标签: ,

金融法律笔记-06:公司法

2008年6月13日 robertbao 没有评论

下面是阅读《公司法》摘录的重点内容和做的一些笔记,新《公司法》对原有公司法律制度作了较大的调整、补充和修改,对相关制度进行了完善和创新。尽量做到适应现实生活的客观需要,对培育成熟完善的市场主体,规范和促进公司发展,保护公司、股东、债权人以及职工等合法权益,提高上市公司质量,推动资本市场稳定健康发展等会发挥重要的作用。

1、有限责任公司的股东以其认缴的出资额为限对公司承担责任;股份有限公司的股东以其认购的股份为限对公司承担责任;

2、设立公司,应当依法向公司登记机关申请设立登记;

3、公众可以向公司登记机关申请查询公司登记事项,公司登记机关应当提供查询服务;

4、公司营业执照签发日期为公司成立日期;

5、公司以其主要办事机构所在地为住所;

6、公司的经营范围中属于法律、行政法规规定须经批准的项目,应当依法经过批准;

7、公司可以设立分公司,分公司不具有法人资格,其民事责任由公司承担;公司可以设立子公司,子公司具有法人资格,依法独立承担民事责任;

8、公司必须保护职工的合法权益,依法与职工签订劳动合同,参加社会保险,加强劳动保护,实现安全生产;

9、公司中工会、职工代表大会、党组织的相关规定;

10、有限责任公司的注册资本为在公司登记机关登记的全体股东认缴的出资额。有限责任公司注册资本的最低限额为人民币三万元;

11、股东缴纳出资后,必须经依法设立的验资机构验资并出具证明;

12、股东有权查阅、复制公司章程、股东会会议记录、董事会会议决议、监事会会议决议和财务会计报告;

13、公司成立后,股东不得抽逃出资;

14、股东会会议分为定期会议和临时会议;

15、董事任期由公司章程规定,但每届任期不得超过三年。董事任期届满,连选可以连任;

16、董事会决议的表决,实行一人一票;

17、董事、高级管理人员不得兼任监事;

18、监事的任期每届为三年。监事任期届满,连选可以连任;

19、一人有限责任公司的注册资本最低限额为人民币十万元。股东应当一次足额缴纳公司章程规定的出资额;

20、一人有限责任公司的股东不能证明公司财产独立于股东自己的财产的,应当对公司债务承担连带责任;

21、国有独资公司不设股东会,由国有资产监督管理机构行使股东会职权;

22、有限责任公司的股东之间可以相互转让其全部或者部分股权;

23、自然人股东死亡后,其合法继承人可以继承股东资格;但是,公司章程另有规定的除外,公司章程也可以规定由其他股东按出资比例行使优先购买权等;

24、股份有限公司注册资本的最低限额为人民币五百万元;

25、发起人向社会公开募集股份,必须公告招股说明书,并制作认股书;

26、发起人向社会公开募集股份,应当由依法设立的证券公司承销,签订承销协议,并应当同银行签订代收股款协议;

27、发起人应当自股款缴足之日起三十日内主持召开公司创立大会;

28、股东有权查阅公司章程、股东名册、公司债券存根、股东大会会议记录、董事会会议决议、监事会会议决议、财务会计报告,对公司的经营提出建议或者质询;

29、股东出席股东大会会议,所持每一股份有一表决权;

30、上市公司在一年内购买、出售重大资产或者担保金额超过公司资产总额百分之三十的,应当由股东大会作出决议,并经出席会议的股东所持表决权的三分之二以上通过;

31、上市公司设董事会秘书,负责公司股东大会和董事会会议的筹备、文件保管以及公司股东资料的管理,办理信息披露事务等事宜;

32、股票发行价格可以按票面金额,也可以超过票面金额,但不得低于票面金额;

33、公司经国务院证券监督管理机构核准公开发行新股时,必须公告新股招股说明书和财务会计报告,并制作认股书;

34、发起人持有的本公司股份,自公司成立之日起一年内不得转让。公司公开发行股份前已发行的股份,自公司股票在证券交易所上市交易之日起一年内不得转让;

35、上市公司必须在每会计年度内半年公布一次财务会计报告;

36、公司债券可以转让,转让价格由转让人与受让人约定;

37、发行可转换为股票的公司债券的,公司应当按照其转换办法向债券持有人换发股票,但债券持有人对转换股票或者不转换股票有选择权;

38、公司分配当年税后利润时,应当提取利润的百分之十列入公司法定公积金。公司法定公积金累计额为公司注册资本的百分之五十以上的,可以不再提取;

39、公司除法定的会计账簿外,不得另立会计账簿;对公司资产,不得以任何个人名义开立账户存储;

40、清算组在公司破产清算时行使的职权;

41、公司财产在分别支付清算费用、职工的工资、社会保险费用和法定补偿金,缴纳所欠税款,清偿公司债务后的剩余财产,有限责任公司按照股东的出资比例分配,股份有限公司按照股东持有的股份比例分配;

42、清算组在清理公司财产、编制资产负债表和财产清单后,发现公司财产不足清偿债务的,应当依法向人民法院申请宣告破产;

43、外国公司的分支机构应当在其名称中标明该外国公司的国籍及责任形式;

44、外国公司在中国境内设立的分支机构不具有中国法人资格,外国公司对其分支机构在中国境内进行经营活动承担民事责任。

分类: WORK 标签: ,