| 1 | RMPRPIQ4 ;HCIOFO/ODJ - INVENTORY REPORT - PARAMETER DATA ENTRY ;6/16/04  07:57 | 
|---|
| 2 | ;;3.0;PROSTHETICS;**61**;Feb 09, 1996 | 
|---|
| 3 | ; | 
|---|
| 4 | ;RVD patch #61 - this routine is a copy of RMPR5HQ4, except, it calls | 
|---|
| 5 | ;                routine RMPRPIQ5 & reads the new files. | 
|---|
| 6 | ; | 
|---|
| 7 | ; Prompts for Station, Start date, End date, level of detail, | 
|---|
| 8 | ; NPPD group, NPPD line, HCPC selections and Report Device | 
|---|
| 9 | START N RMPRSDT,RMPREDT,RMPREXC,RMPRSEL,RMPRHTY,RMPRGLST,RMPRLINX | 
|---|
| 10 | N RMPRI,RMPRJ,RMPRLCN,RMPRHCN,RMPR,RMPRGRPA,RMPRVISN | 
|---|
| 11 | ; RMPR("STA")  Station Number (ien ^DIC(4) | 
|---|
| 12 | S RMPRSDT="" ; start date VM internal | 
|---|
| 13 | S RMPREDT=DT ; end date VM internal | 
|---|
| 14 | I '$D(RMPRDET) N RMPRDET S RMPRDET="" ; Level of detail | 
|---|
| 15 | S RMPRHTY="" ; type of HCPCS selection | 
|---|
| 16 | S RMPRLCN=1  ; Count for number of individual NPPD lines selected | 
|---|
| 17 | S RMPRHCN=1  ; Count for number of individual HCPCs selected | 
|---|
| 18 | K RMPREXC    ; Exit condition from prompts (^ defined as quit) | 
|---|
| 19 | K RMPRSEL    ; Array of parameter selections | 
|---|
| 20 | ;              If this array gets too big then need to save in ^TMP | 
|---|
| 21 | ;              in which case queuing option will have to be removed | 
|---|
| 22 | ; | 
|---|
| 23 | D GRPLST(.RMPRGLST) ;set list of NPPD group codes for DIR prompt | 
|---|
| 24 | D GRPARY(.RMPRGRPA) | 
|---|
| 25 | D SETLIN(.RMPRLINX) ;set an indexing array for NPPD line help | 
|---|
| 26 | S RMPREXC=$$STN(.RMPR,.RMPRVISN) | 
|---|
| 27 | I RMPREXC="^" G EDX | 
|---|
| 28 | S RMPREXC=$$STDT(.RMPRSDT) ;get Start Date (fileman format) | 
|---|
| 29 | I RMPREXC="^" G EDX | 
|---|
| 30 | S RMPREXC=$$ENDT(.RMPREDT,RMPRSDT) ;get End Date (fileman format) | 
|---|
| 31 | I RMPREXC="^" G EDX | 
|---|
| 32 | I RMPRDET="" S RMPREXC=$$LEV(.RMPRDET) ;get Level of Detail | 
|---|
| 33 | I RMPREXC="^" G EDX | 
|---|
| 34 | I RMPRDET="G" K RMPRSEL S RMPRSEL("*")="" G EDDEV ;NPPD group level of detail | 
|---|
| 35 | I RMPRDET="L" G EDLIN ;NPPD line level of detail | 
|---|
| 36 | I RMPRDET="H"!(RMPRDET="I") G EDHCPC ;HCPC or Item level of detail | 
|---|
| 37 | ; | 
|---|
| 38 | ; NPPD Group level of detail | 
|---|
| 39 | EDGRP S RMPREXC=$$NPGRP(.RMPRSEL) | 
|---|
| 40 | I RMPREXC="^" G EDX | 
|---|
| 41 | G EDDEV | 
|---|
| 42 | ; | 
|---|
| 43 | ; NPPD Line level of detail | 
|---|
| 44 | EDLIN S RMPREXC=$$NPLIN(.RMPRSEL) | 
|---|
| 45 | I RMPREXC="^" G EDX | 
|---|
| 46 | EDLINX G EDDEV | 
|---|
| 47 | ; | 
|---|
| 48 | ; HCPC level of detail | 
|---|
| 49 | EDHCPC S RMPREXC=$$HCPCTY(.RMPRHTY) | 
|---|
| 50 | I RMPREXC="^" G EDX | 
|---|
| 51 | I RMPRHTY="" G EDDEV | 
|---|
| 52 | I RMPRHTY="A" K RMPRSEL S RMPRSEL("*")="" G EDDEV | 
|---|
| 53 | I RMPRHTY="G" S RMPREXC=$$NPGRP(.RMPRSEL) G EDDEV | 
|---|
| 54 | I RMPRHTY="L" S RMPREXC=$$NPLIN(.RMPRSEL) G EDDEV | 
|---|
| 55 | S RMPREXC=$$HCPC(.RMPRSEL,.RMPRHCN) | 
|---|
| 56 | G EDDEV | 
|---|
| 57 | ; | 
|---|
| 58 | ; Get device and run report or queue it | 
|---|
| 59 | EDDEV S RMPREXC=$$REPDEV("") | 
|---|
| 60 | I RMPREXC="^" G EDX | 
|---|
| 61 | I '$D(IO("Q")) D REPORT^RMPRPIQ5 G EDX | 
|---|
| 62 | K IO("Q") | 
|---|
| 63 | S ZTDESC="INVENTORY REPORT",ZTRTN="REPORT^RMPRPIQ5",ZTIO=ION | 
|---|
| 64 | S ZTSAVE("RMPRSDT")="" | 
|---|
| 65 | S ZTSAVE("RMPREDT")="" | 
|---|
| 66 | S ZTSAVE("RMPRDET")="" | 
|---|
| 67 | S ZTSAVE("RMPRSEL(")="" | 
|---|
| 68 | S ZTSAVE("RMPR(""STA"")")="" | 
|---|
| 69 | D ^%ZTLOAD | 
|---|
| 70 | W:$D(ZTSK) !,"REQUEST QUEUED!" H 1 | 
|---|
| 71 | EDX Q | 
|---|
| 72 | ; | 
|---|
| 73 | ; Prompt for Site/Station | 
|---|
| 74 | STN(RMPR,RMPRVISN) ; | 
|---|
| 75 | N X,Y,DIC,DA | 
|---|
| 76 | S RMPRVISN="" | 
|---|
| 77 | D DIV4^RMPRSIT ; call standard Prosthetic site look-up | 
|---|
| 78 | I $D(X) S X="^" | 
|---|
| 79 | E  S X="" S:RMPRSITE'="" RMPRVISN=$P($G(^RMPR(669.9,RMPRSITE,"INV")),"^",2) | 
|---|
| 80 | Q X | 
|---|
| 81 | ; | 
|---|
| 82 | ; Prompt for level of detail | 
|---|
| 83 | EN1 N RMPRDET S RMPRDET="G" ;entry point NPPD Group level | 
|---|
| 84 | G START | 
|---|
| 85 | EN2 N RMPRDET S RMPRDET="L" ;entry point NPPD Line level | 
|---|
| 86 | G START | 
|---|
| 87 | EN3 N RMPRDET S RMPRDET="H" ;entry point HCPCS level | 
|---|
| 88 | G START | 
|---|
| 89 | EN4 N RMPRDET S RMPRDET="I" ;entry point Item level | 
|---|
| 90 | G START | 
|---|
| 91 | LEV(RMPRDET) ; | 
|---|
| 92 | N DIR,X,Y | 
|---|
| 93 | S RMPRDET=$G(RMPRDET) | 
|---|
| 94 | S DIR(0)="S^G:NPPD Group;L:NPPD Line;H:HCPCS Code;I:HCPCS Item" | 
|---|
| 95 | S DIR("A")="Select inventory report level of detail" | 
|---|
| 96 | D ^DIR | 
|---|
| 97 | I Y="",$D(DTOUT) S X="^" G LEVX | 
|---|
| 98 | I Y="^"!(Y="^^") S X="^" G LEVX | 
|---|
| 99 | S RMPRDET=Y | 
|---|
| 100 | LEVX Q X | 
|---|
| 101 | ; | 
|---|
| 102 | ; Prompt for Start Date | 
|---|
| 103 | STDT(RMPRSDT) ; RMPRSDT is start date in FM internal form | 
|---|
| 104 | N %DT,X,Y | 
|---|
| 105 | S %DT("A")="Beginning Date: " | 
|---|
| 106 | S %DT(0)=-DT | 
|---|
| 107 | S %DT="AEP" | 
|---|
| 108 | D ^%DT | 
|---|
| 109 | I Y<0 S X="^" | 
|---|
| 110 | S RMPRSDT=$P(Y,".",1) | 
|---|
| 111 | Q X | 
|---|
| 112 | ; | 
|---|
| 113 | ; Prompt for End Date | 
|---|
| 114 | ENDT(RMPREDT,RMPRSDT) ; RMPREDT is end date in FM internal form | 
|---|
| 115 | N %DT,X,Y | 
|---|
| 116 | ENDT1 S %DT("A")="Ending Date: " | 
|---|
| 117 | S %DT(0)=-DT | 
|---|
| 118 | S %DT="AEP" | 
|---|
| 119 | D ^%DT | 
|---|
| 120 | I Y<0 S X="^" G ENDT1X | 
|---|
| 121 | S RMPREDT=$P(Y,".",1) | 
|---|
| 122 | I RMPREDT<RMPRSDT W !,"Ending date should not precede start date",! G ENDT1 | 
|---|
| 123 | ENDT1X Q X | 
|---|
| 124 | ; | 
|---|
| 125 | ; Prompt for NPPD group | 
|---|
| 126 | NPGRP(RMPRSEL) ; | 
|---|
| 127 | N DIR,DA,X,Y,RMPRCNT,RMPRI,RMPRJ,RMPRGRP | 
|---|
| 128 | W ! | 
|---|
| 129 | F RMPRCNT=1:1:$L(RMPRGLST,";") D | 
|---|
| 130 | . W !,$J(RMPRCNT,2)_". "_$P($P(RMPRGLST,";",RMPRCNT),":",2) | 
|---|
| 131 | . Q | 
|---|
| 132 | S DIR(0)="L" S:$D(RMPRSEL) DIR(0)=DIR(0)_"O" | 
|---|
| 133 | S DIR("A")="Select NPPD Group " | 
|---|
| 134 | S $P(DIR(0),U,2)="1:"_RMPRCNT | 
|---|
| 135 | D ^DIR | 
|---|
| 136 | I Y="",$D(DTOUT) S X="^" G NPGRPX | 
|---|
| 137 | I Y="^"!(Y="^^") S X="^" G NPGRPX | 
|---|
| 138 | I Y="" S X="" G NPGRPX ; no selection so just exit | 
|---|
| 139 | ; | 
|---|
| 140 | ; add in the new selections | 
|---|
| 141 | S RMPRI="" | 
|---|
| 142 | F  S RMPRI=$O(Y(RMPRI)) Q:RMPRI=""  D  Q:RMPRI="" | 
|---|
| 143 | . I $L(Y(RMPRI),",")-1=RMPRCNT D  Q | 
|---|
| 144 | .. K RMPRSEL | 
|---|
| 145 | .. S RMPRSEL("*")="" ; all groups selected | 
|---|
| 146 | .. S RMPRI="" | 
|---|
| 147 | .. Q | 
|---|
| 148 | . F RMPRJ=1:1:$L(Y(RMPRI),",")-1 D | 
|---|
| 149 | .. S RMPRGRP=$P($P(RMPRGLST,";",$P(Y(RMPRI),",",RMPRJ)),":",1) | 
|---|
| 150 | .. K RMPRSEL(RMPRGRP) | 
|---|
| 151 | .. S RMPRSEL(RMPRGRP,"*")="" | 
|---|
| 152 | .. Q | 
|---|
| 153 | . Q | 
|---|
| 154 | NPGRPX Q X | 
|---|
| 155 | ; | 
|---|
| 156 | ; Prompt for NPPD line | 
|---|
| 157 | ; User can select lines within a group | 
|---|
| 158 | ; If more than 1 group selected must use all lines within those groups | 
|---|
| 159 | NPLIN(RMPRSEL) ; | 
|---|
| 160 | N DIR,DA,X,Y,RMPRHPG,RMPRGRP,RMPRLIN,RMPREXC,RMPRI,RMPRJ | 
|---|
| 161 | S DIR(0)="L" S:$D(RMPRSEL) DIR(0)=DIR(0)_"O" | 
|---|
| 162 | NPLIN1C S RMPREXC=$$NPGRP(.RMPRSEL) | 
|---|
| 163 | I RMPREXC="^" S X="^" G NPLIN1X | 
|---|
| 164 | I $O(RMPRSEL(""))="*" S X="" G NPLIN1X | 
|---|
| 165 | S RMPRI=0,RMPRJ="" F  S RMPRJ=$O(RMPRSEL(RMPRJ)) Q:RMPRJ=""  S RMPRI=RMPRI+1 Q:RMPRI=2 | 
|---|
| 166 | I RMPRI=2 S X="" G NPLIN1X | 
|---|
| 167 | S RMPRGRP=$O(RMPRSEL("")) K RMPRSEL | 
|---|
| 168 | NPLIN1A D NPLINH(RMPRGRP,.RMPRHPG) | 
|---|
| 169 | S $P(DIR(0),U,2)="1:"_RMPRHPG | 
|---|
| 170 | S DIR("A")="Select NPPD line(s) within the above group" | 
|---|
| 171 | D ^DIR | 
|---|
| 172 | I Y="",$D(DTOUT) S X="^" G NPLIN1X | 
|---|
| 173 | I Y="^"!(Y="^^") S X="^" G NPLIN1X | 
|---|
| 174 | I Y="" S X="" G NPLIN1X | 
|---|
| 175 | S RMPRI="" | 
|---|
| 176 | F  S RMPRI=$O(Y(RMPRI)) Q:RMPRI=""  D  Q:RMPRI="" | 
|---|
| 177 | . I $L(Y(RMPRI),",")-1=RMPRHPG D  Q | 
|---|
| 178 | .. K RMPRSEL(RMPRGRP) | 
|---|
| 179 | .. S RMPRSEL(RMPRGRP,"*")="" ; all lines selected | 
|---|
| 180 | .. S RMPRI="" | 
|---|
| 181 | .. Q | 
|---|
| 182 | . F RMPRJ=1:1:$L(Y(RMPRI),",")-1 D | 
|---|
| 183 | .. D NPLINC(RMPRGRP,$P(Y(RMPRI),",",RMPRJ),.RMPRLIN) | 
|---|
| 184 | .. K RMPRSEL(RMPRGRP,RMPRLIN) | 
|---|
| 185 | .. S RMPRSEL(RMPRGRP,RMPRLIN,"*")="" | 
|---|
| 186 | .. Q | 
|---|
| 187 | . Q | 
|---|
| 188 | S X="" | 
|---|
| 189 | NPLIN1X Q X | 
|---|
| 190 | ; | 
|---|
| 191 | ; Check entered NPPD line | 
|---|
| 192 | ; OFFS = line offset in RMPRN62 if valid NPPD line (else null) | 
|---|
| 193 | ; | 
|---|
| 194 | NPLINC(RMPRGRP,INP,RMPRLIN) ; | 
|---|
| 195 | N S,OFFS | 
|---|
| 196 | S OFFS=RMPRLINX(RMPRGRP)+INP-1 | 
|---|
| 197 | S S=$P($T(DES+OFFS^RMPRN62),";;",2) | 
|---|
| 198 | S RMPRLIN=$P(S,";",1) | 
|---|
| 199 | Q | 
|---|
| 200 | ; | 
|---|
| 201 | ; Display NPPD lines for a given group | 
|---|
| 202 | NPLINH(RMPRGRP,TO) ; | 
|---|
| 203 | N FR,I,S,LINCD | 
|---|
| 204 | W !,"NPPD Lines for Group: ",RMPRGRP," - ",RMPRGRPA(RMPRGRP),! | 
|---|
| 205 | S FR=RMPRLINX(RMPRGRP) | 
|---|
| 206 | S TO=0 | 
|---|
| 207 | F  S S=$P($T(DES+FR^RMPRN62),";;",2),LINCD=$P(S,";",1) Q:$P(LINCD," ",1)'=RMPRGRP  D | 
|---|
| 208 | . S TO=TO+1 | 
|---|
| 209 | . W !,$J(TO,2),". ",$P(S,";",1)_" "_$P(S,";",2) | 
|---|
| 210 | . W:$D(RMPRSEL(RMPRGRP,LINCD)) ?65,"<< Selected" | 
|---|
| 211 | . S FR=FR+1 | 
|---|
| 212 | . Q | 
|---|
| 213 | Q | 
|---|
| 214 | ; | 
|---|
| 215 | ; Select type of HCPCS selection | 
|---|
| 216 | HCPCTY(RMPRHTY) ; | 
|---|
| 217 | N DIR,DA,X,Y | 
|---|
| 218 | S DIR("B")="A" | 
|---|
| 219 | S DIR(0)="S^A:ALL HCPCS;G:ALL HCPCS for NPPD group;L:ALL HCPCS for NPPD  line;S:Select individual HCPCS" | 
|---|
| 220 | S DIR("A")="Choose HCPCS selection option" | 
|---|
| 221 | D ^DIR | 
|---|
| 222 | I Y="",$D(DTOUT) S X="^" G HCPCTYX | 
|---|
| 223 | I Y="^"!(Y="^^") S X="^" G HCPCTYX | 
|---|
| 224 | I X="" S RMPRHTY="" G HCPCTYX | 
|---|
| 225 | S RMPRHTY=Y | 
|---|
| 226 | HCPCTYX Q X | 
|---|
| 227 | ; | 
|---|
| 228 | ; Select HCPCS | 
|---|
| 229 | HCPC(RMPRSEL,RMPRSCN) ; | 
|---|
| 230 | N DIC,X,Y,DA,RMPRLIN | 
|---|
| 231 | S DIC="^RMPR(661.1,",DIC(0)="AEQMZ" | 
|---|
| 232 | HCPC1 S DIC("A")="Select HCPCS "_RMPRSCN_": " | 
|---|
| 233 | D ^DIC | 
|---|
| 234 | I $D(DTOUT) S X="^" G HCPCX | 
|---|
| 235 | I $D(DUOUT) S X="^" G HCPCX | 
|---|
| 236 | I X="" G HCPCX | 
|---|
| 237 | S RMPRLIN=$P(Y(0),U,7) | 
|---|
| 238 | S:RMPRLIN="" RMPRLIN="999 X" | 
|---|
| 239 | S RMPRSEL($P(RMPRLIN," ",1),RMPRLIN,$P(Y,U,1))="" | 
|---|
| 240 | S RMPRSCN=RMPRSCN+1 | 
|---|
| 241 | G HCPC1 | 
|---|
| 242 | HCPCX Q X | 
|---|
| 243 | ; | 
|---|
| 244 | ; Select Report device | 
|---|
| 245 | REPDEV(RMPRDEV) ; | 
|---|
| 246 | N X,POP,Y,%ZIS,IOP | 
|---|
| 247 | REPDEV1 S X="" | 
|---|
| 248 | S %ZIS="MQ" K IOP D ^%ZIS I POP S X="^" G REPDEVX | 
|---|
| 249 | I IOM<132 W !,"You need at least 132 columns for this report.",!,"Please use a device capable of this requirement.",! G REPDEV1 | 
|---|
| 250 | REPDEVX Q X | 
|---|
| 251 | ; | 
|---|
| 252 | ; LINX is an array used in the help system within NPPD line selection | 
|---|
| 253 | ; Basically each page of help will show lines for a group. | 
|---|
| 254 | ; Each page has a start line corresponding to an offset in RMPRN62 | 
|---|
| 255 | SETLIN(LINX) ; | 
|---|
| 256 | N I,HLPPG,S,LINCD,LINCD0 | 
|---|
| 257 | S HLPPG=0,LINCD0="" | 
|---|
| 258 | F I=1:1 S S=$T(DES+I^RMPRN62) D  Q:LINCD0="" | 
|---|
| 259 | . S LINCD=$P($P(S,";;",2),";",1) | 
|---|
| 260 | . S HLPPG=$P(LINCD," ",1) | 
|---|
| 261 | . I $E(HLPPG)'?1N S LINX(HLPPG)=I,LINCD0="" Q | 
|---|
| 262 | . I HLPPG'=LINCD0 D  Q | 
|---|
| 263 | .. S LINX(HLPPG)=I,LINCD0=HLPPG | 
|---|
| 264 | .. Q | 
|---|
| 265 | . Q | 
|---|
| 266 | Q | 
|---|
| 267 | ; | 
|---|
| 268 | ; Set NPPD (new) group codes and desc. for use in DIR | 
|---|
| 269 | ; set of codes prompt. | 
|---|
| 270 | ; Hard coded, but better if in Fileman file sometime | 
|---|
| 271 | ; Codes and desc. copied from RMPRN6UT | 
|---|
| 272 | GRPLST(LIST) ; | 
|---|
| 273 | S LIST="100:WHEELCHAIRS AND ACCESSORIES" | 
|---|
| 274 | S $P(LIST,";",2)="200:ARTIFICIAL LEGS" | 
|---|
| 275 | S $P(LIST,";",3)="300:ARTIFICIAL ARMS AND TERMINAL DEVICES" | 
|---|
| 276 | S $P(LIST,";",4)="400:BRACES AND ORTHOTICS" | 
|---|
| 277 | S $P(LIST,";",5)="500:SHOES/ORTHOTICS" | 
|---|
| 278 | S $P(LIST,";",6)="600:SENSORI-NEURO AIDS" | 
|---|
| 279 | S $P(LIST,";",7)="700:RESTORATIONS" | 
|---|
| 280 | S $P(LIST,";",8)="800:OXYGEN AND RESPIRATORY" | 
|---|
| 281 | S $P(LIST,";",9)="900:MEDICAL EQUIPMENT" | 
|---|
| 282 | S $P(LIST,";",10)="910:ALL OTHER SUPPLIES AND EQUIPMENT" | 
|---|
| 283 | S $P(LIST,";",11)="920:HOME DIALYSIS PROGRAM" | 
|---|
| 284 | S $P(LIST,";",12)="930:ADAPTIVE EQUIPMENT" | 
|---|
| 285 | S $P(LIST,";",13)="940:HISA" | 
|---|
| 286 | S $P(LIST,";",14)="960:SURGICAL IMPLANTS" | 
|---|
| 287 | S $P(LIST,";",15)="999:MISC" | 
|---|
| 288 | Q | 
|---|
| 289 | ; | 
|---|
| 290 | ; Same as above but set into array | 
|---|
| 291 | GRPARY(ARRAY) ; | 
|---|
| 292 | N LIST,I | 
|---|
| 293 | K ARRAY | 
|---|
| 294 | D GRPLST(.LIST) | 
|---|
| 295 | F I=1:1:$L(LIST,";") S ARRAY($P($P(LIST,";",I),":",1))=$P($P(LIST,";",I),":",2) | 
|---|
| 296 | Q | 
|---|