Skip to main content

HS.SDA3.Problem

serial class HS.SDA3.Problem extends HS.SDA3.SuperClass

HS.SDA3.Problem data corresponds to any of three different CDA sections:
Problem List, History of Past Illness, Functional Status. Refer to the
Section-Modules export XSLs for any of those sections for more details.

In the default Clinical Viewer layout, Problems are displayed on the
Conditions chart in the "Present Illness" and "Past Illness" profiles. The
logic to determine whether a Problem is past or present is described in the
annotation on the ActionScope property and uses the ToTime and Status values.
This is implemented via row filters on these profiles that invoke
web.SDA3.Problem::IsProblemPresent. Users wishing to customize the filter
logic may copy this method to their own class, change it to their liking,
and configure the filters for the profiles to use this method instead.

Property Inventory

Properties

property ActionCode as %String;
Supported values:
D = Delete
C = Clear/Delete All
Any other value = Add or Update
See the annotation on the superclass property for more information on how
ActionCode is used. Also see the annotation on the ActionScope property for
information on how ActionScope="C" can be qualified.

HL7ToSDA3:
For a PPR_PC3 message (Problem Delete), ActionCode is always parsed as "D".
Otherwise PRB-1 is used if not null.

HL7: PRB-1 : ActionCode
VIEWERLIB: Not stored
Property methods: ActionCodeDisplayToLogical(), ActionCodeGet(), ActionCodeIsValid(), ActionCodeLogicalToDisplay(), ActionCodeLogicalToOdbc(), ActionCodeNormalize(), ActionCodeSet()
property ActionScope as %String;
Optional scope used to qualify ActionCode="C"
Supported values are:
PRESENT (case-insensitive) = Clear only Present Problems
PAST (case-insensitive) = Clear only Past Problem
If ActionScope is null or omitted, all Problems for the Encounter will be
deleted.
For any other value of ActionScope (ie unrecognized value), nothing will be
deleted.
The logic to determine whether a Problem is past or present is:
-If the Problem has a ToTime in the past, it's past.
-Else if the Problem has Status.Code="I", it's past.
-Else if Status.SDACodingStandard contains (not necessarily equals)
"SNOMED", case-insensitive, and Status.Code is one of 73425007, 410516002,
or 413322009 (Inactive, Ruled Out, Resolved), it's past.
-Else the Problem is present.
See the annotation on the superclass property for more information on how
ActionScope is used.

VIEWERLIB: Not stored
Property methods: ActionScopeDisplayToLogical(), ActionScopeGet(), ActionScopeIsValid(), ActionScopeLogicalToDisplay(), ActionScopeLogicalToOdbc(), ActionScopeNormalize(), ActionScopeSet()
HL7ToSDA3:
PRB-10 will only be parsed if subfield 1 or 2 is not null.

HL7: PRB-10 : ProblemClassification
SDATableName=ProblemCategory, ViewerClass=User.HS.MRCPresIllCategory
VIEWERLIB: User.HS.MRPresentIllness(PRESICategoryDR)

.Code
HL7: PRB-10.1 : ProblemClassification.Identifier
VIEWERLIB: User.HS.MRCPresIllCategory(PRESICCode)
.Description
HL7: PRB-10.2 : ProblemClassification.Text
VIEWERLIB: User.HS.MRCPresIllCategory(PRESICDesc)
.SDACodingStandard
HL7: PRB-10.3 : ProblemClassification.NameofCodingSystem
VIEWERLIB: Not stored
Property methods: CategoryGet(), CategoryGetObject(), CategoryGetObjectId(), CategoryGetSwizzled(), CategoryIsEmpty(), CategoryIsValid(), CategoryNewObject(), CategorySet(), CategorySetObject(), CategorySetObjectId(), CategoryUnSwizzle()
property CauseofDeath as %String (DISPLAYLIST = ",Yes,No", MAXLEN = 220, TRUNCATE = 1, VALUELIST = ",Y,N");
Whether this Problem contributed as a Cause of Death
Supported values: Y, N

