Dokumentation

VAMPIRE PHP – Dokumentation

VAMPIRE PHP prüft E-Rechnungen direkt in Ihrem PHP-Prozess. Es braucht kein Java, ruft kein weiteres Programm auf und baut keine Netzverbindung auf, die Rechnung verlässt Ihren Server also nicht. Auf dieser Seite sehen Sie, wie Sie VAMPIRE PHP installieren und Ihre erste Rechnung prüfen.


Worauf es ankommt

Nach unserer Kenntnis ist VAMPIRE PHP das einzige Werkzeug, das die offiziellen Prüfregeln für E-Rechnungen vollständig in reinem PHP ausführt. VAMPIRE JS bringt dieselben Regelpakete in reines JavaScript. Beide kommen ohne Java und ohne zusätzlichen Prozess aus, und die Rechnung verlässt Ihr System nicht.

Beleg: 220 von 220 Rechnungen, bei denen VAMPIRE und der offizielle KoSIT-Validator zum selben Ergebnis kamen, gemessen am 09.10.2026.


97,7 % / 100 %

der Rechnungen, bei denen VAMPIRE PHP und der offizielle KoSIT-Validator genau dieselben Regeln auslösten, vor und nach Abzug eines erklärten Unterschieds in der Fassung der Regeln

gemessen am 07.10.2026

220 von 220

Rechnungen, bei denen VAMPIRE und der offizielle KoSIT-Validator zum selben Ergebnis kamen

gemessen am 09.10.2026

2 544

Vergleiche von VAMPIRE JS mit VAMPIRE PHP, je ein Regelwerk mit einer Rechnung, alle ohne eine einzige Abweichung

gemessen am 09.10.2026

253 von 253

Rechnungen, für die VAMPIRE JS und VAMPIRE PHP genau denselben Prüfbericht geliefert haben

gemessen am 09.10.2026


Was Sie brauchen und wie Sie VAMPIRE PHP installieren

VAMPIRE PHP ist ein Prüfprogramm für E-Rechnungen in reinem PHP. Es braucht PHP 8.2 oder neuer mit den Erweiterungen dom, libxml und bcmath, weitere Abhängigkeiten zur Laufzeit gibt es nicht. Damit läuft es auch auf gewöhnlichem Webhosting. VAMPIRE PHP ist freie Software unter der GPL-2.0-or-later. Sie installieren es mit composer require invoicepress/vampire-php von Packagist; die einzelnen Schritte stehen in der Composer-Anleitung.


Ihre erste Prüfung in fünf Zeilen

Die folgende Datei prüft eine Rechnung. Sie gibt „accepted“ aus, wenn die Rechnung angenommen ist, und „rejected“, wenn sie abgelehnt ist. Die Datei läuft so, wie sie hier steht. Rufen Sie sie im Ordner Ihres Projekts mit php check.php rechnung.xml auf.

<?php
// SPDX-License-Identifier: MIT
// Checks one e-invoice with VAMPIRE PHP:  php check.php invoice.xml
// A command-line script: it reads the file name from the command line and refuses to run in a web server.
if ( PHP_SAPI !== 'cli' ) exit( 1 );

require __DIR__ . '/vendor/autoload.php';
$vampire  = __DIR__ . '/vendor/invoicepress/vampire-php';
$resolver = EinvoiceValidator\Pipeline\ScenarioResolver::fromJsonFile( $vampire . '/rulesets/scenarios.json' );
$result   = ( new EinvoiceValidator\Validator( scenarioResolver: $resolver, baseDir: $vampire ) )->validateFile( $argv[1] );
printf( "%s: %s\n", $argv[1], $result->isAccepted() ? 'accepted' : 'rejected' );

Die Datei scenarios.json enthält die Zuordnungsregeln. Sie legt fest, welches Schema und welche Regelwerke eine Rechnung bekommt. Ein Regelwerk enthält die Prüfregeln eines Formats in einer Fassung, zum Beispiel die Regeln der XRechnung 3.0.2. baseDir ist der Ordner, von dem aus die Pfade in dieser Datei aufgelöst werden; das ist das Paketverzeichnis.


Befunde ausgeben und Berichte schreiben

Das zweite Beispiel gibt jeden Befund einzeln aus. Danach schreibt es drei Berichte, jeden für einen anderen Zweck: den JSON-Bericht für Ihre eigene Software, eine druckbare HTML-Seite für Menschen und den Bericht im Format des KoSIT-Validators für Werkzeuge, die dieses Format schon lesen. Mit ruleReport: true enthält der JSON-Bericht zusätzlich den positiven Prüfbericht. Darin steht jede geprüfte Regel mit ihrem Ergebnis in einer eigenen Zeile.

