How a law declares what it needs from other laws, and how the engine resolves those references automatically.
Dutch laws reference each other constantly. The Healthcare Allowance Act (Zorgtoeslagwet) needs your income, which is defined by the Awir. It needs your insurance status, which comes from the Zorgverzekeringswet. It needs to know whether you have an allowance partner, which the Awir determines.
Rather than duplicating these definitions, each law declares what it needs from other laws. The engine follows these references automatically.
An article declares its inputs. When an input has a source block pointing to another law, the engine loads that law, executes it with the specified parameters, and feeds the result back.
The engine loads algemene_wet_inkomensafhankelijke_regelingen, executes it for the given BSN, gets the toetsingsinkomen output, and uses that value in the healthcare allowance calculation.
References can chain. The Zorgtoeslagwet references the Awir, which might reference the Wet inkomstenbelasting, which references the BRP. The engine resolves the full chain, loading and executing each law as needed.
Results are cached: if two laws both need the same value from the BRP, it is computed once.
The Zorgtoeslagwet article 2 declares these cross-law inputs:
Each source block says: load this other law, pass it these parameters, and give me the named output.
Articles within the same law can also reference each other. When source has an output but no regulation, the engine looks within the current law:
The engine detects circular references (law A needs law B which needs law A) and raises an error. A MAX_CROSS_LAW_DEPTH limit of 20 prevents runaway chains.
An exploration by Bureau Architectuur of the Dutch Ministry of the Interior into the possibilities of transparent, executable legislation.
Bureau Architectuur
Ministry of the Interior and Kingdom Relations