Procedural documentation (GoBD)
The German GoBD rules require every business to keep a procedural documentation: a description of how tax-relevant data is created, processed, retained and output again.
This page is the system part of it — a description of what Octibiz provides technically. It is not legal advice and does not replace consulting your tax advisor. What your business has to decide and document itself is listed at the end of the page.
All user interfaces, automation and the AI tools work through the same interface. The safeguards below therefore apply to each of these paths alike, because they sit in the interface's write path, not in the user interface.
Documents: draft and commitment
An invoice has two states:
- Draft. Freely editable, without a document number yet. A draft can be deleted; even then it is
only marked as deleted and stays in the database.
- Issued (committed). Issuing via
/api/v1/invoices/{ulid}/issue(permission
invoicing.invoice.issue) assigns the document number. From that moment on the system rejects every change to and every deletion of the invoice.
Sending by email does not change the document; it is a separate step next to the document.
Corrections never overwrite anything; they create a further document (permission invoicing.invoice.cancel):
- Cancellation via
/api/v1/invoices/{ulid}/cancel: a credit note linked to the invoice is
created, and the invoice counts as cancelled afterwards. Issued or overdue invoices can be cancelled.
- Partial correction via
/api/v1/invoices/{ulid}/correct: a partial credit note against the
invoice is created; the invoice itself remains.
Credit notes are only created in these two ways, never as a free-standing document.
Document numbers
Document numbers are assigned by a central numbering engine. Each document type has a number range with a configurable pattern (prefix, brand, date, running number with padding), optionally separate per brand and reset never, yearly or monthly.
| Kind | Behaviour | Document types |
|---|---|---|
| gapless | The number is drawn inside the same database transaction that issues the document, under a row lock. If the operation fails, the draw is rolled back with it — no gap arises. | Invoice, credit note |
| sequential | The number is drawn in a separate transaction that is committed immediately. A failed operation leaves a gap. | e.g. pro-forma invoice |
In addition, the invoice number is defined as unique in the database: the same number cannot exist twice.
Logging
Every write action creates an entry in the change log. It contains:
- the affected data type and record,
- the action (create, update, delete),
- the state before and after,
- who acted — a person, the AI or an automation — with the actor's identifier,
- a request identifier that groups the entries of one request,
- the time.
Secret values are redacted in the log, among them passwords, access tokens, values stored encrypted, IBAN and BIC.
The log is read via /api/v1/audit-logs (permission platform.audit.read). The interface offers no way to change or delete an entry.
The log is stored in monthly partitions. The setting audit.retention_months decides whether old months are removed: by default it is 0, and then nothing is removed. A value greater than 0 removes whole months that lie completely before that period. The system also ships a row-based deletion rule for the log; it is switched off by default.
Retention
The statutory retention period is held in the setting dsgvo.legal_retention_years, 10 years by default. The system counts it to the end of the calendar year: the period ends on 31 December of the year that results from the document's year plus the period.
While this period is running for a customer, a GDPR erasure request does not lead to deletion. Instead, the customer and their contacts are restricted: the system hides them from all queries, but they remain complete. Only holders of the permission platform.dsgvo.access_sealed can see restricted data.
Other data types have retention rules. They are data, not hard-wired values: readable via /api/v1/dsgvo/retention-policies with platform.dsgvo.view, maintained with platform.dsgvo.manage. A daily run applies them.
Invoices and credit notes are not subject to any retention rule. The system never deletes them on its own — not even after the period has expired. An issued invoice cannot be deleted through the interface at all.
Data access for tax audits
The GoBD distinguish three kinds of access. This is how they map to Octibiz:
- Direct access (Z1): the auditor gets a user account of their own with a role that carries read
permissions only, for example invoicing.invoice.view and platform.audit.read. Roles can be composed freely (permission platform.role.manage). The system does not ship a ready-made auditor role.
- Indirect access (Z2): evaluations requested by the auditor are prepared by your staff with the
existing lists, filters and reports.
- Data carrier provision (Z3): through the exports in the next section. In addition, lists that
use the standard pagination — among them the invoice list /api/v1/invoices — can be retrieved as a CSV file, with at most 10,000 rows per request. For point-of-sale data there is also the DSFinV-K export (see below).
Export
- DATEV via
/api/v1/accounting/export/file(permissionaccounting.export.run) in three
formats: booking batch in EXTF format, master data of the personal accounts (debtors and creditors), and a ZIP package with document images for DATEV Unternehmen online.
- Commitment flag: the setting
accounting.datev.lock_bookingsis 1 by default. The booking
batch therefore carries the "committed" flag, as GoBD practice expects. The value 0 is possible; agree on it with your tax advisor first.
- E-invoice as XRechnung or ZUGFeRD via
/api/v1/invoices/{ulid}/e-invoice. It can only be
created after issuing. The generated file is stored and is not rewritten on later requests.
- Document PDF via
/api/v1/invoices/{ulid}/pdf. - Incoming e-invoices are read in via
/api/v1/accounting/incoming-invoices/import-e-invoice. - Point-of-sale data (DSFinV-K) via
/api/v1/pos/exports(permissionpos.export.manage): a ZIP
package with description file, DTD and the CSV files according to DSFinV-K 2.3, per cash register closing. Shifts that are still open are skipped and named. The generated file is frozen and not recalculated.
The export is not a booking. Bookings are made in your accounting software.
What the system does not provide
- No archived invoice PDF. An invoice PDF is generated anew from the stored, committed data on
every request. The content stays the same; if you change the document template, however, a PDF generated later looks different from the one that was sent.
- No ready-made auditor role — it is composed from read permissions when needed.
- **No export following the tax administration's description standard for invoices and booking
data** (GDPdU format with a description file). Such an export exists only for point-of-sale data (DSFinV-K, see above).
- No protection of the log at database level. The interface can neither change nor delete log
entries; anyone with direct database access can.
- No audit-proof storage on write-once media. Files are kept in the configured file storage.
What your business has to arrange itself
- Organisational instruction: who issues, cancels and exports invoices, and who gets which
permissions.
- Operations documentation: hosting, administration, who has direct database access, and
backups (see Backup & restore and Hardening & security).
- Check the periods: adapt the values of
dsgvo.legal_retention_yearsand the retention rules
to your legal situation. audit.retention_months should not be shorter than the retention of your documents.
- Copies sent: if the document image matters, additionally keep the PDF that was sent.
- Disposal after the period: the system never deletes invoices on its own; disposal is your
decision.
- Auditor access: create a role with read permissions, limit the account in time and lock it
after the audit.
- Agree with your tax advisor: commitment flag, chart of accounts and default accounts.
- Document upstream systems: point of sale, time tracking, web shop and their interfaces.
- Maintain this documentation: it is subject to retention itself; record changes with a date.