BPSSCR02 ;BHAM ISC/SS - USER SCREEN UTILITIES ;05-APR-05 ;;1.0;E CLAIMS MGMT ENGINE;**1,3**;JUN 2004;Build 20 ;; Per VHA Directive 10-93-142, this routine should not be modified. ;USER SCREEN Q REVERSE ; N BPSDFN,BPSRX D SELECT(.BPSDFN,.BPSRX) S VALMBCK="R" Q ; SELECT(BPSDFN1,BPSRX1,BPSRF1,BPS59) ; Select a patient. Returns patient IEN(s) in array N BPLN S BPLN=$$SELLINE("Select the line(s) with the paid claim(s) you wish to REVERSE","") Q ; SELLINE(BPSPROM,BPSDFVL) ; N BPRET,DIR,X,Y,DIRUT S BPRET="^" W ! S DIR(0)="N^::2",DIR("A")=BPSPROM,DIR("B")=BPSDFVL D ^DIR I $D(DIRUT) Q "^" S $P(BPRET,U)=Y Q BPRET ;/** ;make array element ;BPLINE - line number in LM ARRAY (by ref) ;BPTMP - VALMAR (TMP global for LM) ;BP59 - ptr to 9002313.59 ;BPLMIND - passed by ref - current patient(/insurance) index ( to make 1, 2,etc) ;BPDRIND - passed by ref - current claim level index ( to make .1, .2, .10,... .20,... ) ;TMP structure gives on the screen: ;^TMP("BPSSCR",$J,"VALM","LMIND",1,0,DFN,0,0)= ;^TMP("BPSSCR",$J,"VALM",1,0)=1 BUMSTEAD,CHARLE (5444)/100-234-2345 *done* FINISHED ;BPLINE = 1 ;BPLMIND=1 ;on the screen: ;1 BUMSTEAD,CHARLE (5444) /100-234-2345 *done* FINISHED ; ;^TMP(538978189,"BPSSCR","SORT","T",1,401959.00001)= ;^TMP("BPSSCR",$J,"VALM","LMIND",1,1,DFN,401959.00001,1)= ;^TMP("BPSSCR",$J,"VALM",2,0)= 1.1 LOVASTATIN 20MG TAB ;BPLINE = 2 ;BP59= 401959.00001 ;on the screen: ; 1.1 LOVASTATIN 20MG TAB ; ;^TMP(538978189,"BPSSCR","SORT","T",1,501750.00011)= ;^TMP("BPSSCR",$J,"VALM","LMIND",1,2,DFN,501750.00011,2)= ;^TMP("BPSSCR",$J,"VALM",3,0)= 1.2 CIMETIDINE 300MG TAB ;BPLINE = 3 ;BP59= 501750.00011 ;on the screen: ; 1.2 CIMETIDINE 300MG TAB ; MKARRELM(BPLINE,BPTMP,BP59,BPLMIND,BPDRIND,BPPREV) ;*/ N BPSSTR,BPLNS,BPDFN,BPSTAT,BPSINSUR,BPINSDAT S BPDFN=+$P($G(^BPST(BP59,0)),U,6) ;patient's DFN S BPINSDAT=$$GETINSUR^BPSSCRU2(BP59) S BPSINSUR=+BPINSDAT ;patient's insurance IEN ; ;PATIENT SUMMARY level ; if last one was different DFN/INSURANCE combination then create a new Patient Summary level I (+$O(@BPTMP@("LMIND",BPLMIND,0,0))'=BPDFN)!(+$O(@BPTMP@("LMIND",BPLMIND,0,BPDFN,0))'=BPSINSUR) D . ;-------- first process previous patient & insurance group . ;determine patient summary statuses for the previous "patient" group . I BPLMIND>0,+BPPREV=BPLMIND D . . ;update the record for previous patient summary after we went thru all his claims . . D UPDPREV(BPTMP,BPLMIND,BPPREV) . ;process new "patient & insurance" group ------------------ . S BPDRIND=0 . S BPLMIND=(BPLMIND\1)+1 . ;save the all necessary data for the patient & insurance to use as previous for STAT4PAT later on . S BPPREV=BPLMIND_U_BPLINE_U_BPDFN_U_$$PATINF(BPDFN,BPINSDAT)_U_BPSINSUR . S BPSSTR=$$LJ(BPLMIND,4)_$P(BPPREV,U,4) . D SAVEARR(BPTMP,BPLMIND,BPDRIND,BPDFN,0,BPLINE,BPSSTR,BPSINSUR) . S BPLINE=BPLINE+1 ; ;CLAIMS level D . I +$O(@BPTMP@("LMIND",BPLMIND,BPDRIND,BPDFN,0))'=BP59 D . . S BPDRIND=BPDRIND+1 . . S BPSSTR=" "_$$LJ(+$P(BPLMIND,".")_"."_BPDRIND,5)_" "_$$CLAIMINF(BP59) . . ;@debug,remove the next line after finish debugging . . ;S BPSSTR=BPSSTR_" 59:"_BP59_" DT:"_$$TRANDT^BPSSCRU2(BP59)_" DFN:"_BPDFN_" INS:"_BPSINSUR . . D SAVEARR(BPTMP,BPLMIND,BPDRIND,BPDFN,BP59,BPLINE,BPSSTR,BPSINSUR) . . S BPLINE=BPLINE+1 . . N BPARR,X . . S BPLNS=$$ADDINF^BPSSCR03(BP59,.BPARR,74,"R") . . F X=1:1:BPLNS D . . . I $G(BPARR(X))="" Q . . . D SAVEARR(BPTMP,BPLMIND,BPDRIND,BPDFN,BP59,BPLINE," "_BPARR(X),BPSINSUR) . . . S BPLINE=BPLINE+1 Q ;S BPS=BPX ;/** ;BP59 CLAIMINF(BP59) ;*/ N BPX,BPX1 S BPX1=$$RXREF^BPSSCRU2(BP59) ;S BPX=BP59_$$LJ($$DRGNAME^BPSSCRU2(BP59),22)_" "_$$LJ($$NDC^BPSSCRU2(+BPX1,+$P(BPX1,U,2)),13)_" " S BPX=$$LJ($$DRGNAME^BPSSCRU2(BP59),17)_" "_$$LJ($$NDC^BPSSCRU2(+BPX1,+$P(BPX1,U,2)),13)_" " S BPX=BPX_$$LJ($$FILLDATE^BPSSCRRS(+BPX1,+$P(BPX1,U,2)),5)_" " S BPX=BPX_$$LJ($$RXNUM^BPSSCRU2(+BPX1),11)_" "_+$P(BPX1,U,2)_"/" S BPX=BPX_$$LJ($$ECMENUM^BPSSCRU2(BP59),7)_" "_$$MWCNAME^BPSSCRU2($$GETMWC^BPSSCRU2(BP59))_" " S BPX=BPX_$$RTBB^BPSSCRU2(BP59)_" "_$$RXST^BPSSCRU2(BP59)_"/"_$$RL^BPSSCRU2(BP59) Q BPX ;/** ;determine "done" and "FINISHED" status for patient/insurance group by BPLMIND in TMP global STAT4PAT(BPLMIND) ;*/ N BPCL,BPDFN,BP59,BPX,BPINS,BPX,BPCNT N BPPB,BPRJ,BPACRV,BPRJRV,BPSR,BPFIN,BPPRCNTG S (BPCL,BPPB,BPRJ,BPACRV,BPSR,BPRJRV)=0 S BPFIN=0 ; finished by default S BPPRCNTG=0 S BPCNT=0 F S BPCL=+$O(@BPTMP@("LMIND",BPLMIND,BPCL)) Q:BPCL=0 D . S BPDFN=0 . F S BPDFN=+$O(@BPTMP@("LMIND",BPLMIND,BPCL,BPDFN)) Q:BPDFN=0 D . . S BPINS="" ;can be 0 in the TMP global if insurance plan . . ;is corrupted in file ##9002313.59 . . F S BPINS=$O(@BPTMP@("LMIND",BPLMIND,BPCL,BPDFN,BPINS)) Q:BPINS="" D . . . S BP59=0,BPINS=+BPINS . . . F S BP59=+$O(@BPTMP@("LMIND",BPLMIND,BPCL,BPDFN,BPINS,BP59)) Q:BP59=0 D . . . . S BPCNT=BPCNT+1 . . . . S BPX=$P($$CLAIMST^BPSSCRU3(BP59),U) . . . . I BPX["E PAYABLE" S BPPB=BPPB+1 ;Payable . . . . I BPX["E REJECTED" S BPRJ=BPRJ+1 ;Rejected . . . . I BPX["E REVERSAL ACCEPTED" S BPACRV=BPACRV+1 ;Accepted Reversal . . . . I BPX["E REVERSAL REJECTED" S BPRJRV=BPRJRV+1 ;Rejected Reversal . . . . ;don't count Auto-Reversal . . . . ;I BPX["^SR^" S BPSR=BPSR+1 ; stranded . . . . S BPFIN=BPFIN+$$PRCNTG^BPSSCRU3(BP59) . . . . ;I BPFIN=1 Q "**FINISHED**" ;Q BPCNT_" "_BPPB_","_BPRJ_","_BPACRV_","_BPSR I BPCNT>0 S BPPRCNTG=(BPFIN/BPCNT)\1 I BPPRCNTG=99 S BPPRCNTG="Done" E S BPPRCNTG=BPPRCNTG_"%" S BPX="*"_BPPRCNTG_"*" I BPPB=BPCNT S BPX=BPX_" ALL payable" E S BPX=BPX_" Pb:"_BPPB_" Rj:"_BPRJ_" AcRv:"_BPACRV_" RjRv:"_BPRJRV Q BPX ;/** ;gets the patient summary information ;input: ; BPDFN - ptr to #2 ; BPINS - insurance ien^insurance name^phone ;output: ; patient summary information PATINF(BPDFN,BPINS) ;*/ N X,BPINSNM S BPINSNM=$P(BPINS,U,2) S X=$$LJ^BPSSCR02($$PATNAME^BPSSCRU2(BPDFN),13) ;name S X=X_" "_$$LJ($$SSN4^BPSSCRU2(BPDFN),6) ;4digits of SSN S X=X_" "_$$LJ($S(BPINSNM="":"????",1:BPINSNM),8) ;insurance S X=X_"/"_$$LJ($P(BPINS,U,3),14) ;phone Q X ; ;/** ;creates an entry in LM array and builds a non-standard index ;BPLMIND - passed by ref - current LM index - patient_AND_insurance level ;BPDRIND - passed by ref - current LM index - claim level ;BPTMP - VALMAR (TMP global for LM) ;BP59 - ptr to 9002313.59 ;BPLINE - line number in LM ARRAY (by ref) ;BPSTR - string to save in ARRAY ;BPSINSUR - INSURANCE ien SAVEARR(BPTMP1,BPLMIND,BPDRIND,BPDFN,BP59,BPLINE,BPSSTR,BPSINSUR) ; S @BPTMP1@("LMIND",BPLMIND,BPDRIND,BPDFN,BPSINSUR,BP59,BPLINE)="" D SET^VALM10(BPLINE,BPSSTR,BP59) Q ;left justified, blank padded ;adds spaces on right or truncates to make return string BPLEN characters long ;BPST- original string ;BPLEN - desired length LJ(BPST,BPLEN) ; N BPL S BPL=BPLEN-$L(BPST) Q $E(BPST_$J("",$S(BPL<0:0,1:BPL)),1,BPLEN) ; ;right justified, blank padded ;adds spaces on left or truncates to make return string BPLEN characters long ;BPST- original string ;BPLEN - desired length RJ(BPST,BPLEN) ; S BPL=BPLEN-$L(BPST) I BPL>0 Q $J("",$S(BPL<0:0,1:BPL))_BPST Q $E(BPST,1,BPLEN) ; ;is the claim payable? PAYABLE(BP59) ; I $P($$CLAIMST^BPSSCRU3(BP59),U)["E PAYABLE" Q 1 Q 0 ; ;is the claim rejected? REJECTED(BP59) ; I $P($$CLAIMST^BPSSCRU3(BP59),U)["E REJECTED" Q 1 I $P($$CLAIMST^BPSSCRU3(BP59),U)["E REVERSAL REJECTED" Q 1 Q 0 ;update patient summary information for the previous patient/insurance pair UPDPREV(BPTMP,BPLMIND,BPPREV) ; N BPSSTR ;update the record for previous patient summary after we went thru all his claims S BPSSTR=$$LJ^BPSSCR02(BPLMIND,4)_$P(BPPREV,U,4)_" "_$$STAT4PAT^BPSSCR02(BPLMIND) D SAVEARR^BPSSCR02(BPTMP,BPLMIND,0,+$P(BPPREV,U,3),0,+$P(BPPREV,U,2),BPSSTR,+$P(BPPREV,U,5)) Q ;