Home   Package List   Routine Alphabetical List   Global Alphabetical List   FileMan Files List   FileMan Sub-Files List   Package Component Lists   Package-Namespace Mapping  
Routine: BPSSCR02

BPSSCR02.m

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