annotate src/ofxstatement/plugins/us_hsbc/transactions.py @ 8:164da24a2997

Minor adjustments Made those changes a couple weeks ago, can't exactly remember why :s.
author Louis Opter <kalessin@kalessin.fr>
date Thu, 01 Dec 2016 17:14:11 -0800
parents 829eb62755b0
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
7
829eb62755b0 First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff changeset
1 # Copyright (c) 2016, Louis Opter <louis@opter.org>
829eb62755b0 First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff changeset
2 #
829eb62755b0 First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff changeset
3 # This file is part of ofxstatement-us-hsbc.
829eb62755b0 First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff changeset
4 #
829eb62755b0 First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff changeset
5 # ofxstatement-us-hsbc is free software: you can redistribute it and/or
829eb62755b0 First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff changeset
6 # modify it under the terms of the GNU General Public License as
829eb62755b0 First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff changeset
7 # published by the Free Software Foundation, either version 3 of the
829eb62755b0 First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff changeset
8 # License, or (at your option) any later version.
829eb62755b0 First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff changeset
9 #
829eb62755b0 First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff changeset
10 # ofxstatement-us-hsbc is distributed in the hope that it will be
829eb62755b0 First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff changeset
11 # useful, but WITHOUT ANY WARRANTY; without even the implied warranty
829eb62755b0 First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff changeset
12 # of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
829eb62755b0 First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff changeset
13 # GNU General Public License for more details.
829eb62755b0 First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff changeset
14 #
829eb62755b0 First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff changeset
15 # You should have received a copy of the GNU General Public License
829eb62755b0 First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff changeset
16 # along with this program. If not, see <http://www.gnu.org/licenses/>.
829eb62755b0 First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff changeset
17
829eb62755b0 First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff changeset
18 import dateutil.parser
829eb62755b0 First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff changeset
19 import re
829eb62755b0 First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff changeset
20
829eb62755b0 First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff changeset
21 from ofxstatement.statement import StatementLine
829eb62755b0 First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff changeset
22 from typing import Callable, Dict
829eb62755b0 First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff changeset
23
829eb62755b0 First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff changeset
24 from .record import Record
829eb62755b0 First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff changeset
25
829eb62755b0 First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff changeset
26
829eb62755b0 First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff changeset
27 def _enrich_date_user(sl: StatementLine, record: Record, date: str) -> None:
829eb62755b0 First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff changeset
28 if not date:
829eb62755b0 First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff changeset
29 return
829eb62755b0 First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff changeset
30
829eb62755b0 First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff changeset
31 dt = dateutil.parser.parse(date, dayfirst=False, yearfirst=False)
829eb62755b0 First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff changeset
32 sl.date_user = dt.replace(year=min(dt.year, sl.date.year))
829eb62755b0 First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff changeset
33
829eb62755b0 First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff changeset
34
829eb62755b0 First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff changeset
35 def _enrich_check(sl: StatementLine, record: Record) -> None:
829eb62755b0 First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff changeset
36 sl.check_no = record.original_description.split("-")[-1].strip()
829eb62755b0 First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff changeset
37 sl.memo = record.user_description
829eb62755b0 First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff changeset
38
829eb62755b0 First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff changeset
39
829eb62755b0 First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff changeset
40 def _enrich_cash_withdrawal(sl: StatementLine, record: Record) -> None:
829eb62755b0 First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff changeset
41 desc = record.original_description.replace("CASH WITHDRAWAL ON", "").strip()
829eb62755b0 First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff changeset
42 date, sl.memo = [part.strip() for part in desc.split("AT", 1)]
829eb62755b0 First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff changeset
43 _enrich_date_user(sl, record, date)
829eb62755b0 First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff changeset
44
829eb62755b0 First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff changeset
45
829eb62755b0 First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff changeset
46 def _enrich_purchase(sl: StatementLine, record: Record) -> None:
829eb62755b0 First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff changeset
47 # ORIGINAL_DESCRIPTION has more informations than SIMPLE_DESCRIPTION even
829eb62755b0 First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff changeset
48 # if it's a bit less readable:
829eb62755b0 First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff changeset
49 sl.memo = record.original_description
829eb62755b0 First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff changeset
50 sl.memo = re.sub(r"^PURCHASE (-|(MADE )?ON)", "", sl.memo, re.I).strip()
829eb62755b0 First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff changeset
51
829eb62755b0 First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff changeset
52
829eb62755b0 First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff changeset
53 def _enrich_credit(sl: StatementLine, record: Record) -> None:
829eb62755b0 First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff changeset
54 prefix = "CREDIT RECEIVED ON"
829eb62755b0 First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff changeset
55 sl.memo = record.original_description.replace(prefix, "").strip()
829eb62755b0 First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff changeset
56 parts = [part.strip() for part in sl.memo.split("FROM", 1)]
829eb62755b0 First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff changeset
57 if len(parts) > 1:
829eb62755b0 First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff changeset
58 date, sl.memo = parts
829eb62755b0 First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff changeset
59 _enrich_date_user(sl, record, date)
829eb62755b0 First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff changeset
60
829eb62755b0 First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff changeset
61
829eb62755b0 First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff changeset
62 def _enrich_deposit(sl: StatementLine, record: Record) -> None:
829eb62755b0 First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff changeset
63 sl.memo = record.original_description.replace("DEPOSIT FROM", "").strip()
829eb62755b0 First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff changeset
64
829eb62755b0 First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff changeset
65
829eb62755b0 First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff changeset
66 def _enrich_payment(sl: StatementLine, record: Record) -> None:
829eb62755b0 First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff changeset
67 sl.memo = record.original_description
829eb62755b0 First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff changeset
68 sl.memo = re.sub(r"^(ONLINE )?PAYMENT (TO|-)", "", sl.memo, re.I).strip()
829eb62755b0 First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff changeset
69
829eb62755b0 First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff changeset
70
829eb62755b0 First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff changeset
71 def _enrich_generic(sl: StatementLine, record: Record) -> None:
829eb62755b0 First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff changeset
72 sl.memo = record.original_description
829eb62755b0 First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff changeset
73
829eb62755b0 First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff changeset
74 _TRNTYPE_TO_METHOD: Dict[str, Callable[[StatementLine, Record], None]] = {
829eb62755b0 First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff changeset
75 "CHECK": _enrich_check,
829eb62755b0 First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff changeset
76 "CASH": _enrich_cash_withdrawal,
829eb62755b0 First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff changeset
77 "PURCHASE": _enrich_purchase,
829eb62755b0 First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff changeset
78 "CREDIT": _enrich_credit,
829eb62755b0 First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff changeset
79 "DEP": _enrich_deposit,
829eb62755b0 First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff changeset
80 "PAYMENT": _enrich_payment,
829eb62755b0 First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff changeset
81 }
829eb62755b0 First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff changeset
82
829eb62755b0 First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff changeset
83
829eb62755b0 First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff changeset
84 def enrich(sl: StatementLine, record: Record) -> None:
8
164da24a2997 Minor adjustments
Louis Opter <kalessin@kalessin.fr>
parents: 7
diff changeset
85 sl.payee = record.simple_description or record.category
7
829eb62755b0 First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff changeset
86 _TRNTYPE_TO_METHOD.get(sl.trntype, _enrich_generic)(sl, record)