JSON-Bericht
für Ihre eigene Software, auf Wunsch mit positivem Prüfbericht
HTML-Seite
druckbar, zum Lesen und Ablegen
KoSIT-Format
für Werkzeuge, die diesen Bericht schon lesen
Eine Prüfung, drei Berichte: für Ihre Software, zum Ausdrucken und im Format des KoSIT-Validators.
<?php
// SPDX-License-Identifier: MIT
// Checks one e-invoice with VAMPIRE PHP, prints the findings and writes the reports:  php report.php invoice.xml
//   report.json        the JSON report, with the positive validation report ( every rule with its result )
//   report.html        a printable page
//   report-kosit.xml   the report in the format of the KoSIT validator
// A command-line script: it reads the file name from the command line and refuses to run in a web server.
if ( PHP_SAPI !== 'cli' ) exit( 1 );

require __DIR__ . '/vendor/autoload.php';

use EinvoiceValidator\Pipeline\ScenarioResolver;
use EinvoiceValidator\Report\{ HtmlReport, JsonReport, KositXmlReport };
use EinvoiceValidator\Validator;

$vampire   = __DIR__ . '/vendor/invoicepress/vampire-php';
$resolver  = ScenarioResolver::fromJsonFile( $vampire . '/rulesets/scenarios.json' );
$validator = new Validator( scenarioResolver: $resolver, baseDir: $vampire, ruleReport: true );
$result    = $validator->validateFile( $argv[1] );

foreach ( $result->messages() as $message ) {
	printf( "%-12s %-14s %s\n", $message->flag->value, $message->ruleId ?? '-', trim( $message->text ) );
}

file_put_contents( 'report.json', ( new JsonReport() )->toJson( $result ) );
file_put_contents( 'report.html', ( new HtmlReport() )->render( $result ) );
file_put_contents( 'report-kosit.xml', ( new KositXmlReport() )->render( $result, (string) file_get_contents( $argv[1] ) ) );

echo $result->isAccepted() ? "accepted\n" : "rejected\n";
exit( $result->isAccepted() ? 0 : 1 );

⚠️ Das Ergebnis lesen Sie aus isAccepted() ab, nicht aus der Zahl der Fehler. Das Ergebnis sagt, ob die Rechnung angenommen oder abgelehnt ist. Die Zahl der Fehler allein kann täuschen, und zwar in zwei Fällen: Ein Regelwerk kann auch eine Warnung als sperrend kennzeichnen. Und eine Rechnung, die VAMPIRE keinem Regelwerk zuordnen konnte, hat keinen einzigen Regelbefund und ist trotzdem nicht angenommen.


So prüfen Sie auf der Kommandozeile

vendor/bin/einvoice-validator validate rechnung.xml
vendor/bin/einvoice-validator validate rechnung.xml --format=json --rule-report
vendor/bin/einvoice-validator validate rechnung.xml --matrix
vendor/bin/einvoice-validator ruleset:list
vendor/bin/einvoice-validator selftest

Der Rückgabewert ist 0 bei einer angenommenen Rechnung und 1 bei einer abgelehnten. Bei einem falschen Aufruf ist er 2. So können Sie die Prüfung auch in Skripte und Pipelines einbauen.

Mit der Option --cascade prüft VAMPIRE eine ZUGFeRD- oder Factur-X-Rechnung zuerst nach den Regeln der neuesten Fassung und, falls sie dort abgelehnt wird, nach den Regeln der nächstälteren. Es hält bei der ersten Fassung an, nach deren Regeln die Rechnung angenommen wird. Nimmt keine Fassung die Rechnung an, zeigt VAMPIRE den Bericht der neuesten Fassung, denn die Rechnung ist dann in jeder Fassung fehlerhaft, und die neueste ist die maßgebliche. Die Option --matrix prüft dagegen jede Fassung und gibt eine Tabelle mit einer Zeile je Fassung aus; so sehen Sie das Ergebnis jeder einzelnen Fassung.


So prüfen Sie Rechnungen aus horstoeko/zugferd

Erzeugen Sie Ihre Rechnungen mit horstoeko/zugferd oder horstoeko/invoicesuite? Dann kann VAMPIRE PHP sie im selben Prozess prüfen, ohne Umweg über eine Datei. Sie übergeben das fertige Dokument einfach an den Validator:

$result = $validator->validateDom( $document->getContentAsDomDocument() );

$document ist das Dokument, das Sie mit ZugferdDocumentBuilder aufgebaut haben. $validator ist der Validator aus dem ersten Beispiel. Liegt Ihnen das XML als Zeichenkette vor, nehmen Sie stattdessen validateString(). Ein Zusatzpaket brauchen Sie dafür nicht, denn Sie rufen VAMPIRE PHP ganz gewöhnlich auf.


