65.9K
CodeProject 正在变化。 阅读更多。
Home

财务会计应用程序的数据库 IV:通用文档和固定资产

starIconstarIconstarIconstarIconstarIcon

5.00/5 (10投票s)

2019年9月16日

CPOL

80分钟阅读

viewsIcon

20919

downloadIcon

1081

设计一个简单而功能齐全的财务会计应用程序数据库。

引言

在之前的文章中,我们讨论并实现了核心会计基础架构设计:总账、会计科目表、(源)凭证、财务报表结构、各种配置文件等。在核心会计基础架构就绪后,我们可以继续进行个别会计业务。

如果您希望针对特定司法管辖区实施个别会计业务,目前推荐的方法是逐一阅读州会计管理部门的方法论/建议,并尝试将个别业务抽象为通用业务。(当然,在此之前,强烈建议阅读书籍:“会计入门”、“初学者会计”和“高级会计”:)

切勿尝试在数据库或业务逻辑核心级别实现个别业务。您将陷入一个脆弱的实体/表/对象网络,几乎不可能维护。正如您将从本文开始看到的,财务会计非常适合通用业务,并允许通过通用的“状态增量”方法实现数十种业务。财务会计也非常适合复合业务。通常,您可以由一组“琐碎的”(通用的)业务构成一个复杂的实体(凭证)。因此,财务会计建模本质上意味着为一系列简单的(原子)会计业务找到一个公分母。一旦完成,您就可以继续处理复杂的会计业务,并检查它们是否能有效地表示为一组通用的业务。您不应期望一次性完成。需要多次迭代才能使所有方面都达成一致。在我理解财务会计的过程中,这篇文章本身已经被重写了好几次。

个别会计业务的实现顺序并不重要,除非是发票,它们几乎可以处理任何其他会计实体(例如,固定资产、存货等)。我决定遵循资产负债表的结构,而资产负债表中的第一个实体是资产。

然而,在我们继续讨论资产之前,我们需要讨论一些将在包括资产在内的许多其他会计业务中“使用”的通用会计业务。

期初余额结转

会计师很少会从一家公司的最开始开始会计流程。并非不可能,但很少发生。在典型的用例中,会计师会在一家已建立并运行的公司中开始工作。如果该公司之前使用了不同的会计软件,或者公司决定放弃一些旧的会计软件并转向我们的软件,那么就不可能迁移所有历史会计数据。根本没有通用的财务数据标准可供依赖。在这种常见情况下,“初始化”会计数据库的唯一方法是仅迁移分类账账户的余额。期初余额结转意味着您只需添加具有转移时初始值的分类账条目(可能按个人和成本中心分组)。

在我们之前文章中开发的会计基础架构中,这意味着一种特定类型的(源)凭证——**期初余额结转声明**——和一个子(分类账)交易,该交易由会计师手动输入(或者,也许是从 Excel 文件复制/粘贴或导入)。这样,会计应用程序就能在开始时知道正确的余额。

显然,会计数据库中只能有一个这样的凭证。如果它存在,它还将设定所有其他凭证的最小日期,因为期初余额结转只能是数据库中的第一个凭证(按时间顺序)。

这几乎就是全部的实现,但分类账不是唯一需要“初始化”的会计实体。该应用程序还需要知道固定资产、存货、现金、股本等的状况。因此,对于大多数会计实体,应该有一些期初余额结转的实现,例如,一种特定类型的(资产)业务。所有这些特定于实体的实现(在数据库术语中——某些表中的行)将是期初余额结转声明凭证的子项。随着我们逐步开发我们的模式,它将变得非常庞大。因此,业务层中的期初余额结转凭证实现应包含多个“接口”来处理转移的不同方面,例如,一个“接口”允许会计师进行分类账余额转移,一个“接口”允许会计师转移固定资产状态数据等。也就是说,将有多个业务实体代表同一凭证。

结账分录

一项 结账分录 是在会计期末(通常是日历年)进行的日记账分录,用于将临时账户的余额转入永久账户。公司使用结账分录将临时账户(在单个会计期内显示余额的账户)的余额重置为零。通过这样做,公司将这些余额移入资产负债表上的永久账户。这些永久账户显示公司长期的财务状况。

临时账户 是总账中用于累积单个会计期交易的账户。这些账户的余额最终用于在财政年度末构建损益表。**简而言之,这些是收入和费用账户。**

永久账户 是显示公司长期财务状况的账户。资产负债表账户是永久账户。这些账户在多个会计期内携带其余额。**简而言之,这些是资产、股本和负债账户。**

结账分录背后的业务逻辑很简单

  • 当我们获取收入账户的余额时(在特定日期内的所有分录的总和),我们期望得到当前期间的收入(这是信息性的),而不是所有期间的收入(这没有信息性);
  • 期末的财务结果(利润/亏损)转化为股本(留存收益),可用于其他用途,例如增加股本、支付股息等。您不能在账户集合上执行此操作。

结账分录算法如下:(a)将收入和费用账户的余额移至汇总账户;(b)将当前期间的留存收益余额移至上一期间的留存收益余额;(c)将汇总账户的余额移至当前期间的留存收益余额。

该算法可以分解为以下分类账条目

  • 获取结账日期间每个收入和费用账户在分类账中的余额;
  • 为每个收入和费用账户添加一个分类账条目,其金额等于其余额,但具有相反的“符号”,即借方代替贷方,反之亦然;这有效地使余额为零;
  • 向汇总账户(一个专用于结账目的的特殊股本账户)添加一个“平衡”分类账条目;条目的值及其类型(借方/贷方)的计算方式应使整个交易的总借方金额等于总贷方金额;
  • 获取当前留存收益账户(一个存储当前期间留存收益的特殊股本账户)的余额;
  • 向当前留存收益账户添加一个分类账条目,其值与当前余额相同,但具有相反的“符号”,即借方代替贷方,反之亦然;这有效地使当前留存收益账户的余额为零;
  • 向上一期间留存收益账户(一个存储上一期间留存收益的特殊股本账户)添加一个分类账条目,其值和“符号”与当前留存收益账户的当前余额相同;这有效地将当前留存收益账户的余额移至上一期间留存收益账户;
  • 向汇总账户添加一个分类账条目,其值与前面提到的“平衡”分类账条目相同,但“符号”相反,即借方代替贷方,反之亦然;这有效地使汇总账户余额为零;
  • 向当前留存收益账户添加一个分类账条目,其值和“符号”与前面提到的“平衡”分类账条目相同;这有效地将汇总账户的余额移至当前留存收益账户。

由于结账交易会移动金额,结账分录应作为一种阻塞操作。即,结账之前的任何财务数据都不能更改。否则,结账日的结果余额将无效。但是,您可以允许更改先前凭证的非财务数据,例如描述、分析,因为这些数据不会使余额失效。由于是否允许此类更改取决于公司,因此可以将其实现为公司的策略字段,即,在我们在上一篇文章中开发的公司的非区域化非版本化配置文件中添加一个 closing_policy 字段。我将为此使用以下应用程序定义的枚举

  • 不允许任何更改
  • 允许修改描述
  • 允许修改描述和分析

结账分录凭证不需要超出我们已实现的数据结构。它只是一个特定类型的(源)凭证,带有一个子交易。

从面向对象编程的角度来看,结账分录是一个只读对象,由一个带有以下参数的命令创建:结账日期、汇总账户、当前留存收益账户和上一期间留存收益账户。这些参数账户是添加到我们上一篇文章中开发的默认公司账户列表中的绝佳选择。

会计说明与杂项

无论在会计应用程序中实现多少功能,总会有或多或少特殊的会计/源凭证,它们不被任何专用功能所覆盖。为了处理此类凭证,每个会计应用程序都必须实现一个通用凭证,它仅包含基本凭证数据,并可以包含表示凭证财务影响的分类账交易。通用凭证的类型通常称为“**杂项**”。

有些情况也对公司有财务影响,但没有真正支持的(源)凭证。例如,由于会计政策变更所需进行的更正,某些错误更正等。在这种情况下,公司应自行签发说明性凭证。在立陶宛法律体系中,此类凭证被称为“**会计说明**”。我在英文资料中没有找到类似的凭证/概念。因此,我认为这是一个特定于司法管辖区的要求。然而,正在开发的应用程序是为立陶宛设计的,并且应实现这种特定的(源)凭证类型。尽管会计说明凭证的数据结构与杂项凭证类型相同,但仍应实现一个不同的类型,因为它在该领域具有特殊含义。从会计师的角度来看,区别在于会计说明可以(并且应该)作为凭证打印(无论是纸质还是电子),而杂项凭证则不能(因为它的含义基本上是“未知凭证”)。

在我们的数据库术语中,这两种凭证具有相同的结构:一个特定类型的(源)凭证,带(或不带)子交易(或多个交易)。因此,在数据库层面无需实现。

源凭证与可附加操作

杂项凭证和会计说明都可能对其他会计实体产生影响。例如,如果会计师进行一些与资产相关的分类账更正,也应反映在相应的资产实体中。这意味着(几乎)所有会计实体都应实现一个通用操作。

