Naar hoofdinhoud springen

Cashflow-prognoses: De 13-wekelijkse rollende prognosemethode

Deze gids biedt een eenvoudige, CFO-waardige methode om de liquiditeit van je bedrijf te beheren. Door een 13-wekelijkse rollende cashflowprognose op te bouwen, zie je wekelijks je cash runway, kun je incasso's en betalingen strategisch sturen en elimineer je financiële verrassingen. Het is een systeem gebouwd voor oprichters — en deze pagina levert het daadwerkelijke model mee: een op formules gebaseerde werkmap met voorbeeldgegevens plus het voorbeeld-Beancount-grootboek achter de eerste twee weken (zie downloads hieronder).

Twee dingen die deze gids niet is: een prognose bestaat uit vooruitkijkende schattingen die je zelf intypt, terwijl boekhoudkundige actuals bankmutaties zijn die al in je grootboek zijn geboekt — daarom houdt de werkmap ze gescheiden. Je bevriest een kopie van je plan als een gedateerde baseline, typt de bankcash van elke afgesloten week op een apart Actuals-blad, en leest het verschil op een Variance-blad; het plan waarmee je vergelijkt wordt nooit overschreven. Niets hier synchroniseert automatisch: de werkmap heeft geen macro's of externe verbindingen, en geen enkele stap haalt op eigen kracht gegevens uit je bank of Beancount.

Waarom 13 weken?​

Een 13-wekenprognose is de gouden standaard voor operationeel cashmanagement, om verschillende redenen:

  • Kortetermijncontrole: Het bestrijkt ongeveer één zakelijk kwartaal, waardoor je een duidelijk beeld krijgt van je directe liquiditeit. Deze horizon is lang genoeg om 2–3 loonrondes, belastingafdrachten en gebruikelijke leveranciersbetalingstermijnen te omvatten, maar kort genoeg om zeer nauwkeurig en uitvoerbaar te blijven.
  • Ontvangsten- en uitgavenbenadering: De prognose gebruikt de "directe methode" en richt zich puur op cash in en cash uit. Het gaat hier niet om accrual-boekhouding of winstgevendheid; het gaat om wat daadwerkelijk op je bankrekening terechtkomt of ervan afgaat, zodat de prognose direct aansluit op je banksaldo.
  • Rollend, niet statisch: Dit is geen eenmalige begroting. Elke week laat je de afgelopen week vallen, voeg je een nieuwe week toe aan het einde (week 13) en werk je je aannames bij. Zo blijft de vooruitkijkende horizon constant en wordt prognoses maken een dynamische, wekelijkse discipline.

Wat je gaat bouwen​

  1. Eén prognoserooster: De kern van het systeem is één blad met 13 kolommen (week 1 tot en met week 13) en duidelijk gedefinieerde secties: Openingskas, Ontvangsten, Uitgaven, Netto cash en Eindkas. Drie begeleidende bladen met dezelfde rijen bewaren een bevroren baseline van dat plan, de Actuals die je bank registreerde, en de Variance daartussen.
  2. Categorie-mapping: Een eenvoudig systeem om transacties uit je grootboek te mappen op de prognosecategorieën (bijv. alle betalingen van Stripe worden gemapt op "Klantontvangsten"; Gusto-betalingen worden gemapt op "Loonkosten"). Het tabblad Vendor Mapping van de werkmap bevat deze mapping al, inclusief de bank/kaart-regel tegen dubbeltelling — begin daarmee in plaats van je eigen mapping te bedenken.
  3. Een wekelijks ritme: Een herhaalbaar proces voor het vastleggen van actuals, het beoordelen van de afwijking ten opzichte van de baseline waaraan je je hebt gecommitteerd, het herevalueren van de komende weken, en een set vooraf gedefinieerde triggers om actie te ondernemen wanneer financiële drempels worden bereikt.

Download de startersbestanden​

Sla de blanco-paginasetup over: deze gids levert een op formules gebaseerde werkmap met voorbeeldgegevens, plus het voorbeeldgrootboek achter de eerste twee weken.

  • 13-wekenprognose werkmap (XLSX, v1.1.0) — cash-flow-forecast-13-week-nl.xlsx. Bewerkbare aannames, formule-gekoppelde weken, een baseline-snapshot met alleen waarden, een Actuals-blad, een Variance-blad met alleen formules en een tabblad voor leveranciersmapping. Elk voorbeeldgetal is het uitgewerkte voorbeeld — vervang het door je eigen gegevens (zie Voorbeeld versus je eigen gegevens hieronder).
  • Voorbeeldgrootboek en actuals (Beancount-grootboek, .bean) — sample.bean. Gebalanceerd voorbeeldgrootboek waarvan de bankcash van W1–W2 exact overeenkomt met wat het Actuals-blad van de werkmap voor de eerste twee weken bevat.

Hoe de startersbestanden werken (lees dit voordat je gaat typen)​

