| 1 | RMPRN6 ;Hines OIFO/HNC-PRINT NPPD LOCAL DATA ;3/17/03  11:38 | 
|---|
| 2 | ;;3.0;PROSTHETICS;**31,32,34,36,39,48,51,70,77,90**;Feb 09, 1996 | 
|---|
| 3 | ;RVD 3/17/03 patch #77 - fix undefined and closing device. | 
|---|
| 4 | ;SPS 5/24/05 Patch #90 - check for type of 5 Rental. | 
|---|
| 5 | D DIV4^RMPRSIT G:$D(X) EXIT | 
|---|
| 6 | DATE S %DT="XEA",%DT("A")="Enter Date to Start NPPD Calculations From: " D ^%DT G:X[U!(X="")!($D(DTOUT)) EXIT | 
|---|
| 7 | S DATE(1)=+Y | 
|---|
| 8 | S %DT="XEA",%DT("A")="Enter End Date: " D ^%DT G:X[U!(X="")!($D(DTOUT)) EXIT S DATE(2)=+Y | 
|---|
| 9 | I DATE(1)>DATE(2) W !!,$C(7),"ENDING DATE RANGE IS LESS THAN BEGINNING DATE RANGE",! G DATE | 
|---|
| 10 | Q:$D(RMPRCDE) | 
|---|
| 11 | DET ;select detail or brief | 
|---|
| 12 | D DISP^RMPRN6S | 
|---|
| 13 | K DIR | 
|---|
| 14 | ;S DIR(0)="S^D:DETAIL;B:BRIEF" | 
|---|
| 15 | S DIR(0)="S^1:BRIEF NEW SUMMARY;2:BRIEF USED SUMMARY;3:BRIEF BOTH SUMMARY;4:DETAIL & NEW SUMMARY;5:DETAIL & USED SUMMARY;6:DETAIL & BOTH SUMMARY" | 
|---|
| 16 | S DIR("A")="Type of Report",DIR("B")="DETAIL & NEW SUMMARY" D ^DIR | 
|---|
| 17 | Q:$D(DIRUT)!($D(DTOUT)) | 
|---|
| 18 | S RMPRDET=Y | 
|---|
| 19 | DEV ;device | 
|---|
| 20 | S %ZIS="Q" D ^%ZIS G:POP EXIT K IOP I $E(IOST,1,2)["C-" G PRT | 
|---|
| 21 | I $D(IO("Q")) S ZTIO=ION,ZTSAVE("RMPRSITE")="",ZTSAVE("RMPR(")="" | 
|---|
| 22 | I  S ZTSAVE("DATE(")="",ZTSAVE("RMPRZ")="",ZTSAVE("RMPRDET")="" | 
|---|
| 23 | I  S ZTRTN="PRT^RMPRN6",ZTDESC="Prosthetic NPPD" D ^%ZTLOAD K ZTDESC,ZTIO,ZTRTN,ZTSAVE G EXIT | 
|---|
| 24 | PRT ;print | 
|---|
| 25 | I '$D(IO("Q")) U IO | 
|---|
| 26 | D GNP,GNPC | 
|---|
| 27 | Q | 
|---|
| 28 | ENL ;entry point for one line | 
|---|
| 29 | D DIV4^RMPRSIT G:$D(X) EXIT | 
|---|
| 30 | S RMPRCDE=1 | 
|---|
| 31 | D DATE | 
|---|
| 32 | G:'$D(DATE(1))!('$D(DATE(2))) EXIT | 
|---|
| 33 | ;single line always new and used (BOTH) sort | 
|---|
| 34 | S RMPRDET=6 | 
|---|
| 35 | D GNPCC,EXIT | 
|---|
| 36 | Q | 
|---|
| 37 | GNP ;gather nppd data | 
|---|
| 38 | S $P(LN,"-",IOM)="" | 
|---|
| 39 | S DATE=DATE(1)-1 | 
|---|
| 40 | K ^TMP($J) | 
|---|
| 41 | F  S DATE=$O(^RMPR(660,"B",DATE)) Q:(DATE="")!($P(DATE,".",1)>DATE(2))  D | 
|---|
| 42 | .S RMPRB=0 | 
|---|
| 43 | .F  S RMPRB=$O(^RMPR(660,"B",DATE,RMPRB)) Q:RMPRB'>0  D | 
|---|
| 44 | ..;define variables for record | 
|---|
| 45 | ..S REC=$G(^RMPR(660,RMPRB,0)) Q:REC="" | 
|---|
| 46 | ..Q:$P(REC,U,15)["*" | 
|---|
| 47 | ..Q:$P(REC,U,10)'=RMPR("STA") | 
|---|
| 48 | ..;check for used pip | 
|---|
| 49 | ..;if used pip sort, not pip, not va, quit | 
|---|
| 50 | ..I $G(RMPRDET)=2&($P($G(^RMPR(660,RMPRB,1)),U,5)'="")&($P(REC,U,14)'="V") Q | 
|---|
| 51 | ..I $G(RMPRDET)=5&($P($G(^RMPR(660,RMPRB,1)),U,5)'="")&($P(REC,U,14)'="V") Q | 
|---|
| 52 | ..S TYPE=$P(REC,U,4) | 
|---|
| 53 | ..S TY=$S(TYPE="X":2,TYPE=5:2,TYPE="I":1,1:3) | 
|---|
| 54 | ..S MR=$P($G(^RMPR(660,RMPRB,1)),U,4) | 
|---|
| 55 | ..I $P(^RMPR(660,RMPRB,0),U,17)'=""&($P(^(0),U,26)="") S TY=2,LINE="R90 A",MR=2676 | 
|---|
| 56 | ..;PICKUP AND DELIVERY | 
|---|
| 57 | ..I $P(^RMPR(660,RMPRB,0),U,26)'="" S TY=2,LINE="R80 D",MR=2951 | 
|---|
| 58 | ..Q:MR="" | 
|---|
| 59 | ..;        PATCH 70             Auto-fix | 
|---|
| 60 | ..K LINE | 
|---|
| 61 | ..I TY'=2 S LINE=$P(^RMPR(661.1,MR,0),U,7) | 
|---|
| 62 | ..I TY'=2&($G(LINE)="") D | 
|---|
| 63 | ...; I TYPE=5 Q | 
|---|
| 64 | ...S ERR="" | 
|---|
| 65 | ...S LINE=$P(^RMPR(661.1,MR,0),U,6) | 
|---|
| 66 | ...S TYPE="X" | 
|---|
| 67 | ...S DIE="^RMPR(660,",DA=RMPRB,DR="2///^S X=TYPE" | 
|---|
| 68 | ...L +^RMPR(660,RMPRB):1 I '$T S ERR=1 | 
|---|
| 69 | ...I ERR="" D ^DIE L -^RMPR(660,RMPRB) | 
|---|
| 70 | ...K DIE,DA,DR | 
|---|
| 71 | ...I ERR=1 S ^TMP($J,"RMPRA",RMPRB)="NO UPDATE!" | 
|---|
| 72 | ...I ERR="" S ^TMP($J,"RMPRA",RMPRB)="NEW TO REPAIR" | 
|---|
| 73 | ...S B=RMPRB D DATA^RMPRN6XM | 
|---|
| 74 | ..I TY=2 S LINE=$P(^RMPR(661.1,MR,0),U,6) | 
|---|
| 75 | ..I TY=2&($G(LINE)="") D | 
|---|
| 76 | ...; I TYPE=5 Q | 
|---|
| 77 | ...S ERR="" | 
|---|
| 78 | ...S LINE=$P(^RMPR(661.1,MR,0),U,7) | 
|---|
| 79 | ...S TYPE="I" | 
|---|
| 80 | ...S DIE="^RMPR(660,",DA=RMPRB,DR="2///^S X=TYPE" | 
|---|
| 81 | ...L +^RMPR(660,RMPRB):1 I '$T S ERR=1 | 
|---|
| 82 | ...I ERR="" D ^DIE L -^RMPR(660,RMPRB) | 
|---|
| 83 | ...K DIE,DA,DR | 
|---|
| 84 | ...I ERR=1 S ^TMP($J,"RMPRA",RMPRB)="NO UPDATE!" | 
|---|
| 85 | ...I ERR="" S ^TMP($J,"RMPRA",RMPRB)="REPAIR TO NEW" | 
|---|
| 86 | ...S B=RMPRB D DATA^RMPRN6XM | 
|---|
| 87 | ..; | 
|---|
| 88 | ..I LINE="" W !,"Line is null, something wrong with file 661.1  :",MR | 
|---|
| 89 | ..;set to 999 group if null | 
|---|
| 90 | ..S FLAG=$P(^RMPR(661.1,MR,0),U,8) | 
|---|
| 91 | ..I FLAG="" S FLAG=2 | 
|---|
| 92 | ..S CATEGRY=$P($G(^RMPR(660,RMPRB,"AM")),U,3),SPEC=$P($G(^("AM")),U,4),GN=$P($G(^("AMS")),U,1) | 
|---|
| 93 | ..Q:GN="" | 
|---|
| 94 | ..D SET | 
|---|
| 95 | D FMT^RMPRN6XM,MAIL^RMPRN6XM | 
|---|
| 96 | Q | 
|---|
| 97 | GNPC ;worksheet/detail | 
|---|
| 98 | S STN=RMPR("NAME") | 
|---|
| 99 | D CAL^RMPRN6 | 
|---|
| 100 | S PAGE=0,FL="" | 
|---|
| 101 | D ^RMPRN6PT | 
|---|
| 102 | G:FL=1 EXIT | 
|---|
| 103 | D ^RMPRN6PR | 
|---|
| 104 | G:FL=1 EXIT | 
|---|
| 105 | I RMPRDET<4 G EXIT | 
|---|
| 106 | D DESP^RMPRN63 | 
|---|
| 107 | D DESPR^RMPRN63 | 
|---|
| 108 | EXIT ;commom exit point | 
|---|
| 109 | D ^%ZISC | 
|---|
| 110 | N RMPR,RMPRSITE | 
|---|
| 111 | K ^TMP($J) D KILL^XUSCLEAN | 
|---|
| 112 | Q | 
|---|
| 113 | GNPCC ;one line only | 
|---|
| 114 | S STN=RMPR("NAME") | 
|---|
| 115 | D CODE^RMPRN63 | 
|---|
| 116 | D ^RMPRN6UT | 
|---|
| 117 | G:$D(DIRUT)!($D(DTOUT)) EXIT | 
|---|
| 118 | I $G(RMPRCDE)="" S RMPRCDE="",RMPRCDE=$O(BRA(Y,RMPRCDE)) | 
|---|
| 119 | S Y=DATE(1) D DD^%DT S DATE(3)=Y,Y=DATE(2) D DD^%DT S DATE(4)=Y | 
|---|
| 120 | S %ZIS="Q" D ^%ZIS G:POP EXIT K IOP I $E(IOST,1,2)["C-" G PRTL | 
|---|
| 121 | I $D(IO("Q")) S ZTIO=ION,ZTSAVE("RMPRSITE")="",ZTSAVE("RMPR(")="" | 
|---|
| 122 | I  S ZTSAVE("DATE(")="",ZTSAVE("RMPRZ")="",ZTSAVE("RMPRDET")="",ZTSAVE("RMPRCDE")="" | 
|---|
| 123 | I  S ZTRTN="PRTL^RMPRN6",ZTDESC="Prosthetic NPPD" D ^%ZTLOAD K ZTDESC,ZTIO,ZTRTN,ZTSAVE G EXIT | 
|---|
| 124 | PRTL ;print one line entry from taskman | 
|---|
| 125 | I '$D(IO("Q")) U IO | 
|---|
| 126 | D GNP | 
|---|
| 127 | D CAL^RMPRN6 | 
|---|
| 128 | S PAGE=0,FL="" | 
|---|
| 129 | S CODE=RMPRCDE | 
|---|
| 130 | D DESP^RMPRN6PL | 
|---|
| 131 | Q | 
|---|
| 132 | SET ;set temp global | 
|---|
| 133 | S STN=RMPR("NAME") | 
|---|
| 134 | S ^TMP($J,"RMPRGN",STN,GN,FLAG,LINE,RMPRB)="" | 
|---|
| 135 | S RMSSN=$P(^RMPR(660,RMPRB,0),U,2) I RMSSN S RMSSN=$P(^DPT(RMSSN,0),U,9) | 
|---|
| 136 | I RMSSN'="" S ^TMP($J,"A",RMSSN)="" | 
|---|
| 137 | K RMSSN | 
|---|
| 138 | Q | 
|---|
| 139 | ; | 
|---|
| 140 | LOOP ;sort on hcpcs key and grouper is complete | 
|---|
| 141 | ;store in tmp($j,"N",station) or "R" | 
|---|
| 142 | S (TAM,T1,RMPRB,COUNT,CODE,RMPRAD,DATE,RMPRFG,RMPRT,RMPRI,RMPRNW,RMPRRPR)=0 | 
|---|
| 143 | S (TQTY,RMPROTH,CC,RMPRC,RMPRN,TT,RMPRPSC,VA,CM,RMPRCT1,SO,SI,DIS,RMPRCT,RMPR21,CODE,RMPRB,FM,LEG,RMPRNI,RMPRNO,RMPRSL,RMPRAA,RMPRPHC)=0 | 
|---|
| 144 | S DATE=DATE(1),RMPRB=0 | 
|---|
| 145 | CAL ;loop through grouper key sort | 
|---|
| 146 | S STN=RMPR("NAME") | 
|---|
| 147 | D CODE^RMPRN63 | 
|---|
| 148 | S GN="" | 
|---|
| 149 | F  S GN=$O(^TMP($J,"RMPRGN",STN,GN)) Q:GN=""  D | 
|---|
| 150 | .S FLG=0 | 
|---|
| 151 | .F  S FLG=$O(^TMP($J,"RMPRGN",STN,GN,FLG)) Q:FLG'>0  D  I FLG=1&(RMPRDET'=2)!(RMPRDET'=5) Q | 
|---|
| 152 | ..;used items never get grouped | 
|---|
| 153 | ..I FLG=1&(RMPRDET'=2)&(RMPRDET'=5) D GROUP Q | 
|---|
| 154 | ..;I FLG=1 D GROUP Q | 
|---|
| 155 | ..S CODE=0 | 
|---|
| 156 | ..F  S CODE=$O(^TMP($J,"RMPRGN",STN,GN,FLG,CODE)) Q:CODE=""  D | 
|---|
| 157 | ...S RD=0 | 
|---|
| 158 | ...F  S RD=$O(^TMP($J,"RMPRGN",STN,GN,FLG,CODE,RD)) Q:RD'>0  D | 
|---|
| 159 | ....I RMPRDET=1!(RMPRDET=4) D SORT Q | 
|---|
| 160 | ....I RMPRDET=2!(RMPRDET=5) D SORTUSED^RMPRN6S Q | 
|---|
| 161 | ....I RMPRDET=3!(RMPRDET=6) D SORTBOTH^RMPRN6S Q | 
|---|
| 162 | ....;D SORT | 
|---|
| 163 | Q | 
|---|
| 164 | GROUP ;total grouper to main key | 
|---|
| 165 | M BC=^TMP($J,"RMPRGN",STN,GN) | 
|---|
| 166 | S BF=0,BTCOST=0,SRD="" | 
|---|
| 167 | ;bc array is entrie PO 2421 | 
|---|
| 168 | F  S BF=$O(BC(BF)) Q:BF'>0  D | 
|---|
| 169 | .;b1 is line,or code | 
|---|
| 170 | .S BL=0 | 
|---|
| 171 | .F  S BL=$O(BC(BF,BL)) Q:BL=""  D | 
|---|
| 172 | ..S BR=0 | 
|---|
| 173 | ..;BR is record number | 
|---|
| 174 | ..F  S BR=$O(BC(BF,BL,BR)) Q:BR'>0  D | 
|---|
| 175 | ...S BCOST=$P(^RMPR(660,BR,0),U,16) | 
|---|
| 176 | ...S BTCOST=BTCOST+BCOST | 
|---|
| 177 | ...I (BF=1)&(SRD="") S SRD=BR,CODE="",CODE=$O(BC(1,CODE)) | 
|---|
| 178 | K BC | 
|---|
| 179 | Q:SRD="" | 
|---|
| 180 | ;calculate based on primary | 
|---|
| 181 | S TYPE=$P(^RMPR(660,SRD,0),U,4) | 
|---|
| 182 | S TY=$S(TYPE="X":2,TYPE=5:2,TYPE="I":1,1:3) | 
|---|
| 183 | S SOURCE=$P(^RMPR(660,SRD,0),U,14) | 
|---|
| 184 | S COST=BTCOST | 
|---|
| 185 | ;stock issue display and calculate zero used cost if VA source | 
|---|
| 186 | I $P(^RMPR(660,SRD,1),U,5)'=""&(SOURCE["V") S BTCOST=0,COST=0 | 
|---|
| 187 | I $P(^RMPR(660,SRD,0),U,13)["-3" S COST=0,SOURCE="VA",BTCOST=0 | 
|---|
| 188 | S QTY=$P(^RMPR(660,SRD,0),U,7) | 
|---|
| 189 | S ^TMP($J,CODE,SRD)=COST | 
|---|
| 190 | S CATEGRY=$P($G(^RMPR(660,SRD,"AM")),U,3),SPEC=$P($G(^("AM")),U,4),GN=$P(^("AMS"),U,1) | 
|---|
| 191 | ;new or repair code | 
|---|
| 192 | S B1=SRD | 
|---|
| 193 | I TY=2 D REP | 
|---|
| 194 | I TY'=2 D NEW | 
|---|
| 195 | Q | 
|---|
| 196 | SORT ;main data for worksheets | 
|---|
| 197 | S TYPE=$P(^RMPR(660,RD,0),U,4) | 
|---|
| 198 | S TY=$S(TYPE="X":2,TYPE=5:2,TYPE="I":1,1:3) | 
|---|
| 199 | S SOURCE=$P(^RMPR(660,RD,0),U,14) | 
|---|
| 200 | I SOURCE="" S SOURCE="C" | 
|---|
| 201 | S CATEGRY=$P($G(^RMPR(660,RD,"AM")),U,3),SPEC=$P($G(^("AM")),U,4),GN=$P(^("AMS"),U,1) | 
|---|
| 202 | S COST=$P(^RMPR(660,RD,0),U,16) | 
|---|
| 203 | ;stock issue source VA, used cost calculation is zero | 
|---|
| 204 | I $P(^RMPR(660,RD,1),U,5)'=""&(SOURCE["V") S COST=0 | 
|---|
| 205 | ;form | 
|---|
| 206 | S FORM=$P(^RMPR(660,RD,0),U,13) | 
|---|
| 207 | I (FORM=4)!(FORM=15) S COST=0,SOURCE="V" | 
|---|
| 208 | S QTY=$P(^RMPR(660,RD,0),U,7) | 
|---|
| 209 | S B1=RD | 
|---|
| 210 | S ^TMP($J,CODE,RD)=COST | 
|---|
| 211 | I TY=2 D REP | 
|---|
| 212 | I TY'=2 D NEW | 
|---|
| 213 | Q | 
|---|
| 214 | REP ;calculate repair cost | 
|---|
| 215 | ;I $G(RD)'="" D | 
|---|
| 216 | ;.S SSN=$P(^RMPR(660,RD,0),U,2) I SSN S SSN=$P(^DPT(SSN,0),U,9) | 
|---|
| 217 | ;.I SSN'="" S ^TMP($J,"A",SSN)="" | 
|---|
| 218 | ;.K SSN | 
|---|
| 219 | S LINE=CODE | 
|---|
| 220 | I LINE="R90 A" S SOURCE="C",QTY=1 | 
|---|
| 221 | I $G(^TMP($J,"R",STN,LINE))="" S ^TMP($J,"R",STN,LINE)="" | 
|---|
| 222 | I SOURCE["V" S $P(^TMP($J,"R",STN,LINE),U,1)=$P(^TMP($J,"R",STN,LINE),U,1)+QTY | 
|---|
| 223 | I SOURCE["C" S $P(^TMP($J,"R",STN,LINE),U,2)=$P(^TMP($J,"R",STN,LINE),U,2)+QTY | 
|---|
| 224 | ; | 
|---|
| 225 | S $P(^TMP($J,"R",STN,LINE),U,3)=$P(^TMP($J,"R",STN,LINE),U,3)+COST | 
|---|
| 226 | I CATEGRY=1 S $P(^TMP($J,"R",STN,LINE),U,4)=$P(^TMP($J,"R",STN,LINE),U,4)+1 | 
|---|
| 227 | I CATEGRY=4 S $P(^TMP($J,"R",STN,LINE),U,5)=$P(^TMP($J,"R",STN,LINE),U,5)+1 | 
|---|
| 228 | I CATEGRY=2 S $P(^TMP($J,"R",STN,LINE),U,6)=$P(^TMP($J,"R",STN,LINE),U,6)+1 | 
|---|
| 229 | I CATEGRY=3 S $P(^TMP($J,"R",STN,LINE),U,7)=$P(^TMP($J,"R",STN,LINE),U,7)+1 | 
|---|
| 230 | I SPEC=1 S $P(^TMP($J,"R",STN,LINE),U,8)=$P(^TMP($J,"R",STN,LINE),U,8)+1 | 
|---|
| 231 | I SPEC=2 S $P(^TMP($J,"R",STN,LINE),U,9)=$P(^TMP($J,"R",STN,LINE),U,9)+1 | 
|---|
| 232 | I SPEC=3 S $P(^TMP($J,"R",STN,LINE),U,10)=$P(^TMP($J,"R",STN,LINE),U,10)+1 | 
|---|
| 233 | I SPEC=4 S $P(^TMP($J,"R",STN,LINE),U,11)=$P(^TMP($J,"R",STN,LINE),U,11)+1,$P(^(LINE),U,16)=$P(^(LINE),U,16)+COST | 
|---|
| 234 | I TYPE="I" S $P(^TMP($J,"R",STN,LINE),U,12)=$P(^TMP($J,"R",STN,LINE),U,12)+1 | 
|---|
| 235 | Q | 
|---|
| 236 | ; | 
|---|
| 237 | NEW ;calculate new costs | 
|---|
| 238 | ;I $G(RD)'="" D | 
|---|
| 239 | ;.S SSN=$P(^RMPR(660,RD,0),U,2) I SSN S SSN=$P(^DPT(SSN,0),U,9) | 
|---|
| 240 | ;.I SSN'="" S ^TMP($J,"A",SSN)="" | 
|---|
| 241 | ;.K SSN | 
|---|
| 242 | S LINE=CODE | 
|---|
| 243 | I $G(^TMP($J,"N",STN,LINE))="" S ^TMP($J,"N",STN,LINE)="" | 
|---|
| 244 | I SOURCE["V" S $P(^TMP($J,"N",STN,LINE),U,1)=$P(^TMP($J,"N",STN,LINE),U,1)+QTY | 
|---|
| 245 | I SOURCE["C" S $P(^TMP($J,"N",STN,LINE),U,2)=$P(^TMP($J,"N",STN,LINE),U,2)+QTY | 
|---|
| 246 | S $P(^TMP($J,"N",STN,LINE),U,3)=$P(^TMP($J,"N",STN,LINE),U,3)+COST | 
|---|
| 247 | I CATEGRY=1 S $P(^TMP($J,"N",STN,LINE),U,4)=$P(^TMP($J,"N",STN,LINE),U,4)+1 | 
|---|
| 248 | I CATEGRY=4 S $P(^TMP($J,"N",STN,LINE),U,5)=$P(^TMP($J,"N",STN,LINE),U,5)+1 | 
|---|
| 249 | I CATEGRY=2 S $P(^TMP($J,"N",STN,LINE),U,6)=$P(^TMP($J,"N",STN,LINE),U,6)+1 | 
|---|
| 250 | I CATEGRY=3 S $P(^TMP($J,"N",STN,LINE),U,7)=$P(^TMP($J,"N",STN,LINE),U,7)+1 | 
|---|
| 251 | I SPEC=1 S $P(^TMP($J,"N",STN,LINE),U,8)=$P(^TMP($J,"N",STN,LINE),U,8)+1 | 
|---|
| 252 | I SPEC=2 S $P(^TMP($J,"N",STN,LINE),U,9)=$P(^TMP($J,"N",STN,LINE),U,9)+1 | 
|---|
| 253 | I SPEC=3 S $P(^TMP($J,"N",STN,LINE),U,10)=$P(^TMP($J,"N",STN,LINE),U,10)+1 | 
|---|
| 254 | I SPEC=4 S $P(^TMP($J,"N",STN,LINE),U,11)=$P(^TMP($J,"N",STN,LINE),U,11)+1,$P(^(LINE),U,16)=$P(^(LINE),U,16)+COST | 
|---|
| 255 | I TYPE="I" S $P(^TMP($J,"N",STN,LINE),U,12)=$P(^TMP($J,"N",STN,LINE),U,12)+1 | 
|---|
| 256 | Q | 
|---|