| 1 | BPSSCR02 ;BHAM ISC/SS - USER SCREEN UTILITIES ;05-APR-05 | 
|---|
| 2 | ;;1.0;E CLAIMS MGMT ENGINE;**1,3**;JUN 2004;Build 20 | 
|---|
| 3 | ;; Per VHA Directive 10-93-142, this routine should not be modified. | 
|---|
| 4 | ;USER SCREEN | 
|---|
| 5 | Q | 
|---|
| 6 | REVERSE ; | 
|---|
| 7 | N BPSDFN,BPSRX | 
|---|
| 8 | D SELECT(.BPSDFN,.BPSRX) | 
|---|
| 9 | S VALMBCK="R" | 
|---|
| 10 | Q | 
|---|
| 11 | ; | 
|---|
| 12 | SELECT(BPSDFN1,BPSRX1,BPSRF1,BPS59) ; Select a patient.  Returns patient IEN(s) in array | 
|---|
| 13 | N BPLN | 
|---|
| 14 | S BPLN=$$SELLINE("Select the line(s) with the paid claim(s) you wish to REVERSE","") | 
|---|
| 15 | Q | 
|---|
| 16 | ; | 
|---|
| 17 | SELLINE(BPSPROM,BPSDFVL) ; | 
|---|
| 18 | N BPRET,DIR,X,Y,DIRUT | 
|---|
| 19 | S BPRET="^" | 
|---|
| 20 | W ! S DIR(0)="N^::2",DIR("A")=BPSPROM,DIR("B")=BPSDFVL D ^DIR I $D(DIRUT) Q "^" | 
|---|
| 21 | S $P(BPRET,U)=Y | 
|---|
| 22 | Q BPRET | 
|---|
| 23 | ;/** | 
|---|
| 24 | ;make array element | 
|---|
| 25 | ;BPLINE - line number in LM ARRAY (by ref) | 
|---|
| 26 | ;BPTMP - VALMAR (TMP global for LM) | 
|---|
| 27 | ;BP59 - ptr to 9002313.59 | 
|---|
| 28 | ;BPLMIND - passed by ref - current patient(/insurance) index ( to make 1, 2,etc) | 
|---|
| 29 | ;BPDRIND - passed by ref - current claim level index ( to make .1, .2, .10,... .20,... ) | 
|---|
| 30 | ;TMP structure gives on the screen: | 
|---|
| 31 | ;^TMP("BPSSCR",$J,"VALM","LMIND",1,0,DFN,0,0)= | 
|---|
| 32 | ;^TMP("BPSSCR",$J,"VALM",1,0)=1   BUMSTEAD,CHARLE (5444)/100-234-2345 *done* FINISHED | 
|---|
| 33 | ;BPLINE = 1 | 
|---|
| 34 | ;BPLMIND=1 | 
|---|
| 35 | ;on the screen: | 
|---|
| 36 | ;1   BUMSTEAD,CHARLE      (5444)   /100-234-2345 *done* FINISHED | 
|---|
| 37 | ; | 
|---|
| 38 | ;^TMP(538978189,"BPSSCR","SORT","T",1,401959.00001)= | 
|---|
| 39 | ;^TMP("BPSSCR",$J,"VALM","LMIND",1,1,DFN,401959.00001,1)= | 
|---|
| 40 | ;^TMP("BPSSCR",$J,"VALM",2,0)=  1.1   LOVASTATIN 20MG TAB | 
|---|
| 41 | ;BPLINE = 2 | 
|---|
| 42 | ;BP59= 401959.00001 | 
|---|
| 43 | ;on the screen: | 
|---|
| 44 | ;  1.1   LOVASTATIN 20MG TAB | 
|---|
| 45 | ; | 
|---|
| 46 | ;^TMP(538978189,"BPSSCR","SORT","T",1,501750.00011)= | 
|---|
| 47 | ;^TMP("BPSSCR",$J,"VALM","LMIND",1,2,DFN,501750.00011,2)= | 
|---|
| 48 | ;^TMP("BPSSCR",$J,"VALM",3,0)=  1.2   CIMETIDINE 300MG TAB | 
|---|
| 49 | ;BPLINE = 3 | 
|---|
| 50 | ;BP59= 501750.00011 | 
|---|
| 51 | ;on the screen: | 
|---|
| 52 | ;  1.2   CIMETIDINE 300MG TAB | 
|---|
| 53 | ; | 
|---|
| 54 | MKARRELM(BPLINE,BPTMP,BP59,BPLMIND,BPDRIND,BPPREV) ;*/ | 
|---|
| 55 | N BPSSTR,BPLNS,BPDFN,BPSTAT,BPSINSUR,BPINSDAT | 
|---|
| 56 | S BPDFN=+$P($G(^BPST(BP59,0)),U,6) ;patient's DFN | 
|---|
| 57 | S BPINSDAT=$$GETINSUR^BPSSCRU2(BP59) | 
|---|
| 58 | S BPSINSUR=+BPINSDAT ;patient's insurance IEN | 
|---|
| 59 | ; | 
|---|
| 60 | ;PATIENT SUMMARY level | 
|---|
| 61 | ; if last one was different DFN/INSURANCE combination then create a new Patient Summary level | 
|---|
| 62 | I (+$O(@BPTMP@("LMIND",BPLMIND,0,0))'=BPDFN)!(+$O(@BPTMP@("LMIND",BPLMIND,0,BPDFN,0))'=BPSINSUR) D | 
|---|
| 63 | . ;-------- first process previous patient & insurance group | 
|---|
| 64 | . ;determine patient summary statuses for the previous "patient" group | 
|---|
| 65 | . I BPLMIND>0,+BPPREV=BPLMIND D | 
|---|
| 66 | . . ;update the record for previous patient summary after we went thru all his claims | 
|---|
| 67 | . . D UPDPREV(BPTMP,BPLMIND,BPPREV) | 
|---|
| 68 | . ;process new "patient & insurance" group ------------------ | 
|---|
| 69 | . S BPDRIND=0 | 
|---|
| 70 | . S BPLMIND=(BPLMIND\1)+1 | 
|---|
| 71 | . ;save the all necessary data for the patient & insurance to use as previous for STAT4PAT later on | 
|---|
| 72 | . S BPPREV=BPLMIND_U_BPLINE_U_BPDFN_U_$$PATINF(BPDFN,BPINSDAT)_U_BPSINSUR | 
|---|
| 73 | . S BPSSTR=$$LJ(BPLMIND,4)_$P(BPPREV,U,4) | 
|---|
| 74 | . D SAVEARR(BPTMP,BPLMIND,BPDRIND,BPDFN,0,BPLINE,BPSSTR,BPSINSUR) | 
|---|
| 75 | . S BPLINE=BPLINE+1 | 
|---|
| 76 | ; | 
|---|
| 77 | ;CLAIMS level | 
|---|
| 78 | D | 
|---|
| 79 | . I +$O(@BPTMP@("LMIND",BPLMIND,BPDRIND,BPDFN,0))'=BP59 D | 
|---|
| 80 | . . S BPDRIND=BPDRIND+1 | 
|---|
| 81 | . . S BPSSTR="  "_$$LJ(+$P(BPLMIND,".")_"."_BPDRIND,5)_" "_$$CLAIMINF(BP59) | 
|---|
| 82 | . . ;@debug,remove the next line after finish debugging | 
|---|
| 83 | . . ;S BPSSTR=BPSSTR_" 59:"_BP59_" DT:"_$$TRANDT^BPSSCRU2(BP59)_" DFN:"_BPDFN_" INS:"_BPSINSUR | 
|---|
| 84 | . . D SAVEARR(BPTMP,BPLMIND,BPDRIND,BPDFN,BP59,BPLINE,BPSSTR,BPSINSUR) | 
|---|
| 85 | . . S BPLINE=BPLINE+1 | 
|---|
| 86 | . . N BPARR,X | 
|---|
| 87 | . . S BPLNS=$$ADDINF^BPSSCR03(BP59,.BPARR,74,"R") | 
|---|
| 88 | . . F X=1:1:BPLNS D | 
|---|
| 89 | . . . I $G(BPARR(X))="" Q | 
|---|
| 90 | . . . D SAVEARR(BPTMP,BPLMIND,BPDRIND,BPDFN,BP59,BPLINE,"      "_BPARR(X),BPSINSUR) | 
|---|
| 91 | . . . S BPLINE=BPLINE+1 | 
|---|
| 92 | Q | 
|---|
| 93 | ;S BPS=BPX | 
|---|
| 94 | ;/** | 
|---|
| 95 | ;BP59 | 
|---|
| 96 | CLAIMINF(BP59) ;*/ | 
|---|
| 97 | N BPX,BPX1 | 
|---|
| 98 | S BPX1=$$RXREF^BPSSCRU2(BP59) | 
|---|
| 99 | ;S BPX=BP59_$$LJ($$DRGNAME^BPSSCRU2(BP59),22)_"  "_$$LJ($$NDC^BPSSCRU2(+BPX1,+$P(BPX1,U,2)),13)_"  " | 
|---|
| 100 | S BPX=$$LJ($$DRGNAME^BPSSCRU2(BP59),17)_"  "_$$LJ($$NDC^BPSSCRU2(+BPX1,+$P(BPX1,U,2)),13)_" " | 
|---|
| 101 | S BPX=BPX_$$LJ($$FILLDATE^BPSSCRRS(+BPX1,+$P(BPX1,U,2)),5)_" " | 
|---|
| 102 | S BPX=BPX_$$LJ($$RXNUM^BPSSCRU2(+BPX1),11)_" "_+$P(BPX1,U,2)_"/" | 
|---|
| 103 | S BPX=BPX_$$LJ($$ECMENUM^BPSSCRU2(BP59),7)_" "_$$MWCNAME^BPSSCRU2($$GETMWC^BPSSCRU2(BP59))_" " | 
|---|
| 104 | S BPX=BPX_$$RTBB^BPSSCRU2(BP59)_" "_$$RXST^BPSSCRU2(BP59)_"/"_$$RL^BPSSCRU2(BP59) | 
|---|
| 105 | Q BPX | 
|---|
| 106 | ;/** | 
|---|
| 107 | ;determine "done" and "FINISHED" status for patient/insurance group by BPLMIND in TMP global | 
|---|
| 108 | STAT4PAT(BPLMIND) ;*/ | 
|---|
| 109 | N BPCL,BPDFN,BP59,BPX,BPINS,BPX,BPCNT | 
|---|
| 110 | N BPPB,BPRJ,BPACRV,BPRJRV,BPSR,BPFIN,BPPRCNTG | 
|---|
| 111 | S (BPCL,BPPB,BPRJ,BPACRV,BPSR,BPRJRV)=0 | 
|---|
| 112 | S BPFIN=0 ; finished by default | 
|---|
| 113 | S BPPRCNTG=0 | 
|---|
| 114 | S BPCNT=0 | 
|---|
| 115 | F  S BPCL=+$O(@BPTMP@("LMIND",BPLMIND,BPCL)) Q:BPCL=0  D | 
|---|
| 116 | . S BPDFN=0 | 
|---|
| 117 | . F  S BPDFN=+$O(@BPTMP@("LMIND",BPLMIND,BPCL,BPDFN)) Q:BPDFN=0  D | 
|---|
| 118 | . . S BPINS="" ;can be 0 in the TMP global if insurance plan | 
|---|
| 119 | . . ;is corrupted in file ##9002313.59 | 
|---|
| 120 | . . F  S BPINS=$O(@BPTMP@("LMIND",BPLMIND,BPCL,BPDFN,BPINS)) Q:BPINS=""  D | 
|---|
| 121 | . . . S BP59=0,BPINS=+BPINS | 
|---|
| 122 | . . . F  S BP59=+$O(@BPTMP@("LMIND",BPLMIND,BPCL,BPDFN,BPINS,BP59)) Q:BP59=0  D | 
|---|
| 123 | . . . . S BPCNT=BPCNT+1 | 
|---|
| 124 | . . . . S BPX=$P($$CLAIMST^BPSSCRU3(BP59),U) | 
|---|
| 125 | . . . . I BPX["E PAYABLE" S BPPB=BPPB+1 ;Payable | 
|---|
| 126 | . . . . I BPX["E REJECTED" S BPRJ=BPRJ+1 ;Rejected | 
|---|
| 127 | . . . . I BPX["E REVERSAL ACCEPTED" S BPACRV=BPACRV+1 ;Accepted Reversal | 
|---|
| 128 | . . . . I BPX["E REVERSAL REJECTED" S BPRJRV=BPRJRV+1 ;Rejected Reversal | 
|---|
| 129 | . . . . ;don't count Auto-Reversal | 
|---|
| 130 | . . . . ;I BPX["^SR^" S BPSR=BPSR+1 ; stranded | 
|---|
| 131 | . . . . S BPFIN=BPFIN+$$PRCNTG^BPSSCRU3(BP59) | 
|---|
| 132 | . . . . ;I BPFIN=1 Q "**FINISHED**" | 
|---|
| 133 | ;Q BPCNT_" "_BPPB_","_BPRJ_","_BPACRV_","_BPSR | 
|---|
| 134 | I BPCNT>0 S BPPRCNTG=(BPFIN/BPCNT)\1 | 
|---|
| 135 | I BPPRCNTG=99 S BPPRCNTG="Done" | 
|---|
| 136 | E  S BPPRCNTG=BPPRCNTG_"%" | 
|---|
| 137 | S BPX="*"_BPPRCNTG_"*" | 
|---|
| 138 | I BPPB=BPCNT S BPX=BPX_" ALL payable" | 
|---|
| 139 | E  S BPX=BPX_" Pb:"_BPPB_" Rj:"_BPRJ_" AcRv:"_BPACRV_" RjRv:"_BPRJRV | 
|---|
| 140 | Q BPX | 
|---|
| 141 | ;/** | 
|---|
| 142 | ;gets the patient summary information | 
|---|
| 143 | ;input: | 
|---|
| 144 | ; BPDFN - ptr to #2 | 
|---|
| 145 | ; BPINS - insurance ien^insurance name^phone | 
|---|
| 146 | ;output: | 
|---|
| 147 | ; patient summary information | 
|---|
| 148 | PATINF(BPDFN,BPINS) ;*/ | 
|---|
| 149 | N X,BPINSNM | 
|---|
| 150 | S BPINSNM=$P(BPINS,U,2) | 
|---|
| 151 | S X=$$LJ^BPSSCR02($$PATNAME^BPSSCRU2(BPDFN),13) ;name | 
|---|
| 152 | S X=X_" "_$$LJ($$SSN4^BPSSCRU2(BPDFN),6) ;4digits of SSN | 
|---|
| 153 | S X=X_" "_$$LJ($S(BPINSNM="":"????",1:BPINSNM),8) ;insurance | 
|---|
| 154 | S X=X_"/"_$$LJ($P(BPINS,U,3),14) ;phone | 
|---|
| 155 | Q X | 
|---|
| 156 | ; | 
|---|
| 157 | ;/** | 
|---|
| 158 | ;creates an entry in LM array and builds a non-standard index | 
|---|
| 159 | ;BPLMIND - passed by ref - current LM index - patient_AND_insurance level | 
|---|
| 160 | ;BPDRIND - passed by ref - current LM index  - claim level | 
|---|
| 161 | ;BPTMP - VALMAR (TMP global for LM) | 
|---|
| 162 | ;BP59 - ptr to 9002313.59 | 
|---|
| 163 | ;BPLINE - line number in LM ARRAY (by ref) | 
|---|
| 164 | ;BPSTR - string to save in ARRAY | 
|---|
| 165 | ;BPSINSUR - INSURANCE ien | 
|---|
| 166 | SAVEARR(BPTMP1,BPLMIND,BPDRIND,BPDFN,BP59,BPLINE,BPSSTR,BPSINSUR) ; | 
|---|
| 167 | S @BPTMP1@("LMIND",BPLMIND,BPDRIND,BPDFN,BPSINSUR,BP59,BPLINE)="" | 
|---|
| 168 | D SET^VALM10(BPLINE,BPSSTR,BP59) | 
|---|
| 169 | Q | 
|---|
| 170 | ;left justified, blank padded | 
|---|
| 171 | ;adds spaces on right or truncates to make return string BPLEN characters long | 
|---|
| 172 | ;BPST- original string | 
|---|
| 173 | ;BPLEN - desired length | 
|---|
| 174 | LJ(BPST,BPLEN) ; | 
|---|
| 175 | N BPL | 
|---|
| 176 | S BPL=BPLEN-$L(BPST) | 
|---|
| 177 | Q $E(BPST_$J("",$S(BPL<0:0,1:BPL)),1,BPLEN) | 
|---|
| 178 | ; | 
|---|
| 179 | ;right justified, blank padded | 
|---|
| 180 | ;adds spaces on left or truncates to make return string BPLEN characters long | 
|---|
| 181 | ;BPST- original string | 
|---|
| 182 | ;BPLEN - desired length | 
|---|
| 183 | RJ(BPST,BPLEN)  ; | 
|---|
| 184 | S BPL=BPLEN-$L(BPST) | 
|---|
| 185 | I BPL>0 Q $J("",$S(BPL<0:0,1:BPL))_BPST | 
|---|
| 186 | Q $E(BPST,1,BPLEN) | 
|---|
| 187 | ; | 
|---|
| 188 | ;is the claim payable? | 
|---|
| 189 | PAYABLE(BP59) ; | 
|---|
| 190 | I $P($$CLAIMST^BPSSCRU3(BP59),U)["E PAYABLE" Q 1 | 
|---|
| 191 | Q 0 | 
|---|
| 192 | ; | 
|---|
| 193 | ;is the claim rejected? | 
|---|
| 194 | REJECTED(BP59) ; | 
|---|
| 195 | I $P($$CLAIMST^BPSSCRU3(BP59),U)["E REJECTED" Q 1 | 
|---|
| 196 | I $P($$CLAIMST^BPSSCRU3(BP59),U)["E REVERSAL REJECTED" Q 1 | 
|---|
| 197 | Q 0 | 
|---|
| 198 | ;update patient summary information for the previous patient/insurance pair | 
|---|
| 199 | UPDPREV(BPTMP,BPLMIND,BPPREV) ; | 
|---|
| 200 | N BPSSTR | 
|---|
| 201 | ;update the record for previous patient summary after we went thru all his claims | 
|---|
| 202 | S BPSSTR=$$LJ^BPSSCR02(BPLMIND,4)_$P(BPPREV,U,4)_" "_$$STAT4PAT^BPSSCR02(BPLMIND) | 
|---|
| 203 | D SAVEARR^BPSSCR02(BPTMP,BPLMIND,0,+$P(BPPREV,U,3),0,+$P(BPPREV,U,2),BPSSTR,+$P(BPPREV,U,5)) | 
|---|
| 204 | Q | 
|---|
| 205 | ; | 
|---|