Duplikatprüfung
Rechnungen mit hohem Duplikatrisiko klären, damit ein blockierter DATEV-Export wieder läuft.
Eine Rechnung, die von der Duplikaterkennung mit 0.85 oder höher bewertet wird, blockiert den DATEV-CSV-Export, bis eine Person darüber entscheidet. Die Duplikatprüfung hält diese Entscheidung fest — und nur sie hebt die Blockade auf.
Die Entscheidung löscht, verschmilzt oder ändert keine Rechnungsdaten. Sie hält lediglich fest, was die Rechnung ist.
Warum ein Export blockiert
Jede Rechnung, die in einem Tarif mit Intelligence-Funktionen gespeichert wird, trägt einen bei der Extraktion gegen Ihre jüngsten Rechnungen berechneten Duplikat-Score. Eine Rechnung blockiert einen DATEV-Export, wenn beides zutrifft:
- ihr Duplikatrisiko liegt bei
0.85oder höher und - es liegt noch keine Prüfentscheidung vor — der Prüfstatus fehlt oder lautet
pending.
Eine einzige blockierende Rechnung lässt den gesamten Export scheitern. Es entsteht keine Teil-CSV: Eine ins DATEV gebuchte Doppelrechnung wird doppelt verbucht, deshalb scheitert der Export lieber ganz, als stillschweigend eine Zeile wegzulassen.
Die Ablehnung ist ein 409:
{
"error": {
"code": "datev_export_blocked",
"message": "Der DATEV-Export ist blockiert, weil mögliche Doppelrechnungen geprüft werden müssen. Klären oder klassifizieren Sie diese vor dem Export.",
"blocking_invoice_count": 2,
"blocking_invoice_ids": [
"6f1c2b8e-0f2a-4a1d-9c47-7b4e1f2a3d55",
"b3d9a1c4-52e7-4f08-8c3b-1a9d6e5f0c22"
]
}
}
Zurückgegeben werden ausschließlich Ihre eigenen Rechnungs-IDs — niemals Lieferantennamen, Beträge oder Belegnummern.
Die Prüfliste gibt es nur im Dashboard
Die Liste, die blockierte Rechnungen den zugehörigen Duplikatkandidaten gegenüberstellt, ist nicht Teil der öffentlichen API. GET /v1/internal/user/invoices/duplicate-review-queue ist eine interne Route: Sie ist aus dem OpenAPI-Schema ausgenommen und authentifiziert sich mit der internen Berechtigung des Dashboards, nicht mit Ihrem API-Schlüssel.
Im Dashboard finden Sie sie unter Einstellungen → Sicherheit im Abschnitt Datenexport, wo ein blockierter DATEV-Export den Prüfdialog für die genannten Rechnungen öffnet.
Der Entscheidungs-Endpunkt weiter unten ist öffentlich. Eine Integration, die bereits weiß, welche Rechnungen blockieren — die blocking_invoice_ids des Exports sagen es ihr —, kann sie also ohne Dashboard klären. Was über die öffentliche API nicht geht, ist der Abruf der Gegenüberstellung, die das Dashboard zeigt.
Eine Entscheidung festhalten
PATCH /v1/invoices/{invoice_id}/duplicate-review hält die Entscheidung fest. Der Endpunkt authentifiziert sich mit Ihrem API-Schlüssel und ist nicht an einen Tarif gebunden: Der DATEV-Export selbst setzt Pro oder Business voraus, aber jeder authentifizierte Eigentümer kann eine Blockade auflösen.
curl -X PATCH "https://api.parsurai.com/v1/invoices/6f1c2b8e-0f2a-4a1d-9c47-7b4e1f2a3d55/duplicate-review" \
-H "X-API-Key: $PARSURAI_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"status": "confirmed_duplicate",
"note": "Vom Lieferanten am 12. Juni erneut versandt.",
"duplicate_of_invoice_id": "b3d9a1c4-52e7-4f08-8c3b-1a9d6e5f0c22"
}'
| Feld | Typ | Pflicht | Beschreibung |
|---|---|---|---|
status | string | Ja | Die Entscheidung. pending wird abgelehnt — das ist keine Entscheidung |
note | string | Nein | Freitext, höchstens 1000 Zeichen |
duplicate_of_invoice_id | UUID | Bedingt | Pflicht bei confirmed_duplicate, bei jedem anderen Status abgelehnt |
{
"invoice_id": "6f1c2b8e-0f2a-4a1d-9c47-7b4e1f2a3d55",
"duplicate_review_status": "confirmed_duplicate",
"duplicate_reviewed_at": "2026-06-14T09:12:44Z",
"duplicate_of_invoice_id": "b3d9a1c4-52e7-4f08-8c3b-1a9d6e5f0c22"
}
Entscheidungen und ihre Wirkung
| Status | Bedeutung | Wirkung auf den nächsten DATEV-Export |
|---|---|---|
confirmed_duplicate | Diese Rechnung dupliziert eine andere Rechnung von Ihnen | Hebt die Blockade auf; diese Rechnung erzeugt keine Buchungszeile |
confirmed_not_duplicate | Der Treffer ist ein Fehlalarm | Hebt die Blockade auf; diese Rechnung wird normal exportiert |
excluded_from_export | Rechnung behalten, aber nie verbuchen | Hebt die Blockade auf; diese Rechnung erzeugt keine Buchungszeile |
pending | — | Abgelehnt: Eine Rechnung kann nicht auf „pending“ zurückgesetzt werden |
Nutzen Sie excluded_from_export, wenn die Rechnung nicht verbucht werden soll, Sie aber die duplizierte Rechnung nicht benennen können. confirmed_duplicate verlangt diese ID immer.
Eine vom Export ausgenommene Rechnung bleibt in Ihrem Workspace unangetastet — sie fällt aus dem Stapel, wird aber nicht gelöscht.
Fehlerbehandlung
| Status | Code | Typische Ursache |
|---|---|---|
404 | — | Die Rechnung liegt nicht in Ihrem Workspace |
422 | invalid_duplicate_review | status ist pending |
422 | invalid_duplicate_review | confirmed_duplicate ohne duplicate_of_invoice_id |
422 | invalid_duplicate_review | duplicate_of_invoice_id mit einem anderen Status gesendet |
422 | invalid_duplicate_review | duplicate_of_invoice_id verweist auf die Rechnung selbst |
422 | invalid_duplicate_review | duplicate_of_invoice_id gehört nicht zu Ihren Rechnungen |
Eine referenzierte fremde Rechnung wird als „nicht gefunden“ gemeldet, nicht als „nicht Ihre“. Der Endpunkt taugt damit nicht, um Rechnungs-IDs fremder Workspaces zu erraten.
Klären Sie die gesamte Liste aus blocking_invoice_ids, bevor Sie den Export erneut starten. Eine einzige offene Rechnung lässt den Stapel wieder scheitern — einzeln abzuarbeiten kostet also einen abgelehnten Export pro Rechnung.