1 | PSUDEM2 ;BIR/DAM - Outpatient Visits Extract ;20 DEC 2001
|
---|
2 | ;;4.0;PHARMACY BENEFITS MANAGEMENT;;MARCH, 2005
|
---|
3 | ;
|
---|
4 | ;DBIA's
|
---|
5 | ; Reference to file 2 supported by DBIA 10035
|
---|
6 | ; Reference to file 9000010.07 supported by DBIA 3094
|
---|
7 | ; Reference to file 9000010 supported by DBIA 3512
|
---|
8 | ; Reference to file 4.3 supported by DBIA 2496
|
---|
9 | ; Reference to file 80 supported by DBIA 10082
|
---|
10 | ; Reference to file 9000010.18 supported by DBIA 3560
|
---|
11 | ; Reference to file 81 supported by DBIA 2815
|
---|
12 | EN ;EN Called from PSUCP
|
---|
13 | K ^XTMP("PSU_"_PSUJOB,"PSUOPV"),^XTMP("PSU_"_PSUJOB,"PSUTMP")
|
---|
14 | K NONE
|
---|
15 | NEW CPTDA,CPTNM,ICD9DA,ICD9NM,PSUICN,PSUSSN,PSUSUB,PSUTEDT
|
---|
16 | NEW PSUVSTDT,PSUX,PSUY,PTSTAT,SEG,VCPTDA,XX,J
|
---|
17 | D DAT1
|
---|
18 | I '$D(^XTMP("PSU_"_PSUJOB,"PSUTMP")) D NODATA
|
---|
19 | D XMD
|
---|
20 | EX K ^XTMP("PSU_"_PSUJOB,"PSUPDFLAG")
|
---|
21 | K ^XTMP("PSU_"_PSUJOB,"PSUOPV")
|
---|
22 | K ^XTMP("PSU_"_PSUJOB,"PSUXMD")
|
---|
23 | K ^XTMP("PSU_"_PSUJOB,"PSUTMP")
|
---|
24 | Q
|
---|
25 | ;
|
---|
26 | ;
|
---|
27 | DAT1 ;Find visits from V POV file that fall within the date range
|
---|
28 | S PSUTEDT=PSUEDT
|
---|
29 | S PSUDT=PSUSDT-1,PSUX=9999999-PSUDT,PSUY=9999999-PSUEDT N PSUEDT
|
---|
30 | S PSUY=PSUSDT-.0001
|
---|
31 | F S PSUY=$O(^AUPNVSIT("B",PSUY)) Q:PSUY'>0 Q:((PSUY\1)>PSUTEDT) D
|
---|
32 | . S PSUVIEN=0 F S PSUVIEN=$O(^AUPNVSIT("B",PSUY,PSUVIEN)) Q:$G(PSUVIEN)'>0 D
|
---|
33 | .. S PSUPT=$$VALI^PSUTL(9000010,PSUVIEN,.05)
|
---|
34 | .. D DAT2
|
---|
35 | Q
|
---|
36 | DAT2 ;
|
---|
37 | S PSUPOV=0 F S PSUPOV=$O(^AUPNVPOV("AD",PSUVIEN,PSUPOV)) Q:PSUPOV'>0 D
|
---|
38 | .N PSUVIEN
|
---|
39 | .S PSUVIEN=$P($G(^AUPNVPOV(PSUPOV,0)),U,3)
|
---|
40 | .Q:PSUVIEN=""
|
---|
41 | .Q:$D(^XTMP("PSU"_PSUJOB,"PSUOPV",PSUVIEN)) ; quit if visit psuvien already stored
|
---|
42 | . D POVS
|
---|
43 | .S PSUVSTDT=$P($G(^AUPNVSIT(PSUVIEN,0)),U)\1
|
---|
44 | .S PSUSSN=$P(^DPT(PSUPT,0),U,9)
|
---|
45 | .S PSUICN=$$GETICN^MPIF001(PSUPT)
|
---|
46 | .I PSUICN[-1 S PSUICN=""
|
---|
47 | .S PTSTAT=$P(^AUPNVSIT(PSUVIEN,150),U,2),PTSTAT=$S(+PTSTAT:"I",1:"O")
|
---|
48 | . D SET
|
---|
49 | Q
|
---|
50 | POVS ;severl POVs can have same visit, work all when the first is found
|
---|
51 | N PSUPOV
|
---|
52 | S PSUPOV=0 F S PSUPOV=$O(^AUPNVPOV("AD",PSUVIEN,PSUPOV)) Q:PSUPOV'>0 D
|
---|
53 | . K ALLICD9,ALLCPT
|
---|
54 | .;LOOP CPTs linked by visit
|
---|
55 | . S VCPTDA=0 F S VCPTDA=$O(^AUPNVCPT("AD",PSUVIEN,VCPTDA)) Q:VCPTDA'>0 D
|
---|
56 | .. ; get/gather cpts
|
---|
57 | ..S CPTDA=$P($G(^AUPNVCPT(VCPTDA,0)),U),CPTNM=$P($G(^ICPT(CPTDA,0)),U) S:$L(CPTNM) ALLCPT(CPTNM)=""
|
---|
58 | .. ;get/gather icd9s
|
---|
59 | ..S ICD9DA=$P($G(^AUPNVCPT(VCPTDA,0)),U,5) I ICD9DA S ICD9NM=$P($G(^ICD9(ICD9DA,0)),U) S:$L(ICD9NM) ALLICD9(ICD9NM)=""
|
---|
60 | . ;get orig ICD9
|
---|
61 | .S ICD9DA=$P($G(^AUPNVPOV(PSUPOV,0)),U) I ICD9DA S ICD9NM=$P($G(^ICD9(ICD9DA,0)),U) S:$L(ICD9NM) ALLICD9(ICD9NM)=""
|
---|
62 | Q
|
---|
63 | SET ; Set segment
|
---|
64 | I '$D(ALLICD9),'$D(ALLCPT) Q ;insure visit has either CPT or ICD9
|
---|
65 | ;assemble elements and set
|
---|
66 | S SEG=U_PSUSNDR_U_PTSTAT_U_PSUVSTDT_U_PSUSSN_U_PSUICN_U
|
---|
67 | I $D(ALLICD9) S ICD9NM="" F I=7:1:16 S ICD9NM=$O(ALLICD9(ICD9NM)) Q:ICD9NM="" S $P(SEG,U,I)=ICD9NM
|
---|
68 | I $D(ALLCPT) S CPTNM="" F J=17:1:26 S CPTNM=$O(ALLCPT(CPTNM)) Q:CPTNM="" S $P(SEG,U,J)=CPTNM
|
---|
69 | S $P(SEG,U,27)=""
|
---|
70 | S ^XTMP("PSU_"_PSUJOB,"PSUTMP",PSUVIEN)=SEG
|
---|
71 | Q
|
---|
72 | ;
|
---|
73 | XMD ;Format mailman message and send.
|
---|
74 | S PSUAB=0
|
---|
75 | F PSUPL=1:1 S PSUAB=$O(^XTMP("PSU_"_PSUJOB,"PSUTMP",PSUAB)) Q:PSUAB'>0 S XX=^(PSUAB) D
|
---|
76 | . S ^XTMP("PSU_"_PSUJOB,"PSUOPV",PSUPL)=XX
|
---|
77 | NEW PSUMAX,PSULC,PSUTMC,PSUTLC,PSUMC
|
---|
78 | S PSUMAX=$$VAL^PSUTL(4.3,1,8.3)
|
---|
79 | S PSUMAX=$S(PSUMAX="":10000,PSUMAX>10000:10000,1:PSUMAX)
|
---|
80 | S PSUMC=1,PSUMLC=0
|
---|
81 | F PSULC=1:1 S X=$G(^XTMP("PSU_"_PSUJOB,"PSUOPV",PSULC)) Q:X="" D
|
---|
82 | .S PSUMLC=PSUMLC+1
|
---|
83 | .I PSUMLC>PSUMAX S PSUMC=PSUMC+1,PSUMLC=0,PSULC=PSULC-1 Q ; + message
|
---|
84 | .I $L(X)<235 S ^XTMP("PSU_"_PSUJOB,"PSUXMD",PSUMC,PSUMLC)=X Q
|
---|
85 | .F I=235:-1:1 S Z=$E(X,I) Q:Z="^"
|
---|
86 | .S ^XTMP("PSU_"_PSUJOB,"PSUXMD",PSUMC,PSUMLC)=$E(X,1,I)
|
---|
87 | .S PSUMLC=PSUMLC+1
|
---|
88 | .S ^XTMP("PSU_"_PSUJOB,"PSUXMD",PSUMC,PSUMLC)="*"_$E(X,I+1,999)
|
---|
89 | ;
|
---|
90 | TLC ; Count Lines sent
|
---|
91 | S PSUTLC=0
|
---|
92 | F PSUM=1:1:PSUMC S X=$O(^XTMP("PSU_"_PSUJOB,"PSUXMD",PSUM,""),-1),PSUTLC=PSUTLC+X
|
---|
93 | ;
|
---|
94 | F PSUM=1:1:PSUMC D OPV^PSUDEM5
|
---|
95 | D CONF
|
---|
96 | Q
|
---|
97 | CONF ;Construct globals for confirmation message
|
---|
98 | ;
|
---|
99 | I $G(NONE) S PSUTLC=0
|
---|
100 | N PSUDIVIS
|
---|
101 | S PSUDIVIS=$P(^XTMP("PSU_"_PSUJOB,"PSUSITE"),U,1)
|
---|
102 | S PSUSUB="PSU_"_PSUJOB
|
---|
103 | S ^XTMP(PSUSUB,"CONFIRM",PSUDIVIS,8,"M")=PSUMC
|
---|
104 | S ^XTMP(PSUSUB,"CONFIRM",PSUDIVIS,8,"L")=PSUTLC
|
---|
105 | Q
|
---|
106 | ;
|
---|
107 | NODATA ;Generate a 'No data' message if there is no data in the extract
|
---|
108 | ;
|
---|
109 | S NONE=1
|
---|
110 | M PSUXMYH=PSUXMYS1
|
---|
111 | S PSUM=1
|
---|
112 | S ^XTMP("PSU_"_PSUJOB,"PSUXMD",PSUM,1)="No data to report"
|
---|
113 | Q
|
---|
114 | REC ;EN If "^" is contained in any record, replace it with "'"
|
---|
115 | ;
|
---|
116 | I PSUREC["^" S PSUREC=$TR(PSUREC,"^","'")
|
---|
117 | Q
|
---|