Fix Indian Bank extraction and add shared multi-format dates for all banks

This commit is contained in:
A R R R Associates
2026-07-16 21:56:08 +05:30
parent 43ab9c9aae
commit d9ae1519a4
10 changed files with 340 additions and 311 deletions
@@ -2,7 +2,7 @@ from __future__ import annotations
import re, pandas as pd
from pathlib import Path
from .base import *
from .common import find
from .common import DATE_TOKEN_PATTERN, date_iso, find
class SBIModernParser(BaseParser):
bank_name='State Bank of India'; parser_name='SBIModernParser'
@@ -14,12 +14,12 @@ class SBIModernParser(BaseParser):
meta.customer_name=find(r'Account Name\s*:?\s*([^\n]+)',text)
meta.account_number=find(r'Account Number\s*:?\s*([0-9X*]+)',text)
meta.ifsc=find(r'IFS Code\s*:?\s*([A-Z0-9]+)',text)
m=re.search(r'Account Statement from\s*(\d{1,2}\s+[A-Za-z]{3}\s+\d{4})\s+to\s+(\d{1,2}\s+[A-Za-z]{3}\s+\d{4})',text,re.I)
m=re.search(rf'Account Statement from\s*({DATE_TOKEN_PATTERN})\s+to\s+({DATE_TOKEN_PATTERN})', text, re.I)
if m:
meta.period_from=pd.to_datetime(m.group(1),dayfirst=True).strftime('%Y-%m-%d'); meta.period_to=pd.to_datetime(m.group(2),dayfirst=True).strftime('%Y-%m-%d')
meta.period_from=date_iso(m.group(1)); meta.period_to=date_iso(m.group(2))
meta.opening_balance=amount(find(r'Balance as on[^\n]*\n\s*([\d,]+\.\d{2})',text))
# Format A: date details ref debit credit balance
date_re=re.compile(r'^\s*(\d{1,2}\s+[A-Za-z]{3}\s+\d{4})\s+(.*)$')
date_re=re.compile(rf'^\s*({DATE_TOKEN_PATTERN})\s+(.*)$', re.I)
rows=[]; cur=None; page=1
for line in text.splitlines():
if '\f' in line: page += line.count('\f')
@@ -66,11 +66,11 @@ class SBIOtherParser(BaseParser):
meta.customer_name=find(r'Account Name\s*:\s*([^\n]+)',text)
meta.account_number=find(r'Account Number\s*:?\s*([0-9X*]+)',text)
meta.ifsc=find(r'IFS Code\s*:?\s*([A-Z0-9]+)',text)
m=re.search(r'Account Statement from\s*(\d{1,2}\s+[A-Za-z]{3}\s+\d{4})\s+to\s+(\d{1,2}\s+[A-Za-z]{3}\s+\d{4})',text,re.I)
m=re.search(rf'Account Statement from\s*({DATE_TOKEN_PATTERN})\s+to\s+({DATE_TOKEN_PATTERN})', text, re.I)
if m:
meta.period_from=pd.to_datetime(m.group(1),dayfirst=True).strftime('%Y-%m-%d'); meta.period_to=pd.to_datetime(m.group(2),dayfirst=True).strftime('%Y-%m-%d')
meta.period_from=date_iso(m.group(1)); meta.period_to=date_iso(m.group(2))
m=re.search(r'Balance as on\s+[^\n]+\n',text,re.I)
date_re=re.compile(r'^\s*(\d{1,2}\s+[A-Za-z]{3}\s+\d{4})\s+(\d{1,2}\s+[A-Za-z]{3}\s+\d{4})\s+(.*)$')
date_re=re.compile(rf'^\s*({DATE_TOKEN_PATTERN})\s+({DATE_TOKEN_PATTERN})\s+(.*)$', re.I)
rows=[]; cur=None; page=1
for line in text.splitlines():
if '\f' in line: page += line.count('\f')