Test invoices
Every invoice used in testing, grouped by set. Each PDF is exactly what the tool was given; its answer key lists what the tool should find. Links open in a new tab. All invoices are fictitious test data: company names, addresses and tax numbers are invented.
Corpus A: independent invoices
30 invoices written independently of the extractor: 10 page structures, 8 currencies, 6 tax regimes and 4 languages. 15 are correct; 15 contain a random set of one to three mistakes.
| Invoice | Page structure | Currency | What the tool should find | Answer key |
|---|---|---|---|---|
| invoice-001 (PDF) | letter | EUR | Correct invoice | JSON |
| invoice-002 (PDF) | banner | AUD | tax mismatch | JSON |
| invoice-003 (PDF) | sidebar | GBP | Correct invoice | JSON |
| invoice-004 (PDF) | receipt | USD | missing vat id; grand total mismatch; line total mismatch (line 2) | JSON |
| invoice-005 (PDF) | taxsummary | CHF | Correct invoice | JSON |
| invoice-006 (PDF) | qtyfirst | EUR | duplicate charge (line 6); line total mismatch (line 4) | JSON |
| invoice-007 (PDF) | letterhead | INR | Correct invoice | JSON |
| invoice-008 (PDF) | compact | EUR | duplicate charge (line 6); missing vat id; grand total mismatch | JSON |
| invoice-009 (PDF) | cards | AUD | Correct invoice | JSON |
| invoice-010 (PDF) | multipage | EUR | duplicate charge (line 17) | JSON |
| invoice-011 (PDF) | letter | USD | subtotal mismatch; tax mismatch; line total mismatch (line 4); line total mismatch (line 5) | JSON |
| invoice-012 (PDF) | banner | GBP | Correct invoice | JSON |
| invoice-013 (PDF) | sidebar | USD | subtotal mismatch | JSON |
| invoice-014 (PDF) | receipt | PKR | Correct invoice | JSON |
| invoice-015 (PDF) | taxsummary | EUR | subtotal mismatch; line total mismatch (line 5); line total mismatch (line 2) | JSON |
| invoice-016 (PDF) | qtyfirst | CAD | Correct invoice | JSON |
| invoice-017 (PDF) | letterhead | EUR | grand total mismatch; tax mismatch; subtotal mismatch | JSON |
| invoice-018 (PDF) | compact | AUD | Correct invoice | JSON |
| invoice-019 (PDF) | cards | GBP | duplicate charge (line 4); subtotal mismatch | JSON |
| invoice-020 (PDF) | multipage | USD | Correct invoice | JSON |
| invoice-021 (PDF) | letter | CHF | Correct invoice | JSON |
| invoice-022 (PDF) | banner | EUR | tax mismatch; subtotal mismatch; line total mismatch (line 4) | JSON |
| invoice-023 (PDF) | sidebar | INR | Correct invoice | JSON |
| invoice-024 (PDF) | receipt | EUR | duplicate charge (line 7) | JSON |
| invoice-025 (PDF) | taxsummary | AUD | Correct invoice | JSON |
| invoice-026 (PDF) | qtyfirst | EUR | line total mismatch (line 2) | JSON |
| invoice-027 (PDF) | letterhead | USD | Correct invoice | JSON |
| invoice-028 (PDF) | compact | GBP | tax mismatch | JSON |
| invoice-029 (PDF) | cards | USD | Correct invoice | JSON |
| invoice-030 (PDF) | multipage | PKR | duplicate charge (line 17); line total mismatch (line 4); subtotal mismatch | JSON |
Corpus B: built-in generator
40 invoices from the project's own generator in 10 visual designs. Half are correct; the other half have one planted error each.
| Invoice | Design | Currency | What the tool should find | Answer key |
|---|---|---|---|---|
| invoice-001 (PDF) | corporate-blue | EUR | Correct invoice | JSON |
| invoice-002 (PDF) | serif-classic | GBP | Correct invoice | JSON |
| invoice-003 (PDF) | mono-receipt | EUR | Correct invoice | JSON |
| invoice-004 (PDF) | modern-green | USD | Correct invoice | JSON |
| invoice-005 (PDF) | bordered-grid | EUR | Correct invoice | JSON |
| invoice-006 (PDF) | letterhead-logo | EUR | Correct invoice | JSON |
| invoice-007 (PDF) | compact-orange | EUR | Correct invoice | JSON |
| invoice-008 (PDF) | large-print | EUR | Correct invoice | JSON |
| invoice-009 (PDF) | slate-tall-header | EUR | Correct invoice | JSON |
| invoice-010 (PDF) | teal-minimal | EUR | Correct invoice | JSON |
| invoice-011 (PDF) | corporate-blue | USD | grand total mismatch | JSON |
| invoice-012 (PDF) | serif-classic | EUR | grand total mismatch | JSON |
| invoice-013 (PDF) | mono-receipt | GBP | missing vat id | JSON |
| invoice-014 (PDF) | modern-green | EUR | tax mismatch | JSON |
| invoice-015 (PDF) | bordered-grid | EUR | missing vat id | JSON |
| invoice-016 (PDF) | letterhead-logo | EUR | line total mismatch (line 2) | JSON |
| invoice-017 (PDF) | compact-orange | USD | missing vat id | JSON |
| invoice-018 (PDF) | large-print | EUR | subtotal mismatch | JSON |
| invoice-019 (PDF) | slate-tall-header | GBP | subtotal mismatch | JSON |
| invoice-020 (PDF) | teal-minimal | EUR | line total mismatch (line 2) | JSON |
| invoice-021 (PDF) | corporate-blue | GBP | Correct invoice | JSON |
| invoice-022 (PDF) | serif-classic | EUR | Correct invoice | JSON |
| invoice-023 (PDF) | mono-receipt | EUR | Correct invoice | JSON |
| invoice-024 (PDF) | modern-green | EUR | Correct invoice | JSON |
| invoice-025 (PDF) | bordered-grid | GBP | Correct invoice | JSON |
| invoice-026 (PDF) | letterhead-logo | GBP | Correct invoice | JSON |
| invoice-027 (PDF) | compact-orange | EUR | Correct invoice | JSON |
| invoice-028 (PDF) | large-print | EUR | Correct invoice | JSON |
| invoice-029 (PDF) | slate-tall-header | USD | Correct invoice | JSON |
| invoice-030 (PDF) | teal-minimal | USD | Correct invoice | JSON |
| invoice-031 (PDF) | corporate-blue | GBP | subtotal mismatch | JSON |
| invoice-032 (PDF) | serif-classic | EUR | subtotal mismatch | JSON |
| invoice-033 (PDF) | mono-receipt | EUR | tax mismatch | JSON |
| invoice-034 (PDF) | modern-green | GBP | grand total mismatch | JSON |
| invoice-035 (PDF) | bordered-grid | EUR | grand total mismatch | JSON |
| invoice-036 (PDF) | letterhead-logo | EUR | subtotal mismatch | JSON |
| invoice-037 (PDF) | compact-orange | USD | grand total mismatch | JSON |
| invoice-038 (PDF) | large-print | EUR | missing vat id | JSON |
| invoice-039 (PDF) | slate-tall-header | EUR | line total mismatch (line 3) | JSON |
| invoice-040 (PDF) | teal-minimal | GBP | line total mismatch (line 4) | JSON |
Corpus C: multi-page invoices
40 multi-page invoices with 40 answer keys, made with a separate multi-page generator: 9 run to two pages, 21 to three and 10 to four, and 20 carry a planted mistake. They have wrapped descriptions, section totals, carried-forward rows, deposits and other content that single-page invoices do not have.
| Invoice | Page structure | Currency | What the tool should find | Answer key |
|---|---|---|---|---|
| invoice-001 (PDF) | inline | CHF | Correct invoice | JSON |
| invoice-002 (PDF) | stacked | CHF | Correct invoice | JSON |
| invoice-003 (PDF) | wide | CAD | Correct invoice | JSON |
| invoice-004 (PDF) | inline | SEK | Correct invoice | JSON |
| invoice-005 (PDF) | wide | SEK | Correct invoice | JSON |
| invoice-006 (PDF) | inline | EUR | Correct invoice | JSON |
| invoice-007 (PDF) | wide | SEK | Correct invoice | JSON |
| invoice-008 (PDF) | coded | CHF | Correct invoice | JSON |
| invoice-009 (PDF) | stacked | CAD | Correct invoice | JSON |
| invoice-010 (PDF) | stacked | AUD | Correct invoice | JSON |
| invoice-011 (PDF) | inline | CHF | subtotal mismatch | JSON |
| invoice-012 (PDF) | coded | CHF | line total mismatch (line 14) | JSON |
| invoice-013 (PDF) | inline | CAD | subtotal mismatch | JSON |
| invoice-014 (PDF) | coded | EUR | line total mismatch (line 49) | JSON |
| invoice-015 (PDF) | inline | SEK | line total mismatch (line 58) | JSON |
| invoice-016 (PDF) | classic | SEK | line total mismatch (line 40) | JSON |
| invoice-017 (PDF) | coded | CHF | line total mismatch (line 46) | JSON |
| invoice-018 (PDF) | inline | CAD | grand total mismatch | JSON |
| invoice-019 (PDF) | wide | CHF | grand total mismatch | JSON |
| invoice-020 (PDF) | wide | EUR | line total mismatch (line 73) | JSON |
| invoice-021 (PDF) | wide | CHF | Correct invoice | JSON |
| invoice-022 (PDF) | stacked | AUD | Correct invoice | JSON |
| invoice-023 (PDF) | wide | SEK | Correct invoice | JSON |
| invoice-024 (PDF) | classic | AUD | Correct invoice | JSON |
| invoice-025 (PDF) | inline | EUR | Correct invoice | JSON |
| invoice-026 (PDF) | classic | AUD | Correct invoice | JSON |
| invoice-027 (PDF) | stacked | CHF | Correct invoice | JSON |
| invoice-028 (PDF) | wide | AUD | Correct invoice | JSON |
| invoice-029 (PDF) | stacked | EUR | Correct invoice | JSON |
| invoice-030 (PDF) | wide | EUR | Correct invoice | JSON |
| invoice-031 (PDF) | classic | CAD | subtotal mismatch | JSON |
| invoice-032 (PDF) | inline | EUR | grand total mismatch | JSON |
| invoice-033 (PDF) | coded | EUR | line total mismatch (line 15) | JSON |
| invoice-034 (PDF) | wide | AUD | grand total mismatch | JSON |
| invoice-035 (PDF) | stacked | CHF | tax mismatch | JSON |
| invoice-036 (PDF) | inline | EUR | grand total mismatch | JSON |
| invoice-037 (PDF) | classic | AUD | line total mismatch (line 3) | JSON |
| invoice-038 (PDF) | classic | CAD | subtotal mismatch | JSON |
| invoice-039 (PDF) | wide | CAD | missing vat id | JSON |
| invoice-040 (PDF) | coded | EUR | line total mismatch (line 23) | JSON |
Corpus D: new independent invoices
30 invoices written independently of the extractor, after all the fixes in Report 4: 10 different kinds of document (till receipt, amount-first bill, prose list, e-mail, cards, grouped, tax column, quantity-first, sidebar and summary-first), 11 currencies and 6 languages. 15 are correct; 15 contain one to three planted mistakes.
| Invoice | Document kind | Currency | What the tool should find | Answer key |
|---|---|---|---|---|
| invoice-001 (PDF) | receipt | SEK | Correct invoice | JSON |
| invoice-002 (PDF) | summaryfirst | BRL | subtotal mismatch | JSON |
| invoice-003 (PDF) | prose | USD | Correct invoice | JSON |
| invoice-004 (PDF) | qtyfirst | NZD | line total mismatch (line 4) | JSON |
| invoice-005 (PDF) | sidebar | MXN | Correct invoice | JSON |
| invoice-006 (PDF) | grouped | EUR | tax mismatch, grand total mismatch | JSON |
| invoice-007 (PDF) | taxcolumn | SGD | Correct invoice | JSON |
| invoice-008 (PDF) | cards | EUR | duplicate charge (line 4) | JSON |
| invoice-009 (PDF) | amountfirst | EUR | Correct invoice | JSON |
| invoice-010 (PDF) | ZAR | grand total mismatch | JSON | |
| invoice-011 (PDF) | receipt | GBP | subtotal mismatch, line total mismatch (line 1) | JSON |
| invoice-012 (PDF) | summaryfirst | EUR | Correct invoice | JSON |
| invoice-013 (PDF) | prose | AED | line total mismatch (line 7), tax mismatch, subtotal mismatch | JSON |
| invoice-014 (PDF) | qtyfirst | CAD | Correct invoice | JSON |
| invoice-015 (PDF) | sidebar | SEK | line total mismatch (line 3), line total mismatch (line 4), subtotal mismatch | JSON |
| invoice-016 (PDF) | grouped | BRL | Correct invoice | JSON |
| invoice-017 (PDF) | taxcolumn | USD | subtotal mismatch, tax mismatch | JSON |
| invoice-018 (PDF) | cards | NZD | Correct invoice | JSON |
| invoice-019 (PDF) | amountfirst | MXN | line total mismatch (line 3), line total mismatch (line 6), missing vat id, grand total mismatch | JSON |
| invoice-020 (PDF) | EUR | Correct invoice | JSON | |
| invoice-021 (PDF) | receipt | SGD | Correct invoice | JSON |
| invoice-022 (PDF) | summaryfirst | EUR | line total mismatch (line 2) | JSON |
| invoice-023 (PDF) | prose | EUR | Correct invoice | JSON |
| invoice-024 (PDF) | qtyfirst | ZAR | subtotal mismatch | JSON |
| invoice-025 (PDF) | sidebar | GBP | Correct invoice | JSON |
| invoice-026 (PDF) | grouped | EUR | line total mismatch (line 1) | JSON |
| invoice-027 (PDF) | taxcolumn | AED | Correct invoice | JSON |
| invoice-028 (PDF) | cards | CAD | subtotal mismatch | JSON |
| invoice-029 (PDF) | amountfirst | SEK | Correct invoice | JSON |
| invoice-030 (PDF) | BRL | line total mismatch (line 5), line total mismatch (line 6) | JSON |