Stand van zaken: van werkgever tot aangifte

Twee weken na de start staat er meer dan ik had durven hopen. De hele keten werkt, van een nieuwe werkgever tot de bestanden voor de aangiften. De gebruikersinterface komt later: voorlopig gebeurt alles via de REST API.

Wat er al werkt

Klanten en werkgevers. Een klant met een contract voor PayRoll wordt een werkgever, met zijn adressen en vestigingen, afdelingen in een boomstructuur, functies (duizenden, in groep in te laden), arbeidsvoorwaarden per paritair comité met hun versies in de tijd, en zijn feestdagen: de wettelijke feestdagen en eigen vervangingsdagen.

Werknemers en tewerkstellingen. Een werknemer heeft zijn persoonsgegevens en fiscale gegevens (burgerlijke staat, kinderen ten laste, …), met versies vanaf een datum. Een tewerkstelling heeft haar arbeidsvoorwaarden en loongegevens, ook met versies: een maandloon en een lijst van looncomponenten zoals een bedrijfswagen, maaltijdcheques of een onkostenvergoeding.

De kalender. Per tewerkstelling en maand de prestaties per dag, voorgesteld uit het werkrooster en de feestdagen, en aan te passen voor vakantie of ziekte.

De loonberekening. De motor rekent van bruto tot netto voor een bediende in PC 200 en een bedrijfsleider: RSZ, de sociale en fiscale werkbonus, de bedrijfsvoorheffing met haar verminderingen voor kinderen en de partner, de bijzondere bijdrage voor de sociale zekerheid, het voordeel van alle aard van een bedrijfswagen, maaltijdcheques. Elke loonbrief volgt het model van LTDS: een berekening van financiële elementen met elk hun rol.

Loonruns. Een loonrun berekent de loonbrieven van een afdeling voor een maand. Loonbrieven met een probleem worden eruit gehaald, de rest wordt in één keer goedgekeurd. Een goedgekeurde loonbrief wordt bewaard zoals hij is, met alles wat hij gebruikte.

De aangiften. Na elke goedgekeurde loonrun rekent BrutoNet bij wat volgt:

AangifteWat er al is
Bedrijfsvoorheffing (274)De aangifte per periode en soort inkomen, als XML-bestand voor FinProf
Belcotax-on-web 2.0De fiches 281.10 (bedienden) en 281.20 (bedrijfsleiders), als JSON Lines-bestand
LTDSEen aangifte per tewerkstelling en periode, met haar versies; het versturen naar de RSZ volgt

Referentiegegevens. De codelijsten van LTDS, de wettelijke parameters en de feestdagen staan als bestanden met een datum en een bron in de applicatie. Een correctie krijgt een nieuwe revisie met een reden; niets wordt stilletjes overschreven.

Toegang. Gebruikers met een rol: een beheerder, de beheerder van de lonen voor alle werkgevers, of een gebruiker die alleen zijn eigen werkgever ziet. Een account wordt geblokkeerd na drie mislukte aanmeldingen.

Hoe het gebouwd is

BrutoNet is één modulaire Spring Boot-applicatie (Java 25, Spring Modulith) met duidelijke grenzen tussen de modules: klanten, lonen, referentiegegevens, toegang. Elke wijziging is een gebeurtenis in een event store (EventSourcingDB, met OpenCQRS); de schermen lezen uit tabellen in PostgreSQL die uit die gebeurtenissen worden opgebouwd. De loonberekening zelf weet niets van databases of Spring: ze krijgt haar invoer en geeft een loonbrief terug, en is dus snel en eenvoudig te testen.

De regels staan in een functionele documentatie in het Nederlands, met hun wettelijke bron. Elke regel wordt daar eerst beschreven en pas daarna gebouwd.

Om te kunnen proberen maakt BrutoNet bij de start een demowerkgever aan, met een bedrijfsleider met een bedrijfswagen en een bediende met maaltijdcheques, en de loonruns van januari tot oktober 2026.

Wat volgt

Wordt vervolgd.