One row per property, one column per state. A cell is the answer to the only question that matters when a letter arrives: on the day that statute went live, what was this property doing? Click any cell to set it.
Every statute in this area triggers on how much of a property is covered material, not on whether any of it is. A link hub that is a tenth explicit is a different legal object from a tube site that is nine tenths, and the program will not treat them alike.
What an operator needs to show is that a check ran — how many, by what method, from when. Not who was checked. An operator who keeps identity data to prove compliance has built the breach that ends them, and in several of these states has broken the statute they were trying to satisfy.
A letter arrives with a date on it. From that moment the only thing that matters is what you can show about a day in the past, and how many days you have left to show it.
A gap day is a day on which a statute was in force and the property it covered was doing nothing about it. Nobody is ever asked "are you compliant today." They are asked about a date, and this is the list of dates that answer badly.