从业务层来看,这意味着这些凭证具有无限的结构(可能包含任意集合的子项)。一个直接的解决方法是实现一个可附加操作的概念——允许弱引用。凭证的基本数据由基本实体处理,而每个附加操作由专门的实体处理,后者需要严格的责任划分。基本实体不能更新专门实体的字段,反之亦然。由于财务交易显然归基本实体所有,任何附加的子实体都不能修改它。否则,它会破坏基本实体的业务逻辑。反之亦然。因此,如果特定实体(操作)需要完全控制分类账交易,则应实现专门的(源)凭证类型。

正如您稍后在本文章中将看到的,可附加操作概念适用于大多数(源)凭证类型,而不仅仅是杂项凭证和会计说明。例如,您可以通过银行付款获得一项资产。

资产概览

在财务会计中,资产是企业拥有的任何资源。任何有形或无形的东西,都可以被拥有或控制以产生价值,并且被公司持有以产生正经济价值,就是资产。简单地说,资产代表可以转换为现金的所有权价值(尽管现金本身也被视为资产)。(参见 维基)资产通常按以下方式分类

  • 固定资产(又称长期资产)——难以轻易转换为现金的资产,且不打算直接出售给公司消费者/终端用户。这些是有价值的项目,组织已购买并将在较长时间内使用;固定资产通常包括土地和建筑物、车辆、家具、办公设备、计算机、软件、厂房和机械等。简单地说,长期持有的资产称为固定资产。
  • 流动资产(又称短期资产)——可在当前财政年度或营业周期(以较长者为准)内,通过企业的正常经营活动合理预期可以出售、消耗或耗尽的资产。典型的流动资产包括现金、现金等价物、短期投资(有价证券)、应收票据、股票存货、用品,以及将在一年内支付的预付负债部分(有时称为预付费用)。简单地说,短期持有的资产称为流动资产。

分组的基本标准是特定资产的预期用途,例如,如果一栋建筑旨在用于公司的活动(作为工厂、办公室等),则它是固定资产;如果同一栋建筑旨在出售,则它是流动资产。但是,这种基本分组存在一些特殊情况。如果公司决定出售某些固定资产,该资产应转入流动资产组,但转移应是可逆的。即,如果公司改变了关于出售的决定,该资产应转回固定资产并完全恢复其先前状态。如果一项资产旨在出售,但不在当前会计期间(财政年度,“可预见的未来”),则该资产被归类为固定资产(称为投资资产)。

会计准则根据其性质和特定用途区分了另外三类资产

  • 无形资产:可识别的、非货币性的、没有实物形态的资产,例如品牌、版权、专利、许可证、软件、商业秘密、商誉等;
  • 金融资产:流动性强的有形(很少)或无形资产,其价值源于合同权利或所有权主张,例如现金、股票、债券、共同基金、银行存款等。与土地、财产、商品或其他有形实物资产不同,金融资产不一定具有内在的物理价值,甚至没有物理形态。相反,它们的价值反映了它们交易的市场中的供求因素,以及它们所承担的风险程度;
  • 投资资产:为产生额外收入而获得的或为投机未来价值增长而持有的有形物品。投资资产的例子包括房地产、土地、艺术品等。

这些类别中的每一类都有一些由某些会计准则设定的特定会计规则。然而,这些类别与“普通”固定资产的差异很小。至少在立陶宛会计准则中,这些类别的定义只是固定资产标准的重述,并有少数例外。例外情况是长期银行存款、贷款和应收票据,它们在根本上有所不同,将在未来的文章中实现。因此,为简化起见,我将不把固定资产分成四个独立的实体,而是在固定资产的上下文中为这些资产类别实现特定功能。由于资产的分类是由会计准则设定的并用于验证,因此将此分类包含在通用资产数据中作为应用程序定义的枚举是一个好主意。它也揭示了应用程序的固定资产概念中包含哪些类型的资产

  • 厂房设备(长期有形资产)
  • 投资资产
  • 金融资产(长期贷款、应收票据和银行存款除外)
  • 无形资产

资产交易作用于(不出所料)资产账户,这些账户具有以下特征

  • 它们具有借方余额,即资产价值的增加导致借方分类账条目,并因此导致借方余额增加,反之亦然,这允许将状态值简化为简单的数值——正值表示增加;负值表示减少;
  • 它们是永久账户,即它们的余额不受结账分录的影响,并且始终反映资产的(当前)价值或价值的特定方面(细分)。这允许将一组资产(类型)账户定义为资产状态。

考虑到资产账户的特征,我们可以将资产操作定义为资产状态的变异(增量)。因此,要描述几乎任何类型的资产,您应该

  • 识别影响特定类型资产的所有操作(通过阅读相关的会计准则和建议);
  • 识别所有资产状态要素——**资产状态变量**——由相关操作变异;在大多数情况下,这将是永久账户的余额,但也存在其他类型的状态变量。
  • 识别所有操作数据(字段)——**支持变量**——需要支持每种操作类型,即那些不是状态增量,但需要描述(并构建)特定资产操作的数据字段。

您得到的是一个每列代表一个状态变量的表,该表允许查询任何时期的资产状态。该表还包含支持变量的列。每个资产操作是该状态表中的一行。该表中的每一行都是(源)凭证的子项。

添加一个用于静态资产描述符的表,这些描述符不受操作影响,例如名称、描述、库存号等。添加一个用于分组的表。这就是您完成任何类型资产的基本功能。当然,这并不意味着特定类型的资产不需要额外的/辅助实体。但这些是特定于资产类型的,即没有通用模式。

固定资产业务

购置与购置成本

要被归类为固定资产,一项资产必须:(1)其价值等于或大于公司会计/财务政策定义的固定资产资本化价值(您可能不希望将 USB 内存棒声明为固定资产,即使您使用了几年);(2)使用寿命超过一年;(3)用于业务运营而不是持有待售(投资资产是例外——预计将在无限期内出售,而不是很快)。

固定资产**资本化价值**是公司非区域化版本化配置文件字段的一个好候选(它是一个数值,可能会改变,并且不应追溯应用)。会计准则还允许为不同的资产组设置不同的资本化价值。因此,我们还将在资产组表中需要一个字段。该字段应可为空,以区分实际资本化价值覆盖和基本资本化价值。

当公司购置资产时,会计师会按购置成本(历史成本)记录该资产。当资产通过现金购买时,其购置成本仅是约定的现金价格。该成本是客观的、可验证的,并且是资产购买时公允市场价值的最佳衡量标准。即使资产的市场价值随时间变化,会计师也会在后续期间继续在资产账户中报告购置成本。然而,资产的购置成本不仅是支付给资产本身的價格,还包括使资产投入运行状态所产生的成本。即,在现实生活中,购置并非如此简单。

为说明起见,假设一家公司购买了新设备以替换其已使用五年的设备。公司支付了 150,000 美元的净购买价格、5,000 美元的经纪费、2,000 美元的法律费以及 3,000 美元的运费和在途保险。此外,公司支付了 1,500 美元拆除旧设备,并支付了 2,000 美元安装新设备。公司将按以下方式计算新设备的成本

净购买价

$150,000

经纪费

$5,000

法律费

$2,000

运费和在途保险

 $3,000

安装成本

$2,000

设备总成本

$162,000

显然,设备本身的购置、安装和其他相关成本发生在不同的时间,并由不同的源凭证进行规范

  • 购置(购买)本身可以基于销售合同;
  • 法律费可以基于发票或银行付款(根据法律要求签发);
  • 安装成本可能基于发票(承包商)或工资单(安装设备员工的工资)等。

此外,在某些情况下,与购置成本相关的事件可能持续很长时间。例如,在长期债券的情况下,每年都会根据累计利息的价值(以会计说明凭证的形式进行规范)来增加购置价值。

这为我们带来了两项固定资产业务:资产**购置**(本身)和资产**购置成本**(增加)。

这两项业务都作用于相同的资产状态变量

  • 购置成本账户——分类账中购置成本账户的余额。由于我们正在处理资产,我们处理的是借方余额,即购置成本是分类账中的借方条目。

上面的设备购置业务可以这样表示

描述

操作类型

Δ

购置成本账户

净购买价

购置

$150,000

经纪费

购置成本

$5,000

法律费

购置成本

$2,000

运费和在途保险

购置成本

$3,000

安装成本

购置成本

$2,000

余额:

$162,000

显然,购置和购置成本业务适用于所有资产类型。没有资产可以没有购置价值。

正如已经提到的,每项资产业务背后可能存在各种源凭证。此外,一个源凭证可以影响多个资产,例如,在同一合同中购买建筑物和土地。这给我们带来了以下要求

  • (源)凭证与固定资产购置和购置成本业务之间的关系应为 *0...n*;
  • (源)凭证类型对资产业务的说明很少或根本没有说明,反之亦然;完整的资产购置交易在分类账中由父源凭证(无论是什么)独家定义。购置和购置成本业务仅关心购置成本账户的条目,并且仅关心归属于特定资产的金额,因为同一源凭证可以用于同一分类账账户中的多个资产购置。即,固定资产购置和购置成本业务是可附加的。
  • 固定资产购置和购置成本业务作用于语义上相同的变量,即,具体表继承模型已弃用,我们只能使用单表继承模型或类表继承模型。

资产购置价值用于税务和递延税

从(企业)税务角度来看,固定资产有点像“费用袋”。当公司购置某些固定资产时,它不会发生费用,即您不能将资产的价值从应税收入中扣除。另一方面,资产购置在出售或报废时可能产生费用或收入。公司使用的资产会磨损并贬值,例如,新计算机和旧计算机的价值显然不同。税法承认这些事实并规定了定义

  • 什么是资产的税务购置价值(并非所有成本都可以计入资产的价值);
  • 资产的价值如何分配给费用以计提磨损(折旧)(同样,每年分配的计算方式有或多或少的严格限制)。

