ir

package
v0.0.0-...-e69eef7 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Aug 9, 2023 License: Apache-2.0 Imports: 6 Imported by: 120

Documentation

Overview

Package ir contains data structures related to internal representations of entities within Simulated Hospital.

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type Address

type Address struct {
	FirstLine  string
	SecondLine string
	City       string
	PostalCode string
	Country    string
	// Type is the type of the address, eg. HOME or WORK.
	Type string
}

Address represents a physical address, e.g., a patient's home. Example: 1 Goodwill Hunting Road^^London^^N1C 4AG^GBR^HOME

type Allergy

type Allergy struct {
	Type                   string
	Description            CodedElement
	Severity               string
	Reaction               string
	IdentificationDateTime NullTime
}

Allergy represents an allergy.

type AssociatedParty

type AssociatedParty struct {
	*Person
	Relationship *CodedElement
	ContactRole  *CodedElement
}

AssociatedParty represents a person associated to another person.

type ClinicalNote

type ClinicalNote struct {
	DateTime      NullTime
	DocumentTitle string
	DocumentType  string
	DocumentID    string
	Contents      []*ClinicalNoteContent
}

ClinicalNote represents a Clinical Note. A clinical note is a document with information about a patient. Even if "document" could be more accurate, we prefer to keep the term that clinicians use.

type ClinicalNoteContent

type ClinicalNoteContent struct {
	// ObservationDateTime can be different from the DateTime field in ClinicalNote struct.
	// ObservationDateTime is set when the corresponding content is generated whereas ClinicalNote.DateTime is set when the ClinicalNote is generated.
	ObservationDateTime NullTime
	ContentType         string
	DocumentEncoding    string
	DocumentContent     string
}

ClinicalNoteContent contains data used to generate an OBX segment in a ClinicalNote HL7 message.

type CodedElement

type CodedElement struct {
	ID            string
	Text          string
	CodingSystem  string
	AlternateText string
}

CodedElement represents a HL7v2 Coded Element: https://hl7-definition.caristix.com/v2/HL7v2.2/DataTypes/CE.

type DiagnosisOrProcedure

type DiagnosisOrProcedure struct {
	Description *CodedElement
	Type        string
	Clinician   *Doctor
	DateTime    NullTime
}

DiagnosisOrProcedure represents a clinical diagnosis or procedure.

func (*DiagnosisOrProcedure) Text

func (d *DiagnosisOrProcedure) Text() string

Text returns a human-readable representation of a DiagnosisOrProcedure.

type Doctor

type Doctor struct {
	ID        string
	Surname   string
	FirstName string
	Prefix    string
	Specialty string // This field is not used in message building.
}

Doctor represents a doctor. Example: 216865551019^Osman^Arthur^^^Dr^^^DRNBR^PRSNL^^^ORGDR.

type Document

type Document struct {
	// Fields used in TXA segment.
	ActivityDateTime         NullTime
	EditDateTime             NullTime
	DocumentType             string
	DocumentCompletionStatus string
	UniqueDocumentNumber     string

	// Fields used in OBX segments.
	// ObservationIdentifier populates the OBX.3 (Observation Identifier) field in each OBX segment.
	ObservationIdentifier *CodedElement
	// ContentLine contains values to be set in the OBX.5 (Observation Value) field.
	// Each line generates a different OBX segment.
	ContentLine []string
}

Document represents a generic document. It is used to populate the TXA and OBX segments of an MDM message.

type Encounter

