new scripts parse edenred account movements and parse r4 movements

This commit is contained in:
Roger Oriol
2025-10-11 16:44:53 +02:00
parent 77f3a31b02
commit 6a1c57862a
4 changed files with 842 additions and 5 deletions

View File

@@ -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
)