diff --git a/.github/workflows/test.yaml b/.github/workflows/test.yaml
index 7e80f9c0..c6021dd5 100644
--- a/.github/workflows/test.yaml
+++ b/.github/workflows/test.yaml
@@ -62,6 +62,7 @@ jobs:
cd examples
python importers/acme.py test tests/acme --verbose
python importers/csvbank.py test tests/csvbank --verbose
+ python importers/ofx.py test tests/ofx --verbose
python importers/utrade.py test tests/utrade --verbose
- name: Run example ledger.import
run: |
diff --git a/examples/Downloads/ofxdownload.ofx b/examples/Downloads/ofxdownload.ofx
index f8e6a0ec..6fd34775 100644
--- a/examples/Downloads/ofxdownload.ofx
+++ b/examples/Downloads/ofxdownload.ofx
@@ -8,4 +8,4 @@ COMPRESSION:NONE
OLDFILEUID:NONE
NEWFILEUID:NONE
-0INFOLogin successful20140112083600.212[-7:MST]ENGAMEX3101FMPWeb310120140112083600exampleuser00INFOUSD379700001111222falsedownload90Days379700001111222trueBe308f58246398a74c52504a8b06d5f0520140112050000.000[-7:MST]20140112050000.000[-7:MST]DEBIT20131201000000.000[-7:MST]-9.99320133350353869664320133350353869664SPOTIFY USA 287701309012600720879 WWW.SPOTIFY.COMDEBIT20131202000000.000[-7:MST]-61.71320133360368356592320133360368356592GOAT TOWN 1200000549NEW YORK 071000163 2126873641DEBIT20131202000000.000[-7:MST]-17.75320133360368356593320133360368356593AMC VILLAGE 7 #2110 NEW YORK 12010365699 212-982-2116DEBIT20131205000000.000[-7:MST]-42.4320133390419136515320133390419136515CAFE MOGADOR 0048 NEW YORK 969881 212-677-2226DEBIT20131209000000.000[-7:MST]-34.38320133430477621377320133430477621377UNION MARKET - HOUSNEW YORK 15827 GROCERY STOREDEBIT20131209000000.000[-7:MST]-13.5320133430477621378320133430477621378SUNSHINE CINEMA 5429NEW YORK 208001222 2122607289DEBIT20131211000000.000[-7:MST]-21.96320133450009270816320133450009270816UNION MARKET - HOUSNEW YORK 13775 GROCERY STOREDEBIT20131211000000.000[-7:MST]-14.47320133450009270817320133450009270817WHOLEFDS HOU 10236 02124201320042002720272124201320DEBIT20131214000000.000[-7:MST]-56.43320133480059384557320133480059384557MACY'S #003 HERALD SNEW YORK 00307963916 MACY'SDEBIT20131215000000.000[-7:MST]-13320133490073491495320133490073491495WHOLEFDS HOU 10236 02124201320042402720282124201320DEBIT20131216000000.000[-7:MST]-60.23320133500088330906320133500088330906PAPYRUS #2302 000002NEW YORK 14252302002 2162527300DEBIT20131216000000.000[-7:MST]-7320133500088330907320133500088330907LES CAFES 400 LAFAYENEW YORK 10156320131 2157761076-2356.3820131218050000.000[-7:MST]falsefalsefalse
+0INFOLogin successful20140112083600.212[-7:MST]ENGAMEX3101FMPWeb310120140112083600exampleuser00INFOUSD379700001111222falsedownload90Days379700001111222trueBe308f58246398a74c52504a8b06d5f0520140112050000.000[-7:MST]20140112050000.000[-7:MST]DEBIT20131201000000.000[-7:MST]-9.99320133350353869664320133350353869664SPOTIFY USA 287701309012600720879 WWW.SPOTIFY.COMDEBIT20131202000000.000[-7:MST]-61.71320133360368356592320133360368356592GOAT TOWN 1200000549NEW YORK 071000163 2126873641DEBIT20131202000000.000[-7:MST]-17.75320133360368356593320133360368356593AMC VILLAGE 7 #2110 NEW YORK 12010365699 212-982-2116DEBIT20131205000000.000[-7:MST]-42.4320133390419136515320133390419136515CAFE MOGADOR 0048 NEW YORK 969881 212-677-2226DEBIT20131209000000.000[-7:MST]-34.38320133430477621377320133430477621377UNION MARKET - HOUSNEW YORK 15827 GROCERY STOREDEBIT20131209000000.000[-7:MST]-13.5320133430477621378320133430477621378SUNSHINE CINEMA 5429NEW YORK 208001222 2122607289DEBIT20131211000000.000[-7:MST]-21.96320133450009270816320133450009270816UNION MARKET - HOUSNEW YORK 13775 GROCERY STOREDEBIT20131211000000.000[-7:MST]-14.47320133450009270817320133450009270817WHOLEFDS HOU 10236 02124201320042002720272124201320DEBIT20131214000000.000[-7:MST]-56.43320133480059384557320133480059384557MACY'S / #003 HERALD S / NEW YORK 00307963916 MACY'SDEBIT20131215000000.000[-7:MST]-13320133490073491495320133490073491495WHOLEFDS HOU 10236 02124201320042402720282124201320DEBIT20131216000000.000[-7:MST]-60.23320133500088330906320133500088330906PAPYRUS #2302 000002NEW YORK 14252302002 2162527300DEBIT20131216000000.000[-7:MST]-7320133500088330907320133500088330907LES CAFES 400 LAFAYENEW YORK 10156320131 2157761076-2356.3820131218050000.000[-7:MST]falsefalsefalse
diff --git a/examples/import.py b/examples/import.py
index ec847e74..42bab371 100755
--- a/examples/import.py
+++ b/examples/import.py
@@ -37,12 +37,14 @@ def clean_up_descriptions(extracted_entries):
clean_entries = []
for entry in extracted_entries:
if isinstance(entry, data.Transaction):
- if entry.narration and " / " in entry.narration:
- left_part, _ = entry.narration.split(" / ")
- entry = entry._replace(narration=left_part)
- if entry.payee and " / " in entry.payee:
- left_part, _ = entry.payee.split(" / ")
- entry = entry._replace(payee=left_part)
+ if entry.narration:
+ narration, sep, _ = entry.narration.rpartition(" / ")
+ if sep:
+ entry = entry._replace(narration=narration)
+ if entry.payee:
+ payee, sep, _ = entry.payee.rpartition(" / ")
+ if sep:
+ entry = entry._replace(payee=payee)
clean_entries.append(entry)
return clean_entries
diff --git a/examples/importers/ofx.py b/examples/importers/ofx.py
index 553b0312..d7d3e2a0 100644
--- a/examples/importers/ofx.py
+++ b/examples/importers/ofx.py
@@ -36,6 +36,7 @@
import beangulp
from beangulp import mimetypes
+from beangulp.testing import main
class BalanceType(enum.Enum):
@@ -322,3 +323,8 @@ def build_transaction(stmttrn, flag, account, currency):
return data.Transaction(
fileloc, date, flag, payee, narration, data.EMPTY_SET, data.EMPTY_SET, [posting]
)
+
+
+if __name__ == "__main__":
+ importer = Importer("379700001111222", "Liabilities:US:CreditCard", "bofa")
+ main(importer)
diff --git a/examples/tests/ofx/ofxdownload.ofx b/examples/tests/ofx/ofxdownload.ofx
new file mode 100644
index 00000000..6fd34775
--- /dev/null
+++ b/examples/tests/ofx/ofxdownload.ofx
@@ -0,0 +1,11 @@
+OFXHEADER:100
+DATA:OFXSGML
+VERSION:102
+SECURITY:NONE
+ENCODING:USASCII
+CHARSET:1252
+COMPRESSION:NONE
+OLDFILEUID:NONE
+NEWFILEUID:NONE
+
+0INFOLogin successful20140112083600.212[-7:MST]ENGAMEX3101FMPWeb310120140112083600exampleuser00INFOUSD379700001111222falsedownload90Days379700001111222trueBe308f58246398a74c52504a8b06d5f0520140112050000.000[-7:MST]20140112050000.000[-7:MST]DEBIT20131201000000.000[-7:MST]-9.99320133350353869664320133350353869664SPOTIFY USA 287701309012600720879 WWW.SPOTIFY.COMDEBIT20131202000000.000[-7:MST]-61.71320133360368356592320133360368356592GOAT TOWN 1200000549NEW YORK 071000163 2126873641DEBIT20131202000000.000[-7:MST]-17.75320133360368356593320133360368356593AMC VILLAGE 7 #2110 NEW YORK 12010365699 212-982-2116DEBIT20131205000000.000[-7:MST]-42.4320133390419136515320133390419136515CAFE MOGADOR 0048 NEW YORK 969881 212-677-2226DEBIT20131209000000.000[-7:MST]-34.38320133430477621377320133430477621377UNION MARKET - HOUSNEW YORK 15827 GROCERY STOREDEBIT20131209000000.000[-7:MST]-13.5320133430477621378320133430477621378SUNSHINE CINEMA 5429NEW YORK 208001222 2122607289DEBIT20131211000000.000[-7:MST]-21.96320133450009270816320133450009270816UNION MARKET - HOUSNEW YORK 13775 GROCERY STOREDEBIT20131211000000.000[-7:MST]-14.47320133450009270817320133450009270817WHOLEFDS HOU 10236 02124201320042002720272124201320DEBIT20131214000000.000[-7:MST]-56.43320133480059384557320133480059384557MACY'S / #003 HERALD S / NEW YORK 00307963916 MACY'SDEBIT20131215000000.000[-7:MST]-13320133490073491495320133490073491495WHOLEFDS HOU 10236 02124201320042402720282124201320DEBIT20131216000000.000[-7:MST]-60.23320133500088330906320133500088330906PAPYRUS #2302 000002NEW YORK 14252302002 2162527300DEBIT20131216000000.000[-7:MST]-7320133500088330907320133500088330907LES CAFES 400 LAFAYENEW YORK 10156320131 2157761076-2356.3820131218050000.000[-7:MST]falsefalsefalse
diff --git a/examples/tests/ofx/ofxdownload.ofx.beancount b/examples/tests/ofx/ofxdownload.ofx.beancount
new file mode 100644
index 00000000..62688d46
--- /dev/null
+++ b/examples/tests/ofx/ofxdownload.ofx.beancount
@@ -0,0 +1,41 @@
+;; Account: Liabilities:US:CreditCard
+;; Date: 2013-12-18
+;; Name: bofa.ofx
+
+2013-12-01 * "SPOTIFY USA 28770130901 / 2600720879 WWW.SPOTIFY.COM"
+ Liabilities:US:CreditCard -9.99 USD
+
+2013-12-02 * "GOAT TOWN 1200000549NEW YORK / 071000163 2126873641"
+ Liabilities:US:CreditCard -61.71 USD
+
+2013-12-02 * "AMC VILLAGE 7 #2110 NEW YORK / 12010365699 212-982-2116"
+ Liabilities:US:CreditCard -17.75 USD
+
+2013-12-05 * "CAFE MOGADOR 0048 NEW YORK / 969881 212-677-2226"
+ Liabilities:US:CreditCard -42.4 USD
+
+2013-12-09 * "UNION MARKET - HOUSNEW YORK / 15827 GROCERY STORE"
+ Liabilities:US:CreditCard -34.38 USD
+
+2013-12-09 * "SUNSHINE CINEMA 5429NEW YORK / 208001222 2122607289"
+ Liabilities:US:CreditCard -13.5 USD
+
+2013-12-11 * "UNION MARKET - HOUSNEW YORK / 13775 GROCERY STORE"
+ Liabilities:US:CreditCard -21.96 USD
+
+2013-12-11 * "WHOLEFDS HOU 10236 02124201320 / 042002720272124201320"
+ Liabilities:US:CreditCard -14.47 USD
+
+2013-12-14 * "MACY'S / #003 HERALD S / NEW YORK / 00307963916 MACY'S"
+ Liabilities:US:CreditCard -56.43 USD
+
+2013-12-15 * "WHOLEFDS HOU 10236 02124201320 / 042402720282124201320"
+ Liabilities:US:CreditCard -13 USD
+
+2013-12-16 * "PAPYRUS #2302 000002NEW YORK / 14252302002 2162527300"
+ Liabilities:US:CreditCard -60.23 USD
+
+2013-12-16 * "LES CAFES 400 LAFAYENEW YORK / 10156320131 2157761076"
+ Liabilities:US:CreditCard -7 USD
+
+2013-12-19 balance Liabilities:US:CreditCard -2356.38 USD