Skip to content

Commit c396b12

Browse files
committed
initial support for ISIN, AMFI code mapping for schemes.
1 parent ccd8bc0 commit c396b12

File tree

6 files changed

+41
-7
lines changed

6 files changed

+41
-7
lines changed

casparser/process/cas_detailed.py

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
from .regex import DETAILED_DATE_RE, FOLIO_RE, SCHEME_RE, REGISTRAR_RE
1010
from .regex import CLOSE_UNITS_RE, NAV_RE, OPEN_UNITS_RE, VALUATION_RE
1111
from .regex import DESCRIPTION_TAIL_RE, DIVIDEND_RE, TRANSACTION_RE
12+
from .utils import isin_search
1213

1314

1415
def parse_header(text):
@@ -86,7 +87,7 @@ def process_detailed_text(text):
8687
# "Registrar" column to the previous line
8788
if re.search(REGISTRAR_RE, line):
8889
line = "\t\t".join([lines[idx + 1], line])
89-
elif m := re.search(DESCRIPTION_TAIL_RE, line, re.I | re.DOTALL):
90+
if m := re.search(DESCRIPTION_TAIL_RE, line, re.I | re.DOTALL):
9091
description_tail = m.group(1).rstrip()
9192
line = line.replace(description_tail, "")
9293
else:
@@ -118,17 +119,21 @@ def process_detailed_text(text):
118119
advisor = m.group(3)
119120
if advisor is not None:
120121
advisor = advisor.strip()
122+
rta = m.group(4).strip()
123+
rta_code = m.group(1).strip()
124+
isin, amfi = isin_search(scheme, rta, rta_code)
121125
curr_scheme_data = {
122126
"scheme": scheme,
123127
"advisor": advisor,
124-
"rta_code": m.group(1).strip(),
125-
"rta": m.group(4).strip(),
128+
"rta_code": rta_code,
129+
"rta": rta,
130+
"isin": isin,
131+
"amfi": amfi,
126132
"open": Decimal(0.0),
127133
"close": Decimal(0.0),
128134
"valuation": {"date": None, "value": 0, "nav": 0},
129135
"transactions": [],
130136
}
131-
balance = Decimal(0.0)
132137
if not curr_scheme_data:
133138
continue
134139
if m := re.search(OPEN_UNITS_RE, line):

casparser/process/cas_summary.py

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
from ..enums import CASFileType
77
from ..exceptions import HeaderParseError
88
from .regex import SUMMARY_DATE_RE, SUMMARY_ROW_RE
9+
from .utils import isin_search
910

1011

1112
def parse_header(text):
@@ -51,11 +52,16 @@ def process_summary_text(text):
5152
if curr_scheme_data.get("scheme") != scheme:
5253
if curr_scheme_data:
5354
folios[current_folio]["schemes"].append(curr_scheme_data)
55+
rta = m.group(8).strip()
56+
rta_code = m.group(2).strip()
57+
isin, amfi = isin_search(scheme, rta, rta_code)
5458
curr_scheme_data = {
5559
"scheme": scheme,
5660
"advisor": "N/A",
57-
"rta_code": m.group(2).strip(),
58-
"rta": m.group(8).strip(),
61+
"rta_code": rta_code,
62+
"rta": rta,
63+
"isin": isin,
64+
"amfi": amfi,
5965
"open": Decimal(m.group(4).replace(",", "_")),
6066
"close": Decimal(m.group(4).replace(",", "_")),
6167
"valuation": {

casparser/process/utils.py

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
from typing import Optional, Tuple
2+
3+
from casparser_isin import MFISINDb
4+
5+
6+
def isin_search(scheme_name: str, rta: str, rta_code: str) -> Tuple[Optional[str], Optional[str]]:
7+
"""
8+
Search isin db for ISIN and AMFI code
9+
10+
:param scheme_name: Scheme name from CAS
11+
:param rta: RTA for the scheme
12+
:param rta_code: Scheme RTA code
13+
"""
14+
try:
15+
with MFISINDb() as db:
16+
scheme_data = db.isin_lookup(scheme_name, rta, rta_code)
17+
return scheme_data.isin, scheme_data.amfi_code
18+
except ValueError:
19+
return None, None

casparser/types.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
from datetime import date
22
from decimal import Decimal
3-
from typing import List, TypedDict, Union
3+
from typing import Optional, List, TypedDict, Union
44

55
from .enums import FileType, TransactionType
66

@@ -45,6 +45,8 @@ class SchemeType(TypedDict, total=False):
4545
advisor: str
4646
rta_code: str
4747
rta: str
48+
isin: Optional[str]
49+
amfi: Optional[str]
4850
open: Union[Decimal, float]
4951
close: Union[Decimal, float]
5052
valuation: SchemeValuationType

requirements.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
casparser-isin==0.1.0
12
click==7.1.2
23
colorama==0.4.4
34
pdfminer.six==20201018

setup.cfg

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ include_package_data = True
2121
packages = find:
2222
python_requires = >=3.8
2323
install_requires =
24+
casparser==0.1.0
2425
click==7.1.2
2526
colorama==0.4.4
2627
pdfminer.six==20201018

0 commit comments

Comments
 (0)