VAFHCA08 ;ALB/CM OUTPATIENT A08 GENERATOR ;4/5/95
;;5.3;Registration;**91**;Jun 06, 1996
;
;This function will generator an A08 HL7 message for an outpatient
;event. If the generation is successful, 0 will be returned.
;If for any reason is not successful, -1 and error message will be
;returned.
;
;Two entry points have been provided. The first is for use by the
;Update event outside of an outpatient event. The second is for use
;by the outpatient event. The second will return 0^COUNT, where COUNT
;is the last value entered.
;
UP(DFN,EVENT,NODE,COUNT,GBL,PISTR,ZSTR,PSTR,XSTR,PDNUM,ZNUM,PNUM,XNUM) ;
;
;DFN - Patient file DFN
;EVENT - Event number from pivot file
;NODE - Zero Node of pivot file entry
;COUNT - Subscript to start global/array storage at
;GBL - global or array to store segments
;PISTR - fields to be included in PID (null - required fields,
;or string of fields seperated by commas)
;ZSTR - fields to be included in ZPD (null - required fields,
;or string of fields seperated by commas)
;PSTR - fields to be included in OPV1
;(if null - required fields, if "A" - supported
;fields, or string of fields seperated by commas")
;XSTR - fields to be included in ODG1
;(if null - required fields, if "A" - supported
;fields, or string of fields seperated by commas")
;PDNUM - ID # for PID (optional)
;ZNUM - ID # for ZPD (optional)
;PNUM - ID # for OPV1 (optional)
;XNUM - ID # for ODG1 (optional)
;
;Be sure to have HLENTRY defined before making this call.
; HL("SAN") v1.6 from init^hlfn2
;It should be equal to the HL7 NON-DHCP APPLICATION PARAMETER name
;This is only necessary if passing "A" for the fields.
;
;As well as all variables defined in INIT^HLFNC2
;
I '$D(DFN)!'$D(EVENT)!'$D(NODE)!'$D(GBL) Q "-1^MISSING PARAMETERS"
I $D(HL)=1 Q "-1^"_HL ; this to insure init^hlfnc2 called
I '$D(HL) Q "-1^ No HL Array"
D SET
S UPFLG="",EVDT=$P(NODE,"^"),VPTR=$P(NODE,"^",5)
I '$D(COUNT)!(+COUNT<1) S COUNT=1
;S @GBL@(COUNT)=$$MSH^HLFNC1("ADT"_$E(HL("ECH"))_"A08"),COUNT=COUNT+1
S FLG="05" ;event is new flag
G EN
;
OA08(DFN,EVENT,EVDT,VPTR,PISTR,ZSTR,PSTR,XSTR,PDNUM,ZNUM,PNUM,XNUM) ;
;
;DFN - Patient file DFN
;EVENT - Event number from pivot file
;EVDT - event date/time FileMan format
;VPTR - variable pointer
;PISTR - fields to be included in PID (null - required fields,
;or string of fields seperated by commas)
;ZSTR - fields to be included in ZPD (null - required fields,
;or string of fields seperated by commas)
;PSTR - fields to be included in OPV1
;(if null - required fields, if "A" - supported
;fields, or string of fields seperated by commas")
;XSTR - fields to be included in ODG1
;(if null - required fields, if "A" - supported
;fields, or string of fields seperated by commas")
;PDNUM - ID # for PID (optional)
;ZNUM - ID # for ZPD (optional)
;PNUM - ID # for OPV1 (optional)
;XNUM - ID # for ODG1 (optional)
;
;
I '$D(DFN)&('$D(EVENT))&('$D(EVDT))!('$D(VPTR)) Q "-1^Missing Parameters, Unable to generate A08 Message"
I '$D(DFN) Q "-1^No patient selected, Unable to generate A08 Message"
I DFN="" Q "-1^No patient selected, Unable to generate A08 Message"
I $D(EVENT) I EVENT'="" S NODE=$$PIVX^VAFHPIVT(EVENT,DFN,EVDT)
I $D(EVENT) I EVENT="" K EVENT
D SET
I '$D(EVENT) S NODE=$$PIVNW^VAFHPIVT(DFN,EVDT,2,VPTR),EVENT=$P(NODE,":")
I EVENT<1 Q "-1^Bad Event Number, Unable to generate A08 Message"
S NODE=$P(NODE,":",2)
; hlsdata should not be defined in 1.6 so this should always use hla()
S GBL=$G(HLSDATA) I GBL']"" S GBL="HLA(""HLS"")"
S COUNT=1
S (HLENTRY,HLNDAP)="PIMS HL7" DO I $D(HL)=1 G EXIT
. K HL D INIT^HLFNC2("VAFH A08",.HL) ; ; only for oa08 entry
;call to determine old or new
S FLG="05" ;NEW
N LAST
S LAST=$$LTD^VAFHUTL(DFN)
I $P(LAST,"^")>EVDT S FLG="04" ;OLD
;
EN ;
S EVN=$$EVN^VAFHLEVN("A08",FLG)
I +EVN=-1 S HLERR="-1^UNABLE TO GENERATE EVN SEGMENT" G EXIT
S PID=$$EN^VAFHLPID(DFN,PISTR)
S ZPD=$$EN^VAFHLZPD(DFN,ZSTR)
I $G(^DPT(DFN,.1))]"",$D(UPFLG) DO ; if inpatient get inpat pv1
. S OPV1=$$EN^VAFHAPV1(DFN,$$NOW^XLFDT(),",2,3,7,8,10,19,44,45",,EVENT)
E S OPV1=$$OUT^VAFHLPV1(DFN,EVENT,EVDT,VPTR,PSTR,PNUM)
;
I +OPV1=-1 S HLERR="-1^UNABLE TO GENERATE PV1 SEGMENT" G EXIT
I $D(XSTR) S ODG1=$$OUT^VAFHLDG1(DFN,EVENT,EVDT,VPTR,XSTR,XNUM)
S @GBL@(COUNT)=EVN,COUNT=COUNT+1
S @GBL@(COUNT)=PID M @GBL@(COUNT)=VAPID S COUNT=COUNT+1
S @GBL@(COUNT)=ZPD,COUNT=COUNT+1
; CHANGE BECAUSE PHILLY WANTS "T"
I $P(OPV1,HLFS,3)="" S $P(OPV1,HLFS,3)="T"
S @GBL@(COUNT)=OPV1
I $D(XSTR) I +ODG1'=-1 S COUNT=COUNT+1,@GBL@(COUNT)=ODG1
I '$D(UPFLG) S HLMTN="ADT" DO ; upflag set on EN entry only
. I GBL["^TMP(" DO Q
. . D GENERATE^HLMA("VAFH A08","GM",1,.HLRSLT)
. . K ^TMP("HLS",$J)
. I GBL["HLA(" DO Q
. . D GENERATE^HLMA("VAFH A08","LM",1,.HLRSLT)
. . K HLA
EXIT ;
N TERR ; upflg is set from up entry, HL check is at top
I $D(UPFLG) K UPFLG,EVN,PID,ZPD,OPV1,ODG1 Q "0^"_COUNT
;I $D(HLERR)!$D(HL)=1 S TERR=$G(HLERR)
I $D(HL)=1 S TERR="-1^"_HL
I '$D(HLERR),$D(HL)>1 S TERR=0
I '$D(TERR) S TERR=0 ;just in case
K VAPID,HLRSLT,NODE,EVN,PID,ZPD,OPV1,ODG1,COUNT,FLG,CNT,ERR,EGBL
K HLSDATA,HLEVN,HLMTN,HLENTRY,HLERR,HLNDAP,EFLAG
D KILL^HLTRANS
Q TERR
;
SET ;
I '$D(PNUM) S PNUM=1
I '$D(PDNUM) S PDNUM=1
I '$D(ZNUM) S ZNUM=1
I '$D(XNUM) S XNUM=1
Q
VAFHCA08 ;ALB/CM OUTPATIENT A08 GENERATOR ;4/5/95
+1 ;;5.3;Registration;**91**;Jun 06, 1996
+2 ;
+3 ;This function will generator an A08 HL7 message for an outpatient
+4 ;event. If the generation is successful, 0 will be returned.
+5 ;If for any reason is not successful, -1 and error message will be
+6 ;returned.
+7 ;
+8 ;Two entry points have been provided. The first is for use by the
+9 ;Update event outside of an outpatient event. The second is for use
+10 ;by the outpatient event. The second will return 0^COUNT, where COUNT
+11 ;is the last value entered.
+12 ;
UP(DFN,EVENT,NODE,COUNT,GBL,PISTR,ZSTR,PSTR,XSTR,PDNUM,ZNUM,PNUM,XNUM) ;
+1 ;
+2 ;DFN - Patient file DFN
+3 ;EVENT - Event number from pivot file
+4 ;NODE - Zero Node of pivot file entry
+5 ;COUNT - Subscript to start global/array storage at
+6 ;GBL - global or array to store segments
+7 ;PISTR - fields to be included in PID (null - required fields,
+8 ;or string of fields seperated by commas)
+9 ;ZSTR - fields to be included in ZPD (null - required fields,
+10 ;or string of fields seperated by commas)
+11 ;PSTR - fields to be included in OPV1
+12 ;(if null - required fields, if "A" - supported
+13 ;fields, or string of fields seperated by commas")
+14 ;XSTR - fields to be included in ODG1
+15 ;(if null - required fields, if "A" - supported
+16 ;fields, or string of fields seperated by commas")
+17 ;PDNUM - ID # for PID (optional)
+18 ;ZNUM - ID # for ZPD (optional)
+19 ;PNUM - ID # for OPV1 (optional)
+20 ;XNUM - ID # for ODG1 (optional)
+21 ;
+22 ;Be sure to have HLENTRY defined before making this call.
+23 ; HL("SAN") v1.6 from init^hlfn2
+24 ;It should be equal to the HL7 NON-DHCP APPLICATION PARAMETER name
+25 ;This is only necessary if passing "A" for the fields.
+26 ;
+27 ;As well as all variables defined in INIT^HLFNC2
+28 ;
+29 IF '$DATA(DFN)!'$DATA(EVENT)!'$DATA(NODE)!'$DATA(GBL)
QUIT "-1^MISSING PARAMETERS"
+30 ; this to insure init^hlfnc2 called
IF $DATA(HL)=1
QUIT "-1^"_HL
+31 IF '$DATA(HL)
QUIT "-1^ No HL Array"
+32 DO SET
+33 SET UPFLG=""
SET EVDT=$PIECE(NODE,"^")
SET VPTR=$PIECE(NODE,"^",5)
+34 IF '$DATA(COUNT)!(+COUNT<1)
SET COUNT=1
+35 ;S @GBL@(COUNT)=$$MSH^HLFNC1("ADT"_$E(HL("ECH"))_"A08"),COUNT=COUNT+1
+36 ;event is new flag
SET FLG="05"
+37 GOTO EN
+38 ;
OA08(DFN,EVENT,EVDT,VPTR,PISTR,ZSTR,PSTR,XSTR,PDNUM,ZNUM,PNUM,XNUM) ;
+1 ;
+2 ;DFN - Patient file DFN
+3 ;EVENT - Event number from pivot file
+4 ;EVDT - event date/time FileMan format
+5 ;VPTR - variable pointer
+6 ;PISTR - fields to be included in PID (null - required fields,
+7 ;or string of fields seperated by commas)
+8 ;ZSTR - fields to be included in ZPD (null - required fields,
+9 ;or string of fields seperated by commas)
+10 ;PSTR - fields to be included in OPV1
+11 ;(if null - required fields, if "A" - supported
+12 ;fields, or string of fields seperated by commas")
+13 ;XSTR - fields to be included in ODG1
+14 ;(if null - required fields, if "A" - supported
+15 ;fields, or string of fields seperated by commas")
+16 ;PDNUM - ID # for PID (optional)
+17 ;ZNUM - ID # for ZPD (optional)
+18 ;PNUM - ID # for OPV1 (optional)
+19 ;XNUM - ID # for ODG1 (optional)
+20 ;
+21 ;
+22 IF '$DATA(DFN)&('$DATA(EVENT))&('$DATA(EVDT))!('$DATA(VPTR))
QUIT "-1^Missing Parameters, Unable to generate A08 Message"
+23 IF '$DATA(DFN)
QUIT "-1^No patient selected, Unable to generate A08 Message"
+24 IF DFN=""
QUIT "-1^No patient selected, Unable to generate A08 Message"
+25 IF $DATA(EVENT)
IF EVENT'=""
SET NODE=$$PIVX^VAFHPIVT(EVENT,DFN,EVDT)
+26 IF $DATA(EVENT)
IF EVENT=""
KILL EVENT
+27 DO SET
+28 IF '$DATA(EVENT)
SET NODE=$$PIVNW^VAFHPIVT(DFN,EVDT,2,VPTR)
SET EVENT=$PIECE(NODE,":")
+29 IF EVENT<1
QUIT "-1^Bad Event Number, Unable to generate A08 Message"
+30 SET NODE=$PIECE(NODE,":",2)
+31 ; hlsdata should not be defined in 1.6 so this should always use hla()
+32 SET GBL=$GET(HLSDATA)
IF GBL']""
SET GBL="HLA(""HLS"")"
+33 SET COUNT=1
+34 SET (HLENTRY,HLNDAP)="PIMS HL7"
Begin DoDot:1
+35 ; ; only for oa08 entry
KILL HL
DO INIT^HLFNC2("VAFH A08",.HL)
End DoDot:1
IF $DATA(HL)=1
GOTO EXIT
+36 ;call to determine old or new
+37 ;NEW
SET FLG="05"
+38 NEW LAST
+39 SET LAST=$$LTD^VAFHUTL(DFN)
+40 ;OLD
IF $PIECE(LAST,"^")>EVDT
SET FLG="04"
+41 ;
EN ;
+1 SET EVN=$$EVN^VAFHLEVN("A08",FLG)
+2 IF +EVN=-1
SET HLERR="-1^UNABLE TO GENERATE EVN SEGMENT"
GOTO EXIT
+3 SET PID=$$EN^VAFHLPID(DFN,PISTR)
+4 SET ZPD=$$EN^VAFHLZPD(DFN,ZSTR)
+5 ; if inpatient get inpat pv1
IF $GET(^DPT(DFN,.1))]""
IF $DATA(UPFLG)
Begin DoDot:1
+6 SET OPV1=$$EN^VAFHAPV1(DFN,$$NOW^XLFDT(),",2,3,7,8,10,19,44,45",,EVENT)
End DoDot:1
+7 IF '$TEST
SET OPV1=$$OUT^VAFHLPV1(DFN,EVENT,EVDT,VPTR,PSTR,PNUM)
+8 ;
+9 IF +OPV1=-1
SET HLERR="-1^UNABLE TO GENERATE PV1 SEGMENT"
GOTO EXIT
+10 IF $DATA(XSTR)
SET ODG1=$$OUT^VAFHLDG1(DFN,EVENT,EVDT,VPTR,XSTR,XNUM)
+11 SET @GBL@(COUNT)=EVN
SET COUNT=COUNT+1
+12 SET @GBL@(COUNT)=PID
MERGE @GBL@(COUNT)=VAPID
SET COUNT=COUNT+1
+13 SET @GBL@(COUNT)=ZPD
SET COUNT=COUNT+1
+14 ; CHANGE BECAUSE PHILLY WANTS "T"
+15 IF $PIECE(OPV1,HLFS,3)=""
SET $PIECE(OPV1,HLFS,3)="T"
+16 SET @GBL@(COUNT)=OPV1
+17 IF $DATA(XSTR)
IF +ODG1'=-1
SET COUNT=COUNT+1
SET @GBL@(COUNT)=ODG1
+18 ; upflag set on EN entry only
IF '$DATA(UPFLG)
SET HLMTN="ADT"
Begin DoDot:1
+19 IF GBL["^TMP("
Begin DoDot:2
+20 DO GENERATE^HLMA("VAFH A08","GM",1,.HLRSLT)
+21 KILL ^TMP("HLS",$JOB)
End DoDot:2
QUIT
+22 IF GBL["HLA("
Begin DoDot:2
+23 DO GENERATE^HLMA("VAFH A08","LM",1,.HLRSLT)
+24 KILL HLA
End DoDot:2
QUIT
End DoDot:1
EXIT ;
+1 ; upflg is set from up entry, HL check is at top
NEW TERR
+2 IF $DATA(UPFLG)
KILL UPFLG,EVN,PID,ZPD,OPV1,ODG1
QUIT "0^"_COUNT
+3 ;I $D(HLERR)!$D(HL)=1 S TERR=$G(HLERR)
+4 IF $DATA(HL)=1
SET TERR="-1^"_HL
+5 IF '$DATA(HLERR)
IF $DATA(HL)>1
SET TERR=0
+6 ;just in case
IF '$DATA(TERR)
SET TERR=0
+7 KILL VAPID,HLRSLT,NODE,EVN,PID,ZPD,OPV1,ODG1,COUNT,FLG,CNT,ERR,EGBL
+8 KILL HLSDATA,HLEVN,HLMTN,HLENTRY,HLERR,HLNDAP,EFLAG
+9 DO KILL^HLTRANS
+10 QUIT TERR
+11 ;
SET ;
+1 IF '$DATA(PNUM)
SET PNUM=1
+2 IF '$DATA(PDNUM)
SET PDNUM=1
+3 IF '$DATA(ZNUM)
SET ZNUM=1
+4 IF '$DATA(XNUM)
SET XNUM=1
+5 QUIT