roussks/financial-year

这是一个用于财务年度日期计算的简单库。包括接口和DateTime实现。

v1.3.0 2023-11-19 23:50 UTC

README

Latest Version Build Status GitHub license

介绍 / 背景 / 目的

在我作为软件开发者/网络开发者的第一个工作环境中,我遇到了需要对财务/会计年度进行不同计算的需求。该业务也恰好有一个非标准的日历财务年度(类型解释见下文)。因此,每次我们需要获取任何类型的报告(交易、汇率、销售等)时,我们都会使用业务分析师提供的一个预定义列表。

这个库旨在以一致的方式解决这个业务问题。

为业务计算周、期、年度和结束日期。

根据维基百科

财务年度(或财务年度,有时也称为预算年度)是政府用于会计和预算目的的期间,不同国家有所不同。它也用于企业和其他组织的财务报告。

组织的财务年度可以基于以下两种方法

  1. 每年从同一日期开始。
    • 这是本库的calendar类型。
  2. 每年结束在同一天的星期。
    • 这是本库的business类型。

      "财务年度结束"(FYE)是标记财务年度结束的日期。一些公司——例如思科系统[1]——每年都在同一天的星期结束其财务年度,例如最接近特定日期的一天(例如,最接近12月31日的星期五)。在这样的制度下,一些财务年度有52周,而另一些则有53周。

    • 这种类型的财务年度,每年总是有364天,并分为13个时期(每个时期有4周,28天)。
    • 当前库将容纳52-53周财务年度的方法,即在财务年度结束时添加一个第53周,以覆盖从上一个364天年度中缺失的天数。这是一个业务领域的决策,因此库不计算一年应该是52周还是53周。这需要由用户设置。

可以通过RoussKS\FinancialYear\AdapterInterface跟踪可用方法,直到提供完整的README。

要求

安装

composer require roussks/financial-year

基本使用

require_once __DIR__ . '/vendor/autoload.php';

// DateTimeAdapter
// If instantiating with string, it must be of ISO-8601 format 'YYYY-MM-DD'
$startDate = new \DateTime('2019-01-01');

$fy = new \RoussKS\FinancialYear\DateTimeAdapter('calendar', $startDate);

echo $fy->getFyEndDate()->format('Y-m-d'); // 2019-12-31 

Docker镜像

如果您想贡献,库提供了一个示例Dockerfile以帮助开发。这是使用官方php cli镜像。将Dockerfile.example文件复制到Dockerfile,取消注释所需的php版本。

但是,您可以使用任何您想要的开发更新和错误修复的方法。

运行测试

该库有一个广泛的测试套件,用于覆盖大多数场景和负路径。

请注意,phpunit在不同版本之间的配置可能有所不同,因此您可能需要将phpunit.xml.dist文件复制到phpunit.xml,并进行必要的调整。

./vendor/phpunit/phpunit/phpunit
XDEBUG_MODE=coverage ./vendor/phpunit/phpunit/phpunit
# HTML coverage example
XDEBUG_MODE=coverage ./vendor/phpunit/phpunit/phpunit --coverage-html tests/report

运行静态分析

该库使用PHPStan作为静态分析工具,默认级别设置为5。

./vendor/bin/phpstan analyse

限制

遗憾的是,该库不支持以29、30、31日为起始日期的任何月份的calendar财务年度类型。

我们预计这类日期在calendar财务年度中不会有很多使用,因为它们会给会计工作带来相当大的问题。

例如,如果一年从1月31日开始,第一个会计期间是在2月28日结束吗?接下来的会计期间从3月1日开始,实际上跳过了一个月吗?

如果在库的使用过程中,用户遇到了这样的真实业务问题并且可以提供缓解逻辑,我们可以着手实现它。

重要:对于business类型的财务年度,这是允许的。

未来计划

  • 更新Readme文件或创建Wiki页面,包含所有可用方法的更多示例。

  • 引入新的扩展库CarbonAdapter,以便直接与Carbon日期时间实例协同工作。

  • 引入新的扩展库ChronosAdapter,以便直接与Chronos日期时间实例协同工作。

  • 为每个适配器引入Laravel包,具有不同的驱动程序。

版本控制

当前库将使用语义版本控制

非破坏性更改将根据SemVer分类导致次要版本或补丁版本更新。

主要版本发布将不保证向后兼容性。