VIEWERLIB: User.HS.MRPresentIllness(PRESICauseOfDeath)
Property methods: CauseofDeathDisplayToLogical(), CauseofDeathGet(), CauseofDeathIsValid(), CauseofDeathLogicalToDisplay(), CauseofDeathLogicalToOdbc(), CauseofDeathNormalize(), CauseofDeathSet()
property Clinician as HS.SDA3.CodeTableDetail.CareProvider;
HL7ToSDA3:
Clinician is parsed from the first ROL segment following the PRB segment
with ROL-3.1 (Role.Identifier) = AD, AT, CP, FHCP, PP, RP, or RT (HL7 code
table 2.5:443, Provider Role).

HL7: ROL
SDATableName=CareProvider, ViewerClass=User.HS.CTCareProv
VIEWERLIB: User.HS.MRPresentIllness(PRESICTCPDR)

.Code
HL7ToSDA3:
If ROL-1.1 is non-null, use that as Code. Else, if the first instance of
ROL-4.1 is non-null, use that as Code.
HL7: ROL-1.1 : RoleInstanceID.EntityIdentifier
HL7: ROL-4.1 : RolePerson.IDNumber
VIEWERLIB: User.HS.CTCareProv(CTPCPCode)

.Description
HL7ToSDA3:
Description is parsed from the first instance of ROL-4 (Role Person),
subfields 2.1 (FamilyName.Surname) and 3 (GivenName), formatted as:
"[FamilyName.Surname], [GivenName]".
HL7: ROL-4.2.1 : RolePerson.FamilyName.Surname
HL7: ROL-4.3 : RolePerson.GivenName
VIEWERLIB: User.HS.CTCareProv(CTPCPDesc)

.SDACodingStandard
HL7ToSDA3:
If ROL-1.1 is non-null, use ROL-1.2 as SDACodingStandard. Else, if the
first instance of ROL-4.1 is non-null, use that instance of ROL-4.9 as
SDACodingStandard.
HL7: ROL-1.2 : RoleInstanceID.NamespaceID
HL7: ROL-4.9 : RolePerson.AssigningAuthority
VIEWERLIB: Not stored

.Name
HL7ToSDA3:
Only the first instance of ROL-4 is used.
HL7: ROL-4 : RolePerson
.Name.FamilyName
HL7: ROL-4.2.1 : RolePerson.FamilyName.Surname
VIEWERLIB: User.HS.CTCareProv(CTPCPSurname)
.Name.FamilyNamePrefix
HL7: ROL-4.2.2 : RolePerson.FamilyName.OwnSurnamePrefix
VIEWERLIB: User.HS.CTCareProv(CTPCPTextOne)
.Name.GivenName
HL7: ROL-4.3 : RolePerson.GivenName
VIEWERLIB: User.HS.CTCareProv(CTPCPFirstName)
.Name.MiddleName
HL7: ROL-4.4 : RolePerson.SecondandFurtherGivenNamesorInitialsThereof
VIEWERLIB: User.HS.CTCareProv(CTPCPOtherName)
.Name.NameSuffix
HL7: ROL-4.5 : RolePerson.Suffix
VIEWERLIB: User.HS.CTCareProv(CTPCPTextTwo)
.Name.NamePrefix
HL7: ROL-4.6 : RolePerson.Prefix
VIEWERLIB: User.HS.CTCareProv(CTPCPTitle)
.Name.ProfessionalSuffix
HL7: ROL-4.7 : RolePerson.Degree
VIEWERLIB: User.HS.CTCareProv(CTPCPTextThree)

