Skip to content

Lab · Test bench

Jev reads along: what the text says and the field leaves out

An e-invoice carries many details twice: as a structured field and as free text. Software that reads only the structured fields misses a detail that appears in the text alone. We measured 34 test invoices from the XRechnung test suite, ten questions per invoice, 340 verdicts in total.

Test bench

Ten questions, one request per invoice

Each row is a test invoice, each column a detail. The fill shows how sure Jev is that the free text contains the detail. The dot in a cell shows that the structured field is filled. The replay runs the measurement at the response times we recorded.

Test bench · field against text

Replay of the measurement from 22/09/2026no live requestModel jev-latest (jev-1.13.0)

Response time
11.3s
Requests
34/ 34
Verdicts
340/ 340
Input tokens
24,103

34 requests, 340 verdicts, 11.3 s of recorded response time.

Due dateBT-9
DiscountBT-20
Direct debitBT-81 = 59
PayeeBG-10
PrepaidBT-113
VAT exemptBT-118/151
OrderBT-13
ContractBT-12
PeriodBG-14/26
DeliveryBT-72
01.01a811 ms
01.02a300 ms
01.03a251 ms
01.04a322 ms
01.05a351 ms
01.06a334 ms
01.07a309 ms
01.08a402 ms
01.09a390 ms
01.10a338 ms
01.11a316 ms
01.12a331 ms
01.13a286 ms
01.14a329 ms
01.15a347 ms
01.17a291 ms
01.18a282 ms
01.19a276 ms
01.20a286 ms
01.21a311 ms
02.01a269 ms
02.02a343 ms
02.03a310 ms
02.04a304 ms
02.05a312 ms
02.06a318 ms
03.01a270 ms
03.02a363 ms
03.03a321 ms
03.04a298 ms
03.05a428 ms
03.06a286 ms
03.07a298 ms
04.05a303 ms

Arrow keys move between cells, Enter opens the detail panel.

Controls

Thresholds
text no0.30uncertain0.70text yes

The verdicts stay as they are. The thresholds only change the classification in code. No new request is needed for that.

Classes

A click fades out the other classes.

Order
Rows
Columns

Detail

Select a cell in the grid. The question, the verdict, the structured field and the free text of the invoice then appear here.

The numbers

How certain the verdicts are

Each dot is one verdict. Most sit close to 0 or close to 1. The hatched band between the thresholds is the set a person would look at. Its size is in the figures below.

All verdicts on one axisfield filledfield emptytext onlyThe threshold lines can be dragged.
0.00.10.20.30.40.50.60.70.80.91.00.300.70

Text against field, per detail

Payment due dateBT-9
Payment due date: verdicts by text and structured field
Field filledField empty
Text yes80
Text no1610

0 uncertain

Early payment discountBT-20 · #SKONTO#
Early payment discount: verdicts by text and structured field
Field filledField empty
Text yes14
Text no029

0 uncertain

Direct debitBT-81 = 59
Direct debit: verdicts by text and structured field
Field filledField empty
Text yes00
Text no331

0 uncertain

Different payeeBG-10
Different payee: verdicts by text and structured field
Field filledField empty
Text yes00
Text no826

0 uncertain

Prepaid amountBT-113
Prepaid amount: verdicts by text and structured field
Field filledField empty
Text yes00
Text no330

1 uncertain

VAT exemptionBT-118 / BT-151
VAT exemption: verdicts by text and structured field
Field filledField empty
Text yes30
Text no625

0 uncertain

Purchase order referenceBT-13
Purchase order reference: verdicts by text and structured field
Field filledField empty
Text yes00
Text no1024

0 uncertain

Contract referenceBT-12
Contract reference: verdicts by text and structured field
Field filledField empty
Text yes00
Text no1517

2 uncertain

Invoicing periodBG-14 / BG-26
Invoicing period: verdicts by text and structured field
Field filledField empty
Text yes02
Text no1113

8 uncertain

Actual delivery dateBT-72
Actual delivery date: verdicts by text and structured field
Field filledField empty
Text yes23
Text no719

3 uncertain

Figures

In the uncertainty band
4.1%14 of 340 verdicts
Text-only cells
96 confirmed by cross-check, 3 refuted
Field-only cells
79of 340 verdicts
Median response time per invoice
312 msten verdicts per request, 11.3 s in total

Findings

What the measurement shows

We count only cells in the class "text only" that a second language model checked one by one against the wording of the invoice. With 34 test invoices these are small numbers. They show that it happens, not how often it happens in real invoices.

4of 34 test invoices

Early payment discountBT-20 · #SKONTO#

In 4 of 34 test invoices the text offers an early payment discount that appears nowhere in machine-readable form. EN 16931 has no dedicated field for it. XRechnung provides an encoding with #SKONTO# in the payment terms text BT-20, and that encoding is missing here.