财务会计准则还规定了如何评估资产的价值和磨损(折旧)。会计准则规定的规则更加详细,但也更加灵活。因为会计准则的目的是在任何给定时刻提供公司财务状况的精确信息。由于税务规则和会计规则的目的根本不同,因此它们不同也就不足为奇了。经常地,同一资产的价值对于会计目的和税务目的将是不同的。(实际上,损益表和企业所得税申报也是如此)但是,税款是一种负债,因此也应作为会计对象对待,即会计不能完全忽视税款。

在固定资产的情况下,税务影响如下

  • 假设资产的账面价值(为会计目的计算的价值)等于其市场价格,即您可以以账面价值出售资产,并且这将是公平价格。
  • 如果资产的税收价值低于其账面价值并且您出售了资产,那么公司将产生用于税务目的的利润。在会计术语中,这意味着公司有长期税务负债,等于价值差乘以税率。该概念被称为递延税负债
  • 如果资产的税收价值大于其账面价值并且您出售了资产,那么公司将遭受用于税务目的的损失。在这种情况下,它将减少未来的税务负债。在会计术语中,这意味着公司有长期税务负债减少(某种税款“预付款”),等于价值差乘以税率。由于它代表公司的长期经济价值,因此将其计入资产账户。该概念被称为递延税资产

这些与税收相关的副作用应与固定资产业务同步处理。这意味着我们需要跟踪资产的税务价值,即

  • 任何(潜在)影响税务价值的操作都应更新它(按增量);
  • 如果由于操作导致税务价值和账面价值之间的差异发生变化,操作应更新递延税负债账户和/或递延税资产账户的余额。

大多数固定资产业务(潜在地)可以改变税务价值和账面价值之间的差异。因此,它是所有业务的通用功能。此外,递延税分配不影响“父”操作行为(只有一个例外——重估)。即,业务逻辑如下

  • 允许“父”操作执行任何操作;
  • 计算操作前后的税务价值与账面价值之间的差异;如果差异发生变化,则更新递延税账户以反映新的差异。

创建或增加递延税负债的标准分类账条目是(减少时切换借贷方)

借:递延税费用/收入账户

$1,500

 
 

贷:递延税负债账户

 

$1,500

       

创建或增加递延税资产的标准分类账条目是(减少时切换借贷方)

借:递延税资产账户

$1,500

 
 

贷:递延税费用/收入账户

 

$1,500

       

如果递延税总余额为借方,则表示递延税负债账户余额为零,而递延税资产账户余额为等于总余额的借方余额。如果递延税总余额为贷方,则表示递延税负债账户余额等于总余额,而递延税资产账户余额为零。一次只有一个账户可以拥有非零余额。

总而言之,我们需要另外四个资产状态变量来反映递延税

  • 递延税负债账户——分类账中递延税负债账户的(贷方)余额。
  • 递延税资产账户——分类账中递延税资产账户的(借方)余额。
  • 税务价值——法律要求的资产税务价值。
  • 税务价值折旧——法律要求的累计折旧。

操作在计算递延税时所需的**税率**变量有些棘手。显然,您不能为不同的资产使用不同的税率。显然,税率是可以改变的。诱人的结论是,税率属于公司非区域化的版本化配置文件(请参阅上一篇文章了解详情)。然而,如果会计师更改了资产操作使用的版本(税率值),资产操作将不会(也不应)自动更新自身(税率用于计算一个值,该值又导致一个分类账条目)。我们存在矛盾。一方面,我们不应允许会计师手动指定税率。另一方面,税率配置文件更改不应(不能)级联到现有操作。解决方案是将税率同时放在公司配置文件和操作(作为支持变量)中,但在应用程序业务层中,只允许将其更新为公司配置文件中设定的当前值。这仍然可能导致公司配置文件中的税率与特定操作中的税率之间出现差异。然而,可以通过审计程序(手动方法或 cron 作业)轻松识别此类差异。

递延税费用/收入账户与资产购置和购置成本账户无关,因为它们不受父(源)凭证分类账交易的控制。然而,其他操作(例如折旧)则受父(源)凭证分类账交易的控制。这意味着它们需要递延税费用/收入账户的引用才能准备交易。因此,我们需要将该引用添加为支持变量——**递延税费用账户**。(由于大小限制和特殊符号而命名)该账户在大多数情况下将是为此特定目的而设的专用账户。因此,将其添加到我们上一篇文章中开发的默认公司账户列表中是一个好主意。

递延税功能是所有操作的通用功能,即其状态变量和支持变量(潜在地)被不同类型的多个操作使用。因此,它属于抽象/通用表(如果您选择使用类表继承模型)。

每个操作的潜在税务影响将在稍后描述每个操作时讨论。在此期间,我们已经描述了资产购置和购置成本业务。因此,让我们看看它们潜在的递延税影响。

通常,资产购置和购置成本业务没有像图例中那样具体的税务影响。然而,有一个特定用例,它们确实有税务影响。当您将某些研发投资(费用)确认为无形资产时

借:研发资产账户

$10,000

 
 

贷:某些费用账户

 

$7,000

 

贷:某些其他费用账户

 

$3,000

就税务而言,这些费用就是普通费用,即它们会减少应税收入。当您将它们确认为一项资产时,您将它们的价值(相应费用账户中的部分余额)移至资产购置成本账户,即损益表中的收入减少,但在企业所得税申报表中没有减少。这种“转化”的另一面是,税法根本不承认此类资产,因为它是费用,同一个东西不能同时是资产和费用,即其税务价值为零。这导致了税务价值和账面价值之间的差异,该差异等于购置价值。在这种情况下,税务价值小于账面价值,这意味着我们需要登记递延税负债。假设税率为 15%,并使用标准的递延税分类账条目,则上述研发费用“转化”操作可以这样表示

描述

操作类型

Δ

购置成本账户

税务价值

递延税负债账户(贷方)

递延税资产账户

研发费用资本化

购置

$10,000

$0

-$1,500

$0

余额:

$162,000

$0

-$1,500

$0

递延税负债账户是一个负债账户,具有贷方余额。由于我们决定使用正值表示借方余额,因此为了保持一致性,贷方余额应表示为负值。

从职能角度来看,购置和购置成本业务都应能够设置税务价值,而与购置价值无关。然而,由于它实际上很少使用,因此应提供明确指示覆盖相等性的方法(例如,在视觉上——一个复选框)。

我不会在后续的资产状态表中包含递延税负债账户和递延税资产账户变量,因为它们(一般)不适用于我们(有形)设备的例子。您很快就会看到,资产状态表很快就会变得拥挤——所有变量都将无法适应屏幕。

折旧与摊销

“**折旧**”一词用于有形资产,而“**摊销**”一词用于无形资产。否则,这两个概念是一样的。以下我将使用折旧一词,只需记住这也适用于摊销。

折旧是将资产购置成本分配到受益于资产使用的每个会计期间的金额。折旧是分配过程,而不是估值过程。最终,大多数资产会磨损或变得如此不合适或过时以至于被出售或报废;因此,除非资产本身不磨损(例如土地、艺术品、股票等),否则公司必须记录在用资产的折旧。即使资产的市场价值暂时高于其原始成本,它们也会记录折旧,因为最终该资产对当前所有者不再有用。

折旧适用于

  • 除土地外的所有厂房设备;
  • 某些投资资产(例如,适用于出租物业,但不适用于艺术品);
  • 某些无形资产(例如,适用于软件、已购买的固定期限许可证,但不适用于商标)。

金融资产不适用折旧。

折旧仅分配给在用资产。如果特定资产(暂时)不在服务中,则不能为不在服务期间分配折旧(例如,在建筑物进行重建时)。这给我们带来了两项固定资产业务:资产**折旧**和资产**运营开关**。后者很简单:不影响任何特定的状态变量,因为它本身只是切换资产的运营状态。另一方面,在立陶宛法律体系中,将资产置于运行或非运行状态应通过两个特定的(源)凭证来规范:**固定资产运行声明**和**固定资产非运行声明**。我在英文资料中没有找到类似的凭证或概念。我认为这些是特定于司法管辖区的。然而,该应用程序是为立陶宛司法管辖区设计的。因此,我将把运行开关类型分为两种类型——**开启运行**和**关闭运行**——每种类型都有相应的(源)凭证类型。

四种常见的折旧分摊方法(理论上,可以使用任何数学函数,但通常是会计准则)

  • 直线法;
  • 余额递减法;
  • 年数总和法;
  • 活动单位法。

所有方法都使用资产的**残值**(又称废料价值、清算价值)——资产报废/处置、出售或交易时公司预期收回的金额,减去处置成本。(可能为零)资产的购置成本在计算折旧前要减去残值。其目的是不将资产折旧到低于残值。

前三种方法使用资产**以年或月为单位的服务寿命**来分配折旧。例如,如果设备购置成本为 162,000 美元,残值为 6,000 美元,使用寿命为 60 个月(5 年),则使用直线法计算的每月折旧分配值为

(162,000 美元 - 6,000 美元)/ 60 个月 = 2,600 美元

