new scripts parse edenred account movements and parse r4 movements
This commit is contained in:
@@ -302,6 +302,48 @@ def save_statements(
|
||||
print(f"Saved statements to {output_file}")
|
||||
|
||||
|
||||
def filter_markdown_by_date(markdown_report: str, from_date: str) -> str:
|
||||
"""
|
||||
Filter markdown table to only include rows with dates >= from_date.
|
||||
"""
|
||||
import re
|
||||
from datetime import datetime
|
||||
|
||||
if not from_date:
|
||||
return markdown_report
|
||||
|
||||
try:
|
||||
filter_date = datetime.strptime(from_date, "%Y-%m-%d")
|
||||
except ValueError:
|
||||
print(f"Warning: Invalid date format '{from_date}'. Expected YYYY-MM-DD. Ignoring filter.")
|
||||
return markdown_report
|
||||
|
||||
lines = markdown_report.split('\n')
|
||||
filtered_lines = []
|
||||
|
||||
for line in lines:
|
||||
if '|' not in line:
|
||||
filtered_lines.append(line)
|
||||
continue
|
||||
|
||||
parts = line.split('|')
|
||||
if len(parts) < 7:
|
||||
filtered_lines.append(line)
|
||||
continue
|
||||
|
||||
fecha_col = parts[1].strip()
|
||||
date_match = re.search(r'(\d{4})-(\d{2})-(\d{2})', fecha_col)
|
||||
|
||||
if date_match:
|
||||
line_date = datetime.strptime(f"{date_match.group(1)}-{date_match.group(2)}-{date_match.group(3)}", "%Y-%m-%d")
|
||||
if line_date >= filter_date:
|
||||
filtered_lines.append(line)
|
||||
else:
|
||||
filtered_lines.append(line)
|
||||
|
||||
return '\n'.join(filtered_lines)
|
||||
|
||||
|
||||
def convert_file_to_markdown(path: str):
|
||||
converter = DocumentConverter()
|
||||
result = converter.convert(path)
|
||||
@@ -312,12 +354,17 @@ async def main():
|
||||
parser = argparse.ArgumentParser(
|
||||
description="Parse R4 report from XLSX format")
|
||||
parser.add_argument("source", help="Path to the input XLSX file")
|
||||
parser.add_argument("--from", dest="from_date", help="Filter transactions from this date (YYYY-MM-DD)")
|
||||
args = parser.parse_args()
|
||||
|
||||
if not args.source.endswith(".xlsx"):
|
||||
parser.error("Input file must have .xlsx format")
|
||||
|
||||
markdown_report = convert_file_to_markdown(args.source)
|
||||
|
||||
if args.from_date:
|
||||
markdown_report = filter_markdown_by_date(markdown_report, args.from_date)
|
||||
|
||||
beancount_statements = await get_beancount_price_statements(
|
||||
markdown_report
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user