Folder sync
A job watches an inbound folder, converts every incoming invoice to the configured target format and files it in the outbound folder. Several jobs run in parallel. This is the local answer to “many files” — and the only tool that works without intervention.
What a job consists of
Section titled “What a job consists of”| Field | Meaning |
|---|---|
| Name | freely chosen; left empty, the inbound path appears in the list |
| Inbound | is watched |
| Outbound | where the result is filed |
| Error folder | where anything unprocessable is moved |
| Target format | XRechnung, ZUGFeRD, … |
| “Write even when there are findings” | default off: an invalid invoice stays put rather than delegating the fault to the recipient. Can be switched off if the target system validates for itself |
| Active | whether the job is currently running |
All three folders must be set, and the outbound folder must not sit inside the inbound one — otherwise the job consumes itself.
What ensures reliability behind the scenes
Section titled “What ensures reliability behind the scenes”| Measure | Why |
|---|---|
| Stability window (2 s) | A file watcher reports when a file is created, not when it is complete. Without a wait, half-finished uploads would be processed — the large ones by preference. Both size and timestamp must stay constant |
| A polling pass (10 s) alongside the watcher | On network drives (SMB) the watcher reports unreliably; on macOS events are lost under heavy load |
| Atomic writing | a temporary file, then a rename — at the far end of the outbound folder there is usually another watcher sitting |
| Duplicate protection via a content hash | but only successful passes count; otherwise a single failure would be final |
| Error folder | leaving an unprocessable file in the inbound folder would mean retrying it on every pass — the one broken file would mask all those behind it |
The processing journal
Section titled “The processing journal”At the same time it is the log you actually want: per file the name, the content hash, the outcome (converted, failed, rejected, duplicate), the reason or the detected source format, the name of the generated file and the time. It sits as a SQLite file next to the settings.