第四种方法不同。它以**自定义单位衡量资产的使用寿命**,例如,汽车的里程数,生产设备的某些生产单位等。这导致需要两个资产使用寿命值——一个以月为单位;另一个——以自定义测量单位为单位。

需要考虑的另一点是是否要存储已分配(计算)折旧的期间。如上所述,折旧仅分配给在用资产。一年内可能存在多个服务期,因此,每次操作可能有多个折旧期。另一方面,您可以忽略不在服务期,只存储总期间。毕竟,分配(计算)期仅在相关的折旧方法中使用。但是,如果您允许会计师指定一个期间(日期范围)来分配(计算)折旧,会计师还应负责这些期间的连续性,即不留有任何空白。这不好,因为任何可能发生的错误都会发生。因此,一种安全的方法是仅指定所需期间的结束日期(“分配于”)。我们已经有了(源)凭证日期字段。领域问题是是否可能要求在分配凭证日期以外的日期分配(计算)折旧。在立陶宛会计实践中,不可能。因此,我不会将“分配于”存储为字段。但是,此设计选择是特定于司法管辖区的。

不存储分配(计算)期间的设计决策并不否定所涉及的计算相对复杂的这一事实。会计师仍然希望了解最终数值以及背后的数学原理。为了满足此要求,可以将分配方法(可能封装为对象)制成(并应制成)自描述的,即逐步以自然语言反映计算过程。结果是计算的文本描述,这正是会计师希望看到的。尽管通常描述会很短(几百个字符),但在某些情况下,它可能会长达数千个字符。(例如,减值、大修、使用寿命变更等)

与资产购置和购置成本(增加)业务不同,折旧业务拥有/控制所有分类账交易,并有一个专门的源凭证——**折旧报告**。折旧凭证的分类账交易如下

借:固定资产折旧费用账户

$2,600

 
 

贷:累计折旧账户 (-)

 

$2,600

       

固定资产折旧费用账户可以是任何费用(支出)账户,例如,如果是用于生产的设备,则可以是某些生产成本账户;如果是公司的办公场所/建筑物,则可以是某些管理费用账户。由于折旧业务拥有(整个)交易,因此成本账户的引用应作为支持字段存储。

累计折旧账户是一种特殊的分类账账户,称为备抵账户,并用(-)符号表示。它具有贷方余额,尽管它用于资产。该账户的想法可以通过可视化资产相关分类账账户层次结构来解释

   

借方

贷方

123 设备

$159,400

 
 

1231 购置成本

$162,000

 
 

1232 累计折旧 (-)

 

$2,600

在层次结构中,设备账户是汇总账户,即不被交易使用,仅是子账户的总和。其余额也称为资产的**账面价值**。购置成本账户是我们用于购置的账户。而累计折旧账户用于存储折旧金额。分类账账户结构背后的想法很明显——允许进行分析。

总而言之,我们需要另外四个资产状态变量来反映折旧

  • 累计折旧账户——分类账中累计折旧账户的(贷方)余额。
  • 使用寿命(月)——以月为单位的预期使用/服务期限。
  • 自定义使用寿命——资产寿命内的预期活动单位。
  • 残值——公司在资产报废/处置、出售或交易时预期收回的金额,减去处置成本。(可能为零)

此外,为了将折旧反映为源凭证,我们需要三个额外的字段,它们是折旧业务特有的

  • 折旧方法——用于分配折旧的折旧方法。可以定义为 ENUM 或应用程序定义的枚举(数据库术语为 TINYINT)。这些方法在过去几百年里没有改变,而且在未来一百年里也没有可能改变的迹象。因此,将它们定义为数据库级别的 ENUM 是相当安全的。但是,为了保持一致性,我更倾向于应用程序定义的枚举方法。
  • 折旧说明——关于折旧价值如何计算的自然语言描述。
  • 折旧费用账户——用于存储该特定操作折旧费用的(对分类账账户的)引用。

假设我们不使用活动单位折旧法,那么前面关于设备购置的例子现在可以这样表示

描述

操作类型

Δ

购置成本账户

累计折旧账户 (-)

使用寿命(月)

自定义使用寿命

残值

净购买价

购置

$150,000

$0

60

0

$6,000

经纪费

购置成本

$5,000

$0

0

0

$0

法律费

购置成本

$2,000

$0

0

0

$0

运费和在途保险

购置成本

$3,000

$0

0

0

$0

安装成本

购置成本

$2,000

$0

0

0

$0

设备开始使用

运营开关

$0

$0

0

0

$0

分配折旧

折旧

$0

-$2,600

-1

0

$0

余额:

$162,000

-$2,600

59

0

$6,000

累计折旧账户具有贷方余额,因为它是备抵账户,如前所述。由于我们决定使用正值表示借方余额,因此为了保持一致性,贷方余额应表示为负值。

现在是税务。折旧业务有三个税务相关方面

  • 会计折旧与税务折旧不同。 首先,用于财务会计的折旧方法及其参数(使用寿命、残值)可能与用于税务的折旧方法及其参数不同。这种情况很少发生,但确实会发生。例如,公司可以决定使用余额递减法,而法律只允许直线法。结果,会计折旧费用将不同于为税务计算的折旧费用,这反过来会在税务价值和账面价值之间产生差距。
  • 资产不可折旧(会计或税务)。 折旧可以为会计目的分配,但不能为税务目的分配。例如,研发作为资产的折旧在会计上进行了分配,但在税务上没有。折旧可以为税务目的分配,但不能为会计目的分配。例如,在使用投资资产的重估模型时,折旧在会计上不分配,但必须为税务目的分配。这两种情况都会在税务价值和账面价值之间产生差距。
  • 资产已减值或重估。 如本文后面所述,资产可能会减值或重估,这会改变其账面价值。但是,它不会改变其税务价值。因此,即使折旧方法和参数相同,会计和税务的折旧金额也可能不同。这反过来又会导致税务价值和账面价值之间的差距。
  • 可能所有因素的组合。

我们上面描述的递延税的通用算法可以处理所有用例。但是,它需要知道税务折旧金额。当然,会计师也希望知道税务折旧金额。这使我们有了复制所有折旧相关资产状态变量(除了我们之前实现的(累计)税务折旧)的要求。我们还需要复制折旧方法(支持)变量。会计折旧方法和税务折旧方法都应可为空,以考虑到折旧既不为会计目的也不为税务目的分配的事实。我们不需要复制说明,因为说明字段可以包含两者。我们不需要复制成本账户,因为税务折旧金额不包含在会计交易中。

总而言之,我们将需要另外三个资产状态变量

  • 税务使用寿命(月)——与使用寿命(月)相同,但用于税务。
  • 税务自定义使用寿命——与自定义使用寿命相同,但用于税务。
  • 税务残值——与残值相同,但用于税务。

此外,为了将折旧反映为源凭证,我们需要一个额外的(支持)字段

  • 税务折旧方法——与折旧方法相同,但用于税务。

资产状态变量可以通过其他操作进行变异。因此,它们属于抽象/通用表(如果您选择使用类表继承模型)。支持变量是不同的。折旧方法、说明和成本账户特定于折旧操作。因此,我们可以选择使用类表继承模型而不是单表继承模型,即,将这些字段排除到单独的表中。但是,我倾向于不这样做,原因如下

  • 折旧操作是最常见的操作类型,因为在会计实践中,每月分配折旧是很常见的;
  • 只有四个字段可以排除;其中一个(成本账户)可以抽象出来用于多种操作;
  • 总固定资产操作条目数将很少。一家平均规模的公司每年最多有 200 个操作资产单位,这使得每年有 2,400 次折旧操作,加上大约 600 次其他类型操作,十年内总计 30,000 条目。

古老的奥卡姆剃刀原则:实体不应无必要地增多。正如您很快将看到的,这些与折旧相关的支持变量是唯一可以提取到单独表中的字段。

简单来说,在这种情况下,我既看不到特别的优点,也看不到损失。这是一个在额外连接和规范化之间的权衡。

大修、减值和减值转回

另一个与购置密切相关的固定资产业务是大修,例如,建筑物重建。如果维修的结果是(显着)价值增加或资产使用寿命延长(或两者都有),则应增加购置成本并延长使用寿命。例如,如果一次大修将设备使用寿命延长了两年,价值为 30,000 美元,该操作可以这样表示

描述

操作类型

Δ

购置成本账户

累计折旧账户 (-)

使用寿命(月)

自定义使用寿命

残值

初始余额

$162,000

-$2,600

59

0

$6,000

设备大修

大修

$30,000

$0

24

0

$0

余额

$192,000

-$2,600

83

0

$6,000

显然,并非所有资产都可以因其性质而被修复。虽然几乎所有厂房设备和投资资产都可以修复,但只有部分无形资产可以修复,而金融资产则不能。例如,您可以修复一些软件,但不能修复股票或债券。

与购置和购置成本业务一样,大修业务没有专门的(源)凭证类型。通常,它将是一张发票。然而,工资单、库存(例如备件)报废或一般合同也可以是有效的凭证。

目前,大修业务符合之前的模式,但这里有一个新业务——资产减值。为了提供现实的财务信息,企业资产应在资产可能损失价值的情况下进行减值测试。减值损失可能发生的原因有多种

  • 资产严重损坏(物理条件负面变化)
  • 资产的市场价格大幅下跌
  • 法律问题对资产产生了负面影响等。

简单地说——火灾前的建筑物与火灾后的建筑物价值不同。

