# ERP Enrichment Dry Run Der ERP Enrichment Dry Run reichert ausschließlich vorhandene RollCalc-Artikel mit ausgewählten ERP-Feldern an. Die RollCalc-Datei definiert die relevante Artikelmenge und Reihenfolge. ERP-Artikel ohne RollCalc-Entsprechung werden ignoriert. Es handelt sich nicht um einen vollständigen ERP-Import, keinen Merge-Prozess und keinen produktiven RollCalc-Export. ## Öffentliche API ```python from pathlib import Path from article_data_manager.enrichment.erp import ( enrich_rollcalc_articles_from_erp, write_enrichment_outputs, ) result = enrich_rollcalc_articles_from_erp( Path("data/source/rollcalc/article-data.json"), Path("data/source/erp/production-key-data.csv"), ) write_enrichment_outputs( result, Path("data/generated/article-data.erp-enriched-dry-run.json"), Path("data/reports/erp-enrichment-report.csv"), ) ``` ## Übernommene ERP-Felder | ERP-Feld | Zielfeld | Bedeutung | Einheit | | --- | --- | --- | --- | | `ROP_PRODUCT_WIDTH` | `product_width_m` | ERP-Produktbreite | m | | `ROP_RATE_OF_PRODUCTION` | `line_speed_m_min` | Liniengeschwindigkeit | m/min | | `SL_MINIMUM_PRODUCTION_QUANTITY` | `minimum_production_quantity` | Mindestproduktionsmenge | ERP-Originaleinheit | | `WPL_WORKPLACE_TEXT` | `workplace` | geplanter Arbeitsplatz beziehungsweise geplante Anlage | Text | `ROP_RATE_OF_PRODUCTION` ist die für Rollenwechselbetrachtungen maßgebliche Liniengeschwindigkeit in m/min. `SL_PRODUCTION_SPEED` wird nicht verwendet, weil dessen Einheit artikelabhängig sein kann. `kg_qm` wird nicht übernommen, weil `area_weight` aus QC beziehungsweise aus der bestehenden RollCalc-Datenquelle stammt. `ROP_PRODUCT_WIDTH` wird als ERP-Produktbreite übernommen, ohne Sonderfälle fachlich zu interpretieren. ## Internes Dry-Run-Format Die vorhandene RollCalc-Struktur bleibt erhalten und wird um ein separates `erp`-Objekt ergänzt: ```json { "nr": "214700", "name": "Stex H 751 (Tfix 751), 6,00 x 50 m", "thickness": 6.722, "area_weight": 0.0, "core_type": 0.0, "erp": { "product_width_m": 6.0, "line_speed_m_min": 18.5, "minimum_production_quantity": 5000.0, "workplace": "Anlage 3" } } ``` Das `erp`-Objekt ist auch vorhanden, wenn kein ERP-Treffer existiert. Fehlende, widersprüchliche oder ungültige ERP-Werte erscheinen dort als `null`. Vor produktiver Verwendung in RollCalc muss dessen Ladeverhalten für das zusätzliche `erp`-Objekt geprüft werden. Langfristig soll ein eigener RollCalc-Export nur die für RollCalc vorgesehenen Felder ausgeben. ERP-Produktionsinformationen müssen nicht zwangsläufig Bestandteil des RollCalc-Exports werden. ## Mehrfachtreffer und Status ERP-Zeilen werden ausschließlich über `SL_ITEM_NO` der RollCalc-Artikelnummer `nr` zugeordnet. Artikelnummern werden nicht numerisch konvertiert oder umformatiert. Mehrfachtreffer werden feldweise ausgewertet: - keine ERP-Zeile: `no_erp_match` - keine gefüllten Werte: `missing` - genau ein Wert: `unique` - mehrere Zeilen mit identischem Wert: `same_value_multiple_rows` - mehrere unterschiedliche Werte: `conflict` - nicht interpretierbarer numerischer Wert: `invalid` Leere Werte zählen nicht als eigener Konfliktwert. Konflikte und ungültige Werte werden berichtet und nicht automatisch aufgelöst. Artikelstatus: - `complete`: alle vier Felder haben `unique` oder `same_value_multiple_rows` - `partial`: mindestens ein Feld ist `missing`, aber kein Feld ist `conflict` oder `invalid` - `conflict`: mindestens ein Feld ist `conflict` oder `invalid` - `no_erp_match`: keine ERP-Zeile zur RollCalc-Artikelnummer ## Ausgaben Standardpfade: - `data/generated/article-data.erp-enriched-dry-run.json` - `data/reports/erp-enrichment-report.csv` Die Quelldateien werden nicht verändert. Produktive Dry-Run-Ergebnisse werden nicht versioniert.