1 | ECXAPRO ;ALB/JAP - PRO Extract Audit Report ; Nov 16, 1998
|
---|
2 | ;;3.0;DSS EXTRACTS;**9,21,33,36**;Dec 22, 1997
|
---|
3 | ;
|
---|
4 | EN ;entry point for PRO extract audit report
|
---|
5 | N %X,%Y,DIV,X,Y,DIC,DA,DR,DIQ,DIR,DIRUT,DTOUT,DUOUT
|
---|
6 | S ECXERR=0
|
---|
7 | ;ecxaud=0 for 'extract' audit
|
---|
8 | S ECXHEAD="PRO",ECXAUD=0
|
---|
9 | W !!,"Setup for ",ECXHEAD," Extract Audit Report --",!!
|
---|
10 | ;determine primary division
|
---|
11 | S ECXPRIME=$$PDIV^ECXPUTL
|
---|
12 | I ECXPRIME=0 D ^ECXKILL Q
|
---|
13 | S DA=ECXPRIME,DIC="^DIC(4,",DIQ(0)="I",DIQ="ECXDIC",DR=".01;99" D EN^DIQ1
|
---|
14 | S ECXPRIME=ECXPRIME_U_$G(ECXDIC(4,DA,99,"I"))_U_$G(ECXDIC(4,DA,.01,"I"))
|
---|
15 | ;select 1 or more prosthetics divisions for report
|
---|
16 | D PRO^ECXDVSN2(DUZ,ECXPRIME,.ECXDIV,.ECXALL,.ECXERR)
|
---|
17 | I ECXERR D Q
|
---|
18 | .D ^ECXKILL W !!,?5,"Try again later... exiting.",!
|
---|
19 | ;select extract
|
---|
20 | D AUDIT^ECXUTLA(ECXHEAD,.ECXERR,.ECXARRAY,ECXAUD)
|
---|
21 | I ECXERR=1 D Q
|
---|
22 | .W !!,?5,"Try again later... exiting.",!
|
---|
23 | .D AUDIT^ECXKILL
|
---|
24 | ;if user's selected division doesn't match extract's division, then quit
|
---|
25 | I +ECXPRIME'=ECXARRAY("DIV") D Q
|
---|
26 | .S DIV=+ECXARRAY("DIV") S:$D(^DIC(4,DIV,0)) DIV=$P(^(0),U,1)
|
---|
27 | .W !!,?5,"Your primary division ("_$P(ECXPRIME,U,3)_") does not match the"
|
---|
28 | .W !,?5,"division ("_DIV_") associated with Extract #"_ECXARRAY("EXTRACT")_"."
|
---|
29 | .W !!,?5,"Try again... exiting.",!
|
---|
30 | .I $E(IOST)="C" D
|
---|
31 | ..S SS=20-$Y F JJ=1:1:SS W !
|
---|
32 | ..S DIR(0)="E" W ! D ^DIR K DIR
|
---|
33 | ..W @IOF
|
---|
34 | ;select summary or detail
|
---|
35 | K DIR S DIR(0)="S^D:DETAIL;S:SUMMARY",DIR("A")="Type of Report",DIR("B")="SUMMARY"
|
---|
36 | D ^DIR K DIR
|
---|
37 | I $D(DIRUT)!($D(DTOUT)) D Q
|
---|
38 | .W !!,?5,"Try again later... exiting.",!
|
---|
39 | .D AUDIT^ECXKILL
|
---|
40 | S ECXREPT=Y
|
---|
41 | ;continue with detail report
|
---|
42 | I ECXREPT="D" D
|
---|
43 | .F D ASK2^ECXAPRO2 Q:$D(DIRUT)!($D(DTOUT))
|
---|
44 | ;continue with summary report
|
---|
45 | I ECXREPT="S" D
|
---|
46 | .S ECXPGM="TASK^ECXAPRO",ECXDESC="PRO Extract Audit Report"
|
---|
47 | .S ECXSAVE("ECXHEAD")="",ECXSAVE("ECXDIV(")="",ECXSAVE("ECXARRAY(")="",ECXSAVE("ECXREPT")="",ECXSAVE("ECXPRIME")="",ECXSAVE("ECXALL")=""
|
---|
48 | .W !
|
---|
49 | .;determine output device and queue if requested
|
---|
50 | .D DEVICE^ECXUTLA(ECXPGM,ECXDESC,.ECXSAVE) I ECXSAVE("POP")=1 D Q
|
---|
51 | ..W !!,?5,"Try again later... exiting.",!
|
---|
52 | ..D AUDIT^ECXKILL
|
---|
53 | .I ECXSAVE("ZTSK")=0 D
|
---|
54 | ..K ECXSAVE,ECXPGM,ECXDESC
|
---|
55 | ..D PROCESS,DISP^ECXAPRO1
|
---|
56 | ..;allow user to get details
|
---|
57 | ..D ASK^ECXAPRO2
|
---|
58 | ;clean-up and close
|
---|
59 | I IO'=IO(0) D ^%ZISC
|
---|
60 | D HOME^%ZIS
|
---|
61 | D AUDIT^ECXKILL
|
---|
62 | Q
|
---|
63 | ;
|
---|
64 | TASK ;entry point from taskmanager
|
---|
65 | D PROCESS
|
---|
66 | I ECXREPT="S" D DISP^ECXAPRO1
|
---|
67 | I ECXREPT="D" D DISP^ECXAPRO2
|
---|
68 | D AUDIT^ECXKILL
|
---|
69 | Q
|
---|
70 | ;
|
---|
71 | PROCESS ;process the data in file #727.826
|
---|
72 | N J,CNT,CODE,COST,CPTNM,DATE,DESC,FLG,GN,IEN,KEY,LOC,LABLC,LABMC,NODE,PTNAM,PSASNM,QTY,QFLG,QQFLG,RD,SSN,STN,SRCE,TYPE
|
---|
73 | K ^TMP($J)
|
---|
74 | S (CNT,QQFLG)=0
|
---|
75 | S ECXEXT=ECXARRAY("EXTRACT"),ECXDEF=ECXARRAY("DEF")
|
---|
76 | S X=ECXARRAY("START") D ^%DT S ECXSTART=Y S X=ECXARRAY("END") D ^%DT S ECXEND=Y
|
---|
77 | D NOW^%DTC S Y=$E(%,1,12) D DD^%DT S ECXRUN=Y
|
---|
78 | I ECXALL=0 S J=$O(ECXDIV(99),-1),ECXDIV=ECXDIV(J)
|
---|
79 | I ECXALL=1 S ECXDIV=ECXPRIME
|
---|
80 | S STN=$P(ECXDIV,U,2)
|
---|
81 | ;initialize the prosthetics tmp global for cumulative data
|
---|
82 | D CODE^ECXAPRO1
|
---|
83 | ;gather extract data and sort by grouper number, calc flag, and nppd code
|
---|
84 | S IEN="" F S IEN=$O(^ECX(727.826,"AC",ECXEXT,IEN)) Q:IEN="" D Q:QQFLG
|
---|
85 | .S ECXPRO=^ECX(727.826,IEN,0)
|
---|
86 | .;
|
---|
87 | .;- Remove trailing "^" from ECXPRO if there
|
---|
88 | .I $E(ECXPRO,$L(ECXPRO))="^" S ECXPRO=$E(ECXPRO,1,$L(ECXPRO)-1)
|
---|
89 | .S ECXPRO=ECXPRO_U_$P(^ECX(727.826,IEN,1),U,4)
|
---|
90 | .S DATE=$P(ECXPRO,U,9)
|
---|
91 | .S $E(DATE,1,2)=$E(DATE,1,2)-17
|
---|
92 | .Q:$L(DATE)<7 Q:(DATE<ECXSTART) Q:(DATE>ECXEND)
|
---|
93 | .S DATE=$E(DATE,4,5)_"/"_$E(DATE,6,7)
|
---|
94 | .S PTNAM=$P(ECXPRO,U,7),SSN=$E($P(ECXPRO,U,6),6,9)
|
---|
95 | .S LOC=$P(ECXPRO,U,10),KEY=$P(ECXPRO,U,11),QTY=$P(ECXPRO,U,12)
|
---|
96 | .S COST=$P(ECXPRO,U,25),LABLC=$P(ECXPRO,U,26),LABMC=$P(ECXPRO,U,27)
|
---|
97 | .S GN=$P(ECXPRO,U,34),GN=$S(GN="":" ",1:GN)
|
---|
98 | .;don't double count lab items
|
---|
99 | .Q:LOC["LAB"
|
---|
100 | .;duplicate the logic in sort^rmprn6 that sets cost=0 if form=4
|
---|
101 | .I LOC["ORD" S COST=0
|
---|
102 | .S LOC=$S(LOC["ORD":$P(LOC,"ORD",1),1:$P(LOC,"NONL",1))
|
---|
103 | .;quit if feeder location isn't for division selected for report
|
---|
104 | .I ECXALL=1,LOC'[STN Q
|
---|
105 | .I ECXALL=0,LOC'=STN Q
|
---|
106 | .S TYPE=$E(KEY,6),SRCE=$E(KEY,7)
|
---|
107 | .S CPTNM=$P(ECXPRO,U,15),PSASNM=$P(ECXPRO,U,33)
|
---|
108 | .D GETCODE(PSASNM,.NODE)
|
---|
109 | .Q:NODE=""
|
---|
110 | .S CODE=$S(TYPE="X":$P(NODE,U,3),1:$P(NODE,U,4))
|
---|
111 | .S FLG=$P(NODE,U,2),DESC=$P(NODE,U,5)
|
---|
112 | .S ^TMP($J,"RMPRGN",STN,GN,FLG,CODE,IEN)=TYPE_U_SRCE_U_QTY_U_COST_U_LABLC_U_LABMC_U_PSASNM_U_DESC_U_PTNAM_U_SSN_U_DATE_U_LOC
|
---|
113 | ;accumulate summary & detail data
|
---|
114 | S GN=""
|
---|
115 | F S GN=$O(^TMP($J,"RMPRGN",STN,GN)) Q:GN="" D
|
---|
116 | .S FLG=0
|
---|
117 | .F S FLG=$O(^TMP($J,"RMPRGN",STN,GN,FLG)) Q:FLG'>0 D
|
---|
118 | ..I FLG=1 D GROUP S FLG=2 Q
|
---|
119 | ..S CODE=0
|
---|
120 | ..F S CODE=$O(^TMP($J,"RMPRGN",STN,GN,FLG,CODE)) Q:CODE="" D
|
---|
121 | ...S RD=0
|
---|
122 | ...F S RD=$O(^TMP($J,"RMPRGN",STN,GN,FLG,CODE,RD)) Q:RD'>0 D
|
---|
123 | ....S TYPE=$P(^TMP($J,"RMPRGN",STN,GN,FLG,CODE,RD),U,1),SRCE=$P(^(RD),U,2),QTY=$P(^(RD),U,3),COST=$P(^(RD),U,4)
|
---|
124 | ....S ^TMP($J,CODE,RD)=^TMP($J,"RMPRGN",STN,GN,FLG,CODE,RD)
|
---|
125 | ....I TYPE="X" D REP(CODE)
|
---|
126 | ....I TYPE="N" D NEW(CODE)
|
---|
127 | Q
|
---|
128 | ;
|
---|
129 | GETCODE(PSAS,NODE) ;find the appropriate nppd code using psas hcpcs
|
---|
130 | N DIC,X,Y,DESC,FLG,NU,REP
|
---|
131 | S NODE=""
|
---|
132 | S DIC="^RMPR(661.1,",DIC(0)="XZ",X=PSAS D ^DIC
|
---|
133 | I Y=-1 S NODE=U_"2"_U_"R99 Z"_U_"999 Z"_U_"NO HCPCS" Q
|
---|
134 | S DESC=$E($P(Y(0),U,2),1,20)
|
---|
135 | S FLG=$P(Y(0),U,8) S:FLG="" FLG=2
|
---|
136 | ;make sure each code at least 4 characters; group codes are 3 characters in tmp($j,rmprcode)
|
---|
137 | S REP=$P(Y(0),U,6) S:$L(REP)=3 REP=REP_" " S:REP="" REP="R99 X"
|
---|
138 | S NU=$P(Y(0),U,7) S:$L(NU)=3 NU=NU_" " S:NU="" NU="999 X"
|
---|
139 | S NODE=U_FLG_U_REP_U_NU_U_DESC
|
---|
140 | Q
|
---|
141 | ;
|
---|
142 | GROUP ;total grouper to main key
|
---|
143 | N BF,BL,BR,BCOST,BTCOST,COST,QTY,TYPE,SRCE
|
---|
144 | S BF=0,BTCOST=0
|
---|
145 | F S BF=$O(^TMP($J,"RMPRGN",STN,GN,BF)) Q:BF'>0 D
|
---|
146 | .S BL=0
|
---|
147 | .F S BL=$O(^TMP($J,"RMPRGN",STN,GN,BF,BL)) Q:BL="" D
|
---|
148 | ..S BR=0
|
---|
149 | ..F S BR=$O(^TMP($J,"RMPRGN",STN,GN,BF,BL,BR)) Q:BR'>0 D
|
---|
150 | ...S BCOST=$P(^TMP($J,"RMPRGN",STN,GN,BF,BL,BR),U,4)
|
---|
151 | ...S BTCOST=BTCOST+BCOST
|
---|
152 | S BL=$O(^TMP($J,"RMPRGN",STN,GN,1,"")),BR=$O(^TMP($J,"RMPRGN",STN,GN,1,BL,""))
|
---|
153 | ;calculate based on primary
|
---|
154 | S TYPE=$P(^TMP($J,"RMPRGN",STN,GN,1,BL,BR),U,1),SRCE=$P(^(BR),U,2),QTY=$P(^(BR),U,3)
|
---|
155 | S COST=BTCOST
|
---|
156 | S ^TMP($J,BL,BR)=^TMP($J,"RMPRGN",STN,GN,1,BL,BR),$P(^TMP($J,BL,BR),U,4)=COST
|
---|
157 | I TYPE="X" D REP(BL)
|
---|
158 | I TYPE="N" D NEW(BL)
|
---|
159 | Q
|
---|
160 | ;
|
---|
161 | REP(C) ;calculate repair cost
|
---|
162 | N LINE
|
---|
163 | S LINE=C
|
---|
164 | I LINE="R90 A" S SRCE="C",QTY=1
|
---|
165 | I $G(^TMP($J,"R",STN,LINE))="" S ^TMP($J,"R",STN,LINE)=""
|
---|
166 | I SRCE["V" S $P(^TMP($J,"R",STN,LINE),U,1)=$P(^TMP($J,"R",STN,LINE),U,1)+QTY
|
---|
167 | I SRCE["C" S $P(^TMP($J,"R",STN,LINE),U,2)=$P(^TMP($J,"R",STN,LINE),U,2)+QTY
|
---|
168 | S $P(^TMP($J,"R",STN,LINE),U,3)=$P(^TMP($J,"R",STN,LINE),U,3)+COST
|
---|
169 | Q
|
---|
170 | ;
|
---|
171 | NEW(C) ;calculate new costs
|
---|
172 | N LINE
|
---|
173 | S LINE=C
|
---|
174 | I $G(^TMP($J,"N",STN,LINE))="" S ^TMP($J,"N",STN,LINE)=""
|
---|
175 | I SRCE["V" S $P(^TMP($J,"N",STN,LINE),U,1)=$P(^TMP($J,"N",STN,LINE),U,1)+QTY
|
---|
176 | I SRCE["C" S $P(^TMP($J,"N",STN,LINE),U,2)=$P(^TMP($J,"N",STN,LINE),U,2)+QTY
|
---|
177 | S $P(^TMP($J,"N",STN,LINE),U,3)=$P(^TMP($J,"N",STN,LINE),U,3)+COST
|
---|
178 | Q
|
---|