mirror of
https://github.com/Gnucash/gnucash.git
synced 2025-02-25 18:55:30 -06:00
2003-02-04 Benoit Gr�goire <bock@step.polymtl.ca>
* src/import-export/import-backend.c: Add heuristic for duplicate matching by check number. * doc/README.OFX: Update git-svn-id: svn+ssh://svn.gnucash.org/repo/gnucash/trunk@7945 57a11ea4-9604-0410-9ed3-97b8803252fd
This commit is contained in:
parent
bc9f171dd7
commit
dc840a9ef7
@ -1,3 +1,8 @@
|
||||
2003-02-04 Benoit Grégoire <bock@step.polymtl.ca>
|
||||
|
||||
* src/import-export/import-backend.c: Add heuristic for duplicate matching by check number.
|
||||
* doc/README.OFX: Update
|
||||
|
||||
2003-02-04 Derek Atkins <derek@ihtfp.com>
|
||||
|
||||
* src/import-export/qif-import/qif-file.scm: mark "splits" as negative
|
||||
|
@ -56,8 +56,8 @@ Implemented features (some of these are from the generic import module):
|
||||
-Commodity import and matching, for investment transactions.
|
||||
-Transaction duplicate detection, using the unique OFX transaction ID. Even if
|
||||
downloaded twice, transactions are only imported once.
|
||||
-Transaction duplicate detection, using amount, date, full or partial memo,
|
||||
full or partial description.
|
||||
-Transaction duplicate detection, using amount, date, check number,
|
||||
full or partial memo, full or partial description.
|
||||
-"Destination" account matching, using exact string match on either
|
||||
memo or description.
|
||||
-Saves ALL transaction data currently supported by LibOFX.
|
||||
@ -66,7 +66,9 @@ Implemented features (some of these are from the generic import module):
|
||||
-Files containing multiple statements are supported, and transactions can
|
||||
be matched at the same time.
|
||||
|
||||
4.The import process and transaction matching----------
|
||||
|
||||
4.The import process and transaction matching
|
||||
----------
|
||||
|
||||
First, you must successfully download an OFX response file from your bank.
|
||||
|
||||
@ -228,9 +230,9 @@ version of GnuCash from.
|
||||
(4) When I import in OFX/HBCI, and change the destination account in the
|
||||
matcher, why doesn't other transaction with the same memo/description change?
|
||||
|
||||
The matcher already "learns" where transactions are assigned. The only problem
|
||||
is thatcurrently, it only uses what it has learned on the next import.
|
||||
Re-processing the list during the import process is a feature you can hopefor
|
||||
The matcher already "learns" where transactions are assigned. The only problem
|
||||
is thatcurrently, it only uses what it has learned on the next import.
|
||||
Re-processing the list during the import process is a feature you can hopefor
|
||||
early in the 1.8 series.
|
||||
|
||||
(5) Can GnuCash support QFX files (Quicken Financial eXchange?)
|
||||
|
@ -493,68 +493,88 @@ static void split_find_match (GNCImportTransInfo * trans_info,
|
||||
/*DEBUG("heuristics: probability - 10 (date)"); */
|
||||
}
|
||||
|
||||
|
||||
/* Memo heuristics */
|
||||
if((strcmp(xaccSplitGetMemo(gnc_import_TransInfo_get_fsplit (trans_info)),
|
||||
xaccSplitGetMemo(split))
|
||||
==0))
|
||||
{
|
||||
/* An exact match of description gives a +2 */
|
||||
prob = prob+2;
|
||||
/* DEBUG("heuristics: probability + 2 (memo)"); */
|
||||
/* Check number heuristics */
|
||||
if(strlen(xaccTransGetNum(gnc_import_TransInfo_get_trans (trans_info)))!=0)
|
||||
{
|
||||
if((strcmp(xaccTransGetNum
|
||||
(gnc_import_TransInfo_get_trans (trans_info)),
|
||||
xaccTransGetNum(xaccSplitGetParent(split)))
|
||||
==0))
|
||||
{
|
||||
/*An exact match of the Check number gives a +5 */
|
||||
prob = prob+5;
|
||||
/*DEBUG("heuristics: probability + 5 (Check number)");*/
|
||||
}
|
||||
}
|
||||
else if((strncmp(xaccSplitGetMemo(gnc_import_TransInfo_get_fsplit (trans_info)),
|
||||
xaccSplitGetMemo(split),
|
||||
strlen(xaccSplitGetMemo(split))/2)
|
||||
==0))
|
||||
|
||||
/* Memo heuristics */
|
||||
if(strlen(xaccSplitGetMemo(gnc_import_TransInfo_get_fsplit (trans_info)))!=0)
|
||||
{
|
||||
/* Very primitive fuzzy match worth +1. This matches the
|
||||
first 50% of the strings to skip annoying transaction
|
||||
number some banks seem to include in the memo but someone
|
||||
should write something more sophisticated */
|
||||
prob = prob+1;
|
||||
/*DEBUG("heuristics: probability + 1 (memo)"); */
|
||||
if((strcmp(xaccSplitGetMemo(gnc_import_TransInfo_get_fsplit (trans_info)),
|
||||
xaccSplitGetMemo(split))
|
||||
==0))
|
||||
{
|
||||
/* An exact match of description gives a +2 */
|
||||
prob = prob+2;
|
||||
/* DEBUG("heuristics: probability + 2 (memo)"); */
|
||||
}
|
||||
else if((strncmp(xaccSplitGetMemo(gnc_import_TransInfo_get_fsplit (trans_info)),
|
||||
xaccSplitGetMemo(split),
|
||||
strlen(xaccSplitGetMemo(split))/2)
|
||||
==0))
|
||||
{
|
||||
/* Very primitive fuzzy match worth +1. This matches the
|
||||
first 50% of the strings to skip annoying transaction
|
||||
number some banks seem to include in the memo but someone
|
||||
should write something more sophisticated */
|
||||
prob = prob+1;
|
||||
/*DEBUG("heuristics: probability + 1 (memo)"); */
|
||||
}
|
||||
}
|
||||
|
||||
/* Description heuristics */
|
||||
if((strcmp(xaccTransGetDescription
|
||||
(gnc_import_TransInfo_get_trans (trans_info)),
|
||||
xaccTransGetDescription(xaccSplitGetParent(split)))
|
||||
==0))
|
||||
{
|
||||
/*An exact match of Description gives a +2 */
|
||||
prob = prob+2;
|
||||
/*DEBUG("heuristics: probability + 2 (description)");*/
|
||||
}
|
||||
else if((strncmp(xaccTransGetDescription
|
||||
(gnc_import_TransInfo_get_trans (trans_info)),
|
||||
xaccTransGetDescription(xaccSplitGetParent(split)),
|
||||
strlen(xaccTransGetDescription
|
||||
(gnc_import_TransInfo_get_trans (trans_info)))/2)
|
||||
==0))
|
||||
if(strlen(xaccTransGetDescription(gnc_import_TransInfo_get_trans (trans_info)))!=0)
|
||||
{
|
||||
/* Very primitive fuzzy match worth +1. This matches the
|
||||
first 50% of the strings to skip annoying transaction
|
||||
number some banks seem to include in the memo but someone
|
||||
should write something more sophisticated */
|
||||
prob = prob+1;
|
||||
/*DEBUG("heuristics: probability + 1 (description)"); */
|
||||
if((strcmp(xaccTransGetDescription
|
||||
(gnc_import_TransInfo_get_trans (trans_info)),
|
||||
xaccTransGetDescription(xaccSplitGetParent(split)))
|
||||
==0))
|
||||
{
|
||||
/*An exact match of Description gives a +2 */
|
||||
prob = prob+2;
|
||||
/*DEBUG("heuristics: probability + 2 (description)");*/
|
||||
}
|
||||
else if((strncmp(xaccTransGetDescription
|
||||
(gnc_import_TransInfo_get_trans (trans_info)),
|
||||
xaccTransGetDescription(xaccSplitGetParent(split)),
|
||||
strlen(xaccTransGetDescription
|
||||
(gnc_import_TransInfo_get_trans (trans_info)))/2)
|
||||
==0))
|
||||
{
|
||||
/* Very primitive fuzzy match worth +1. This matches the
|
||||
first 50% of the strings to skip annoying transaction
|
||||
number some banks seem to include in the memo but someone
|
||||
should write something more sophisticated */
|
||||
prob = prob+1;
|
||||
/*DEBUG("heuristics: probability + 1 (description)"); */
|
||||
}
|
||||
}
|
||||
|
||||
/*Online id punishment*/
|
||||
if ((gnc_import_get_trans_online_id(xaccSplitGetParent(split))!=NULL) &&
|
||||
(strlen(gnc_import_get_trans_online_id(xaccSplitGetParent(split)))>0))
|
||||
{
|
||||
/* If the pref is to show match even with online ID's,
|
||||
puninsh the transaction with online if */
|
||||
puninsh the transaction with online id */
|
||||
prob = prob-3;
|
||||
}
|
||||
|
||||
|
||||
/* Is the probability high enough? Otherwise do nothing and return. */
|
||||
if(prob < display_threshold)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
/* The probability is high enough, so allocate an object
|
||||
here. Allocating it only when it's actually being used is
|
||||
probably quite some performance gain. */
|
||||
@ -563,8 +583,8 @@ static void split_find_match (GNCImportTransInfo * trans_info,
|
||||
match_info->probability = prob;
|
||||
match_info->split = split;
|
||||
match_info->trans = xaccSplitGetParent(split);
|
||||
|
||||
|
||||
|
||||
|
||||
/* Append that to the list. */
|
||||
trans_info->match_list =
|
||||
g_list_append(trans_info->match_list,
|
||||
|
Loading…
Reference in New Issue
Block a user