.Address
HL7ToSDA3:
Only the first instance of ROL-11 is used.
HL7: ROL-11 : OfficeHomeAddressBirthplace
.Adress.Street
HL7ToSDA3:
ROL-11.2, if present, is concatenated to ROL-11.1 as:
"[ROL-11.1]; [ROL-11.2]"
HL7: ROL-11.1 : OfficeHomeAddressBirthplace.StreetAddress
HL7: ROL-11.2 : OfficeHomeAddressBirthplace.OtherDesignation
VIEWERLIB: User.HS.CTCareProv(CTPCPStName)
.Address.City
HL7ToSDA3:
ROL-11.3 is parsed to City.Code. HL7ToSDA3 does not set the Description.
HL7: ROL-11.3 : OfficeHomeAddressBirthplace.City
VIEWERLIB: User.HS.CTCareProv(CTPCPCityDR)
.Address.State
HL7ToSDA3:
ROL-11.4 is parsed to State.Code. HL7ToSDA3 does not set the Description.
HL7: ROL-11.4 : OfficeHomeAddressBirthplace.StateorProvince
VIEWERLIB: Not stored
.Address.Zip
HL7ToSDA3:
ROL-11.5 is parsed to Zip.Code. HL7ToSDA3 does not set the Description.
HL7: ROL-11.5 : OfficeHomeAddressBirthplace.ZiporPostalCode
VIEWERLIB: User.HS.CTCareProv(CTPCPZipDR)
.Address.Country
HL7ToSDA3:
ROL-11.6 is parsed to Country.Code. HL7ToSDA3 does not set the Description.
HL7: ROL-11.6 : OfficeHomeAddressBirthplace.Country
VIEWERLIB: Not stored
.Address.FromTime
HL7: ROL-11.13 : OfficeHomeAddressBirthplace.EffectiveDate
VIEWERLIB: Not stored
.Address.ToTime
HL7: ROL-11.14 : OfficeHomeAddressBirthplace.ExpirationDate
VIEWERLIB: Not stored

.ContactInfo
HL7ToSDA3:
ROL-12 is a repeating field, and each instance may populate
HomePhoneNumber, WorkPhoneNumber, MobilePhoneNumber, or EmailAddress,
depending on the values contained therein. For each instance of ROL-12, the
algorithm to parse a phone number out of that instance 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 ROL-12.

-Whichever number is parsed, if subfield 9 of that instance is not null, it
will be appended to the number, delimited by a semicolon.
Ex: "###-###-####;Main Number"
HL7: ROL-12 : Phone
.ContactInfo.HomePhoneNumber
HL7ToSDA3:
HomePhoneNumber is parsed from the first instance of ROL-12 with subfield 2
(Use) in [PRN,ORN,VHN,EMR], and subfield 3 in ["",PH], and from which a
number can be parsed using the above algorithm.
HL7: ROL-12 : Phone
VIEWERLIB: User.HS.CTCareProv(CTPCPTelH)
.ContactInfo.WorkPhoneNumber
HL7ToSDA3:
WorkPhoneNumber is parsed from the first instance of ROL-12 with subfield 2
in ["",WPN,ASN], and subfield 3 in ["",PH], and from which a number can be
parsed using the above algorithm.
HL7: ROL-12 : Phone
VIEWERLIB: User.HS.CTCareProv(CTPCPTelO)
.ContactInfo.MobilePhoneNumber
HL7ToSDA3:
MobilePhoneNumber is parsed from the first instance of ROL-12 with subfield
2 = "BPN" or subfield 3 in [CP,BP], and from which a number can be parsed
using the above algorithm.
HL7: ROL-12 : Phone
VIEWERLIB: User.HS.CTCareProv(CTPCPMobilePhone)
.ContactInfo.EmailAddress
HL7ToSDA3:
EmailAddress is parsed from the first non-null instance of subfield 4 in
ROL-12.
HL7: ROL-12.4 : Phone.EmailAddress
VIEWERLIB: User.HS.CTCareProv(CTPCPEmail)

.CareProviderType
HL7ToSDA3:
CareProviderType will only be parsed from ROL-9 if piece 1 or 2 is not
null.
HL7: ROL-9 : ProviderType
SDATableName=CareProviderType, ViewerClass=User.HS.CTCarPrvTp
VIEWERLIB: User.HS.CTCareProv(CTPCPCarPrvTpDR)
.CareProviderType.Code
HL7: ROL-9.1 : ProviderType.Identifier
VIEWERLIB: User.HS.CTCarPrvTp(CTCPTCode)
.CareProviderType.Description
HL7: ROL-9.2 : ProviderType.Text
VIEWERLIB: User.HS.CTCarPrvTp(CTCPTDesc)
.CareProviderType.SDACodingStandard
HL7: ROL-9.3 : ProviderType.NameofCodingSystem
VIEWERLIB: Not stored
Property methods: ClinicianGet(), ClinicianGetObject(), ClinicianGetObjectId(), ClinicianGetSwizzled(), ClinicianIsEmpty(), ClinicianIsValid(), ClinicianNewObject(), ClinicianSet(), ClinicianSetObject(), ClinicianSetObjectId(), ClinicianUnSwizzle()
property Comments as %String);
Length subject to the total streamlet size limit - 3,000,000

