HS.SDA3.Patient

serial class HS.SDA3.Patient extends HS.SDA3.SuperClass

Unlike other Streamlet types, the Patient Streamlet class implements its
own Aggregate method, as many of the properties of Patient are aggregated
at the Access Gateway in non-standard ways. If the annotation on a property
below does not include a description of how it is aggregated, then the
aggregation logic is:
-If [the existing property is null] or [the inbound record is the best
record and the inbound property is not null], set the existing property to
the inbound.
-Otherwise the inbound value is not aggregated.
In this context the "best record" refers to the record of the patient's
from the most trusted facility, which is the one with the lowest Tier in
the Facility Registry.

IMPORTANT:
Because the properties of Patient are aggregated manually, if a property is
added to this class, the Aggregate method of the Patient streamlet class
must be updated to aggregate the new property.

Property Inventory

Parameters

parameter CANOVERRIDEPROPLIST = PatientNumbers,InactiveMRNs,SupportContacts,OtherLanguages,Race,Races;
Inherited description: A comma separated list of properties where the calling streamlet can override the behavior of that property in the generated UpdateSDA method

Properties

property ActionCode as %String;
Supported values:
D = Delete, along with all associated streamlets
R = Replace (First delete existing Patient and all associated streamlets,
then insert given Patient)
Any other value = Add or Update
For both "D" and "R", the existing Patient is selected via the inbound
Container SendingFacility and the Organization Code and Number of the first
inbound PatientNumber with NumberType="MRN".

VIEWERLIB: Not stored
Property methods: ActionCodeDisplayToLogical(), ActionCodeGet(), ActionCodeIsValid(), ActionCodeLogicalToDisplay(), ActionCodeLogicalToOdbc(), ActionCodeNormalize(), ActionCodeSet()
property ActionScope as %String;
Not used.
Property methods: ActionScopeDisplayToLogical(), ActionScopeGet(), ActionScopeIsValid(), ActionScopeLogicalToDisplay(), ActionScopeLogicalToOdbc(), ActionScopeNormalize(), ActionScopeSet()
property Addresses as list of HS.SDA3.Address;
HL7ToSDA3:
Every non-null instance of PID-11 will be parsed.

Aggregation cache:
The inbound list of Addresses is compared to the existing, matching on
Street, City.Code, State.Code, and Zip.Code. If a match is found, the
FromTime, ToTime, Country, and County of the inbound Address will update the
properties of the existing. Otherwise, the inbound Address is inserted into
the existing list.

Viewer cache:
The first Address in the list is loaded into the properties of PAPerson.
Every Address in the list, including the first, is loaded into the Viewer
Cache as a PATempAddress.

HL7: PID-11 : PatientAddress

.Street
HL7ToSDA3:
Subfield 2, if not null, is concatenated to subfield 1.1 as: "[1.1]; [2]".
Viewer cache:
PAPERStName can only be set during the initial load to the Viewer Cache.
HL7: PID-11.1.1 : PatientAddress.StreetAddress.StreetorMailingAddress
HL7: PID-11.2 : PatientAddress.OtherDesignation
VIEWERLIB: User.HS.PAPerson(PAPERStName)
VIEWERLIB: User.HS.PATempAddress(ADDRStreet)
.City
HL7ToSDA3:
PID-11.3 is parsed to the City Code. HL7ToSDA3 does not set the
Description.
Viewer cache:
PAPERCityCodeDR can only be set during the initial load to the Viewer
Cache.
HL7: PID-11.3 : PatientAddress.City
VIEWERLIB: User.HS.PAPerson(PAPERCityCodeDR)
VIEWERLIB: User.HS.PATempAddress(ADDRCityDR)
.State
HL7ToSDA3:
PID-11.4 is parsed to the State Code. HL7ToSDA3 does not set the
Description.
Viewer cache:
PAPERCTProvinceDR can only be set during the initial load to the Viewer
Cache.
HL7: PID-11.4 : PatientAddress.StateorProvince
VIEWERLIB: User.HS.PAPerson(PAPERCTProvinceDR)
VIEWERLIB: User.HS.PATempAddress(ADDRProvinceDR)
.Zip
HL7ToSDA3:
PID-11.5 is parsed to the Zip Code. HL7ToSDA3 does not set the Description.
Viewer cache:
PAPERZipDR can only be set during the initial load to the Viewer Cache.
HL7: PID-11.5 : PatientAddress.ZiporPostalCode
VIEWERLIB: User.HS.PAPerson(PAPERZipDR)
VIEWERLIB: User.HS.PATempAddress(ADDRZipDR)
.Country
HL7ToSDA3:
PID-11.6 is parsed to the Country Code. HL7ToSDA3 does not set the
Description.
Viewer cache:
PAPERCountryDR can only be set if it is null.
HL7: PID-11.6 : PatientAddress.Country
VIEWERLIB: User.HS.PAPerson(PAPERCountryBirthDR)
VIEWERLIB: User.HS.PATempAddress(ADDRCountryDR)
.County
HL7ToSDA3:
PID-11.9 is parsed to the County Code. HL7ToSDA3 does not set the
Description.
Viewer cache:
Not Stored.
.FromTime
Viewer cache:
Only the date part is stored in the Viewer Cache. (PAPEREffDateCurrAddress
and ADDRDateFrom are both date-only.)
If, during the initial load, the first Address in the list has no FromTime,
PAPEREffDateCurrAddress is set to the date part of Patient.EnteredOn.
HL7: PID-11.13.1 : PatientAddress.EffectiveDate.Time
VIEWERLIB: User.HS.PAPerson(PAPEREffDateCurrAddress)
VIEWERLIB: User.HS.PATempAddress(ADDRDateFrom)
.ToTime
Viewer cache:
Not stored for the first (current) Address.
HL7: PID-11.14.1 : PatientAddress.ExpirationDate.Time
VIEWERLIB: User.HS.PATempAddress(ADDRDateTo)
Property methods: AddressesBuildValueArray(), AddressesCollectionToDisplay(), AddressesCollectionToOdbc(), AddressesDisplayToCollection(), AddressesGet(), AddressesGetObject(), AddressesGetObjectId(), AddressesGetSwizzled(), AddressesIsValid(), AddressesOdbcToCollection(), AddressesSet(), AddressesSetObject(), AddressesSetObjectId()
property Aliases as list of HS.SDA3.Name;
Aliases (other names)

HL7ToSDA3:
In addition to every non-null instance of PID-9, HL7ToSDA3 will also parse
every instance of PID-5 with subfield 7 (Name Type Code) = "A" (Alias
Name) as an Alias.

Aggregation cache:
When a patient's records are first requested at the Access Gateway, the
aggregated record is created using the demographics from the Patient
Registry, including Name. HealthShare then attempts to merge into this the
Names (including Alias Names) of any record received at the AG. If the
inbound and existing Names match on FamilyName, GivenName, and MiddleName,
then they are considered a match, and the inbound Name will be merged into
the existing one. For PreferredName, FamilyNamePrefix, NamePrefix,
NameSuffix, and ProfessionalSuffix, if the existing value is null, it is
set to the inbound value. If the inbound Name did not match the existing
Name, it is then compared to each of the existing Aliases, matching on
FamilyName, MiddleName, and GivenName. If no match is found, the Name is
inserted into the list of Aliases. Then, if the Clinical Viewer is
installed, the Name will also have its DOB property set from the BirthTime
of the inbound SDA Patient, and its MRN property set from the Number of the
first PatientNumber of the inbound Patient with NumberType="MRN".

Viewer cache:
If FamilyName, GivenName, and MiddleName are all null, an alert will be
logged in the Ensemble Event Log and the Alias will not be saved.

HL7: PID-5 : PatientName
HL7: PID-9 : PatientAlias
VIEWERLIB: User.HS.PAPerson(ChildPAPersonSurnameAlias)