type Encounter struct {
	Status string
	// StatusStart tracks the start time of the current status.
	StatusStart NullTime
	// StatusHistory tracks the lifecycle of this Encounter.
	// e.g. [planned -> arrived -> finished] or [planned -> in-progress -> cancelled]
	StatusHistory []*StatusHistory
	IsPending     bool
	// Start to End encompasses the entire period that this Encounter is active for.
	Start NullTime
	End   NullTime
	// LocationHistory tracks where the patient has been during this Encounter.
	LocationHistory []*LocationHistory
	// Orders tracks the Orders for this Encounter. Each entry in Patient.Orders is associated with
	// exactly one Encounter.
	Orders []*Order
	// Diagnoses and Procedures track the diagnoses and procedures for each Encounter. This is
	// different from PatientInfo.Procedures and PatientInfo.Diagnoses, which are used for building
	// ADT^A31 messages and are cleared after each UpdatePerson step.
	Diagnoses  []*DiagnosisOrProcedure
	Procedures []*DiagnosisOrProcedure
}

Encounter represents an interaction between a patient and healthcare provider.

func (*Encounter) EndEncounter

func (ec *Encounter) EndEncounter(endTime NullTime, newStatus string)

EndEncounter finishes the specified Encounter and sets its status and final location end time. Note that this takes an Encounter as a receiver, unlike AddEncounter.

func (*Encounter) Text

func (ec *Encounter) Text() string

Text returns a human-readable representation of an Encounter.

func (*Encounter) UpdateLocation

func (ec *Encounter) UpdateLocation(startTime NullTime, newLocation *PatientLocation)

UpdateLocation sets the end time of the current location and appends a new entry to an Encounter's location history. If the new location is the same as the current one this is a no-op.

func (*Encounter) UpdateStatus

func (ec *Encounter) UpdateStatus(startTime NullTime, newStatus string)

UpdateStatus ends the current status and appends a new entry to an Encounter's status history. If the new status is the same as the current one, or the start time is before the Encounter's start time, this is a no-op.

type Ethnicity

type Ethnicity CodedElement

Ethnicity is a HL7v2 coded element to represent ethnicities.

type Formattable

type Formattable interface {
	In(loc *time.Location) time.Time
}

Formattable is an interface for formatting dates in different locations.

type LocationHistory

type LocationHistory struct {
	Location *PatientLocation
	Start    NullTime
	End      NullTime
}

LocationHistory represents a patient location along with the period for which the patient was at that location.

type NullTime

type NullTime struct {
	time.Time
	Valid    bool
	Midnight bool
}

NullTime represents a time that can be null.

func NewInvalidTime

func NewInvalidTime() NullTime

NewInvalidTime returns an invalid NullTime.

func NewMidnightTime

func NewMidnightTime(t time.Time) NullTime

NewMidnightTime returns a NullTime from the given time with Midnight and Valid set.

func NewValidTime

func NewValidTime(t time.Time) NullTime

NewValidTime returns a NullTime from the given time with Valid set.

func (*NullTime) GobDecode

func (t *NullTime) GobDecode(data []byte) error

GobDecode performs the inverse of GobEncode. It modifies the receiver, so it must take a pointer receiver.

func (NullTime) GobEncode

func (t NullTime) GobEncode() ([]byte, error)

GobEncode returns the gob encoding of NullTime. This is necessary to prevent `time.Time.GobEncode()` being called instead, which will discard the `Valid` and `Midnight` fields.

type Order

