.. index:: Reporterzeugung, TEM-Report, PDF-Report, HTML-Report Modulare TEM-Reports ==================== ``mpylab-tem-report`` liest die vollständige Historie eines ``TEMCell``- Pickles und erkennt selbständig unterstützte Datensätze. Der Generator deckt derzeit TEM-Moden-Verifikation, gemessene e0y-Feldfaktoren, Emission und Störfestigkeit einschließlich EUT-Bewertung ab. Ereignisfelder, Leistungskriterien und das optionale Austauschformat sind unter :doc:`Störfestigkeitsergebnisse und EUT-Bewertung ` beschrieben. Inhalt, Darstellung und Erweiterung sind bewusst getrennt: * ``--section`` wählt vorhandene, bereits ausgewertete Messdatensätze aus; * TOML-Profile konfigurieren Metadaten, Laborangaben und Farben; * eigene Python-Reportmodule ergänzen neue fachliche Reportabschnitte. Profile verändern keine Messergebnisse und führen keine Auswertung aus. Der Abschnitt :ref:`report-profile-reference-de` beschreibt alle Konfigurationswerte; :ref:`custom-report-modules-de` führt zur Erweiterungsschnittstelle. Eingabe und Voraussetzungen --------------------------- Eingabe ist ein vertrauenswürdiges finales oder After-measure-Pickle einer ``TEMCell``. Pickles können beim Laden Python-Code ausführen; aus nicht vertrauenswürdigen Dateien dürfen keine Reports erzeugt werden. Der Generator nutzt :func:`mpylab.env.Measure.load_pickle_compat`, verbindet sich aber nicht mit Messgeräten. Reportmodule verwenden ausgewertete Daten: .. list-table:: Automatisch erkannte Abschnitte :header-rows: 1 :widths: 20 34 46 * - Kennung - Mapping im Pickle - Wesentliche Inhalte * - ``verification:`` - ``processedData_Verification`` - Homogenität, TEM-Mode, Referenzfeld und -leistung, analytisches e0y und AM-Headroom * - ``e0y:`` - ``processedData_e0y`` - Gemessener Feldfaktor, Quelle, Position und analytischer Vergleich * - ``emission:`` - ``processedData_Emission`` und ``preflightData_Emission`` - Korrelierte Feldstärke und Leistung, Limits, Detektoren, Prescan und e0y-Quellen * - ``immunity:`` - ``processedData_Immunity`` und ``preflightData_Immunity`` - Expositionen, Störgröße, Leveling, EUT-Ereignisse und Bewertungen Eine Historie mit ausschließlich Rohdaten besitzt im Allgemeinen keinen ausgabefähigen Abschnitt. Zuerst ist die zugehörige Auswertung auszuführen und ein neues Historien-Pickle zu schreiben. Der Generator rekonstruiert fehlende Auswertungen nicht stillschweigend. Verfügbare Abschnitte prüfen ---------------------------- Vor der Erzeugung kann angezeigt werden, welche Reportabschnitte im Pickle gefunden wurden: .. code-block:: console mpylab-tem-report measurement-history.p --list-sections Mit ``--section MODULE:DATASET`` kann die Ausgabe auf einen oder mehrere dieser Abschnitte begrenzt werden. Die Option darf wiederholt werden. Empfohlener Ablauf ------------------ .. code-block:: console # Zuerst vorhandene ausgewertete Datensätze anzeigen. mpylab-tem-report measurement-history.p --list-sections # In ein messungsspezifisches Verzeichnis schreiben. mpylab-tem-report measurement-history.p \ --output reports/EMV-2026-001 \ --formats pdf html svg \ --profile labor.toml \ --profile EMV-2026-001.toml Enthält die Historie mehrere Läufe, begrenzen wiederholte ``--section``- Optionen den weiterzugebenden Report auf eine kontrollierte Auswahl. Report erzeugen --------------- .. code-block:: console mpylab-tem-report measurement-history.p \ --output tem-report \ --formats pdf html svg \ --profile script/conf/tem-report-profile.toml \ --profile script/conf/tem-report-measurement.toml Unterstützt werden ``pdf``, ``html``, ``svg`` und ``png``. HTML und PDF bilden den Gesamtreport. SVG und PNG erzeugen separate Grafiken der Reportmodule. Wird HTML ohne Grafikformat angefordert, erzeugt der Generator zusätzlich SVG-Dateien. PDF wird direkt über Matplotlib erzeugt. HTML ist ein statisches lokales Paket und benötigt keinen Server. SVG eignet sich für skalierbare Grafiken und versionierte Archive; PNG ist für Office-Anwendungen hilfreich, die SVG nicht zuverlässig importieren. LaTeX-Quelltext wird derzeit nicht erzeugt. Ausgabeverzeichnis ------------------ Das Ergebnis besitzt eine stabile Struktur: .. code-block:: text tem-report/ |-- index.html |-- tem-history-report.pdf |-- traceability.tsv |-- report-metadata.tsv |-- assets/ `-- sections/ |-- verification-cal/ | |-- index.html | |-- figures/ | `-- tables/ `-- emission-eut/ |-- index.html |-- figures/ `-- tables/ Die Modultabellen enthalten die Werte hinter den Grafiken und sind für skriptbasierte Prüfungen vorzuziehen. Fehlen notwendige Daten, wird eine Grafik ausgelassen; vorhandene Tabellen und Rückführbarkeitswarnungen bleiben erhalten. Profile schichten ----------------- ``--profile`` kann mehrfach angegeben werden. Dateien werden in Kommandozeilenreihenfolge zusammengeführt; spätere Werte überschreiben nur gleichnamige frühere Werte. Damit können beispielsweise eine globale Laborkonfiguration und messungsspezifische Angaben getrennt versioniert werden: .. code-block:: toml # Globales Laborprofil [report] title = "TEM/GTEM Measurement Report" language = "de" [laboratory] name = "EMV-Labor" [appearance] primary_color = "#174A7E" accent_color = "#2E7D32" .. code-block:: toml # Messungsspezifische Ergänzung [report] report_number = "EMV-2026-001" [measurement] operator = "Example Operator" location = "Large GTEM" date = "2026-07-16" [environment] temperature_c = 23.1 relative_humidity_percent = 44.0 Kommentierte Vorlagen befinden sich in ``script/conf/tem-report-profile.toml`` und ``script/conf/tem-report-measurement.toml``. .. _report-profile-reference-de: Profilreferenz -------------- Nur die folgenden Tabellen und Schlüssel sind zulässig. Unbekannte oder falsch geschriebene Schlüssel werden als Fehler gemeldet und nicht unbemerkt ignoriert. .. list-table:: TOML-Reportprofil :header-rows: 1 :widths: 20 36 44 * - Tabelle - Schlüssel - Prüfung und Verwendung * - ``[report]`` - ``title``, ``report_number``, ``language``, ``confidentiality`` - ``language`` ist ``de`` oder ``en``; der Titel hat einen stabilen Vorgabewert * - ``[laboratory]`` - ``name``, ``department``, ``address``, ``logo`` - Logo ist eine vorhandene PNG- oder JPEG-Datei; relative Pfade beziehen sich auf die Profildatei, die den Wert definiert * - ``[measurement]`` - ``operator``, ``customer``, ``location``, ``date``, ``free_text`` - Datum im ISO-Format ``YYYY-MM-DD``; es wird nicht aus der Reporterzeugung abgeleitet * - ``[environment]`` - ``temperature_c``, ``relative_humidity_percent``, ``air_pressure_hpa`` - Luftfeuchte 0 bis 100; Luftdruck ist positiv * - ``[appearance]`` - ``primary_color``, ``accent_color`` - Farben im Format ``#RRGGBB`` Spätere Profile überschreiben nur denselben Schlüssel. Relative Ressourcen bleiben relativ zu der Datei, die den wirksamen Wert geliefert hat. Rückführbarkeit --------------- Der Generator berechnet die Messung nicht erneut. Er bereitet die bereits im Pickle vorhandenen Ergebnisse modular auf. HTML und PDF enthalten eine abschnittsübergreifende Rückführbarkeitsübersicht. ``traceability.tsv`` enthält dieselben Angaben maschinenlesbar, darunter Frequenzabdeckung, referenzierte Quelldatensätze, Vollständigkeit und Warnungen. ``report-metadata.tsv`` dokumentiert die wirksamen Profilwerte und ihre Herkunft. So bleibt unterscheidbar, welche Angaben aus dem globalen Profil, dem Messprofil, Vorgabewerten oder der Generierung stammen. Für einen ausschließlich auf die Verifikation begrenzten Bericht steht zusätzlich ``script/tem-verification-report.py`` zur Verfügung. .. _custom-report-modules-de: Eigene Reportmodule entwickeln ------------------------------ Ein eigenes Reportmodul ist sinnvoll, wenn ein zusätzlicher ausgewerteter Datensatz als eigener Abschnitt erscheinen soll. Für andere Titel, Laborangaben, Freitext oder Farben genügt dagegen ein TOML-Profil. Ein Reportmodul implementiert :class:`mpylab.env.tem.history_report.ReportModule` und durchläuft fünf Schritte: #. ``discover`` findet ausgabefähige Datensätze in der Historie. #. ``collect`` überführt einen Datensatz in eine darstellungsneutrale Struktur. #. ``write`` erzeugt HTML, Tabellen und separate Grafiken des Abschnitts. #. ``pdf_figures`` liefert die Seiten für das gemeinsame PDF. #. ``summary`` stellt kompakte Angaben für Inhaltsübersicht und Rückführbarkeit bereit. Die fachliche Auswertung bleibt in der Messklasse. ``collect`` darf vorhandene Ergebnisse auswählen und ordnen, aber keine Messung neu bewerten. Eigene Module werden einer Anwendung über den Parameter ``modules`` von :func:`mpylab.env.tem.history_report.write_history_report` übergeben. Sie werden nicht automatisch vom Kommandozeilenprogramm geladen. Ein vollständiges minimales Gerüst und die Rückgabestrukturen zeigt die englischsprachige :doc:`Report-API <../../api/reports>`. Für ein neues Modul sind mindestens Logiktests für Erkennung und Datensammlung sowie ein End-to-End-Test der erzeugten Dateien vorzusehen. Wiederholung und Fehlerdiagnose ------------------------------- Dateien mit denselben generierten Namen werden überschrieben, das Ausgabeverzeichnis wird jedoch nicht bereinigt. Wenn der exakte Dateibestand archiviert wird, ist ein neues oder zuvor geleertes Verzeichnis zu verwenden. Typische Fehler haben eine bewusste Bedeutung: * ``no reportable sections``: Das Pickle enthält kein unterstütztes ausgewertetes Mapping. * ``section ... is unavailable``: Kennung mit ``--list-sections`` abgleichen. * Profilfehler: unbekannte Schlüssel, Typen, Datum, Farben, Umgebungsbereiche oder Logo-Pfad korrigieren. * Fehlende Grafik bei erfolgreichem Lauf: TSV-Tabellen und Rückführbarkeitswarnungen auf fehlende Quelldaten prüfen. Die englischsprachige :doc:`Report-API <../../api/reports>` dokumentiert Erkennung, Auswahl, Profilladen und die modulare Erweiterungsschnittstelle.