VIEWERLIB: User.HS.MRPresentIllness(PRESIComments)
Property methods: CommentsDisplayToLogical(), CommentsGet(), CommentsIsValid(), CommentsLogicalToDisplay(), CommentsLogicalToOdbc(), CommentsNormalize(), CommentsSet()
property EnteredAt as HS.SDA3.CodeTableDetail.Organization;
HL7ToSDA3:
MSH-4.1 is parsed as the EnteredAt Code. HL7ToSDA3 does not set the
Description.

HL7: MSH-4.1 : SendingFacility.NamespaceID
SDATableName=Organization, ViewerClass=User.HS.CTHospital
VIEWERLIB: User.HS.MRPresentIllness(PRESIUpdateHospitalDR)
Property methods: EnteredAtGet(), EnteredAtGetObject(), EnteredAtGetObjectId(), EnteredAtGetSwizzled(), EnteredAtIsEmpty(), EnteredAtIsValid(), EnteredAtNewObject(), EnteredAtSet(), EnteredAtSetObject(), EnteredAtSetObjectId(), EnteredAtUnSwizzle()
property EnteredBy as HS.SDA3.CodeTableDetail.User;
HL7ToSDA3:
EnteredBy is parsed from the first ROL segment following the PRB segment
with ROL-3.1 (Role.Identifier) = "TR" for "Transcriptionist" (from HL7 code
table 2.6:443)

HL7: ROL
SDATableName=User, ViewerClass=User.HS.SSUser
VIEWERLIB: User.HS.MRPresentIllness(PRESIUpdateUserDR)

.Code
HL7ToSDA3:
ROL-1.1 will be used if not null, else the first instance of ROL-4.1 will
be used if not null.
HL7: ROL-1.1 : RoleInstanceID.EntityIdentifier
HL7: ROL-4.1 : RolePerson.IDNumber
VIEWERLIB: User.HS.SSUser(SSUSRInitials)
.Description
HL7ToSDA3:
Description is parsed from the first instance of ROL-4 (Role Person),
subfields 2.1 (FamilyName.Surname) and 3 (GivenName), formatted as:
"[FamilyName.Surname], [GivenName]".
HL7: ROL-4.2.1 : RolePerson.FamilyName.Surname
HL7: ROL-4.3 : RolePerson.GivenName
.SDACodingStandard
HL7ToSDA3:
If ROL-1.1 is non-null, use ROL-1.2 as SDACodingStandard. Else, if the
first instance of ROL-4.1 is non-null, use that instance of ROL-4.9 as
SDACodingStandard.
HL7: ROL-1.2 : RoleInstanceID.NamespaceID
HL7: ROL-4.9 : RolePerson.AssigningAuthority
VIEWERLIB: Not stored
Property methods: EnteredByGet(), EnteredByGetObject(), EnteredByGetObjectId(), EnteredByGetSwizzled(), EnteredByIsEmpty(), EnteredByIsValid(), EnteredByNewObject(), EnteredBySet(), EnteredBySetObject(), EnteredBySetObjectId(), EnteredByUnSwizzle()
property EnteredOn as HS.SDA3.TimeStamp;
HL7ToSDA3:
PRB-15 is used if present, else PRB-2 is used if present.

