Skip to content

Commit

Permalink
In import CLI, put debits earlier than credits.
Browse files Browse the repository at this point in the history
Usually 借方 / debits comes earlier than 貸方 / credits.
  • Loading branch information
xkikeg committed Feb 10, 2025
1 parent 863bd4f commit f7bae80
Show file tree
Hide file tree
Showing 7 changed files with 67 additions and 63 deletions.
48 changes: 26 additions & 22 deletions cli/src/import/single_entry.rs
Original file line number Diff line number Diff line change
Expand Up @@ -214,45 +214,49 @@ impl Txn {
Some(_) => syntax::ClearState::Uncleared,
None => syntax::ClearState::Pending,
});
let add_charges = |posts: &mut Vec<syntax::plain::Posting<'a>>| {
for chrg in &self.charges {
posts.push(syntax::Posting {
clear_state: syntax::ClearState::Uncleared,
amount: Some(self.to_posting_amount(chrg.amount.into_borrowed())),
balance: None,
metadata: vec![syntax::Metadata::KeyValueTag {
key: Cow::Borrowed("Payee"),
value: syntax::MetadataValue::Text(chrg.payee.as_str().into()),
}],
..syntax::Posting::new("Expenses:Commissions")
});
}
};
if self.amount.value.is_sign_positive() {
posts.push(syntax::Posting {
clear_state: post_clear,
amount: Some(self.dest_amount()),
..syntax::Posting::new(self.dest_account.as_deref().unwrap_or("Income:Unknown"))
});
posts.push(syntax::Posting {
clear_state: syntax::ClearState::Uncleared,
amount: Some(self.amount()),
balance: self.balance.as_ref().map(|x| as_syntax_amount(x).into()),
..syntax::Posting::new(src_account)
});
} else if self.amount.value.is_sign_negative() {
add_charges(&mut posts);
posts.push(syntax::Posting {
clear_state: syntax::ClearState::Uncleared,
amount: Some(self.amount()),
balance: self.balance.as_ref().map(|x| as_syntax_amount(x).into()),
..syntax::Posting::new(src_account)
clear_state: post_clear,
amount: Some(self.dest_amount()),
..syntax::Posting::new(self.dest_account.as_deref().unwrap_or("Income:Unknown"))
});
} else if self.amount.value.is_sign_negative() {
posts.push(syntax::Posting {
clear_state: post_clear,
amount: Some(self.dest_amount()),
..syntax::Posting::new(self.dest_account.as_deref().unwrap_or("Expenses:Unknown"))
});
} else {
// warning log or error?
return Err(ImportError::Other("credit and debit both zero".to_string()));
}
for chrg in &self.charges {
add_charges(&mut posts);
posts.push(syntax::Posting {
clear_state: syntax::ClearState::Uncleared,
amount: Some(self.to_posting_amount(chrg.amount.into_borrowed())),
balance: None,
metadata: vec![syntax::Metadata::KeyValueTag {
key: Cow::Borrowed("Payee"),
value: syntax::MetadataValue::Text(chrg.payee.as_str().into()),
}],
..syntax::Posting::new("Expenses:Commissions")
amount: Some(self.amount()),
balance: self.balance.as_ref().map(|x| as_syntax_amount(x).into()),
..syntax::Posting::new(src_account)
});
} else {
// warning log or error?
return Err(ImportError::Other("credit and debit both zero".to_string()));
}
let metadata = self
.comments
Expand Down
16 changes: 8 additions & 8 deletions cli/tests/testdata/csv_multi_currency.ledger
Original file line number Diff line number Diff line change
@@ -1,32 +1,32 @@
2020/07/08 * 被仕向外貨送金 OKANE. INC.
! Income:Unknown -24000.11 USD
Assets:Okane Bank 24000.11 USD = 31691.78 USD
! Income:Unknown -24000.11 USD

2020/07/11 * 円普通預金より振替(デビット)
Assets:Wire -2675 JPY
Assets:Okane Bank 23.45 CHF @ 114.0500 JPY = 23.45 CHF
Assets:Wire -2675 JPY

2020/07/11 * (785403) Hamachi Super
Assets:Okane Bank -23.45 CHF = 0.00 CHF
Expenses:Grocery 23.45 CHF
Assets:Okane Bank -23.45 CHF = 0.00 CHF

2020/07/29 * 外貨普通預金(スイスフラン)へ振替
Assets:Okane Bank -1097.94 USD @ 0.9108 CHF = 31691.78 USD
Assets:Wire 1000.003752 CHF
Assets:Okane Bank -1097.94 USD @ 0.9108 CHF = 31691.78 USD

2020/07/29 * 外貨普通預金(米ドル)より振替
Assets:Wire -1000.00 CHF
Assets:Okane Bank 1000.00 CHF = 1000.00 CHF
Assets:Wire -1000.00 CHF

