joschetan's picture
Update parser_bkt.py
e648ec3 verified
Raw
History Blame Contribute Delete
2.46 kB
import re
def extract_bkt_items(pdf_lines):
parsed_items = []
seen_identifiers = set()
port_destination, country_destination = "", ""
is_original_page = True
current_hs_code, current_license_no, current_license_date = "", "", ""
for line in pdf_lines:
line_str = line.strip()
if not line_str: continue
lower_line = line_str.lower()
if "duplicate for" in lower_line or "triplicate for" in lower_line or "extra copy" in lower_line:
if "original for recipient" not in lower_line:
is_original_page = False
if "original for recipient" in lower_line:
is_original_page = True
if not is_original_page: continue
if "final destination" in lower_line:
parts_dest = line_str.split(":")
port_destination = parts_dest[-1].strip().upper() if len(parts_dest) > 1 else ""
hs_match = re.search(r'\b(401[1236]\d{4}|843[123]\d{4})\b', line_str)
if hs_match:
current_hs_code = hs_match.group(1)
continue
if "sub-total" in lower_line or "sub total" in lower_line:
nums = re.findall(r'[\d,]+\.\d{2,3}|\b\d+\b', line_str)
if nums and current_hs_code:
qty = nums[0] if len(nums) > 0 else ""
taxable_val = nums[-3] if len(nums) >= 3 else (nums[1] if len(nums) > 1 else "")
igst_amt = nums[-2] if len(nums) >= 2 else ""
unique_key = f"{current_hs_code}_{qty}_{taxable_val}"
if unique_key in seen_identifiers: continue
seen_identifiers.add(unique_key)
item_dict = {
"raw_parts": line_str.split(),
"line_text": line_str.upper(),
"hs_code": current_hs_code,
"license_no": current_license_no,
"license_date": current_license_date,
"quantity": qty,
"value": taxable_val,
"taxable_value": taxable_val,
"igst_rate": "18.00",
"igst_amt": igst_amt,
"nums": nums,
"port_destination": port_destination,
"country_destination": country_destination
}
parsed_items.append(item_dict)
current_hs_code = ""
return parsed_items