Bladen. De werkmap (cash-flow-forecast-13-week-nl.xlsx, v1.1.0) heeft zes bladen, in deze volgorde:

  • Forecast — je levende plan: de 13 gedateerde weken, aannames, ontvangsten, uitgaven, netto/eindkas. Bewerk het zo vaak je wilt.
  • Baseline — een snapshot met alleen waarden van Forecast-rijen 2–29, gelabeld met een versie in B31 en een as-of-datum in B32. Het bevat geen formules, dus niets wat je elders doet kan het veranderen.
  • Actuals — de bankcash die elke afgesloten week werkelijk bewoog, door jou ingevoerd: een status in rij 3 (complete of partial), categoriebedragen in dezelfde rijen als Forecast, en een optioneel afschrift-saldo in rij 30.
  • Variance — alleen formules: Actual − Baseline voor elke categorie en elk totaal, gematcht op weekstartdatum, plus een legenda die elk statuswoord uitlegt. Het leest nooit Forecast.
  • Vendor Mapping — de grootboek→categorie-mapping met de bank/kaart cash-telregel per bron.
  • Notes — mechanica, de wekelijkse review, scenariotoggles en versie, gedupliceerd vanuit de generator zodat het bestand zichzelf offline uitlegt.

Alle vier weekrasters delen één lay-out: weken W1–W13 zijn kolommen B–N, rij 2 bevat de startdatum van elke week, openingskas is rij 10, ontvangsten zijn rijen 12–14 (totaal 15), uitgaven zijn rijen 17–26 (totaal 27), netto rij 28 en eindkas rij 29. Dus B12 is W1 klantontvangsten op elk van hen.

Tijdbasis. Weken beginnen op maandag, W1 begint 2026-09-14 tot en met W13 die begint 2026-12-07 (rij 2 van Forecast; bewerk deze datums wanneer je het model overneemt — elke formule is week-relatief, dus de keten overleeft het — en neem ze over naar Baseline en Actuals wanneer je je baseline vastlegt). Een transactie hoort bij de week die zijn boekingsdatum bevat, maandag tot en met zondag.