减值金额是另一个资产状态变量。它实际上是**减值账户**的余额,这是一个备抵账户,就像折旧账户一样。使用它的理由相同——反映资产价值的下降,同时允许进行分析,即区分初始购置成本和后续变化。假设大修发生在火灾之后,并且仅恢复了(但未延长)使用寿命,则前面的例子可能看起来像这样

描述

操作类型

 

Δ

购置成本账户

减值账户 (-)

累计折旧账户 (-)

使用寿命(月)

自定义使用寿命

残值

初始余额

$162,000

$0

-$2,600

59

0

$6,000

火灾

减值

$0

-$50.000

$0

0

0

$0

设备大修

大修

$0

$30,000

$0

0

0

$0

余额

$162,000

-$20.000

-$2,600

59

0

$6,000

                 

与折旧业务一样(与购置不同),减值业务拥有/控制所有分类账交易,并有一个专门的源凭证——**减值评估**。它可以是内部或外部凭证。在这两种情况下,凭证内容都相同——对受损资产本身的市场公允价值的评估,或修复资产所需的维修成本(例如,报价、认证专业评估等)。减值凭证的分类账交易如下

借:减值损失账户

$50,000

 
 

贷:累计减值账户 (-)

 

$50,000

       

损失账户可以是任何费用(支出)账户。由于减值业务拥有(整个)交易,因此损失账户应与其它操作数据一起存储。我们可以回想一下,折旧业务也需要引用折旧费用账户。此外,在这两种情况下,引用的账户都用于平衡分类账交易。因此,我们可以将账户引用抽象化为**相应账户**,用于这两种业务。

大修可以逆转实质性减值。例如,建筑物着火然后被修复。然而,减值也可能由未表现为物理损坏的事件决定。例如,市场价格急剧下跌。在这种情况下,减值可以在没有(实际)财务成本的情况下消除。例如,市场已恢复。为了处理这些用例,我们需要另一个业务——**减值转回**。它的行为与减值完全相反。也就是说,您将借记累计减值账户,贷记减值损失账户,金额为恢复的金额。显然,它不需要任何额外的字段,因为它作用于相同的数据。显然,只有当减值存在时才能转回减值,即转回后累计减值账户余额(贷方)不能高于零,因为减值意味着资产价值的减少(负值)。

现在是税务。折旧业务有两个税务相关方面

  • 减值从不减少资产的税务价值。 因此,它总是会增加税务价值和账面价值之间的差距。
  • 大修可能增加资产的税务价值。 法律通常允许将大修视为增加税务价值。但是,有一些例外。并非所有类型的费用都可以用于增加税务价值。减值后的主要维修,仅恢复资产,不应增加税务价值。在这两种情况下,税务价值和账面价值之间可能存在差距。

我们上面描述的递延税的通用算法可以处理这两种用例。在减值的情况下,会计师无需指定任何额外数据:税率在公司配置文件中,而税务价值/账面价值差异等于减值金额。在进行大修的情况下,会计师应手动指定税务价值的变化。然而,由于它实际上很少使用,因此应提供明确指示覆盖相等性的方法(例如,在视觉上——一个复选框)。

假设税率为 15%,则具有递延税影响的先前示例可能如下所示

描述

操作类型

Δ

购置成本账户

减值账户 (-)

递延税资产账户

初始余额

$162,000

$0

$0

火灾

减值

$0

-$50.000

$7,500

设备大修

大修

$0

$30,000

-$4,500

余额

$162,000

-$20,000

$3,000

重估与重估盈余利用

接下来是重估业务。固定资产重估是指根据其公允市价的重大变化调整固定资产账面价值的向上或向下过程。会计准则通常要求固定资产初始按成本记录,但它们允许两种后续会计模型,即成本模型和重估模型。

  • 在**成本模型**中,固定资产的账面价值等于其历史成本减去累计折旧和累计减值(损失)。由于情况变化,价值没有向上调整。
  • 在**重估模型**中,资产最初按成本记录,但随后调整其账面金额以反映价值的任何增值。

成本模型和重估模型之间的区别在于,重估模型允许对资产价值进行向下和向上调整,而成本模型仅允许因减值损失而向下调整。

重估业务是扩展的减值业务——作用相同但方向相反。因此,减值业务拥有/控制所有分类账交易,并有一个专门的源凭证——**重估(报告)**。它可以是内部或外部凭证。在这两种情况下,凭证内容都相同——对资产本身公允价值的评估(例如,报价、认证专业评估等)。

重估业务适用于除投资资产和金融资产之外的所有资产类型,仅受会计模型约束。

现在是税务。重估结果(账面价值的增加或减少)永远不会改变税务价值。因此,重估总是会在税务价值和账面价值之间产生差距。我们上面描述的递延税通用算法可以自行处理这种情况,因为所有数据都是已知的:税率在公司配置文件中,而税务价值/账面价值差异等于重估结果。然而,这种情况是特殊的,因为它会影响与重估相关的资产状态变量——重估盈余账户。

例如,如果资产先前减值了 20,000 美元,重估后的总资产账面价值应增加 48,000 美元,预期税率为 15%,重估凭证的分类账交易如下

借:累计减值账户 (-)

$20,000

 

借:增值账户

$28,000

 

借:递延税费用/收入账户

$3,000

 
 

贷:重估盈余账户

 

$23,800

 

贷:递延税负债账户

 

$4,200

 

贷:递延税资产账户

 

$3,000

 

贷:减值损失账户

 

$20,000

这是一个覆盖范围最大的交易,即它包括了重估业务所有可能的分类账条目。实际交易可能不包含所有账户,具体取决于资产状态。正如您所看到的,它使用了与减值相同的账户,再加上两个实际上是新资产状态变量的额外账户

  • 增值账户——实际增值分类账账户余额,持有资产价值的增加部分。
  • 重估盈余账户(又称重估准备金)——实际重估盈余账户余额。它是一个股本账户,尽管它与资产相关联。它也可以(通过)股本业务使用(更改),例如,通过增加公司股本等于重估盈余的价值。

减值损失账户与减值业务(语义上)相同。因此,我们可以使用支持字段——**相应账户**。

正如示例所示,如果重估增加了资产的价值,增加的部分将在递延税负债账户和重估盈余账户之间分配。也就是说,而不是标准的递延税交易

借:递延税费用/收入账户

$4,200

 
 

贷:递延税负债账户

 

$4,200

       

我们使用自定义的、特定于重估的递延税交易。

借:增值账户

$4,200

 
 

贷:递延税负债账户

 

$4,200

       

而重估盈余账户则按价值增加的剩余金额贷记。也就是说,在这种情况下,算法如下:

  • 计算账面价值的增加部分(在购置价值之上);
  • 将其乘以税率,以找出增加部分的递延税金额;
  • 从重估盈余中减去增加部分的递延税金额;
  • 计算减值恢复金额(如果资产在重估前发生减值,即其价值低于购置价值);
  • 将其乘以税率,以找出已恢复部分的递延税金额;
  • 为已恢复部分的递延税金额添加标准的递延税交易分录。

该算法不需要任何额外的资产状态变量或支持变量。它只提供了对同一数据的不同处理方式。

重估业务与股权业务有一个共同的对象,即重估盈余账户既是资产状态的一部分,也是股权状态的一部分。其余额会受到资产和股权业务的变动影响。因此,我们需要一项特殊的(技术性)资产业务——**重估盈余利用**。该业务唯一受影响的资产状态变量显然是*重估盈余账户*。我们将在本系列后续关于股权业务的文章中更详细地讨论这项业务。

考虑前面的例子。假设公司打算转为重估模型,并进行一次重估,估计设备公允价值为 187,400 美元。当日的账面金额为 139,400 美元(= 162,000 美元 - 20,000 美元 - 2,600 美元),重估金额为 187,400 美元,因此需要向上调整 48,000 美元。然后公司决定利用 20,000 美元增加其股本。由此产生的业务可以这样表示(为简洁起见,已省略不相关的变量,否则无法在屏幕上显示)。

描述

操作类型

Δ

购置成本账户

减值账户 (-)

增值账户

重估盈余账户

递延税负债账户

递延税资产账户

初始余额

$162,000

$0

$0

$0

$0

$0

火灾

减值

$0

-$50.000

$0

$0

$0

$7,500

设备大修

大修

$0

$30,000

$0

$0

$0

-$4,500

重估

重估

$0

$20.000

$23,800

-$23,800

-$4,200

-$3,000

增加股本

重估盈余利用

$0

$0

$0

$20,000

$0

$0

余额:

$162,000

$0

$28,000

-$3,800

-$4,200

$0

投资重估

如果对投资资产或金融资产使用重估模型,重估业务则根本不同。在这种情况下,交易如下:

借:增值及减值账户

$28,000

 
 

贷:财务收入账户

 

$28,000

       

或者,如果变化为负:

借:财务费用账户

$28,000

 
 

贷:增值及减值账户

 

$28,000

       

与“标准”重估不同,“资产减值账户”不被使用。“增值及减值账户”可以同时具有借方和贷方余额,以反映价值高于或低于购置价值的情况。虽然您不需要一个单独的资产状态变量(资产状态账户)来表示,但这意味着对同一数据应用了不同的逻辑——增值账户也用于减值。

尽管该业务仍被官方称为重估,但为了反映此用例的特殊性,我们需要一个专门的固定资产业务类型。该业务不需要任何额外的资产状态变量或支持字段。(收入/费用账户可以通过通用的**对应账户**字段进行处理)。