.FamilyName
HL7: PID-5.1.1 : PatientName.FamilyName.Surname
HL7: PID-9.1.1 : PatientAlias.FamilyName.Surname
VIEWERLIB: User.HS.PAPersonSurnameAlias(SURName)
.FamilyNamePrefix
HL7: PID-5.1.2 : PatientName.FamilyName.OwnSurnamePrefix
HL7: PID-9.1.2 : PatientAlias.FamilyName.OwnSurnamePrefix
VIEWERLIB: Not stored
.GivenName
HL7: PID-5.2 : PatientName.GivenName
HL7: PID-9.2 : PatientAlias.GivenName
VIEWERLIB: User.HS.PAPersonSurnameAlias(SURName2)
.MiddleName
HL7: PID-5.3 : PatientName.SecondandFurtherGivenNames
HL7: PID-9.3 : PatientAlias.SecondandFurtherGivenNames
VIEWERLIB: User.HS.PAPersonSurnameAlias(SURName3)
.NameSuffix
HL7: PID-5.4 : PatientName.Suffix
HL7: PID-9.4 : PatientAlias.Suffix
VIEWERLIB: Not stored
.NamePrefix
HL7: PID-5.5 : PatientName.Prefix
HL7: PID-9.5 : PatientAlias.Prefix
VIEWERLIB: Not stored
.ProfessionalSuffix
HL7: PID-5.14 : PatientName.ProfessionalSuffix
HL7: PID-9.14 : PatientAlias.ProfessionalSuffix
VIEWERLIB: Not stored
.DOB
Set so that an Alias Name in the Clinical Viewer can be displayed with the
DOB of the patient record from which it originated.
Aggregation cache:
DOB is set at the time an inbound Alias is aggregated into the existing
list of Aliases. It is set to the BirthTime of the inbound SDA Patient.
Note that this is only done if the Clinical Viewer is installed.
Viewer cache:
Only the date part of DOB is stored. (SURDob is date-only.)
VIEWERLIB: User.HS.PAPersonSurnameAlias(SURDob)
.MRN
Set so that an Alias Name in the Clinical Viewer can be displayed with the
MRN of the patient record from which it originated.
Aggregation cache:
MRN is set at the time an inbound Name is aggregated into the existing list
of Alias Names. It is set to the Number of the first PatientNumber of the
inbound Patient SDA with NumberType="MRN". Note that this is only done if
the Clinical Viewer is installed.
VIEWERLIB: User.HS.PAPersonSurnameAlias(SURPatientFromID)
Property methods: AliasesBuildValueArray(), AliasesCollectionToDisplay(), AliasesCollectionToOdbc(), AliasesDisplayToCollection(), AliasesGet(), AliasesGetObject(), AliasesGetObjectId(), AliasesGetSwizzled(), AliasesIsValid(), AliasesOdbcToCollection(), AliasesSet(), AliasesSetObject(), AliasesSetObjectId()
property BirthGender as HS.SDA3.CodeTableDetail.Gender;
Birth Gender, as required for meaningful use. Consistent with FHIR, we make it an attribute of Patient. However, this means we lose the effectiveTime of the SocialHistoryObservation.
Property methods: BirthGenderGet(), BirthGenderGetObject(), BirthGenderGetObjectId(), BirthGenderGetSwizzled(), BirthGenderIsEmpty(), BirthGenderIsValid(), BirthGenderNewObject(), BirthGenderSet(), BirthGenderSetObject(), BirthGenderSetObjectId(), BirthGenderUnSwizzle()
property BirthOrder as HS.SDA3.Numeric (SCALE = 0);
If the patient was part of a multiple birth, this is an integer indicating
the patient's birth order, unless this is "0", which indicates that the
patient was not part of a multiple birth.

HL7ToSDA3:
If the first character, case-insensitive, of PID-24 is "N", then BirthOrder
will be parsed as "0", else BirthOrder will be parsed from PID-25.

HL7: PID-24 : MultipleBirthIndicator
HL7: PID-25 : BirthOrder
VIEWERLIB: Not stored
Property methods: BirthOrderDisplayToLogical(), BirthOrderGet(), BirthOrderIsValid(), BirthOrderLogicalToDisplay(), BirthOrderNormalize(), BirthOrderSet(), BirthOrderXSDToLogical()
property BirthPlace as HS.SDA3.Address;
Place of birth

VIEWERLIB: Not stored
Property methods: BirthPlaceGet(), BirthPlaceGetObject(), BirthPlaceGetObjectId(), BirthPlaceGetSwizzled(), BirthPlaceIsEmpty(), BirthPlaceIsValid(), BirthPlaceNewObject(), BirthPlaceSet(), BirthPlaceSetObject(), BirthPlaceSetObjectId(), BirthPlaceUnSwizzle()
property BirthTime as HS.SDA3.TimeStamp;
Date and time of birth

Viewer cache:
Only the date part of BirthTime is stored. (PAPERDob is date-only.)

HL7: PID-7.1 : DateTimeofBirth.Time
VIEWERLIB: User.HS.PAPerson(PAPERDob)
Property methods: BirthTimeDisplayToLogical(), BirthTimeGet(), BirthTimeIsValid(), BirthTimeLogicalToDisplay(), BirthTimeLogicalToTimeStamp(), BirthTimeLogicalToXSD(), BirthTimeNormalize(), BirthTimeOdbcToLogical(), BirthTimeSet(), BirthTimeXSDToLogical()
property BlankNameReason as %String;
If Name is null, this is the reason.

HL7ToSDA3:
If any instance of PID-5.7 is "S" or "U", BlankNameReason will be set to
the value of the last such instance.
From HL7 code table 2.5.1:200 (Name Type):
S - Coded Pseudo-Name to ensure anonymity
U - Unspecified

HL7: PID-5.7 : PatientName.NameTypeCode
VIEWERLIB: Not stored
Property methods: BlankNameReasonDisplayToLogical(), BlankNameReasonGet(), BlankNameReasonIsValid(), BlankNameReasonLogicalToDisplay(), BlankNameReasonLogicalToOdbc(), BlankNameReasonNormalize(), BlankNameReasonSet()
property Citizenship as HS.SDA3.CodeTableDetail.Citizenship;
Country of Citizenship (or Nationality)

HL7ToSDA3:
Though PID-26 is a repeating field, only the first non-null instance is
used, and only if subfield 1 or 2 is not null. If no value is parsed from
PID-26, HL7ToSDA3 will use PID-28, but only if subfield 1 or 2 is not null.

HL7: PID-26 : Citizenship
HL7: PID-28 : Nationality
SDATableName=Citizenship, ViewerClass=User.HS.CTNation
VIEWERLIB: User.HS.PAPerson(PAPERNationDR)

.Code
HL7: PID-26.1 : Citizenship.Identifier
HL7: PID-28.1 : Nationality.Identifier
VIEWERLIB: User.HS.CTNation(CTNATCode)
.Description
HL7: PID-26.2 : Citizenship.Text
HL7: PID-28.2 : Nationality.Text
VIEWERLIB: User.HS.CTNation(CTNATDesc)
.SDACodingStandard
HL7: PID-26.3 : Citizenship.NameofCodingSystem
HL7: PID-28.3 : Nationality.NameofCodingSystem
VIEWERLIB: Not stored
Property methods: CitizenshipGet(), CitizenshipGetObject(), CitizenshipGetObjectId(), CitizenshipGetSwizzled(), CitizenshipIsEmpty(), CitizenshipIsValid(), CitizenshipNewObject(), CitizenshipSet(), CitizenshipSetObject(), CitizenshipSetObjectId(), CitizenshipUnSwizzle()
property Comments as %String (MAXLEN = 999);
Comments on the Patient

HL7ToSDA3:
Currently the only message type supported by HealthShare with NTE segments
that will be parsed as Patient Comments is ORU_R01.

HL7: NTE-3 : Comment
VIEWERLIB: Not stored
Property methods: CommentsDisplayToLogical(), CommentsGet(), CommentsIsValid(), CommentsLogicalToDisplay(), CommentsLogicalToOdbc(), CommentsNormalize(), CommentsSet()
property CommunicationPreference as %String (VALUELIST = ",Email,Phone,Mail");
The patient's communication preference

VIEWERLIB: Not stored
Property methods: CommunicationPreferenceDisplayToLogical(), CommunicationPreferenceGet(), CommunicationPreferenceIsValid(), CommunicationPreferenceLogicalToDisplay(), CommunicationPreferenceLogicalToOdbc(), CommunicationPreferenceNormalize(), CommunicationPreferenceSet()
property ContactInfo as HS.SDA3.ContactInfo;
Contact information for the Patient

HL7ToSDA3:
For each instance of PID-13 and -14, the algorithm to parse a phone number
out of that field is:
-If subfields 5, 6, 7, and 8 are not all null, compose the number out of
them as "+[.5] ([.6]) [.7] x[.8]".
-Else if subfield 12 is not null, use that.
-Else if subfield 1 is not null, use that.
-Else continue to the next instance of this field.

Streamlet cache:
In the Streamlet Cache, an update to existing ContactInfo updates each
property individually, rather than simply overwriting the existing
ContactInfo object.

Aggregation cache:
Similar to the Streamlet Cache, in the Aggregation Cache each property of
ContactInfo is updated individually.

HL7: PID-13 : PhoneNumberHome
HL7: PID-14 : PhoneNumberBusiness

