[GNC-dev] Online ID matching for OFX import

Mike Alexander mta at umich.edu
Sun Jan 5 22:44:09 EST 2020

On 5 Jan 2020, at 19:46, John Ralls wrote:

> Complexity is not a valid reason to reject a solution to a complex 
> problem unless there's a simpler solution that solves it *just as 
> well*. Hackish solutions--and I'm just as guilty on that front as I 
> wrote the strncmp hack--are far more likely to trip us up again and 
> again every time someone else pops up with another use case. Piling up 
> hacks creates technical debt: we're already going through the account 
> list twice because of an another hack for a libofx peculiarity. We 
> need to work out a correct general solution that doesn't pile up more 
> technical debt. We have quite enough of that already.
> Whether the user can do something about it or not it saves us work on 
> a support email or bug report later if we at least log that we 
> couldn't match because the online account number has multiple matches.
> You're right about the list, the allocations would be expensive and 
> pointless since we can't do anything with it. All we need is an 
> Account* for the first partial match and either an int to count the 
> partials (for the error message) or a gboolean to record that we had 
> more than one partial.
> We can promote Daniel Ditman's create_online_id to import-utilities 
> and add stripping the space there then use it everywhere we're 
> creating an online id and avoid that pass as well. I've started on 
> this already, I'll have a PR tomorrow sometime.

So what do you want me to do?  It seems to me that a simple 90% solution 
would be for gnc_import_select_account to refuse to return an account 
whose commodity didn't match the one given to it (if any).  The case 
that led me to this idea was where there is an account with a partial 
match in the wrong commodity but no account with a full match.  If you 
do the full match if possible and partial match if not solution it 
becomes hard to get it to create an account for the full match if a 
partial match account already exists.  This will happen in my books if I 
add a new security to my TIAA/CREF accounts.  The parent account will be 
a partial match for the wrong commodity, but there won't be a full match 
and I want it to let me create or select one.

I can either change gnc_import_select_account to never return an account 
that doesn't match the commodity it's given or add a parameter to it 
telling it whether to make this test.  I looked at the calls to it and I 
don't think making this test unconditionally will cause problems.  Many 
of the calls don't pass a commodity so it won't matter anyway.  For that 
matter, if we compare the commodity it might be ok to just do the 
partial match and not look for a full match instead.  The description of 
gnc_import_select_account says that it warns if the found account's 
commodity doesn't match, but this is not correct.  It only uses that 
commodity when creating a new account.

Just punting and returning the first match, partial or full, isn't 
really an option since it will make it difficult to import my OFX files. 
  Worse, when I do select an account it will use the commodity's CUSIP 
as the online ID and this is not unique since the same commodity can 
(and does) exist in multiple parent accounts.  This will lead to random 
matches to the wrong account on future imports.

The bottom line is that I think we should have it return the first 
account with the correct commodity and a partial match to the online ID>


More information about the gnucash-devel mailing list