Wiki source code of Intrastatmeldungen
Version 1.1 by Dimitri Rupp on 2026/07/08 12:34
Hide last authors
| author | version | line-number | content |
|---|---|---|---|
![]() |
1.1 | 1 | {{box cssClass="floatinginfobox" title="**Auf dieser Seite**"}} |
| 2 | {{toc/}} | ||
| 3 | {{/box}} | ||
| 4 | |||
| 5 | = 📦 Intrastatmeldungen (Automatisierung) = | ||
| 6 | |||
| 7 | {{info}} | ||
| 8 | **Zweck:** Automatisierte Erstellung von Intrastat-Importmeldungen aus Lieferantenrechnungen — mit KI-gestützter Extraktion und automatischer KN8-Code-Ermittlung. | ||
| 9 | {{/info}} | ||
| 10 | |||
| 11 | == Überblick == | ||
| 12 | |||
| 13 | Dieses Projekt automatisiert die Erstellung von Intrastat-Importmeldungen aus Lieferantenrechnungen. Der Prozess besteht aus mehreren Schritten: | ||
| 14 | |||
| 15 | 1. Einlesen einer Basis-Exceldatei | ||
| 16 | 1. Auslesen der zugehörigen PDF-Rechnungen | ||
| 17 | 1. KI-gestützte Extraktion der Artikelinformationen | ||
| 18 | 1. Automatische Ermittlung fehlender KN8-Codes | ||
| 19 | 1. Erstellung einer Datenerfassungsdatei | ||
| 20 | 1. Manuelle Prüfung der Ergebnisse | ||
| 21 | 1. Konvertierung in das endgültige CSV-Format für die Intrastatmeldung | ||
| 22 | |||
| 23 | == Prozessübersicht == | ||
| 24 | |||
| 25 | {{mermaid}} | ||
| 26 | flowchart TD | ||
| 27 | A["Basis-Excel"] --> B["run_basis.py"] | ||
| 28 | B --> C["basis_plus_datacollection.py"] | ||
| 29 | C --> D["PDF-Auswertung<br/>datacollection.py"] | ||
| 30 | D --> E["fehlende KN8-Codes ergänzen<br/>find_missing_kn8.py"] | ||
| 31 | E --> F["Datenerfassung.xlsx"] | ||
| 32 | F --> G["manuelle Prüfung"] | ||
| 33 | G --> H["run_converter.py"] | ||
| 34 | H --> I["converter.py"] | ||
| 35 | I --> J["Import_MM_YYYY.csv"] | ||
| 36 | {{/mermaid}} | ||
| 37 | |||
| 38 | == Projektstruktur == | ||
| 39 | |||
| 40 | {{code}} | ||
| 41 | 01_Basis_PDF/ Eingabedateien (Basis-Excel + PDFs) | ||
| 42 | 02_Review/ erzeugte Datenerfassung | ||
| 43 | 03_Checked/ manuell geprüfte Exceldateien | ||
| 44 | 04_Final/ finale CSV-Dateien | ||
| 45 | |||
| 46 | basis_plus_datacollection.py | ||
| 47 | datacollection.py | ||
| 48 | find_missing_kn8.py | ||
| 49 | converter.py | ||
| 50 | run_basis.py | ||
| 51 | run_converter.py | ||
| 52 | core.py | ||
| 53 | {{/code}} | ||
| 54 | |||
| 55 | == Module == | ||
| 56 | |||
| 57 | === core.py === | ||
| 58 | |||
| 59 | Zentrale Hilfsfunktionen: RunConfig, Konfigurationsdaten für einen Lauf, Dateiprüfungen, Extraktion von Monat und Jahr aus Dateinamen, allgemeine Hilfsfunktionen. | ||
| 60 | |||
| 61 | === run_basis.py === | ||
| 62 | |||
| 63 | Startet den Verarbeitungsprozess: | ||
| 64 | |||
| 65 | * sucht neue Basisdateien | ||
| 66 | * extrahiert Monat, Jahr und Firmenname | ||
| 67 | * erstellt eine RunConfig | ||
| 68 | * startet ##basis_plus_datacollection## | ||
| 69 | * verschiebt erfolgreich bearbeitete Dateien nach **Erledigt**, fehlerhafte nach **Fehler** | ||
| 70 | |||
| 71 | === basis_plus_datacollection.py === | ||
| 72 | |||
| 73 | Hauptpipeline und Kern des Projekts — verantwortlich für: Einlesen der Basisdatei, Verarbeitung aller Rechnungs-PDFs, Zusammenführen der Daten, Bereinigung, Ergänzung fehlender KN8-Codes und Erzeugen der Datenerfassungsdatei. | ||
| 74 | |||
| 75 | === datacollection.py === | ||
| 76 | |||
| 77 | Extrahiert Informationen aus PDF-Rechnungen. | ||
| 78 | |||
| 79 | **Technologien:** PyPDF2, PyMuPDF (fitz), pdf2image, Tesseract OCR, DocTR OCR, OpenAI API. | ||
| 80 | |||
| 81 | **Extrahierte Informationen:** Warenbeschreibung, Handelspartnerland, Ursprungsland, Eigenmasse, Anzahl, Nettopreis, KN8-Code (falls vorhanden). Die KI liefert strukturierte JSON-Daten, die anschließend in ein Pandas-DataFrame überführt werden. | ||
| 82 | |||
| 83 | === find_missing_kn8.py === | ||
| 84 | |||
| 85 | Ermittelt fehlende KN8-Codes: | ||
| 86 | |||
| 87 | 1. Normalisierung der Warenbeschreibung | ||
| 88 | 1. Erstellung von OpenAI-Embeddings | ||
| 89 | 1. Vergleich mit vorhandenen KN8-Daten | ||
| 90 | 1. Auswahl der ähnlichsten Warentexte | ||
| 91 | 1. Zuordnung des wahrscheinlichsten KN8-Codes | ||
| 92 | |||
| 93 | Verwendet: ##text-embedding-3-small##, SequenceMatcher, Vektorvergleich. | ||
| 94 | |||
| 95 | === converter.py === | ||
| 96 | |||
| 97 | Erstellt die finale CSV-Datei: Einlesen der geprüften Datenerfassung, Gruppierung gleicher Positionen, Summierung der Mengen und Werte, Formatierung der Zahlen, Export ohne Spaltenüberschriften. Ausgabe: ##Import_MM_YYYY_Firma.csv##. | ||
| 98 | |||
| 99 | == Verwendete Bibliotheken == | ||
| 100 | |||
| 101 | * **Datenverarbeitung:** pandas, numpy | ||
| 102 | * **PDF:** PyPDF2, PyMuPDF, pdf2image | ||
| 103 | * **OCR:** Tesseract, DocTR | ||
| 104 | * **KI:** OpenAI API, Embeddings, GPT | ||
| 105 | * **Sonstiges:** pathlib, difflib, json, tomllib, pycountry | ||
| 106 | |||
| 107 | == Benötigte Eingaben == | ||
| 108 | |||
| 109 | Basis-Exceldatei · Ordner mit Rechnungs-PDFs · KN8-Datei · OpenAI-API-Key. | ||
| 110 | |||
| 111 | == Fehlerbehandlung == | ||
| 112 | |||
| 113 | Das Projekt prüft u. a. die Existenz aller Eingabedateien, gültige Excel-Dateien, vorhandene PDF-Verzeichnisse sowie Monat/Jahr im Dateinamen. Fehlerhafte Eingaben werden in den Ordner **Fehler** verschoben. | ||
| 114 | |||
| 115 | == Server == | ||
| 116 | |||
| 117 | Technischer User: **intrastat** (mit ##sudo su - intrastat## arbeiten). Das Projekt liegt unter ##/home/intrastat/scripts/intrastat/##. | ||
| 118 | |||
| 119 | **Geplanter Ablauf:** | ||
| 120 | |||
| 121 | * Basisdateien + Rechnungs-PDFs kommen auf ##\\atvietfs01\daten\IT\Intrastat## | ||
| 122 | * Fabric-Gateway-Verbindung zu File- und KI-Server | ||
| 123 | * Fabric-Notebook überwacht den Fileserver; sind Dateien vorhanden → Kopie auf Fabric | ||
| 124 | * KI-Server überwacht Fabric; sind Dateien vorhanden → Skripte laufen durch | ||
| 125 | * Ergebnisse wieder in umgekehrter Richtung auf den Fileserver | ||
| 126 |
