Books / Law as Code in Practice: German Housing Benefit (Wohngeld) / Chapter 8

Part III · Chapter 8

Missing Facts, Conflicting Records and the Model’s Boundary

6 min read

Full-page risograph illustration: a corridor of closed office doors, one door ajar with golden light falling across the floor and a red line leading to it.
Contents of Law as Code in Practice: German Housing Benefit (Wohngeld)

By the end of this chapter you will be able to tell four answers apart that a calculator easily confuses: “not enough facts”, “the records disagree”, “outside the model” and “past the model’s values”.

Lawyer: which provision makes the missing fact a premise.
Analyst: which fact to request from the household.
Developer: which status or issue the answer carries in each case.

1. The question

Files are rarely complete on the first day. The Vogts’ application arrives without the address of the flat. A week later a second rental record appears with a different rent. And a neighbour who owns her flat asks the same office about Wohngeld.

Predict before you read on: for the Vogts’ file without the address, should a model return €0, an error, or something else?

2. Not enough facts: not established, not zero

The scenarios of the suite of missing and conflicting facts take the Vogts’ case and remove one fact at a time:

Fact removed What the model still establishes What it does not
the place of residence monthly income €1,710.00 the rent level, so no ceiling and no amount — the answer to “€0?” is not established
the agreed rent the rent level, Mietenstufe III the rent taken into account, so no amount
whether Markus receives a benefit under § 7 — whether the household is established, so no count of members and no amount
the work expenses behind Katrin’s wages that her income details are incomplete the assessed income, so no amount
how a co-resident relates to the family — the household, so no amount

The answer to the prediction is the first line. Without the place, the model cannot know the rent level, so it cannot know the ceiling, so it cannot compute M — and it says exactly that: the amount is not established. It does not return €0, which would state that the family is owed nothing, and it does not fail: it computes everything that can be computed, the income included.

The third line deserves a second look. A missing fact about another benefit is not the fact “receives no other benefit”. § 7 makes the absence of an excluding benefit a premise; a model that assumed it would pay Wohngeld to people the Act excludes.

Not every missing fact stops the calculation, and the difference is instructive. Remove the fact that the flat is the centre of Markus’s life, and the model does not stop: § 5 Abs. 1 makes that fact the condition of membership, so without it Markus is not counted as a member — although nobody has found that he lives elsewhere. The model computes a household of three — Katrin as a single parent with the allowance of § 17 Nr. 3 — and gives €351 instead of €485 (Chapter 2). The model does not flag the missing fact. €351 is the result of an incomplete file, not the Vogts’ answer if Markus does live there, and it must not be given to the family as their answer until the household’s composition is established. Where a fact defines who is in the household, the caseworker must establish it before reading the amount. The proof shows the count of members and the rule that produced it, so the difference is visible at the first line.

3. Records that disagree

Two different situations, and the model keeps them apart.

Two values where the model admits one. The rent agreed for one tenancy has one amount; the model declares it so. If the case holds two different agreed rents for the same tenancy — €580 and €620, say — the answer carries the issue KEY_CONFLICT. The model does not pick one; it reports that the file contradicts itself on a value that must be unique.

A fact asserted and denied. If one record says the flat is the centre of Markus’s life and another denies it, the answer to that question is BOTH — asserted and denied at once. The contradiction is kept, with both sources, for the caseworker to resolve. It is not silently settled by whichever record was read last.

4. Outside the model

The neighbour owns her flat. Owner-occupiers receive a Lastenzuschuss, governed by § 10 WoGG and Part 3 of the WoGV. This model covers tenants only. For her application it returns:

Question Answer
Is the case outside the model, because it is a Lastenzuschuss? established
Is the monthly Wohngeld €320 (the ministry’s figure for a similar example)? not established

The flag ausserhalb_des_modells says why there is no number. “This model does not cover owner-occupiers” is a statement about the model. “The law gives you nothing” would be a statement about the law, and a false one. The model keeps the two apart. The same flag marks the other parts of the Act the model leaves out — among them some co-residents whose share of the rent § 11 Abs. 2 sets aside, and a residence title under § 3 Abs. 5 Satz 3.

5. Past the model’s values

Chapter 1 met the fourth answer. Ask the Vogts’ question for 1 January 2027:

Question Answer (recorded 12 October 2026)
Monthly Wohngeld on 1 January 2027 no amount, with the issue MISSING_PARAMETER_VALUE

The case is complete and inside the model; what is missing is annex values for that date in the model, and the issue names them. Whether values are in force on that date is a question about the law; the issue says only that this model holds none.

6. Four answers side by side

Situation Status or issue What the office should do
a premise is missing not established ask the household for the missing fact
records contradict KEY_CONFLICT or BOTH resolve the records
the case is outside the model the flag ausserhalb_des_modells, established decide the case by other means
the date is past the last values the model holds MISSING_PARAMETER_VALUE wait for, or model, the new values

Each of these stops the office from reading a number as the answer. Each tells the office something different to do.

7. Where Catala stands on this

Catala 1.3.0 has optional values — absent or present — built in (Catala book, ch. 5.2); the caller decides what to pass for an unknown fact. When two applicable definitions are not exceptions to each other, evaluation stops with a conflict error (ch. 2.2) — a sound guard for the program’s own rules. Arxo adds statuses for the facts of a case: a missing premise yields not established, contradictory records yield BOTH kept for review, and a case outside the model’s scope yields a flag that names the reason.

8. Run it

law test <canon> --file tests/tatsachen.lawtest
law test <canon> --file tests/ausschluss-und-urteil.lawtest
law test <canon> --file tests/redaktionen.lawtest

The first suite holds the missing and conflicting facts (7 of 7 passed on 12 October 2026 with law 0.1.12); the second the owner-occupier flag; the third the dates past the values the model holds.

Exercise

  1. The Vogts’ file lacks the agreed rent. Which of these does the model still establish: the income, the rent level, the rent taken into account, the amount?
  2. Why is BOTH better for the office than taking the most recent record?
  3. A colleague reads “outside the model” on the neighbour’s file and writes to her: “You are not entitled to Wohngeld.” What is wrong with that letter?

Contents · PDF · EPUB · Free under CC BY 4.0

Law as Code in Practice: German Housing Benefit (Wohngeld)

Contents

You’re reading · Part III

Where the Text Is Hard

Reading settings

Text size
Appearance

Preferences and your reading place are saved only in this browser.