DE
All projects

Case study · Custom ERP · Wood processing

From the sawmill to the tax return — one ERP for make-to-order manufacturing.

An SME in the timber industry manufactures profiled and structural timber to order. The custom ERP connects machine-level production scheduling with sales, purchasing, batch-level inventory and audit-proof financial accounting compliant with GoBD — Germany's principles for proper digital bookkeeping — in one end-to-end system instead of many isolated tools.

Client
SME in the timber industry
Industry
Wood processing
Scope
6 modules · one end-to-end system
Planning
Optimisation solver · detailed scheduling
Compliance
GoBD · DATEV · e-invoicing
Hosting
EU / on-premise · GDPR
Status
In production (planning) · ERP being extended
Stack
FastAPI · Vue 3 · PostgreSQL
6 modules
Production, sales, purchasing, inventory, accounting, administration
1 click
From the open order book to an optimised machine-level schedule
Append-only
Documents immutable once posted (§ 146 AO, German Fiscal Code)
DATEV
Posting batches, e-invoicing & advance VAT returns for tax advisor and tax office
Module overview “All modules” showing every business area as a card
All modules. The entry point: open a business area from here and the interface focuses on that module — each department sees only its own tools, not the whole system.

At a glance

One system for the entire value chain.

The real operational flow — raw timber order, goods receipt, production, delivery, invoice — is modelled end to end. Every department works on the same data, and every legally relevant document is created audit-proof in exactly one place.

Production first

An optimisation solver schedules operations per machine, batches identical wood species and makes bottlenecks visible — usable without any solver knowledge.

Sales at a glance

Open order value, utilisation per calendar week and the key customers — the complete document flow from order confirmation to invoice.

Compliance by construction

GoBD, § 14 UStG (German VAT Act) and retention periods are hard-wired — not optionally configured, but enforced by the system design.

Module · Production

Machine-level production scheduling.

The centrepiece: from the open order book, an optimisation solver computes a complete detailed schedule across the entire machine park — sequence, setup times and capacity included. The production manager sees the result as a timeline, not as a wall of metrics.

  • One swimlane per machine with operations, setup times and day segments
  • Colour-coded by wood species (spruce, larch, Douglas fir, fir)
  • Batching identical profiles measurably saves setup time
  • Bottleneck machines and weekly utilisation visible at a glance
  • Freeze individual items — the rest is re-planned around them
  • Plain-language feedback instead of solver metrics
Schedule timeline with one swimlane per machine
Schedule · swimlanes. One lane per machine, one block per operation — coloured by wood species, with setup times, daily utilisation and bottleneck markers.
Schedule overview with key figures
Schedule · overview. Planning run, evaluated plan variants, setup time saved through batching and weekly utilisation per machine at a glance.

Module · Sales

Order processing & sales control.

Orders come in from the legacy system or are entered directly in the app. From there the complete document flow — order confirmation, production feedback, delivery note, invoice — runs as a guided chain. Sales management keeps value and dates in view.

Sales dashboard with open order value and top customers
Sales dashboard. Open order value, distribution across the promised calendar weeks and the highest-revenue customers — open items only.
Order list
All orders. Status, open items, order value and requested/planned date — filterable; a row opens the details.
Order detail view with document flow
Order in detail. Dates, price basis and the guided document flow from order confirmation through delivery note and invoice to the freight forwarder.

Module · Master data

Product catalogue & capacity model.

Profiles, customers and machines are the basis of plannability: every profile knows its raw material and its routing, every machine its stations and operating hours. That is how the planner knows what runs where, and for how long.

Item master data with profiles
Item master data. Profiles with wood species, finished and raw dimensions and the processing routing — one row per profile.
Machine park
Machine park. Station capabilities and weekly windows per machine — the basis of the capacity plan for scheduling.
Customer master data
Customers. Master data with contacts and pick-up windows; incomplete records are detected and flagged for maintenance.

Modules · Purchasing & inventory

Raw material procurement & batch-level inventory.

The material flow is fully traceable: from the raw timber order at the sawmill, through goods receipt with an internal batch number per bundle, to consumption in production.

Ordering & goods receipt

Confirmed delivery date with full history, goods receipt based on the delivery papers, a sequential batch number per bundle with QR label.