2020/07/29 * 外貨普通預金(ユーロ)へ振替
Assets:Okane Bank -2353.40 USD = 29338.38 USD
Assets:Wire 2000.00 EUR @ 1.1767 USD
Assets:Okane Bank -2353.40 USD = 29338.38 USD

2020/07/29 * 外貨普通預金(米ドル)より振替
Assets:Wire -2000.00 EUR
Assets:Okane Bank 2000.00 EUR = 2000.00 EUR
Assets:Wire -2000.00 EUR

2020/07/30 * 円普通預金へ振替
Assets:Okane Bank -2740.65 USD @ 145.5200 JPY = 26597.73 USD
Assets:Wire 398819 JPY
Assets:Okane Bank -2740.65 USD @ 145.5200 JPY = 26597.73 USD

16 changes: 8 additions & 8 deletions cli/tests/testdata/csv_template.ledger
Original file line number Diff line number Diff line change
@@ -1,40 +1,40 @@
2024/07/30 * Credit Interest - SCHWAB1 INT 06/27-07/29
; SCHWAB1 INT 06/27-07/29
Income:Interest -11.81 USD
Assets:Brokers:Schrank 11.81 USD
Income:Interest -11.81 USD

2024/08/29 * Credit Interest - SCHWAB1 INT 07/30-08/28
; SCHWAB1 INT 07/30-08/28
Income:Interest -6.60 USD
Assets:Brokers:Schrank 6.60 USD
Income:Interest -6.60 USD

2024/09/24 * NRA Tax Adj - VANGUARD HIGH DIVIDEND YIELD ETF
; VANGUARD HIGH DIVIDEND YIELD ETF
Assets:Brokers:Schrank -0.26 USD
Expenses:Tax:Income 0.26 USD
Assets:Brokers:Schrank -0.26 USD

2024/09/24 * Reinvest Dividend - VANGUARD HIGH DIVIDEND YIELD ETF
; VANGUARD HIGH DIVIDEND YIELD ETF
Income:Dividend -1.72 USD
Assets:Brokers:Schrank 1.72 USD
Income:Dividend -1.72 USD

2024/09/24 * Service Fee - WIRED FUNDS FEE
; WIRED FUNDS FEE
Assets:Brokers:Schrank -15.00 USD
Assets:Receivables:Advances 15.00 USD
Assets:Brokers:Schrank -15.00 USD

2024/09/24 * Misc Cash Entry - WAIVE WIRE FEE
; WAIVE WIRE FEE
Assets:Receivables:Advances -15.00 USD
Assets:Brokers:Schrank 15.00 USD
Assets:Receivables:Advances -15.00 USD

2024/09/24 * Wire Sent - WIRED FUNDS DISBURSED
; WIRED FUNDS DISBURSED
Assets:Brokers:Schrank -8000.00 USD
! Assets:Wire:Unknown 8000.00 USD
Assets:Brokers:Schrank -8000.00 USD

2024/09/24 * Reinvest Shares - VANGUARD HIGH DIVIDEND YIELD ETF
; VANGUARD HIGH DIVIDEND YIELD ETF
Assets:Brokers:Schrank -1.46 USD
Assets:Brokers:Schrank 0.0114 VYM @ 127.90 USD
Assets:Brokers:Schrank -1.46 USD

6 changes: 3 additions & 3 deletions cli/tests/testdata/index_amount.ledger
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
2021/09/01 * cashback
! Income:Misc -50.00 USD
Liabilities:Okane Card 50.00 USD
! Income:Misc -50.00 USD

2021/09/02 * (31415) Migros
Liabilities:Okane Card -28.00 USD
Expenses:Grocery 28.00 USD
Liabilities:Okane Card -28.00 USD

2021/09/03 * (14142) FooBar
Liabilities:Okane Card -1.45 USD
! Expenses:Unknown 1.45 USD
Liabilities:Okane Card -1.45 USD

24 changes: 12 additions & 12 deletions cli/tests/testdata/iso_camt.ledger
Original file line number Diff line number Diff line change
@@ -1,56 +1,56 @@
2021/10/01 * Initial Balance
Equity:Adjustments -0.00 CHF
Assets:Okane Bank 0.00 CHF = 100.00 CHF
Equity:Adjustments -0.00 CHF

2021/10/01 * (20211031/1/1) Jiro Okane
Assets:Wire:Money Bank -1000.00 CHF
Assets:Okane Bank 1000.00 CHF
Assets:Wire:Money Bank -1000.00 CHF

2021/10/02 * Taro and Jiro
Income:Salary -6000.00 CHF
Assets:Okane Bank 6000.00 CHF
Income:Salary -6000.00 CHF

2021/10/03 * (20211031/3/1) Herr Haus Okane und Frau Hause Okane
Assets:Okane Bank -1880.00 CHF
Expenses:House 1880.00 CHF
Assets:Okane Bank -1880.00 CHF

