Steuerbescheinigungen von Ecoligo, Bettervest und anderen secupay basierten Crowdfunding Plattformen in CSV Tabelle konvertieren

By

in ,

Ecoligo und Bettervest sind zwei innovative Plattformen, die sich darauf spezialisiert haben, nachhaltige Investitionsmöglichkeiten zu bieten. Ecoligo ermöglicht es Privatpersonen, in Solarprojekte in aufstrebenden Märkten zu investieren, um den Ausbau erneuerbarer Energien voranzutreiben und gleichzeitig attraktive Renditen zu erzielen. Bettervest konzentriert sich auf Crowdinvesting in Energieeffizienzprojekte und erneuerbare Energien, bei denen Menschen von Einsparungen und ökologischen Verbesserungen profitieren können. Beide Unternehmen tragen dazu bei, die Finanzierungslücke im Bereich grüner Technologien zu schließen und bieten gleichzeitig eine nachhaltige Investitionsmöglichkeit.

Beide Plattformen nutzen secupay als Zahlungsdienstleister. Secupay kümmert sich dabei auch um das Bezahlen der Kapitalsteuer und sonstiger Abgaben. Für die jährliche Steuererklärung erstellt Secupay eine PDF Datei für jedes Projekt, welche auf der jeweiligen Platform heruntergeladen werden kann.

Hat man in viele Projekte investiert, so erhält man entsprechend viele PDF Dateien. Um den Übertrag der Daten in die Steuererklärung zu vereinfachen kann das folgende Pythonskript genutzt werden (KEINE GARANTIE AUF RICHTIGKEIT!). Dies gibt mit dem Kommando

Bash
python3 extract.py --output csv *.pdf

eine CSV Tabelle mit den Daten aus allen PDFs aus, welches in Excel oder andere Tabellenkalkulationen kopiert werden kann. Hier das Skript:

Python
import re
import PyPDF2
import sys
import csv
import argparse

def extract_info_and_table(pdf_path):
    # Load PDF file
    with open(pdf_path, 'rb') as pdf_file:
        # Initialize PDF reader
        pdf_reader = PyPDF2.PdfReader(pdf_file)
        pdf_text = ""

        # Extract text from each page
        for page in pdf_reader.pages:
            pdf_text += page.extract_text()

    # Extract string between "das Investment" and "in 202"
    match = re.search(r'das Investment(.*?)in 202', pdf_text, re.DOTALL)
    investment_info = match.group(1).strip() if match else "Not Found"

    # Extract table
    table_start = pdf_text.find('wurden für das Investment')
    table_end = pdf_text.find('Pulsnitz,den', table_start)
    table_text = pdf_text[table_start:table_end].strip()

    # Process table content into dictionary format
    table_dict = {}
    table_lines = table_text.splitlines()
    for line in table_lines:
        parts = re.split(r'(\d+,\d+\s*)', line.strip())
        if len(parts) == 3:
            description = parts[0].strip()
            amount = parts[1].strip()
            table_dict[description] = amount

    return investment_info, table_dict

def main():
    # Setup argument parser
    parser = argparse.ArgumentParser(description='Extract information and tables from PDFs and output as CSV or console.')
    parser.add_argument('pdf_files', nargs='+', help='Paths to PDF files.')
    parser.add_argument('--output', choices=['csv', 'console'], default='console', help='Output format: csv or console.')
    args = parser.parse_args()

    # Initialize aggregated data for CSV output
    aggregated_data = {}
    investment_infos = []

    # Process each PDF file
    for pdf_file in args.pdf_files:
        investment_info, table_dict = extract_info_and_table(pdf_file)

        if args.output == 'csv':
            investment_infos.append(investment_info)
            for key, value in table_dict.items():
                if key not in aggregated_data:
                    aggregated_data[key] = []
                aggregated_data[key].append(value)

    if args.output == 'csv':
        # Write the aggregated data to CSV format
        csv_writer = csv.writer(sys.stdout, quoting=csv.QUOTE_ALL)
        
        # Write the header row
        header = ['Description'] + investment_infos
        csv_writer.writerow(header)

        # Write the rows
        for key, values in aggregated_data.items():
            row = [key] + values
            csv_writer.writerow(row)
    
    else:
        # Print each PDF content to console
        for pdf_file in args.pdf_files:
            investment_info, table_dict = extract_info_and_table(pdf_file)
            print(f"Extracted Information from {pdf_file}:")
            print(f"Investment Info: {investment_info}")
            print("Table Content:")
            for description, amount in table_dict.items():
                print(f"{description}: {amount}")
            print("\n")

if __name__ == "__main__":
    main()

Gegebenenfalls müssen vorher die Python-Module installiert werden. Am Einfachsten geht dies mit pip:

Bash
pip install --upgrade PyPDF2


Comments

Leave a Reply

Your email address will not be published. Required fields are marked *