Files
article-data-manager/README.md
2026-07-29 14:32:15 +02:00

138 lines
5.0 KiB
Markdown

# 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.