# Article Data Manager Article Data Manager ist ein eigenständiges Python-Projekt zur Pflege, Validierung und späteren Erzeugung der statischen `article-data.json` für den bestehenden Roll Calculator. Status: frühe Entwicklungsphase. Phase 0 legt Struktur, Dokumentation, Beispieldaten und erste technische Leitplanken an. Der produktive Merge-Prozess und eine Weboberfläche sind noch nicht implementiert. ## Problemstellung Die Artikeldaten für RollCalc sollen langfristig aus mehreren Quellen nachvollziehbar zusammengeführt werden: - bestehende RollCalc-Artikeldaten - ERP-Export im CSV-Format - manuell gepflegte Zusatz- und Korrekturdaten - später weitere technische oder produktionsbezogene Quellen Das Projekt trennt Quelldaten, manuelle Daten und generierte Ergebnisse, damit keine stillen Datenkorrekturen oder unklare Überschreibungen entstehen. ## Abgrenzung zum Roll Calculator Der Roll Calculator bleibt externer Konsument der erzeugten `article-data.json`. Article Data Manager wird nicht in das RollCalc-Repository integriert. Importlogik, Datenvalidierung, Merge-Regeln und Reports werden hier entwickelt, damit RollCalc nicht mit Datenpflege- und ERP-Komplexität belastet wird. ## Datenfluss ```text ERP-Export + bestehende RollCalc-Daten + manuelle Zusatzdaten | v Import -> Normalisierung -> Validierung -> Merge -> Export | +--> Reports | +--> article-data.json fuer RollCalc ``` ## Verzeichnisstruktur ```text src/article_data_manager/ Python-Paket tests/ Tests und nicht vertrauliche Fixtures examples/ reduzierte Beispieldaten data/source/ lokale echte Quelldaten, nicht versioniert data/manual/ lokale manuelle Daten, nicht versioniert data/generated/ generierte Artefakte, nicht versioniert data/reports/ Reports, nicht versioniert docs/ Architektur, Datenmodell und Regeln scripts/ spaetere Hilfsskripte ``` ## Ausgangsdaten und Analyse Die lokalen Ausgangsdateien wurden unter `incoming/` gefunden und werden nicht versioniert: - `incoming/article-data_.json` - `incoming/Liste Schluesseldaten Produktion.csv` Beobachtungen: - RollCalc-JSON: 274 Artikel, Felder `nr`, `name`, `thickness`, `area_weight`, `core_type`. - `nr` ist im JSON durchgehend String; mindestens eine Artikelnummer beginnt mit `0`. - ERP-CSV: 1786 Datenzeilen, UTF-8 mit BOM, Delimiter `,`. - ERP-CSV enthaelt deutsche Dezimalzahlen wie `"6,00"` und Werte mit Punkt wie `1.548`. - `SL_ITEM_NO` ist in allen ERP-Zeilen befuellt; mindestens eine Artikelnummer beginnt mit `0`. - Es wurden 247 Artikelnummern mit mehrfachen ERP-Treffern erkannt. Die fachliche Bedeutung ist offen. ## Installation Voraussetzung: Python 3.12 oder neuer. ```bash python3 -m venv .venv . .venv/bin/activate python -m pip install -e ".[dev]" ``` ## Geplante CLI-Nutzung ```bash article-data-manager inspect-csv data/source/erp/production-key-data.csv article-data-manager merge article-data-manager validate data/generated/article-data.json ``` Die CLI-Kommandos sind in Phase 0 nur als Platzhalter vorgesehen. ## Implementierte Importer Der RollCalc-JSON-Importer ist als Python-API verfügbar: ```python from pathlib import Path from article_data_manager.importers.rollcalc_json import load_rollcalc_articles articles = load_rollcalc_articles(Path("data/source/rollcalc/article-data.json")) ``` Er validiert die bestehende RollCalc-JSON-Struktur strikt, erhält Artikelnummern als Strings und verändert die Quelldatei nicht. Details stehen in `docs/importers.md`. ## Interne Analysewerkzeuge Der ERP Explorer profiliert einen ERP-CSV-Export, ohne daraus Import- oder Merge-Regeln abzuleiten: ```python from pathlib import Path from article_data_manager.tools.erp_explorer import write_erp_profile_report write_erp_profile_report( Path("data/source/erp/production-key-data.csv"), rollcalc_path=Path("data/source/rollcalc/article-data.json"), ) ``` Der Textreport wird standardmäßig unter `data/reports/erp_profile_report.txt` erzeugt. Die Quelldaten werden nicht verändert. ## ERP Enrichment Dry Run Der ERP Enrichment Dry Run ergänzt vorhandene RollCalc-Artikel um ein separates `erp`-Objekt mit ausgewählten ERP-Produktionsinformationen. Die RollCalc-Datei definiert die relevante Artikelmenge; ERP-Artikel ohne RollCalc-Entsprechung werden ignoriert. Übernommen werden nur `ROP_PRODUCT_WIDTH`, `ROP_RATE_OF_PRODUCTION`, `SL_MINIMUM_PRODUCTION_QUANTITY` und `WPL_WORKPLACE_TEXT`. QC-Daten wie `area_weight` werden nicht aus dem ERP übernommen. `SL_PRODUCTION_SPEED` wird wegen artikelabhängiger Einheit nicht verwendet. Details stehen in `docs/erp-enrichment.md`. ## Tests ```bash ruff check . pytest ``` ## Umgang mit produktiven ERP-Daten Produktive ERP-Exporte, RollCalc-Quelldateien, manuelle Arbeitsdateien, Reports und generierte Dateien duerfen nicht ungeprueft in Git eingecheckt werden. Versioniert werden nur anonymisierte oder reduzierte Beispiele und Fixtures.