Eenheden. Volledige USD doorlopend (getalnotatie #,##0). Het voorbeeldbedrijf is een seed-stage SaaS die opent met 85.000, met wekelijkse loonkosten afwisselend 0 / 11.000, maandelijkse huur, en een lening-autopay van 900/week.

Wat je typt versus wat berekent. Op Forecast zijn blauwe cellen handmatige invoer en al het andere is een formule (Actuals werkt op dezelfde manier met zijn eigen invoer, beschreven onder Een baseline vastleggen en de wekelijkse review hieronder):

  • Invoer: openingssaldo B5 (85.000), toggles B6/B7 (1,0), floor B8 (40.000), de drie bases van ontvangstcategorieën, de tien bases van uitgavecategorieën, en de weekstartdatums op Forecast.
  • Formules (weergegeven voor kolom B, week 1 — elke latere week verschuift de kolomletter): Openingskas B10 = $B$5 (weken 2–13 dragen in plaats daarvan over, bijv. C10 = B29); Totale ontvangsten B15 = B12*$B$6+B13*$B$7+B14; Totale uitgaven B27 = SUM(B17:B26); Netto B28 = B15-B27; Eindkas B29 = B10+B28.
  • Herberekening staat op Automatisch en het bestand zet fullCalcOnLoad, zodat Excel, LibreOffice en Numbers bij openen herberekenen (het bestand bewaart geen gecachte formulewaarden). Verander een blauwe cel en alle 13 weken bewegen mee — bijv. de incassotoggle B6 op 1,2 zetten brengt W1-ontvangsten van 12.200 naar 14.600 en W1-eindkas van 87.500 naar 89.900.
  • Genereer het maagdelijke bestand op elk moment opnieuw met yarn generate:cash-flow-forecast (generator: scripts/generate-cash-flow-forecast.py, writer openpyxl 3.1.5; --verify opent het bestand opnieuw en controleert dat elke totaalcel een echte formule bevat).

Voorbeeld versus je eigen gegevens. Drie dingen worden vooraf ingevuld geleverd, en alle drie zijn het uitgewerkte voorbeeld, niet jouw bedrijf:

  • de blauwe cellen op Forecast (het huidige plan van het voorbeeldbedrijf);
  • de snapshot op Baseline, versie B1 per 2026-09-11 — het plan zoals het stond voordat de eerste twee weken sloten;
  • de W1–W2-regels op Actuals (kolommen B–C), de bankcash in het voorbeeldgrootboek (sample.bean, hierboven). W3–W13 blijven leeg.

Omdat de voorbeeld-baseline en de actuals verschillen, opent het Variance-blad met een echte vergelijking: W1 eindigt +500 voor op plan en W2 +300 (zie Variance review hieronder). Vervang vóór je eigen eerste review alle drie: typ je plan op Forecast, wis de voorbeeld-actuals en leg je eigen baseline vast over B1 (stappen hieronder). De twee toggles (B6 schaalt alle klantontvangsten, B7 schaalt alle prepaids) zijn het enige dat generiek hoort te blijven, voor scenariospel.

Kom je van v1.0.0? De lay-out van het Forecast-blad is niet veranderd, dus je kunt je plan bewust overzetten: kopieer in je oude bestand alleen de invoerbereiken — B2:N2 (datums), B5:B8, B12:N14 en B17:N26 — en plak ze als waarden op dezelfde adressen in het Forecast-blad van het nieuwe bestand, nooit over de formulerijen. v1.0.0 bewaarde geen baseline, dus elke afgelopen week die je met actuals hebt overschreven heeft geen herstelbaar plan: typ de bankcash van die weken op Actuals en begin je eerste baseline vanaf de Forecast van vandaag.

Structuur (De rijen die je nodig hebt)​

Je prognoseblad moet gestructureerd zijn met de volgende rijen om alle cashbewegingen vast te leggen. Hoe de werkmap is ingedeeld: de onderstaande rijen staan op Forecast (de 13 gedateerde weken met Openingskas, drie ontvangstcategorieën, tien uitgavecategorieën, Netto en Eindkas), en Baseline, Actuals en Variance herhalen ze rij voor rij; Vendor Mapping mapt grootboekbronnen op deze categorieën, inclusief de bank/kaart-regel tegen dubbeltelling, en Notes legt de mechanica offline uit. Op Forecast groeperen ontvangsten als Klantontvangsten, Nieuwe boekingen/Prepaids en Overige instromen; uitgaven groeperen als Loonkosten, Zzp'ers, Cloud/Hosting, Software/SaaS, Marketing, Huur, Juridisch & Boekhouding, Belastingen & Kosten, Schuldendienst en Eenmalige posten; totalen rollen Openingskas → Totale ontvangsten → Totale uitgaven → Netto → Eindkas.

  • Openingskassaldo (Dit moet aansluiten op het Eindkassaldo van de vorige week)

  • Ontvangsten (Cash in)

    • Klantontvangsten: Cash die je verwacht te innen uit bestaande facturen (debiteuren).
    • Nieuwe boekingen/Prepaids: Vooruitbetalingen die je verwacht uit nieuwe deals die binnen het venster van 13 weken sluiten.
    • Overige instromen: Alle andere inkomende cash, zoals belastingteruggaven, rente-inkomsten of subsidiegelden.
  • Uitgaven (Cash uit)

    • Loonkosten: De volledige cashkosten, inclusief netto loon aan werknemers en alle werkgeverslasten.
    • Zzp'ers & Freelancers: Betalingen aan niet-werknemers.
    • Cloud/Hosting (COGS): Kernkosten voor infrastructuur zoals AWS, GCP, enz.
    • SaaS/Tools: Al je softwareabonnementen.
    • Marketing: Advertentie-uitgaven, bureaufees en andere merkgerelateerde kosten.
    • Huur/Kantoor: Fysieke kantoorlasten.
    • Juridisch & Boekhouding: Kosten voor professionele diensten.
    • Belastingen & Kosten: Btw-afdrachten en andere overheidsbetalingen.
    • Schuldendienst: Zowel aflossingen als rentebetalingen op leningen.
    • Eenmalige posten: Schokkerige, onregelmatige betalingen zoals jaarlijkse verzekeringspremies, borgsommen of hardware/capex (laptops, apparatuur) — alles zonder eigen rij hierboven komt hier terecht.
  • Netto cashflow (= Totale ontvangsten − Totale uitgaven)

  • Eindkassaldo (= Openingskas + Netto cashflow)

Uitgewerkt 13-wekenvoorbeeld (USD)​

De onderstaande tabel is het Forecast-blad van de werkmap voor het voorbeeldbedrijf, week voor week — het huidige plan, opnieuw geprognosticeerd nadat W1 en W2 sloten, dus die twee kolommen bevatten nu wat de bank werkelijk deed. W1 en W2 zijn grootboek-actuals — ze komen overeen met de totalen die yarn check:cash-flow-actuals afleidt uit sample.bean (ontvangsten 12.200 / 13.200, uitgaven 9.700 / 17.200, eindkas 87.500 / 83.500). W3–W13 zijn werkmapaannames uit de voorbeeldbases van de generator (niet geboekt in het grootboek). Het plan waaraan het bedrijf zich vooraf committeerde, wordt apart bewaard op Baseline en verschilt van deze W1–W2-kolommen; Variance review hieronder vergelijkt de twee. Valuta is volledige USD; Eindkas = Openingskas + Ontvangsten − Uitgaven per week.

RegelW1W2W3W4W5W6W7W8W9W10W11W12W13
Openingskas85.00087.50083.50092.50082.00081.00072.00080.00072.80075.30063.80079.80071.800
Ontvangsten12.20013.20015.2009.20018.2008.20014.20014.20012.2009.20022.2009.20012.200
Uitgaven9.70017.2006.20019.70019.20017.2006.20021.4009.70020.7006.20017.2009.700
Netto2.500-4.0009.000-10.500-1.000-9.0008.000-7.2002.500-11.50016.000-8.0002.500
Eindkas87.50083.50092.50082.00081.00072.00080.00072.80075.30063.80079.80071.80074.300

De rollende mechanica (zoals gebouwd in de werkmap)​

De logica van de rollende prognose is eenvoudig en krachtig — en in de download is die al bedraad als formules op het Forecast-blad (rijen tussen haakjes):

  • Openingskas (week 1) = aanname openingssaldo — cel B10 = $B$5.
  • Openingskas (week n) = Eindkas (week n−1) — bijv. C10 = B29 (rij 10, weken 2–13).
  • Totale ontvangsten (week n) = Klantontvangsten × incassotoggle + Prepaids × boekingstoggle + Overige — bijv. B15 = B12*$B$6+B13*$B$7+B14 (rij 15).
  • Totale uitgaven (week n) = SOM van de 10 categorierijen — bijv. B27 = SUM(B17:B26) (rij 27).
  • Netto cash (week n) = Totale ontvangsten − Totale uitgaven — bijv. B28 = B15-B27 (rij 28).
  • Eindkas (week n) = Openingskas + Netto cash — bijv. B29 = B10+B28 (rij 29).

Dezelfde rijen bestaan op Actuals als gewone totalen (B15 = SUM(B12:B14), B27 = SUM(B17:B26), B28 = B15-B27, B29 = B10+B28, C10 = B29), met de werkelijke openingskas van de week éénmalig getypt in Actuals!B10. Actuals heeft geen toggles en verwijst nooit naar een ander blad.

Een baseline vastleggen (eenmalig per horizon)​

Doe dit wanneer je Forecast het plan bevat waaraan je gemeten wilt worden — voordat de eerste week sluit.

  1. Kopieer het plan als waarden. Selecteer Forecast!B2:N29 en kopieer. Selecteer Baseline!B2 en plak alleen waarden — Excel: Plakken speciaal → Waarden; LibreOffice: Plakken speciaal → Alleen waarden; Numbers: Bewerken → Plak formuleresultaten. Een normale plakactie zou live-formules meenemen en de "baseline" zou dan stilzwijgend elke latere bewerking volgen.
  2. Label het. Typ een versie (bijvoorbeeld B1) in Baseline!B31 en de datum van vandaag in Baseline!B32. Beide staan onder het geplakte blok, zodat een latere capture ze nooit overschrijft.
  3. Lijn de weken uit. Kopieer Baseline!B2:N2 en plak waarden op Actuals!B2, zodat beide bladen dezelfde 13 weekstartdatums noemen, en typ het banksaldo waarmee je begint in Actuals!B10.

Vanaf hier herberekent het typen van actuals, het bewerken van Forecast of het verzetten van een toggle Forecast en Variance, en blijft Baseline precies zoals vastgelegd.

Je wekelijkse maandagreview (tegen deze werkmap)​

  1. Registreer de week op Actuals — nooit op Forecast. Typ in de kolom waarvan de rij-2-datum de maandag is die net sloot, de bankcash van de week per categorie in rijen 12–14 en 17–26 (mapping hieronder). Typ 0 waar geen cash bewoog: een lege cel betekent "nog niet ingevoerd", niet nul. Zet het eindsaldo van het bankafschrift in rij 30; rij 31 zou dan 0 moeten lezen. Alles anders is een mappingfout — meestal een meegetelde kaartbetaling of een behouden sweep — geen bankfout.
  2. Controleer of de week compleet is. Typ complete in rij 3 zodra elke categorierij een getal bevat, of partial zolang de week nog open is (de dropdown biedt beide). Variance vergelijkt een week alleen wanneer die complete is, elke categorie is ingevoerd en de Actuals-datum gelijk is aan de Baseline-datum in dezelfde kolom.
  3. Lees Variance. Rij 3 noemt de status van elke week; alleen compared-weken tonen getallen, en elke andere status toont n/a, nooit 0, zodat een niet-ingevoerde week niet kan doorgaan voor "op plan". Tekens zijn Actual − Baseline (kolom O herhaalt ze): ontvangsten, netto en eindkas positief = meer cash dan gepland; uitgaven positief = meer uitgaven dan gepland. Rij 29 is cumulatief — het omvat elke eerdere week — en bestaat alleen zolang elke week tot en met die week compared is. Rijen 32–35 drukken de totalen uit als aandeel van de baseline (n/a wanneer de baseline nul is).
  4. Herevalueer de toekomst op Forecast. Werk de blauwe cellen voor de komende 2–4 weken bij met de meest recente informatie (nieuw verzonden facturen, aankomende leveranciersbetalingen, bevestigde loondatums). Om een volledige 13-weken vooruitblik te behouden, rol je het Forecast-venster: schuif de blauwe invoer, inclusief de rij-2-datums, één kolom naar links (oude week 2 wordt week 1), wis dan kolom N en geef die de nieuwe week 13-datum. De overdrachtsformules verankeren zich automatisch opnieuw; Baseline, Actuals en Variance worden niet aangeraakt.

Rol de reviewhorizon (een bewuste stap, geen wekelijkse stap)​

Baseline en Actuals blijven op de horizon die je hebt vastgelegd totdat je besluit ze te verplaatsen — doorgaans wanneer de Forecast een maand of een kwartaal vooruit is gerold, of het plan zodanig is veranderd dat je een nieuwe maatstaf wilt.

  1. Archiveer. Sla een kopie van de werkmap op (bijvoorbeeld cash-flow-forecast-B1.xlsx). Die bewaart de oude baseline, de bijbehorende actuals en hun variance bij elkaar; het werkbestand bewaart geen geschiedenis.
  2. Wis de werkelijke invoer. Wis op Actuals rijen 3, 12–14, 17–26 en 30 in kolommen B–N, en B10. Laat C10:N10, rijen 15 en 27–29 en rij 31 met rust — dat zijn formules.
  3. Leg een nieuwe baseline vast vanuit de Forecast van vandaag met de volgende versie (B2) en de datum van vandaag, en lijn de Actuals-datums en het openingssaldo precies uit zoals in Een baseline vastleggen hierboven.

Voeg nooit weekkolommen in of verwijder ze nooit. Als je een baseline opnieuw vastlegt maar vergeet Actuals opnieuw te dateren, toont elke getroffen week date mismatch in plaats van een week te vergelijken met het plan van een andere week.

Mapping van Beancount naar je prognose​

Bankcash-scope (de regel die dubbeltelling voorkomt). Wekelijkse actuals zijn boekingen op Assets:Bank:* alleen — één scope die beide valkuilen oplost:

  • Creditcards: een kaartaankoop wordt geboekt op Liabilities:CreditCard:* en verplaatst geen bankcash, dus wordt niet meegeteld wanneer er wordt afgeschreven. Cash vertrekt één keer, bij afwikkeling (de bank→kaart-betaling). De afschrijving plus de afwikkeling tellen, telt dezelfde uitgave twee keer. In het voorbeeldgrootboek bevat W1 420,00 USD aan Amex SaaS-kosten (alleen verplichting, genegeerd) naast de afwikkeling van 600,00 USD van het augustusafschrift (meegeteld). Het naïeve totaal "bankuitgaven + kaartkosten" voor W1 is 10.120,00 USD — precies 420,00 te hoog; de werkmap telt 9.700,00.
  • Interne overboekingen: een Checking↔Savings-sweep heeft twee tegengestelde bankbenen, dus netto nul binnen deze scope en wordt uitgesloten van zowel ontvangsten als uitgaven. De sweeps van 3.000,00 USD (W1) en 1.500,00 USD (W2) in het voorbeeld zouden anders beide kanten met die bedragen opblazen.
  • Gevolg: map de bankbenen, niet de inkomsten-/kostenbenen. Leningaflossing is geen kost maar is wel een bankuitgave (de autopays van 900,00 USD in het voorbeeld = 800 aflossing + 100 rente, allemaal meegeteld onder Schuldendienst); een kaartaankoop is een kost maar is nog niet een bankuitgave.

Ontvangsten/uitgaven-splitsing. Van de geëxporteerde bankbenen: positieve benen zijn ontvangsten, negatieve benen zijn uitgaven, transferbenen uitgesloten. Categorie-map (gelijk aan het Vendor Mapping-tabblad): Stripe/PayPal-uitbetalingen → Klantontvangsten; wire-transfers van nieuwe klanten → Nieuwe boekingen / Prepaids; bankrente/subsidies → Overige instromen; Gusto/ADP → Loonkosten; AWS/GCP → Cloud/Hosting; door de bank betaalde SaaS → Software/SaaS; verhuurder → Huur; advocatenkantoor → Juridisch/Boekhouding; belastingdienst → Belastingen & Kosten; lening-autopay → Schuldendienst.

  • Omgaan met btw: Ook al is btw geen omzet, het is een cashflowpost. Behandel het innen van btw als een cashontvangst en de afdracht aan de overheid als een uitgave. De omzeteffecten leven in je accrual-boeken, maar de cashbeweging telt hier.

Beancount-fragment dat W1 voedt​

Elke boeking hieronder bestaat ook in het meegeleverde sample.bean. Alleen opgeslagen slaagt dit fragment voor uvx --from beancount bean-check en produceert het de W1-ontvangsten (12.200), uitgaven (9.700) en eindkas (87.500) van de tabel zodra je de bankcash-scope hierboven toepast (sluit het Checking↔Savings-sweeppaar van beide kanten uit; tel de Amex-afwikkeling, niet de verplichtingskosten).

option "title" "Cash forecast sample — W1 excerpt"
option "operating_currency" "USD"
 
2026-09-13 open Assets:Bank:Checking USD
2026-09-13 open Assets:Bank:Savings USD
2026-09-13 open Liabilities:CreditCard:Amex USD
2026-09-13 open Liabilities:Loan USD
2026-09-13 open Equity:Opening-Balances USD
2026-09-13 open Income:Sales USD
2026-09-13 open Income:Interest USD
2026-09-13 open Expenses:Contractors USD
2026-09-13 open Expenses:Cloud USD
2026-09-13 open Expenses:Software USD
2026-09-13 open Expenses:Marketing USD
2026-09-13 open Expenses:Rent USD
2026-09-13 open Expenses:Interest USD
 
2026-09-13 * "Opening balances"
  Assets:Bank:Checking            80000.00 USD
  Assets:Bank:Savings              5000.00 USD
  Liabilities:CreditCard:Amex      -600.00 USD
  Liabilities:Loan               -20000.00 USD
  Equity:Opening-Balances        -64400.00 USD
 
2026-09-14 * "Stripe" "Customer receipts W1"
  Assets:Bank:Checking            12000.00 USD
  Income:Sales                   -12000.00 USD
 
2026-09-15 * "Contractor" "Contractors W1"
  Expenses:Contractors              1500.00 USD
  Assets:Bank:Checking             -1500.00 USD
 
2026-09-15 * "AWS" "Cloud hosting W1"
  Expenses:Cloud                    2200.00 USD
  Assets:Bank:Checking             -2200.00 USD
 
2026-09-16 * "Bank" "Checking -> Savings sweep"
  Assets:Bank:Savings               3000.00 USD
  Assets:Bank:Checking             -3000.00 USD
 
2026-09-17 * "SaaS vendor" "Amex SaaS charges"
  Expenses:Software                  250.00 USD
  Liabilities:CreditCard:Amex       -250.00 USD
 
2026-09-17 * "SaaS vendor" "Amex SaaS charges"
  Expenses:Software                  170.00 USD
  Liabilities:CreditCard:Amex       -170.00 USD
 
2026-09-18 * "Amex" "August statement settlement"
  Liabilities:CreditCard:Amex        600.00 USD
  Assets:Bank:Checking              -600.00 USD
 
2026-09-19 * "Landlord" "Rent W1"
  Expenses:Rent                     3500.00 USD
  Assets:Bank:Checking             -3500.00 USD
 
2026-09-19 * "Agency" "Marketing W1"
  Expenses:Marketing                1000.00 USD
  Assets:Bank:Checking             -1000.00 USD
 
2026-09-19 * "Bank" "Interest W1"
  Assets:Bank:Checking               200.00 USD
  Income:Interest                   -200.00 USD
 
2026-09-19 * "Lender" "Loan autopay W1"
  Liabilities:Loan                   800.00 USD
  Expenses:Interest                  100.00 USD
  Assets:Bank:Checking              -900.00 USD

Uitgewerkte week: W1 van begin tot eind (2026-09-14 – 2026-09-20)​

De openingsbankcash is 85.000,00 (Checking 80.000 + Savings 5.000 op 2026-09-13) — de waarde in Actuals!B10. De bankbenen van W1 uit het grootboek gaan, na uitsluiting van het sweep-paar van 3.000,00, in kolom B van het Actuals-blad; elke niet-vermelde categorie wordt getypt als 0, en rij 3 wordt op complete gezet:

Actuals-regel (cel)BankbenenBedrag
Klantontvangsten (B12)Stripe 12.00012.000,00
Overige instromen (B14)Bankrente 200200,00
Totale ontvangstenB15 = SUM(B12:B14) = 12.000 + 0 + 20012.200,00
Zzp'ers (B18)1.5001.500,00
Cloud/Hosting (B19)AWS 2.2002.200,00
Software/SaaS (B20)Amex-afwikkeling 600 (kosten uitgesloten)600,00
Marketing (B21)Bureaufee 1.0001.000,00
Huur (B22)Verhuurder 3.5003.500,00
Schuldendienst (B25)Lening-autopay 900900,00
Totale uitgavenB27 = SUM(B17:B26)9.700,00
NettoB28 = B15−B27+2.500,00
EindkasB29 = B10+B28 = 85.000 + 2.50087.500,00

Overdracht naar W2. C10 = B29, dus W2 opent op 87.500,00. De bankbenen geven ontvangsten 8.000 (Stripe) + 5.000 (prepaid) + 200 (rente) = 13.200,00 en uitgaven 11.000 (Gusto-loon) + 1.500 + 2.200 + 600 (via de bank afgeschreven SaaS) + 1.000 + 900 = 17.200,00; netto −4.000,00, eindkas 83.500,00 — precies de W2-kolom van de werkmap op Actuals (en op het opnieuw geprognosticeerde Forecast-blad). De afschriftsaldi 87.500 en 83.500 staan in Actuals!B30:C30, dus rij 31 leest 0 voor beide weken: dat is je bewijs dat de mapping werkt. Wat de weken deden ten opzichte van het plan is een aparte vraag, beantwoord op Variance hieronder.

Reproduceer het (geverifieerd 2026-09-09, Beancount 3.2.3 + beanquery 0.2.0)​

uvx --from beancount bean-check public/downloads/cash-flow-forecast/sample.bean
yarn check:cash-flow-actuals

De checker draait bean-check (de balance-asserties van het grootboek zelf bewijzen de eindkas van elke week), de export-queries hieronder, en een onafhankelijke Python-overdracht die bevestigt dat alle drie overeenkomen — W1 12.200,00 / 9.700,00 / 87.500,00, W2 13.200,00 / 17.200,00 / 83.500,00:

SELECT date, narration, account, position
FROM date >= 2026-09-14 AND date <= 2026-09-20
WHERE account ~ "^Assets:Bank" ORDER BY date;
 
SELECT sum(position) AS net
FROM date >= 2026-09-14 AND date <= 2026-09-20
WHERE account ~ "^Assets:Bank";
 
SELECT sum(position) AS bank_cash
FROM close ON 2026-09-21 WHERE account ~ "^Assets:Bank";

(Verschuif de datums met 7 voor W2, sluitend op 2026-09-28.) Eén BQL-beperking om te kennen: deze versie van beanquery kan boekingen niet op teken filteren, dus de ontvangsten/uitgaven-splitsing wordt toegepast op de geëxporteerde rijen — positieve bankbenen naar ontvangsten, negatieve naar uitgaven, sweep-paren uitgesloten — precies zoals de checker doet.

Het updateritme (30–45 minuten per week)​

  1. Haal actuals op (15 min): Exporteer de boekingen van de week naar Assets:Bank:* (voer de queries hierboven uit, of download transacties van je bankrekeningen — kaartaankopen blijven buiten beschouwing; alleen de afwikkelingsbetaling telt) en typ ze op het Actuals-blad. Bevestig dat de Eindkas van de week op Actuals perfect overeenkomt met je werkelijke gecombineerde banksaldo (Checking + Savings) — rij 31 leest 0. Deze reconciliatie is niet onderhandelbaar.
  2. Beoordeel debiteuren (10 min): Lijst alle openstaande facturen op en plaats ze in de week waarin je betaling verwacht. Wees conservatief en pas realistische incassotermijnen toe op basis van eerdere prestaties.
  3. Beoordeel crediteuren & loonkosten (10 min): Plaats de vervaldata voor alle bekende aankomende rekeningen. Vul je loondatums en -bedragen voor het hele kwartaal vooraf in. Stel niet-kritieke uitgaven uit naar vrijdagen om gedurende de week cash-optionaliteit te behouden.
  4. Variance-bijeenkomst (10 min): Open het Variance-blad en loop de compared-kolom van de week door: welke categorieën bewogen, in welke richting, en wat dat deed met de cumulatieve eindkas. Noteer de oorzaken van significante verschillen en beslis of je je prognoseregels voortaan moet aanpassen.

Nauwkeurigheid en besluitvorming​

Vuistregels voor nauwkeurigheid​

  • Weken 1–2: Streef naar ±5–10% fout. Deze datums en bedragen zouden zeer zeker moeten zijn.
  • Weken 3–6: Verwacht ±10–20% fout. Deze periode is een mix van bekende rekeningen en schattingen op basis van patronen.
  • Weken 7–13: Dit deel van de prognose is richtinggevend. Het wordt gedreven door je verkooppijplijn en run-rate kosten.

Betrouwbaarheidscodes: Om de prognose leesbaarder te maken, markeer je elke prognoserij met een betrouwbaarheidscode: Vastgelegd (bijv. loonkosten, huur), Waarschijnlijk (bijv. facturen aan goede klanten), of Opwaarts (bijv. nieuwe deals uit de pijplijn).

Triggers & acties (beslis deze vooraf)​

Een prognose is nutteloos zonder plan. Definieer vooraf je acties voor wanneer je bepaalde drempels raakt.

  • Minimale cashfloor: Bijvoorbeeld, je regel zou kunnen zijn "We moeten te allen tijde cash ≥ 1,5× het volgende volledige loonbedrag aanhouden." Als de prognose toont dat je deze floor gaat doorbreken, voer je onmiddellijk een vooraf afgesproken plan uit, zoals een incassosprint en een pauze op alle discretionaire uitgaven.
  • Runway-vangrail: Bijvoorbeeld, "Als de Eindkas in week 13 minder dan X maanden burn impliceert, starten we ons financieringsplan." Dit kan inhouden: een term sheet zoeken, klanten een korting bieden voor vooruitbetaling van omzet, of een kredietlijn aanspreken.
  • Grote uitgave-regel: Bijvoorbeeld, "Elke enkele niet-loonkosten-uitgave groter dan 5% van ons huidige kassaldo moet twee weken vooraf worden goedgekeurd en een fallbackplan hebben."

Template en scenario's​

Eenvoudige categorieënset (voor een seed-stage SaaS)​

  • Ontvangsten: Klantontvangsten, Overige instromen (rente, terugbetalingen, subsidies)
  • Uitgaven: Loonkosten (netto + werkgeverslasten), Zzp'ers, Cloud/Hosting (COGS), Software/SaaS (OpEx), Marketing (Paid/Brand), Huur/Kantoor, Juridisch/Boekhouding, Belastingen & Kosten, Schuldendienst, Eenmalige posten / Jaarlijkse posten
  • Berekend: Netto cash, Eindkas

Template (al gebouwd in de download; kopieer dit om blanco opnieuw op te bouwen)​

De onderstaande tabel is de vorm van het Forecast-blad — dezelfde rijen, dezelfde formules — om op een blanco blad opnieuw op te bouwen. In de download bevat rij 2 al de weekstartdatums (W1 2026-09-14 tot en met W13 2026-12-07) en is elk totaal bedraad; bevries onder rij 3 en rechts van kolom A (B4 in het bestand) om overeen te komen.

Rij / WeekW1W2W3...W13
Openingskas
--- ONTVANGSTEN ---
Klantontvangsten
Nieuwe Prepaids/Vooruit
Overige instromen
Totale ontvangsten=SUM()=SUM()=SUM()=SUM()
--- UITGAVEN ---
Loonkosten (netto + werkgeverslasten)
Zzp'ers
Cloud/Hosting (COGS)
Software/SaaS (OpEx)
Marketing
Huur/Kantoor
Juridisch/Boekhouding
Belastingen & Kosten
Schuldendienst
Eenmalige posten / Jaarlijkse posten
Totale uitgaven=SUM()=SUM()=SUM()=SUM()
Netto cash=Ontvangsten-Uitgaven
Eindkas=Openingskas+Netto

Scenariotoggles (houd het lichtgewicht)​

Je kunt eenvoudige scenarioplanning bouwen zonder een complex model te maken. Voeg een "toggle"-cel toe boven aan je blad voor belangrijke drivers. Bijvoorbeeld:

  • Incassoverlaging toggle B6: [1,0] (Verander naar 1,2 om een 20% vertraging in incasso's te modelleren — de Totale ontvangsten van elke week herberekenen via COL15 = COL12*$B$6+COL13*$B$7+COL14)
  • Nieuwe-boekingen toggle B7: [1,0] (Verander naar 0,8 om een 20% misser ten opzichte van plan te modelleren)

Dit zijn de werkelijke aannamecellen op het Forecast-blad — geen extra bedrading nodig.


Leren en fouten vermijden​

Variance review (laat leren cumulatief werken)​

De werkmap doet het boekhouden van variance voor je: Variance = Actual − Baseline, per categorie en per totaal, voor elke week waarvan de Actuals complete zijn en gelijk gedateerd als de Baseline. Jouw taak is de cijfers te verklaren. Bij je review tag je de redenen voor grote verschillen: incassovertraging, scope-uitloop, onvoorziene leveranciersaankoop, timingverschuiving. Als hetzelfde type afwijking zich herhaalt, verander dan de onderliggende regel van je model. Bijvoorbeeld, als incasso's consistent een week te laat zijn, verander dan je standaard incassotermijn-aanname van 21 dagen naar 28 dagen.

Uitgewerkte vergelijking (het meegeleverde voorbeeld). Baseline B1 werd vastgelegd op 2026-09-11 vanuit een opening van 85.000; de Actuals zijn de bankcash van het voorbeeldgrootboek. Tekens volgen het Variance-blad: ontvangsten, netto en eindkas positief = meer cash dan gepland, uitgaven positief = meer uitgegeven dan gepland.

WeekBaseline in / uit / eindActual in / uit / eindΔ ontvangstenΔ uitgavenΔ nettoΔ eindkas (cumulatief)
W1 (2026-09-14)12.000 / 10.000 / 87.00012.200 / 9.700 / 87.500+200−300+500+500
W2 (2026-09-21)13.200 / 17.000 / 83.20013.200 / 17.200 / 83.5000+200−200+300
W3 (2026-09-28)15.200 / 6.000 / 92.400niet ingevoerdn/an/an/an/a

Gelezen zoals het Variance-blad het presenteert:

  • W1, +500. Klantontvangsten kwamen 200 boven de geplande 11.800 (Variance!B12 = +200) en AWS factureerde 2.200 tegen een geplande 2.500 (Variance!B19 = −300: minder uitgaven, gunstig). 85.000 + 12.200 − 9.700 = 87.500 werkelijk tegen 85.000 + 12.000 − 10.000 = 87.000 gepland.
  • W2, +300. Ontvangsten landden exact op plan, maar de door de bank betaalde SaaS-rekening was 600 tegen een geplande 400 (Variance!C20 = +200: meer uitgaven, ongunstig). Netto voor de week is −200, dus de cumulatieve eindkasvoorsprong krimpt van +500 naar +300 (Variance!C29): 87.500 + 13.200 − 17.200 = 83.500 tegen 87.000 + 13.200 − 17.000 = 83.200.
  • W3 en verder, not observed. Niets is ingevoerd, dus elke cel toont n/a — geen geruststellende 0.
  • Als percentages (rijen 32–33): W1 ontvangsten +1,67% en uitgaven −3,00%; W2 ontvangsten 0,00% en uitgaven +1,18%.

Hieruit komen twee tags voort: de AWS-schatting valt te hoog uit, en de door de bank betaalde SaaS-regel was 200 te laag gepland. Beide zijn correcties op de aannames van Forecast — Baseline B1 blijft zoals die is, zodat je volgend kwartaal nog steeds kunt zien hoe ver het oorspronkelijke plan ernaast zat.

Veelvoorkomende valkuilen (vermijd deze)​

  • Het plan overschrijven: Actuals typen over Forecast-cellen (of de Baseline elke week opnieuw plakken) verwoest het plan waaraan je gemeten zou moeten worden. Actuals gaan op Actuals; de Baseline verandert alleen wanneer je bewust de horizon rolt.
  • Accrual en cash door elkaar halen: Deze prognose is voor alleen cash. Erkende omzet, afschrijvingen en andere accrual-concepten horen in je hoofdgrootboek, niet hier.
  • Schokkerige jaarlijkse posten vergeten: Jaarlijkse verzekeringspremies, grote SaaS-verlengingen en kwartaalbelastingbetalingen kunnen enorme verrassingen zijn. Plan ze in je prognose zodra je ervan weet.
  • Btw-cash negeren: Ook al is het een doorstroomverplichting, de cash staat op je bankrekening totdat je afdraagt. Modelleer zowel de instroom als de uitstroom.
  • Niet reconciliëren: Als de Eindkas van de week op Actuals niet overeenkomt met je werkelijke gecombineerde banksaldo (Checking + Savings; kaartsaldi uitgesloten), heb je een mappingfout — meestal een meegetelde kaartbetaling of een behouden sweep. Je moet dat oplossen voordat je de prognose kunt vertrouwen.
  • Geen duidelijke eigenaar: Wijs één persoon de verantwoordelijkheid toe om de prognose elke week bij te werken. Benoem een plaatsvervanger voor vakanties.

Snelle Beancount-koppelingen​

  • Rekeningenschema: Houd je cashbuckets schoon (bijv. Assets:Bank:Checking, Assets:Bank:Savings, Liabilities:CreditCard:Amex). Wekelijkse actuals zijn alleen de Assets:Bank:*-benen — de kaartrekening bestaat zodat afwikkelingen ergens vandaan kunnen komen, niet als tweede bron van uitgaven.
  • Gebruik de winst-en-verliesrekening niet als controle: Fava's winst-en-verliesrekening is accrual — die boekt kaartaankopen wanneer ze worden afgeschreven en negeert leningaflossing — dus die zal per definitie afwijken van deze cashprognose. De cashcontrole is de bean-query-export + overdracht hierboven (yarn check:cash-flow-actuals), die elke week moet aansluiten op Eindkas.
  • Documentatie: Wanneer je een grote eenmalige post hebt, voeg dan de factuur-PDF toe in je Beancount-map documents/ en link ernaar in de notitiekolom van je prognose.

Board/investeerderspakket (één slide)​

  1. Grafiek: Een eenvoudige lijngrafiek van je Eindkas per week voor alle 13 weken. Voeg een horizontale lijn toe die je minimale cashfloor toont.
  2. Tabel: Een kleine tabel met de W1–W13 Eindkas-cijfers, plus een opsomming van de 5 grootste verwachte instromen en uitstromen in het kwartaal.
  3. Notities: Een paar bullets over belangrijke aannames die sinds de laatste update zijn veranderd en eventuele triggers die je hebt geraakt of verwacht te raken.

Richt een boekhouding in waarop je kunt vertrouwen

Start nu een gratis administratie of gebruik de startupgids en oprichterscommunity wanneer je meer context wilt.