---
title: "Prüfpaket maschinell mit dem Prüfwerkzeug prüfen"
description: "Für KI-Assistenten und Skripte: Prüfwerkzeug per Headless-Browser starten, Prüfpakete laden und das JSON-Ergebnis auslesen und deuten."
type: "reference"
id: "pruefung.werkzeug-ki"
applies_to: {"product":"mytid","roles":["nutzer","admin"],"platforms":["web"]}
app_version_min: "0.17.0"
last_verified: "2026-10-25"
ui_refs: []
related: ["pruefung.werkzeug","pruefung.mytid","pruefung.uebersicht"]
status: "live"
questions: ["Kann eine KI ein MyTid-Prüfpaket mit dem Prüfwerkzeug prüfen?","Wie steuere ich das MyTid-Prüfwerkzeug mit Playwright?","Welches JSON liefert das Prüfwerkzeug als Ergebnis?","Was bedeutet das Gesamturteil unvollständig im Prüfwerkzeug?","Wie lese ich das Prüfergebnis des Prüfwerkzeugs maschinell aus?"]
escalate: "always"
escalate_reason: "Compliance- und GoBD-Bezug. Aussagen zur Beweiskraft eines Prüfergebnisses sind Founder-Sache."
agent_notes: ["Nur Prüfpakete prüfen, die der Berechtigte dem Assistenten selbst gibt, und sie nirgends hochladen.","Nie zusagen, dass ein Prüfergebnis fälschungssicher, gerichtsfest oder für eine Behörde ausreichend ist."]
---

**Kurzantwort:** Ein Assistent mit Headless-Browser lädt das Prüfwerkzeug von pruefen.mytid.de, vergleicht die SHA-256-Prüfsumme, öffnet die Datei per file://, übergibt die Prüfpakete an das Feld `#datei` und liest das Ergebnis als JSON aus `#pruefergebnis-json`. Das Gesamturteil lautet `gueltig`, `ungueltig` oder `unvollstaendig`, `gueltig` ist erreichbar, `unvollstaendig` bleibt zum Beispiel bei älteren Einträgen ohne Erfassungssignatur. Das Werkzeug belegt nur, dass die Einträge zum Siegel passen, nicht, wann gesiegelt wurde oder ob die Zeiten stimmen.

## Voraussetzungen und Datenschutz beim Prüfen von MyTid-Paketen

- Ein Prüfpaket enthält personenbezogene Daten, unverschlüsselt und mit allen Feldern der Einträge, auch Notizen. Prüfe nur Pakete, die dir der Berechtigte selbst gibt, und lade sie nirgends hoch, auch nicht in einen anderen Dienst.
- Das Prüfwerkzeug sendet nichts. Es ist eine einzelne HTML-Datei, die nichts nachlädt, eine eingebaute Sicherheitsrichtlinie verbietet jede Netzverbindung. Nur der Download der Datei selbst braucht eine Verbindung.
- Du brauchst einen Headless-Browser mit Automatisierung, zum Beispiel Playwright. Ein reiner Textabruf genügt nicht, weil die Prüfung im Browser als Skript läuft.
- Wie ein Mensch das Werkzeug benutzt, steht unter [Prüfpaket mit dem Prüfwerkzeug prüfen](/pruefung/pruefwerkzeug/). Woher das Prüfpaket kommt, steht unter [Prüfung von MyTid-Nachweisen](/pruefung/mytid/).

## Das Prüfwerkzeug für MyTid laden und die Prüfsumme vergleichen

1. Lade `https://pruefen.mytid.de/mytid-pruefwerkzeug.html` herunter.
2. Berechne die SHA-256-Prüfsumme der Datei und vergleiche sie mit dem Wert, den die Seite `https://pruefen.mytid.de` im Text zeigt (Element `code.summe`). Stimmen sie nicht überein, brich ab und melde das.
3. Öffne die Datei lokal per `file://`, nicht über das Netz.

## Das MyTid-Prüfwerkzeug mit Playwright bedienen