So bekommen Sie neue Regelstände

Neue Regelstände erscheinen als neue Version des Pakets, und der Befehl composer update invoicepress/vampire-php holt sie. Die Regelpakete sind frei, ein Abo dafür gibt es nicht.

Gleiches Ergebnis wie der KoSIT-Validator220 von 220
Genau dieselben Regeln ausgelöst215 von 220
Vergleich mit dem offiziellen KoSIT-Validator an den 220 Rechnungen, die beide einem Regelwerk zuordnen konnten: gleiches Ergebnis gemessen am 9. Oktober 2026, gleiche Regeln mit VAMPIRE PHP gemessen am 7. Oktober 2026.

Wie wir gemessen haben, steht im Abschnitt „Wie gemessen wurde“ am Ende dieser Seite. Installieren Sie VAMPIRE PHP jetzt kostenlos mit Composer und prüfen Sie Ihre erste Rechnung.


Wie gemessen wurde

  • 220 von 220 Rechnungen, bei denen VAMPIRE und der offizielle KoSIT-Validator zum selben Ergebnis kamen (gemessen am 09.10.2026): Wir haben 253 Testrechnungen mit VAMPIRE und mit dem offiziellen KoSIT-Validator geprüft. 220 davon konnten beide einem Regelwerk zuordnen, und bei allen 220 kamen beide zum selben Ergebnis, also angenommen oder abgelehnt. Bei 215 dieser 220 Rechnungen lösten sogar genau dieselben Regeln aus; bei den übrigen fünf liegt der Unterschied an der Fassung der EN-16931-Regeln für CII, denn der KoSIT-Validator bringt die Fassung 1.3.15 mit und VAMPIRE die Fassung 1.3.16. Die restlichen 33 Rechnungen konnte keines der beiden Prüfprogramme einem Regelwerk zuordnen. Stand der Messung: 9. Oktober 2026.
  • 97,7 % / 100 % der Rechnungen, bei denen VAMPIRE PHP und der offizielle KoSIT-Validator genau dieselben Regeln auslösten, vor und nach Abzug eines erklärten Unterschieds in der Fassung der Regeln (gemessen am 07.10.2026): Wir haben 220 Rechnungen, die VAMPIRE einem Regelwerk zuordnen konnte, mit VAMPIRE PHP und mit dem offiziellen KoSIT-Validator geprüft und verglichen, welche Regeln auslösen. Bei 215 der 220 Rechnungen lösten genau dieselben Regeln aus, das sind 97,7 Prozent. Die übrigen fünf sind XRechnungen in CII, bei denen VAMPIRE die neuere Fassung 1.3.16 der EN-16931-Regeln anwendet und der KoSIT-Validator die Fassung 1.3.15; rechnet man diesen bekannten Unterschied heraus, stimmen 100 Prozent überein. Wir nennen beide Zahlen, weil die erste allein den Grund verschweigen und die zweite allein zu gut aussehen würde.
  • 2 544 Vergleiche von VAMPIRE JS mit VAMPIRE PHP, je ein Regelwerk mit einer Rechnung, alle ohne eine einzige Abweichung (gemessen am 09.10.2026): Jedes Regelwerk lief in VAMPIRE JS und in VAMPIRE PHP über alle Rechnungen seines Formats. Für jedes Paar aus Regelwerk und Rechnung haben wir verglichen, welche Regeln ausgelöst haben. Das ergab 2 544 Vergleiche mit 0 Abweichungen und 0 Abbrüchen.
  • 253 von 253 Rechnungen, für die VAMPIRE JS und VAMPIRE PHP genau denselben Prüfbericht geliefert haben (gemessen am 09.10.2026): Wir haben 253 Rechnungen mit VAMPIRE JS und mit VAMPIRE PHP geprüft und die beiden Berichte jeder Rechnung miteinander verglichen. Verglichen wurden das erkannte Regelwerk, das Ergebnis (angenommen oder abgelehnt), die Ergebnisse der vier Prüfschritte (Wohlgeformtheit, Schema, Syntaxregeln, Geschäftsregeln), alle 184 Befunde mit Text und Fundstelle sowie der Bericht im Format des KoSIT-Validators Byte für Byte. Bei allen 253 Rechnungen war der Bericht gleich. Die Rechnungen stammen zu 144 aus unserem eigenen Prüfkorpus und zu 109 aus der Testsuite der XRechnung 3.0.2.

VAMPIRE PHP frei, VAMPIRE JS im Shop.

VAMPIRE PHP und alle Regelpakete sind frei und liegen auf GitHub und Packagist. VAMPIRE JS erwerben Sie im Shop von invoicePress.de.