HL7: PRB-15 : ProblemLifeCycleStatusDateTime
HL7: PRB-2 : ActionDateTime
VIEWERLIB: User.HS.MRPresentIllness(PRESIDate) + VIEWERLIB: User.HS.MRPresentIllness(PRESITime)
Property methods: EnteredOnDisplayToLogical(), EnteredOnGet(), EnteredOnIsValid(), EnteredOnLogicalToDisplay(), EnteredOnLogicalToTimeStamp(), EnteredOnLogicalToXSD(), EnteredOnNormalize(), EnteredOnOdbcToLogical(), EnteredOnSet(), EnteredOnXSDToLogical()
property Extension as HS.Local.SDA3.ProblemExtension;
Property methods: ExtensionGet(), ExtensionGetObject(), ExtensionGetObjectId(), ExtensionGetSwizzled(), ExtensionIsEmpty(), ExtensionIsValid(), ExtensionNewObject(), ExtensionSet(), ExtensionSetObject(), ExtensionSetObjectId(), ExtensionUnSwizzle()
property ExternalId as %String (MAXLEN = 220);
HL7: PRB-4 : ProblemInstanceID
VIEWERLIB: User.HS.MRPresentIllness(PRESIExternalId)
Property methods: ExternalIdDisplayToLogical(), ExternalIdGet(), ExternalIdIsValid(), ExternalIdLogicalToDisplay(), ExternalIdLogicalToOdbc(), ExternalIdNormalize(), ExternalIdSet()
property FromTime as HS.SDA3.TimeStamp;
HL7ToSDA3:
PRB-16 is used if present, else PRB-7 is used if present.

Viewer cache:
Only the date part of FromTime is stored in the Viewer Cache.
(PRESIDateOnset is date-only.)

HL7: PRB-16 : ProblemDateofOnset
HL7: PRB-7 : ProblemEstablishedDateTime
VIEWERLIB: User.HS.MRPresentIllness(PRESIDateOnset)
Property methods: FromTimeDisplayToLogical(), FromTimeGet(), FromTimeIsValid(), FromTimeLogicalToDisplay(), FromTimeLogicalToTimeStamp(), FromTimeLogicalToXSD(), FromTimeNormalize(), FromTimeOdbcToLogical(), FromTimeSet(), FromTimeXSDToLogical()
property IdentificationTime as HS.SDA3.TimeStamp;
Timestamp describing when the diagnosis was made
Property methods: IdentificationTimeDisplayToLogical(), IdentificationTimeGet(), IdentificationTimeIsValid(), IdentificationTimeLogicalToDisplay(), IdentificationTimeLogicalToTimeStamp(), IdentificationTimeLogicalToXSD(), IdentificationTimeNormalize(), IdentificationTimeOdbcToLogical(), IdentificationTimeSet(), IdentificationTimeXSDToLogical()
property Problem as HS.SDA3.CodeTableDetail.BodyPart;
HL7ToSDA3:
PRB-3 will only be parsed if subfield 1 (Identifier) or 2 (Text) is not
null.

Streamlet cache:
In the OnValidate method of the Streamlet class, if the SDA does not have a
Problem CodeTableDetail and ProblemDetails is null, an error will be logged
and the Streamlet will not be saved.

HL7: PRB-3 : ProblemID
SDATableName=BodyPart, ViewerClass=User.HS.MRCBodyParts
VIEWERLIB: User.HS.MRPresentIllness(PRESIBodyPartsDR)

.Code
HL7: PRB-3 : ProblemID.Identifier
VIEWERLIB: User.HS.MRCBodyParts(BODPCode)
.Description
HL7: PRB-3 : ProblemID.Text
VIEWERLIB: User.HS.MRCBodyParts(BODPDesc)
.SDACodingStandard
HL7: PRB-3 : ProblemID.NameofCodingSystem
VIEWERLIB: Not stored
Property methods: ProblemGet(), ProblemGetObject(), ProblemGetObjectId(), ProblemGetSwizzled(), ProblemIsEmpty(), ProblemIsValid(), ProblemNewObject(), ProblemSet(), ProblemSetObject(), ProblemSetObjectId(), ProblemUnSwizzle()
property ProblemDetails as %String);
Length subject to the total streamlet size limit - 3,000,000