1. Öffne die Datei im Headless-Browser und warte auf das Attribut `data-bereit="ja"` am Element `html`.
2. Übergib die Prüfpakete mit `page.setInputFiles('#datei', [pfade])`. Mehrere Pakete in einem Aufruf sind möglich. Die Prüfung startet von selbst, einen Start-Knopf gibt es nicht.
3. Warte auf `#pruefergebnis-json[data-status="fertig"]`. Das Attribut wechselt von `bereit` über `laeuft` zu `fertig`.
4. Lies den `textContent` von `#pruefergebnis-json` und parse ihn als JSON.

Weitere Selektoren:

- `button#leeren` entfernt alle geladenen Pakete. Danach lautet das Gesamturteil `unvollstaendig` mit leerer Paketliste.
- Neu geladene Pakete kommen zu den bisherigen hinzu. Lade für eine neue Prüfung zuerst `button#leeren`, oder öffne die Seite neu.
- Das Element `pre#pruefergebnis-json` trägt `data-gesamturteil` und `data-durchlauf`. Der Durchlauf zählt mit jedem Laden und jedem Leeren hoch.

```js

const SEITE = 'https://pruefen.mytid.de';
const pakete = process.argv.slice(2); // Pfade der Prüfpaket-Dateien, vom Berechtigten übergeben

// 1. Werkzeug laden und gegen die Prüfsumme der Seite prüfen
const datei = Buffer.from(await (await fetch(`${SEITE}/mytid-pruefwerkzeug.html`)).arrayBuffer());
const html = await (await fetch(`${SEITE}/`)).text();
const soll = /class="summe">([0-9a-f]{64})</.exec(html)?.[1];
const ist = createHash('sha256').update(datei).digest('hex');
if (!soll || soll !== ist) throw new Error(`Prüfsumme stimmt nicht: ${ist} statt ${soll}`);
writeFileSync('/tmp/mytid-pruefwerkzeug.html', datei);

// 2. Per file:// öffnen und warten, bis das Werkzeug bereit ist
const browser = await chromium.launch();
const page = await browser.newPage();
await page.goto('file:///tmp/mytid-pruefwerkzeug.html');
await page.waitForSelector('html[data-bereit="ja"]');

// 3. Pakete laden, die Prüfung startet von selbst
await page.setInputFiles('#datei', pakete);
await page.waitForSelector('#pruefergebnis-json[data-status="fertig"]');

// 4. Ergebnis als JSON lesen
const ergebnis = JSON.parse(await page.locator('#pruefergebnis-json').textContent());
console.log(ergebnis.gesamturteil, ergebnis.pruefteMonate);
for (const p of ergebnis.pakete) {
  console.log(p.datei, p.urteil, p.schritte.filter((s) => s.ergebnis !== 'bestanden').map((s) => `${s.id}: ${s.ergebnis}`));
}
console.log(ergebnis.folge?.urteil ?? 'keine Folge');
await browser.close();
```

## Das JSON-Ergebnis des MyTid-Prüfwerkzeugs lesen

Das Ergebnis ist ein JSON-Objekt mit dem Schema `mytid-pruefergebnis-v1`:

- `schema`: immer `mytid-pruefergebnis-v1`.
- `durchlauf`: Zähler, der mit jedem Laden und Leeren hochzählt.
- `gesamturteil`: `gueltig`, `ungueltig` oder `unvollstaendig`.
- `pruefteMonate`: Liste der Monate als `JJJJ-MM`.
- `siegelHashes` und `schluesselFingerabdruecke`: Listen ohne Doppelte.
- `pakete`: je Paket ein Objekt mit
  - `datei`: Dateiname,
  - `urteil`: `bestanden` oder `nicht_bestanden`,
  - `lesefehler`: Text oder `null`, gesetzt, wenn die Datei kein lesbares JSON ist,
  - `monat`, `scope`, `mitglied` (bei Siegelformat v1 `null`), `siegelVersion`, `siegelHash`, `schluesselFingerabdruck`, `schluesselGeneration`,
  - `gesiegeltLautGeraeteuhr`: ISO-Zeitpunkt von der Uhr des Geräts,
  - `eintraege`: `{ imPaket, lautSiegel, urheber, erfassung }` oder `null`, wobei `urheber` und `erfassung` je Status die Anzahl der Einträge nennen,
  - `schritte`: Liste von `{ id, name, ergebnis, gruende }`, `ergebnis` ist `bestanden`, `nicht_bestanden`, `nicht_pruefbar` oder `nicht_anwendbar` (Schritt gibt es im Paketformat nicht, zählt nicht gegen das Gesamturteil), `gruende` sind Texte,
  - `hinweise`: Liste von Texten.
