HLPA108A ;CIOFO-SF/RJH - HL7 PATCH 108 PRE&POST-INIT ;02/25/04 16:19
;;1.6;HEALTH LEVEL SEVEN;**108**;Oct 13, 1995
;
; Pre-install II:
; Entries: PTR771, PEVE, PMSG, and PMSG, are called from HLPAT108
Q
PTR771 ; resolve pointers for sub-field #771.06,.01 of field #771,6
; and #771.05,.01 of field #771,5
;
; HLMSGP: pointer to file #771.2
; HLMSGPN: redirected new pointer to file #771.2
; HLSEGP: pointer to file #771.3
; HLSEGPN: redirected new pointer to file #771.3
;
N HLIEN,HLIEN2,HLMSGP,HLMSGPN,DIE,DA,DR
N HLSEGP,HLSEGPN
S HLIEN=0
F S HLIEN=$O(^HL(771,HLIEN)) Q:'HLIEN D
. I $D(^HL(771,HLIEN,"MSG")) D
.. S HLIEN2=0
.. F S HLIEN2=$O(^HL(771,HLIEN,"MSG",HLIEN2)) Q:'HLIEN2 D
... I $D(^HL(771,HLIEN,"MSG",HLIEN2,0)) D
.... S HLMSGP=$P(^HL(771,HLIEN,"MSG",HLIEN2,0),"^")
.... S HLMSGPN=0
.... I HLMSGP>0 S HLMSGPN=$$PMSG^HLPA108A(HLMSGP)
.... ; redirect pointer for SUB-field #771.06,.01 of field #771,6
.... I HLMSGPN D
..... S DIE="^HL(771,"_HLIEN_",""MSG"","
..... S DA(1)=HLIEN
..... S DA=HLIEN2
..... S DR=".01////"_HLMSGPN
..... D ^DIE
. I $D(^HL(771,HLIEN,"SEG")) D
.. S HLIEN2=0
.. F S HLIEN2=$O(^HL(771,HLIEN,"SEG",HLIEN2)) Q:'HLIEN2 D
... I $D(^HL(771,HLIEN,"SEG",HLIEN2,0)) D
.... S HLSEGP=$P(^HL(771,HLIEN,"SEG",HLIEN2,0),"^")
.... S HLSEGPN=0
.... I HLSEGP>0 S HLSEGPN=$$PSEG^HLPA108A(HLSEGP)
.... ; redirect pointer for SUB-field #771.05,.01 of field #771,5
.... I HLSEGPN D
..... S DIE="^HL(771,"_HLIEN_",""SEG"","
..... S DA(1)=HLIEN
..... S DA=HLIEN2
..... S DR=".01////"_HLSEGPN
..... D ^DIE
Q
;
PEVN(HLIEN) ; resolve event pointer
;
; HLEVN: original event type name
; HLEVN2: the event type name in the duplicate event array
; HLSUB: the 2nd subscript of the duplicate event array
; HLIEN: the IEN for the original event type
; HLNIEN: the IEN for the first event type found in the file
; output: HLNIEN - return 0 if no duplicate,
; return the new pointer HLNIEN if duplicate
;
N HLEVN,HLEVN2,HLSUB,HLDONE,HLNIEN
Q:'$D(^HL(779.001,HLIEN,0)) 0
S HLNIEN=0
S HLEVN=$P(^HL(779.001,HLIEN,0),"^")
I HLEVN'="" D
. S HLEVN2=""
. F S HLEVN2=$O(HLEVNARY(HLEVN2)) Q:(HLEVN2="") D Q:(HLEVN2=HLEVN)
.. I HLEVN2=HLEVN D
... S HLSUB=0,HLDONE=0,HLNIEN=0
... F S HLSUB=$O(HLEVNARY(HLEVN,HLSUB)) Q:('HLSUB) D Q:HLDONE
.... I HLEVNARY(HLEVN,HLSUB)=HLIEN S HLDONE=1 D
..... I HLSUB>1 S HLNIEN=HLEVNARY(HLEVN,1)
Q HLNIEN
;
PMSG(HLIEN) ; resolve message pointer
;
; HLMSG: original message type name
; HLMSG2: the message type name in the duplicate message array
; HLSUB: the 2nd subscript of the duplicate message array
; HLIEN: the IEN for the original message type
; HLNIEN: the IEN for the first message type found in the file
; output: HLNIEN - return 0 if no duplicate,
; return the new pointer HLNIEN if duplicate
;
N HLMSG,HLMSG2,HLSUB,HLDONE,HLNIEN
Q:'$D(^HL(771.2,HLIEN,0)) 0
S HLNIEN=0
S HLMSG=$P(^HL(771.2,HLIEN,0),"^")
I HLMSG'="" D
. S HLMSG2=""
. F S HLMSG2=$O(HLMSGARY(HLMSG2)) Q:(HLMSG2="") D Q:(HLMSG2=HLMSG)
.. I HLMSG2=HLMSG D
... S HLSUB=0,HLDONE=0,HLNIEN=0
... F S HLSUB=$O(HLMSGARY(HLMSG,HLSUB)) Q:('HLSUB) D Q:HLDONE
.... I HLMSGARY(HLMSG,HLSUB)=HLIEN S HLDONE=1 D
..... I HLSUB>1 S HLNIEN=HLMSGARY(HLMSG,1)
Q HLNIEN
;
PSEG(HLIEN) ; resolve segment pointer
;
; HLSEG: original segment type name
; HLSEG2: the segment type name in the duplicate segment array
; HLSUB: the 2nd subscript of the duplicate segment array
; HLIEN: the IEN for the original segment type
; HLNIEN: the IEN for the first segment type found in the file
; output: HLNIEN - return 0 if no duplicate,
; return the new pointer HLNIEN if duplicate
;
N HLSEG,HLSEG2,HLSUB,HLDONE,HLNIEN
Q:'$D(^HL(771.3,HLIEN,0)) 0
S HLNIEN=0
S HLSEG=$P(^HL(771.3,HLIEN,0),"^")
I HLSEG'="" D
. S HLSEG2=""
. F S HLSEG2=$O(HLSEGARY(HLSEG2)) Q:(HLSEG2="") D Q:(HLSEG2=HLSEG)
.. I HLSEG2=HLSEG D
... S HLSUB=0,HLDONE=0,HLNIEN=0
... F S HLSUB=$O(HLSEGARY(HLSEG,HLSUB)) Q:('HLSUB) D Q:HLDONE
.... I HLSEGARY(HLSEG,HLSUB)=HLIEN S HLDONE=1 D
..... I HLSUB>1 S HLNIEN=HLSEGARY(HLSEG,1)
Q HLNIEN
;
HLPA108A ;CIOFO-SF/RJH - HL7 PATCH 108 PRE&POST-INIT ;02/25/04 16:19
+1 ;;1.6;HEALTH LEVEL SEVEN;**108**;Oct 13, 1995
+2 ;
+3 ; Pre-install II:
+4 ; Entries: PTR771, PEVE, PMSG, and PMSG, are called from HLPAT108
+5 QUIT
PTR771 ; resolve pointers for sub-field #771.06,.01 of field #771,6
+1 ; and #771.05,.01 of field #771,5
+2 ;
+3 ; HLMSGP: pointer to file #771.2
+4 ; HLMSGPN: redirected new pointer to file #771.2
+5 ; HLSEGP: pointer to file #771.3
+6 ; HLSEGPN: redirected new pointer to file #771.3
+7 ;
+8 NEW HLIEN,HLIEN2,HLMSGP,HLMSGPN,DIE,DA,DR
+9 NEW HLSEGP,HLSEGPN
+10 SET HLIEN=0
+11 FOR
SET HLIEN=$ORDER(^HL(771,HLIEN))
IF 'HLIEN
QUIT
Begin DoDot:1
+12 IF $DATA(^HL(771,HLIEN,"MSG"))
Begin DoDot:2
+13 SET HLIEN2=0
+14 FOR
SET HLIEN2=$ORDER(^HL(771,HLIEN,"MSG",HLIEN2))
IF 'HLIEN2
QUIT
Begin DoDot:3
+15 IF $DATA(^HL(771,HLIEN,"MSG",HLIEN2,0))
Begin DoDot:4
+16 SET HLMSGP=$PIECE(^HL(771,HLIEN,"MSG",HLIEN2,0),"^")
+17 SET HLMSGPN=0
+18 IF HLMSGP>0
SET HLMSGPN=$$PMSG^HLPA108A(HLMSGP)
+19 ; redirect pointer for SUB-field #771.06,.01 of field #771,6
+20 IF HLMSGPN
Begin DoDot:5
+21 SET DIE="^HL(771,"_HLIEN_",""MSG"","
+22 SET DA(1)=HLIEN
+23 SET DA=HLIEN2
+24 SET DR=".01////"_HLMSGPN
+25 DO ^DIE
End DoDot:5
End DoDot:4
End DoDot:3
End DoDot:2
+26 IF $DATA(^HL(771,HLIEN,"SEG"))
Begin DoDot:2
+27 SET HLIEN2=0
+28 FOR
SET HLIEN2=$ORDER(^HL(771,HLIEN,"SEG",HLIEN2))
IF 'HLIEN2
QUIT
Begin DoDot:3
+29 IF $DATA(^HL(771,HLIEN,"SEG",HLIEN2,0))
Begin DoDot:4
+30 SET HLSEGP=$PIECE(^HL(771,HLIEN,"SEG",HLIEN2,0),"^")
+31 SET HLSEGPN=0
+32 IF HLSEGP>0
SET HLSEGPN=$$PSEG^HLPA108A(HLSEGP)
+33 ; redirect pointer for SUB-field #771.05,.01 of field #771,5
+34 IF HLSEGPN
Begin DoDot:5
+35 SET DIE="^HL(771,"_HLIEN_",""SEG"","
+36 SET DA(1)=HLIEN
+37 SET DA=HLIEN2
+38 SET DR=".01////"_HLSEGPN
+39 DO ^DIE
End DoDot:5
End DoDot:4
End DoDot:3
End DoDot:2
End DoDot:1
+40 QUIT
+41 ;
PEVN(HLIEN) ; resolve event pointer
+1 ;
+2 ; HLEVN: original event type name
+3 ; HLEVN2: the event type name in the duplicate event array
+4 ; HLSUB: the 2nd subscript of the duplicate event array
+5 ; HLIEN: the IEN for the original event type
+6 ; HLNIEN: the IEN for the first event type found in the file
+7 ; output: HLNIEN - return 0 if no duplicate,
+8 ; return the new pointer HLNIEN if duplicate
+9 ;
+10 NEW HLEVN,HLEVN2,HLSUB,HLDONE,HLNIEN
+11 IF '$DATA(^HL(779.001,HLIEN,0))
QUIT 0
+12 SET HLNIEN=0
+13 SET HLEVN=$PIECE(^HL(779.001,HLIEN,0),"^")
+14 IF HLEVN'=""
Begin DoDot:1
+15 SET HLEVN2=""
+16 FOR
SET HLEVN2=$ORDER(HLEVNARY(HLEVN2))
IF (HLEVN2="")
QUIT
Begin DoDot:2
+17 IF HLEVN2=HLEVN
Begin DoDot:3
+18 SET HLSUB=0
SET HLDONE=0
SET HLNIEN=0
+19 FOR
SET HLSUB=$ORDER(HLEVNARY(HLEVN,HLSUB))
IF ('HLSUB)
QUIT
Begin DoDot:4
+20 IF HLEVNARY(HLEVN,HLSUB)=HLIEN
SET HLDONE=1
Begin DoDot:5
+21 IF HLSUB>1
SET HLNIEN=HLEVNARY(HLEVN,1)
End DoDot:5
End DoDot:4
IF HLDONE
QUIT
End DoDot:3
End DoDot:2
IF (HLEVN2=HLEVN)
QUIT
End DoDot:1
+22 QUIT HLNIEN
+23 ;
PMSG(HLIEN) ; resolve message pointer
+1 ;
+2 ; HLMSG: original message type name
+3 ; HLMSG2: the message type name in the duplicate message array
+4 ; HLSUB: the 2nd subscript of the duplicate message array
+5 ; HLIEN: the IEN for the original message type
+6 ; HLNIEN: the IEN for the first message type found in the file
+7 ; output: HLNIEN - return 0 if no duplicate,
+8 ; return the new pointer HLNIEN if duplicate
+9 ;
+10 NEW HLMSG,HLMSG2,HLSUB,HLDONE,HLNIEN
+11 IF '$DATA(^HL(771.2,HLIEN,0))
QUIT 0
+12 SET HLNIEN=0
+13 SET HLMSG=$PIECE(^HL(771.2,HLIEN,0),"^")
+14 IF HLMSG'=""
Begin DoDot:1
+15 SET HLMSG2=""
+16 FOR
SET HLMSG2=$ORDER(HLMSGARY(HLMSG2))
IF (HLMSG2="")
QUIT
Begin DoDot:2
+17 IF HLMSG2=HLMSG
Begin DoDot:3
+18 SET HLSUB=0
SET HLDONE=0
SET HLNIEN=0
+19 FOR
SET HLSUB=$ORDER(HLMSGARY(HLMSG,HLSUB))
IF ('HLSUB)
QUIT
Begin DoDot:4
+20 IF HLMSGARY(HLMSG,HLSUB)=HLIEN
SET HLDONE=1
Begin DoDot:5
+21 IF HLSUB>1
SET HLNIEN=HLMSGARY(HLMSG,1)
End DoDot:5
End DoDot:4
IF HLDONE
QUIT
End DoDot:3
End DoDot:2
IF (HLMSG2=HLMSG)
QUIT
End DoDot:1
+22 QUIT HLNIEN
+23 ;
PSEG(HLIEN) ; resolve segment pointer
+1 ;
+2 ; HLSEG: original segment type name
+3 ; HLSEG2: the segment type name in the duplicate segment array
+4 ; HLSUB: the 2nd subscript of the duplicate segment array
+5 ; HLIEN: the IEN for the original segment type
+6 ; HLNIEN: the IEN for the first segment type found in the file
+7 ; output: HLNIEN - return 0 if no duplicate,
+8 ; return the new pointer HLNIEN if duplicate
+9 ;
+10 NEW HLSEG,HLSEG2,HLSUB,HLDONE,HLNIEN
+11 IF '$DATA(^HL(771.3,HLIEN,0))
QUIT 0
+12 SET HLNIEN=0
+13 SET HLSEG=$PIECE(^HL(771.3,HLIEN,0),"^")
+14 IF HLSEG'=""
Begin DoDot:1
+15 SET HLSEG2=""
+16 FOR
SET HLSEG2=$ORDER(HLSEGARY(HLSEG2))
IF (HLSEG2="")
QUIT
Begin DoDot:2
+17 IF HLSEG2=HLSEG
Begin DoDot:3
+18 SET HLSUB=0
SET HLDONE=0
SET HLNIEN=0
+19 FOR
SET HLSUB=$ORDER(HLSEGARY(HLSEG,HLSUB))
IF ('HLSUB)
QUIT
Begin DoDot:4
+20 IF HLSEGARY(HLSEG,HLSUB)=HLIEN
SET HLDONE=1
Begin DoDot:5
+21 IF HLSUB>1
SET HLNIEN=HLSEGARY(HLSEG,1)
End DoDot:5
End DoDot:4
IF HLDONE
QUIT
End DoDot:3
End DoDot:2
IF (HLSEG2=HLSEG)
QUIT
End DoDot:1
+22 QUIT HLNIEN
+23 ;