VistA-FOIAVistA/r/HEALTH_LEVEL_SEVEN-HL/HLOPRS2.m

235 lines
9.3 KiB
Mathematica

HLOPRS2 ;ALB/CJM-HL7 - Developer API's for parsing messages(continued) ;02/04/2004
;;1.6;HEALTH LEVEL SEVEN;**131**;Oct 13, 1995;Build 10
;
GETTS(SEG,VALUE,FIELD,COMP,REP) ;
;Gets a segment value that is a timestamp in HL7 format and converts it
;to FileMan format. IF the segment value included the timezone, it is
;the timestamp is converted to local time. The degree of precision
;is optionally returned.
;
;IF the component is specified, then the component is parsed for data type rather than at the higher field level.
;
;
;Input:
; SEG - (required, pass by reference) The array returned by a call to $$NEXTSEG^HLOPRS.
; FIELD - The sequence # of the field.
; COMP (optional) If specified, the data type is parsed as a component value.
; REP - The occurrence # (optional, defaults to 1). For a non-repeating fields, this parameter is not necessary.
;Output:
; VALUE (required) The date/time in FileMan format.
; VALUE("PRECISION") (optional) If needed, VALUE must be passed by
; reference. Expected values are:
; "S" - second
; "M" - minute
; "H" - hour
; "D" - day
; "L" - month
; "Y" - year
; "" - precision not specified
; Note: FM does not allow greater precision than seconds, so this API will round off to the second.
;
N TIME,PREC,VAR
Q:'$G(FIELD)
I '$G(COMP) D
.S VAR="COMP",SUB=1
E D
.S VAR="SUB"
S:'$G(REP) REP=1
S @VAR=1,TIME=$$GET^HLOPRS(.SEG,FIELD,COMP,SUB,REP)
S @VAR=2,PREC=$$GET^HLOPRS(.SEG,FIELD,COMP,SUB,REP)
S VALUE=$$HL7TFM^XLFDT(TIME)
I '$L(PREC) D
.I $L(+TIME)>12 S PREC="S" Q
.I $L(+TIME)>10 S PREC="M" Q
.I $L(+TIME)>8 S PREC="H" Q
.I $L(+TIME)>6 S PREC="D" Q
.I $L(+TIME)>4 S PREC="L" Q
.I $L(+TIME)=4 S PREC="Y" Q
S VALUE("PRECISION")=PREC
Q
;
GETDT(SEG,VALUE,FIELD,COMP,REP) ;
;Gets a segment value that is a date in HL7 format and converts it to FileMan format. The degree of precision is optionally returned.
;IF the component is specified, then the component is parsed for data type rather than at the higher field level.
;
;Input:
; SEG - (required, pass by reference) The array returned by a call to $$NEXTSEG^HLOPRS.
; FIELD - The sequence # of the field.
; COMP (optional) If specified, the data type is parsed as a component value.
; REP - the occurrence# (optional, defaults to 1) For a non-repeating fields, this parameter is not necessary.
;Output:
; VALUE (required) The date/time in FileMan format.
; VALUE("PRECISION") (optional) If needed, VALUE must be passed by
; reference. Expected values are:
; "S" - second (not valid for DT)
; "M" - minute (not valid for DT)
; "H" - hour (not valid for DT)
; "D" - day
; "L" - month
; "Y" - year
; "" - not specified
;
N TIME,PREC,VAR
Q:'$G(FIELD)
I '$G(COMP) D
.S VAR="COMP",SUB=1
E D
.S VAR="SUB"
S:'$G(REP) REP=1
S @VAR=1,TIME=$$GET^HLOPRS(.SEG,FIELD,COMP,SUB,REP)
S VALUE=$$HL7TFM^XLFDT(TIME)
S PREC=""
D
.I $L(+TIME)>12 S PREC="S" Q
.I $L(+TIME)>10 S PREC="M" Q
.I $L(+TIME)>8 S PREC="H" Q
.I $L(+TIME)>6 S PREC="D" Q
.I $L(+TIME)>4 S PREC="L" Q
.I $L(+TIME)=4 S PREC="Y" Q
S VALUE("PRECISION")=PREC
Q
;
GETCE(SEG,VALUE,FIELD,COMP,REP) ;
;Gets an CE data type(Coded Element, HL7 Section Reference 2.9.8) from the specified field.
;IF the component is specified, then the component is parsed for data type rather than at the higher field level.
;
;Input:
; SEG - (required, pass by reference) The array returned by a call to NEXTSEG^HLOPRS.
; FIELD (required) The sequence # of the field.
; COMP (optional) If specified, the data type is parsed as a component value.
; REP - The occurrence # (optional, defaults to 1). For a non-repeating fields, this parameter is not necessary.
;Output:
; VALUE (required, pass-by-reference) These subscripts are returned:
; "ID" - the identifier
; "TEXT" -
; "SYSTEM" - name of the code system
; "ALTERNATE ID" - alternate identifier
; "ALTERNATE TEXT"
; "ALTERNATE SYSTEM" - name of the alternate coding system
;
N SUB,VAR
Q:'$G(FIELD)
S:'$G(REP) REP=1
I '$G(COMP) D
.S VAR="COMP",SUB=1
E D
.S VAR="SUB"
S @VAR=1,VALUE("ID")=$$GET^HLOPRS(.SEG,FIELD,COMP,SUB,REP)
S @VAR=2,VALUE("TEXT")=$$GET^HLOPRS(.SEG,FIELD,COMP,SUB,REP)
S @VAR=3,VALUE("SYSTEM")=$$GET^HLOPRS(.SEG,FIELD,COMP,SUB,REP)
S @VAR=4,VALUE("ALTERNATE ID")=$$GET^HLOPRS(.SEG,FIELD,COMP,SUB,REP)
S @VAR=5,VALUE("ALTERNATE TEXT")=$$GET^HLOPRS(.SEG,FIELD,COMP,SUB,REP)
S @VAR=6,VALUE("ALTERNATE SYSTEM")=$$GET^HLOPRS(.SEG,FIELD,COMP,SUB,REP)
Q
;
GETHD(SEG,VALUE,FIELD,COMP,REP) ;
;Gets an HD data type (Hierarchic Designator, HL7 Section Reference 2.9.21) from the specified field.
;IF the component is specified, then the component is parsed for data type rather than at the higher field level.
;
;Input:
; SEG - (required, pass by reference) The array returned by a call to NEXTSEG^HLOPRS.
; FIELD (required) The sequence # of the field.
; COMP (optional) If specified, the data type is parsed as a component value.
; REP - The occurrence # (optional, defaults to 1). For a non-repeating fields, this parameter is not necessary.
;Output:
; VALUE (required, pass-by-reference) These subscripts are returned:
; "NAMESPACE ID"
; "UNIVERSAL ID"
; "UNIVERSAL ID TYPE"
;
N SUB,VAR
Q:'$G(FIELD)
S:'$G(REP) REP=1
I '$G(COMP) D
.S VAR="COMP",SUB=1
E D
.S VAR="SUB"
S @VAR=1,VALUE("NAMESPACE ID")=$$GET^HLOPRS(.SEG,FIELD,COMP,SUB,REP)
S @VAR=2,VALUE("UNIVERSAL ID")=$$GET^HLOPRS(.SEG,FIELD,COMP,SUB,REP)
S @VAR=3,VALUE("UNIVERSAL ID TYPE")=$$GET^HLOPRS(.SEG,FIELD,COMP,SUB,REP)
Q
;
GETCNE(SEG,VALUE,FIELD,COMP,REP) ;
;Gets an CNE data type (Coded With No Exceptions, HL7 Section Reference 2.9.8) from the specified field.
;IF the component is specified, then the component is parsed for data type rather than at the higher field level.
;
;Input:
; SEG - (required, pass by reference) The array returned by a call to NEXTSEG^HLOPRS.
; FIELD (required) The sequence # of the field.
; COMP (optional) If specified, the data type is parsed as a component value.
; REP - The occurrence # (optional, defaults to 1). For a non-repeating fields, this parameter is not necessary.
;Output:
; VALUE (required, pass-by-reference) These subscripts are returned:
; "ID" - the identifier
; "TEXT" -
; "SYSTEM" - name of the code system
; "ALTERNATE ID" - alternate identifier
; "ALTERNATE TEXT"
; "ALTERNATE SYSTEM" - name of the alternate coding system
; "SYSTEM VERSION" - version ID of the coding system
; "ALTERNATE SYSTEM VERSION" - version ID of the alternate coding system
; "ORIGINAL TEXT"
;
D GETCODE^HLOPRS1(.SEG,.VALUE,.FIELD,.COMP,.REP)
Q
;
GETCWE(SEG,VALUE,FIELD,COMP,REP) ;
;Gets an CWE data type (Coded With Exceptions, HL7 Section Reference 2.9.11) from the specified field.
;IF the component is specified, then the component is parsed for the data type rather than at the higher field level.
;
;Input:
; SEG - (required, pass by reference) The array returned by a call to NEXTSEG^HLOPRS.
; FIELD (required) The sequence # of the field.
; COMP (optional) If specified, the data type is parsed as a component value.
; REP - The occurrence # (optional, defaults to 1). For a non-repeating fields, this parameter is not necessary.
;Output:
; VALUE (required, pass-by-reference) These subscripts are returned:
; "ID" - the identifier
; "TEXT" -
; "SYSTEM" - name of the code system
; "ALTERNATE ID" - alternate identifier
; "ALTERNATE TEXT"
; "ALTERNATE SYSTEM" - name of the alternate coding system
; "SYSTEM VERSION" - version ID of the coding system
; "ALTERNATE SYSTEM VERSION" - version ID of the alternate coding system
; "ORIGINAL TEXT"
D GETCODE^HLOPRS1(.SEG,.VALUE,.FIELD,.COMP,.REP)
Q
;
GETAD(SEG,VALUE,FIELD,COMP,REP) ;
;Gets an AD data type (Address, HL7 Section Reference 2.9.1) from the specified field. It can also be used to get the 1st 8 components of the XAD (Extended Address) data type.
;IF the component is specified, then the component is parsed for the address rather than at the higher field level.
;
;Input:
; SEG - (required, pass by reference) The array returned by a call to NEXTSEG^HLOPRS.
; FIELD (required) The sequence # of the field.
; COMP (optional) If specified, the data type is parsed as a component value.
; REP - The occurrence # (optional, defaults to 1). For a non-repeating fields, this parameter is not necessary.
;Output:
; VALUE (required, pass-by-reference) These subscripts are returned:
; "STREET1" -street address
; "STREET2" - other designation
; "CITY"
; "STATE" - state or province
; "ZIP" - zip or postal code
; "COUNTRY"
; "TYPE" - address type
; "OTHER" - other geographic designation
;
N SUB,VAR
Q:'$G(FIELD)
I '$G(COMP) D
.S VAR="COMP",SUB=1
E D
.S VAR="SUB"
S:'$G(REP) REP=1
S @VAR=1,VALUE("STREET1")=$$GET^HLOPRS(.SEG,FIELD,COMP,SUB,REP)
S @VAR=2,VALUE("STREET2")=$$GET^HLOPRS(.SEG,FIELD,COMP,SUB,REP)
S @VAR=3,VALUE("CITY")=$$GET^HLOPRS(.SEG,FIELD,COMP,SUB,REP)
S @VAR=4,VALUE("STATE")=$$GET^HLOPRS(.SEG,FIELD,COMP,SUB,REP)
S @VAR=5,VALUE("ZIP")=$$GET^HLOPRS(.SEG,FIELD,COMP,SUB,REP)
S @VAR=6,VALUE("COUNTRY")=$$GET^HLOPRS(.SEG,FIELD,COMP,SUB,REP)
S @VAR=7,VALUE("TYPE")=$$GET^HLOPRS(.SEG,FIELD,COMP,SUB,REP)
S @VAR=8,VALUE("OTHER")=$$GET^HLOPRS(.SEG,FIELD,COMP,SUB,REP)
Q