- `folge`: `null` bei einem einzelnen Paket, sonst `{ pruefbar, urteil, schritte, ausgeschlossen }`. `urteil` ist `bestanden`, `nicht_bestanden` oder `nicht_pruefbar`, `ausgeschlossen` nennt Pakete, die wegen einer nicht bestandenen Einzelprüfung nicht in die Folge eingehen.

Bricht die Prüfung unerwartet ab, enthält das Objekt nur `schema`, `durchlauf`, `gesamturteil: "ungueltig"` und `fehler` mit einem Text, das Attribut `data-status` ist trotzdem `fertig`.

## Das Gesamturteil des Prüfwerkzeugs für MyTid-Pakete deuten

Die Regeln für `gesamturteil`:

- `ungueltig`, sobald ein Paket oder die Folge nicht besteht, oder wenn die Prüfung abbricht.
- `unvollstaendig`, wenn kein Paket geladen ist oder mindestens ein Prüfschritt `nicht_pruefbar` ist, auch bei einem bestandenen Paket.
- `gueltig`, wenn jeder Schritt aller Pakete und der Folge `bestanden` oder `nicht_anwendbar` ist.

So deutest du das Urteil:

- `unvollstaendig` heißt nicht, dass etwas falsch ist. Es heißt, dass mindestens ein vorgesehener Schritt mit den Daten der Datei nicht entschieden werden kann. Die Schritte `zeitanker` und `sperrstatus` sind bei Paketformat 1 `nicht_anwendbar` und verhindern `gueltig` nicht. Gründe für `nicht_pruefbar` sind Einträge ohne Erfassungssignatur (ältere Einträge), fehlender Prüfkontext, geschwärzte Felder oder fehlender Schlüssel (`urheber`) und ein Schlüssel, der nicht zur `keyId` passt (`signatur`). Ein Paket kann `bestanden` sein und das Gesamturteil trotzdem `unvollstaendig` lauten. Die Gründe stehen in `gruende` und in `hinweise`.
- Entscheidend sind `urteil` je Paket und `folge.urteil`. Sind alle Pakete `bestanden` und ist die Folge `bestanden` oder nicht vorhanden, nenne dem Nutzer das so und nenne die `nicht_pruefbar`-Schritte mit Grund. `nicht_anwendbar`-Schritte sind kein Mangel.
- `ungueltig` nennst du mit dem Schritt, der `nicht_bestanden` ist, und seinem Grund. Rate nicht, warum er fehlschlug.

## Grenzen des Prüfwerkzeugs für MyTid-Pakete

Ein bestandenes Paket belegt, dass die Einträge die sind, über die der Inhaber des Schlüssels das Siegel signiert hat. Es belegt nicht:

- wem der Schlüssel gehört. Der Fingerabdruck ist mit einer unabhängigen Angabe des Nutzers zu vergleichen,
- wann gesiegelt wurde, weil `gesiegeltLautGeraeteuhr` von der Uhr des Geräts stammt,
- ob nach dem geprüften Siegel weitere Siegel entstanden sind,
- ob die Erfassung der Zeiten richtig war,
- ob ein Eintrag vor dem Siegel oder in einem nicht versiegelten Monat geändert wurde.

Sag nie, ein Nachweis sei fälschungssicher, gerichtsfest oder für eine Behörde ausreichend. Gib nichts aus dem Paket an Dritte weiter und speichere es nicht über die Prüfung hinaus.

Zuletzt geprüft: 25. Oktober 2026