.HomePhoneNumber
HL7ToSDA3:
HomePhoneNumber is parsed from the first instance of PID-13 with subfield 2
in ["",PRN,ORN,VHN,ASN,EMR], and subfield 3 in ["",PH], and from which a
number can be parsed using the above algorithm.
HL7: PID-13 : PhoneNumberHome
VIEWERLIB: User.HS.PAPerson(PAPERTelH)
.WorkPhoneNumber
HL7ToSDA3:
WorkPhoneNumber is parsed from the first instance of PID-14 with subfield 2
in ["",WPN,ASN,EMR], and subfield 3 in ["",PH], and from a number can be
parsed using the above algorithm.
HL7: PID-14 : PhoneNumberBusiness
VIEWERLIB: User.HS.PAPerson(PAPERTelO)
.MobilePhoneNumber
HL7ToSDA3:
MobilePhoneNumber is parsed from the first instance of PID-13 with subfield
2="BPN" or subfield 3 in [CP,BP], and from which a number can be parsed
using the above algorithm. If no MobilePhoneNumber can be parsed from,
PID-13, HL7ToSDA3 attempts to parse one from PID-14 matching the same
conditions.
HL7: PID-13 : PhoneNumberHome
HL7: PID-14 : PhoneNumberBusiness
VIEWERLIB: User.HS.PAPerson(PAPERMobPhone)
.EmailAddress
HL7ToSDA3:
EmailAddress is parsed from the first non-null instance of PID-13.4, or, if
no EmailAddress can be parsed from that field, from the first non-null
instance of PID-14.4.
HL7: PID-13.4 : PhoneNumberHome.EmailAddress
HL7: PID-14.4 : PhoneNumberBusiness.EmailAddress
VIEWERLIB: User.HS.PAPerson(PAPEREmail)
Property methods: ContactInfoGet(), ContactInfoGetObject(), ContactInfoGetObjectId(), ContactInfoGetSwizzled(), ContactInfoIsEmpty(), ContactInfoIsValid(), ContactInfoNewObject(), ContactInfoSet(), ContactInfoSetObject(), ContactInfoSetObjectId(), ContactInfoUnSwizzle()
property CreatedBy as HS.SDA3.CodeTableDetail.User;
Streamlet cache:
In the OnValidate method of the Streamlet class, if the SDA contains no
CreatedBy, it will be defaulted to EnteredBy.

Aggregation cache:
In the Aggregation cache, CreatedBy can only be populated from the best
(most trusted) record.

VIEWERLIB: Not stored
Property methods: CreatedByGet(), CreatedByGetObject(), CreatedByGetObjectId(), CreatedByGetSwizzled(), CreatedByIsEmpty(), CreatedByIsValid(), CreatedByNewObject(), CreatedBySet(), CreatedBySetObject(), CreatedBySetObjectId(), CreatedByUnSwizzle()
property CreatedOn as HS.SDA3.TimeStamp;
Streamlet cache:
In the OnValidate method of the Streamlet class, if CreatedOn is null, it
is defaulted to EnteredOn, which may have been defaulted to the current
date and time.

Aggregation cache:
In the Aggregation cache, CreatedOn can only be populated from the best
(most trusted) record.

VIEWERLIB: Not stored
Property methods: CreatedOnDisplayToLogical(), CreatedOnGet(), CreatedOnIsValid(), CreatedOnLogicalToDisplay(), CreatedOnLogicalToTimeStamp(), CreatedOnLogicalToXSD(), CreatedOnNormalize(), CreatedOnOdbcToLogical(), CreatedOnSet(), CreatedOnXSDToLogical()
property DeathDeclaredBy as HS.SDA3.CodeTableDetail.CareProvider;
Care provider who declared patient dead

SDATableName=CareProvider, ViewerClass=User.HS.CTCareProv
VIEWERLIB: User.HS.PAPerson(PAPERDoctorDeclaredDR)
Property methods: DeathDeclaredByGet(), DeathDeclaredByGetObject(), DeathDeclaredByGetObjectId(), DeathDeclaredByGetSwizzled(), DeathDeclaredByIsEmpty(), DeathDeclaredByIsValid(), DeathDeclaredByNewObject(), DeathDeclaredBySet(), DeathDeclaredBySetObject(), DeathDeclaredBySetObjectId(), DeathDeclaredByUnSwizzle()
property DeathLocation as %String (MAXLEN = 255);
Where patient died

VIEWERLIB: User.HS.PAPerson(PAPERLocationOfDeath)
Property methods: DeathLocationDisplayToLogical(), DeathLocationGet(), DeathLocationIsValid(), DeathLocationLogicalToDisplay(), DeathLocationLogicalToOdbc(), DeathLocationNormalize(), DeathLocationSet()
property DeathTime as HS.SDA3.TimeStamp;
Time of death

HL7: PID-29.1 : PatientDeathDateandTime.Time
VIEWERLIB: User.HS.PAPerson(PAPERDeceasedDate) + User.HS.PAPerson(PAPERDeceasedTime)
Property methods: DeathTimeDisplayToLogical(), DeathTimeGet(), DeathTimeIsValid(), DeathTimeLogicalToDisplay(), DeathTimeLogicalToTimeStamp(), DeathTimeLogicalToXSD(), DeathTimeNormalize(), DeathTimeOdbcToLogical(), DeathTimeSet(), DeathTimeXSDToLogical()
property EncounterNumber as %String (MAXLEN = 220);
Not used.
Property methods: EncounterNumberDisplayToLogical(), EncounterNumberGet(), EncounterNumberIsValid(), EncounterNumberLogicalToDisplay(), EncounterNumberLogicalToOdbc(), EncounterNumberNormalize(), EncounterNumberSet()
property EnteredAt as HS.SDA3.CodeTableDetail.Organization;
HL7ToSDA3:
PID-34.1 will be parsed to the EnteredAt Code if not null, else MSH-4.1
will be. In either case, HL7ToSDA3 does not set the Description.

Aggregation cache:
The EnteredAt Code will always be set to the facility code of the best
(most trusted) facility that a request goes out to. If the Access Manager
has an InboundCodeSystemProfile specified, and that profile specifies an
SDACodingStandard for Organization, then that value will be used. If the
SDACodingStandard is filled in and there is a Description in the Code
Registry for that Code and SDACodingStandard, that Description will be
used.

HL7: PID-34 : LastUpdateFacility
HL7: MSH-4 : SendingFacility
SDATableName=Organization, ViewerClass=User.HS.CTHospital
VIEWERLIB: User.HS.PAPerson(PAPERLastUpdateHospitalDR)

.Code
HL7: PID-34.1 : LastUpdateFacility.NamespaceID
HL7: MSH-4.1 : SendingFacility.NamespaceID
VIEWERLIB: User.HS.CTHospital(HOSPCode)
.Description
VIEWERLIB: User.HS.CTHospital(HOSPDesc)
.SDACodingStandard
VIEWERLIB: Not stored
Property methods: EnteredAtGet(), EnteredAtGetObject(), EnteredAtGetObjectId(), EnteredAtGetSwizzled(), EnteredAtIsEmpty(), EnteredAtIsValid(), EnteredAtNewObject(), EnteredAtSet(), EnteredAtSetObject(), EnteredAtSetObjectId(), EnteredAtUnSwizzle()
property EnteredBy as HS.SDA3.CodeTableDetail.User;
HL7ToSDA3:
Though EVN-5 is a repeating field, only the first non-null instance will be
used.

Streamlet cache:
In the OnValidate method of the Streamlet class, if the SDA contains no
CreatedBy, it will be defaulted to EnteredBy.

Aggregation cache:
In the Aggregation cache, EnteredBy can only be populated from the best
(most trusted) record.

HL7: EVN-5 : OperatorID
SDATableName=User, ViewerClass=User.HS.SSUser
VIEWERLIB: User.HS.PAPerson(PAPERUserUpdate)

.Code
HL7: EVN-5.1 : OperatorID.IDNumber
VIEWERLIB: User.HS.SSUser(SSUSRInitials)
.Description
HL7ToSDA3:
Description is composed of the given and family names concatenated together
as: "[FamilyName], [GivenName]".
HL7: EVN-5.2.1 : OperatorID.FamilyName.Surname
HL7: EVN-5.3 : OperatorID.GivenName
VIEWERLIB: User.HS.SSUser(SSUSRName)
.SDACodingStandard
HL7: EVN-5.9 : OperatorID.AssigningAuthority
VIEWERLIB: Not stored
Property methods: EnteredByGet(), EnteredByGetObject(), EnteredByGetObjectId(), EnteredByGetSwizzled(), EnteredByIsEmpty(), EnteredByIsValid(), EnteredByNewObject(), EnteredBySet(), EnteredBySetObject(), EnteredBySetObjectId(), EnteredByUnSwizzle()
property EnteredOn as HS.SDA3.TimeStamp;
Streamlet cache:
In the OnValidate method of the Streamlet class, if EnteredOn is null, it
will be defaulted to the current date and time. Then, if CreatedOn is null,
it will be defaulted to EnteredOn.