对递延税的影响与基本重估相同。但是,这次我们不必处理增加部分的递延税金额。因此,我们前面描述的递延税通用算法可以正常处理此用例。

重估盈余的折旧

正如您所看到的,在使用资产重估时,资产价值的一部分是(可能是)重估盈余/收益,这是资产总价值(账面价值)的一部分,因此应计提折旧

因此,为了表示增值(重估盈余)的折旧,我们需要一个资产状态变量:

  • 增值累计折旧账户——增值累计折旧的余额,即资产价值的增加部分。折旧业务使用此账户,方式与累计折旧账户完全相同,但用于盈余的折旧。

增值折旧还有一个额外的注意事项,即需要对重估盈余进行折旧,即由资产产生的股权。这是为了让股权与支持的资产价值相匹配。直接的方法是借记重估盈余账户而不是折旧费用账户。然而,会计准则(至少在包括立陶宛在内的一些司法管辖区)要求采用不同的方法。

  • 购置成本和增值的折旧按常规方式分配:您分别贷记累计折旧账户、增值累计折旧账户,并借记某个折旧费用账户。
  • 要“折旧”重估盈余,您需要借记重估盈余账户,贷记留存收益账户,留存收益账户也是一个股权账户,通常在期末结账分录完成后用于留存收益。

尽管增值折旧的第二部分看起来是多余的,但事实并非如此。您应该记住,重估盈余也可以被股权业务使用。因此,重估盈余不一定等于增值。例如,如果整个重估盈余已用于增加公司股本,则根本不需要进行第二次增值折旧交易。

(参考)**留存收益账户**是固定资产(如折旧费用账户)的辅助字段。尽管它是一个股权账户,因此是一个永久账户,但它会受到结账分录的影响;其余额变动始终与重估盈余账户的变动相等(符号相反)。(参考)同一账户也用于报废和销售业务(稍后讨论)。因此,它属于抽象/通用表(如果您选择使用类表继承模型)。

报废、销售和销售撤销

报废和销售是普适性业务,就像购置一样。您可以报废或销售任何类型的资产。尽管可能存在个别例外(如法律问题),例如,通常不能销售许可证。

从交易的角度来看,资产的报废和销售在资产状态方面实际上是相同的业务。在这两种情况下,公司都不再拥有该资产,这意味着所有资产的账户余额都应设置为零(包括递延税账户)。显然,为此我们

  • 在资产状态的上下文中,添加绝对值等于当前余额但符号相反的增量。
  • 在交易的上下文中,为借方余额添加贷记账分录,为贷方余额添加借记账分录。

在上例中,报废设备的交易如下:

借:固定资产报废费用账户

$187,400

 

借:累计折旧账户(-)

$2,600

 

借:递延税负债账户

$4,200

 

借:重估盈余账户

$3,800

 
 

贷:购置成本账户

 

$162,000

 

贷:增值账户

 

$28,000

 

贷:递延税费用/收入账户

 

$4,200

 

贷:留存收益账户

 

$3,800

资产报废业务控制着整个账簿交易。因此,我们还需要一种特殊的文件类型来拥有该交易——**资产报废声明**。

在报废过程中,可能会收回一些备件、废金属或其他类似物品。在会计中,后者被归类为存货。因此,资产报废声明应(可)作为存货购置业务的父级。资产报废声明的这一方面将在本系列后续文章中实现。基本上,会计人员录入的存货购置业务将提供收回存货的价值(借方余额),而固定资产报废费用的金额将因(收回的)存货价值而减少。

此外,如果资产因某人过错而丢失或资产已投保,公司可以合法地期望收回部分或全部损失。在这种情况下,部分或全部损失(资产账面价值)应归属于应收票据。因此,资产报废声明应(可)作为应收票据的父级。资产报废声明的这一方面将在本系列后续文章中实现。基本上,会计人员录入的应收票据将提供可收回损失金额的价值(借方余额),而固定资产报废费用的金额将因可收回金额而减少。

设备销售交易与报废交易相比是不完整的。资产的销售可以通过多种(来源)文件类型进行正式化,例如发票、现金收据、总合同等。这意味着,在固定资产报废费用账户中的借记账分录可能存在各种分录,这些分录应由父业务处理。也就是说,销售业务不控制账簿交易,因此可以附加到几乎任何现有文件。

报废是一项不可逆转的操作,而销售是一项可逆的操作。资产销售合同的对方可以终止合同并退还资产。撤销的事实显然是通过销售业务记录的相反分录和增量来表示的,即做相同的事情,但符号相反。**销售撤销**业务与其对应项——销售业务一样,不控制账簿交易,因此可以附加到几乎任何现有文件。

正如您所看到的,这三项资产业务不需要任何额外的资产状态变量或支持字段。(报废业务的固定资产报废费用账户由通用的**对应账户**字段处理)。

如上所述的通用递延税算法不适用于报废或销售,因为对于这些业务,递延税余额应按上述方式清零。

重新分类为存货及重新分类撤销

如果公司决定在不久的将来销售某些资产(将其停用并开始寻找买家),则该资产应重新归类为存货,因为它不再符合固定资产的定义。此操作在某种程度上类似于报废,因为您需要将资产账户清零。语义上的区别在于,重新分类的资产并未消失。此外,与报废业务相反,重新分类是可撤销的——公司可以改变主意。在这种情况下,应恢复资产的账户余额。因此,我们需要另外两项资产业务。这些业务还需要特殊类型的(来源)文件——**资产重新分类**和**资产重新分类撤销**。(来源)文件是复合的,并且拥有(完全控制)其交易。基本上,需要做的是将资产的账簿账户清零,并将由此产生的借方余额转移到存货账户。(反之亦然用于撤销)。也就是说,从固定资产的角度来看,交易的相关部分将与销售交易相同。因此,不需要额外的资产状态变量或支持字段。

存货业务将在本系列后续文章中实现。目前,我们只需要知道这两项资产业务在存货领域都有对应的业务。资产重新分类文件将是资产重新分类和存货重新分类购置业务的父级。交易将由这两项业务控制,即资产重新分类业务知道如何报废资产账户余额和由此产生的借方余额,而存货重新分类购置业务知道如何处理借方余额。撤销文件也是如此。

由于重新分类业务表明公司打算销售资产,而资产销售业务是普适性的,因此重新分类业务也是普适性的(适用于所有资产类型)。

如上所述的通用递延税算法不适用于重新分类,因为对于此业务,递延税余额应清零,就像销售或报废一样。

拆分和合并

资产拆分发生在公司因某种原因决定将资产的一部分作为单独资产处理时。例如,公司进行了法律程序将一栋建筑分成几间房,并决定出售新形成的部分房间。实际上,这是一个复合操作。

  • 一项报废业务,可能也是部分的,例如剥离一部分房间,但主要房间仍作为法人实体存在,尽管面积较小;
  • 一项或多项购置业务,用于新形成的资产。

尽管这些报废和购置业务与之前讨论的非常相似,但它们存在实质性差异。

  • 普通报废业务将资产的账面价值转移到成本,而拆分报废业务则不转移。实际上,它在账簿中不进行交易。新资产曾是旧(剩余)资产的一部分,因此,它们性质相同,分别在相同的账簿账户中核算,即账簿账户余额不变;

普通购置业务仅记录购置成本的变化,而拆分购置业务“继承”了“父”资产状态(一定比例的状态变量)。如果“父”资产已折旧,则其所有部分都已折旧。其他业务也一样。这一事实应反映在新形成的资产中。

总而言之,为了实现资产拆分业务,我们需要两项“专用”业务:**拆分报废**和**拆分购置**。拆分业务也是一种特殊类型的(来源)文件——**资产拆分声明**。它可以是内部的(例如,决定某种方式拆解设备)或外部的(例如,有关房地产的法律证书)。无论哪种方式,它都是专门用于规范拆分的文档。

有人可能会问,为什么我们不实现一个字段金额。原因是固定资产不可互换。您不能用一栋建筑换另一栋,因为每栋建筑都有唯一的标识。固定资产拆分是例外,而不是固定资产的一般属性。因此,它应该被特殊处理,而不是泛化到所有业务。实际上,我在当前版本的会计应用程序中犯了这个错误。“此功能”是会计人员批评最多的前三名之一。

资产合并发生在公司因某种原因决定将两项或多项资产作为一项资产处理时。例如,公司进行了法律程序将同一栋建筑内的几间房间合并成一间。这是一个复合操作,与拆分操作非常相似。

  • 两项或多项报废业务,它们总是“完整”的,因为合并后的资产无法继续存在——它们成为新资产中无法区分的一部分;
  • 一项购置业务,用于新形成的(合并的)资产。

    合并报废和购置业务几乎与其拆分操作中的对应项相同,但有以下区别:

  • 如果初始资产在不同的账簿账户中核算,则可能需要总账簿交易;
  • 初始资产的报废总是“完整”的,因为它们作为独立实体已不复存在;

会计人员应指定新资产的剩余使用寿命,因为没有精确的方法可以使用初始资产的不同剩余使用寿命来计算它(而且它们也没有理由相同)。这同样适用于税务目的的剩余使用寿命。

