Mercurial > louis > ofxstatement-us-hsbc
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 |
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 | 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) |