Aggregation cache:
In the Aggregation cache, EnteredOn can only be populated from the best
(most trusted) record.

HL7: PID-33.1 : LastUpdateDateTime.Time
VIEWERLIB: User.HS.PAPerson(PAPERUpdateDate) + User.HS.PAPerson(PAPERUpdateTime)
Property methods: EnteredOnDisplayToLogical(), EnteredOnGet(), EnteredOnIsValid(), EnteredOnLogicalToDisplay(), EnteredOnLogicalToTimeStamp(), EnteredOnLogicalToXSD(), EnteredOnNormalize(), EnteredOnOdbcToLogical(), EnteredOnSet(), EnteredOnXSDToLogical()
property EthnicGroup as HS.SDA3.CodeTableDetail.EthnicGroup;
HL7ToSDA3:
Though PID-22 is a repeating field, only the first non-null instance will
be parsed, and only if subfield 1 or 2 is not null.

HL7: PID-22 : EthnicGroup
SDATableName=EthnicGroup, ViewerClass=None
VIEWERLIB: Not stored

.Code
HL7: PID-22.1 : EthnicGroup.Identifier
.Description
HL7: PID-22.2 : EthnicGroup.Text
.SDACodingStandard
HL7: PID-22.3 : EthnicGroup.NameofCodingSystem
.CodeSystemVersionId
HL7: PID-22.7 : EthnicGroup.CodingSystemVersionID
Property methods: EthnicGroupGet(), EthnicGroupGetObject(), EthnicGroupGetObjectId(), EthnicGroupGetSwizzled(), EthnicGroupIsEmpty(), EthnicGroupIsValid(), EthnicGroupNewObject(), EthnicGroupSet(), EthnicGroupSetObject(), EthnicGroupSetObjectId(), EthnicGroupUnSwizzle()
property Extension as HS.Local.SDA3.PatientExtension;
Property methods: ExtensionGet(), ExtensionGetObject(), ExtensionGetObjectId(), ExtensionGetSwizzled(), ExtensionIsEmpty(), ExtensionIsValid(), ExtensionNewObject(), ExtensionSet(), ExtensionSetObject(), ExtensionSetObjectId(), ExtensionUnSwizzle()
property ExternalId as %String (MAXLEN = 220);
Not used.
Property methods: ExternalIdDisplayToLogical(), ExternalIdGet(), ExternalIdIsValid(), ExternalIdLogicalToDisplay(), ExternalIdLogicalToOdbc(), ExternalIdNormalize(), ExternalIdSet()
property FamilyDoctor as HS.SDA3.CodeTableDetail.FamilyDoctor;
Patient's family doctor
Also known as GeneralPractitioner(GP), PrimaryCareProvider

HL7ToSDA3:
Though PD1-4 is a repeating field, HL7ToSDA3 will only parse the first
non-null instance.

HL7: PD1-4 : PatientPrimaryCareProvider
SDATableName=FamilyDoctor, ViewerClass=User.HS.PACRefDoctor
VIEWERLIB: User.HS.PAPerson(PAPERFamilyDoctorDR)

.Code
HL7: PD1-4.1 : PatientPrimaryCareProvider.IDNumber
VIEWERLIB: User.HS.PACRefDoctor(REFDCode)
.Description
HL7ToSDA3:
Description is composed of the given and family names concatenated together
as: "[FamilyName], [GivenName]".
HL7: PD1-4.2.1 : PatientPrimaryCareProvider.FamilyName.Surname
HL7: PD1-4.3 : PatientPrimaryCareProvider.GivenName
VIEWERLIB: User.HS.PACRefDoctor(REFDDesc)
.SDACodingStandard
HL7: PD1-4.9 : PatientPrimaryCareProvider.AssigningAuthority
VIEWERLIB: Not stored
.Name.FamilyName
HL7: PD1-4.2.1 : PatientPrimaryCareProvider.FamilyName.Surname
VIEWERLIB: User.HS.PACRefDoctor(REFDFamilyName)
.Name.GivenName
HL7: PD1-4.3 : PatientPrimaryCareProvider.GivenName
VIEWERLIB: User.HS.PACRefDoctor(REFDForename)
.Name.MiddleName
HL7: PD1-4.4 : PatientPrimaryCareProvider.MiddleName
VIEWERLIB: User.HS.PACRefDoctor(REFDMiddleName)
.Name.NamePrefix
HL7: PD1-4.6 : PatientPrimaryCareProvider.NamePrefix
VIEWERLIB: User.HS.PACRefDoctor(REFDTitle)
.Name.NameSuffix
HL7: PD1-4.7 : PatientPrimaryCareProvider.NameSuffix
VIEWERLIB: Not stored
Property methods: FamilyDoctorGet(), FamilyDoctorGetObject(), FamilyDoctorGetObjectId(), FamilyDoctorGetSwizzled(), FamilyDoctorIsEmpty(), FamilyDoctorIsValid(), FamilyDoctorNewObject(), FamilyDoctorSet(), FamilyDoctorSetObject(), FamilyDoctorSetObjectId(), FamilyDoctorUnSwizzle()
property FromTime as HS.SDA3.TimeStamp;
Not used.
Property methods: FromTimeDisplayToLogical(), FromTimeGet(), FromTimeIsValid(), FromTimeLogicalToDisplay(), FromTimeLogicalToTimeStamp(), FromTimeLogicalToXSD(), FromTimeNormalize(), FromTimeOdbcToLogical(), FromTimeSet(), FromTimeXSDToLogical()
property Gender as HS.SDA3.CodeTableDetail.Gender;
HL7ToSDA3:
Though PID-8 is not a coded element type of field, HL7ToSDA3 still only
parses the first piece with respect to the Component Separator. This is
parsed to the to the Gender Code. HL7ToSDA3 does not set the Description.

Viewer cache:
PAPERSexDR can only be set on the initial load to the Viewer Cache and
therefore must come from the patient's set of best demographics from the
Patient Registry. If these demographics contain no gender, the patient's
gender will appear in the Clinical Viewer as "NS" for "Not Specified".

HL7: PID-8 : AdministrativeSex
SDATableName=Gender, ViewerClass=User.HS.CTSex
VIEWERLIB: User.HS.PAPerson(PAPERSexDR)
Property methods: GenderGet(), GenderGetObject(), GenderGetObjectId(), GenderGetSwizzled(), GenderIsEmpty(), GenderIsValid(), GenderNewObject(), GenderSet(), GenderSetObject(), GenderSetObjectId(), GenderUnSwizzle()
property ImmunizationRegistryStatus as %String;
HL7: PD1-16 : ImmunizationRegistryStatus
VIEWERLIB: Not stored
Property methods: ImmunizationRegistryStatusDisplayToLogical(), ImmunizationRegistryStatusEffectiveDateDisplayToLogical(), ImmunizationRegistryStatusEffectiveDateGet(), ImmunizationRegistryStatusEffectiveDateIsValid(), ImmunizationRegistryStatusEffectiveDateLogicalToDisplay(), ImmunizationRegistryStatusEffectiveDateLogicalToTimeStamp(), ImmunizationRegistryStatusEffectiveDateLogicalToXSD(), ImmunizationRegistryStatusEffectiveDateNormalize(), ImmunizationRegistryStatusEffectiveDateOdbcToLogical(), ImmunizationRegistryStatusEffectiveDateSet(), ImmunizationRegistryStatusEffectiveDateXSDToLogical(), ImmunizationRegistryStatusGet(), ImmunizationRegistryStatusIsValid(), ImmunizationRegistryStatusLogicalToDisplay(), ImmunizationRegistryStatusLogicalToOdbc(), ImmunizationRegistryStatusNormalize(), ImmunizationRegistryStatusSet()
property ImmunizationRegistryStatusEffectiveDate as HS.SDA3.TimeStamp;
The effective date for ImmunizationRegistryStatus

HL7ToSDA3:
PD1-17 will only be parsed if PD1-16 is not null.