总而言之,为了实现资产合并业务,我们需要与拆分业务基本相同的东西:两项“专用”业务——**合并报废**和**合并购置**——以及一种特殊类型的(来源)文件——**资产合并声明**。您可能会倾向于重用相同的资产业务类型,但您不应该这样做。首先,类型是廉价的,只是同一个数据库字段中的另一个应用程序定义的枚举值。其次,业务类型是信息丰富的。在业务列表中查看资产是如何确切获得或报废的,这是一件好事。

拆分和合并业务都具有技术性质。它们本身不会改变公司的财务状况,只允许将来对资产的不同部分进行不同处理。因此,它们适用于所有资产类型。

如上所述的通用递延税算法不适用于拆分和合并,因为这些业务没有财务影响。

余额转移和杂项

如前所述,(几乎)每个会计实体都必须实现一种方式来“初始化”其状态,当为已存在和运行的公司启动会计流程时。我们将账簿余额转移作为一项账簿交易来实现。同样,我们也实现固定资产转移——作为一项资产业务,它允许会计人员轻松设置所有状态变量的初始值。功能上,它与拆分购置和合并购置相同。唯一的区别是,对于后者,状态变量值是计算出来的,而对于余额转移购置,状态变量值由会计人员手动输入(复制/粘贴、从 Excel 文件导入等)。因此,乍一看,我们不需要实现任何新的资产状态变量或支持数据字段。不幸的是,乍一看是欺骗性的。在这种情况下,我们处理的不是实际购置(甚至不是拆分或合并等合成购置),而是关于很久以前购置的资产数据的转移。这给我们带来了以下用例要求:

  • 需要**实际购置日期**;

  • 需要**初始运行状态**。

第一个要求很明显——业务和税务报告应提供资产的实际购置日期,否则将显示虚假数据。第二个要求是由于折旧分配规则。通常,折旧仅从资产开始运行(公司开始使用它)的次月开始分配。但是,如果我们转移了 1 月 1 日的资产数据,并且该资产已在运行,则也应为 1 月份分配折旧。因此,需要一个指标来指示已转移数据的资产在转移日期是否已在运行。

如果我们实现一个“正常”业务,那将意味着需要支持数据字段。然而,在这种情况下,我们处理的是一项非同寻常的业务(文件),该业务在公司的数据库生命周期中只能发生一次。因此,将这些数据字段放在静态(通用)资产数据中更实用。

如上所述的通用递延税算法不适用于余额转移。会计人员应手动指定递延税余额(如果有)。

要实现的最后一项资产业务是“*杂项*”。如前所述,有时会计人员会遇到非专用会计应用程序功能无法处理的非正常文件(事件)。对于资产业务也可能如此。例如,可能存在一些会计(数据输入)错误,这些错误无法追溯修复。因此——**杂项**,这项业务允许会计人员手动操作资产的状态。它没有专用的(来源)文件,可以附加到几乎任何现有文件。

如上所述的通用递延税算法可以(也应该)自行处理此业务。递延税始终是税值与账面价值之差乘以税率。因此,无论进行何种手动更改,递延税的更改始终可以以一致的方式计算。

固定资产数据库模式

在上一章中,我们讨论了各种资产业务,并确定了资产状态变量和资产业务的支持数据字段,这些字段已经可以轻松设计一个按照约定命名为 `fixed_asset_operations` 的数据库表。

字段

描述

id

标准的合成主键。资产业务没有任何字段,甚至没有一个字段组合可以作为自然键。

document_id

业务所属的(来源)文件的 ID(外键)。

fixed_asset_id

业务所针对的资产的 ID(外键)。

asset_operation_type

应用程序定义的基类资产业务类型枚举。我们已经确定了以下 23 个基本类型:

  • 购置
  • 购置成本
  • 折旧
  • 转为运行
  • 转为非运行
  • 大修
  • 减值
  • 减值恢复
  • 重估
  • 重估盈余利用
  • 投资重估
  • 报废
  • 销售
  • 销售撤销
  • 重新分类
  • 重新分类撤销
  • 拆分报废
  • 拆分购置
  • 合并报废
  • 合并购置
  • 余额转移购置
  • 杂项
  • 扩展(表示使用了扩展类型)

extended_asset_operation_type_id

应用程序定义的资产业务类型扩展。(如果业务是由应用程序扩展创建的)在第一篇文章中讨论过。

delta_acquisition_costs

资产状态变量增量。

改变变量——购置成本,即购置成本账户的借方余额,这是一个资产账户,因此总余额将始终为正(或零)。

delta_accumulated_depreciation

资产状态变量增量。

改变变量——累计折旧,即累计折旧账户的借方余额,这是一个备抵账户,因此总余额将始终为负(或零)。

delta_service_life_months

资产状态变量增量。

改变变量——使用寿命(月)。显然,总值为正(或零,如果已完全折旧)。

delta_service_life_custom

资产状态变量增量。

改变变量——使用寿命(自定义单位,活动单位)。显然,总值为正(或零,如果已完全折旧或未按活动单位折旧法计算)。

delta_salvage_value

资产状态变量增量。

改变变量——残值。显然,总值为正(或零)。

delta_tax_value

资产状态变量增量。

改变变量——税务价值(资产的),没有支持账户。总余额将始终为正(或零)。

delta_tax_value_depreciation

资产状态变量增量。

改变变量——税务折旧,即按(税务)法律计算的折旧,没有支持账户。总余额将始终为负(或零),因为它应该减少税收价值。

delta_tax_service_life_months

资产状态变量增量。

改变变量——使用寿命(月),用于税务目的。显然,总值为正(或零,如果已完全折旧)。

delta_tax_service_life_custom

资产状态变量增量。

改变变量——使用寿命(自定义单位,活动单位),用于税务目的。显然,总值为正(或零,如果已完全折旧或未按活动单位折旧法计算)。

delta_tax_salvage_value  

资产状态变量增量。

改变变量——残值,用于税务目的。显然,总值为正(或零)。

delta_deferred_tax_liability

资产状态变量增量。

改变变量——递延税负债,即递延税负债账户的借方余额,这是一个负债账户,因此总余额将始终为负(或零)。

delta_deferred_tax_asset

资产状态变量增量。

改变变量——递延税资产,即递延税资产账户的借方余额,这是一个资产账户,因此总余额将始终为正(或零)。

delta_impairment

资产状态变量增量。

改变变量——减值,即减值账户的借方余额,这是一个备抵账户,因此总余额将始终为负(或零)。

delta_appreciation

资产状态变量增量。

改变变量——增值,即增值账户的借方余额,这是一个资产账户,因此总余额将始终为正(或零),投资重估除外。

delta_revaluation_surplus

资产状态变量增量。

改变变量——重估盈余,即重估盈余账户的借方余额,这是一个股权账户,因此总余额将始终为负(或零)。

delta_accumulated_appreciation_depreciation

资产状态变量增量。改变变量——增值累计折旧,即增值累计折旧账户的借方余额,这是一个备抵账户,因此总余额将始终为负(或零)。

corresponding_account_id

业务支持数据字段。对用于特定业务类型上下文的账户的引用,例如,折旧的折旧费用账户,减值的资产减值损失账户,报废的资产报废费用账户等。

retained_earnings_account_id

业务支持数据字段。对由特定业务(折旧、报废等)使用的(当前)留存收益账户的引用。

deferred_tax_expenses_account_id

业务支持数据字段。对由通用递延税算法使用的递延税费用(收入)账户的引用。由于长度限制,名称已缩短。

deferred_tax_rate

业务支持数据字段。

计算递延税时使用的税率。

depreciation_method_type  

业务支持数据字段。

应用程序定义的折旧方法类型枚举。

  • 直线法;
  • 余额递减法;
  • 年数总和法;
  • 活动单位法。

这些在历史上非常稳定,因此也可以定义为 `ENUM`。

如果折旧不用于会计目的(但用于税务目的),则可以为 null。

tax_depreciation_method_type  

业务支持数据字段。

应用程序定义的折旧方法类型枚举,类似于 depreciation_method_type,但用于税务目的。如果折旧不用于税务目的(但用于会计目的),则可以为 null。

depreciation_description  

业务支持数据字段。

由特定折旧方法实现生成的折旧计算的自然语言描述。

operation_comments  

业务支持数据字段。

会计师关于此业务的内部评论。由于某些资产业务附加到现有(来源)文件,因此会计师应能在业务本身中留下一些评论。

inserted_at, inserted_by, updated_at, updated_by  

标准审计跟踪字段,如本系列第一篇文章中所述。由于某些资产业务附加到现有(来源)文件,因此其更改不会反映在父文件审计跟踪字段中。因此,我们需要这里的审计跟踪字段。

如前所述,字段 – `depreciation_method_type`、`tax_depreciation_method_type` 和 `depreciation_description` – 可以重构到单独的表中。但我选择不这样做。

接下来,我们需要识别固定资产实体本身的静态(通用)数据字段。有几个这样的字段:

  • 琐碎字段:名称(用于在查找列表中显示)、描述和库存号。
  • 如前所述,由于余额转移的原因,需要两个数据字段:购置日期和转移时的运行状态。
  • 由于法律要求按法律定义的组对资产进行分类,还需要另外两个数据字段:法律组名称和代码。这些是会计人员手动指定的琐碎文本字段。在立陶宛,您只需保留有效(当前)的分类。没有要求保留分配给法律组的历史记录。这些字段也未用于任何其他目的,仅用于当前报告。因此,无需实现版本化列表(如我们在人员配置文件中所做的那样)。
  • 最后,还需要另外两个字段来保护业务规则——会计目的和税务目的的折旧方法。如上所述,某些类型的固定资产在会计目的或税务目的(或两者)上都不能折旧。因此,折旧方法字段可以为 null,以反映资产不可折旧的事实。

