Ga naar hoofdinhoud

Tijdstippen en geldigheid

Registratie met kwaliteit vereist twee boekhoudingen: een gevolgenboekhouding en een leveringsboekhouding. Elk heeft zijn eigen tijdstippen, en die hangen op een specifieke manier samen.

Domein-geldigheid

Het domein bepaalt wat iets geldig of ongeldig maakt, wanneer dat ingaat en wanneer het beëindigd wordt. Het tijdstip vanaf wanneer iets geldig is heet het geldigheidstijdstip. Als ook een einddatum bekend is, vormen begin- en eindtijdstip samen een geldigheidstijdvak.

Zowel de gevolgenboekhouding als de leveringsboekhouding kunnen domein-tijdstippen bevatten, maar ze gebruiken ze op een verschillende manier.

Gevolgenboekhouding: het gevolgtijdstip

In de gevolgenboekhouding staat het gevolgtijdstip centraal: het tijdstip waarop een gevolg geproduceerd wordt. Dit tijdstip legt vast wanneer een domeingebeurtenis zijn uitwerking heeft gekregen in de registratie.

In de gevolgenboekhouding wordt vastgelegd vanaf wanneer iets geldig is of vanaf wanneer iets beëindigd is. Daarvoor worden doorgaans enkelvoudige tijdstippen gebruikt, geen perioden.

Leveringsboekhouding: het projectietijdstip

In de leveringsboekhouding wordt het projectietijdstip gebruikt: het tijdstip waarop informatie in de projectie is ontstaan. Tijdvakken en perioden zijn bij de levering wel degelijk mogelijk, maar hoe relevant ze zijn hangt sterk af van de gestelde vraag.

De meest voorkomende query: wat is nu geldig?

Het overgrote deel van de queries aan de leveringskant — naar schatting zo'n 99% — gaat over de actuele stand: wat is er nu geldig? Je wilt zien wat op dit moment van kracht is.

Daarbij is het informatief om te weten vanaf wanneer deze verzameling gegevens als geheel geldig is. Dat is geen expliciete geldigheid per veld, attribuut of object, maar het tijdstip vanaf wanneer deze collectie gegevens als geheel van kracht is.

De andere query: tijdlijnen

Een kleine minderheid van de queries vraagt naar de geschiedenis: van wanneer tot wanneer was iets geldig? Voor die vraag wil je tijdlijnen zien. Dat is een wezenlijk andere query dan "wat is het nu?" — en die vraag moet je ook expliciet stellen.

De tijdvakken in zo'n tijdlijn kunnen verwijzen naar de toestanden die bij de bijbehorende tijdstippen horen.

Actueel en opgevolgd

De projectie kan meerdere toestanden bevatten die betrekking hebben op hetzelfde geldigheidstijdvak. Dat gebeurt wanneer een later gevolg een eerder gevolg voor dezelfde periode vervangt — bijvoorbeeld bij een correctie.

De meest recente toestand voor elk geldigheidstijdvak is actueel. "Meest recent" wordt bepaald op basis van het projectietijdstip: de projectierij met het hoogste projectietijdstip geldt.

Een collectie gegevens, bepaald door het domein, kan meerdere actuele toestanden hebben — één per geldigheidstijdvak. Elke actuele toestand vertegenwoordigt de geldende stand voor zijn eigen periode.

Een toestand die niet meer actueel is voor zijn geldigheidstijdvak heet opgevolgd. Het is niet verwijderd uit de projectie: de geschiedenis blijft volledig bewaard. Een opgevolgde toestand is nog steeds opvraagbaar, bijvoorbeeld voor auditing of historisch onderzoek.

Een opgevolgde toestand kan ontstaan door:

  • Een domeinwijziging — een nieuw gevolg vervangt een eerder gevolg voor dezelfde periode, hetzelfde geldigheidstijdvak. Dit speelt met name bij herstel. Het gevolgtijdstip van de nieuwe versie verschilt dan van het oorspronkelijke toestand.
  • Een replay — de gevolgen waren correct, maar de projectiecode bevatte een bug. Na een bugfix worden de gevolgen opnieuw verwerkt. De replay produceert een nieuwe toestand met hetzelfde gevolgtijdstip als de 'bugged' toestand, maar een later projectietijdstip.

Dit onderscheid is zichtbaar in het bitemporaal diagram. Op de gevolgtijdstip-as vallen de 'bugged' toestand en de gecorrigeerd toestand samen in hetzelfde tijdvak: ze verwijzen naar hetzelfde gevolg. Op de projectietijdstip-as zijn ze wél van elkaar gescheiden. Een replay is dus alleen zichtbaar op de projectietijdstip-as — en dat is semantisch correct.

Zie het voorbeeld Projectiefout hersteld via replay voor een concrete uitwerking.

In de viewer

In de tijdlijn dragen alle actuele toestanden een groen badge Actueel. Toestanden die zijn opgevolgd dragen een grijs badge Opgevolgd.