„Bei Zahlungen binnen 14 Tagen, 2% Skonto“

Supporting sentence from test case 01.15a

1of 34 test invoices

Invoicing periodBG-14 / BG-26

In 1 of 34 test invoices the text states a service period, yet neither the invoice nor any line item carries a period with start and end date (BG-14 / BG-26).

„Bearbeitungszeitraum: Dezember 2014/ 5.01.-09.01.2015“

Supporting sentence from test case 01.13a

Refuted by the cross-check and not counted: 1.

1of 34 test invoices

Actual delivery dateBT-72

In 1 of 34 test invoices the text says when goods were delivered or the service was performed, at least to the month. The delivery date BT-72 is empty.

„Die Lieferung erfolgte im Monat 06/2016.“

Supporting sentence from test case 01.03a

Refuted by the cross-check and not counted: 2.

Counted: 6 confirmed cells. Refuted and not counted: 3. Not cross-checked: 0.

Setup

Three roles, kept apart

The model judges the text and nothing else. What a field contains and what follows from it is decided by code that you can read and change.

  1. 01Code

    Code reads the fields

    A program checks in the XML file whether the structured field is filled, for example BT-9 for the payment due date. That needs no model. Where the check covers more than one field, the column says so, for example BG-14 / BG-26 for a period at invoice or line level.

  2. 02Model

    Jev reads the text

    Jev receives the free text only: notes, payment terms, line item texts and the reason for a VAT exemption. The ten yes or no questions go out in one request. For each question a probability between 0 and 1 comes back.

  3. 03Code

    Code compares

    The comparison and the thresholds live in code. Moving the thresholds changes the classification, not the verdicts. No new request is needed for that.

POST https://api.typesafe.ai/v1/systemoneRequest to Jev, shortened to the text part with the supporting sentence and one of the ten questions01.15a · Early payment discount
{
  "state": {
    "zahlungsbedingungen": [
      "Bei Zahlungen binnen 14 Tagen, 2% Skonto"
    ]
  },
  "model": "jev-latest",
  "questions": {
    "skonto": {
      "type": "noul",
      "instructions": "Does the text offer a cash discount (Skonto) for early payment?"
    }
  }
}
200 OKResponse from the measurement data, shortened to the same question. The input tokens count for the whole request.
{
  "answers": {
    "skonto": {
      "noul": 0.99
    }
  },
  "usage": {
    "input_tokens": 734
  }
}
modell.tsThe comparison in code. This excerpt is the function this page classifies with.
export function klasse(p: number, feldBelegt: boolean, unten: number, oben: number): Klasse {
  if (p > unten && p < oben) return 'unsicher';
  const textSagtEs = p >= oben;
  if (textSagtEs && !feldBelegt) return 'nurText';
  if (!textSagtEs && feldBelegt) return 'nurFeld';
  return 'stimmig';
}

Limits

What this measurement does not show

This page shows a measurement on test data. Here is what it supports and what it does not.

  • 01

    Test files, not real invoices

    The invoices come from a test suite. They are built to exercise rules and say nothing about how often a detail appears only in the text of real invoices. Some test cases are variants of the same invoice with the same free text, so a finding in several rows can go back to the same wording.

  • 02

    English questions about German text

    The questions to Jev are in English, the invoice texts in German. We did not measure German questions against them.

  • 03

    One run

    Each verdict comes from a single run. In an earlier measurement on the same test invoices, with different questions, a second run differed by at most 0.09.

  • 04

    Cross-check only for conspicuous cells

    At the default thresholds a second language model read every cell in the classes "text only" and "uncertain" against the wording of the invoice. A third, independent check then overturned three cells, which the detail panel marks as refuted. No person has reviewed this cross-check yet. A month in which goods were delivered counts as a delivery time, not as a service period. Consistent cells were not checked. If you move the thresholds, the detail panel shows which cells are unchecked.

  • 05

    Twelve line items at most

    For invoices with more than twelve line items, Jev saw the texts of the first twelve only. Anything further down was not part of the request.

  • 06

    Replay, not a live call

    The page plays back stored results. Your browser sends no request to a model.

  • 07

    Origin and licence

    The test invoices come from the XRechnung test suite by KoSIT, published under the Apache-2.0 licence. The price per million input tokens is listed in the TypeSafe model overview.

Why we measure this
Anyone who processes e-invoices automatically reads structured fields. This measurement shows where that falls short, and that a model can read the free text alongside with one request per invoice. The decision stays in code and is set with two thresholds.

Back to the Labor overview →

Which details in your invoices appear only in the text?

Bring a sample. Together we look at which details reach your accounting today only through free text and how that can be checked.

Schedule a conversation