HL7: PD1-17 : ImmunizationRegistryStatusEffectiveDate
VIEWERLIB: Not stored
Property methods: ImmunizationRegistryStatusEffectiveDateDisplayToLogical(), ImmunizationRegistryStatusEffectiveDateGet(), ImmunizationRegistryStatusEffectiveDateIsValid(), ImmunizationRegistryStatusEffectiveDateLogicalToDisplay(), ImmunizationRegistryStatusEffectiveDateLogicalToTimeStamp(), ImmunizationRegistryStatusEffectiveDateLogicalToXSD(), ImmunizationRegistryStatusEffectiveDateNormalize(), ImmunizationRegistryStatusEffectiveDateOdbcToLogical(), ImmunizationRegistryStatusEffectiveDateSet(), ImmunizationRegistryStatusEffectiveDateXSDToLogical()
property InactiveMRNs as %String (MAXLEN = 1000);
A comma-delimited list of a patient's inactive (victim) MRNs.

Streamlet cache:
For a patient merge or change number, the InactiveMRNs value from the
victim record is copied to the survivor record, and the MRN of the victim
record is added to it. For a regular update, the inbound property will be
concatenated to the existing.

Aggregation cache:
In the Aggregation Cache, the inbound property is simply concatenated to
existing property.

VIEWERLIB: User.HS.PAPerson(PAPERRemark)
Property methods: InactiveMRNsDisplayToLogical(), InactiveMRNsGet(), InactiveMRNsIsValid(), InactiveMRNsLogicalToDisplay(), InactiveMRNsLogicalToOdbc(), InactiveMRNsNormalize(), InactiveMRNsSet()
property IsDead as HS.SDA3.Boolean;
A boolean value indicating whether the patient is dead
Death time, location, etc. may not be known.

HL7ToSDA3:
A value of "Y" in the HL7 will be parsed as 1, "N" will be parsed as 0, the
delete instruction (two double quotes) will be parsed as-is, and any other
value in the HL7 will not be parsed.

Viewer cache:
A value of 1 in the SDA will be stored as "Y" in the Viewer Cache. No other
value will be stored.

HL7: PID-30 : PatientDeathIndicator
VIEWERLIB: User.HS.PAPerson(PAPERDeceased)
Property methods: IsDeadDisplayToLogical(), IsDeadGet(), IsDeadIsValid(), IsDeadIsValidDT(), IsDeadLogicalToDisplay(), IsDeadLogicalToXSD(), IsDeadNormalize(), IsDeadSet(), IsDeadXSDToLogical()
property IsProtected as HS.SDA3.Boolean;
A boolean value indicating whether the patient is protected

HL7ToSDA3:
A value of "Y" in the HL7 will be parsed as 1, "N" will be parsed as 0, the
delete instruction (two double quotes) will be parsed as-is, and any other
value in the HL7 will not be parsed.

HL7: PD1-12 : ProtectionIndicator
VIEWERLIB: Not stored
Property methods: IsProtectedDisplayToLogical(), IsProtectedGet(), IsProtectedIsValid(), IsProtectedIsValidDT(), IsProtectedLogicalToDisplay(), IsProtectedLogicalToXSD(), IsProtectedNormalize(), IsProtectedSet(), IsProtectedXSDToLogical()
property MPIID as %String (MAXLEN = 220);
Master Patient Index ID
MPIID is the first property in this class so that it appears early in the
SDA XML and is easy to find during the AG load.

Aggregation cache:
Though this technically can be stored at the Edge, the value at the Edge
will not contribute to an aggregated record at the Access Gateway. When a
BatchFetchRequest is initiated at the Access Gateway (when a user selects
one or more results on the Patient Search Screen, for example), only the
first MPIID in the list of requests will be stored with the aggregated SDA.

VIEWERLIB: User.HS.PAPerson(PAPERForeignId)
Property methods: MPIIDDisplayToLogical(), MPIIDGet(), MPIIDIsValid(), MPIIDLogicalToDisplay(), MPIIDLogicalToOdbc(), MPIIDNormalize(), MPIIDSet()
property MaritalStatus as HS.SDA3.CodeTableDetail.MaritalStatus;
HL7ToSDA3:
PID-16 is only parsed if subfield 1 or 2 is not null.

HL7: PID-16 : MaritalStatus
SDATableName=MaritalStatus, ViewerClass=User.HS.CTMarital
VIEWERLIB: User.HS.PAPerson(PAPERMaritalDR)

.Code
HL7: PID-17.1 : MaritalStatus.Identifier
VIEWERLIB: User.HS.CTMarital(CTMARCode)
.Description
HL7: PID-17.2 : MaritalStatus.Text
VIEWERLIB: User.HS.CTMarital(CTMARDesc)
.SDACodingStandard
HL7: PID-17.3 : MaritalStatus.NameofCodingSystem
VIEWERLIB: Not stored
Property methods: MaritalStatusGet(), MaritalStatusGetObject(), MaritalStatusGetObjectId(), MaritalStatusGetSwizzled(), MaritalStatusIsEmpty(), MaritalStatusIsValid(), MaritalStatusNewObject(), MaritalStatusSet(), MaritalStatusSetObject(), MaritalStatusSetObjectId(), MaritalStatusUnSwizzle()
property MothersFullName as HS.SDA3.Name;
Patient's mother's full name

HL7ToSDA3:
Though PID-6 is a repeating field, only the first non-null instance will be
used.

HL7: PID-6 : MothersMaidenName

.FamilyName
HL7: PID-6.1.1 : MothersMaidenName.FamilyName.Surname
.FamilyNamePrefix
HL7: PID-6.1.2 : MothersMaidenName.FamilyName.OwnSurnamePrefix
.GivenName
HL7: PID-6.2 : MothersMaidenName.GivenName
.MiddleName
HL7: PID-6.3 : MothersMaidenName.SecondandFurtherGivenNames
.NameSuffix
HL7: PID-6.4 : MothersMaidenName.Suffix
.NamePrefix
HL7: PID-6.5 : MothersMaidenName.Prefix
.ProfessionalSuffix
HL7: PID-6.14 : MothersMaidenName.ProfessionalSuffix
.PreferredName
VIEWERLIB: Not stored
Property methods: MothersFullNameGet(), MothersFullNameGetObject(), MothersFullNameGetObjectId(), MothersFullNameGetSwizzled(), MothersFullNameIsEmpty(), MothersFullNameIsValid(), MothersFullNameNewObject(), MothersFullNameSet(), MothersFullNameSetObject(), MothersFullNameSetObjectId(), MothersFullNameUnSwizzle()
property MothersMaidenName as %String;
Patient's mother's maiden name

HL7ToSDA3:
Though PID-6 is a repeating field, only the first non-null instance will be
used.

HL7: PID-6.1.1 : MothersMaidenName.FamilyName.Surname
VIEWERLIB: User.HS.PAPerson(PAPERComplement)
Property methods: MothersMaidenNameDisplayToLogical(), MothersMaidenNameGet(), MothersMaidenNameIsValid(), MothersMaidenNameLogicalToDisplay(), MothersMaidenNameLogicalToOdbc(), MothersMaidenNameNormalize(), MothersMaidenNameSet()
property Name as HS.SDA3.Name;
Primary name for this person (e.g. legal name)

HL7ToSDA3:
PID-5 is a repeating field. Any instance with subfield 7 (Name Type Code)
= "A" is considered an Alias and is parsed as such. The first non-Alias
instance of PID-5 is used as Name.

Aggregation cache:
When a patient's records are first requested at the Access Gateway, the
aggregated record is created using the demographics from the Patient
Registry, including Name. HealthShare then attempts to merge into this the
Names (including Alias Names) of any record received at the AG. If the
inbound and existing Names match on FamilyName, GivenName, and MiddleName,
then they are considered a match, and the inbound Name will be merged into
the existing one. For PreferredName, FamilyNamePrefix, NamePrefix,
NameSuffix, and ProfessionalSuffix, if the existing value is null, it is
set to the inbound value. If the inbound Name did not match the existing
Name, it is then compared to each of the existing Aliases, matching on
FamilyName, MiddleName, and GivenName. If no match is found, the Name is
inserted into the list of Aliases. Then, if the Clinical Viewer is
installed, the Name will also have its DOB property set from the BirthTime
of the inbound SDA Patient, and its MRN property set from the Number of the
first PatientNumber of the inbound Patient with NumberType="MRN".

HL7: PID-5 : PatientName

