1 | VAFHCPV ;ALB/CM OUTPATIENT PV1 SEGMENT ; 22 Jan 2002 10:28 AM
|
---|
2 | ;;5.3;Registration;**91,151,298,494,573**;Aug 13, 1993
|
---|
3 | ;
|
---|
4 | ;This routine generates the Outpatient PV1 segment
|
---|
5 | ;for the Philly project
|
---|
6 | ;
|
---|
7 | ;07/12/00 ACS - Added Facility and Suffix to sequence 39
|
---|
8 | ;
|
---|
9 | OPV1(DFN,EVENT,EVDT,VPTR,PSTR,PNUM) ;
|
---|
10 | ;
|
---|
11 | ;B
|
---|
12 | ;DFN - Patient File
|
---|
13 | ;EVENT - event number from pivot file
|
---|
14 | ;EVDT - event date/time in FileMan format
|
---|
15 | ;VPTR - variable pointer
|
---|
16 | ;PSTSR - string of fields (if null - required fields, if "A" - supported
|
---|
17 | ;fields, or string of fields separated by commas")
|
---|
18 | ;PNUM - ID # - always 1 (optional)
|
---|
19 | ;
|
---|
20 | N RESULT
|
---|
21 | S RESULT="PV1"_HLFS_HLFS_"O"
|
---|
22 | I '$D(DFN)!('$D(EVENT))!('$D(EVDT))!('$D(VPTR)) Q RESULT
|
---|
23 | I $D(EVENT) I EVENT'="" S NODE=$$PIVX^VAFHPIVT(EVENT,DFN,EVDT)
|
---|
24 | I $D(EVENT) I EVENT="" K EVENT
|
---|
25 | I '$D(EVENT) S NODE=$$PIVNW^VAFHPIVT(DFN,EVDT,2,VPTR),EVENT=$P(NODE,":")
|
---|
26 | I EVENT<1 Q RESULT
|
---|
27 | S NODE=$P(NODE,":",2)
|
---|
28 | I NODE="" S REMOVED="Y"
|
---|
29 | ;
|
---|
30 | EN ;
|
---|
31 | N PV1,EVTY,LOC,LOOP,HLD,PIVOT,QUOT
|
---|
32 | S QUOT=""""""
|
---|
33 | I '$D(PNUM) S PNUM=1
|
---|
34 | I $G(PSTR)="A" S PSTR=",2,3,7,10,44,45,50,"
|
---|
35 | I $G(PSTR)'="" S PSTR=","_PSTR_","
|
---|
36 | I $G(PSTR)="" S PSTR=""
|
---|
37 | I +PSTR=-1 Q RESULT
|
---|
38 | 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
|
---|
39 | S (PIVOT,PV1)="",EVTY="O",LOOP=0
|
---|
40 | ; Empty PV1 segment:
|
---|
41 | S $P(PV1,HLFS,2)="O"
|
---|
42 | ;
|
---|
43 | ;F S LOOP=LOOP+1,HLD=$P(PSTR,",",LOOP) Q:HLD="" D
|
---|
44 | ;.I HLD=2 S $P(PV1,HLFS,2)=EVTY Q
|
---|
45 | ;.I HLD=3 S $P(PV1,HLFS,3)=$$CLINIC(NODE) Q
|
---|
46 | ;.I HLD=7 S $P(PV1,HLFS,7)=$$OUTPRO(NODE) Q
|
---|
47 | ;.;patient type for v2.3
|
---|
48 | ;.I HLD=18 DO Q
|
---|
49 | ;. .I +$G(^DPT(DFN,"TYPE")) DO
|
---|
50 | ;. . .S $P(RESULT,HLFS,18)=$P($G(^DG(391,+^("TYPE"),0)),"^",1)
|
---|
51 | ;. .E S $P(RESULT,HLFS,18)=HLQ
|
---|
52 | ;.I HLD=44 S $P(PV1,HLFS,44)=$$HLDATE^HLFNC(EVDT) Q
|
---|
53 | ;.I HLD=50 S $P(PV1,HLFS,50)=EVENT Q
|
---|
54 | ;
|
---|
55 | I PSTR[",3," S $P(PV1,HLFS,3)=$$CLINIC(NODE)
|
---|
56 | I PSTR[",7," S $P(PV1,HLFS,7)=$$OUTPRO(NODE)
|
---|
57 | ;.;patient type for v2.3
|
---|
58 | I PSTR[18 DO
|
---|
59 | .I +$G(^DPT(DFN,"TYPE")) DO
|
---|
60 | . .S $P(PV1,HLFS,18)=$P($G(^DG(391,+^("TYPE"),0)),"^",1)
|
---|
61 | . .E S $P(PV1,HLFS,18)=HLQ
|
---|
62 | ;
|
---|
63 | ; facility and suffix
|
---|
64 | ;
|
---|
65 | I PSTR[39 D
|
---|
66 | . N VAFACSUF,VAMEDCTR,GLOB
|
---|
67 | . S GLOB="^"_$P(VPTR,";",2)_+VPTR
|
---|
68 | . ;
|
---|
69 | . ; If variable pointer is for patient file:
|
---|
70 | . I GLOB["DPT(" D
|
---|
71 | . . N PATNODE S PATNODE=""
|
---|
72 | . . I '$D(^DPT(DFN)) Q
|
---|
73 | . . F S PATNODE=$O(^DPT(DFN,"DIS",PATNODE)) D Q:PATNODE=""
|
---|
74 | . . . N PATDATA,VAFILE
|
---|
75 | . . . Q:PATNODE=""
|
---|
76 | . . . S PATDATA=$G(^DPT(DFN,"DIS",PATNODE,0))
|
---|
77 | . . . ; Spin through multiple events and get division pointer
|
---|
78 | . . . I EVDT=$P(PATDATA,"^",1) D Q:VAFILE="MATCH"
|
---|
79 | . . . . S VAMEDCTR=$P(PATDATA,"^",4) I VAMEDCTR="" S VAFILE="" Q
|
---|
80 | . . . . ; get facility/suffix from medical center div file
|
---|
81 | . . . . S VAFACSUF=$P($G(^DG(40.8,VAMEDCTR,0)),"^",2)
|
---|
82 | . . . . ; move data into the PV1 segment
|
---|
83 | . . . . S $P(PV1,HLFS,39)=$S(VAFACSUF]"":VAFACSUF,1:HLQ)
|
---|
84 | . . . . S VAFILE="MATCH",PATNODE=""
|
---|
85 | . . . . Q
|
---|
86 | . . . Q
|
---|
87 | . . Q
|
---|
88 | . ; If variable pointer is for outpatient encounter file:
|
---|
89 | . I GLOB["^SCE(" D
|
---|
90 | . . N VAFIEN,ENCDATA,ENCDATE
|
---|
91 | . . ; get encounter date and medical center division
|
---|
92 | . . S VAFIEN=+VPTR Q:VAFIEN=""
|
---|
93 | . . I '$D(^SCE(VAFIEN)) Q
|
---|
94 | . . S ENCDATA=$G(^SCE(VAFIEN,0))
|
---|
95 | . . S ENCDATE=$P(ENCDATA,"^",1) Q:ENCDATE=""
|
---|
96 | . . S VAMEDCTR=$P(ENCDATA,"^",11) Q:VAMEDCTR=""
|
---|
97 | . . ; call below returns: inst pointer^inst name^facility w/suffix
|
---|
98 | . . S VAFACSUF=$$SITE^VASITE(ENCDATE,VAMEDCTR)
|
---|
99 | . . S VAFACSUF=$P(VAFACSUF,"^",3)
|
---|
100 | . . ; move data into the PV1 segment
|
---|
101 | . . S $P(PV1,HLFS,39)=$S(VAFACSUF]"":VAFACSUF,1:HLQ)
|
---|
102 | . . Q
|
---|
103 | . ;
|
---|
104 | . ; If variable pointer is for patient movement file:
|
---|
105 | . I GLOB["^DGPM(" D
|
---|
106 | . . N VAFIEN,VAFDATE,VAWARD
|
---|
107 | . . ; get movement date and medical center division
|
---|
108 | . . S VAFIEN=+VPTR Q:VAFIEN=""
|
---|
109 | . . I '$D(^DGPM(VAFIEN)) Q
|
---|
110 | . . S VAFDATE=$P($G(^DGPM(VAFIEN,0)),"^",1) Q:VAFDATE=""
|
---|
111 | . . S VAWARD=$P($G(^DGPM(VAFIEN,0)),"^",6) Q:VAWARD=""
|
---|
112 | . . S VAMEDCTR=$P($G(^DIC(42,VAWARD,0)),"^",11) Q:VAMEDCTR=""
|
---|
113 | . . ; call below returns: inst pointer^inst name^facility w/suffix
|
---|
114 | . . S VAFACSUF=$$SITE^VASITE(VAFDATE,VAMEDCTR)
|
---|
115 | . . S VAFACSUF=$P(VAFACSUF,"^",3)
|
---|
116 | . . ; move data into the PV1 segment
|
---|
117 | . . S $P(PV1,HLFS,39)=$S(VAFACSUF]"":VAFACSUF,1:HLQ)
|
---|
118 | . . Q
|
---|
119 | . Q
|
---|
120 | ;
|
---|
121 | I PSTR[44 S $P(PV1,HLFS,44)=$$HLDATE^HLFNC(EVDT)
|
---|
122 | I PSTR[50 S $P(PV1,HLFS,50)=EVENT
|
---|
123 | ;
|
---|
124 | I PV1?1"^"."^" Q RESULT
|
---|
125 | S $P(PV1,HLFS,1)=PNUM,PV1="PV1"_HLFS_PV1
|
---|
126 | K NODE,QUOT
|
---|
127 | Q PV1
|
---|
128 | ;
|
---|
129 | CLINIC(ZNODE) ;
|
---|
130 | ;Get clinic for appointments and add/edit stop codes
|
---|
131 | ;
|
---|
132 | N HPTR,HLOC,GLOB,LOC
|
---|
133 | ;
|
---|
134 | ;HPTR=fifth piece in pivot file - Variable pointer
|
---|
135 | ;
|
---|
136 | S (HLOC,LOC)="",HPTR=$P(ZNODE,"^",5),GLOB="^"_$P(HPTR,";",2)_+HPTR_")"
|
---|
137 | I $E(GLOB,1,5)="^DPT(" D
|
---|
138 | .;Patient file, appointment hasn't gotten to outpatient encounter file
|
---|
139 | .S HLOC=$P($G(@GLOB@("S",$P(NODE,"^"),0)),"^")
|
---|
140 | ;
|
---|
141 | I $E(GLOB,1,5)="^SCE(" D
|
---|
142 | .N VAENC0
|
---|
143 | .;Outpatient Encounter file
|
---|
144 | .S HLOC=$$SCE^DGSDU(+$P(GLOB,"^SCE(",2),4,0)
|
---|
145 | ;
|
---|
146 | I HLOC="" Q QUOT
|
---|
147 | ;HLOC is IEN of Hospital Location file
|
---|
148 | S LOC=$P($G(^SC(HLOC,0)),"^")
|
---|
149 | I LOC="" S LOC=QUOT
|
---|
150 | Q LOC
|
---|
151 | ;
|
---|
152 | OUTPRO(ZNODE) ;
|
---|
153 | ;
|
---|
154 | N OUTPTR,OPRV,OPTR,FILE,PTR
|
---|
155 | ;
|
---|
156 | ;OUTPTR=fifth piece in pivot file - variable pointer
|
---|
157 | ;
|
---|
158 | S OUTPTR=$P(ZNODE,"^",5),OPTR=+OUTPTR,FILE=$P(OUTPTR,";",2)
|
---|
159 | I OPTR=""!(FILE'="SCE(") Q ""
|
---|
160 | ;
|
---|
161 | ;get primary provider
|
---|
162 | S OPRV=$$GETPRO(OPTR) I OPRV DO Q OPRV
|
---|
163 | . I $P($G(^VA(200,OPRV,0)),"^")]"" DO
|
---|
164 | . . N DGNAME S DGNAME("FILE")=200,DGNAME("IENS")=OPRV,DGNAME("FIELD")=.01
|
---|
165 | . . S OPRV=OPRV_$E(HLECH)_$$HLNAME^XLFNAME(.DGNAME,"S",$E($G(HLECH)))
|
---|
166 | . E S OPRV=QUOT
|
---|
167 | ;
|
---|
168 | Q QUOT
|
---|
169 | ;
|
---|
170 | GETPRO(OPTR) ;get first primary provider Returns OPRV or 0
|
---|
171 | N VAENC0,VAEPRV,VAP
|
---|
172 | S VAENC0=$$SCE^DGSDU(OPTR)
|
---|
173 | I OPTR,+VAENC0,$$DATE^SCDXUTL(+VAENC0)
|
---|
174 | E Q 0
|
---|
175 | ;
|
---|
176 | S OPRV=0
|
---|
177 | D GETPRV^SDOE(OPTR,"VAEPRV")
|
---|
178 | S VAP=0 F S VAP=$O(VAEPRV(VAP)) Q:'VAP I $P(VAEPRV(VAP),"^",4)="P" S OPRV=+VAEPRV(VAP)_"^P" Q
|
---|
179 | Q +OPRV
|
---|