Beschikbaarheid
Voordat locaties in aanmerking komen voor allocatie, worden ze getoetst op beschikbaarheid. Een locatie is beschikbaar als ze niet restrictief is voor de betreffende sector en subsector. De beschikbaarheidsbepaling (in het model aangeduid als de zeefanalyse) integreert informatie uit restricties, stimuli, plancapaciteit, evident benut en een aantal sectorspecifieke voorwaarden. Deze pagina beschrijft de opbouw en werking van deze zeef.
De zeefanalyse
De zeef beoordeelt per gridcel of deze beschikbaar is voor een gegeven combinatie van sector, subsector en zichtjaar. Het resultaat is een binaire kaart (beschikbaar/restrictief) per subsector die als filter dient voor de allocatieprocedure: alleen beschikbare cellen komen in aanmerking.
De zeef opereert in twee stappen: eerst in het basisjaar, daarna per zichtjaar. Beide stappen beslissen sinds #770 op de cellen van 25 meter van het compacted domain, waar de allocatie sinds #508 draait. Tot #770 toetste de zichtjaarzeef een deel van de restricties (de dichtheidstoename, de IBIS-vol-toets en de pandentoets voor zon en wind) op AllocDomain (100 m) en legde de uitkomst over de zestien cellen eronder. Dat bewaakte een andere eenheid dan waarop de allocatie kiest: de allocatie is celexclusief per cel van 25 meter, en wat er bij een overname sneuvelt is de stand van die cel, niet die van de hectare.
Basisjaarzeef
De basisjaarzeef (Zeef_Basisjaar_T) bepaalt welke cellen in principe beschikbaar zijn op basis van hun huidige staat. Cellen die in het basisjaar al volledig zijn benut door de betreffende sector worden als “evident benut” gemarkeerd en niet opnieuw gealloceerd (tenzij ze worden verdrongen).
Zichtjaarzeef
De zichtjaarzeef (Zeef_T) bouwt voort op de basisjaarzeef en voegt dynamische restricties toe. Een cel is restrictief als aan ten minste één van de volgende voorwaarden is voldaan:
- Restrictief buiten plancapaciteit: de cel ligt buiten de plancapaciteit én voldoet aan een of meer restrictiecriteria.
- Restrictief ook binnen plancapaciteit: de cel voldoet aan restricties die ook gelden binnen de plancapaciteit.
- Restrictief in het basisjaar: de cel was al restrictief in de basisjaarzeef.
- Te hoog bouwjaar: het bestaande pand op de locatie is te jong om te slopen (zie Sloopbescherming hieronder).
Het onderscheid tussen punt 1 en 2 is cruciaal: sommige restricties gelden overal, andere alleen buiten de plancapaciteit. Locaties mét plancapaciteit worden daardoor minder snel restrictief verklaard, wat de beleidsintentie weerspiegelt dat geplande ontwikkellocaties beschermd zijn tegen bepaalde restricties. Sinds augustus 2026 respecteert ook de zichtjaarzeef de schakelaars HardePlannenGeldigInZeef en ZachtePlannenGeldigInZeef (voorheen alleen de basisjaarzeef), en vervalt de plan-vrijstelling in zichtjaren na ModelParameters/PlancapaciteitGeldigTotEnMet (standaard 2050), omdat plannen een beperkte looptijd hebben.
Restricties
Restricties zijn ruimtelijke beperkingen die locaties uitsluiten voor bepaalde sectoren. Ze worden als boolean rasterkaarten (25×25 m) aangeleverd door een apart GeoDMS-project dat beleidsbronnen van EU-, rijks- en provinciaal niveau vertaalt naar het modelgrid. Zie Restrictie-generatie voor een volledig overzicht van de brondata, de classificatiemethode en de geëxporteerde kaartlagen.
Per sector bestaan vier hardheidscategorieën (ZeerHard, Hard, Middel, Zacht) die de juridische of beleidsmatige bindendheid weerspiegelen. De parameter RestrictiesVariant_<sector> in VariantK.dms selecteert welke combinatie van hardheidsniveaus in een bepaalde beleidsvariant actief is. Bijvoorbeeld ZeerHardHardMiddel activeert de eerste drie niveaus. De beschikbare opties moeten overeenkomen met de containernamen in het restrictiesbestand (aangestuurd via Restricties_filedate in ModelParameters.dms).
Sector-specifieke restricties
Naast de generieke restricties per hardheidsniveau zijn er sector-specifieke booleans in VariantK.dms die aanvullende restricties activeren:
| Parameter | Sector | Omschrijving |
|---|---|---|
NietBouwenInNatura2000Buffer | Wonen/Werken | Bufferzone rond Natura 2000 |
NietBouwenVerVanOV | Wonen/Werken | Locaties ver van OV |
NietBouwenOpZeehaven | Wonen/Werken | Zeehavengebieden |
NietBouwenWaarSlap | Wonen/Werken | Slappe gronden |
NietBouwenWaarNat | Wonen/Werken | Natte gronden |
NietBouwenWaarZettingsgevoelig | Wonen/Werken | Zettingsgevoelige gronden |
NietBouwenInMooiLandschap | Wonen/Werken | Mooi landschap |
NietBouwenInZeerMooiLandschap* | Wonen/Werken/Recreatie | Zeer mooi landschap |
NietBouwenInNatuurorganisaties | Wonen/Werken | Terreinen natuurorganisaties |
RestrictiesOokGeldigBinnenHardePlancapaciteit | Wonen/Werken | Restricties ook binnen harde plannen |
MaatregelKanAangepastBouwenZijn | Wonen/Werken | Aangepast bouwen als maatregel |
Deze parameters zijn per variant in te stellen; welke aanstaan hoort bij de toepassing. In Toepassing NL2120 staan de meeste op FALSE en zit het verschil tussen de varianten vooral in het bouwregime hieronder en in de selectie van evident benut.
Bouwregime, bouwwijze en sloop
Sinds issue #614 zijn drie dingen uit elkaar getrokken die door elkaar liepen. Ze kunnen dezelfde cel raken maar betekenen niet hetzelfde.
Opleggen zegt welk landgebruik er komt, natuur of water, ongeacht wat er stond (VariantData/<variant>/ExogeenOpleggen). Dat raakt de landgebruikskaart, NDVI, koolstof en de landbouwclaim.
Het bouwregime zegt of er nog gebouwd mag worden (VariantData/<variant>/Bouwregime). Dat loopt via de zeef en raakt uitsluitend nieuwe allocatie, nooit de bestaande stand.
Sloop zegt of de bestaande bebouwing wijkt (VariantData/<variant>/Sloop). Dat raakt de voorraad, en daarmee via de restclaim de vervangende nieuwbouw elders in de allocregio, plus de uitkoop- en sloopkosten.
Het bouwregime als een kaart
Het bouwregime is een eigenschap van de plek en staat per variant als één geklasseerde kaart, Bouwregime/BouwregimeK_rel op het compacted domain. De klassen staan in Classifications/Modellering/BouwregimeK en lopen op in strengheid: Bouwen, BouwenMetMaatregelen, NietBouwen, Slopen. Twee vlaggen op de klasse dragen de betekenis, MagBouwen en MoetSlopen, zodat nergens op volgnummer vergeleken hoeft te worden.
Er zijn twee aanleidingen voor een regime, die los van elkaar staan:
- De overstromingsgevaarzonering. Per zone (0 tot en met 5, oplopend gevaar) kiest de variant een regime met
GevaarRegimeZone0tot en metGevaarRegimeZone5inVariantK.dms. De klasseSlopenis daar verboden, bewaakt met een IntegrityCheck: een gevaarzone beslaat een groot deel van laag Nederland, en sloop op die schaal heeft geen toets op bestaand bebouwd gebied, geen landgebruik dat ervoor in de plaats komt en geen allocregio die de restclaim kan opvangen. - De landschapstypen veen, kust, zand en rivieren, alleen gevuld in NbSGenuanceerd.
Raken beide dezelfde cel, dan wint de strengste. Dat is een max over de bronnen, mogelijk doordat de klassen oplopen.
De bebouwingstypekaart voor veen valt één op één op de vier klassen:
| Categorie in de levering | Regime |
|---|---|
| zoals huidig | Bouwen |
| aangepast bouwen | BouwenMetMaatregelen |
| wonen op water | BouwenMetMaatregelen |
| slopen en op slot | Slopen |
Kust en rivieren geven Slopen over hun hele ruimtebeslag. Zand geeft NietBouwen: in de beekdalen komt geen nieuwbouw meer, maar de levering laat de bestaande bebouwing staan.
De bouwwijze: wat het pakket toelaat en wat de plek kiest
De bouwwijze zegt hoe er gebouwd wordt: GeenMaatregelen, GebouwMaatregelen, Opgehoogd, OpPalen of Drijvend (Classifications/Modellering/BouwwijzeK). Elke bouwwijze heeft een maximale overstromingsdiepte waarbij hij nog werkt (0,2 tot 6,0 meter), een vlag of hij op bodemdaling anticipeert en een vlag of hij drijft.

