Person



Contents

Overview

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.

Person

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:

  • creator

PersonService
// Gets Person objects with the given criteria. public List<Person> getPeople(String searchPhrase, Boolean dead); // Saves the given Person object to the database. Saves will cascade down onto the Person's fields (PersonName, PersonAddress, etc.) public Person savePerson(Person person); // Marks the given Person as invalid. All associated data will be left as-is. public Person voidPerson(Person person, String reason); // Gets all PersonAttributeTypes in the system. public List<PersonAttributeType> getAllPersonAttributeTypes(); // Gets all Relationships in the system. public List<Relationship> getAllRelationships(); // Gets all RelationshipTypes in the system. public List<RelationshipType> getAllRelationshipTypes(); // Gets all PersonAttributeTypes in the system. public List<PersonAttributeType> getAllPersonAttributeTypes();

Example:

Person person = Context.getPersonService().getPersonByUuid("1234-56789-123"); person.setGender("M"); person.addName(new PersonName("Jim", "Bob", "Smith")); Context.getPersonService().savePerson(person);

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.

Person Name

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.

Person Address

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.

Person Attribute

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

Relationship

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.

Relationship Type

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.

Visualization

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.