SwiftBeanCountTax

CI Status Documentation percentage License: MIT Latest version platforms supported: linux | macOS | iOS | watchOS | tvOS SPM compatible

此项目是 SwiftBeanCount 的一部分,请查看主文档 此处

内容

这是一个帮助您处理税务季的库。目前,它可以列出应税销售额,并根据您的 Beancount 文件生成预期的税单。 这使您可以轻松验证您收到的税单,以检查提供商方面或您跟踪方面的错误。

Beancount 元数据

该库依赖于 Beancount 文件中的元数据和自定义指令进行配置。

应税销售额

在您进行销售的账户上,添加 "tax-sale" 元数据,指定销售额应按哪个名称分组显示,通常是经纪人的名称。

税单

基本配置

示例

2020-01-01 custom "tax-slip-settings" "slip-names" "t3" "t5"
2020-01-01 custom "tax-slip-settings" "slip-currency" "t3" "CAD"
2020-01-01 custom "tax-slip-settings" "slip-currency" "t5" "CAD"

2020-01-01 open Income:Interest:Taxable:BankABC CAD
  t5: "Interest from Canadian sources (Box 13)"
  tax-slip-issuer: "BankABC"

按交易代码拆分税单

某些税单按个别股票/ ETF 进行拆分。 要配置此项,帐户名称的最后或倒数第二个部分必须与配置的商品匹配,或者您将 tax-symbol 元数据添加到帐户。

除了交易代码之外,您还可以添加描述。 对于商品,添加 name,对于帐户,添加 tax-description 元数据。

示例

2020-01-01 commodity ETFABC
  name: "ETF ABC @ Exchange"

2020-01-01 open Income:Dividend:Taxable:ETFABC:ForeignNonBusinessIncome CAD
  t3: "Foreign Non-Business Income (Box 25)"

2020-01-01 open Income:Dividend:Taxable:Portfolio:Other CAD
  t3: "Other Income (Box 26)"
  tax-symbol: "StockTicker"
  tax-description: "Stock @ Exchange"

如果您的帐户名称与商品匹配,但您不想将其视为商品,请向其添加 tax-symbol: ""

拆分账户

有时,如果您按股票拆分税单,您不想为所有内容创建一个单独的帐户。 例如,您通过不同的收入帐户跟踪股息,但不希望为每只股票创建单独的费用帐户来支付税款。 为此:

  1. 通过自定义指令而不是帐户元数据配置税单和 Box,如下所示
  2. 确保具有过账到此帐户的交易具有来自为同一税单通过元数据配置的帐户的另一个过账。
  3. 确保另一个帐户配置了交易代码(注意:这也适用于未按交易代码拆分的税单。例如,当您在整个分类帐中共享一个税务费用帐户时,您仍然可以通过这种方式将其添加到您的就业税单中)

示例

2020-01-01 custom "tax-slip-settings" "account" "t3" "Foreign Non-Business Income Tax paid (Box 34)" "Expenses:Tax:ForeignNonBusiness"

2020-01-01 * "" ""
  Income:Dividend:Taxable:ETFABC:ForeignNonBusinessIncome 10.00 CAD
  Expenses:Tax:ForeignNonBusiness -2.50 CAD
  Assets:Portfolio 7.50 CAD

如果存在同一设置的多个自定义指令,则使用截至税务年度结束之前的最新指令。 例如,在为 2021 年生成税单时,使用截至 2021-12-31 的最新指令。

特殊字符

税单仅支持字母和数字。 唯一的例外是圆括号 ()。 要使用它们,请将它们添加到 slip-names 元数据中

2020-01-01 custom "tax-slip-settings" "slip-names" "t4a(p)"

在所有其他使用的地方,删除括号,例如,使用 t4ap

2020-01-01 open Income:CPP CAD
  t4ap: "Taxable CPP benefits (Box 20)"

日期

有时,收入是在一年赚取的,但仅在另一年支付; 或者销售在一年进行,但仅在下一年结算。 您可以通过交易上的 tax-year 元数据更改交易应计入的年份,例如 tax-year: "2022"

用法

  1. 加载您的分类帐,例如,通过 SwiftBeanCountParser
  2. 调用 TaxCalculator 上的公共函数之一,例如
    1. TaxCalculator.generateTaxSlips(from ledger: Ledger, for year: Int)
    2. TaxCalculator.getTaxableSales(from ledger: Ledger, for year: Int)

另请查看完整文档 此处

使用

该库支持 Swift Package Manger,因此只需在您的 Package.swift 中添加一个依赖项

.package(url: "https://github.com/Nef10/SwiftBeanCountTax.git", .exact(from: "X.Y.Z")),

注意:根据语义版本控制,所有版本更改 < 1.0.0 都可能具有破坏性,因此目前请使用 .exact