sales@mtechzilla.com+1 302 208 5468
Electric Vehicle

How We Built AI Invoice Automation for a Swiss EV Charging Startup

How We Built AI Invoice Automation for a Swiss EV Charging Startup

Team Members

Dedicated AI Team

Duration

Ongoing

About the Client

Our client is a Swiss e-mobility startup that operates EV charging installations on behalf of property owners and organizations across Switzerland. The electricity behind every installation is billed by the local power utility, and each billing period the utility sends a PDF invoice for that installation's meter—net amount, VAT, billing period, and kWh consumed. With installations spread across the country, invoices arrive from hundreds of different utilities in four languages, each with its own layout, running anywhere from 3 to 10 pages. Those figures feed the installation's meter bill and everything downstream of it, so accuracy is non-negotiable—yet capturing them meant an admin reading each PDF and typing the numbers in by hand.

Results

4

invoice languages handled—German, French, Italian, and English

3–10

pages per utility invoice, parsed in a single pass

100%

of financial figures human-verified before anything is saved

Results

How we designed AI around financial accuracy

Approach to building AI invoice automation

The invoice finds its installation

Previously an admin picked an installation, then typed what the invoice said. We inverted it: drop any invoice in, and the system infers which installation it belongs to. The inferred ID resolves live to the real installation on screen, so the admin confirms a match instead of hunting for one.

Deterministic wherever possible, AI where necessary

Swiss invoices carry a QR-bill. We crop and sharpen that region and parse the gross amount straight from the QR code—a deterministic source the model can't get wrong. The AI extracts only what has no machine-readable source.

Four languages, one strict schema

Whether an invoice arrives in German, French, Italian, or English, every page is rendered to a high-resolution image, split into overlapping slices so nothing is lost at the cut lines, and read by GPT-5.4 against a strict extraction schema that returns the same structured fields every time.

The AI drafts, the admin decides

The AI never submits anything. Extracted values land pre-filled in a form beside the PDF, a visible warning asks the admin to cross-check, and nothing is stored until they confirm—keeping a human as the decision-maker exactly where errors are most expensive.

From manual entry to assisted capture

  • Understand - We mapped the manual flow—open the installation, verify the UUID on the invoice, upload the PDF, type period, amounts, and VAT by hand—and pinpointed where a human transcription step put financial figures at risk.
  • Extract - We built the extraction pipeline: each PDF page rendered to a high-resolution image with its text layer, sliced into overlapping segments, the Swiss QR-bill region parsed deterministically, and GPT-4.1 returning structured fields against a strict schema.
  • Review - We designed the confirmation experience: extracted fields pre-filled beside a PDF viewer, the inferred installation resolving live so the admin verifies the match, and explicit warnings before anything is saved.
  • Extend - Once tariff markup pricing existed in the platform, we grafted on a second step: each confirmed invoice is compared against what the client already collected from drivers, producing a suggested per-kWh markup the admin can accept or overwrite.
Understand
Extract
Review
Extend

Technology we chose for this project

AI & Document Intelligence

  • OpenAI GPT-5.4
    OpenAI GPT-5.4
  • QR-Bill Parsing
    QR-Bill Parsing
  • Node.js
    Node.js

AWS Infrastructure

  • AWS Lambda
    AWS Lambda
  • Amazon SQS
    Amazon SQS
  • Amazon S3
    Amazon S3
  • Amazon DynamoDB
    Amazon DynamoDB
AI invoice automation extraction and review flow

What We Did

We built a dedicated invoice automation screen inside the client's admin platform. An admin drops in a utility invoice PDF—large files upload straight to Amazon S3 through pre-signed URLs to stay under request-size limits—and invoice data extraction jobs are queued through Amazon SQS to AWS Lambda workers. The pipeline renders every page to a high-resolution image, extracts its OCR text layer, slices each page into overlapping segments so nothing is lost at the cut lines, and separately crops and sharpens the Swiss QR-bill region to read the gross amount straight from the QR code. GPT-5.4 reads the segments and text against a strict extraction schema and returns the invoice fields—installation ID, billing period, net amount, VAT percentage, document type, and kWh consumed—as structured data stored in DynamoDB.

Crucially, the AI never submits anything. The extracted values land pre-filled in a form shown side by side with the PDF, the inferred installation resolves live so the admin can confirm it's the right one, and a visible warning asks them to cross-check. Only on confirmation is the document saved against the installation—the same trusted output as the manual path, with the reading and typing removed. The extraction launched on GPT-4.1 and now runs GPT-5.4—the strict schema made the model upgrade invisible to admins.

Result & Impact

Impact of AI invoice automation on operations

Capturing a utility invoice went from reading a multi-page, multi-language PDF and typing every figure by hand to a few seconds of review and one confirmation. The human transcription step disappeared from exactly the place where errors were most expensive—financial figures that the installation's meter bill and everything downstream depend on—while a human remains the final decision-maker on every document.

The captured data then became more than a record. For each confirmed invoice, the system compares what the utility charged for the period against what the client had already collected from drivers at that installation, and turns the gap into a suggested per-kWh tariff markup—shown alongside a chart of how that installation's markup has moved over time. The admin can overwrite the suggestion, and nothing applies until they confirm. What started as invoice capture now closes the loop between cost and pricing, one billing period at a time.

Frequently Asked Questions

Why does a human still confirm every invoice?

Because the figures being captured are financial. The invoice amounts feed the installation's meter bill and everything downstream of it, so a silent extraction error would be expensive. The AI does the reading and typing, but the extracted values are always presented beside the original PDF for an admin to verify—nothing is stored until they confirm.

How does the system know which installation an invoice belongs to?

The extraction model infers the installation ID from the invoice itself, and the screen resolves that ID live to the real installation so the admin can see exactly what the document is about to be attached to. This inverts the old flow, where the admin had to pick the installation first and manually check that the UUID printed on the invoice matched.

Where do the extracted amounts come from?

From two sources, by design. The gross amount is parsed deterministically from the Swiss QR-bill printed on the invoice—cropped, sharpened, and read straight from the QR code, so the model can't get it wrong. Fields with no machine-readable source—billing period, net amount, VAT percentage, kWh consumed, document type—are extracted by GPT-5.4 against a strict schema. Wherever a deterministic source exists, it is preferred over the model.

How does it handle invoices in different languages and lengths?

Utility invoices arrive in German, French, Italian, and English, running from 3 to 10 pages. Every page is rendered to a high-resolution image alongside its text layer and sliced into overlapping segments so nothing is lost at the cut lines. The strict extraction schema returns the same structured fields regardless of the invoice's language or layout.

What is the tariff markup suggestion?

A second step added once markup pricing existed in the client's platform. For each confirmed invoice, the system computes the gap between what the utility charged for the period and what the client had already collected from drivers at that installation, and converts it into a suggested per-kWh markup shown with the installation's markup history. The admin can accept or overwrite the suggestion—nothing is applied without confirmation.