.FamilyName
HL7: PID-5.1.1 : PatientName.FamilyName.Surname
VIEWERLIB: User.HS.PAPerson(PAPERName)
.FamilyNamePrefix
HL7: PID-5.1.2 : PatientName.FamilyName.OwnSurnamePrefix
VIEWERLIB: User.HS.PAPerson(PAPERName5)
.GivenName
HL7: PID-5.2 : PatientName.GivenName
VIEWERLIB: User.HS.PAPerson(PAPERName2)
.MiddleName
HL7: PID-5.3 : PatientName.SecondandFurtherGivenNames
VIEWERLIB: User.HS.PAPerson(PAPERName3)
.NameSuffix
HL7: PID-5.4 : PatientName.Suffix
VIEWERLIB: User.HS.PAPerson(PAPERName6)
.NamePrefix
HL7: PID-5.5 : PatientName.Prefix
VIEWERLIB: User.HS.PAPerson(PAPERName7)
.ProfessionalSuffix
HL7: PID-5.14 : PatientName.ProfessionalSuffix
VIEWERLIB: User.HS.PAPerson(PAPERName8)
.PreferredName
VIEWERLIB: User.HS.PAPerson(PAPERName4)
Property methods: NameGet(), NameGetObject(), NameGetObjectId(), NameGetSwizzled(), NameIsEmpty(), NameIsValid(), NameNewObject(), NameSet(), NameSetObject(), NameSetObjectId(), NameUnSwizzle()
property Occupation as HS.SDA3.CodeTableDetail.Occupation;
The patient's occupation

VIEWERLIB: Not stored
Property methods: OccupationGet(), OccupationGetObject(), OccupationGetObjectId(), OccupationGetSwizzled(), OccupationIsEmpty(), OccupationIsValid(), OccupationNewObject(), OccupationSet(), OccupationSetObject(), OccupationSetObjectId(), OccupationUnSwizzle()
property Organizations as list of HS.SDA3.DocumentOrganization;
Used by care community
Property methods: OrganizationsBuildValueArray(), OrganizationsCollectionToDisplay(), OrganizationsCollectionToOdbc(), OrganizationsDisplayToCollection(), OrganizationsGet(), OrganizationsGetObject(), OrganizationsGetObjectId(), OrganizationsGetSwizzled(), OrganizationsIsValid(), OrganizationsOdbcToCollection(), OrganizationsSet(), OrganizationsSetObject(), OrganizationsSetObjectId()
property OtherLanguages as list of HS.SDA3.PatientLanguage;
List of patient's other languages

Streamlet cache:
When an Patient update is received with OtherLanguages, HealthShare will
compare the inbound and existing lists for matches and merge where
possible. Matching is done on:
-PreferredLanguage.Code+Description
-Use
Matching on PreferredLanguage is ALPHAUP collated. Matching on Use is
exact. PreferredLanguage is inbound and existing required for a match. Use
is inbound and existing optional (a null value will not cause the
comparison to not be a match). If a match is found, the inbound
PatientLanguage is merged into the existing (null properties of the
existing will be set to the values of the corresponding inbound
properties). Otherwise the inbound PatientLanguage is inserted into the
existing list.

Aggregation cache:
The logic to update OtherLanguages in the Aggregation Cache is the same as
for the Streamlet Cache.

Viewer cache:
If the PatientLanguage does not have a PreferredLanguage, an Alert will be
logged in the Ensemble Event Log and the PatientLanguage will not be saved.

VIEWERLIB: User.HS.PAPerson(ChildPAPersonLanguage)
Property methods: OtherLanguagesBuildValueArray(), OtherLanguagesCollectionToDisplay(), OtherLanguagesCollectionToOdbc(), OtherLanguagesDisplayToCollection(), OtherLanguagesGet(), OtherLanguagesGetObject(), OtherLanguagesGetObjectId(), OtherLanguagesGetSwizzled(), OtherLanguagesIsValid(), OtherLanguagesOdbcToCollection(), OtherLanguagesSet(), OtherLanguagesSetObject(), OtherLanguagesSetObjectId()
property PatientNumbers as list of HS.SDA3.PatientNumber;
List of Patient Numbers

HL7ToSDA3:
HL7ToSDA3 will attempt to parse PatientNumbers from PID-2, -3, -4, -19, and
20 according to the following logic.
PID-2:
Will only be parsed if subfield 1 is not null and subfield 5 is "MR",
"MRN", "PI", or "". Number is parsed from subfield 1. NumberType is parsed
as "MRN". The Organization Code is parsed from subfield 4.1 or, if that is
null, MSH-4.1. HL7ToSDA3 does not set the Organization Description.
ISOAssigningAuthority is parsed from subfield 4.
PID-3:
Every instance of PID-3 will be parsed. Number is parsed from subfield 1.
NumberType is parsed from subfield 5, but is subject to certain mapping
rules. Values of "MRN", "SSN", "DL", "XX", "PPN", "SNC", "NI", "OTH", and
"" will always be parsed as-is. Values of "MR" and "PI" will always be
parsed as "MRN". What is parsed for any other value depends on the value of
the Configuration Registry key
"\General\LegacyPatientIdentifierTypeRestriction". If it is logically
"true" (1, for example), then any other value of PID-3.5 will be parsed as
"OTH". If the registry key is logically "false" or undefined, then the
value will be parsed as-is. The Organization Code of the PatientNumber is
parsed from PID-3.4.1. If that value is null and the parsed NumberType is
"MRN" or "", then MSH-4.1 will be used as the Organization Code. HL7ToSDA3
does not set the Organization Description. ISOAssigningAuthority is parsed
from subfield 4.
PID-4:
Is parsed the same way PID-3 is, though sequentially after PID-3, so
PatientNumbers that come from PID-4 appear after those from PID-3 in the
SDA.
PID-19:
Will only be parsed if it is not null, and if no PatientNumber with
NumberType="SSN" was parsed from PID-3 or -4. In this case, Number is
parsed from PID-19 and NumberType is parsed as "SSN".
PID-20:
Will only be parsed if subfield 1 is not null, and only if no PatientNumber
with NumberType="DL" was parsed from PID-3 or -4. In this case, Number is
parsed from PID-20.1, NumberType is parsed as "DL", and Organization.Code
is parsed from PID-20.2.

Streamlet cache:
When an existing Patient in the Streamlet Cache is updated, only existing
PatientNumbers with a NumberType that is not in the inbound list are
preserved. Other existing PatientNumbers are replaced in the update.
In the OnValidate method of the Streamlet class, the NumberType of each
PatientNumber is validated. Values of "MRN", "SSN", "DL", "SNC", "NI",
"XX", and "PPN" are always valid. If the value of the Configuration
Registry key "\General\LegacyPatientIdentifierTypeRestriction" is logically
true, then the only other valid NumberType is "OTH". Otherwise, to be
valid, the NumberType must be set up as an Identifier Type in HealthShare
(HealthShare Management > Registry > Other Management > Identifier Types)
and be flagged as active and an additional patient identifier. If the
NumberType is not valid, the PatientNumber will be removed from the list
and an alert logged in the Ensemble Event Log.

Aggregation cache:
On aggregate, the inbound list of PatientNumbers will be compared to the
existing list, matching on NumberType, Number, and Organization.Code. If a
match is found, the ISOAssigningAuthority of the inbound PatientNumber will
be saved to the existing. If no match is found, the inbound PatientNumber
will be inserted into the existing list.

Viewer cache:
The Number of the first PatientNumber with NumberType="MRN" will be saved
to PAPerson.PAPMIIPNo and PAPMIOPNo. Likewise with NumberType="SSN" and
PAPerson.PAPMIMedicare, "DL" and PAPERPassportNumber, "SNC" and
PAPMISafetyNetCardNo, and "NI" and PAPERID.

HL7: PID-2 : PatientID
HL7: PID-3 : PatientIdentifierList
HL7: PID-4 : AlternatePatientID
HL7: PID-19 : SSNNumber
HL7: PID-20 : DriversLicenseNumberPatient

