/
Person

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.

Related content

Patients
Patients
More like this
Obs
More like this
Best Practices for Implementations
Best Practices for Implementations
More like this
Data Model
Data Model
More like this
Technical Overview
Technical Overview
More like this
Person Attribute vs. Observation
Person Attribute vs. Observation
More like this