De vraag
Een dienstverlener met vaste klanten factureert elke maand hetzelfde: hosting, onderhoud, licenties, domeinen. Daarnaast komen uren, kilometers en losse opdrachten. Met een spreadsheet en een los boekhoudpakket raak je snel het overzicht kwijt: welk contract is deze maand aan de beurt, welke factuur staat nog open, en wat heb je al gefactureerd? We wilden één plek voor het hele traject, van offerte tot betaling.
Wat we bouwden
Een facturatiemodule met klantenbeheer, als web-app. SiteOn gebruikt hem zelf voor de eigen administratie.
Contracten die zichzelf bijhouden. Een contract bestaat uit regels met elk een eigen interval: maandelijks, per kwartaal, per halfjaar of jaarlijks. De module weet per regel wanneer de volgende factuur komt en houdt bij welke periodes al gefactureerd zijn, zodat er nooit iets dubbel of niet wordt gefactureerd. Met één knop maak je de facturen voor alle contracten die aan de beurt zijn.

Automatische signalen. Op de achtergrond kijkt de module regelmatig of er iets moet gebeuren; hoe vaak, stel je zelf in. Is een contract klaar voor facturatie, of staat er een conceptfactuur met een datum in het verleden, dan verschijnt er een melding. Zo blijft er niets liggen.

Betalingsherinneringen. Voor een verzonden of achterstallige factuur gaat er met één klik een herinnering uit, met een eigen e-mailsjabloon. Klanten kunnen online betalen.
Van offerte tot factuur. Offertes, facturen in drie vormen (gedetailleerd, samengevat of alleen uren), creditfacturen, en een pdf die je in de app bekijkt voordat hij de deur uitgaat. Uren en kilometers worden direct bij het registreren aan een klant gekoppeld en komen met een paar klikken op de factuur, inclusief retourritten.
Inzicht. Statistieken over omzet, openstaande en achterstallige facturen, de gemiddelde betalingstermijn, btw per kwartaal en de maandwaarde van alle contracten samen.

Techniek
React en TypeScript aan de voorkant, Node.js met PostgreSQL aan de achterkant. Facturen worden als pdf opgeslagen in S3-compatibele opslag, back-ups versleuteld, e-mail gaat via Mailjet en betalingen via Stripe. De module draait in Docker op een eigen server, achter single sign-on.
Het resultaat
Facturatie die grotendeels vanzelf gaat: terugkerende kosten komen op tijd op de factuur, openstaande bedragen zijn in één oogopslag zichtbaar en niets valt meer tussen wal en schip.
