Commit Graph

84 Commits

Author SHA1 Message Date
812d9cc7ce container: hledger-flow: remove potential % interpretation (printf)
Removes potential interpretation of percent signs in various types of
descriptions/notes/labels (otherwise, import may break).

Resolves "fatal: not enough arguments to satisfy format string" under
certain conditions.
2025-08-08 12:56:14 -07:00
cc2e4a736f container: hledger-flow: btcpayserver: update mockups
Reflects latest "Legacy Invoice Export" and "Wallets" exports.
2025-08-08 12:33:24 -07:00
5920d87f86 container: hledger-flow: btcpayserver: support "Legacy Invoice Export" plugin, update "Wallets" impl
BTCPay Server v2.2.0 has a new "Invoices" export format that is more
complex than the prior "Legacy Invoice Export" format.

To help facilitate the transition to the new format, upstream has
provided a plugin for backwards compatibility. However, this plugin
happens to provide additional columns that must be supported.

Additionaly, the "Wallets" format also has new columns with fee
information, so the impl now supports tx fees (prior, fees required
manual input).

The "Wallets" impl also now defaults to a refund expense account for
outgoing txs and adds tax rules & documentation for rationale.
2025-08-08 12:33:24 -07:00
b51b94d8a3 container: hledger-flow: support non-alpha chars (currency)
Removes old hack for currencies with non-alpha characters.
2025-08-08 12:25:18 -07:00
418ed80a8c container: hledger-flow: ethereum-based: support non-alpha chars (currency)
- Fixes broken import of any tx that contains non-alpha character(s) in
  its currency (digits, etc.)
  * Currencies may now contain any character(s) supported by hledger
2025-08-04 15:27:33 -07:00
0ce9302e50 container: hledger-flow: ethereum-based: rules (spam): add arbitrum/base/optimism, update polygon 2025-08-04 15:07:42 -07:00
cc024b838e container: hledger-flow: metamask: mockups: add arbitrum/base/optimism, update polygon 2025-08-04 15:07:10 -07:00
d270d56366 client/container: ethereum-based: support Etherscan V2, add more L2 chains
- Implements support for unified API via Etherscan V2 (ethereum-based)
  * All ethereum-based L2s are now accessed via single API endpoint
    - Chains are now available via chain ID
  * Updates API key requirement for `fetch` ethereum-based subaccounts
    - The API key's value must now be prepended with "etherscan"
      * Previously was prepended per-chain ("ethereum" or "polygon")
    - The API key is now *required* (can be generated at etherscan.io)
      * Resolves fatal error in Etherscan::parse_response()
      * Impl will now handle if:
        - Config's API key/value is malformed
        - Etherscan API key was not given
        - Etherscan response is fatal

- Adds support for more L2s
  * Arbitrum (One)
  * Optimism
  * Base

- Adds more L2s to existing accounts
  * Coinbase Wallet
  * Ledger Live
  * MetaMask

- Updates documentation
  * Update default generated `fetch` config
  * Update `fetch` usage help
  * Update README
2025-08-04 15:07:10 -07:00
f8226cdccb container: hledger-flow: paypal-business: update mockup
Use generic business name to avoid possibility of infringement.
2025-07-03 14:21:11 -07:00
4718fcd0c4 container: hledger-flow: paypal: update fiat mockup
Reflects latest header and impl changes.
2025-07-03 14:13:31 -07:00
6fc4a1527d container: hledger-flow: paypal: support latest fiat header
- Breaking changes due to additional columns (not backwards-compatible).
- Adds 'fees' subaccount and new tags from the additional columns.
2025-07-03 14:09:23 -07:00
4add7c234c hledger-flow: ethereum-based: add to Ethereum spam rules 2025-03-19 17:48:42 -07:00
99c7075742 hledger-flow: btcpayserver: add local timezone support 2025-03-05 03:26:23 -08:00
338053e0db hledger-flow: btcpayserver: add taxed_as INCOME tag
All 'IN' direction is INCOME by default.
2025-03-05 02:44:11 -08:00
0a2d16098c hledger-flow: ethereum-based: add DeFi swapper tag
Adds the protocol or platform that conducts the swap.
2025-02-07 21:54:43 -08:00
7ed6bc1287 hledger-flow: btcpayserver: add prelim v2 mockups
- Removes previous format (fully deprecated)
- Adds "Legacy Invoice" and "Wallets" mockups
2025-02-07 21:22:54 -08:00
5352e34196 hledger-flow: btcpayserver: add prelim support for v2 reports
- Removes previous format (fully deprecated)
- Adds support for "Legacy Invoice" and "Wallets" reports

