Chapter 41: Person
A Person cannot have more than one (node, id) pair. This pair is allocated when the
Person is first registered in the system and cannot subsequently be changed. The
node identifies a compute and database node in the distributed system used to manage
the core system data.
The model in this chapter encompasses the information requirements that appear in Article X: Identity of the VoTa constitution.
value BirthEvent
{
TimeStamp time;
Address address;
}
value DeathStatusEvent
{
TimeStamp effectiveTime;
TimeStamp recordedTime;
Boolean isDeceased;
}
value ChangeOfAddress
{
TimeStamp time;
Address address;
}
value ChangeOfName
{
TimeStamp time;
String firstName;
String[] middleNames;
String lastName;
}
value CitizenshipEvent
{
TimeStamp time;
Boolean isCitizen;
}
value ResidencyEvent
{
TimeStamp time;
Boolean isResident;
}
enum PersonStatus
{
active,
suspended,
revoked
}
value PersonStatusEvent
{
TimeStamp time;
PersonStatus status;
}
entity Person
{
NodeId node;
Uint32 id;
Image portrait;
Fingerprints fingerPrints;
RetinaScan retinaScan;
BirthEvent birth;
DeathStatusEvent[] deathEvents;
ChangeOfAddress[] addressEvents;
ChangeOfName[] nameEvents;
CitizenshipEvent[] citizenEvents;
ResidencyEvent[] residencyEvents;
PersonStatusEvent[] statusEvents;
key {node,id};
}
Each event history is ordered by time and has at most one event at any given time. Its latest event
determines the current value. The first citizenship, residency and Person-status events establish
the corresponding status when the Person is registered. A later death-status event for which
isDeceased is false corrects an erroneous record of death.
A resident must be a living citizen. A Person recorded as deceased, suspended or revoked cannot authenticate. Address history is kept separate from residency status because an address does not by itself establish legal residency.
Login
enum CredentialStatus
{
active,
suspended,
revoked
}
value PublicKey
{
String algorithm;
Byte[] encoded;
}
entity LoginCredential
{
Person person;
Uint32 id;
PublicKey publicKey;
TimeStamp created;
TimeStamp expires?;
TimeStamp revoked?;
CredentialStatus status;
key {person, id};
}
Authentication requires an active, unexpired credential and successful biometric verification against the biometric information recorded for the Person.