2021/10/03 * (20211031/3/2) OKANE VERSICHERUNGEN
Assets:Okane Bank -120.00 CHF
! Expenses:Insurance 120.00 CHF
Assets:Okane Bank -120.00 CHF

2021/10/04=2021/10/05 * (20211031/4/1) 山田商店
Assets:Okane Bank -10.10 CHF
Expenses:Grocery 10.10 CHF
Assets:Okane Bank -10.10 CHF

2021/10/05 * (20211031/5/1) EURO GROCERY
Assets:Okane Bank -14.15 CHF
Expenses:Grocery 11.58 EUR @ 1.092059 CHF
Expenses:Commissions 1.50 CHF
; Payee: Okane Bank (fee)
Expenses:Commissions 0.02 EUR @ 1.092059 CHF
; Payee: Okane Bank (fee)
Assets:Okane Bank -14.15 CHF

2021/10/06 * (20211031/6/1) Hanako Steinmann
Assets:Okane Bank -24.75 CHF
! Expenses:Unknown 24.75 CHF
Assets:Okane Bank -24.75 CHF

2021/10/07=2021/10/08 * (20211031/7/1) OTHER BANK NAIROBI
Assets:Okane Bank -52.00 CHF
Expenses:Cash 50.00 CHF
Expenses:Commissions 2.00 CHF
; Payee: Okane Bank (fee)
Assets:Okane Bank -52.00 CHF

2021/10/08=2021/10/10 * (20211031/8/1) OKANE BANK ATM
Assets:Okane Bank -437.60 CHF
Expenses:Cash 400.00 EUR @ 1.094 CHF
Assets:Okane Bank -437.60 CHF

2021/12/31 * unknown payee
! Income:Unknown -0.05 CHF
Assets:Okane Bank 0.05 CHF
! Income:Unknown -0.05 CHF

2022/01/03 * (20220103/9/1) unknown payee
! Income:Unknown -10014.00 CHF
Assets:Okane Bank 10000.00 CHF = 4561.90 CHF
Expenses:Commissions 14.00 CHF
; Payee: Okane Bank (fee)
! Income:Unknown -10014.00 CHF

6 changes: 3 additions & 3 deletions cli/tests/testdata/label_credit_debit.ledger
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
2021/09/01 * 五反田ATM
Assets:Cash -5000 JPY
Assets:Okane Bank 5000 JPY = 12345 JPY
Assets:Cash -5000 JPY

2021/09/02 * (31415) Migros
Assets:Okane Bank -2800 JPY = 9545 JPY
Expenses:Grocery 2800 JPY
Assets:Okane Bank -2800 JPY = 9545 JPY

2021/09/03 * (14142) FooBar
Assets:Okane Bank -145 JPY = 9400 JPY
! Expenses:Unknown 145 JPY
Assets:Okane Bank -145 JPY = 9400 JPY

14 changes: 7 additions & 7 deletions cli/tests/testdata/viseca.ledger
Original file line number Diff line number Diff line change
@@ -1,34 +1,34 @@
2020/07/23=2020/07/24 * Your payment - Thank you
Assets:Wire -1803.05 CHF
Liabilities:Okane Card 1803.05 CHF
Assets:Wire -1803.05 CHF

2020/08/04=2020/08/05 * certain, phone company CH
Liabilities:Okane Card -5.00 CHF
Expenses:Telecom 5.00 CHF
Liabilities:Okane Card -5.00 CHF

2020/08/10=2020/08/11 * Europe Gas AT
Liabilities:Okane Card -52.10 CHF
! Expenses:Car:Gas 46.88 EUR @ 1.092432 CHF
Expenses:Commissions 0.90 CHF
; Payee: Okane Card (fee)
Liabilities:Okane Card -52.10 CHF

2020/08/11=2020/08/12 * GOOGLE *YouTubePremium, g.co/helppay# GB
Liabilities:Okane Card -23.90 CHF
Expenses:Amusement 23.90 CHF
Liabilities:Okane Card -23.90 CHF

2020/12/13=2020/12/15 * PAYPAL *STEAM GAMES, 35314369001 GB
Liabilities:Okane Card -19.35 CHF
! Expenses:Unknown 19.00 CHF
Expenses:Commissions 0.35 CHF
; Payee: Okane Card (fee)
Liabilities:Okane Card -19.35 CHF

2021/03/05=2021/02/24 * HM.COM, NEUENDORF CH
! Income:Unknown -92.90 CHF
Liabilities:Okane Card 92.90 CHF
! Income:Unknown -92.90 CHF

2022/08/11=2022/07/23 * AMZNPRIME DE AMZN.DE/I, Luxembourg LU
! Income:Unknown -7.99 EUR @ 0.988364 CHF
Liabilities:Okane Card 8.05 CHF
Expenses:Commissions -0.15 CHF
; Payee: Okane Card (fee)
! Income:Unknown -7.99 EUR @ 0.988364 CHF

0 comments on commit f7bae80

Please sign in to comment.