From 5920d87f86020b62d36d05729ca1137778f436a0 Mon Sep 17 00:00:00 2001 From: Aaron Fiore Date: Tue, 5 Aug 2025 09:52:02 -0700 Subject: [PATCH 1/2] 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. --- .../btcpayserver/btcpayserver-shared.bash | 51 ++++++++++---- .../btcpayserver/btcpayserver-shared.rules | 69 ++++++++++++++----- 2 files changed, 88 insertions(+), 32 deletions(-) diff --git a/container/src/hledger-flow/accounts/btcpayserver/btcpayserver-shared.bash b/container/src/hledger-flow/accounts/btcpayserver/btcpayserver-shared.bash index f188f68..a4ebacd 100755 --- a/container/src/hledger-flow/accounts/btcpayserver/btcpayserver-shared.bash +++ b/container/src/hledger-flow/accounts/btcpayserver/btcpayserver-shared.bash @@ -49,13 +49,15 @@ function btcpayserver::print_warning() # # TL;DR: # +# - As of v2.2.0, *MUST* install the "Legacy Invoice Export" plugin. TODO: use v2.2.0 format w/out plugin +# # - *MUST* export both "Legacy Invoice" report and "Wallets" report for an accurate balance. # * The "Legacy Invoice" report currently does *not* include any outgoing txs (refunds or transfers). # # WARNING: # -# - All outgoing txs do *not* account for fees (they are lumped in with the total). -# * Until upstream changes this, any fees must be separated manually w/ custom rules. +# - If using a watch-ony wallet, consider accounting entirely here (via btcpayserver) or +# entirely via that other wallet (e.g., electrum). Mixing the two may cause tax accounting issues. # # CAUTION: # @@ -119,16 +121,19 @@ function btcpayserver::legacy() printf $16 OFS # InvoiceCurrency printf $17 OFS # InvoiceDue printf $18 OFS # InvoicePrice - printf $19 OFS # InvoiceItemCode + printf $19 OFS # InvoiceTaxIncluded + printf $20 OFS # InvoiceTip + printf $21 OFS # InvoiceSubtotal + printf $22 OFS # InvoiceItemCode # TODO: if description contains comma(s)? - printf $20 OFS # InvoiceItemDesc + printf $23 OFS # InvoiceItemDesc - printf $21 OFS # InvoiceFullStatus - printf $22 OFS # InvoiceStatus - printf $23 OFS # InvoiceExceptionStatus - printf $24 OFS # BuyerEmail - printf $25 OFS # Accounted + printf $24 OFS # InvoiceFullStatus + printf $25 OFS # InvoiceStatus + printf $26 OFS # InvoiceExceptionStatus + printf $27 OFS # BuyerEmail + printf $28 OFS # Accounted # WARNING: appears to be always IN (see notes regarding "Wallets" report) printf "IN" OFS # Direction @@ -176,6 +181,9 @@ function btcpayserver::wallets() if ($6 !~ /^-/) next + # Strip sign from amount (using direction instead) + sub(/^-/, "", $6) + # Date (ReceivedDate w/ local timezone added) sub(/ /, "T", $1) # HACK: makes arg-friendly by removing space cmd = "date \"+%F %T %z\" --date="$1 | getline date @@ -197,14 +205,25 @@ function btcpayserver::wallets() printf $2 OFS # Crypto (CryptoCode) # BalanceChange (Paid) - printf("%.8f", $6); printf OFS + # NOTE: must provide as subtotal, so subtract fee + printf("%.8f", $6 - $7); printf OFS + + # Fee (NetworkFee) + printf("%.8f", $7); printf OFS - printf OFS # (NetworkFee) printf OFS # (ConversionRate) - printf OFS # (PaidCurrency) - printf OFS # (InvoiceCurrency) + + # FeeRate (PaidCurrency) + printf("%.3f", $8); printf OFS + + # Rate (XXX) (InvoiceCurrency) + printf("%.3f", $9); printf OFS + printf OFS # (InvoiceDue) printf OFS # (InvoicePrice) + printf OFS # (InvoiceTaxIncluded) + printf OFS # (InvoiceTip) + printf OFS # (InvoiceSubtotal) printf OFS # (InvoiceItemCode) printf OFS # (InvoiceItemDesc) printf OFS # (InvoiceFullStatus) @@ -223,7 +242,7 @@ function btcpayserver::wallets() function btcpayserver::parse() { - lib_preprocess::test_header "ReceivedDate,StoreId,OrderId,InvoiceId,InvoiceCreatedDate,InvoiceExpirationDate,InvoiceMonitoringDate,PaymentId,Destination,PaymentType,CryptoCode,Paid,NetworkFee,ConversionRate,PaidCurrency,InvoiceCurrency,InvoiceDue,InvoicePrice,InvoiceItemCode,InvoiceItemDesc,InvoiceFullStatus,InvoiceStatus,InvoiceExceptionStatus,BuyerEmail,Accounted" \ + lib_preprocess::test_header "ReceivedDate,StoreId,OrderId,InvoiceId,InvoiceCreatedDate,InvoiceExpirationDate,InvoiceMonitoringDate,PaymentId,Destination,PaymentType,CryptoCode,Paid,NetworkFee,ConversionRate,PaidCurrency,InvoiceCurrency,InvoiceDue,InvoicePrice,InvoiceTaxIncluded,InvoiceTip,InvoiceSubtotal,InvoiceItemCode,InvoiceItemDesc,InvoiceFullStatus,InvoiceStatus,InvoiceExceptionStatus,BuyerEmail,Accounted" \ && btcpayserver::legacy lib_preprocess::test_header "Date,InvoiceId,OrderId,Category,PaymentMethodId,Confirmed,Address,PaymentCurrency,PaymentAmount,PaymentMethodFee,LightningAddress,InvoiceCurrency,InvoiceCurrencyAmount,Rate" \ @@ -238,7 +257,9 @@ function btcpayserver::parse() lib_preprocess::test_header "Date,InvoiceId,State,AppId,Product,Quantity,CurrencyAmount,Currency" \ && btcpayserver::sales - lib_preprocess::test_header "Date,Crypto,TransactionId,InvoiceId,Confirmed,BalanceChange" \ + # TODO: don't hardcode USD (upstream should make the currency in "Rate (XXX)" into a separate column). + #lib_preprocess::test_header "Date,Crypto,TransactionId,InvoiceId,Confirmed,BalanceChange,Fee,FeeRate,Rate (USD)" \ + lib_preprocess::test_header "Date,Crypto,TransactionId,InvoiceId,Confirmed,BalanceChange,Fee,FeeRate" \ && btcpayserver::wallets } diff --git a/container/src/hledger-flow/accounts/btcpayserver/btcpayserver-shared.rules b/container/src/hledger-flow/accounts/btcpayserver/btcpayserver-shared.rules index 1140695..c07be2b 100644 --- a/container/src/hledger-flow/accounts/btcpayserver/btcpayserver-shared.rules +++ b/container/src/hledger-flow/accounts/btcpayserver/btcpayserver-shared.rules @@ -16,7 +16,7 @@ # along with this program. If not, see . # TODO: currently, only supports "Legacy Invoice" and "Wallets" format (w/ additional custom columns) -fields ReceivedDate,StoreId,OrderId,InvoiceId,InvoiceCreatedDate,InvoiceExpirationDate,InvoiceMonitoringDate,txid,index,Destination,PaymentType,CryptoCode,Paid,NetworkFee,ConversionRate,PaidCurrency,InvoiceCurrency,InvoiceDue,InvoicePrice,InvoiceItemCode,InvoiceItemDesc,InvoiceFullStatus,InvoiceStatus,InvoiceExceptionStatus,BuyerEmail,Accounted,direction,subaccount +fields ReceivedDate,StoreId,OrderId,InvoiceId,InvoiceCreatedDate,InvoiceExpirationDate,InvoiceMonitoringDate,txid,index,Destination,PaymentType,CryptoCode,Paid,NetworkFee,ConversionRate,PaidCurrency,InvoiceCurrency,InvoiceDue,InvoicePrice,InvoiceTaxIncluded,InvoiceTip,InvoiceSubtotal,InvoiceItemCode,InvoiceItemDesc,InvoiceFullStatus,InvoiceStatus,InvoiceExceptionStatus,BuyerEmail,Accounted,direction,subaccount # NOTE: BTCPayServer exports to localtime date-format %Y-%m-%d %H:%M:%S %z @@ -41,43 +41,78 @@ if %Accounted ^[^a-z]*$ # NOTE: all IN assumed to be INCOME # Default comment -comment created:%InvoiceCreatedDate, expired:%InvoiceExpirationDate, store_id:%StoreId, order_id:%OrderId, invoice_id:%InvoiceId, type:%PaymentType, to_address:%Destination, txid:%txid, index:%index, status:%InvoiceStatus, direction:%direction, taxed_as:INCOME +comment created:%InvoiceCreatedDate, expired:%InvoiceExpirationDate, store_id:%StoreId, order_id:%OrderId, invoice_id:%InvoiceId, invoice_tax:%InvoiceTaxIncluded, invoice_tip:%InvoiceTip, invoice_subtotal:%InvoiceSubtotal, type:%PaymentType, to_address:%Destination, txid:%txid, index:%index, status:%InvoiceStatus, direction:%direction, taxed_as:INCOME # Comment w/ item code if %InvoiceItemCode [a-z0-9] - comment created:%InvoiceCreatedDate, expired:%InvoiceExpirationDate, store_id:%StoreId, order_id:%OrderId, invoice_id:%InvoiceId, item_code:%InvoiceItemCode, type:%PaymentType, to_address:%Destination, txid:%txid, index:%index, status:%InvoiceStatus, direction:%direction, taxed_as:INCOME + comment created:%InvoiceCreatedDate, expired:%InvoiceExpirationDate, store_id:%StoreId, order_id:%OrderId, invoice_id:%InvoiceId, invoice_tax:%InvoiceTaxIncluded, invoice_tip:%InvoiceTip, invoice_subtotal:%InvoiceSubtotal, item_code:%InvoiceItemCode, type:%PaymentType, to_address:%Destination, txid:%txid, index:%index, status:%InvoiceStatus, direction:%direction, taxed_as:INCOME # Comment w/ buyer email if %BuyerEmail [a-z0-9] - comment created:%InvoiceCreatedDate, expired:%InvoiceExpirationDate, store_id:%StoreId, order_id:%OrderId, invoice_id:%InvoiceId, email:%BuyerEmail, type:%PaymentType, to_address:%Destination, txid:%txid, index:%index, status:%InvoiceStatus, direction:%direction, taxed_as:INCOME + comment created:%InvoiceCreatedDate, expired:%InvoiceExpirationDate, store_id:%StoreId, order_id:%OrderId, invoice_id:%InvoiceId, invoice_tax:%InvoiceTaxIncluded, invoice_tip:%InvoiceTip, invoice_subtotal:%InvoiceSubtotal, email:%BuyerEmail, type:%PaymentType, to_address:%Destination, txid:%txid, index:%index, status:%InvoiceStatus, direction:%direction, taxed_as:INCOME # Comment w/ both item code + buyer email if %InvoiceItemCode [a-z0-9] & %BuyerEmail [a-z0-9] - comment created:%InvoiceCreatedDate, expired:%InvoiceExpirationDate, store_id:%StoreId, order_id:%OrderId, invoice_id:%InvoiceId, item_code:%InvoiceItemCode, email:%BuyerEmail, type:%PaymentType, to_address:%Destination, txid:%txid, index:%index, status:%InvoiceStatus, direction:%direction, taxed_as:INCOME - -# Comment for "Wallets" export -if %direction ^OUT$ - comment txid:%txid, confirmed:%Accounted, direction:%direction + comment created:%InvoiceCreatedDate, expired:%InvoiceExpirationDate, store_id:%StoreId, order_id:%OrderId, invoice_id:%InvoiceId, invoice_tax:%InvoiceTaxIncluded, invoice_tip:%InvoiceTip, invoice_subtotal:%InvoiceSubtotal, item_code:%InvoiceItemCode, email:%BuyerEmail, type:%PaymentType, to_address:%Destination, txid:%txid, index:%index, status:%InvoiceStatus, direction:%direction, taxed_as:INCOME # # Direction # +# NOTE/TODO: +# +# InvoiceTaxIncluded, InvoiceTip and InvoiceSubtotal are not included +# as new accounts because they are static across rows and treated more +# like tags (i.e., if an invoice is not paid in full in a single tx, +# then these entries will be repeated across rows). + # Default income if %direction ^IN$ account2 income:btcpayserver:%subaccount:%CryptoCode comment2 %ReceivedDate,INCOME,btcpayserver:%subaccount,%CryptoCode,%Paid,%InvoiceCurrency,%PaidCurrency,%InvoiceId -# Default equity transfer +# Default refund +# +# NOTE: +# +# - If the tx is not a refund, use custom rules for account2/comment2 +# * If the tx also not an expense, remove comment tag taxed_as:SPEND +# +# - Since refunds may not be considered taxable events, and since the +# "Wallets" export only includes the market price of the tx at the +# time of sending (refunding), use custom rules to replace the +# sending tx's price to the time of receiving (the income tx). +# +# This way one can "negate" the original income event by "spending" +# the original amount at the original rate (the rate at which the +# invoice was paid): +# +# Example in custom rules (replace "MANUAL_ADJUSTMENT_NEEDED"): +# +# if %direction ^OUT$ +# comment txid:%txid, confirmed:%Accounted, direction:%direction, taxed_as:SPEND +# comment2 %ReceivedDate,SPEND,btcpayserver:%subaccount:%CryptoCode,%CryptoCode,%Paid,USD,MANUAL_ADJUSTMENT_NEEDED,REFUND +# +# - Use different custom rules if your refund type is not the default +# provided option of 'price at the rate the invoice was paid'. +# if %direction ^OUT$ - account2 equity:btcpayserver:%subaccount:deposit:%CryptoCode + account2 expenses:btcpayserver:%subaccount:refunds:%CryptoCode + amount -%Paid %CryptoCode + comment txid:%txid, confirmed:%Accounted, direction:%direction, taxed_as:SPEND + comment2 %ReceivedDate,SPEND,btcpayserver:%subaccount:%CryptoCode,%CryptoCode,%Paid,USD,,REFUND +# TODO: don't hardcode USD (upstream should make the "Rate (XXX)" currency column a separate column). -# TODO: -# -# WARNING: -# -# - All outgoing txs do *not* account for fees (they are lumped in with the total). -# * Until upstream changes this, any fees must be separated manually w/ custom rules. +if %direction ^OUT$ +& %NetworkFee [1-9] + account3 assets:btcpayserver:%subaccount:%CryptoCode + amount3 -%NetworkFee %CryptoCode + account4 expenses:electrum:%subaccount:fees:%CryptoCode + amount4 %NetworkFee %CryptoCode + comment txid:%txid, confirmed:%Accounted, direction:%direction, taxed_as:SPEND + comment3 %ReceivedDate,SPEND,btcpayserver:%subaccount:%CryptoCode,%CryptoCode,%NetworkFee,USD,%PaidCurrency,FEE +# Using comment3 so a comment2 SPEND isn't overwritten (when applicable) +# TODO: don't hardcode USD (upstream should make the "Rate (XXX)" currency column a separate column). # vim: sw=2 sts=2 si ai et From cc2e4a736f129eecc6f9c95981ee40b059205886 Mon Sep 17 00:00:00 2001 From: Aaron Fiore Date: Wed, 6 Aug 2025 19:55:54 -0700 Subject: [PATCH 2/2] container: hledger-flow: btcpayserver: update mockups Reflects latest "Legacy Invoice Export" and "Wallets" exports. --- .../btcpayserver/subaccount-1/1-in/mockup/2024/legacy.csv | 8 +++----- .../subaccount-1/1-in/mockup/2024/wallets.csv | 8 ++++---- .../btcpayserver/subaccount-1/1-in/mockup/2025/legacy.csv | 8 +++----- .../subaccount-1/1-in/mockup/2025/wallets.csv | 8 ++++---- 4 files changed, 14 insertions(+), 18 deletions(-) diff --git a/container/src/hledger-flow/accounts/btcpayserver/template/btcpayserver/subaccount-1/1-in/mockup/2024/legacy.csv b/container/src/hledger-flow/accounts/btcpayserver/template/btcpayserver/subaccount-1/1-in/mockup/2024/legacy.csv index 9ca040a..ce0aa48 100644 --- a/container/src/hledger-flow/accounts/btcpayserver/template/btcpayserver/subaccount-1/1-in/mockup/2024/legacy.csv +++ b/container/src/hledger-flow/accounts/btcpayserver/template/btcpayserver/subaccount-1/1-in/mockup/2024/legacy.csv @@ -1,5 +1,3 @@ -ReceivedDate,StoreId,OrderId,InvoiceId,InvoiceCreatedDate,InvoiceExpirationDate,InvoiceMonitoringDate,PaymentId,Destination,PaymentType,CryptoCode,Paid,NetworkFee,ConversionRate,PaidCurrency,InvoiceCurrency,InvoiceDue,InvoicePrice,InvoiceItemCode,InvoiceItemDesc,InvoiceFullStatus,InvoiceStatus,InvoiceExceptionStatus,BuyerEmail,Accounted -2025-01-01 11:11:11,STOREXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX1,PAY_REQUEST_XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXX2,INVOICEXXXXXXXXXXXXXX2,2025-01-01 12:12:12,2025-01-01 12:12:12,2025-01-01 12:12:12,TXIDXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX2-10,bc1qXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX2,BTC-CHAIN,BTC,0.12345678,0,100000.101,12345.6904,USD,0,12345.69,,,Settled,complete,,alice@bob.email,true -2025-01-01 11:11:11,STOREXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX1,PAY_REQUEST_XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXX2,INVOICEXXXXXXXXXXXXXX2,2025-01-01 12:12:12,2025-01-01 12:12:12,2025-01-01 12:12:12,TXIDXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX2-10,bc1qXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX2,BTC-CHAIN,BTC,0.12345678,0,100000.101,12345.6904,USD,0,12345.69,,,Settled,complete,,alice@bob.email, -2024-12-31 22:22:22,STOREXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX1,PAY_REQUEST_XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXX1,INVOICEXXXXXXXXXXXXXX1,2024-12-31 23:23:23,2024-12-31 23:23:23,2024-12-31 23:23:23,TXIDXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX1-5,bc1qXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX1,BTC-CHAIN,BTC,0.01234567,0,95000.505,1172.840,USD,0,1172.84,product_1,Great Product That You Want #1,Settled,complete,,,true -2024-12-31 22:22:22,STOREXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX1,PAY_REQUEST_XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXX1,INVOICEXXXXXXXXXXXXXX1,2024-12-31 23:23:23,2024-12-31 23:23:23,2024-12-31 23:23:23,TXIDXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX1-5,bc1qXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX1,BTC-CHAIN,BTC,0.01234567,0,95000.505,1172.840,USD,0,1172.84,product_1,Great Product That You Want #1,Settled,complete,,, +ReceivedDate,StoreId,OrderId,InvoiceId,InvoiceCreatedDate,InvoiceExpirationDate,InvoiceMonitoringDate,PaymentId,Destination,PaymentType,CryptoCode,Paid,NetworkFee,ConversionRate,PaidCurrency,InvoiceCurrency,InvoiceDue,InvoicePrice,InvoiceTaxIncluded,InvoiceTip,InvoiceSubtotal,InvoiceItemCode,InvoiceItemDesc,InvoiceFullStatus,InvoiceStatus,InvoiceExceptionStatus,BuyerEmail,Accounted +2025-08-06 15:08:52,6Hba3EYeVpNaZbDduFrJ2jkKsGF69k83dJJUFNB1haX2,6ZiCU7wv2ATm7RQNda1hPr,2DYE61SvSs9Q1DsfKjXd21,2025-08-06 15:08:39,2025-08-06 15:23:39,2025-08-07 15:23:39,dc132e44e053d9023cf20374aea200850efd1e88de28d1344f5a1343bbc0519f-1,tb1q20fhdv9tvl5rz5vfgnn96hwqhy242yqgfyd6d9,BTC-CHAIN,BTC,0.0006219,0,115131.4,71.600,USD,0,71.6,6.8,0,64.8,,,Settled,complete,,user2@local.domain,true +2025-08-06 15:05:20,6Hba3EYeVpNaZbDduFrJ2jkKsGF69k83dJJUFNB1haX2,RuuupW4i5qXpD9biED4V79,8bZWGbYbKJh3moNwjehdfY,2025-08-06 15:04:54,2025-08-06 15:19:54,2025-08-07 15:19:54,a4174c80d019043eed0227c1b2bedf99f432f5fdb27149595810c8299fb09f9d-0,tb1qvfle8fr3xfhksc5gxuuz486t0rpq4td4hnk4tv,BTC-CHAIN,BTC,0.00007254,0,115118.7,8.351,USD,-0.001,8.35,0.7,1,6.65,,,Settled,complete,,user@local.domain,true \ No newline at end of file diff --git a/container/src/hledger-flow/accounts/btcpayserver/template/btcpayserver/subaccount-1/1-in/mockup/2024/wallets.csv b/container/src/hledger-flow/accounts/btcpayserver/template/btcpayserver/subaccount-1/1-in/mockup/2024/wallets.csv index 8638c0e..8ae66dd 100644 --- a/container/src/hledger-flow/accounts/btcpayserver/template/btcpayserver/subaccount-1/1-in/mockup/2024/wallets.csv +++ b/container/src/hledger-flow/accounts/btcpayserver/template/btcpayserver/subaccount-1/1-in/mockup/2024/wallets.csv @@ -1,4 +1,4 @@ -Date,Crypto,TransactionId,InvoiceId,Confirmed,BalanceChange -2024-12-31 22:22:22,BTC,TXIDXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX1,INVOICEXXXXXXXXXXXXXX1,true,0.01234567 -2025-01-01 11:11:11,BTC,TXIDXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX2,INVOICEXXXXXXXXXXXXXX2,true,0.12345678 -2025-02-02 02:02:02,BTC,TXIDXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX3,,true,-0.00123456 +Date,Crypto,TransactionId,InvoiceId,Confirmed,BalanceChange,Fee,FeeRate,Rate (USD) +2025-08-06 15:05:20,BTC,a4174c80d019043eed0227c1b2bedf99f432f5fdb27149595810c8299fb09f9d,8bZWGbYbKJh3moNwjehdfY,true,0.00007254,0.00015848,112.397,115118.7 +2025-08-06 15:08:52,BTC,dc132e44e053d9023cf20374aea200850efd1e88de28d1344f5a1343bbc0519f,2DYE61SvSs9Q1DsfKjXd21,true,0.00062190,0.00015854,112.439,115131.4 +2025-08-06 15:13:27,BTC,8cbae88fd430eb257960738577bbba7d5be72b3f8799954fa309d288749431ee,,true,-0.00014869,0.00007615,54.007,115199.95 \ No newline at end of file diff --git a/container/src/hledger-flow/accounts/btcpayserver/template/btcpayserver/subaccount-1/1-in/mockup/2025/legacy.csv b/container/src/hledger-flow/accounts/btcpayserver/template/btcpayserver/subaccount-1/1-in/mockup/2025/legacy.csv index ca48276..ce0aa48 100644 --- a/container/src/hledger-flow/accounts/btcpayserver/template/btcpayserver/subaccount-1/1-in/mockup/2025/legacy.csv +++ b/container/src/hledger-flow/accounts/btcpayserver/template/btcpayserver/subaccount-1/1-in/mockup/2025/legacy.csv @@ -1,5 +1,3 @@ -ReceivedDate,StoreId,OrderId,InvoiceId,InvoiceCreatedDate,InvoiceExpirationDate,InvoiceMonitoringDate,PaymentId,Destination,PaymentType,CryptoCode,Paid,NetworkFee,ConversionRate,PaidCurrency,InvoiceCurrency,InvoiceDue,InvoicePrice,InvoiceItemCode,InvoiceItemDesc,InvoiceFullStatus,InvoiceStatus,InvoiceExceptionStatus,BuyerEmail,Accounted -2025-01-01 11:11:11,STOREXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX1,PAY_REQUEST_XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXX2,XXXXXXXXXXXXXXXXXXXXX2,2025-01-01 12:12:12,2025-01-01 12:12:12,2025-01-01 12:12:12,TXIDXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX2-10,bc1qXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX2,BTC-CHAIN,BTC,0.12345678,0,100000.101,12345.6904,USD,0,12345.69,,,Settled,complete,,alice@bob.email,true -2025-01-01 11:11:11,STOREXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX1,PAY_REQUEST_XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXX2,XXXXXXXXXXXXXXXXXXXXX2,2025-01-01 12:12:12,2025-01-01 12:12:12,2025-01-01 12:12:12,TXIDXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX2-10,bc1qXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX2,BTC-CHAIN,BTC,0.12345678,0,100000.101,12345.6904,USD,0,12345.69,,,Settled,complete,,alice@bob.email, -2024-12-31 22:22:22,STOREXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX1,PAY_REQUEST_XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXX1,XXXXXXXXXXXXXXXXXXXXX1,2024-12-31 23:23:23,2024-12-31 23:23:23,2024-12-31 23:23:23,TXIDXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX1-5,bc1qXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX1,BTC-CHAIN,BTC,0.01234567,0,95000.505,1172.840,USD,0,1172.84,product_1,Great Product That You Want #1,Settled,complete,,,true -2024-12-31 22:22:22,STOREXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX1,PAY_REQUEST_XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXX1,XXXXXXXXXXXXXXXXXXXXX1,2024-12-31 23:23:23,2024-12-31 23:23:23,2024-12-31 23:23:23,TXIDXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX1-5,bc1qXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX1,BTC-CHAIN,BTC,0.01234567,0,95000.505,1172.840,USD,0,1172.84,product_1,Great Product That You Want #1,Settled,complete,,, +ReceivedDate,StoreId,OrderId,InvoiceId,InvoiceCreatedDate,InvoiceExpirationDate,InvoiceMonitoringDate,PaymentId,Destination,PaymentType,CryptoCode,Paid,NetworkFee,ConversionRate,PaidCurrency,InvoiceCurrency,InvoiceDue,InvoicePrice,InvoiceTaxIncluded,InvoiceTip,InvoiceSubtotal,InvoiceItemCode,InvoiceItemDesc,InvoiceFullStatus,InvoiceStatus,InvoiceExceptionStatus,BuyerEmail,Accounted +2025-08-06 15:08:52,6Hba3EYeVpNaZbDduFrJ2jkKsGF69k83dJJUFNB1haX2,6ZiCU7wv2ATm7RQNda1hPr,2DYE61SvSs9Q1DsfKjXd21,2025-08-06 15:08:39,2025-08-06 15:23:39,2025-08-07 15:23:39,dc132e44e053d9023cf20374aea200850efd1e88de28d1344f5a1343bbc0519f-1,tb1q20fhdv9tvl5rz5vfgnn96hwqhy242yqgfyd6d9,BTC-CHAIN,BTC,0.0006219,0,115131.4,71.600,USD,0,71.6,6.8,0,64.8,,,Settled,complete,,user2@local.domain,true +2025-08-06 15:05:20,6Hba3EYeVpNaZbDduFrJ2jkKsGF69k83dJJUFNB1haX2,RuuupW4i5qXpD9biED4V79,8bZWGbYbKJh3moNwjehdfY,2025-08-06 15:04:54,2025-08-06 15:19:54,2025-08-07 15:19:54,a4174c80d019043eed0227c1b2bedf99f432f5fdb27149595810c8299fb09f9d-0,tb1qvfle8fr3xfhksc5gxuuz486t0rpq4td4hnk4tv,BTC-CHAIN,BTC,0.00007254,0,115118.7,8.351,USD,-0.001,8.35,0.7,1,6.65,,,Settled,complete,,user@local.domain,true \ No newline at end of file diff --git a/container/src/hledger-flow/accounts/btcpayserver/template/btcpayserver/subaccount-1/1-in/mockup/2025/wallets.csv b/container/src/hledger-flow/accounts/btcpayserver/template/btcpayserver/subaccount-1/1-in/mockup/2025/wallets.csv index 8638c0e..8ae66dd 100644 --- a/container/src/hledger-flow/accounts/btcpayserver/template/btcpayserver/subaccount-1/1-in/mockup/2025/wallets.csv +++ b/container/src/hledger-flow/accounts/btcpayserver/template/btcpayserver/subaccount-1/1-in/mockup/2025/wallets.csv @@ -1,4 +1,4 @@ -Date,Crypto,TransactionId,InvoiceId,Confirmed,BalanceChange -2024-12-31 22:22:22,BTC,TXIDXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX1,INVOICEXXXXXXXXXXXXXX1,true,0.01234567 -2025-01-01 11:11:11,BTC,TXIDXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX2,INVOICEXXXXXXXXXXXXXX2,true,0.12345678 -2025-02-02 02:02:02,BTC,TXIDXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX3,,true,-0.00123456 +Date,Crypto,TransactionId,InvoiceId,Confirmed,BalanceChange,Fee,FeeRate,Rate (USD) +2025-08-06 15:05:20,BTC,a4174c80d019043eed0227c1b2bedf99f432f5fdb27149595810c8299fb09f9d,8bZWGbYbKJh3moNwjehdfY,true,0.00007254,0.00015848,112.397,115118.7 +2025-08-06 15:08:52,BTC,dc132e44e053d9023cf20374aea200850efd1e88de28d1344f5a1343bbc0519f,2DYE61SvSs9Q1DsfKjXd21,true,0.00062190,0.00015854,112.439,115131.4 +2025-08-06 15:13:27,BTC,8cbae88fd430eb257960738577bbba7d5be72b3f8799954fa309d288749431ee,,true,-0.00014869,0.00007615,54.007,115199.95 \ No newline at end of file