VAFHCPV ;ALB/CM OUTPATIENT PV1 SEGMENT ; 22 Jan 2002 10:28 AM
;;5.3;Registration;**91,151,298,494,573**;Aug 13, 1993
;
;This routine generates the Outpatient PV1 segment
;for the Philly project
;
;07/12/00 ACS - Added Facility and Suffix to sequence 39
;
OPV1(DFN,EVENT,EVDT,VPTR,PSTR,PNUM) ;
;
;B
;DFN - Patient File
;EVENT - event number from pivot file
;EVDT - event date/time in FileMan format
;VPTR - variable pointer
;PSTSR - string of fields (if null - required fields, if "A" - supported
;fields, or string of fields separated by commas")
;PNUM - ID # - always 1 (optional)
;
N RESULT
S RESULT="PV1"_HLFS_HLFS_"O"
I '$D(DFN)!('$D(EVENT))!('$D(EVDT))!('$D(VPTR)) Q RESULT
I $D(EVENT) I EVENT'="" S NODE=$$PIVX^VAFHPIVT(EVENT,DFN,EVDT)
I $D(EVENT) I EVENT="" K EVENT
I '$D(EVENT) S NODE=$$PIVNW^VAFHPIVT(DFN,EVDT,2,VPTR),EVENT=$P(NODE,":")
I EVENT<1 Q RESULT
S NODE=$P(NODE,":",2)
I NODE="" S REMOVED="Y"
;
EN ;
N PV1,EVTY,LOC,LOOP,HLD,PIVOT,QUOT
S QUOT=""""""
I '$D(PNUM) S PNUM=1
I $G(PSTR)="A" S PSTR=",2,3,7,10,44,45,50,"
I $G(PSTR)'="" S PSTR=","_PSTR_","
I $G(PSTR)="" S PSTR=""
I +PSTR=-1 Q RESULT
I $D(REMOVED) S $P(PV1,HLFS,50)=+EVENT,$P(PV1,HLFS,2)="O",$P(PV1,HLFS,1)=PNUM,PV1="PV1"_HLFS_PV1 K REMOVED Q PV1
S (PIVOT,PV1)="",EVTY="O",LOOP=0
; Empty PV1 segment:
S $P(PV1,HLFS,2)="O"
;
;F S LOOP=LOOP+1,HLD=$P(PSTR,",",LOOP) Q:HLD="" D
;.I HLD=2 S $P(PV1,HLFS,2)=EVTY Q
;.I HLD=3 S $P(PV1,HLFS,3)=$$CLINIC(NODE) Q
;.I HLD=7 S $P(PV1,HLFS,7)=$$OUTPRO(NODE) Q
;.;patient type for v2.3
;.I HLD=18 DO Q
;. .I +$G(^DPT(DFN,"TYPE")) DO
;. . .S $P(RESULT,HLFS,18)=$P($G(^DG(391,+^("TYPE"),0)),"^",1)
;. .E S $P(RESULT,HLFS,18)=HLQ
;.I HLD=44 S $P(PV1,HLFS,44)=$$HLDATE^HLFNC(EVDT) Q
;.I HLD=50 S $P(PV1,HLFS,50)=EVENT Q
;
I PSTR[",3," S $P(PV1,HLFS,3)=$$CLINIC(NODE)
I PSTR[",7," S $P(PV1,HLFS,7)=$$OUTPRO(NODE)
;.;patient type for v2.3
I PSTR[18 DO
.I +$G(^DPT(DFN,"TYPE")) DO
. .S $P(PV1,HLFS,18)=$P($G(^DG(391,+^("TYPE"),0)),"^",1)
. .E S $P(PV1,HLFS,18)=HLQ
;
; facility and suffix
;
I PSTR[39 D
. N VAFACSUF,VAMEDCTR,GLOB
. S GLOB="^"_$P(VPTR,";",2)_+VPTR
. ;
. ; If variable pointer is for patient file:
. I GLOB["DPT(" D
. . N PATNODE S PATNODE=""
. . I '$D(^DPT(DFN)) Q
. . F S PATNODE=$O(^DPT(DFN,"DIS",PATNODE)) D Q:PATNODE=""
. . . N PATDATA,VAFILE
. . . Q:PATNODE=""
. . . S PATDATA=$G(^DPT(DFN,"DIS",PATNODE,0))
. . . ; Spin through multiple events and get division pointer
. . . I EVDT=$P(PATDATA,"^",1) D Q:VAFILE="MATCH"
. . . . S VAMEDCTR=$P(PATDATA,"^",4) I VAMEDCTR="" S VAFILE="" Q
. . . . ; get facility/suffix from medical center div file
. . . . S VAFACSUF=$P($G(^DG(40.8,VAMEDCTR,0)),"^",2)
. . . . ; move data into the PV1 segment
. . . . S $P(PV1,HLFS,39)=$S(VAFACSUF]"":VAFACSUF,1:HLQ)
. . . . S VAFILE="MATCH",PATNODE=""
. . . . Q
. . . Q
. . Q
. ; If variable pointer is for outpatient encounter file:
. I GLOB["^SCE(" D
. . N VAFIEN,ENCDATA,ENCDATE
. . ; get encounter date and medical center division
. . S VAFIEN=+VPTR Q:VAFIEN=""
. . I '$D(^SCE(VAFIEN)) Q
. . S ENCDATA=$G(^SCE(VAFIEN,0))
. . S ENCDATE=$P(ENCDATA,"^",1) Q:ENCDATE=""
. . S VAMEDCTR=$P(ENCDATA,"^",11) Q:VAMEDCTR=""
. . ; call below returns: inst pointer^inst name^facility w/suffix
. . S VAFACSUF=$$SITE^VASITE(ENCDATE,VAMEDCTR)
. . S VAFACSUF=$P(VAFACSUF,"^",3)
. . ; move data into the PV1 segment
. . S $P(PV1,HLFS,39)=$S(VAFACSUF]"":VAFACSUF,1:HLQ)
. . Q
. ;
. ; If variable pointer is for patient movement file:
. I GLOB["^DGPM(" D
. . N VAFIEN,VAFDATE,VAWARD
. . ; get movement date and medical center division
. . S VAFIEN=+VPTR Q:VAFIEN=""
. . I '$D(^DGPM(VAFIEN)) Q
. . S VAFDATE=$P($G(^DGPM(VAFIEN,0)),"^",1) Q:VAFDATE=""
. . S VAWARD=$P($G(^DGPM(VAFIEN,0)),"^",6) Q:VAWARD=""
. . S VAMEDCTR=$P($G(^DIC(42,VAWARD,0)),"^",11) Q:VAMEDCTR=""
. . ; call below returns: inst pointer^inst name^facility w/suffix
. . S VAFACSUF=$$SITE^VASITE(VAFDATE,VAMEDCTR)
. . S VAFACSUF=$P(VAFACSUF,"^",3)
. . ; move data into the PV1 segment
. . S $P(PV1,HLFS,39)=$S(VAFACSUF]"":VAFACSUF,1:HLQ)
. . Q
. Q
;
I PSTR[44 S $P(PV1,HLFS,44)=$$HLDATE^HLFNC(EVDT)
I PSTR[50 S $P(PV1,HLFS,50)=EVENT
;
I PV1?1"^"."^" Q RESULT
S $P(PV1,HLFS,1)=PNUM,PV1="PV1"_HLFS_PV1
K NODE,QUOT
Q PV1
;
CLINIC(ZNODE) ;
;Get clinic for appointments and add/edit stop codes
;
N HPTR,HLOC,GLOB,LOC
;
;HPTR=fifth piece in pivot file - Variable pointer
;
S (HLOC,LOC)="",HPTR=$P(ZNODE,"^",5),GLOB="^"_$P(HPTR,";",2)_+HPTR_")"
I $E(GLOB,1,5)="^DPT(" D
.;Patient file, appointment hasn't gotten to outpatient encounter file
.S HLOC=$P($G(@GLOB@("S",$P(NODE,"^"),0)),"^")
;
I $E(GLOB,1,5)="^SCE(" D
.N VAENC0
.;Outpatient Encounter file
.S HLOC=$$SCE^DGSDU(+$P(GLOB,"^SCE(",2),4,0)
;
I HLOC="" Q QUOT
;HLOC is IEN of Hospital Location file
S LOC=$P($G(^SC(HLOC,0)),"^")
I LOC="" S LOC=QUOT
Q LOC
;
OUTPRO(ZNODE) ;
;
N OUTPTR,OPRV,OPTR,FILE,PTR
;
;OUTPTR=fifth piece in pivot file - variable pointer
;
S OUTPTR=$P(ZNODE,"^",5),OPTR=+OUTPTR,FILE=$P(OUTPTR,";",2)
I OPTR=""!(FILE'="SCE(") Q ""
;
;get primary provider
S OPRV=$$GETPRO(OPTR) I OPRV DO Q OPRV
. I $P($G(^VA(200,OPRV,0)),"^")]"" DO
. . N DGNAME S DGNAME("FILE")=200,DGNAME("IENS")=OPRV,DGNAME("FIELD")=.01
. . S OPRV=OPRV_$E(HLECH)_$$HLNAME^XLFNAME(.DGNAME,"S",$E($G(HLECH)))
. E S OPRV=QUOT
;
Q QUOT
;
GETPRO(OPTR) ;get first primary provider Returns OPRV or 0
N VAENC0,VAEPRV,VAP
S VAENC0=$$SCE^DGSDU(OPTR)
I OPTR,+VAENC0,$$DATE^SCDXUTL(+VAENC0)
E Q 0
;
S OPRV=0
D GETPRV^SDOE(OPTR,"VAEPRV")
S VAP=0 F S VAP=$O(VAEPRV(VAP)) Q:'VAP I $P(VAEPRV(VAP),"^",4)="P" S OPRV=+VAEPRV(VAP)_"^P" Q
Q +OPRV
--- Routine Detail --- with STRUCTURED ROUTINE LISTING ---[H[J[2J[HVAFHCPV 5888 printed Oct 16, 2024@19:03:22 Page 2
VAFHCPV ;ALB/CM OUTPATIENT PV1 SEGMENT ; 22 Jan 2002 10:28 AM
+1 ;;5.3;Registration;**91,151,298,494,573**;Aug 13, 1993
+2 ;
+3 ;This routine generates the Outpatient PV1 segment
+4 ;for the Philly project
+5 ;
+6 ;07/12/00 ACS - Added Facility and Suffix to sequence 39
+7 ;
OPV1(DFN,EVENT,EVDT,VPTR,PSTR,PNUM) ;
+1 ;
+2 ;B
+3 ;DFN - Patient File
+4 ;EVENT - event number from pivot file
+5 ;EVDT - event date/time in FileMan format
+6 ;VPTR - variable pointer
+7 ;PSTSR - string of fields (if null - required fields, if "A" - supported
+8 ;fields, or string of fields separated by commas")
+9 ;PNUM - ID # - always 1 (optional)
+10 ;
+11 NEW RESULT
+12 SET RESULT="PV1"_HLFS_HLFS_"O"
+13 IF '$DATA(DFN)!('$DATA(EVENT))!('$DATA(EVDT))!('$DATA(VPTR))
QUIT RESULT
+14 IF $DATA(EVENT)
IF EVENT'=""
SET NODE=$$PIVX^VAFHPIVT(EVENT,DFN,EVDT)
+15 IF $DATA(EVENT)
IF EVENT=""
KILL EVENT
+16 IF '$DATA(EVENT)
SET NODE=$$PIVNW^VAFHPIVT(DFN,EVDT,2,VPTR)
SET EVENT=$PIECE(NODE,":")
+17 IF EVENT<1
QUIT RESULT
+18 SET NODE=$PIECE(NODE,":",2)
+19 IF NODE=""
SET REMOVED="Y"
+20 ;
EN ;
+1 NEW PV1,EVTY,LOC,LOOP,HLD,PIVOT,QUOT
+2 SET QUOT=""""""
+3 IF '$DATA(PNUM)
SET PNUM=1
+4 IF $GET(PSTR)="A"
SET PSTR=",2,3,7,10,44,45,50,"
+5 IF $GET(PSTR)'=""
SET PSTR=","_PSTR_","
+6 IF $GET(PSTR)=""
SET PSTR=""
+7 IF +PSTR=-1
QUIT RESULT
+8 IF $DATA(REMOVED)
SET $PIECE(PV1,HLFS,50)=+EVENT
SET $PIECE(PV1,HLFS,2)="O"
SET $PIECE(PV1,HLFS,1)=PNUM
SET PV1="PV1"_HLFS_PV1
KILL REMOVED
QUIT PV1
+9 SET (PIVOT,PV1)=""
SET EVTY="O"
SET LOOP=0
+10 ; Empty PV1 segment:
+11 SET $PIECE(PV1,HLFS,2)="O"
+12 ;
+13 ;F S LOOP=LOOP+1,HLD=$P(PSTR,",",LOOP) Q:HLD="" D
+14 ;.I HLD=2 S $P(PV1,HLFS,2)=EVTY Q
+15 ;.I HLD=3 S $P(PV1,HLFS,3)=$$CLINIC(NODE) Q
+16 ;.I HLD=7 S $P(PV1,HLFS,7)=$$OUTPRO(NODE) Q
+17 ;.;patient type for v2.3
+18 ;.I HLD=18 DO Q
+19 ;. .I +$G(^DPT(DFN,"TYPE")) DO
+20 ;. . .S $P(RESULT,HLFS,18)=$P($G(^DG(391,+^("TYPE"),0)),"^",1)
+21 ;. .E S $P(RESULT,HLFS,18)=HLQ
+22 ;.I HLD=44 S $P(PV1,HLFS,44)=$$HLDATE^HLFNC(EVDT) Q
+23 ;.I HLD=50 S $P(PV1,HLFS,50)=EVENT Q
+24 ;
+25 IF PSTR[",3,"
SET $PIECE(PV1,HLFS,3)=$$CLINIC(NODE)
+26 IF PSTR[",7,"
SET $PIECE(PV1,HLFS,7)=$$OUTPRO(NODE)
+27 ;.;patient type for v2.3
+28 IF PSTR[18
Begin DoDot:1
+29 IF +$GET(^DPT(DFN,"TYPE"))
Begin DoDot:2
+30 SET $PIECE(PV1,HLFS,18)=$PIECE($GET(^DG(391,+^("TYPE"),0)),"^",1)
+31 IF '$TEST
SET $PIECE(PV1,HLFS,18)=HLQ
End DoDot:2
End DoDot:1
+32 ;
+33 ; facility and suffix
+34 ;
+35 IF PSTR[39
Begin DoDot:1
+36 NEW VAFACSUF,VAMEDCTR,GLOB
+37 SET GLOB="^"_$PIECE(VPTR,";",2)_+VPTR
+38 ;
+39 ; If variable pointer is for patient file:
+40 IF GLOB["DPT("
Begin DoDot:2
+41 NEW PATNODE
SET PATNODE=""
+42 IF '$DATA(^DPT(DFN))
QUIT
+43 FOR
SET PATNODE=$ORDER(^DPT(DFN,"DIS",PATNODE))
Begin DoDot:3
+44 NEW PATDATA,VAFILE
+45 if PATNODE=""
QUIT
+46 SET PATDATA=$GET(^DPT(DFN,"DIS",PATNODE,0))
+47 ; Spin through multiple events and get division pointer
+48 IF EVDT=$PIECE(PATDATA,"^",1)
Begin DoDot:4
+49 SET VAMEDCTR=$PIECE(PATDATA,"^",4)
IF VAMEDCTR=""
SET VAFILE=""
QUIT
+50 ; get facility/suffix from medical center div file
+51 SET VAFACSUF=$PIECE($GET(^DG(40.8,VAMEDCTR,0)),"^",2)
+52 ; move data into the PV1 segment
+53 SET $PIECE(PV1,HLFS,39)=$SELECT(VAFACSUF]"":VAFACSUF,1:HLQ)
+54 SET VAFILE="MATCH"
SET PATNODE=""
+55 QUIT
End DoDot:4
if VAFILE="MATCH"
QUIT
+56 QUIT
End DoDot:3
if PATNODE=""
QUIT
+57 QUIT
End DoDot:2
+58 ; If variable pointer is for outpatient encounter file:
+59 IF GLOB["^SCE("
Begin DoDot:2
+60 NEW VAFIEN,ENCDATA,ENCDATE
+61 ; get encounter date and medical center division
+62 SET VAFIEN=+VPTR
if VAFIEN=""
QUIT
+63 IF '$DATA(^SCE(VAFIEN))
QUIT
+64 SET ENCDATA=$GET(^SCE(VAFIEN,0))
+65 SET ENCDATE=$PIECE(ENCDATA,"^",1)
if ENCDATE=""
QUIT
+66 SET VAMEDCTR=$PIECE(ENCDATA,"^",11)
if VAMEDCTR=""
QUIT
+67 ; call below returns: inst pointer^inst name^facility w/suffix
+68 SET VAFACSUF=$$SITE^VASITE(ENCDATE,VAMEDCTR)
+69 SET VAFACSUF=$PIECE(VAFACSUF,"^",3)
+70 ; move data into the PV1 segment
+71 SET $PIECE(PV1,HLFS,39)=$SELECT(VAFACSUF]"":VAFACSUF,1:HLQ)
+72 QUIT
End DoDot:2
+73 ;
+74 ; If variable pointer is for patient movement file:
+75 IF GLOB["^DGPM("
Begin DoDot:2
+76 NEW VAFIEN,VAFDATE,VAWARD
+77 ; get movement date and medical center division
+78 SET VAFIEN=+VPTR
if VAFIEN=""
QUIT
+79 IF '$DATA(^DGPM(VAFIEN))
QUIT
+80 SET VAFDATE=$PIECE($GET(^DGPM(VAFIEN,0)),"^",1)
if VAFDATE=""
QUIT
+81 SET VAWARD=$PIECE($GET(^DGPM(VAFIEN,0)),"^",6)
if VAWARD=""
QUIT
+82 SET VAMEDCTR=$PIECE($GET(^DIC(42,VAWARD,0)),"^",11)
if VAMEDCTR=""
QUIT
+83 ; call below returns: inst pointer^inst name^facility w/suffix
+84 SET VAFACSUF=$$SITE^VASITE(VAFDATE,VAMEDCTR)
+85 SET VAFACSUF=$PIECE(VAFACSUF,"^",3)
+86 ; move data into the PV1 segment
+87 SET $PIECE(PV1,HLFS,39)=$SELECT(VAFACSUF]"":VAFACSUF,1:HLQ)
+88 QUIT
End DoDot:2
+89 QUIT
End DoDot:1
+90 ;
+91 IF PSTR[44
SET $PIECE(PV1,HLFS,44)=$$HLDATE^HLFNC(EVDT)
+92 IF PSTR[50
SET $PIECE(PV1,HLFS,50)=EVENT
+93 ;
+94 IF PV1?1"^"."^"
QUIT RESULT
+95 SET $PIECE(PV1,HLFS,1)=PNUM
SET PV1="PV1"_HLFS_PV1
+96 KILL NODE,QUOT
+97 QUIT PV1
+98 ;
CLINIC(ZNODE) ;
+1 ;Get clinic for appointments and add/edit stop codes
+2 ;
+3 NEW HPTR,HLOC,GLOB,LOC
+4 ;
+5 ;HPTR=fifth piece in pivot file - Variable pointer
+6 ;
+7 SET (HLOC,LOC)=""
SET HPTR=$PIECE(ZNODE,"^",5)
SET GLOB="^"_$PIECE(HPTR,";",2)_+HPTR_")"
+8 IF $EXTRACT(GLOB,1,5)="^DPT("
Begin DoDot:1
+9 ;Patient file, appointment hasn't gotten to outpatient encounter file
+10 SET HLOC=$PIECE($GET(@GLOB@("S",$PIECE(NODE,"^"),0)),"^")
End DoDot:1
+11 ;
+12 IF $EXTRACT(GLOB,1,5)="^SCE("
Begin DoDot:1
+13 NEW VAENC0
+14 ;Outpatient Encounter file
+15 SET HLOC=$$SCE^DGSDU(+$PIECE(GLOB,"^SCE(",2),4,0)
End DoDot:1
+16 ;
+17 IF HLOC=""
QUIT QUOT
+18 ;HLOC is IEN of Hospital Location file
+19 SET LOC=$PIECE($GET(^SC(HLOC,0)),"^")
+20 IF LOC=""
SET LOC=QUOT
+21 QUIT LOC
+22 ;
OUTPRO(ZNODE) ;
+1 ;
+2 NEW OUTPTR,OPRV,OPTR,FILE,PTR
+3 ;
+4 ;OUTPTR=fifth piece in pivot file - variable pointer
+5 ;
+6 SET OUTPTR=$PIECE(ZNODE,"^",5)
SET OPTR=+OUTPTR
SET FILE=$PIECE(OUTPTR,";",2)
+7 IF OPTR=""!(FILE'="SCE(")
QUIT ""
+8 ;
+9 ;get primary provider
+10 SET OPRV=$$GETPRO(OPTR)
IF OPRV
Begin DoDot:1
+11 IF $PIECE($GET(^VA(200,OPRV,0)),"^")]""
Begin DoDot:2
+12 NEW DGNAME
SET DGNAME("FILE")=200
SET DGNAME("IENS")=OPRV
SET DGNAME("FIELD")=.01
+13 SET OPRV=OPRV_$EXTRACT(HLECH)_$$HLNAME^XLFNAME(.DGNAME,"S",$EXTRACT($GET(HLECH)))
End DoDot:2
+14 IF '$TEST
SET OPRV=QUOT
End DoDot:1
QUIT OPRV
+15 ;
+16 QUIT QUOT
+17 ;
GETPRO(OPTR) ;get first primary provider Returns OPRV or 0
+1 NEW VAENC0,VAEPRV,VAP
+2 SET VAENC0=$$SCE^DGSDU(OPTR)
+3 IF OPTR
IF +VAENC0
IF $$DATE^SCDXUTL(+VAENC0)
+4 IF '$TEST
QUIT 0
+5 ;
+6 SET OPRV=0
+7 DO GETPRV^SDOE(OPTR,"VAEPRV")
+8 SET VAP=0
FOR
SET VAP=$ORDER(VAEPRV(VAP))
if 'VAP
QUIT
IF $PIECE(VAEPRV(VAP),"^",4)="P"
SET OPRV=+VAEPRV(VAP)_"^P"
QUIT
+9 QUIT +OPRV