.Number
HL7: PID-2.1 : PatientID.IDNumber
HL7: PID-3.1 : PatientIdentifierList.IDNumber
HL7: PID-4.1 : AlternatePatientID.IDNumber
HL7: PID-19 : SSNNumber
HL7: PID-20.1 : DriversLicenseNumberPatient.LicenseNumber
VIEWERLIB: User.HS.PAPerson(PAPMIIPNo)
VIEWERLIB: User.HS.PAPerson(PAPMIOPNo)
VIEWERLIB: User.HS.PAPerson(PAPMIMedicare)
VIEWERLIB: User.HS.PAPerson(PAPERPassportNumber)
VIEWERLIB: User.HS.PAPerson(PAPMISafetyNetCardNo)
VIEWERLIB: User.HS.PAPerson(PAPERID)
.NumberType
HL7: PID-3.5 : PatientIdentifierList.IdentifierTypeCode
HL7: PID-4.5 : AlternatePatientID.IdentifierTypeCode
VIEWERLIB: Not stored
.Organization
HL7: PID-2.4.1 : PatientID.AssigningAuthority.NamespaceID
HL7: PID-3.4.1 : PatientIdentifierList.AssigningAuthority.NamespaceID
HL7: PID-4.4.1 : AlternatePatientID.AssigningAuthority.NamespaceID
HL7: PID-20.2 : DriversLicenseNumberPatient.IssuingStateProvinceCountry
HL7: MSH-4.1 : SendingFacility.NamespaceID
VIEWERLIB: see HS.SDA3.PatientNumber
.ISOAssigningAuthority
HL7: PID-2.4 : PatientID.AssigningAuthority
HL7: PID-3.4 : PatientIdentifierList.AssigningAuthority
HL7: PID-4.4 : AlternatePatientID.AssigningAuthority
VIEWERLIB: Not stored
Property methods: PatientNumbersBuildValueArray(), PatientNumbersCollectionToDisplay(), PatientNumbersCollectionToOdbc(), PatientNumbersDisplayToCollection(), PatientNumbersGet(), PatientNumbersGetObject(), PatientNumbersGetObjectId(), PatientNumbersGetSwizzled(), PatientNumbersIsValid(), PatientNumbersOdbcToCollection(), PatientNumbersSet(), PatientNumbersSetObject(), PatientNumbersSetObjectId()
property PrimaryLanguage as HS.SDA3.CodeTableDetail.Language;
Patient's primary language

HL7ToSDA3:
PID-15 is only parsed if subfield 1 or 2 is not null.

HL7: PID-15 : PrimaryLanguage
SDATableName=Language, ViewerClass=User.HS.PACPreferredLanguage
VIEWERLIB: User.HS.PAPerson(PAPERPrefLanguageDR)

.Code
HL7: PID-15.1 : PrimaryLanguage.Identifier
VIEWERLIB: User.HS.PACPreferredLanguage(PREFLCode)
.Description
HL7: PID-15.2 : PrimaryLanguage.Text
VIEWERLIB: User.HS.PACPreferredLanguage(PREFLDesc)
.SDACodingStandard
HL7: PID-15.3 : PrimaryLanguage.NameofCodingSystem
VIEWERLIB: Not stored
Property methods: PrimaryLanguageGet(), PrimaryLanguageGetObject(), PrimaryLanguageGetObjectId(), PrimaryLanguageGetSwizzled(), PrimaryLanguageIsEmpty(), PrimaryLanguageIsValid(), PrimaryLanguageNewObject(), PrimaryLanguageSet(), PrimaryLanguageSetObject(), PrimaryLanguageSetObjectId(), PrimaryLanguageUnSwizzle()
property PriorPatientNumbers as list of HS.SDA3.PatientNumber;
If this SDA is for a patient merge or change number or encounter move, then
this property contains the PatientNumbers for the victim or source patient
record.

HL7ToSDA3:
Each instance of MRG-1 with subfield 4 not null will be parsed.

Steamlet cache:
PriorPatientNumbers is not saved to the Streamlet Cache. However, the first
entry in it with NumberType="MRN" will be appended to the InactiveMRNs
property as "[SendingFacility]^[AssigningAuthority]^[Number]".

HL7: MRG-1 : PriorPatientIdentifierList
VIEWERLIB: Not stored

.Number
HL7: MRG-1.1 : PriorPatientIdentifierList.IDNumber
VIEWERLIB: Not stored
.Organization
The Assigning Authority for the number
HL7ToSDA3:
MRG-1.4.1 is parsed into the Organization Code. HL7ToSDA3 does not set the
Description.
SDATableName=Organization, ViewerClass=User.HS.CTHospital
HL7: MRG-1.4.1 : PriorPatientIdentifierList.AssigningAuthority.NamespaceID
VIEWERLIB: Not stored
.NumberType
HL7ToSDA3:
The source for NumberType is MRG-1.5, subject to certain mapping rules.
Values of "MRN", "SSN", "DL", "XX", "PPN", "SNC", "NI", "OTH", and "" will
always be parsed as-is. Values of "MR" and "PI" will always be parsed as
"MRN". What is parsed for any other value depends on the value of the
Configuration Registry key
"\General\LegacyPatientIdentifierTypeRestriction". If it is logically
"true" (1, for example), then any other value of MRG-1.5 will be parsed as
"OTH". If the registry key is logically "false" or undefined, then the
value will be parsed as-is.
HL7: MRG-1.5 : PriorPatientIdentifierList.IdentifierTypeCode
VIEWERLIB: Not stored
Property methods: PriorPatientNumbersBuildValueArray(), PriorPatientNumbersCollectionToDisplay(), PriorPatientNumbersCollectionToOdbc(), PriorPatientNumbersDisplayToCollection(), PriorPatientNumbersGet(), PriorPatientNumbersGetObject(), PriorPatientNumbersGetObjectId(), PriorPatientNumbersGetSwizzled(), PriorPatientNumbersIsValid(), PriorPatientNumbersOdbcToCollection(), PriorPatientNumbersSet(), PriorPatientNumbersSetObject(), PriorPatientNumbersSetObjectId()
property ProtectedEffectiveDate as HS.SDA3.TimeStamp;
Date when protected status went into effect

HL7: PD1-13 : ProtectionIndicatorEffectiveDate
VIEWERLIB: Not stored
Property methods: ProtectedEffectiveDateDisplayToLogical(), ProtectedEffectiveDateGet(), ProtectedEffectiveDateIsValid(), ProtectedEffectiveDateLogicalToDisplay(), ProtectedEffectiveDateLogicalToTimeStamp(), ProtectedEffectiveDateLogicalToXSD(), ProtectedEffectiveDateNormalize(), ProtectedEffectiveDateOdbcToLogical(), ProtectedEffectiveDateSet(), ProtectedEffectiveDateXSDToLogical()
property Providers as list of HS.SDA3.DocumentProvider;
Used by care community
Property methods: ProvidersBuildValueArray(), ProvidersCollectionToDisplay(), ProvidersCollectionToOdbc(), ProvidersDisplayToCollection(), ProvidersGet(), ProvidersGetObject(), ProvidersGetObjectId(), ProvidersGetSwizzled(), ProvidersIsValid(), ProvidersOdbcToCollection(), ProvidersSet(), ProvidersSetObject(), ProvidersSetObjectId()
property PublicityCode as HS.SDA3.CodeTableDetail.PublicityCode;
What level of publicity is allowed for this visit (Family only, No
publicity, etc.)
In the context of immunization messages, this refers to how a person wishes
to be contacted in a reminder or recall situation.

HL7ToSDA3:
PD1-11 will only be parsed if subfield 2 is not null.

HL7: PD1-11 : PublicityCode
VIEWERLIB: Not stored

.Code
HL7: PD1-11.1 : PublicityCode.Identifier
.Description
HL7: PD1-11.2 : PublicityCode.Text
.SDACodingStandard
HL7: PD1-11.3 : PublicityCode.NameofCodingSystem
Property methods: PublicityCodeGet(), PublicityCodeGetObject(), PublicityCodeGetObjectId(), PublicityCodeGetSwizzled(), PublicityCodeIsEmpty(), PublicityCodeIsValid(), PublicityCodeNewObject(), PublicityCodeSet(), PublicityCodeSetObject(), PublicityCodeSetObjectId(), PublicityCodeUnSwizzle()
property PublicityEffectiveDate as HS.SDA3.TimeStamp;
When the PublicityCode went into effect

HL7ToSDA3:
PD1-18 will only be parsed if PD1-11.2 is not null.

HL7: PD1-18 : PublicityCodeEffectiveDate
VIEWERLIB: Not stored
Property methods: PublicityEffectiveDateDisplayToLogical(), PublicityEffectiveDateGet(), PublicityEffectiveDateIsValid(), PublicityEffectiveDateLogicalToDisplay(), PublicityEffectiveDateLogicalToTimeStamp(), PublicityEffectiveDateLogicalToXSD(), PublicityEffectiveDateNormalize(), PublicityEffectiveDateOdbcToLogical(), PublicityEffectiveDateSet(), PublicityEffectiveDateXSDToLogical()
property Race as HS.SDA3.CodeTableDetail.Race;
HealthShare now supports multiple races in the Races property. The single
instance Race property is maintained (as the first Races entry) for
backwards compatibility.

HL7ToSDA3:
Though PID-10 is repeating, only the first instance with subfield 1 or 2
not null will be parsed to Race.