Batch-level stock

Every movement posts against the batch; production feedback books consumed batches and produced quantity. Stocktaking and stock ledger included.

Purchase document checks

Three-way match of purchase order, goods receipt and invoice with a quantity cap; duplicate protection for incoming invoices.

Module · Accounting

Full financial accounting.

Built on SKR03, the German standard chart of accounts: general ledger, subsidiary ledgers, payments and closing. Reports such as the trial balance, balance sheet and profit and loss statement are derived directly from the postings.

Posting list with GoBD posting text
Postings. Gaplessly numbered, with structured GoBD posting text. Every posting balances debit = credit and is immutable once posted.
Trial balance
Trial balance. All accounts with movements, opening balance, debit/credit — with an automatic balance check.
Balance sheet
Balance sheet. Assets and liabilities as of the reporting date including the result for the period — always derived live from the general ledger.
Chart of accounts SKR03
Chart of accounts (SKR03). Assets, liabilities, income and expenses as a tree — groups as headings, leaves postable, with DATEV account numbers.

Compliance

GoBD compliance — by construction, not by configuration.

An ERP that allows posted documents to be changed after the fact is not compliant under GoBD — in the worst case the auditor may reject the entire bookkeeping. That is why the core principles of proper bookkeeping are hard-wired here and secured by a permanently green test suite that runs with every build.

Immutability / append-only
General and subsidiary ledgers are only ever appended to; every “change” is a new, dated reversing entry.
Debit = credit
Only balanced journal entries are accepted — no silent rounding.
Gapless numbering
Central number range inside the posting transaction; a reversal keeps its number.
Original reference & reason
Corrections carry a reference to the original and a mandatory reason.
No edit after submit
Changes only via cancel and re-create (cancel + amend).
Period lock (§ 146 AO)
Postings dated before the lock date are rejected.
§ 14 UStG
Mandatory-field validation of invoice details incl. tax cases and the small-amount invoice rule.
Retention (§ 147 AO)
Books 10 years, documents 8 years — stored as a policy.

DATEV export

EXTF posting batches with customers, suppliers and account labels as a ZIP — ready for the tax advisor.

E-invoicing

Outgoing as valid XRechnung XML or ZUGFeRD; incoming (mandatory for German B2B since 2025) with validation and manual approval.

Advance VAT return / ELSTER

Advance VAT return generated from the locked postings — as a file for upload to Mein ELSTER, with direct ERiC submission planned.

DATEV export configuration
DATEV export. Posting batch per fiscal year with advisor and client number, SKR03 and the control-account model.

Architecture

Modern, secure, privacy-compliant.

A lean, production-ready platform made of proven building blocks — with security and EU data protection as a baseline, not an afterthought. Set up by engineers with a clear architecture, extended with AI assistance under fixed quality gates and tests. The speed comes from the agents, the maintainability from the discipline.

Frontend

A fast, clear interface

Reactive single-page app with a consistent design system, light and dark mode, and German number and date formatting throughout.

Backend

Typed domain logic

Asynchronous API with clear domain boundaries, monetary amounts as decimals and a background worker for compute-heavy planning runs.

Security

Least privilege & GDPR

Permissions per user and module (default deny), CSRF protection on every mutation, deletion paths for personal data — fit for sensitive industrial data.

Data sovereignty

All data in your own database — the foundation for AI.

Because the system runs on its own database — hosted in the EU or on-premise — the complete body of operational data is directly and fully available: orders, batches, machine times, postings. No read-only API bottleneck as with cloud ERPs. That is the best starting point for connecting your own AI agents and applying new methods such as tabular foundation models to real operational data. Kitun takes care of maintenance, operations and data protection.

From module to full ERP

First production planning. Now the whole system.

The planning module now in production was the beginning, not the goal. On the same codebase the system is growing step by step into one coherent whole — purchasing, inventory, sales, accounting including e-invoicing. Commodity with an established process gets integrated, the differentiator gets custom-built. That is how one system replaces the patchwork — without a big bang and without weeks of training.

Note: the application's interface is in German. All customers, orders, commissions and postings shown in the screenshots are fictitious demonstration data. No real business or personal data is displayed.