Module

Purchasing

Purchase orders, goods receipt and supplier invoices in one module, with stock and valuation behind them. For companies that receive XRechnung and ZUGFeRD files and want to know what was actually delivered.

See it instead of reading it

Recorded in the running product, with real data — not an animation.

Suppliers and purchase ordersThe overview, suppliers by category, and orders with their status and delivery date.
Goods and invoicesGoods receipt, supplier invoice, and incoming e-invoices: XRechnung XML and ZUGFeRD PDF.
Payments, returns, numbersWhat goes out, what comes back, and what is still open at the end.

What the module does

Inventory included

Stock, movements, transfers, stocktaking and valuation come with it.

Whoever has Purchasing or Sales gets the warehouse at no extra cost: the same items, the same numbers, one stock for both sides.

Purchase orders

The server assigns the number (PO-000001) and the database calculates the totals.

Print on your letterhead with the supplier details, or send the order by email from the module itself.

Goods receipt

One command receives the whole order

  • document
  • stock rows locked one by one
  • movements
  • the product's stock level
  • all in a single transaction

When only part of the delivery arrives, you enter the lines and quantities by hand.

Order against receipt

A line by line comparison of what was ordered, received and rejected, with the exact shortfall on every item and an overall result for the order.

Incoming e-invoices

XRechnung in UBL and in CII is detected and read, and for ZUGFeRD and Factur-X the embedded XML is pulled out of the PDF.

The file is checked against the base rules of EN 16931 with their BR codes (number, date, seller VAT number, lines, net plus VAT matching the total) and against the IBAN check digit.

Third party XML is parsed with entities and DTD switched off, so a hostile file cannot read the server.

From the mailbox to a draft, without duplicates

Mark a mailbox and the e-invoices attached to incoming mail become draft purchase invoices, with the email still linked to the document.

Structured formats only, never OCR.

A duplicate is caught on supplier plus number and refused with a link to the invoice already on file.

PDF with no XML: OCR and AI

A PDF only invoice, or a photograph of one, goes through OCR in four languages and an AI extraction on the text.

The result stays a draft for a person to check and is never imported on its own.

Payments, ageing, returns and credit notes

Payments are recorded on the invoice, and the database works out partly paid or paid, counting credit notes as well.

Open items are grouped 0-30, 31-60, 61-90 and over 90 days.

A return to the supplier moves the stock out when it ships, and credit and debit notes reduce what is owed.

Movements, stock value, stocktake

The movement ledger is append only: a correction is a reverse movement.

Valuation runs on moving average or FIFO, recalculated every two minutes, with a value report and a reconciliation against the stock account.

Physical stocktake with counting, a close that writes the adjustments and a printable count record, transfers between warehouses with goods in transit, and a reorder point that opens a draft order per supplier.

How the work runs

  1. Raise the order: number from the server, totals from the database. Print it on the letterhead or email it to the supplier from the module.
  2. Goods arrive: receive the whole order with one command, or enter lines and quantities by hand for a partial delivery.
  3. Read the match: what is missing per item, what was rejected, where the order stands overall.
  4. The invoice arrives by email or is uploaded: XRechnung and ZUGFeRD are read and checked against EN 16931, and a duplicate from the same supplier is refused.
  5. Record the payment on the invoice, look at open items by age, and let returns and credit notes reduce the balance.
  6. Count the stocktake, post the differences, reconcile the stock value against the stock account.

Frequently asked questions

Which invoice formats are read on the incoming side?

XRechnung as UBL 2.1 and as UN/CEFACT CII, plus ZUGFeRD and Factur-X, where the XML is extracted from the PDF/A-3 (factur-x.xml, zugferd-invoice.xml, xrechnung.xml). The parser was written against the standard rather than taken from a third party library, and the supplier's XML is opened with entities and DTD disabled.

What happens if a supplier sends the same invoice twice?

The database checks on company, supplier and number, not on the number alone, because the supplier assigns the number and two suppliers can both issue a 2026-001. The duplicate is refused with a link to the invoice already on file. If you decide to keep it, it is marked as an intended duplicate and that mark stays in the data.

The other modules

There is a page for this industry too: Retail