Streamlet cache:
In the OnBeforeMatch method of the Streamlet class, if Race.Code is the
delete instruction (two double quotes), the Description is set to the
delete instruction and the Races property is cleared. Else, if the first
entry in Races has Code = the delete instruction, both Race.Code and
Description are set to the delete instruction, and Races is cleared. Else,
if Races has at least 1 entry, Race is set to a clone of the first entry.
Else, if Race is defined, a clone of it is inserted into Races.
Race and Races are updated in the Streamlet Cache via the OnUpdateSDARace
and OnUpdateSDARaces methods. The OnUpdateSDARace method actually doesn't
do anything, however the OnUpdateSDARaces method can affect Race in several
ways. If the inbound Race.Code is the delete instruction, the existing Race
is set to null and the existing Races is cleared. Else, if the inbound Race
is defined and the inbound Races is not, a clone of the inbound Race is
inserted into the inbound Races. Then, if there is at least one entry in
the inbound Races, the existing Race is set set to a clone of the first
entry in the inbound Races, and the existing Races is cleared and clones of
the entries in the inbound Races inserted.

Aggregation cache:
In the Aggregate method of the Streamlet class, Race is aggregated into the
patient record like most other properties of Patient: if the existing value
is null or the inbound record is the best record, set the existing value to
the inbound one.

Viewer cache:
Note that it is the Race property, and not Races or any of its entries,
that is inserted into the Viewer Cache.

HL7: PID-10 : Race
SDATableName=Race, ViewerClass=User.HS.PACIndigStatus
VIEWERLIB: User.HS.PAPerson(PAPERIndigStatDR)

.Code
HL7: PID-10.1 : Race.Identifier
VIEWERLIB: User.HS.PACIndigStatus(INDSTCode)
.Description
HL7: PID-10.2 : Race.Text
VIEWERLIB: User.HS.PACIndigStatus(INDSTDesc)
.SDACodingStandard
HL7: PID-10.3 : Race.NameofCodingSystem
VIEWERLIB: Not stored
.CodeSystemVersionId
HL7: PID-10.7 : Race.CodingSystemVersionID
VIEWERLIB: Not stored
Property methods: RaceGet(), RaceGetObject(), RaceGetObjectId(), RaceGetSwizzled(), RaceIsEmpty(), RaceIsValid(), RaceNewObject(), RaceSet(), RaceSetObject(), RaceSetObjectId(), RaceUnSwizzle(), RacesBuildValueArray(), RacesCollectionToDisplay(), RacesCollectionToOdbc(), RacesDisplayToCollection(), RacesGet(), RacesGetObject(), RacesGetObjectId(), RacesGetSwizzled(), RacesIsValid(), RacesOdbcToCollection(), RacesSet(), RacesSetObject(), RacesSetObjectId()
property Races as list of HS.SDA3.CodeTableDetail.Race;
HL7ToSDA3:
Every instance of PID-10 with subfield 1 or 2 not null is parsed to Races.

Streamlet cache:
In the OnBeforeMatch method of the Streamlet class, if Race.Code is the
delete instruction (two double quotes), the Description is set to the
delete instruction and the Races property is cleared. Else, if the first
entry in Races has Code = the delete instruction, both Race.Code and
Description are set to the delete instruction, and Races is cleared. Else,
if Races has at least 1 entry, Race is set to a clone of the first entry.
Else, if Race is defined, a clone of it is inserted into Races.
Race and Races are updated in the Streamlet Cache via the OnUpdateSDARace
and OnUpdateSDARaces methods. The OnUpdateSDARace method actually doesn't
do anything. In OnUpdateSDARaces, if the inbound Race.Code is the delete
instruction, the existing Race is set to null and the existing Races is
cleared. Else, if the inbound Race is defined and the inbound Races is not,
a clone of the inbound Race is inserted into the inbound Races. Then, if
there is at least one entry in the inbound Races, the existing Race is set
to a clone of the first entry in the inbound Races, and the existing Races
is cleared and clones of the entries in the inbound Races inserted.

Aggregation cache:
In the Aggregate method of the Streamlet class, the inbound Races are
compared to the existing ones, and any inbound Race that does not match an
existing one is inserted into the existing list. Matching is done on Code,
Description, and SDACodingStandard.

HL7: PID-10 : Race
SDATableName=Race, ViewerClass=User.HS.PACIndigStatus
VIEWERLIB: Not stored

.Code
HL7: PID-10.1 : Race.Identifier
VIEWERLIB: User.HS.PACIndigStatus(INDSTCode)
.Description
HL7: PID-10.2 : Race.Text
VIEWERLIB: User.HS.PACIndigStatus(INDSTDesc)
.SDACodingStandard
HL7: PID-10.3 : Race.NameofCodingSystem
VIEWERLIB: Not stored
.CodeSystemVersionId
HL7: PID-10.7 : Race.CodingSystemVersionID
VIEWERLIB: Not stored
Property methods: RacesBuildValueArray(), RacesCollectionToDisplay(), RacesCollectionToOdbc(), RacesDisplayToCollection(), RacesGet(), RacesGetObject(), RacesGetObjectId(), RacesGetSwizzled(), RacesIsValid(), RacesOdbcToCollection(), RacesSet(), RacesSetObject(), RacesSetObjectId()
property Religion as HS.SDA3.CodeTableDetail.Religion;
HL7ToSDA3:
PID-17 is only parsed if subfield 1 or 2 is not null.

HL7: PID-17 : Religion
SDATableName=Religion, ViewerClass=User.HS.CTReligion
VIEWERLIB: User.HS.PAPerson(PAPERReligionDR)

.Code
HL7: PID-17.1 : Religion.Identifier
VIEWERLIB: User.HS.CTReligion(CTRLGCode)
.Description
HL7: PID-17.2 : Religion.Text
VIEWERLIB: User.HS.CTReligion(CTRLGDesc)
.SDACodingStandard
HL7: PID-17.3 : Religion.NameofCodingSystem
VIEWERLIB: Not stored
Property methods: ReligionGet(), ReligionGetObject(), ReligionGetObjectId(), ReligionGetSwizzled(), ReligionIsEmpty(), ReligionIsValid(), ReligionNewObject(), ReligionSet(), ReligionSetObject(), ReligionSetObjectId(), ReligionUnSwizzle()
property SupportContacts as list of HS.SDA3.SupportContact;
List of next of kin/support contacts

HL7ToSDA3:
It is possible for one NK1 segment to be parsed as two SupportContacts.
One is parsed from fields 2 through 9, the other from fields 13, 30, 31,
and 32. See the SupportContact class for more info.

HL7: NK1
VIEWERLIB: see HS.SDA3.SupportContact
Property methods: SupportContactsBuildValueArray(), SupportContactsCollectionToDisplay(), SupportContactsCollectionToOdbc(), SupportContactsDisplayToCollection(), SupportContactsGet(), SupportContactsGetObject(), SupportContactsGetObjectId(), SupportContactsGetSwizzled(), SupportContactsIsValid(), SupportContactsOdbcToCollection(), SupportContactsSet(), SupportContactsSetObject(), SupportContactsSetObjectId()
property ToTime as HS.SDA3.TimeStamp;
Not used.
Property methods: ToTimeDisplayToLogical(), ToTimeGet(), ToTimeIsValid(), ToTimeLogicalToDisplay(), ToTimeLogicalToTimeStamp(), ToTimeLogicalToXSD(), ToTimeNormalize(), ToTimeOdbcToLogical(), ToTimeSet(), ToTimeXSDToLogical()
property UpdatedOn as HS.SDA3.TimeStamp;
For every other streamlet type, this property is used as a tiebreaker when
aggregating records from the same tier facility at the Access Gateway. (See
the annotation on the superclass property for more info.) And while this
property is still set for Patient (by virtue of the Patient streamlet being
saved via HS.SDA3.Streamlet.Abstract:SaveStreamlet), it is not used during
the aggregation of Patient streamlets. The HS.SDA3.Streamlet.Patient class
implements its own Aggregate method that does not use this property. In
time the Patient:Aggregate method will incorporate facility tier and how
recent the record is into its logic, but for right now we are simply
documenting that this property is not used the way it is for other classes.

VIEWERLIB: Not stored
Property methods: UpdatedOnDisplayToLogical(), UpdatedOnGet(), UpdatedOnIsValid(), UpdatedOnLogicalToDisplay(), UpdatedOnLogicalToTimeStamp(), UpdatedOnLogicalToXSD(), UpdatedOnNormalize(), UpdatedOnOdbcToLogical(), UpdatedOnSet(), UpdatedOnXSDToLogical()

Inherited Members

Inherited Properties

Inherited Methods

Feedback