kedder / ofxstatement

Tool to convert proprietary bank statement to OFX format, suitable for importing to GnuCash or other personal finance applications.
GNU General Public License v3.0
279 stars 61 forks source link

Fails to produce ofx file due to AssertionError & ValueError under Debian #306

Open kirmaha opened 3 weeks ago

kirmaha commented 3 weeks ago

Hello,

I'm trying to use ofxstatement for the first time. I tested it with both Debian packages (Debian testing trixie) and Python3.12 virtual environment. Plugins tested here are properly listed as installed when using ofxstatement list-plugins.

In both cases, I end up with no ofx file and the same errors, which is why I assume ofxstatement causes this rather than the plugins.

  1. Using triodosbe plugin on CSV statement from that bank :
    $ ofxstatement convert -t triodosbe file.csv file.ofx
    Traceback (most recent call last):
    File "/usr/bin/ofxstatement", line 33, in <module>
    sys.exit(load_entry_point('ofxstatement==0.7.1', 'console_scripts', 'ofxstatement')())
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    File "/usr/lib/python3/dist-packages/ofxstatement/tool.py", line 198, in run
    return args.func(args)
         ^^^^^^^^^^^^^^^
    File "/usr/lib/python3/dist-packages/ofxstatement/tool.py", line 169, in convert
    statement = parser.parse()
              ^^^^^^^^^^^^^^
    File "/usr/lib/python3/dist-packages/ofxstatement/plugins/triodosbe.py", line 38, in parse
    stmt = super(TriodosBeParser, self).parse()
         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    File "/usr/lib/python3/dist-packages/ofxstatement/parser.py", line 48, in parse
    stmt_line.assert_valid()
    File "/usr/lib/python3/dist-packages/ofxstatement/statement.py", line 159, in assert_valid
    assert self.id or self.check_no or self.refnum
         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  2. Using argenta plugin on XLSX statement from that bank :
    
    $ ofxstatement convert -t argenta file.xlsx test.ofx
    /usr/lib/python3/dist-packages/openpyxl/styles/stylesheet.py:237: UserWarning: Workbook contains no default style, apply openpyxl's default
    warn("Workbook contains no default style, apply openpyxl's default")
    Traceback (most recent call last):
    File "/usr/lib/python3/dist-packages/ofxstatement/plugins/argenta.py", line 69, in validate
    self._validate()
    File "/usr/lib/python3/dist-packages/ofxstatement/plugins/argenta.py", line 94, in _validate
    assert self.header == statement_header_row
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    AssertionError

During handling of the above exception, another exception occurred:

Traceback (most recent call last): File "/usr/bin/ofxstatement", line 33, in sys.exit(load_entry_point('ofxstatement==0.7.1', 'console_scripts', 'ofxstatement')()) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/lib/python3/dist-packages/ofxstatement/tool.py", line 198, in run return args.func(args) ^^^^^^^^^^^^^^^ File "/usr/lib/python3/dist-packages/ofxstatement/tool.py", line 167, in convert parser = p.get_parser(args.input) ^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/lib/python3/dist-packages/ofxstatement/plugins/argenta.py", line 185, in get_parser return ArgentaStatementParser(fin) ^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/lib/python3/dist-packages/ofxstatement/plugins/argenta.py", line 50, in init self.validate() File "/usr/lib/python3/dist-packages/ofxstatement/plugins/argenta.py", line 71, in validate raise ValueError(e) ValueError



This is the missing piece for me to handle comptability on Linux. I sincerly hope ofxstatement can work sustainably. Note that I have very little knowledge in dev (yet I'm willing to add plugins for a few banks if ofxstatement can run on my computer).
Thank you !
kirmaha commented 3 weeks ago

I took a look at the triodos' plugin file and argenta's plugin file, and I figured that argenta plugin has been made with Dutch-speaking version of statements in mind, when I use French-speaking version... so I should probably fork the plugin and make a French-speaking version out of it.

Regarding Triodos, I did not find anything "meaningful for someone who does not understand Python", but one can now assume it may be more of a plugin issue than an ofxstatement issue?

kedder commented 3 weeks ago

Hi @kirmaha , yeah, this looks like an issue with those plugins. You can try asking argenta devs to support French version as well, would be simpler to maintain than a fork.

For triodos it looks the plugin needs a small update to work. I'm not familiar with the file format that bank produces, but I expect one of the columns in that csv file would indicate a unique transaction id (or a check number or some reference number). It needs to be added to a statement object. Probably the easiest way to do this is to add the column number into this dictionary:

https://github.com/renardeau/ofxstatement-be-triodos/blob/10f4d35c95beda3211886ef02dba0a3e65c6e57b/src/ofxstatement/plugins/triodosbe.py#L20-L25

kirmaha commented 2 weeks ago

Thank you @kedder ! Having such a quick reply makes me more confident about investing time in ofxstatement community plug-ins (as an active project) rather than developing bash scripts to arrange csv structures (which would suit my usecase and no-one else's).

I seen that the be-argenta plug-in has not been maintained for years, but that Nick-DT forked it two months ago and made it compatible with statements in both FR and NL languages : Nick-DT's ofxstatement-be-argenta. If it works well (which is still to be tested), should'nt it take over as the offical be-argenta plug-in ?

Edit: after a few tests on Dutch-speaking and French-speaking version of statements:

kedder commented 2 weeks ago

@kirmaha I'm happy to update the link in the list of plugins to reference the more up-to-date fork, but there's one problem: pypi has a released package: ofxstatement-be-argenta 1.0.5 by the original author, which would be installed if someone does pip install ofxstatement-be-argenta. That could cause a bit of confusion.

Would it be possible to release the fork under some new name (e.g. ofxstatement-be-argenta-ng) or ask the original author to pull the changes and make a new release?