Streamlet cache:
In the OnValidate method of the Streamlet class, if the SDA does not have a
Problem CodeTableDetail and ProblemDetails is null, an error will be logged
and the Streamlet will not be saved.

HL7: NTE-3 : Comment
VIEWERLIB: User.HS.MRPresentIllness(PRESIDesc)
Property methods: ProblemDetailsDisplayToLogical(), ProblemDetailsGet(), ProblemDetailsIsValid(), ProblemDetailsLogicalToDisplay(), ProblemDetailsLogicalToOdbc(), ProblemDetailsNormalize(), ProblemDetailsSet()
HL7ToSDA3:
If PRB-14.1 or .2 is not null, then Status is derived from PRB-14. The
actual values parsed to the SDA may not exactly match what is in the HL7.
The logic is:
-If PRB-14.1 matches one of the SNOMED codes and PRB-14.3 contains "SNOMED"
(case-insensitive), use the corresponding SNOMED description.
-Else if PRB-14.2 matches one of the SNOMED descriptions (case- and
whitespace-insensitive), use the corresponding SNOMED code.
-Else if there is a value in PRB-9 (Actual Problem Resolution Date/Time),
use Code="413322009", Description="Resolved".
-Else default to Code="55561003", Description="Active".
In each case, the SDACodingStandard is set to "SNOMED CT".
The SNOMED Codes and Descriptions for Problem Status are:
55561003 - Active
73425007 - Inactive
90734009 - Chronic
7087005 - Intermittent
255227004 - Recurrent
415684004 - Suspected
410516002 - Ruled out
413322009 - Resolved

HL7: PRB-9 : ActualProblemResolutionDateTime
HL7: PRB-14 : ProblemLifeCycleStatus
SDATableName=DiagnosisStatus, ViewerClass=User.HS.MRCDiagnosStatus
VIEWERLIB: User.HS.MRPresentIllness(PRESIDiagnosStatusDR)
Property methods: StatusGet(), StatusGetObject(), StatusGetObjectId(), StatusGetSwizzled(), StatusIsEmpty(), StatusIsValid(), StatusNewObject(), StatusSet(), StatusSetObject(), StatusSetObjectId(), StatusUnSwizzle()
property ToTime as HS.SDA3.TimeStamp;
HL7ToSDA3:
PRB-9 is used if present, else PRB-8 is used if present.

Viewer cache:
Only the date part of ToTime is stored in the Viewer Cache. (PRESIEndDate
is date-only.)

HL7: PRB-9 : ActualProblemResolutionDateTime
HL7: PRB-8 : AnticipatedProblemResolutionDateTime
VIEWERLIB: User.HS.MRPresentIllness(PRESIEndDate)
Property methods: ToTimeDisplayToLogical(), ToTimeGet(), ToTimeIsValid(), ToTimeLogicalToDisplay(), ToTimeLogicalToTimeStamp(), ToTimeLogicalToXSD(), ToTimeNormalize(), ToTimeOdbcToLogical(), ToTimeSet(), ToTimeXSDToLogical()
property VerificationStatus as HS.SDA3.CodeTableDetail.ConditionVerificationStatus;
The verification status to support the clinical status of the condition. HL7ToSDA3:
PRB-13 will only be parsed if subfield 1 or 2 is not null.

HL7: PRB-13 : ProblemConfirmationStatus
.Code
HL7: PRB-13.1 : ProblemConfirmationStatus.Identifier
.Description
HL7: PRB-13.2 : ProblemConfirmationStatus.Text
.SDACodingStandard
HL7: PRB-13.3 : ProblemConfirmationStatus.NameofCodingSystem
VIEWERLIB: Not stored
Property methods: VerificationStatusGet(), VerificationStatusGetObject(), VerificationStatusGetObjectId(), VerificationStatusGetSwizzled(), VerificationStatusIsEmpty(), VerificationStatusIsValid(), VerificationStatusNewObject(), VerificationStatusSet(), VerificationStatusSetObject(), VerificationStatusSetObjectId(), VerificationStatusUnSwizzle()

Inherited Members

Inherited Properties

Inherited Methods

FeedbackOpens in a new tab