See code notes regarding caveats and TODOs.
2025-02-07 21:22:54 -08:00
9380f03b88 hledger-flow: lib_preprocess: allow testing of single / multiple columns 2025-02-06 18:39:24 -08:00
09322467d6 hledger-flow: lib: symlink to finance's lib_utils
Although this would usually break modularity, this may be the exception.
2025-02-06 18:38:53 -08:00
6c6ab9c41d hledger-flow: ethereum-based: add COMP rewards 2025-01-31 19:19:50 -08:00
7c78e9e647 hledger-flow: ledger: skip COMP token
Supported by `fetch` (ethereum-based).
2025-01-31 19:19:50 -08:00
69421e2423 container: hledger-flow: electrum: use transaction label for tax memo
Even though the transaction label is already included as a notes tag,
having this information as a memo for tax reports is incredibly helpful.
2025-01-03 21:45:47 -08:00
6ea1e56317 container: hledger-flow: ethereum-based: add to Polygon spam rules 2025-01-03 21:43:25 -08:00
467cfa2f36 container: hledger-flow: coinbase-pro: fix default account2 for sells 2025-01-03 21:41:24 -08:00
da57805c79 container: hledger-flow: trezor: fix fees subaccount ordering
Keep consistent with all other rules.
2025-01-03 21:39:11 -08:00
7b65d5d6e2 container: hledger-flow: ledger: fix fees subaccount ordering
Keep consistent with all other rules.
2025-01-03 21:39:11 -08:00
fc1691e727 container: hledger-flow: blockfi: fix fees subaccount ordering
Keep consistent with all other rules.
2025-01-03 21:39:11 -08:00
c8e80e0c19 container: hledger-flow: ledger: add more compound tokens 2025-01-02 20:43:56 -08:00
e74590ced2 container: hledger-flow: ethereum-based: re-order blockchain/subaccounts
For consistency (ethereum-based and all other supported networks).
2025-01-02 20:30:32 -08:00
226a62ac31 container: hledger-flow: tezos: add network to subaccounts
- Creates per-wallet / per-account compliance for IRS Rev. Proc. 2024-28

- Needed for wallets that may share the same subaccount name on the same
  device but are entirely different wallets that support different
  networks and/or assets within that network.
2025-01-02 20:30:32 -08:00
d602d78621 container: hledger-flow: algorand: add network to subaccounts
- Creates per-wallet / per-account compliance for IRS Rev. Proc. 2024-28

- Needed for wallets that may share the same subaccount name on the same
  device but are entirely different wallets that support different
  networks and/or assets within that network.
2025-01-02 20:30:32 -08:00
ab602a036d container: hledger-flow: electrum: add tax related to rules 2025-01-02 20:30:32 -08:00
499c171d73 container: hledger-flow: add subaccount/network to tax rules
- Creates per-wallet / per-account compliance for IRS Rev. Proc. 2024-28
2025-01-02 20:30:32 -08:00
6a4c2da99b hledger-flow: ethereum-based: add to Ethereum spam rules 2024-12-27 18:19:34 -08:00
a7834160ec hledger-flow: algorand: add to spam rules 2024-12-27 02:34:45 -08:00
4bec30f600 container: hledger-flow: vultr: add sales tax rule
Vultr has now added Sales Tax to their CSV invoice.
2024-10-01 19:34:15 -07:00
a16922f87a container: hledger-flow: add Vultr support
This addition is treading a fine line between finance and other
accounting, as Vultr cloud service is related to DevOps and is also not
a financial entity. However, financial information is provided; so this
addition is useful.

With this commit, a precedent is set for other cloud services to be
added to the repository (services that provide CSV financial accounting
data) and I believe that they could (should) be added as needed.

NOTE: there are several upstream CSV issues:

  - Only expenses are given
    * Transfers must be added manually (manual import or custom rules)

  - Sales tax is not included
    * Sales tax expenses must be added manually
2024-09-11 21:25:51 -07:00
c65c31659c hledger-flow: electrum: fix calculating 'No Data'
If electrum-provided prices aren't available, 'No Data' will be given.
Attempts to calculate this string will result in 0.00 for fiat values.