type Order struct {
	// OrderProfile is the order profile for the order.
	OrderProfile *CodedElement
	// Placer is the PlacerOrderNumber to be set in the ORC and OBR segments.
	Placer string
	// Filler is the FillerOrderNumber to be set in the ORC and OBR segments.
	Filler string
	// OrderDateTime is the ORC -> Date/Time of Transaction.
	OrderDateTime NullTime
	// CollectedDateTime is the
	// OBR / OBX -> Observation Date Time (the same for all observations for one report).
	CollectedDateTime NullTime
	// ReceivedInLabDateTime is the OBR -> Specimen Received in Lab.
	ReceivedInLabDateTime NullTime
	// ReportedDateTime is the OBR -> Results Rpt/Status Change.
	ReportedDateTime NullTime
	// OrderControl is the ORC -> Order Control
	// (https://www.hl7.org/fhir/v2/0119/index.html).
	OrderControl string
	// MessageControlIDOriginalOrder is the MSH / MSA -> Message Control ID corresponding to the original Order message.
	MessageControlIDOriginalOrder string
	// OrderStatus is the ORC -> Order Status
	// (http://hl7-definition.caristix.com:9010/HL7%20v2.3.1/Default.aspx?version=HL7%20v2.5.1&table=0038)
	OrderStatus string
	// ResultsStatus is the OBR -> Result Status
	// (http://hl7-definition.caristix.com:9010/HL7%20v2.3.1/Default.aspx?version=HL7%20v2.5.1&table=0123)
	ResultsStatus string
	// Results (observations) relevant to ORU messages. They translate into OBX segments and contain
	// clinically relevant information, for instance:
	// "OBX|1|NM|lpdc-3384^Urea^WinPath||5.0|MMOLL|2.1 - 7.1||||F|||||".
	Results []*Result
	// ResultsForORM are the results to be included in ORM messages. They translate into OBX segments, as for Results.
	// However these are usually not clinically relevant and contain less information than the results
	// in the Results field that contain proper observations.
	// For instance, "OBX|3|CD|PERSONUKRES||Yes".
	ResultsForORM []*Result
	// NotesForORM are the notes for ORM messages. These still generate NTE segments, but such segments are located before
	// the OBX segments and refer to the order in general instead of the results as the Notes field in
	// the Result struct.
	NotesForORM      []string
	OrderingProvider *Doctor
	SpecimenSource   string
	// DiagnosticServID is the value to be set in the Diagnostic Serv Sect ID (OBR.24) field.
	// If the value matches DiagnosticServIDMDOC, the order is for a document/clinical note.
	DiagnosticServID string
	// NumberOfPreviousResults is used to keep track of how many results were already sent for this order.
	// This allows for starting with the correct OBX SetID when sending new results linked to that order.
	NumberOfPreviousResults int
}

Order represents a clinical order.

type PatientInfo

type PatientInfo struct {
	Person               *Person
	Class                string // EMERGENCY / INPATIENT / OUTPATIENT / PREADMIT / RECURRING PATIENT / OBSTETRICS
	Type                 string // values are defined per-trust if this field is used
	VisitID              uint64
	HospitalService      string
	AdmitReason          string
	ReadmissionIndicator string // R is the only value suggested in the hl7 specification

	// Location is the current patient location.
	Location      *PatientLocation
	PriorLocation *PatientLocation
	// PriorLocationForCancelTransfer is the patient's PriorLocation after a CancelTransfer message.
	// After a transfer message we clear the patient's PriorLocation so that it's not included in
	// future messages. However in a CancelTransfer we need to know it so that we can re-instate it.
	PriorLocationForCancelTransfer *PatientLocation
	PendingLocation                *PatientLocation
	PriorPendingLocation           *PatientLocation
	TemporaryLocation              *PatientLocation
	PriorTemporaryLocation         *PatientLocation
	AttendingDoctor                *Doctor
	AccountStatus                  string
	AdmissionDate                  NullTime
	DischargeDate                  NullTime
	TransferDate                   NullTime
	ExpectedAdmitDateTime          NullTime
	ExpectedDischargeDateTime      NullTime
	ExpectedTransferDateTime       NullTime
	AssociatedParties              []*AssociatedParty
	Allergies                      []*Allergy
	// Diagnoses and Procedures are used in UpdatePerson to build ADT^A31 messages and are cleared
	// at the end of the event. Not to be confused with Encounter.Diagnoses and Encounter.Procedures
	// which persist diagnoses and procedures in the medical record.
	Diagnoses       []*DiagnosisOrProcedure
	Procedures      []*DiagnosisOrProcedure
	Encounters      []*Encounter
	PrimaryFacility *PrimaryFacility
	// AdditionalData allows users to enter arbitrary information about a patient's medical record.
	// It is up to the user to decide what data is stored here.
	AdditionalData interface{}
}

