A Person object in OpenMRS represents either a Patient or a User. A Person can have multiple PersonNames and multiple PersonAddresses. There is some general metadata defined on a Person object (birthdate, deathdate, gender, etc.), but most attributes of a Person are custom to a certain install location. This is where PersonAttributes come in; they are additional "columns" on a Person that are defined by the implementation. Two or more Person objects can be linked by a Relationship.
A Person object is the basis for all humans in the OpenMRS system.
Properties on a Person:
- personId: the database's integer used to identify the object
- gender: the Person's gender
- birthdate: the Person's birth date
- birthDateEstimated: only needed if the birth date is uncertain. It is not required
- dead: a Boolean denoting whether or not a Person has died. It is not required
- deathDate: the date on which the Person died. It is not required
- causeOfDeath: the cause of the Person's death. It is not required
- causeOfDeathNonCoded: a String representation of the cause of death. Used when the cause of death does not exist as a Concept
- isPatient: a Boolean denoting whether or not a Person is also a Patient
- 1 to n PersonNames
- 0 to n PersonAddresses
- 0 to n PersonAttributes
- 0 to n Relationships
Inherited from BaseOpenMRSData:
The Person class source code can be seen here.
The PersonService class source code can be seen here.
A module demonstrating how to use this class can be seen here.
A PersonName object represents a person's name. A Person can have multiple PersonName objects. A PersonName's primary information is contained in the givenName, middleName, and familyName fields.
Properties on a PersonName:
- personNameId: same as personId but tied to the PersonName
- person: the Person the PersonName is attached to
- preferred: a Boolean denoting whether or not the current PersonName is the person's preferred name
- givenName: the person's given name
- middleName: the person's middle name
- familyName: the person's family name
- familyNamePrefix: the person's family name's prefix
- familyName2: the person's second family name
- degree: the person's medical degree (Ph.D., etc.)
The PersonName class source code can be seen here.
A PersonAddress object represents a person's address. A PersonAddress's primary information is contained in the address1, address2, cityVillage, countryDistrict, stateProvince, country, and postalCode fields.
PersonAddress implements the Address interface.
Properties on a PersonAddress:
- personAddressId: same as personId but tied to the PersonAddress
- person: the Person the PersonAddress is attached to
- preferred: a Boolean denoting whether or not the current PersonAddress is the person's preferred address
- address1 to address15: address lines 1 through 15
- cityVillage: the city or village the address is in
- countryDistrict: the country or district the address is in
- stateProvince: the state or province the address is in
- country: the country the address is in
- postalCode: the postal code of the address
- latitude: the latitude of the address
- longitude: the longitude of the address
- startDate: the date describing when the Person began living at that address
- endDate: the date describing when the Person began living at that address
The PersonAddress class source code can be seen here.
A PersonAttribute object represents arbitrary information about a Person. A PersonAttribute is essentially a key-value pair tied to a Person object. The value can have anything in it, including a foreign key reference to another table.
Properties on a PersonAttribute:
- personAttributeId: same as personId but tied to the PersonAttribute
- person: the Person the PersonAttribute is attached to
- attributeType: the PersonAttributeType of the PersonAttribute
- value: the value of the PersonAttribute
The PersonAttribute class source code can be seen here.
Person Attribute Type
A PersonAttributeType exists to group PersonAttribute objects together.
Properties on a PersonAttributeType:
- personAttributeTypeId: same as personId but tied to the PersonAttributeType
- format: the Java class the PersonAttributeType uses
- java.lang.String, org.openmrs.Concept, etc.
- foreignKey: the foreign key in the database that this PersonAttributeType references
- sortWeight: the order this PersonAttributeType will appear in when searched
- searchable: a Boolean denoting whether or not this PersonAttributeType can be searched for
- editPrivilege: the privileges required to make changes to this type
The PersonAttributeType class source code can be seen here.
See also Managing Person Attribute Types
A relationship pairs two Person objects together.
Properties on a Relationship:
- relationshipId: same as personId but tied to the Relationship
- personA: the first person in the relationship
- relationshipType: a RelationshipType describing how personA and personB are related
- personB: the second person in the relationship
- startDate: the date that the relationship began
- endDate: the date that the relationship ended
The Relationship class source code can be seen here.
A RelationshipType defines a type of relationship between two Person objects.
Properties on a RelationshipType:
- relationshipTypeId: same as personId but tied to the Relationship
- aIsToB: the relationship of personA relative to personB
- If personB is a Parent, aIsToB would be "Child"
- bIsToA: the relationship of personB relative to personA
- If personA is a Parent, bIsToA would be "Child"
- weight: the order this RelationshipType will appear in when searched
- preferred: a Boolean denoting if this RelationshipType should be a default one when updating a Person's RelationshipTypes
The RelationshipType class source code can be seen here.
This is a class diagram for the Person class and the classes it uses in its properties. This provides an at-a-glance summary of the classes, their fields, and their methods.
The XML file can be edited in case of future changes.