Do not attempt to calculate this string. Instead, leave the column empty
(for bitcoin.tax calculations).
2024-09-09 20:20:53 -07:00
91bfc21f62 hledger-flow: algorand: add to Governance Rewards 2024-09-06 17:46:41 -07:00
7f413d5351 hledger-flow: capital-one: bank: fix direction 2024-08-28 23:11:29 -07:00
181ca4433f hledger-flow: capital-one: bank: add interest income 2024-08-19 16:12:13 -07:00
731a8c9563 hledger-flow: changelly: cost-basis comments for bitcoin.tax
Issue #51 describes at least a few undocumented bitcoin.tax issues:

  - Bicoin.tax gives unexpected cost-basis results when `Fee` is given
    with `Total` (when `Total` is given in place of `Price`). The
    expectation is that bitcoin.tax will perform the cost-basis
    calculation on `Total` when `Fee` is also given.

    However, bitcoin.tax *will* give expected cost-basis results if
    `Price` is given in place of `Total` (with `Fee` also given) *or* if
    `Total` is given *after* local cost-basis adjustments are made (but
    *without* `Fee` given).

    The rationale for why docker-finance doesn't use `Price`:

      * docker-finance has all of the `Total`s; so `Price` isn't
        necessary.

      * Local price information isn't available for most trades (and
        shouldn't be necessary since all `Total`s are available).

  - Additionally, when `Fee` is non-fiat (crypto), it now must be marked
    as a SPEND in order to be disposed (and to produce an accurate
    closing report).

  - Finally, if `FeeCurrency` *does* not match either `Symbol` or
    `Currency` (e.g., BTC-ETH w/ BNB fee), it's unknown if cost-basis
    must be calculated locally as well (if `Total` is given). Local
    calculations cannot be done because `Fee` price information is
    (almost certainly) not available for this type of trade.

Until upstream can assert that attaching the `Fee` will subsequently
adjust the cost-basis of `Total` *and* dispose of the `Fee` in the
process (while also allowing `Total` to be used in place of `Price`),
the `Fee` (and `FeeCurrency`) column(s) must not be populated and values
instead moved to SPEND (as described above).

Upstream is aware of these issues (since May) and they're in the process
of resolution. In the meantime, docker-finance work-arounds should
suffice for all trades that have a fiat `Fee` and/or a
`Fee`/`FeeCurrency` that matches one side of the trading pair.
2024-07-29 16:15:50 -07:00
f228da98d8 hledger-flow: bittrex: cost-basis work-around for bitcoin.tax
Issue #51 describes at least a few undocumented bitcoin.tax issues:

  - Bicoin.tax gives unexpected cost-basis results when `Fee` is given
    with `Total` (when `Total` is given in place of `Price`). The
    expectation is that bitcoin.tax will perform the cost-basis
    calculation on `Total` when `Fee` is also given.

    However, bitcoin.tax *will* give expected cost-basis results if
    `Price` is given in place of `Total` (with `Fee` also given) *or* if
    `Total` is given *after* local cost-basis adjustments are made (but
    *without* `Fee` given).

    The rationale for why docker-finance doesn't use `Price`:

      * docker-finance has all of the `Total`s; so `Price` isn't
        necessary.

      * Local price information isn't available for most trades (and
        shouldn't be necessary since all `Total`s are available).

  - Additionally, when `Fee` is non-fiat (crypto), it now must be marked
    as a SPEND in order to be disposed (and to produce an accurate
    closing report).

  - Finally, if `FeeCurrency` *does* not match either `Symbol` or
    `Currency` (e.g., BTC-ETH w/ BNB fee), it's unknown if cost-basis
    must be calculated locally as well (if `Total` is given). Local
    calculations cannot be done because `Fee` price information is
    (almost certainly) not available for this type of trade.

Until upstream can assert that attaching the `Fee` will subsequently
adjust the cost-basis of `Total` *and* dispose of the `Fee` in the
process (while also allowing `Total` to be used in place of `Price`),
the `Fee` (and `FeeCurrency`) column(s) must not be populated and values
instead moved to SPEND (as described above).