Sinds #723 draagt een ontwikkelpakket niet langer een vaste bouwwijze maar een lijst toegestane bouwwijzen, in de kolom BouwwijzeToegestaan van de pakkettentabel. De keuzeregel staat een keer, in Templates/Beschikbaarheden/Bouwwijzekeuze_T: van de toegestane bouwwijzen die aan alle eisen van de cel voldoen wint de lichtste, die met de kleinste maximale overstromingsdiepte. Zodra de bouwwijzekosten uit #505 er zijn hoort hier kiezen op kosten te komen.
De zeef koppelt regime en bouwwijze. Waar het regime NietBouwen of Slopen is valt elk ontwikkelpakket af. Waar het BouwenMetMaatregelen is valt een pakket af als geen enkele toegestane bouwwijze aan de eisen van dat gebied voldoet. Welke eis dat is verschilt per aanleiding en staat daarom apart, in VariantData/<variant>/BouwwijzeEis: de overstromingszones toetsen op maximale overstromingsdiepte, aangepast bouwen op veen toetst op bodemdalingbestendigheid, en wonen op water toetst op drijvend bouwen. De twee veeneisen gelden pas als VariantK/BouwwijzeVeenGeldtVoorOPs aanstaat, en die schakelaar staat per variant apart. In de toepassing NL2120 staat hij uit in de twee basispadvarianten en aan in de twee varianten met natuurlijke maatregelen. Let op wat dat betekent zolang de bouwwijzekosten uit #505 er niet in zitten: waar hij aanstaat werkt hij als restrictie en niet als prijs, terwijl #505 juist die restrictie door een prijs wil vervangen.
Waar de dieptekaart geen waarde geeft telt de diepte als nul meter, dus als geen beperking. Die afspraak staat sinds #734 in de keuzeregel zelf en niet bij de aanroepers, zodat alle lezers hem delen. Ze is nodig omdat de dieptekaart ook binnen de gevaarzone gaten heeft: in de nuancevariant gaat het om 20.864 ha van de 1.161.907 ha waar de eis geldt, in de maximale variant om 24.344 ha. Zonder die afspraak liep de vergelijking daar stuk op een ontbrekende waarde, viel elke bouwwijze af en sloot de zeef die hectares voor alle woningbouw en alle werken, niet omdat het water diep is maar omdat er geen meting ligt. Het is bovendien de afspraak die de kostenkant al hanteerde: de bodemdalingkosten lezen diezelfde cellen als nul meter water.
Dezelfde keuze werkt door voorbij de zeef: de overstromingsschade leest de schadevrije diepte van de bouwwijze die op de cel gekozen is (#681), de groenfracties lezen per cel of er drijvend gebouwd wordt, en de bouwkostenhaak leest de kostenopslag van de gekozen bouwwijze.
Sinds #726 zijn de lijsten ook echt verruimd, op een regel over draagvermogen die vanuit Deltares is aangeleverd. Waterbestendig bouwen en ophogen kunnen elk woonmilieu dragen, bouwen op palen en drijvend bouwen alleen de eengezinsmilieus, en elk pakket mag daarnaast zonder maatregel worden gebouwd, want dat is de normale gang van zaken en geen maatregel. Daarmee reikt een eengezinspakket tot 6,0 meter en een meergezinspakket tot 2,0 meter. Tot die verruiming droeg elk pakket precies zijn oude enkele bouwwijze en bleven de reguliere pakketten dus op 0,2 meter steken; gemeten over het areaal waar de eis geldt gaan zij van 4 naar bijna 98 procent (eengezins) of naar 49 procent (meergezins). De werkenkant kent dezelfde kolom, daar per subsector (#727).
Die werkenkant zit op een andere plek in de zeef. Wonen toetst per ontwikkelpakket en dus in de zichtjaarzeef; werken heeft geen pakketten en toetst per subsector in de basisjaarzeef, in Zeef_Basisjaar_T/Impl/GeenToegestaneBouwwijzeVoldoet, bij de andere statische plekrestricties. Dat is niet alleen een kwestie van waar het netjes staat. De potentiele state maskeert teller en noemer van de dichtheidstoets allebei op de basisjaarbeschikbaarheid, dus alleen daar lopen die twee over hetzelfde deeloppervlak; in de zichtjaarzeef zou de dichtheidstoets potentieel en stand meerekenen op deelcellen waar de subsector nooit kan bouwen. De toets kent geen planvrijstelling, net zomin als aan de wonenkant: een vastgesteld plan maakt de grond niet droger.
Wat een subsector mag komt uit een expertoordeel van Deltares. Waterbestendig bouwen en ophogen kunnen alle zes de subsectoren dragen, bouwen op palen niet voor nijverheid en logistiek, en drijvend bouwen voor geen enkele werksubsector. Nijverheid en logistiek reiken daarmee tot 2,0 meter en de vier andere werksubsectoren tot 2,5, tegenover 6,0 meter voor een eengezinswoonmilieu, dus in de diepe delen van de eiszone kan er wel gewoond maar niet gewerkt worden. Zie Uitwerking werken.
De pakkettensets per variant
De pakkettentabel is sinds #721 gesplitst: Ontwikkelpakketten/NettoBuurt/Default_src.dms draagt de 27 reguliere pakketten en PerVariant_src.dms de 14 NbSMax- en 12 NbSGenuanceerd-rijen. VariantK/OP_Aanvulling noemt per variant welk blok achter de default wordt gevoegd; BAU en BAU2 gebruiken exact de default. De parseerlogica staat een keer, in OPTabel_T, en variantvreemde pakketten zitten simpelweg niet meer in de set, waar ze tot #721 per cel werden weggezeefd.
Omdat de standbestanden OP_rel en SubSector_rel als positie wegschrijven, schrijft de allocatie sinds #721 een legenda naast de OP_rel-tif en weigert het inlezen een stand waarvan de legenda niet bij de lopende sets past. Een stand van voor deze splitsing faalt dus hard in plaats van stil naar de verkeerde pakketten te wijzen.
Hoge en lage gronden
Naast het bouwregime kent de zeef een tweede ruimtelijke tweedeling: hoge tegen lage gronden, in BaseData/Omgeving/HogeGronden en doorgegeven als NbSOPToepassingsgebied/Hoog_NL en Laag_NL. De NbS-ontwikkelpakketten dragen een kolom die zegt voor welk van de twee ze bedoeld zijn, en buiten hun gebied vallen ze af.
Hoge grond is de pleistocene helft van de Basiskaart Natuurlijk Systeem Nederland: rivierterrassen, stuwwallen, kleileemgebied, dekzand, voormalige hoogvenen en heuvelland. De vijf holocene klassen daarvoor vormen laag Nederland. Welke hoofdklasse aan welke kant valt staat als kolom IsHoogNederland in Classifications/Landschap, zodat de indeling te lezen en te wijzigen is.
Tot #698 was dit een proxy op de overstromingskaart: hoge grond was elke cel waar de maximumdieptekaart geen overstroming geeft. Die lezing leunde vooral op de leegte in die kaart. Van de 1.821.012 ha die eruit kwam had 1.767.506 ha helemaal geen waarde en maar 53.506 ha een diepte van precies nul. De twee lezingen geven bijna hetzelfde landelijke totaal, 1.820.435 tegen 1.821.012 ha, maar wijzen 588.279 ha aan verschillende kanten toe, oftewel 16,9 procent van het land. Vooral zeeklei telde in de dieptelezing voor 145.227 ha als hoge grond omdat de kaart daar leeg is, en van het dekzand viel 166.112 ha aan de lage kant.
De reden om over te stappen is dat de tweedeling geen overstromingsvraag beantwoordt. Wie hier de diepte wil toetsen doet dat al elders en beter: de bouwwijzetoets hierboven vergelijkt de werkelijke waterdiepte per cel met wat het pakket aankan. Wat de splitsing tussen hoog en laag daarbovenop doet is de keuze tussen groen en blauw. De pakketten voor hoog Nederland maken groen, die voor laag Nederland maken water, en of infiltreren zin heeft is een bodem- en grondwatervraag. Dezelfde redenering geldt voor de twee andere lezers, de koolstofindicator en het wateraanbod in de bergingsindicator.
Waar de basiskaart geen hoofdklasse geeft valt de definitie terug op de oude dieptelezing, die als NietOverstroombaar blijft bestaan. Dat gaat om 19.491 ha, overwegend grote wateren en de rand langs kust en grens, waarvan 1.321 ha bebouwd gebied.
Wat de overstap doet met een gealloceerde uitkomst is nog niet gemeten.
Wanneer wordt er gesloopt
Twee regels, zonder schakelaar ertussen. Er wordt gesloopt waar het model een nieuw landgebruik oplegt, want een cel kan niet tegelijk nieuwe natuur en woningen dragen. En er wordt gesloopt waar het bouwregime Slopen is, ook als daar geen natuur voor in de plaats komt; die cel houdt dan zijn huidige landgebruiksklasse en staat er met nul woningen in. Dat tweede geval is een uitdrukkelijke wens vanuit Deltares.
Beide regels lopen door dezelfde toets als de oplegging zelf, dus niet in bestaand bebouwd gebied (#641) en niet over exogeen grondgebruik zoals luchthavens, hoofdwegen, spoor en begraafplaatsen.
Het leegmaken gebeurt in het eerste zichtjaar, in Templates/Allocatie/Zichtjaar_T, en raakt wonen, werken, verblijfsrecreatie, zon, wind en de bijbehorende pandvoetafdrukken. Daarna houdt de zeef de cellen leeg, dus het legen hoeft maar één keer. Doordat de claim een voorraaddoel per allocregio is, komt de gesloopte voorraad vanzelf als restclaim terug en wordt hij elders in de regio herbouwd.
De twee leveringen dekken elkaar niet
Elk landschapstype levert twee losse kaarten aan met een eigen begrenzing: een niet-bouwen-kaart en een natuurkaart. Alleen bij kust vallen die samen. Daardoor lopen de twee sloopregels uiteen, en Sloop/Verschil meet dat. Gemeten in NbSGenuanceerd, zichtjaar 2030:
| ha | woningen | |
|---|---|---|
Regime Slopen, geen natuur opgelegd | 73.011 | 2.487 |
Natuur opgelegd, regime niet Slopen | 326.391 | 27.797 |
De eerste regel is precies waarom de tweede sloopregel bestaat: zonder die regel zouden die 2.487 woningen blijven staan in gebied dat volgens de levering moet wijken. Het gaat vooral om rivieren, waar het ruimtebeslag 88.348 ha is tegenover 58.649 ha terrestrische natuur; het verschil is water en agrarische ecotopen.
De tweede regel is groter, en de meting hierboven dateert van voor de natuurallocaties van #652 en #660. Sindsdien zetten zand en veen hun opgave met een allocatie op de kaart die cellen met een BAG-pand overslaat (#661), zodat de natuur naast de bebouwing landt in plaats van eroverheen. Wat er van dit verschil overblijft is daarmee geen kaartfout meer maar een uitkomst van de zeef, en staat actueel in Sloop/Verschil; zie ook Uitwerking natuur.
Stimuli
Stimuli werken als het omgekeerde van restricties: ze markeren locaties die extra geschikt zijn voor bepaalde functies. Net als restricties worden ze in het restrictie-generatieproces opgebouwd uit beleidsbronnen en ingedeeld naar hardheid (Hard, Middel, Zacht), en per variant geselecteerd via StimuliVariant_<sector>.
Stimuli beïnvloeden niet de beschikbaarheid (de zeef) maar de geschiktheid. Ze worden meegenomen in de geschiktheidsbepaling als onderdeel van de ontwerpcomponent (tredes).
Plancapaciteit
Plancapaciteit geeft aan waar concrete bouwplannen bestaan. Het model onderscheidt harde plannen (onherroepelijk bestemmingsplan, verleende vergunning) en zachte plannen (nog in procedure, intentie). De plancapaciteit wordt extern aangeleverd en per zichtjaar toegepast.
Plancapaciteit speelt een bijzondere rol in de zeef: locaties mét plancapaciteit worden beschermd tegen een deel van de restricties. De parameters HardePlannenGeldigInZeef en ZachtePlannenGeldigInZeef bepalen of harde en/of zachte plannen deze bescherming bieden.
De parameter RestrictiesOokGeldigBinnenHardePlancapaciteit (standaard: FALSE) kan deze bescherming opheffen, waardoor restricties ook binnen de harde plancapaciteit gelden.
De bescherming heeft een houdbaarheidsdatum
Plannen hebben een beperkte looptijd, en ModelParameters/Advanced/PlancapaciteitGeldigTotEnMet legt vast tot en met welk zichtjaar de bescherming geldt. In zichtjaren daarna gelden de restricties ook binnen plancapaciteit.
Dat vroeg een omweg in de opbouw. De zeef bestaat uit twee lagen: een basisjaarzeef die eenmaal per variant wordt opgebouwd, en een zichtjaarzeef daarbovenop. De inhoudelijke restricties zitten in de eerste, en die kan het zichtjaar structureel niet kennen. Sinds #682 levert de basisjaarzeef daarom twee uitkomsten, met en zonder planvrijstelling, en kiest de zichtjaarzeef er per zichtjaar een van. Tot dat issue raakte de vervaldatum alleen twee vlaggen in de zichtjaarzeef, en die voeden daar sinds #670 nog maar een enkele toets, zodat de vrijstelling op de restrictiekaarten, de milieuzonering, de Natura 2000-buffer, de bodemtoetsen, het landschapsregime, de zeehaven, het energielabel en evident benut in de praktijk nooit verviel.
Zie Plancapaciteit voor meer details.
Werken-specifieke toetsen
Voor de sector werken kent de zeef twee extra toetsen:
- Volle bedrijventerreinen: een IBIS-werklocatie telt als vol wanneer de provinciale registratie dat zegt of wanneer de uitgegeven fractie boven
BedrijfsterreinUitgegevenFractieAlsVolBeschouwen(0,8) ligt. Volle terreinen zijn voor alle zes werksubsectoren uitgesloten, ook binnen harde plancapaciteit. Dit is een bewuste hack: zonder deze toets zou elk stukje terrein zonder pandvoetafdruk worden volgebouwd. De vol-status is een momentopname van het IBIS-jaar (IBIS_Year, alleen 2023 en 2024 werken) en verandert niet gedurende de run. - Minimale dichtheidstoename (
MinimumDichtheidToenameWerken, 0,10): het potentieel van de subsector in de cel moet de zittende werkgelegenheid met minstens 10 procent overtreffen.
Beide toetsen rekenen sinds #770 per cel van 25 meter. De IBIS-werklocaties zijn daarvoor op 25 meter gerasterd, en de dichtheidstoename vergelijkt het potentieel van de cel (de dichtheid van de hectare maal 0,0625 hectare) met de stand van diezelfde cel. Tot #770 werden saldo en stand eerst over de zestien cellen van de hectare opgeteld en werd het antwoord op elk van die cellen teruggelegd, zodat een lege cel naast een vol pand het oordeel van het pand kreeg. Per cel verandert het karakter van de toets: met een potentieel van 34 tot 40 banen per hectare krijgt een cel 2 tot 2,5 banen, dus elke pandcel met meer dan een paar banen faalt en elke lege cel slaagt via de greenfieldvrijstelling. Bestaand werkgebied wordt daarmee een mozaiek van dichte pandcellen en open erfcellen; wat het opvullen van die erven begrenst is de vol-toets en de vormtoets van de geclusterde allocatie. Als illustratie, gemeten in zichtjaar 2040 van BAU op de testkopie van 4 september 2026: per werksubsector wisselt 0,1 tot 0,3 procent van het compacted domain van oordeel, in beide richtingen.
Voor zakelijke dienstverlening geldt op cellen waar kantoor de werkstand domineert de verdikkingsvrijstelling van #668: de vol-toets, de sloopleeftijdstoetsen en sinds #770 ook de evident-benut-toets van de basisjaarzeef vervallen daar, want toewijzing is er verdikking van het bestaande pand en geen nieuw ruimtebeslag. De overige toetsen van de basisjaarzeef blijven ook op die cellen gelden.
Die tweede toets is meer dan een rem op verdunning. De allocatie is celexclusief: wint een subsector de cel, dan gaat de stand van alle andere subsectoren daar op nul, zie de update-expressies in Templates/Allocatie_T.dms. De dichtheidstoets is daarmee de afweging of een overname per saldo meer banen oplevert dan hij sloopt. Op een lege cel valt niets te slopen, dus geldt de toets daar niet en is de cel beschikbaar. Dat staat sinds ObjectVision/RSopen#709 expliciet in de configuratie, met de werkstand van de cel als eigen item (StateSectorVoorAllocatie), in plaats van dat het op de uitkomst van een deling door nul leunt. Bij wonen is diezelfde vrijstelling om dezelfde reden expliciet gemaakt, zie ObjectVision/RSopen#604.
De toets belast daarmee uitsluitend bestaand werkgebied, en raakt laagdichte subsectoren harder dan hoogdichte: met een potentieel van 34 tot 40 banen per hectare komt detailhandel alleen op cellen met minder dan ongeveer 31 banen per hectare, terwijl zakelijke dienstverlening met 200 banen per hectare tot ruim 180 gaat.
Teller en noemer staan sinds ObjectVision/RSopen#713 over hetzelfde deeloppervlak, namelijk het deel van de cel dat voor de toetsende subsector beschikbaar is (StandInBereik). Sinds #770 is dat deeloppervlak de cel van 25 meter zelf. Daarvoor was de teller gemaskeerd op de beschikbaarheid van die subsector en de noemer per subsector op die van zichzelf, wat twee fouten tegelijk gaf. Banen van een subsector die op de cel restrictief staat telden niet mee terwijl ze bij een overname wel sneuvelen, en omgekeerd kreeg een subsector banen aangerekend op deelcellen waar hij zelf niet mag bouwen en die bij zijn allocatie dus ook niet verdwijnen.
Het effect verschilt per subsector, gemeten in zichtjaar 2040 van BAU als aantal restrictieve cellen voor en na. Nijverheid gaat van 31.440 naar 34.240 en logistiek van 18.208 naar 21.350, dus die worden strenger. Detailhandel gaat van 52.937 naar 9.771, overige consumentendiensten van 52.446 naar 9.278 en overheid en kwartaire diensten van 50.190 naar 7.034, dus die worden ruimer: hun noemer bevatte de industriebanen op terreinen waar zij niet mogen bouwen. Ruim 43.000 hectare met bestaande werkgelegenheid komt daarmee alsnog door de toets, en dat is een van de mechanische oorzaken van de binnenstedelijke schaarste die in ObjectVision/RSopen#709 is beschreven.
Er was een derde toets, MinimumSubsectorShare. Die verklaarde een cel restrictief zodra de subsector er nog geen aandeel van 0,01 had, en was bedoeld als dezelfde sloopwacht. Omdat hij identiteit toetste in plaats van het saldo, weigerde hij alleen overnames die de dichtheidstoets al had goedgekeurd: in variant NbSGenuanceerd, zichtjaar 2040, ging het per subsector om 49.976 tot 70.724 cellen van een hectare, met 64.789 tot 113.799 banen ander werk erop tegenover een potentieel van 623.109 tot 7.766.914 banen. Die cellen lagen bovendien veel vaker dan gemiddeld binnen bestaand bebouwd gebied, zodat de toets 19 tot 49 procent van de binnenstedelijke kansen wegnam tegen krap 3 procent van de kansen daarbuiten. De toets is daarom verwijderd, zie ObjectVision/RSopen#670. Daarmee verviel ook de tak van de zichtjaarzeef die alleen buiten plancapaciteit gold, want de vol-toets op IBIS die daar verder in stond geldt ook binnen plancapaciteit en stond er dubbel. De basisjaarzeef houdt zijn eigen buiten-plancapaciteit-tak.
Milieuzonering
De milieuzonering weert gevoelige functies rond (nieuwe) bedrijvigheid en is in augustus 2026 herzien. De bufferafstanden per milieucategorie volgen de grootste VNG-richtafstand per hoofdcategorie (ModelParameters/Wonen/MilieuCat: categorie 2 = 30 m, 3 = 100 m, 4 = 300 m, 5 = 1000 m, 6 = 1500 m; bron VNG, Bedrijven en milieuzonering, editie 2009). Er zijn twee mechanismen:
- Rond bestaande IBIS-terreinen (basisjaarzeef): wonen is restrictief binnen de buffer van terreinen met categorie 2 en hoger; milieugevoelige werkfuncties (diensten, detailhandel) en verblijfsrecreatie alleen binnen de buffer van zware terreinen met categorie 4 en hoger. Voorheen blokkeerde elke werklocatie, ook categorie 1 en zorg- of retaillocaties, wonen op het terrein zelf; dat was alleen als rem op hoge categorieën bedoeld.
- Rond nieuw gealloceerd vervuilend werk (nijverheid en logistiek, dynamisch tijdens de allocatie): binnen de bufferafstand (
MilieuCatDist_restrictief_anderesectoren_*: nijverheid categorie 4, dus 300 m; logistiek categorie 3, dus 100 m) mogen geen gevoelige functies landen. Waterberging is hiervan uitgezonderd, want dat is geen milieugevoelige functie. De toets werkt sinds augustus 2026 ook andersom: nieuwe nijverheid en logistiek houden zelf afstand tot bestaand en eerder gealloceerd wonen, zodat de zonering niet meer afhangt van de volgorde waarin wonen en werken alloceren.
De omgekeerde richting kent twee begrenzingen, in te stellen in ModelParameters/Werken/OmgekeerdeMilieuzonering. Ten eerste ligt de buffer om aaneengesloten woongebied en niet om elke cel met een woning: een wooncel telt pas mee wanneer minstens WoongebiedAandeel (0,2) van de cellen binnen WoongebiedStraal (100 m) woningen heeft, bepaald met Templates/Allocatie/Buurtaandeel_gridcel_T. Zonder die begrenzing legde een enkele woning in het buitengebied dezelfde 300 m op als een woonwijk, en lag 65 procent van het studiegebied binnen de buffer. Ten tweede vervalt de toets op bestaand bedrijventerrein, want de VNG-richtafstanden gelden niet tegen bestaande vergunde bedrijvigheid. Daaronder vallen de IBIS-werklocaties van het type bedrijventerrein, zeehaventerrein, platformgebonden bedrijvigheid en agribusinesscomplex (IsBedrijfsmatigTerrein), plus cellen die zelf al banen in de betreffende subsector hebben. Samen brengen de twee het gesloten deel van het studiegebied voor nieuwe nijverheid van 65 naar 29 procent, en het geblokkeerde deel van de harde plancapaciteit industrieterrein van 31 naar 3,5 procent, gemeten op de stand in het basisjaar. De prijs is dat 4,2 procent van de woningvoorraad, de meest verspreide bebouwing, geen bufferbescherming meer heeft. De bufferafstand in deze richting staat apart van de heenrichting in MilieuCatDist_Nijverheid en MilieuCatDist_Logistiek, zodat de VNG-stap terug voor gemengd gebied en de milieucategorie per activiteit gezet kunnen worden zonder de heenrichting te raken. Zie ObjectVision/RSopen#669.
Evident benut
“Evident benut” markeert locaties die in het basisjaar al in gebruik zijn door een bepaalde sector en daarom niet opnieuw hoeven te worden gealloceerd. Dit is een classificatie van bestaand landgebruik die per sector en per variant kan worden ingesteld via EvidentBenutVariant_<sector> in VariantK.dms.
Welke set een variant gebruikt, is een variantinstelling; zie Toepassing NL2120 voor de invulling daar. De sets zelf zijn sinds pbl-nl/model-RSopen#20 per BGT-klassenset gedeeld in plaats van per variant gedefinieerd.
Evident benut is gedefinieerd in VariantParameters/EvidentBenut.dms en wordt opgebouwd uit selecties van BBG- en BGT-klassen.
MinimalLandAvailability
De parameter MinimalLandAvailability (standaard 0.40 ha voor stedelijke functies) stelt een drempel aan de minimale beschikbare ruimte in een cel. Cellen met minder beschikbare ruimte dan deze drempel worden restrictief verklaard. Dit mechanisme wordt geëvalueerd als onderdeel van de zeef in Zeef_T:
GeeftOnvoldoendeRuimte := PotentieleRuimte < MinimalLandAvailability
De potentiële ruimte is sinds #770 de beschikbare oppervlakte in een schijf van 50 meter rond de cel: dertien cellen van 25 meter, samen 0,81 hectare. De drempel wordt als aandeel van die schijf toegepast, zodat 0,60 hectare per hectare 60 procent blijft. Tot #770 was het het totaal van beschikbare cellen binnen de cel van 100 meter waarin de cel lag, uitgesmeerd over de zestien cellen eronder. Landbouw wordt in NL2120 niet gealloceerd, dus deze omzetting is niet op een uitkomst getoetst.
Voor landbouw geldt een afzonderlijke drempel (MinimalLandAvailability_Landbouw, standaard 0.60 ha).
Zie Dichtheid voor de relatie met dichtheidsparameters.
Sloopbescherming
De zichtjaarzeef bevat een sloopbescherming op basis van de leeftijd van bestaande panden. De pandleeftijd is het zichtjaar min BouwjaarPand, en dat is sinds #735 het bouwjaar van het jongste BAG-pand in de cel. Daarvoor was het het met de pandtoedeling gewogen celgemiddelde, en dat beantwoordt de vraag niet: de toets beslist over sloop van de hele cel, en dan gaat elk pand erin tegen de vlakte, dus het pand dat er het meeste bezwaar tegen heeft hoort het antwoord te geven. Een cel met een pand uit 1900 en een uit 2020 kwam op een gemiddelde van 1960 uit en was daarmee onbeschermd. Twee parameters regelen de bescherming, en ze sluiten elkaar uit:
GeenSlooptotLeeftijd_BinnenHardePlancapaciteit(vast, inModelParameters/Wonen, 25 jaar): geldt op locaties met harde plancapaciteit voor de betreffende subsector.GeenSlooptotLeeftijd_BuitenHardePlancapaciteit(inVariantK.dms, in alle vier de NL2120-varianten 55 jaar): de strengere drempel, die daarbuiten geldt.
Ondanks de plek in ModelParameters/Wonen geldt de eerste parameter voor elke sector die de zichtjaarzeef doorloopt, niet alleen voor wonen.
Beide toetsen zijn op harde plancapaciteit gemaskeerd, de strenge sinds #639 en de soepele sinds #586. Tot #639 gold de strenge drempel feitelijk overal en bestond de soepelere regel binnen harde plannen niet. Tot #586 gold de soepele drempel ook buiten harde plannen, waar de strenge hem overstemde zolang hij de laagste van de twee was; dat werkte, maar het leunde op een invariant die nergens werd bewaakt. Cellen zonder panden hebben geen pandleeftijd en vallen bij beide toetsen buiten de bescherming; dat geldt ook voor een cel waarvan geen enkel pand een bekend bouwjaar draagt.
De bescherming binnen harde plancapaciteit werkt alleen zolang die plancapaciteit geldig is. HeeftHardePlannenDezeSector draagt IsPlancapaciteitNogGeldig, dus na ModelParameters/Advanced/PlancapaciteitGeldigTotEnMet valt in deze zeef alles onder de buitendrempel.
De bescherming dooft uit met de horizon
BouwjaarPand is statische basisjaardata en de zichtjaarzeef ziet niet wat het model zelf bouwt, dus de pandleeftijd loopt alleen maar op. De toets wordt daardoor elk zichtjaar soepeler en houdt op te bestaan zodra het zichtjaar het jongste bouwjaar in de BAG plus de drempel passeert. Dat is geen ontwerpkeuze maar een gevolg van de lengte van de zichtjarenreeks in verhouding tot de leeftijd van de brondata.
In de NL2120-toepassing, gemeten in BAU voor het ontwikkelpakket eengezins vrije sector op codestand a6dca339, zeeft de buitendrempel achtereenvolgens 2.414.828, 1.623.971, 904.140 en 375.369 cellen weg in Y2040 tot en met Y2070, en vanaf Y2080 nul. Die getallen horen bij dat project en niet bij de methode. Wat wel bij de methode hoort is dat de reeks monotoon naar nul loopt, en dat een hogere drempel alleen het zichtjaar verplaatst waarin dat gebeurt. In die toepassing zou de drempel op achtennegentig jaar moeten staan om in het laatste zichtjaar nog te bijten, want het jongste pand van het land is dan zevenennegentig, en dat is geen afschrijvingstermijn meer maar een sloopverbod.
De leeftijdsregel is daarmee een overgangsrem en niet de staande rem op sloop. De staande rem is voor wonen het exploitatiesaldo, via MinimumExploitatieSaldo in de zeef per ontwikkelpakket: dat zet de verwervings- en sloopkosten van de zittende voorraad tegen de opbrengst van het pakket en vervaagt niet met het zichtjaar. Voor werken bestaat die rem niet, want de werkgeschiktheid is een kansfunctie zonder kostenkant; daar blijft alleen de dichtheidstoets over.
Wat het model zelf bouwt is niet onbeschermd, maar dat loopt langs een andere weg: IterSubsector_T/Beschikbaar_Init sluit cellen met een gealloceerde subsector permanent uit van verdere allocatie. De bestaande voorraad kent dus een aflopende bescherming en de nieuwbouw van het model een onbeperkte.
Die asymmetrie staat er bewust, zie #735. Dezelfde regel op modelnieuwbouw toepassen vraagt om een allocatiejaar per cel in de rollende stand, en de permanente uitsluiting is bovendien meer dan een bescherming: vier mechanismen leunen op de invariant dat een cel hoogstens een keer wordt gealloceerd. Het ontwikkelpakket en de subsector staan eerste-wint in de stand, de eindejaarsafleiding van de pandvoetafdruk eist een lege ingangswaarde, en de sloop- en nieuwbouwindicator telt uit datzelfde verschil. Op een heralloceerde cel wijzen pakket en subsector daardoor naar de vorige toestand terwijl de hoeveelheden de nieuwe volgen, en tellen sloop en nieuwbouw als nul. Daar komt bij dat verwervings- en sloopkosten aan de basisjaar-BAG hangen, zodat modelnieuwbouw in het exploitatiesaldo verwervingswaarde nul en sloopkosten nul heeft; vrijgegeven modelnieuwbouw zou daarmee de goedkoopste herontwikkelgrond zijn en als eerste aan de beurt komen. De volgorde is dus eerst die vier mechanismen en de waardering, en pas daarna de leeftijdsregel.
Voor zakelijke dienstverlening vervallen beide leeftijdstoetsen en de IBIS-vol-toets op cellen waar kantoor in het basisjaar de werkstand domineert, zolang ModelParameters/Werken/KantoorVerdikkingInBestaand aanstaat. Toewijzing aan kantoor is daar verdikking van de bestaande voorraad en geen sloop-nieuwbouw: het pand blijft staan en vult verder, dus een sloopwacht is er niet op zijn plaats. De overige toetsen, waaronder de restricties en de milieuzonering in de basisjaarzeef, blijven daar gewoon gelden. Zie ObjectVision/RSopen#668 en de pagina Dichtheid voor het volledige mechanisme.
Daarnaast geldt een energielabelondergrens (GeenSloopvanafELabel): woningen met een hoger energielabel dan de drempel mogen niet worden gesloopt.
Overzicht: van basisjaarzeef naar allocatie
De volledige keten van beschikbaarheidsbepaling is als volgt:
Inputdata (restricties, stimuli, plancapaciteit, BAG, BBG/BGT)
│ │
│ └─→ Restricties en stimuli opgebouwd via apart project (zie Restrictie-generatie)
│
├─→ Basisjaarzeef (per sector × subsector, op AdminDomain 25m)
│ Bepaalt: evident benut, IsRestrictief in basisjaar
│
└─→ Zichtjaarzeef (per sector × subsector × zichtjaar, op CompactedAdminDomain 25m sinds #770)
Combineert:
├── Basisjaarzeef resultaat
├── Restricties ook binnen plancapaciteit
├── MinimalLandAvailability
├── MinimumDichtheidToename
├── Volle IBIS-terreinen (alleen werken)
├── Milieuzonering (bestaande terreinen en nieuw vervuilend werk)
└── Sloopbescherming (pandleeftijd, energielabel)
│
Resultaat: IsBeschikbaar (ja/nee per cel)
│
└─→ Allocatie (alleen beschikbare cellen)