静态资产数据录入将始终与购置业务(购置、拆分购置、合并购置或余额转移购置)配对,该业务具有审计跟踪字段。因此,我们在固定资产静态数据表中不需要审计跟踪字段。

总而言之,我们得到了如下 `fixed_assets` 表:

字段

描述

id

标准的合成主键。资产没有任何字段,甚至没有一个字段组合可以作为自然键。

acquisition_date

资产(实际)购置的日期。只有当文件是余额转移时,它才能与购置(来源)文件的日期不同。

asset_name

资产的(简短)名称,用于在查找列表中显示。

asset_description

资产的任意描述。(如果有)

inventory_no

公司分配给资产的库存号。

fixed_assets_group_id

资产所属的资产组的 ID(外键)。

legal_group_name

资产所属的某个法律定义的资产组的名称。

legal_group_code

资产所属的某个法律定义的资产组的代码。

depreciation_method_type

应用程序定义的用于会计目的的折旧方法类型枚举。

  • 直线法;
  • 余额递减法;
  • 年数总和法;
  • 活动单位法。

这些在历史上非常稳定,因此也可以定义为 ENUM。

折旧方法应在资产组内相同,并在组级别定义。但是,分组并不总是使用(例如,如果公司只有少量资产),并且也会发生例外情况。因此,(当前)折旧方法也应在资产级别跟踪。无需跟踪其更改,因为这些更改已通过折旧业务本身反映。空值表示该资产在会计目的上不可折旧。

tax_depreciation_method_type

与 `depreciation_method_type` 相同,但用于税务目的。

is_operational_at_transfer

一个标志,指示资产是否已投入运行,即是否应为转移月份分配折旧。仅当购置(来源)文件是余额转移时才能使用(设置为 true)。

棘手的部分是对账簿账户的引用,这些账户的余额(归属于特定资产的部分)是资产状态变量:购置成本账户、累计折旧账户、减值账户、增值账户、重估盈余账户、增值折旧累计账户、递延税资产账户和递延税负债账户。这些可能会改变,例如,当将特定资产从工厂组移动到投资组等时。因此,我们需要实现一个版本化列表,就像我们在第三篇文章中为人员配置文件所做的那样,但略有不同。账户(一个或多个)的更改涉及账簿交易——您必须将旧账户的余额移动到新账户的余额。如本系列第二篇文章中所述,移动账户余额意味着两笔账簿分录:

  • 如果旧账户余额为借方,则我们添加一笔贷记账分录,金额等于余额。如果旧账户余额为贷方,则我们添加一笔借记账分录,金额等于余额。
  • 我们在新账户中添加一笔账簿分录,其类型和金额与旧账户余额相同。

如果我们(潜在地)需要一个(受控)交易,我们也需要一个(来源)文件,因为交易始终是某个文件的子项。在这种情况下,交易中的所有分录都(应)严格由账户变更业务控制。因此,我们需要一个专用的(自有)文件类型——**资产账户变更**。

另一个与账户变更密切相关且需要跟踪的主题是资产类型(组:工厂资产、投资资产、无形资产或金融资产)和估值模型(成本模型或重估模型,换句话说,是否使用重估模型)。这些资产属性的变化对于验证业务(例如,重估与投资重估)以及在不同期间的报告中对资产进行分组很重要。通常,这些资产属性的变化伴随着账户的变化。因此,版本化列表还应包括这些属性。

总而言之,我们得到了如下 `fixed_asset_accounts` 表:

字段

描述

id

标准的合成主键。一组资产的状态账户引用没有任何字段,甚至没有一个字段组合可以作为自然键。

document_id

账户变更业务(包括购置)所属的(来源)文件的 ID(外键)。

fixed_asset_id

账户变更业务所针对的资产的 ID(外键)。

acquisition_costs_account_id, accumulated_depreciation_account_id, impairment_account_id, appreciation_account_id, revaluation_surplus_account_id, appreciation_depreciation_account_id,

deferred_tax_asset_account_id,

deferred_tax_liability_account_id   

对(新)账簿账户的引用,这些账户的余额(归属于特定资产的一部分)存储资产状态变量。(外键)。`acquisition_costs_account_id` 永远不能为 null。其余账户可以设置为 null,因为它们并非总是必需的。例如,在建资产除了购置成本外不需要任何账户。但是,只有当账户余额为零时,才能将其设置为 null。否则,余额将成为孤儿。

asset_type

应用程序定义的资产类型枚举,按照适用的会计准则定义。

  • 工厂资产
  • 投资资产
  • 无形资产
  • 金融资产

is_revalued

一个位标志,指示资产是否可以重估,即是否适用重估模型(相对于成本模型)。

最后的调整是固定资产的分组。它完全由公司定义。没有要求保留组更改和分配的历史记录。因此,我们需要一个简单的表来存储它们。除了名称和描述等琐碎字段外,我们还需要添加“策略字段”。立陶宛会计准则(可能在其他司法管辖区也是如此)要求同一组内的所有资产使用相同的估值(成本/重估模型)和折旧方法,并且一个组只能包含同一类型的资产。会计准则还允许为特定资产组设置不同的资本化价值。

总而言之,我们得到了如下 `fixed_asset_groups` 表:

字段

描述

id

标准的合成主键。资产组没有任何字段,甚至没有一个字段组合可以作为自然键。

group_name

资产的(简短)名称,用于在查找列表中显示。

group_description

资产的任意描述。(如果有)

depreciation_method_type

应用程序定义的用于会计目的的折旧方法类型枚举。

  • 直线法;
  • 余额递减法;
  • 年数总和法;
  • 活动单位法。

这些在历史上非常稳定,因此也可以定义为 `ENUM`。

空值表示组内的资产在会计目的上不可折旧。

tax_depreciation_method_type

与 depreciation_method_type 相同,但用于税务目的。

asset_type

应用程序定义的资产类型枚举,按照适用的会计准则定义。

  • 工厂资产
  • 投资资产
  • 无形资产
  • 金融资产

capitalization_value

资产必须具有(或超过)的资本化价值,才能在该组内被视为资产(资本化)。空值表示资本化价值不偏离公司级别的值。

is_revalued

一个位标志,指示组内的资产是否可以重估,即是否适用重估模型(相对于成本模型)。

inserted_at, inserted_by, updated_at, updated_by

标准审计跟踪字段,如本系列第一篇文章中所述。

由此产生的固定资产基础设施的数据库模式图(相关部分)。

结论

在本文中,我们开发了固定资产会计基础设施的数据库模式,该模式允许进行立陶宛会计准则要求的全方位固定资产会计核算。

在本文中,我们还描述了以下 17 种(来源)文件类型:

  • 余额转移声明
  • 结账分录
  • 会计凭证
  • 杂项文件
  • 固定资产运行声明
  • 固定资产非运行声明
  • 固定资产折旧
  • 固定资产减值
  • 固定资产减值恢复
  • 固定资产重估
  • 固定资产投资重估
  • 固定资产重新分类
  • 固定资产重新分类撤销
  • 固定资产报废
  • 固定资产拆分
  • 固定资产合并
  • 固定资产账户变更

在本文中,我们还确定了公司默认账户枚举的四个候选(在本系列第三篇文章中描述):

  • 汇总账户
  • 当期留存收益账户
  • 以前留存收益账户
  • 递延税费用(收入)账户

在本文中,我们还确定了一个审计例程:

  • 审计方法应检查资产业务中的递延税率与相关公司配置文件版本中的(企业)税率之间的差异。

在本文中,我们还向 company_profile_versions 表(在本系列第三篇文章中描述)添加了两个新字段,用于固定资产。

  • fixed_assets_capitalization_value DECIMAL(20, 2) UNSIGNED NOT NULL
  • corporate_tax_rate DECIMAL(5, 4) UNSIGNED NOT NULL

最后,在本文中,我们还向 company_profile 表(在本系列第三篇文章中描述)添加了一个新字段,用于定义公司关于关闭文件后更改文档的策略(应用程序定义的枚举)。

closing_policy TINYINT UNSIGNED NOT NULL

我应该强调,本文没有提供每个实体的完整业务逻辑描述,只有与数据库设计相关的部分。在固定资产会计中还有更多的业务规则,在开发应用程序的业务层时应加以遵守。例如:

  • 应保留业务操作的时间顺序,因为大多数操作直接或间接通过资产状态变量的汇总生成账簿交易。如果您在现有操作之前插入一个操作,则后者交易将无效。因此,您需要一个机制来解决操作依赖关系。
  • 由于近一半的固定资产业务不拥有(来源)文件并且附加到已有的文件,因此您还需要一种机制来解决特定业务是否可以附加到特定文件类型等问题。

目前,我还没有决定下一个主题。应实现的剩余资产类型是:

  • 贷款(尚不确定是否包含在基本功能中)
  • 存货(可互换和个体)
  • 应付票据和现金

历史

  • 2019 年 9 月 16 日:初始版本
  • 2019 年 9 月 18 日:重新上传创建脚本(在初始上传中忘记将字段添加到公司配置文件表中)
© . All rights reserved.