Upstream is aware of these issues (since May) and they're in the process
of resolution. In the meantime, docker-finance work-arounds should
suffice for all trades that have a fiat `Fee` and/or a
`Fee`/`FeeCurrency` that matches one side of the trading pair.
2024-07-29 16:15:50 -07:00
1975e1dbbb hledger-flow: coinbase: cost-basis work-around for bitcoin.tax
Issue #51 describes at least a few undocumented bitcoin.tax issues:

  - Bicoin.tax gives unexpected cost-basis results when `Fee` is given
    with `Total` (when `Total` is given in place of `Price`). The
    expectation is that bitcoin.tax will perform the cost-basis
    calculation on `Total` when `Fee` is also given.

    However, bitcoin.tax *will* give expected cost-basis results if
    `Price` is given in place of `Total` (with `Fee` also given) *or* if
    `Total` is given *after* local cost-basis adjustments are made (but
    *without* `Fee` given).

    The rationale for why docker-finance doesn't use `Price`:

      * docker-finance has all of the `Total`s; so `Price` isn't
        necessary.

      * Local price information isn't available for most trades (and
        shouldn't be necessary since all `Total`s are available).

  - Additionally, when `Fee` is non-fiat (crypto), it now must be marked
    as a SPEND in order to be disposed (and to produce an accurate
    closing report).

  - Finally, if `FeeCurrency` *does* not match either `Symbol` or
    `Currency` (e.g., BTC-ETH w/ BNB fee), it's unknown if cost-basis
    must be calculated locally as well (if `Total` is given). Local
    calculations cannot be done because `Fee` price information is
    (almost certainly) not available for this type of trade.

Until upstream can assert that attaching the `Fee` will subsequently
adjust the cost-basis of `Total` *and* dispose of the `Fee` in the
process (while also allowing `Total` to be used in place of `Price`),
the `Fee` (and `FeeCurrency`) column(s) must not be populated and values
instead moved to SPEND (as described above).

Upstream is aware of these issues (since May) and they're in the process
of resolution. In the meantime, docker-finance work-arounds should
suffice for all trades that have a fiat `Fee` and/or a
`Fee`/`FeeCurrency` that matches one side of the trading pair.
2024-07-27 00:20:40 -07:00
2c1b896951 hledger-flow: gemini: exchange: cost-basis work-around for bitcoin.tax
Issue #51 describes at least a few undocumented bitcoin.tax issues:

  - Bicoin.tax gives unexpected cost-basis results when `Fee` is given
    with `Total` (when `Total` is given in place of `Price`). The
    expectation is that bitcoin.tax will perform the cost-basis
    calculation on `Total` when `Fee` is also given.

    However, bitcoin.tax *will* give expected cost-basis results if
    `Price` is given in place of `Total` (with `Fee` also given) *or* if
    `Total` is given *after* local cost-basis adjustments are made (but
    *without* `Fee` given).

    The rationale for why docker-finance doesn't use `Price`:

      * docker-finance has all of the `Total`s; so `Price` isn't
        necessary.

      * Local price information isn't available for most trades (and
        shouldn't be necessary since all `Total`s are available).

  - Additionally, when `Fee` is non-fiat (crypto), it now must be marked
    as a SPEND in order to be disposed (and to produce an accurate
    closing report).

  - Finally, if `FeeCurrency` *does* not match either `Symbol` or
    `Currency` (e.g., BTC-ETH w/ BNB fee), it's unknown if cost-basis
    must be calculated locally as well (if `Total` is given). Local
    calculations cannot be done because `Fee` price information is
    (almost certainly) not available for this type of trade.

Until upstream can assert that attaching the `Fee` will subsequently
adjust the cost-basis of `Total` *and* dispose of the `Fee` in the
process (while also allowing `Total` to be used in place of `Price`),
the `Fee` (and `FeeCurrency`) column(s) must not be populated and values
instead moved to SPEND (as described above).

Upstream is aware of these issues (since May) and they're in the process
of resolution. In the meantime, docker-finance work-arounds should
suffice for all trades that have a fiat `Fee` and/or a
`Fee`/`FeeCurrency` that matches one side of the trading pair.
2024-07-27 00:20:31 -07:00
c332e71fda hledger-flow: capital-one: bank: mockup: reorder columns
New column order was introduced in #80.
2024-07-20 00:31:30 -07:00
ba0e6f7f2d hledger-flow: ledger: mockup: add Status column
New column was introduced in #73.
2024-07-20 00:31:30 -07:00
64ada34fd4 hledger-flow: ethereum-based: add to Ethereum spam rules 2024-07-19 22:27:20 -07:00
c69c841a18 hledger-flow: capital-one: bank: reorder columns
Upstream has reordered their columns (same data, different order).
2024-07-10 17:33:08 -07:00
5b17bd38aa hledger-flow: coinbase: update mockups to latest impl 2024-07-03 19:05:39 -07:00