PatientInfo represents a patient and related information.

func (*PatientInfo) AddDiagnosesOrProceduresToEncounter

func (p *PatientInfo) AddDiagnosesOrProceduresToEncounter(startTime time.Time, diagnoses []*DiagnosisOrProcedure, procedures []*DiagnosisOrProcedure)

AddDiagnosesOrProceduresToEncounter either adds the specified DiagnosisOrProcedures to the current on-going Encounter, or creates a new Encounter for *each* DiagnosisOrProcedure, if one does not exist.

func (*PatientInfo) AddEncounter

func (p *PatientInfo) AddEncounter(startTime NullTime, status string, loc *PatientLocation) *Encounter

AddEncounter creates a new Encounter, adds it to the list of Encounters, and sets its status and location.

func (*PatientInfo) AddOrderToEncounter

func (p *PatientInfo) AddOrderToEncounter(o *Order)

AddOrderToEncounter either adds the specified order to the current on-going Encounter, or creates a new Encounter for the Order if one does not exist. In the latter case, the new Encounter will contain only that Order, and we set the start/end time of the Encounter to the order/reported time of the Order.

func (*PatientInfo) LatestEncounter

func (p *PatientInfo) LatestEncounter() *Encounter

LatestEncounter retrieves the latest encounter from PatientInfo.

type PatientLocation

type PatientLocation struct {
	Poc          string
	Room         string
	Bed          string
	Facility     string
	LocationType string
	Building     string
	Floor        string
}

PatientLocation represents a patient location within a clinical facility. Example: RAL 12 West^Bay01^Bed10^RAL RF^^BED^RFH^Floor 1.

func (*PatientLocation) Name

func (p *PatientLocation) Name() string

Name returns the name for this location by concatenating non-empty fields.

type Person

type Person struct {
	Prefix         string
	FirstName      string
	MiddleName     string
	Surname        string
	Suffix         string
	Degree         string
	Gender         string
	Ethnicity      *Ethnicity
	Birth          NullTime
	DateOfDeath    NullTime
	Address        *Address
	PhoneNumber    string
	MRN            string
	NHS            string
	DeathIndicator string
}

Person represents a person.

func (*Person) AlternateText

func (p *Person) AlternateText() string

AlternateText returns a more concise representation of a person.

func (*Person) Text

func (p *Person) Text() string

Text returns a human-readable representation of a person i.e. their full name.

type PrimaryFacility

type PrimaryFacility struct {
	Organization string
	// ID is the "XON.3-Id Number" for this primary facility.
	// Id Number is numeric (NM) in HL7:
	// http://hl7-definition.caristix.com:9010/HL7%20v2.3.1/segment/PD1?version=HL7%20v2.3.1&dataType=XON.
	// We make it a string instead because it's more generic.
	// Also, if it's not present, it appears in the HL7 message as an empty field as opposed to a 0.
	ID string
}

PrimaryFacility represents a patient's primary clinical facility (e.g. a GP practice).

type Result

type Result struct {
	TestName            *CodedElement
	Value               string
	Unit                string
	ValueType           string
	Range               string
	AbnormalFlag        string
	ObservationDateTime NullTime
	// Status is the OBX -> Observation Result Status
	// (http://hl7-definition.caristix.com:9010/HL7%20v2.3.1/Default.aspx?version=HL7%20v2.5.1&table=0085).
	Status       string
	Notes        []string
	ClinicalNote *ClinicalNote
}

Result represents a clinical result.

func (*Result) Text

func (r *Result) Text() string

Text returns a human-readable representation of the result.

type StatusHistory

type StatusHistory struct {
	// Status must be a value from the value set EncounterStatus:
	// https://www.hl7.org/fhir/codesystem-encounter-status.html
	Status string
	Start  NullTime
	End    NullTime
}

StatusHistory represents an Encounter's status and its period.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL