MJOP onderhoudsbegroting per bouwdeel berekenen
Beschrijving
Bereken per bouwdeel de eerstvolgende uitvoering, de geïndexeerde kosten in de planperiode en de benodigde jaarlijkse reservering voor je MJOP.
Invoer velden
Resultaten
Met deze tool maak je een onderhoudsbegroting per bouwdeel, zoals in een meerjarenonderhoudsplan (MJOP). Je ziet per bouwdeel wanneer de volgende uitvoering valt, wat die dan kost met prijsstijging, de kosten over de hele planperiode en hoeveel je per jaar moet reserveren.
Invoer bepalen: hoeveelheid en eenheidsprijs haal je uit een offerte of het bestaande MJOP, de cyclus uit de levensduur van het bouwdeel. Heeft een conditiemeting volgens NEN 2767 laten zien dat het werk eerder of later moet, vul dan het jaar uit de inspectie in. De standaard prijsstijging van 4% is het gemiddelde van de CBS-inputprijsindex bouwkosten over 2023 tot en met 2025.
Rekenbasis: elke uitvoering wordt geïndexeerd naar het eigen jaar. De reservering is gelijkmatig: totale kosten min het saldo, gedeeld door de jaren. De kascontrole laat zien of het fonds bij grote uitgaven vroeg in de periode tekortschiet. Voor een VvE geldt art. 5:126 BW: minstens het bedrag uit een vastgesteld MJOP van ten minste 10 jaar, of anders 0,5% van de herbouwwaarde.
Dit is een indicatie. Het vastgestelde MJOP en de besluiten van de vergadering zijn leidend. Volgende stap: toets de reservering met de VvE reservefonds berekenen-tool.
Formulas:
-
h_n_jaren = if(planperiode == 'p10', 10, if(planperiode == 'p20', 20, 30))
-
h_s = round(startjaar, 0)
-
h_eind = h_s + h_n_jaren - 1
-
h_g = if(prijsstijging > -100, 1 + prijsstijging / 100, 1)
-
h_v_hoeveelheid_1 = hoeveelheid_1
-
h_v_prijs_1 = prijs_1
-
h_v_cyclus_1 = cyclus_1
-
h_v_laatste_1 = laatste_1
-
h_v_inspectie_1 = inspectie_1
-
h_k_1 = h_v_hoeveelheid_1 * h_v_prijs_1
-
h_raw_1 = round(if(h_v_inspectie_1 > 0, h_v_inspectie_1, h_v_laatste_1 + if(h_v_cyclus_1 > 0, h_v_cyclus_1, 0)), 0)
-
h_t1_1 = if(h_raw_1 < h_s, h_s, h_raw_1)
-
h_n_1 = if(h_k_1 > 0 && h_t1_1 <= h_eind, if(h_v_cyclus_1 >= 1, floor((h_eind - h_t1_1) / h_v_cyclus_1 + 0.0001) + 1, 1), 0)
-
h_k1_1 = if(h_t1_1 - h_s <= 100, h_k_1 * pow(h_g, h_t1_1 - h_s), 0)
-
h_gc_1 = if(h_v_cyclus_1 >= 1 && h_v_cyclus_1 <= 100, pow(h_g, h_v_cyclus_1), 1)
-
h_v_hoeveelheid_2 = if(situatie != 'b1', hoeveelheid_2, 0)
-
h_v_prijs_2 = if(situatie != 'b1', prijs_2, 0)
-
h_v_cyclus_2 = if(situatie != 'b1', cyclus_2, 1)
-
h_v_laatste_2 = if(situatie != 'b1', laatste_2, 0)
-
h_v_inspectie_2 = if(situatie != 'b1', inspectie_2, 0)
-
h_k_2 = h_v_hoeveelheid_2 * h_v_prijs_2
-
h_raw_2 = round(if(h_v_inspectie_2 > 0, h_v_inspectie_2, h_v_laatste_2 + if(h_v_cyclus_2 > 0, h_v_cyclus_2, 0)), 0)
-
h_t1_2 = if(h_raw_2 < h_s, h_s, h_raw_2)
-
h_n_2 = if(situatie != 'b1' && h_k_2 > 0 && h_t1_2 <= h_eind, if(h_v_cyclus_2 >= 1, floor((h_eind - h_t1_2) / h_v_cyclus_2 + 0.0001) + 1, 1), 0)
-
h_k1_2 = if(h_t1_2 - h_s <= 100, h_k_2 * pow(h_g, h_t1_2 - h_s), 0)
-
h_gc_2 = if(h_v_cyclus_2 >= 1 && h_v_cyclus_2 <= 100, pow(h_g, h_v_cyclus_2), 1)
-
h_v_hoeveelheid_3 = if(situatie == 'b3', hoeveelheid_3, 0)
-
h_v_prijs_3 = if(situatie == 'b3', prijs_3, 0)
-
h_v_cyclus_3 = if(situatie == 'b3', cyclus_3, 1)
-
h_v_laatste_3 = if(situatie == 'b3', laatste_3, 0)
-
h_v_inspectie_3 = if(situatie == 'b3', inspectie_3, 0)
-
h_k_3 = h_v_hoeveelheid_3 * h_v_prijs_3
-
h_raw_3 = round(if(h_v_inspectie_3 > 0, h_v_inspectie_3, h_v_laatste_3 + if(h_v_cyclus_3 > 0, h_v_cyclus_3, 0)), 0)
-
h_t1_3 = if(h_raw_3 < h_s, h_s, h_raw_3)
-
h_n_3 = if(situatie == 'b3' && h_k_3 > 0 && h_t1_3 <= h_eind, if(h_v_cyclus_3 >= 1, floor((h_eind - h_t1_3) / h_v_cyclus_3 + 0.0001) + 1, 1), 0)
-
h_k1_3 = if(h_t1_3 - h_s <= 100, h_k_3 * pow(h_g, h_t1_3 - h_s), 0)
-
h_gc_3 = if(h_v_cyclus_3 >= 1 && h_v_cyclus_3 <= 100, pow(h_g, h_v_cyclus_3), 1)
-
h_tot_1 = h_k1_1 * if(h_n_1 <= 1, h_n_1, if(abs(1 - h_gc_1) > 0.000000001, (1 - pow(h_g, h_v_cyclus_1 * h_n_1)) / (1 - h_gc_1), h_n_1))
-
h_tot_2 = h_k1_2 * if(h_n_2 <= 1, h_n_2, if(abs(1 - h_gc_2) > 0.000000001, (1 - pow(h_g, h_v_cyclus_2 * h_n_2)) / (1 - h_gc_2), h_n_2))
-
h_tot_3 = h_k1_3 * if(h_n_3 <= 1, h_n_3, if(abs(1 - h_gc_3) > 0.000000001, (1 - pow(h_g, h_v_cyclus_3 * h_n_3)) / (1 - h_gc_3), h_n_3))
-
h_totaal = h_tot_1 + h_tot_2 + h_tot_3
-
h_res = if(h_totaal - saldo > 0, (h_totaal - saldo) / h_n_jaren, 0)
-
h_m_1_1 = if(h_n_1 > 0 && h_n_1 > 0 && h_t1_1 >= h_t1_1, if(h_v_cyclus_1 >= 1, floor((h_t1_1 - h_t1_1) / h_v_cyclus_1 + 0.0001) + 1, 1), 0)
-
h_s_1_1 = h_k1_1 * if(h_m_1_1 <= 1, h_m_1_1, if(abs(1 - h_gc_1) > 0.000000001, (1 - pow(h_g, h_v_cyclus_1 * h_m_1_1)) / (1 - h_gc_1), h_m_1_1))
-
h_m_2_1 = if(h_n_2 > 0 && h_n_1 > 0 && h_t1_1 >= h_t1_2, if(h_v_cyclus_2 >= 1, floor((h_t1_1 - h_t1_2) / h_v_cyclus_2 + 0.0001) + 1, 1), 0)
-
h_s_2_1 = h_k1_2 * if(h_m_2_1 <= 1, h_m_2_1, if(abs(1 - h_gc_2) > 0.000000001, (1 - pow(h_g, h_v_cyclus_2 * h_m_2_1)) / (1 - h_gc_2), h_m_2_1))
-
h_m_3_1 = if(h_n_3 > 0 && h_n_1 > 0 && h_t1_1 >= h_t1_3, if(h_v_cyclus_3 >= 1, floor((h_t1_1 - h_t1_3) / h_v_cyclus_3 + 0.0001) + 1, 1), 0)
-
h_s_3_1 = h_k1_3 * if(h_m_3_1 <= 1, h_m_3_1, if(abs(1 - h_gc_3) > 0.000000001, (1 - pow(h_g, h_v_cyclus_3 * h_m_3_1)) / (1 - h_gc_3), h_m_3_1))
-
h_tek_1 = if(h_n_1 > 0, h_s_1_1 + h_s_2_1 + h_s_3_1 - saldo - h_res * (h_t1_1 - h_s + 1), 0)
-
h_m_1_2 = if(h_n_1 > 0 && h_n_2 > 0 && h_t1_2 >= h_t1_1, if(h_v_cyclus_1 >= 1, floor((h_t1_2 - h_t1_1) / h_v_cyclus_1 + 0.0001) + 1, 1), 0)
-
h_s_1_2 = h_k1_1 * if(h_m_1_2 <= 1, h_m_1_2, if(abs(1 - h_gc_1) > 0.000000001, (1 - pow(h_g, h_v_cyclus_1 * h_m_1_2)) / (1 - h_gc_1), h_m_1_2))
-
h_m_2_2 = if(h_n_2 > 0 && h_n_2 > 0 && h_t1_2 >= h_t1_2, if(h_v_cyclus_2 >= 1, floor((h_t1_2 - h_t1_2) / h_v_cyclus_2 + 0.0001) + 1, 1), 0)
-
h_s_2_2 = h_k1_2 * if(h_m_2_2 <= 1, h_m_2_2, if(abs(1 - h_gc_2) > 0.000000001, (1 - pow(h_g, h_v_cyclus_2 * h_m_2_2)) / (1 - h_gc_2), h_m_2_2))
-
h_m_3_2 = if(h_n_3 > 0 && h_n_2 > 0 && h_t1_2 >= h_t1_3, if(h_v_cyclus_3 >= 1, floor((h_t1_2 - h_t1_3) / h_v_cyclus_3 + 0.0001) + 1, 1), 0)
-
h_s_3_2 = h_k1_3 * if(h_m_3_2 <= 1, h_m_3_2, if(abs(1 - h_gc_3) > 0.000000001, (1 - pow(h_g, h_v_cyclus_3 * h_m_3_2)) / (1 - h_gc_3), h_m_3_2))
-
h_tek_2 = if(h_n_2 > 0, h_s_1_2 + h_s_2_2 + h_s_3_2 - saldo - h_res * (h_t1_2 - h_s + 1), 0)
-
h_m_1_3 = if(h_n_1 > 0 && h_n_3 > 0 && h_t1_3 >= h_t1_1, if(h_v_cyclus_1 >= 1, floor((h_t1_3 - h_t1_1) / h_v_cyclus_1 + 0.0001) + 1, 1), 0)
-
h_s_1_3 = h_k1_1 * if(h_m_1_3 <= 1, h_m_1_3, if(abs(1 - h_gc_1) > 0.000000001, (1 - pow(h_g, h_v_cyclus_1 * h_m_1_3)) / (1 - h_gc_1), h_m_1_3))
-
h_m_2_3 = if(h_n_2 > 0 && h_n_3 > 0 && h_t1_3 >= h_t1_2, if(h_v_cyclus_2 >= 1, floor((h_t1_3 - h_t1_2) / h_v_cyclus_2 + 0.0001) + 1, 1), 0)
-
h_s_2_3 = h_k1_2 * if(h_m_2_3 <= 1, h_m_2_3, if(abs(1 - h_gc_2) > 0.000000001, (1 - pow(h_g, h_v_cyclus_2 * h_m_2_3)) / (1 - h_gc_2), h_m_2_3))
-
h_m_3_3 = if(h_n_3 > 0 && h_n_3 > 0 && h_t1_3 >= h_t1_3, if(h_v_cyclus_3 >= 1, floor((h_t1_3 - h_t1_3) / h_v_cyclus_3 + 0.0001) + 1, 1), 0)
-
h_s_3_3 = h_k1_3 * if(h_m_3_3 <= 1, h_m_3_3, if(abs(1 - h_gc_3) > 0.000000001, (1 - pow(h_g, h_v_cyclus_3 * h_m_3_3)) / (1 - h_gc_3), h_m_3_3))
-
h_tek_3 = if(h_n_3 > 0, h_s_1_3 + h_s_2_3 + h_s_3_3 - saldo - h_res * (h_t1_3 - h_s + 1), 0)
-
h_tekort = if(h_tek_1 >= h_tek_2 && h_tek_1 >= h_tek_3, h_tek_1, if(h_tek_2 >= h_tek_3, h_tek_2, h_tek_3))
-
h_tekort_jaar = if(h_tek_1 >= h_tek_2 && h_tek_1 >= h_tek_3, h_t1_1, if(h_tek_2 >= h_tek_3, h_t1_2, h_t1_3))
-
h_e_res_x = round(h_res, 0)
-
h_e_res_m = floor(h_e_res_x / 1000000)
-
h_e_res_k = floor(h_e_res_x / 1000) - 1000 * h_e_res_m
-
h_e_res_r = h_e_res_x - 1000 * floor(h_e_res_x / 1000)
-
h_e_res = if(h_e_res_x >= 1000000, concat(format(h_e_res_m, '0'), '.', concat(if(h_e_res_k < 100, '0', ''), if(h_e_res_k < 10, '0', ''), format(h_e_res_k, '0')), '.', concat(if(h_e_res_r < 100, '0', ''), if(h_e_res_r < 10, '0', ''), format(h_e_res_r, '0'))), if(h_e_res_x >= 1000, concat(format(h_e_res_k, '0'), '.', concat(if(h_e_res_r < 100, '0', ''), if(h_e_res_r < 10, '0', ''), format(h_e_res_r, '0'))), format(h_e_res_x, '0')))
-
h_e_huidig_x = round(huidige_reservering, 0)
-
h_e_huidig_m = floor(h_e_huidig_x / 1000000)
-
h_e_huidig_k = floor(h_e_huidig_x / 1000) - 1000 * h_e_huidig_m
-
h_e_huidig_r = h_e_huidig_x - 1000 * floor(h_e_huidig_x / 1000)
-
h_e_huidig = if(h_e_huidig_x >= 1000000, concat(format(h_e_huidig_m, '0'), '.', concat(if(h_e_huidig_k < 100, '0', ''), if(h_e_huidig_k < 10, '0', ''), format(h_e_huidig_k, '0')), '.', concat(if(h_e_huidig_r < 100, '0', ''), if(h_e_huidig_r < 10, '0', ''), format(h_e_huidig_r, '0'))), if(h_e_huidig_x >= 1000, concat(format(h_e_huidig_k, '0'), '.', concat(if(h_e_huidig_r < 100, '0', ''), if(h_e_huidig_r < 10, '0', ''), format(h_e_huidig_r, '0'))), format(h_e_huidig_x, '0')))
-
h_e_verschil_x = round(abs(huidige_reservering - h_res), 0)
-
h_e_verschil_m = floor(h_e_verschil_x / 1000000)
-
h_e_verschil_k = floor(h_e_verschil_x / 1000) - 1000 * h_e_verschil_m
-
h_e_verschil_r = h_e_verschil_x - 1000 * floor(h_e_verschil_x / 1000)
-
h_e_verschil = if(h_e_verschil_x >= 1000000, concat(format(h_e_verschil_m, '0'), '.', concat(if(h_e_verschil_k < 100, '0', ''), if(h_e_verschil_k < 10, '0', ''), format(h_e_verschil_k, '0')), '.', concat(if(h_e_verschil_r < 100, '0', ''), if(h_e_verschil_r < 10, '0', ''), format(h_e_verschil_r, '0'))), if(h_e_verschil_x >= 1000, concat(format(h_e_verschil_k, '0'), '.', concat(if(h_e_verschil_r < 100, '0', ''), if(h_e_verschil_r < 10, '0', ''), format(h_e_verschil_r, '0'))), format(h_e_verschil_x, '0')))
-
h_e_tekort_x = round(h_tekort, 0)
-
h_e_tekort_m = floor(h_e_tekort_x / 1000000)
-
h_e_tekort_k = floor(h_e_tekort_x / 1000) - 1000 * h_e_tekort_m
-
h_e_tekort_r = h_e_tekort_x - 1000 * floor(h_e_tekort_x / 1000)
-
h_e_tekort = if(h_e_tekort_x >= 1000000, concat(format(h_e_tekort_m, '0'), '.', concat(if(h_e_tekort_k < 100, '0', ''), if(h_e_tekort_k < 10, '0', ''), format(h_e_tekort_k, '0')), '.', concat(if(h_e_tekort_r < 100, '0', ''), if(h_e_tekort_r < 10, '0', ''), format(h_e_tekort_r, '0'))), if(h_e_tekort_x >= 1000, concat(format(h_e_tekort_k, '0'), '.', concat(if(h_e_tekort_r < 100, '0', ''), if(h_e_tekort_r < 10, '0', ''), format(h_e_tekort_r, '0'))), format(h_e_tekort_x, '0')))
-
h_ntot = h_n_1 + h_n_2 + h_n_3
-
jaar_1 = h_t1_1
Laatste uitvoering plus cyclus, of het jaar uit de inspectie. Ligt dat jaar voor het eerste planjaar, dan is het onderhoud achterstallig en staat het in het eerste planjaar. -
kosten_1 = round(h_k1_1, 0)
Hoeveelheid x eenheidsprijs x (1 + prijsstijging) tot de macht (uitvoeringsjaar - eerste planjaar). -
totaal_1 = round(h_tot_1, 0)
Alle uitvoeringen binnen de planperiode (elke cyclus opnieuw), elk geïndexeerd naar het eigen uitvoeringsjaar. Valt de uitvoering na de planperiode, dan is dit 0. -
jaar_2 = h_t1_2
Laatste uitvoering plus cyclus, of het jaar uit de inspectie. Ligt dat jaar voor het eerste planjaar, dan is het onderhoud achterstallig en staat het in het eerste planjaar. -
kosten_2 = round(h_k1_2, 0)
Hoeveelheid x eenheidsprijs x (1 + prijsstijging) tot de macht (uitvoeringsjaar - eerste planjaar). -
totaal_2 = round(h_tot_2, 0)
Alle uitvoeringen binnen de planperiode (elke cyclus opnieuw), elk geïndexeerd naar het eigen uitvoeringsjaar. Valt de uitvoering na de planperiode, dan is dit 0. -
jaar_3 = h_t1_3
Laatste uitvoering plus cyclus, of het jaar uit de inspectie. Ligt dat jaar voor het eerste planjaar, dan is het onderhoud achterstallig en staat het in het eerste planjaar. -
kosten_3 = round(h_k1_3, 0)
Hoeveelheid x eenheidsprijs x (1 + prijsstijging) tot de macht (uitvoeringsjaar - eerste planjaar). -
totaal_3 = round(h_tot_3, 0)
Alle uitvoeringen binnen de planperiode (elke cyclus opnieuw), elk geïndexeerd naar het eigen uitvoeringsjaar. Valt de uitvoering na de planperiode, dan is dit 0. -
totaal_kosten = round(h_totaal, 0)
Som van de bouwdelen, inclusief prijsstijging. Dit is het bedrag dat in de planperiode uit het reservefonds wordt betaald. -
reservering_jaar = round(h_res, 0)
Gelijkmatige reservering: (totale kosten - huidig saldo) gedeeld door het aantal jaren van de planperiode. Rente over het saldo is niet meegerekend. -
verschil_reservering = round(huidige_reservering - h_res, 0)
Huidige reservering min de benodigde reservering. Negatief betekent dat je te weinig opzij zet voor deze bouwdelen. -
vve_ondergrens = if(eigenaar == 'vve', round(herbouwwaarde * 0.005, 0), 0)
Art. 5:126 lid 2 BW: een VvE reserveert minstens het bedrag uit een vastgesteld MJOP (max. 5 jaar oud, min. 10 jaar vooruit) of anders 0,5% van de herbouwwaarde per jaar. -
advies = if(h_ntot == 0, 'Geen uitvoeringen in de planperiode. Controleer cyclus, jaartallen en hoeveelheden.', if(h_res <= 0, 'Het huidige saldo dekt alle uitvoeringen in de planperiode. Houd het MJOP wel actueel.', if(huidige_reservering <= 0, concat('Reserveer ', h_e_res, ' euro per jaar om alle uitvoeringen tot en met ', format(h_eind, '0'), ' te betalen.'), if(huidige_reservering >= h_res, concat('Je huidige reservering van ', h_e_huidig, ' euro per jaar dekt de benodigde ', h_e_res, ' euro per jaar.'), concat('Je reservering is ', h_e_verschil, ' euro per jaar lager dan de benodigde ', h_e_res, ' euro per jaar.')))))
Vergelijkt je huidige reservering met de gelijkmatige reservering voor deze bouwdelen. Andere bouwdelen uit het MJOP komen er nog bij. -
kascontrole = if(h_ntot == 0, 'Geen kascontrole: er vallen geen uitvoeringen in de planperiode.', if(h_tekort > 0, concat('Let op: bij gelijkmatig reserveren is er in ', format(h_tekort_jaar, '0'), ' een tekort van ', h_e_tekort, ' euro. Reserveer eerder meer of verschuif de uitvoering.'), 'Bij gelijkmatig reserveren is er bij de eerste uitvoering van elk bouwdeel genoeg geld in het fonds.'))
Saldo + reservering x jaren (storting aan het begin van elk jaar) tegenover alle uitgaven tot en met het eerste uitvoeringsjaar van elk bouwdeel. Het grootste tekort wordt getoond.