1 | ECXUTL2 ;ALB/JAP - Utilities for DSS Extracts (cont.) ; 6/12/07 6:38am
|
---|
2 | ;;3.0;DSS EXTRACTS;**8,13,23,24,33,35,39,46,71,84,92,105**;Dec 22, 1997;Build 70
|
---|
3 | ;
|
---|
4 | ECXDEF(ECXHEAD,ECXPACK,ECXGRP,ECXFILE,ECXRTN,ECXPIECE,ECXVER) ;variables specific to extract from file #727.1
|
---|
5 | ; input
|
---|
6 | ; ECXHEAD = extract header code
|
---|
7 | ; all other formal list parameters passed by reference
|
---|
8 | ; output
|
---|
9 | ; ECXPACK = type field (#7)
|
---|
10 | ; ECXGRP = group field (#9)
|
---|
11 | ; ECXFILE = file number field (#1)
|
---|
12 | ; ECXRTN = routine field (#4)
|
---|
13 | ; ECXPIECE= running piece field (#11)
|
---|
14 | ; ECXVER = dss version
|
---|
15 | N ECXIEN,ECXARR,DIC,DA,DR,DIQ
|
---|
16 | S (ECXPACK,ECXGRP,ECXFILE,ECXRTN,ECXPIECE,ECXVER)="",ECXIEN=0
|
---|
17 | S ECXIEN=+$O(^ECX(727.1,"C",ECXHEAD,ECXIEN))
|
---|
18 | I ECXIEN=0 D Q
|
---|
19 | .D MES^XPDUTL(" ")
|
---|
20 | .D MES^XPDUTL(" It appears that you may have a problem with File #727.1 --")
|
---|
21 | .D MES^XPDUTL(" ")
|
---|
22 | .D MES^XPDUTL(" The "_ECHEAD_" Extract is not properly defined.")
|
---|
23 | .D MES^XPDUTL(" ")
|
---|
24 | .D MES^XPDUTL(" Contact National VISTA Support for further assistance.")
|
---|
25 | .D MES^XPDUTL(" ")
|
---|
26 | .I $E(IOST)="C" D
|
---|
27 | ..S SS=22-$Y F JJ=1:1:SS W !
|
---|
28 | ..S DIR(0)="E" W ! D ^DIR K DIR
|
---|
29 | .W !!
|
---|
30 | S DIC="^ECX(727.1,",DA=ECXIEN,DR=".01;1;4;7;9;11",DIQ="ECXARR"
|
---|
31 | D EN^DIQ1
|
---|
32 | S ECXPACK=ECXARR(727.1,ECXIEN,7)
|
---|
33 | ;if this is an inactive extract type, skip it
|
---|
34 | I ECXPACK["Inactive" D Q
|
---|
35 | .D MES^XPDUTL(" ")
|
---|
36 | .D MES^XPDUTL(" The "_ECHEAD_" Extract is no longer active/valid.")
|
---|
37 | .D MES^XPDUTL(" ")
|
---|
38 | .D MES^XPDUTL(" Contact National VISTA Support for further assistance.")
|
---|
39 | .D MES^XPDUTL(" ")
|
---|
40 | .I $E(IOST)="C" D
|
---|
41 | ..S SS=22-$Y F JJ=1:1:SS W !
|
---|
42 | ..S DIR(0)="E" W ! D ^DIR K DIR
|
---|
43 | .W !!
|
---|
44 | S ECXGRP=ECXARR(727.1,ECXIEN,9)
|
---|
45 | S ECXFILE=ECXARR(727.1,ECXIEN,1)
|
---|
46 | S ECXRTN="START^"_ECXARR(727.1,ECXIEN,4)
|
---|
47 | S ECXPIECE=ECXARR(727.1,ECXIEN,11)
|
---|
48 | ;version of dss/tsi in Austin as specified by btso
|
---|
49 | S ECXVER=7
|
---|
50 | Q
|
---|
51 | PATDEM(DFN,DT1,PAR,FLG) ; determine patient information
|
---|
52 | ; DFN =
|
---|
53 | ; DT =
|
---|
54 | ; PAR =
|
---|
55 | ; FLG =
|
---|
56 | N DT2,PAT,OK,X
|
---|
57 | D KPATDEM
|
---|
58 | S FLG=$G(FLG),PAR=$S($D(PAR):PAR,1:"1;2;3;4;5;"),DT2=$P(DT1,".")
|
---|
59 | Q:'$$PAT^ECXUTL3(DFN,DT2,PAR,.PAT) 0
|
---|
60 | S ECXMPI=PAT("MPI")
|
---|
61 | I PAR["1" D
|
---|
62 | .S ECXSSN=PAT("SSN"),ECXPNM=PAT("NAME"),ECXDOB=PAT("DOB")
|
---|
63 | .S ECXSEX=PAT("SEX"),ECXREL=PAT("RELIGION"),ECXRACE=PAT("RACE")
|
---|
64 | .S ECXMAR=PAT("MARITAL")
|
---|
65 | .S ECXETH=PAT("ETHNIC"),ECXRC1=PAT("RACE1")
|
---|
66 | I PAR["2" D
|
---|
67 | .S ECXCNTY=PAT("COUNTY"),ECXSTATE=PAT("STATE"),ECXZIP=PAT("ZIP")
|
---|
68 | I PAR["3" D
|
---|
69 | .S ECXPOS=PAT("POS"),ECSC=PAT("SC STAT"),ECXSVC=PAT("SC%")
|
---|
70 | .S ECXVET=PAT("VET"),ECXMEAN=PAT("MEANS"),ECXELIG=PAT("ELIG")
|
---|
71 | .S ECXENRL=PAT("ENROLL LOC")
|
---|
72 | .S ECXERI=PAT("ERI")
|
---|
73 | I PAR["4" S ECXEMP=PAT("EMPLOY")
|
---|
74 | I PAR["5" D
|
---|
75 | .S ECXVIET=PAT("VIETNAM"),ECXAST=PAT("AO STAT"),ECXRST=PAT("IR STAT")
|
---|
76 | .S ECXEST=PAT("EC STAT"),ECXPST=PAT("POW STAT"),ECXPLOC=PAT("POW LOC")
|
---|
77 | .S ECXPHI=PAT("PHI"),ECXMST=PAT("MST STAT"),ECXAOL=PAT("AOL")
|
---|
78 | .S ECXOEF=PAT("ECXOEF"),ECXOEFDT=PAT("ECXOEFDT")
|
---|
79 | I PAR["6" D
|
---|
80 | .S (ECXPAYOR,ECXSAI)="" D VISN19(DFN,.ECXPAYOR,.ECXSAI)
|
---|
81 | I FLG'[3 D
|
---|
82 | .S X=$$PRIMARY(DFN,DT2),ECPTTM=$P(X,U),ECPTPR=$P(X,U,2),ECCLAS=$P(X,U,3)
|
---|
83 | .S ECPTNPI=$P(X,U,4),ECASPR=$P(X,U,5),ECCLAS2=$P(X,U,6)
|
---|
84 | .S ECASNPI=$P(X,U,7)
|
---|
85 | I FLG'[2 D
|
---|
86 | .S ECXINP=$$INP^ECXUTL2(DFN,DT1),ECXA=$P(ECXINP,U),ECXMN=$P(ECXINP,U,2)
|
---|
87 | .S ECXTS=$P(ECXINP,U,3),ECXDOM=$P(ECXINP,U,10),ECXADMDT=$P(ECXINP,U,4)
|
---|
88 | I FLG'[1 S X=$$ENROLLM(DFN)
|
---|
89 | Q 1
|
---|
90 | ;
|
---|
91 | KPATDEM ;
|
---|
92 | K ECXADMDT,ECAO,ECASNPI,ECASPR,ECCLAS,ECCLAS2,ECENV,ECPTNPI,ECPTPR,ECPTTM
|
---|
93 | K ECRE,ECSC,ECXA,ECXAST,ECXCAT,ECXCNTY,ECXEST,ECXENRL,ECXDOB
|
---|
94 | K ECXDOM,ECXELIG,ECXINP,ECXMPI,ECXMN,ECXNM,ECXPHI,ECXPLOC,ECXMEAN,ECXMST
|
---|
95 | K ECXPAYOR,ECXPNM,ECXPOS,ECXPRIOR,ECXPST,ECXRACE,ECXREL,ECXRST,ECXSAI
|
---|
96 | K ECXSEX,ECXSSN,ECXSTAT,ECXSTATE,ECXSVC,ECXTS,ECXVIET,ECXZIP,VA,VAERR
|
---|
97 | K ECXSBGRP
|
---|
98 | Q
|
---|
99 | ENROLLM(DFN,RNDT) ;determines enrollment status, category, priority
|
---|
100 | ;and user enrollee status
|
---|
101 | ; input
|
---|
102 | ; DFN = IEN from Patient file (Required)
|
---|
103 | ; RNDT = Extract Run Date
|
---|
104 | ; output
|
---|
105 | ; ECXSTAT = Enrollment status
|
---|
106 | ; ECXPRIOR = Enrollment priority
|
---|
107 | ; ECXCAT = Enrollment priority
|
---|
108 | ; ECXSBGRP = Enrollment subgroup
|
---|
109 | ; ECXUESTA = User enrollee
|
---|
110 | ; return value 0 if no data found, 1 if data found
|
---|
111 | N CAT,PRIOR,STAT,X,X1,X2,X3,ENRIEN,ENR,FL,SBGRP
|
---|
112 | S (ECXCAT,ECXPRIOR,ECXSTAT,ECXSBGRP,ECXEUSTA)=""
|
---|
113 | I $G(DFN)="" Q 0
|
---|
114 | ;User enrollee status, if current or future date set to 'U'
|
---|
115 | ;DBIA #3989
|
---|
116 | S ECXUESTA=$S($$UESTAT^EASUER(DFN):"U",1:"")
|
---|
117 | ;Patient type
|
---|
118 | S ECXPTYPE=$$TYPE^ECXUTL5(DFN)
|
---|
119 | ;Combat Veteran Status DBIA #4156
|
---|
120 | S X3=$$CVEDT^ECXUTL5(DFN,$S($G(ECD):ECD,$G(ECXDATE):ECXDATE,1:DT))
|
---|
121 | ;enrollment priority DBIA
|
---|
122 | S STAT=$$STATUS^DGENA(DFN),PRIOR=$$PRIORITY^DGENA(DFN)
|
---|
123 | S CAT=$$CATEGORY^DGENA4(DFN,STAT),SBGRP=$$ENRSBGRP^DGENA4(DFN)
|
---|
124 | ;find current enrollment when status=2 or 19
|
---|
125 | I "^2^19^"[("^"_STAT_"^") S ECXSTAT=STAT,ECXPRIOR=PRIOR,ECXCAT=CAT,ECXSBGRP=$S(SBGRP=1:"a",SBGRP=3:"c",SBGRP=5:"e",SBGRP=7:"g",1:"") Q 1
|
---|
126 | ;find previous enrollment
|
---|
127 | S ENRIEN=$$FINDCUR^DGENA(DFN) I ENRIEN="" Q 0
|
---|
128 | I $G(RNDT)="" D NOW^%DTC S RNDT=X
|
---|
129 | S RNDT=($E(RNDT,1,3)-1)_$E(RNDT,4,7),FL=0
|
---|
130 | F S ENRIEN=$$FINDPRI^DGENA(ENRIEN) Q:'ENRIEN D Q:FL
|
---|
131 | . S ENR=$$GET^DGENA(ENRIEN,.ENR)
|
---|
132 | . I "^2^19^"[("^"_ENR("STATUS")_"^"),ENR("EFFDATE")>RNDT D
|
---|
133 | . . S ECXSTAT=ENR("STATUS"),ECXPRIOR=PRIOR,FL=1
|
---|
134 | . . S ECXCAT=$$CATEGORY^DGENA4(DFN,ECXSTAT)
|
---|
135 | . . S ECXSBGRP=$$ENRSBGRP^DGENA4(DFN)
|
---|
136 | . . S ECXSBGRP=$S(SBGRP=1:"a",SBGRP=3:"c",SBGRP=5:"e",SBGRP=7:"g",1:"")
|
---|
137 | I FL Q 1
|
---|
138 | ;no enrollment status found =2 or 19
|
---|
139 | S ECXSTAT=STAT,ECXPRIOR=PRIOR,ECXCAT=CAT,ECXSBGRP=$S(SBGRP=1:"a",SBGRP=3:"c",SBGRP=5:"e",SBGRP=7:"g",1:"")
|
---|
140 | Q 1
|
---|
141 | PRIMARY(ECXDFN,ECXDATE,ECXPREFX) ;determine patient's pc team and pc provider
|
---|
142 | ; input
|
---|
143 | ; ECXDFN = file #2 ien (required)
|
---|
144 | ; ECXDATE = date of interest (required)
|
---|
145 | ; ECXPREFX = prefix for provider data (optional)
|
---|
146 | ; defaults to "2" if not specified otherwise
|
---|
147 | ; output
|
---|
148 | ; ECXPRIME = pc team ien^prefix_pc provider ien^pc provider person
|
---|
149 | ;class^pc provider npi^prefix_assoc pc provider ien^assoc pc provider
|
---|
150 | ;person class^assoc pc provider npi
|
---|
151 | N ECPTTM,ECPTPR,ECCLAS,ECPRIME,ECASPR,ECCLAS2
|
---|
152 | S:'$D(ECXPREFX) ECXPREFX=2 S:(+ECXPREFX=0) ECXPREFX=2
|
---|
153 | ;get pc team data
|
---|
154 | S ECPTTM=+$$OUTPTTM^SDUTL3(ECXDFN,ECXDATE) S:ECPTTM=0 ECPTTM=""
|
---|
155 | ;get primary pc provider data
|
---|
156 | S ECPTPR=+$$OUTPTPR^SDUTL3(ECXDFN,ECXDATE)
|
---|
157 | S ECCLAS="" I ECPTPR>0 S ECCLAS=$$PRVCLASS^ECXUTL(ECPTPR,ECXDATE)
|
---|
158 | N ECXUSRTN S ECXUSRTN=$$NPI^XUSNPI("Individual_ID",ECPTPR,ECXDATE)
|
---|
159 | S:+ECXUSRTN'>0 ECXUSRTN="" S ECPTNPI=$P(ECXUSRTN,U)
|
---|
160 | S:ECPTPR=0 ECPTPR="" S:ECPTPR]"" ECPTPR=ECXPREFX_ECPTPR
|
---|
161 | ;assoc pc provider call ok if routine scapmca from patch177 is present
|
---|
162 | S ECASPR=""
|
---|
163 | S X="SCAPMCA" X ^%ZOSF("TEST") I $T D
|
---|
164 | .S ECASPR=+$$OUTPTAP^SDUTL3(ECXDFN,ECXDATE)
|
---|
165 | S ECCLAS2="" I ECASPR>0 S ECCLAS2=$$PRVCLASS^ECXUTL(ECASPR,ECXDATE)
|
---|
166 | N ECXUSRTN S ECXUSRTN=$$NPI^XUSNPI("Individual_ID",ECASPR,ECXDATE)
|
---|
167 | S:+ECXUSRTN'>0 ECXUSRTN="" S ECASNPI=$P(ECXUSRTN,U)
|
---|
168 | S:ECASPR=0 ECASPR="" S:ECASPR]"" ECASPR=ECXPREFX_ECASPR
|
---|
169 | ;assemble
|
---|
170 | S ECXPRIME=ECPTTM_U_ECPTPR_U_ECCLAS_U_ECPTNPI_U_ECASPR_U_ECCLAS2_U_ECASNPI
|
---|
171 | Q ECXPRIME
|
---|
172 | INP(ECXDFN,ECXDATE) ; check for inpatient status
|
---|
173 | ; input
|
---|
174 | ; ECXDFN = file #2 ien (required)
|
---|
175 | ; ECXDATE = date of interest (required)
|
---|
176 | ; output
|
---|
177 | ; ECXINP = patient status^movment # (file #405 ien)
|
---|
178 | ; current treat. spec. (file #42.4 ien)^admission date/time^
|
---|
179 | ; current ward (file #42 ien)^discharge date/time^
|
---|
180 | ; ward provider^attending phys.^ward (file #44 ien);facility
|
---|
181 | ; (file #40.8 ien);dss dept^dom
|
---|
182 | ; where patient status = I for inpatient
|
---|
183 | ; = O for outpatient
|
---|
184 | N DFN,DSSDEPT,ECA,ECADM,ECMN,ECTS,ECWARD,ECDC,ECXINP,ECXPRO
|
---|
185 | N ECXATP,ECXDD,ECXDOM,ECXPROF,ECXPWP,ECXWW,FAC,VAIP,WRD,ECXPWPPC
|
---|
186 | N ECXATPPC
|
---|
187 | D FIELD^DID(405,.19,,"SPECIFIER","ECXDD")
|
---|
188 | S ECXPROF=$E(+$P(ECXDD("SPECIFIER"),"P",2)) K ECXDD
|
---|
189 | ;- Inpat/outpat indicator (ECA) initially set to "O" (outpatient)
|
---|
190 | S DFN=ECXDFN,ECA="O"
|
---|
191 | S (DSSDEPT,ECMN,ECTS,ECADM,ECWARD,ECDC,ECXATP,ECXPWP,ECXWW,WRD,FAC,ECXPWPPC,ECXATPPC)=""
|
---|
192 | S VAIP("D")=ECXDATE D IN5^VADPT
|
---|
193 | S ECMN=$G(VAIP(1))
|
---|
194 | I ECMN D
|
---|
195 | .S ECTS=+$P($G(^DIC(45.7,+VAIP(8),0)),U,2) S:ECTS=0 ECTS=""
|
---|
196 | .;- Get inpat/outpat indicator
|
---|
197 | .S ECA=$$INOUTP^ECXUTL4(ECTS)
|
---|
198 | .S ECADM=+$G(VAIP(13,1)) S:ECADM=0 ECADM=""
|
---|
199 | .S ECWARD=+$G(VAIP(5)) S:ECWARD=0 ECWARD=""
|
---|
200 | .I ECWARD D
|
---|
201 | ..S WRD=+$P($G(^DIC(42,+ECWARD,44)),U)
|
---|
202 | ..S FAC=$P($G(^DIC(42,+ECWARD,0)),U,11)
|
---|
203 | ..S DSSDEPT=$P($G(^ECX(727.4,ECWARD,0)),U,2)
|
---|
204 | .S ECXWW=WRD_";"_FAC_";"_DSSDEPT,ECDC=+$G(VAIP(17,1)) S:ECDC=0 ECDC=""
|
---|
205 | .S ECXPWP=+VAIP(7) S:ECXPWP=0 ECXPWP=""
|
---|
206 | .S ECXATP=+VAIP(18) S:ECXATP=0 ECXATP=""
|
---|
207 | .S ECXPWPPC=$$PRVCLASS^ECXUTL(ECXPWP,ECADM)
|
---|
208 | .S ECXATPPC=$$PRVCLASS^ECXUTL(ECXATP,ECADM)
|
---|
209 | .;prefix file #200 iens
|
---|
210 | .S:ECXPWP ECXPWP=ECXPROF_ECXPWP S:ECXATP ECXATP=ECXPROF_ECXATP
|
---|
211 | S ECXDOM=$P($G(^ECX(727.831,+ECTS,0)),U,2)
|
---|
212 | S ECXINP=ECA_U_ECMN_U_ECTS_U_ECADM_U_ECWARD_U_ECDC_U_ECXPWP_U_ECXATP_U_ECXWW_U_ECXDOM_U_ECXPWPPC_U_ECXATPPC
|
---|
213 | Q ECXINP
|
---|
214 | VISN19(ECXDFN,ECXPAYOR,ECXSAI) ;visn 19 sharing agreement data
|
---|
215 | ; input ECXDFN = patient file ien
|
---|
216 | ; output ECXPAYOR, ECXSAI (passed by reference)
|
---|
217 | N JJ,ALIAS,INSUR,DIC,DIQ,DA,DR,ECXARY,ECXERR,ECXDA
|
---|
218 | S (ECXPAYOR,ECXSAI)=""
|
---|
219 | D GETS^DIQ(2,ECXDFN,"1*,","I","ECXARY","ECXERR")
|
---|
220 | I $D(ECXERR) Q
|
---|
221 | S JJ=0 F S JJ=$O(ECXARY(2.01,JJ)) Q:JJ="" D I ECXPAYOR]"" Q
|
---|
222 | . S ALIAS=$G(ECXARY(2.01,JJ,.01,"I"))
|
---|
223 | . S ECXPAYOR=$S(ALIAS="SHARING AGREEMENT":"A",ALIAS="TRICARE":"B",ALIAS="CAT C":"C",ALIAS="CATEGORY C":"C",ALIAS="CHAMPVA":"D",ALIAS="CHAMPUS":"E",1:"")
|
---|
224 | . W !,$G(CNT)+1
|
---|
225 | . W !,"The value of ECXPAYOR is: ",ECXPAYOR
|
---|
226 | ;K ECXARY,ECXERR
|
---|
227 | I ECXPAYOR]"" D GETS^DIQ(2,ECXDFN,".3121*,","I","ECXARY","ECXERR") D
|
---|
228 | . I $D(ECXERR) Q
|
---|
229 | . S JJ=0,ECXDA=$O(ECXARY(2.312,JJ)) I ECXDA="" Q
|
---|
230 | . S DA=$G(ECXARY(2.312,ECXDA,.01,"I")) I DA="" Q
|
---|
231 | . S INSUR=$$GET1^DIQ(36,DA,".01","I","","ECXERR")
|
---|
232 | . I '$D(ECXERR) S ECXSAI=$E(ECXARY(2.312,ECXDA,.01,"I"),1,11)
|
---|
233 | Q
|
---|