- RCDPEWLD ;ALB/CLT - Continuation of routine RCDPEWL0 ;09 DEC 2016
- ;;4.5;Accounts Receivable;**252,317,321,326,332,424,432**;Mar 20, 1995;Build 16
- ;Per VA Directive 6402, this routine should not be modified.
- Q
- ;
- PROV(RCSCR,RCSCR1,RCXM1,RC) ;Get prov data from ERA (FILE 344.4) and claim (FILE 399)
- N RCXXX,RCYYY,RCDPEPV,RCCLAIM,RCIEN,RCBILL,RCID,RCBLANK,RCNPI,DIC,X,Y
- N RCPROV,RCEXP,XUSNPI,RCRTN,RCBNM,RCCOM1,RCCOM2,RCWARN,RCYNODE3
- ;
- S RCBLANK="" F X=1:1:30 S RCBLANK=RCBLANK_" "
- S RC=RC+1 S RCXM1(RC-1)=RCBLANK
- S RCYNODE3=$G(^RCY(344.4,RCSCR,1,RCSCR1,3))
- ;
- LKBOX ;Get provider data from ELECTRONIC REMITTANCE ADVICE file (#344.4)
- S RC=RC+1,RCXM1(RC-1)=$E("**EOB PROVIDER(S)/NPI"_$J(" ",39),1,39)_"CLAIM PROVIDER(S)/NPI**" ;setting sub-header for worklist
- S RC=RC+1,RCXM1(RC-1)=$E("---------------------"_$J(" ",39),1,39)_"-----------------------"
- ;
- S RCPROV="BILLING",$P(RCYYY(RCPROV),U,3)=0 ; piece 3 initialize for error msgs
- I $P(RCYNODE3,U)'="" S RCYYY(RCPROV)="/"_$P(RCYNODE3,U) ; Billing Prov NPI
- ;
- S RCPROV="RENDERING"
- I $P(RCYNODE3,U,3)=2 S RCPROV="SERVICING"
- I $P(RCYNODE3,U,3)="",($P(RCYNODE3,U,4)'[","),($P(RCYNODE3,U,4)'="") S RCPROV="SERVICING"
- I $P(RCYNODE3,U,2)'=""!($P(RCYNODE3,U,4)'="") S RCYYY(RCPROV)=$E($P(RCYNODE3,U,4),1,20)_"/"_$P(RCYNODE3,U,2)
- S $P(RCYYY(RCPROV),U,3)=0 ; initialize for error msgs
- D NPICHK ; RCPROV has to be "RENDERING" or "SERVICING" when this tag is called !
- ;
- CLAIM ;Retrieve provider data from the claim
- S RCCLAIM=$$GET1^DIQ(361.1,$P(^RCY(344.4,RCSCR,1,RCSCR1,0),U,2),.01) ;determine claim num based on entry in 344.4
- S DIC="^DGCR(399,",DIC(0)="",X=RCCLAIM D ^DIC S RCCLAIM=+Y ;find ien for file 399
- D GETS^DIQ(399,RCCLAIM,"222*","IE","RCXXX") ;retrieve prov information
- S RCBILL=$$GET1^DIQ(399,RCCLAIM,.22,"I") ;retrieve default division
- S RCBNM=$$GET1^DIQ(4,$$GET1^DIQ(40.8,RCBILL,.07,"I"),.01) ;get name from institution file
- S RCBILL=$$GET1^DIQ(4,$$GET1^DIQ(40.8,RCBILL,.07,"I"),41.99) ;get NPI from institution file
- ;
- S $P(RCYYY("BILLING"),U,2)=RCBNM_"/"_RCBILL_"^"_0 ;NPI set into local array
- I $D(RCXXX) S RCPROV="" F S RCPROV=$O(RCXXX(399.0222,RCPROV)) Q:RCPROV="" D ;loop through claim providers
- . S RCIEN=$P(RCXXX(399.0222,RCPROV,.02,"I"),";",1)
- . S RCID=$S($P(RCXXX(399.0222,RCPROV,.02,"I"),";",2)["VA(200":"Individual_ID",1:"Non_VA_Provider_ID")
- . S RCNPI=$$NPI^XUSNPI(RCID,RCIEN) ;retrieve provider NPI
- . S $P(RCYYY(RCXXX(399.0222,RCPROV,.01,"E")),U,2)=$E(RCXXX(399.0222,RCPROV,.02,"E"),1,20)_"/"_$S(+RCNPI=0:"No NPI on file",+RCNPI=-1:"Can't look up NPI",1:+RCNPI)
- . S:$P(RCYYY(RCXXX(399.0222,RCPROV,.01,"E")),U,3)="" $P(RCYYY(RCXXX(399.0222,RCPROV,.01,"E")),U,3)=0
- LINESET ;SET THE PRINT LINES
- S (RCWARN,RCPROV)="" F S RCPROV=$O(RCYYY(RCPROV)) Q:RCPROV="" D ;loop through the found provider types
- . S RC=RC+1 ;increment line counter
- . ; build display detail line
- . S RCXM1(RC-1)=RCPROV_": "_$P(RCYYY(RCPROV),U,1)
- . I $L(RCXM1(RC-1))>39 D
- .. S RCXM1(RC-1)=$E($P(RCXM1(RC-1),"/"),1,27)_"/"_$P(RCXM1(RC-1),"/",2)
- . S RCXM1(RC-1)=$E(RCXM1(RC-1)_RCBLANK,1,39)_$P(RCYYY(RCPROV),U,2)
- . I $P(RCYYY(RCPROV),U,3)'=0 S RCWARN=$P(RCYYY(RCPROV),U,3)
- I RCWARN'="" D
- . S RC=RC+1,RCXM1(RC-1)=" " ;Blank line for separation
- . S RC=RC+1,RCXM1(RC-1)="Rendering/Servicing Provider NPI Warning:"
- . S RC=RC+1,RCXM1(RC-1)=RCWARN
- S RC=RC+1,RCXM1(RC-1)=" " ;Blank line to separate from possible comments
- S RCCOM1=$P(RCYNODE3,U,5),RCCOM2=$P(RCYNODE3,U,6) D ;Error in NPI format
- . I $G(RCCOM1)'="" S RC=RC+1,RCXM1(RC-1)=RCCOM1
- . I $G(RCCOM2)'="" S RC=RC+1,RCXM1(RC-1)=RCCOM2
- Q
- ;
- NPICHK ;CHECK THAT THE NPI RETURNED MATCHES THE ENTITY TYPE QUALIFIER
- S RCEXP="" Q:$P(RCYNODE3,U,3)="" ; ENTITY TYPE QUALIFIER
- ;
- S RCCOM2=$P(RCYNODE3,U,6) ; Ren/Serv comment
- S XUSNPI=$P(RCYNODE3,U,2)
- I RCCOM2="",(XUSNPI="") S RCEXP="**NO SERVICING/RENDERING NPI INCLUDED IN 835**" D EXPSET Q
- S RCRTN=$$QI^XUSNPI(XUSNPI)
- I $P(RCRTN,U,1)="Individual_ID" D Q
- . I $P(RCYNODE3,U,3)'=1 S RCEXP="**NPI from 835 indicated organizational but is associated with an individual**" D EXPSET Q
- I $P(RCRTN,U,1)="Organization_ID" D Q
- . I $P(RCYNODE3,U,3)'=2 S RCEXP="**NPI from 835 indicated individual but is associated with an organization**" D EXPSET Q
- I $E($P(RCRTN,U,1),1,3)="Non" D Q
- . N RCIEN,RCTYPE S RCIEN=$P(RCRTN,U,2),RCTYPE=$$GET1^DIQ(355.93,RCIEN,.02,"I") Q:$G(RCTYPE)=""
- . I $P(RCYNODE3,U,3)=1,RCTYPE=1 S RCEXP="**NPI from 835 indicated individual but is associated with an organization**" D EXPSET Q
- . I $P(RCYNODE3,U,3)=2,RCTYPE=2 S RCEXP="**NPI from 835 indicated organizational but is associated with an individual**" D EXPSET Q
- I RCCOM2="",(+RCRTN=0) S RCEXP="**The NPI returned on the 835 is not associated with this VistA system**" D EXPSET Q
- Q
- ;
- EXPSET ;SET THE PRINT LINE WITH THE ERROR AS DEFINED IN RCEXP
- S $P(RCYYY(RCPROV),U,3)=RCEXP
- Q
- ;
- PARAMS(RCQUIT) ;PARAMETERS ENTRY CONTINUED FROM RCDPEWL0
- I $G(RCQUIT) K ^TMP("RCERA_PARAMS",$J)
- PARMSQ ;
- Q
- ;
- PARAMS2() ;EP from RCDPEWL0
- ; PRCA*4.5*317 - Moved due to routine size issues
- ; Input: None
- ; Returns: RCQUIT - 1 if user ^ or timed out, 0 otherwise
- S RCQUIT=$$PAYMNT() ; Ask for zero/payment PRCA*4.5*321
- Q:RCQUIT 1 ; PRCA*4.5*321
- S RCQUIT=$$POSTSTAT() ; Ask Posting Status
- Q:RCQUIT 1
- S RCQUIT=$$POSTMETH ; Ask Posting Method
- Q:RCQUIT 1
- S RCQUIT=$$MATCHST ; Ask ERA-EFT Matching Status
- Q:RCQUIT 1
- S RCQUIT=$$CLAIMTYP() ; Ask Claim Type
- Q:RCQUIT 1
- S RCQUIT=$$PAYR() ; Ask for selected payers
- Q RCQUIT
- ;
- PAYMNT() ; Payment Type (Zero/Payment or Both) Selection ; PRCA*4.5*321 this whole subroutine
- ; Input: ^TMP("RCERA_PARAMS") - Global array of preferred values (if any)
- ; Output: ^TMP("RCERA_PARAMS",$J,"RCPAYMNT") - ERA Posting Status filter
- ; Returns: 1 if user quit or timed out, 0 otherwise
- N DIR,DTOUT,DUOUT,RCTYPEDF
- S RCTYPEDF=$G(^TMP("RCERA_PARAMS",$J,"RCPAYMNT"))
- K DIR S DIR(0)="SA^Z:ZERO;P:PAYMENT;B:BOTH"
- S DIR("A")="(Z)ERO, (P)AYMENT, or (B)OTH: "
- S DIR("B")="B"
- S DIR("?",1)="Select ZERO to only see ERAs with a zero total amount paid."
- S DIR("?",2)="Select PAYMENT to only see ERAs with a non-zero amount paid."
- S DIR("?")="Select BOTH to see both zero and non-zero amount ERAs."
- S:RCTYPEDF'="" DIR("B")=RCTYPEDF ;Stored preferred value, use as default
- W !
- D ^DIR
- I $D(DTOUT)!$D(DUOUT) Q 1
- S ^TMP("RCERA_PARAMS",$J,"RCPAYMNT")=Y
- Q 0
- ;
- POSTSTAT() ; ERA Posting Status (Posted/Unposted/Both) Selection
- ; Input: ^TMP("RCERA_PARAMS") - Global array of preferred values (if any)
- ; Output: ^TMP("RCERA_PARAMS",$J,"RCPOST")- ERA Posting Status filter
- ; Returns: 1 if user quit or timed out, 0 otherwise
- N DIR,DTOUT,DUOUT,RCPOSTDF
- S RCPOSTDF=$G(^TMP("RCERA_PARAMS",$J,"RCPOST"))
- K DIR S DIR(0)="SA^U:UNPOSTED;P:POSTED;B:BOTH"
- S DIR("A")="ERA posting status: (U)NPOSTED, (P)OSTED, or (B)OTH: "
- S DIR("B")="U"
- S DIR("?",1)="Select UNPOSTED to only see ERAs with a status of UNPOSTED."
- S DIR("?",2)="Select POSTED to only see ERAs with a status of POSTED."
- S DIR("?")="Select BOTH to see both unposted and posted ERAs."
- S:RCPOSTDF'="" DIR("B")=RCPOSTDF ; Stored preferred value, use as default
- W !
- D ^DIR
- I $D(DTOUT)!$D(DUOUT) Q 1
- S ^TMP("RCERA_PARAMS",$J,"RCPOST")=Y
- Q 0
- ;
- POSTMETH() ; PRCA*4.5*317 moved from RCDPEWL0 because of routine size issues
- ; ERA Posting Method (Auto-Posting/Non Auto-Posting/Both) Selection
- ; Input: ^TMP("RCERA_PARAMS") - Global array of preferred values (if any)
- ; Output: ^TMP("RCERA_PARAMS",$J,"RCAUTOP")- ERA Posting Status filter
- ; Returns: 1 if user quit or timed out, 0 otherwise
- N DIR,DTOUT,DUOUT,RCAUTOPDF
- P1 S RCAUTOPDF=$G(^TMP("RCERA_PARAMS",$J,"RCAUTOP")) ; PRCA*4.5*326
- K DIR S DIR(0)="SA^A:AUTO-POSTING;N:NON AUTO-POSTING;B:BOTH"
- S DIR("A")="Display (A)UTO-POSTING, (N)ON AUTO-POSTING, or (B)OTH: "
- S DIR("B")="B"
- S DIR("?",1)="Select AUTO-POSTING to only see auto-posted ERAs."
- S DIR("?",2)="Select NON AUTO-POSTING to only see ERAs that were NOT auto-posted."
- S DIR("?")="Select BOTH to see both auto-posted and non auto-posted ERAs."
- S:RCAUTOPDF'="" DIR("B")=RCAUTOPDF ;Stored preferred value, use as default
- W !
- D ^DIR
- I $D(DTOUT)!$D(DUOUT) Q 1
- S ^TMP("RCERA_PARAMS",$J,"RCAUTOP")=Y
- ; If including auto-post ERA ask for auto-post status filters
- I Y'="N" Q $$AUTOPST() ; PRCA*4.5*326
- Q 0
- ;
- MATCHST() ; ERA-EFT Matching Status(Matched/Unmatched/Both) Selection
- ; Input: ^TMP("RCERA_PARAMS") - Global array of preferred values (if any)
- ; Output: ^TMP("RCERA_PARAMS",$J,"RCMATCH")- ERA Posting Status filter
- ; Returns: 1 if user quit or timed out, 0 otherwise
- N DIR,DTOUT,DUOUT,RCMATCHD
- M1 S RCMATCHD=$G(^TMP("RCERA_PARAMS",$J,"RCMATCH")) ; PRCA*4.5*326
- K DIR S DIR(0)="SA^N:NOT MATCHED;M:MATCHED;B:BOTH"
- S DIR("A")="ERA-EFT match status: (N)OT MATCHED, (M)ATCHED, or (B)OTH: "
- S DIR("B")="B"
- S DIR("?",1)="Select NOT MATCHED to only see unmatched ERAs."
- S DIR("?",2)="Select MATCHED to only see matched ERAs."
- S DIR("?")="Select BOTH to see both matched and unmatched ERAs."
- S:RCMATCHD'="" DIR("B")=RCMATCHD ;Stored preferred value, use as default
- W !
- D ^DIR
- I $D(DTOUT)!$D(DUOUT) Q 1
- G:'$$VALM(Y) M1 ; PRCA*4.5*326
- S ^TMP("RCERA_PARAMS",$J,"RCMATCH")=Y
- Q 0
- ;
- CLAIMTYP() ; Claim Type (Medical/Pharmacy/Tricare/CHAMPVA/Both) Selection
- ; Input: ^TMP("RCERA_PARAMS") - Global array of preferred values (if any)
- ; Output: ^TMP("RCERA_PARAMS",$J,"RCTYPE") - ERA Posting Status filter
- ; Returns: 1 if user quit or timed out, 0 otherwise
- N DIR,DTOUT,DUOUT,RCTYPEDF
- S RCTYPEDF=$G(^TMP("RCERA_PARAMS",$J,"RCTYPE"))
- ; PRCA*4.5*321 - Changed set of codes and help
- K DIR S DIR(0)="SA^M:MEDICAL;P:PHARMACY;T:TRICARE;C:CHAMPVA;A:ALL" ;PRCA*4.5*432 CHAMPVA
- S DIR("A")="(M)EDICAL, (P)HARMACY, (T)RICARE, (C)HAMPVA or (A)LL: " ;PRCA*4.5*432 CHAMPVA
- S DIR("B")="A"
- S DIR("?",1)="Select MEDICAL to only see ERAs with a payer type of medical."
- S DIR("?",2)="Select PHARMACY to only see ERAs with a payer type of pharmacy."
- S DIR("?",3)="Select TRICARE to only see ERAs with a payer type of Tricare."
- S DIR("?",4)="Select CHAMPVA to only see ERAs with a payer type of CHAMPVA." ;PRCA*4.5*432 CHAMPVA
- S DIR("?")="Select ALL to see medical, pharmacy, Tricare, and CHAMPVA ERAs." ;PRCA*4.5*432 CHAMPVA
- ; PRCA*4.5*321 - End modified code block
- S:RCTYPEDF'="" DIR("B")=RCTYPEDF ;Stored preferred value, use as default
- W !
- D ^DIR
- I $D(DTOUT)!$D(DUOUT) Q 1
- S ^TMP("RCERA_PARAMS",$J,"RCTYPE")=Y
- Q 0
- ;
- PAYR() ; Payer Selection
- ; Input: ^TMP("RCERA_PARAMS",$J) - Global array of preferred values (if any)
- ; Output: ^TMP("RCERA_PARAMS",$J,"RCTYPE") - ERA Posting Status filter
- ; Returns: 1 if user quit or timed out, 0 otherwise
- N DIR,DTOUT,DUOUT,RCPAYR,RCPAYRDF,RCOUT,RCDONE
- S RCPAYRDF=$G(^TMP("RCERA_PARAMS",$J,"RCPAYR"))
- ; PRCA*4.5*332 - wrapped prompts in a for loop to allow the payer range prompt to return to inital prompt if
- ; user cancels out
- S (RCQUIT,RCDONE,RCOUT)=0
- F Q:RCDONE D
- . K DIR S DIR(0)="SA^A:ALL;R:RANGE"
- . S DIR("A")="(A)LL payers, (R)ANGE of payer names: "
- . S DIR("B")="ALL"
- . S DIR("?",1)="Entering ALL will select all payers."
- . S DIR("?")="If RANGE is entered, you will be prompted for a payer range."
- . S:$P(RCPAYRDF,"^")'="" DIR("B")=$P(RCPAYRDF,"^",1) ;Stored preferred value, use as default
- . W !
- . D ^DIR
- . I $D(DTOUT)!$D(DUOUT) S (RCDONE,RCOUT)=1 Q
- . S RCPAYR=Y
- . I RCPAYR="A" D Q
- . . S ^TMP("RCERA_PARAMS",$J,"RCPAYR")=Y ;All payers selected
- . . S RCDONE=1
- . I RCPAYR="R" D
- . . W !,"Names you select here will be the payer names from the ERA, not the ins. file"
- . . K DIR
- . . S DIR("?")="Enter a name from 1 to 30 characters in UPPER CASE."
- . . S DIR(0)="FA^1:30^K:X'?.U X"
- . . S DIR("A")="Start with payer name: "
- . . S:$P(RCPAYRDF,"^",2)'="" DIR("B")=$P(RCPAYRDF,"^",2) ;Stored preferred value, use as default
- . . W !
- . . D ^DIR
- . . I $D(DTOUT)!$D(DUOUT) D Q
- . . . K ^TMP("RCERA_PARAMS",$J,"RCPAYR")
- . . S RCPAYR("FROM")=Y
- . . K DIR
- . . S DIR("?")="Enter a name from 1 to 30 characters in UPPER CASE."
- . . S DIR(0)="FA^1:30^K:X'?.U X",DIR("A")="Go to payer name: "
- . . S DIR("B")=$E(RCPAYR("FROM"),1,27)_"ZZZ"
- . . S:$P(RCPAYRDF,"^",3)'="" DIR("B")=$P(RCPAYRDF,"^",3) ;Stored preferred value, use as default
- . . W !
- . . D ^DIR
- . . I $D(DTOUT)!$D(DUOUT) Q
- . . S ^TMP("RCERA_PARAMS",$J,"RCPAYR")=RCPAYR_"^"_RCPAYR("FROM")_"^"_Y
- . . S RCDONE=1
- Q RCOUT
- ;
- ; BEGIN PRCA*4.5*326
- AUTOPST() ; Auto-post Status (Marked/Partial/Complete/All) Selection
- ; Input: ^TMP("RCERA_PARAMS") - Global array of preferred values (if any)
- ; Output: ^TMP("RCERA_PARAMS",$J,"RCAPSTA") - Auto-post Status filter
- ; Returns: 1 if user quit or timed out, 0 otherwise
- N DIR,DTOUT,DUOUT,APTYPEDF
- A1 S APTYPEDF=$G(^TMP("RCERA_PARAMS",$J,"RCAPSTA"))
- K DIR S DIR(0)="SA^M:MARKED;P:PARTIAL;C:COMPLETE;A:ALL"
- S DIR("A")="Auto-Post status: (M)ARKED, (P)ARTIAL, (C)OMPLETE or (A)LL: "
- S DIR("B")="A"
- S DIR("?",1)="Select MARKED to only see ERAs currently marked for autopost."
- S DIR("?",2)="Select PARTIAL to only see ERAs with a partial auto-post status."
- S DIR("?",3)="Select COMPLETE to only see ERAs with a complete auto-post status."
- S DIR("?")="Select ALL to see ERAs with any autopost status."
- S:APTYPEDF'="" DIR("B")=APTYPEDF ;Stored preferred value, use as default
- W !
- D ^DIR
- I $D(DTOUT)!$D(DUOUT) Q 1
- G:'$$VALA(Y) A1
- S ^TMP("RCERA_PARAMS",$J,"RCAPSTA")=Y
- Q 0
- ;
- VALA(INP) ; Compare input auto-post status filter to other filters
- ; Input INP - Y value from ^DIR
- ; Output 1 = Valid 0 = Invalid
- ;
- I INP="C",$G(^TMP("RCERA_PARAMS",$J,"RCPOST"))="U" D Q 0
- .W !!,"Auto-post COMPLETE is an invalid selection for UNPOSTED ERAs"
- I INP="P",$G(^TMP("RCERA_PARAMS",$J,"RCPOST"))="U" D Q 0
- .W !!,"Auto-post PARTIAL is an invalid selection for UNPOSTED ERAs"
- I INP="M",$G(^TMP("RCERA_PARAMS",$J,"RCPOST"))="P" D Q 0
- .W !!,"MARKED for Auto-post is an invalid selection for POSTED ERAs"
- Q 1
- ;
- VALM(INP) ; Compare input match type filter to other filters
- ; Input INP - Y value from ^DIR
- ; Output 1 = Valid 0 = Invalid
- ;
- I INP="N",$G(^TMP("RCERA_PARAMS",$J,"RCAUTOP"))="A" D Q 0
- .W !!,"NOT MATCHED is an invalid selection for AUTO-POSTING ERAs"
- Q 1
- ;
- ; Following FILTER code moved from RCDPEWL7 due to routine size PRCA*4.5*432
- FILTER(IEN344P4) ; Returns 1 if record in entry IEN344P4 in 344.4 passes
- ; the edits for the worklist selection of ERAs
- ; Parameters found in ^TMP("RCERA_PARAMS",$J)
- N OK,RCPOST,RCAPST,RCAPSTA,RCAUTOP,RCMATCH,RCTYPE,RCDFR,RCDTO,RCPAYFR,RCPAYMNT,RCPAYTO,RCPAYR,RC0,RC4
- S OK=1,RC0=$G(^RCY(344.4,IEN344P4,0)),RC4=$G(^RCY(344.4,IEN344P4,4))
- ;
- S RCMATCH=$G(^TMP("RCERA_PARAMS",$J,"RCMATCH")),RCPOST=$G(^TMP("RCERA_PARAMS",$J,"RCPOST"))
- S RCAUTOP=$G(^TMP("RCERA_PARAMS",$J,"RCAUTOP")),RCTYPE=$G(^TMP("RCERA_PARAMS",$J,"RCTYPE"))
- S RCDFR=+$P($G(^TMP("RCERA_PARAMS",$J,"RCDT")),U),RCDTO=+$P($G(^TMP("RCERA_PARAMS",$J,"RCDT")),U,2)
- S RCPAYR=$P($G(^TMP("RCERA_PARAMS",$J,"RCPAYR")),U),RCPAYFR=$P($G(^TMP("RCERA_PARAMS",$J,"RCPAYR")),U,2),RCPAYTO=$P($G(^TMP("RCERA_PARAMS",$J,"RCPAYR")),U,3)
- S RCPAYMNT=$G(^TMP("RCERA_PARAMS",$J,"RCPAYMNT")) ; PRCA*4.5*321
- S RCAPSTA=$G(^TMP("RCERA_PARAMS",$J,"RCAPSTA"))
- ;
- ; Post status
- I $S(RCPOST="B":0,RCPOST="U":$P(RC0,U,14),1:'$P(RC0,U,14)) S OK=0 G FQ
- ; Auto-Posting status
- I $S(RCAUTOP="B":0,RCAUTOP="A":($P(RC4,U,2)=""),1:($P(RC4,U,2)'="")) S OK=0 G FQ
- ; If ERA is autopost and filtering on selected Autopost statuses check status
- I $P(RC4,U,2)'="",RCAPSTA'="A",(RCAUTOP="B")!(RCAUTOP="A") D G:OK=0 FQ
- .;Auto-post Status
- .S RCAPST=$$GET1^DIQ(344.4,IEN344P4_",",4.02,"I")
- .;Complete filter
- .I RCAPSTA="C" S:RCAPST'=2 OK=0 G FQ
- .;Partial filter
- .I RCAPSTA="P" S:RCAPST'=1 OK=0 G FQ
- .;Marked for Auto-post filter - ignores if not partial post or unposted
- .I RCAPSTA="M",RCAPST'=1,RCAPST'=0 S OK=0 G FQ
- .;Marked for Auto-post filter - ignores PARTIAL auto-post era if no lines on ERA are marked
- .I RCAPSTA="M",RCAPST=1,'$O(^RCY(344.4,"AP",1,IEN344P4,"")) S OK=0 G FQ
- .;Marked for Auto-post filter - ignores UNPROCESSED auto-post era if no marked for autopost user
- .I RCAPSTA="M",RCAPST=0,$$GET1^DIQ(344.4,IEN344P4_",",4.04,"I")="" S OK=0 G FQ
- ; Match status
- I $S(RCMATCH="B":0,RCMATCH="N":$P(RC0,U,9),1:'$P(RC0,U,9)) S OK=0 G FQ
- ; Medical/Pharmacy/Tricare Claim
- ; I $S(RCTYPE="B":0,RCTYPE="M":$$PHARM^RCDPEWLP(IEN344P4),1:'$$PHARM^RCDPEWLP(IEN344P4)) S OK=0 G FQ
- I RCTYPE'="A" D I 'OK G FQ
- . N RCFLAG
- . I '$$PAYFLAGS^RCDPEWL7(IEN344P4,.RCFLAG) S OK=0 Q
- . I RCTYPE="P",'RCFLAG("P") S OK=0 Q
- . I RCTYPE="T",'RCFLAG("T") S OK=0 Q
- . I RCTYPE="C",'RCFLAG("C") S OK=0 Q ;PRCA*4.5*432 CHAMPVA
- . I RCTYPE="M",(RCFLAG("P")!RCFLAG("T")!RCFLAG("C")) S OK=0 ;PRCA*4.5*432 CHAMPVA
- ; dt rec'd range
- I $S(RCDFR=0:0,1:$P(RC0,U,7)\1<RCDFR) S OK=0 G FQ
- I $S(RCDTO=DT:0,1:$P(RC0,U,7)\1>RCDTO) S OK=0 G FQ
- ; Payer name
- I RCPAYR'="A" D G:'OK FQ
- . N Q
- . S Q=$$UP^RCDPEARL($P(RC0,U,6))
- . I $S(Q=RCPAYFR:1,Q=RCPAYTO:1,Q]RCPAYFR:RCPAYTO]Q,1:0) Q
- . S OK=0
- ; PRCA*4.5*321 - Start modified code block
- ; Zero amount or payment
- I RCPAYMNT'="B" D ;
- . I RCPAYMNT="Z",$P(RC0,U,5) S OK=0 Q
- . I RCPAYMNT="P",'$P(RC0,U,5) S OK=0
- ; PRCA*4.5*321 - End modified code block
- ;
- FQ Q OK
- ; END PRCA*4.5*326
- --- Routine Detail --- with STRUCTURED ROUTINE LISTING ---[H[J[2J[HRCDPEWLD 18045 printed Mar 13, 2025@20:50:31 Page 2
- RCDPEWLD ;ALB/CLT - Continuation of routine RCDPEWL0 ;09 DEC 2016
- +1 ;;4.5;Accounts Receivable;**252,317,321,326,332,424,432**;Mar 20, 1995;Build 16
- +2 ;Per VA Directive 6402, this routine should not be modified.
- +3 QUIT
- +4 ;
- PROV(RCSCR,RCSCR1,RCXM1,RC) ;Get prov data from ERA (FILE 344.4) and claim (FILE 399)
- +1 NEW RCXXX,RCYYY,RCDPEPV,RCCLAIM,RCIEN,RCBILL,RCID,RCBLANK,RCNPI,DIC,X,Y
- +2 NEW RCPROV,RCEXP,XUSNPI,RCRTN,RCBNM,RCCOM1,RCCOM2,RCWARN,RCYNODE3
- +3 ;
- +4 SET RCBLANK=""
- FOR X=1:1:30
- SET RCBLANK=RCBLANK_" "
- +5 SET RC=RC+1
- SET RCXM1(RC-1)=RCBLANK
- +6 SET RCYNODE3=$GET(^RCY(344.4,RCSCR,1,RCSCR1,3))
- +7 ;
- LKBOX ;Get provider data from ELECTRONIC REMITTANCE ADVICE file (#344.4)
- +1 ;setting sub-header for worklist
- SET RC=RC+1
- SET RCXM1(RC-1)=$EXTRACT("**EOB PROVIDER(S)/NPI"_$JUSTIFY(" ",39),1,39)_"CLAIM PROVIDER(S)/NPI**"
- +2 SET RC=RC+1
- SET RCXM1(RC-1)=$EXTRACT("---------------------"_$JUSTIFY(" ",39),1,39)_"-----------------------"
- +3 ;
- +4 ; piece 3 initialize for error msgs
- SET RCPROV="BILLING"
- SET $PIECE(RCYYY(RCPROV),U,3)=0
- +5 ; Billing Prov NPI
- IF $PIECE(RCYNODE3,U)'=""
- SET RCYYY(RCPROV)="/"_$PIECE(RCYNODE3,U)
- +6 ;
- +7 SET RCPROV="RENDERING"
- +8 IF $PIECE(RCYNODE3,U,3)=2
- SET RCPROV="SERVICING"
- +9 IF $PIECE(RCYNODE3,U,3)=""
- IF ($PIECE(RCYNODE3,U,4)'[",")
- IF ($PIECE(RCYNODE3,U,4)'="")
- SET RCPROV="SERVICING"
- +10 IF $PIECE(RCYNODE3,U,2)'=""!($PIECE(RCYNODE3,U,4)'="")
- SET RCYYY(RCPROV)=$EXTRACT($PIECE(RCYNODE3,U,4),1,20)_"/"_$PIECE(RCYNODE3,U,2)
- +11 ; initialize for error msgs
- SET $PIECE(RCYYY(RCPROV),U,3)=0
- +12 ; RCPROV has to be "RENDERING" or "SERVICING" when this tag is called !
- DO NPICHK
- +13 ;
- CLAIM ;Retrieve provider data from the claim
- +1 ;determine claim num based on entry in 344.4
- SET RCCLAIM=$$GET1^DIQ(361.1,$PIECE(^RCY(344.4,RCSCR,1,RCSCR1,0),U,2),.01)
- +2 ;find ien for file 399
- SET DIC="^DGCR(399,"
- SET DIC(0)=""
- SET X=RCCLAIM
- DO ^DIC
- SET RCCLAIM=+Y
- +3 ;retrieve prov information
- DO GETS^DIQ(399,RCCLAIM,"222*","IE","RCXXX")
- +4 ;retrieve default division
- SET RCBILL=$$GET1^DIQ(399,RCCLAIM,.22,"I")
- +5 ;get name from institution file
- SET RCBNM=$$GET1^DIQ(4,$$GET1^DIQ(40.8,RCBILL,.07,"I"),.01)
- +6 ;get NPI from institution file
- SET RCBILL=$$GET1^DIQ(4,$$GET1^DIQ(40.8,RCBILL,.07,"I"),41.99)
- +7 ;
- +8 ;NPI set into local array
- SET $PIECE(RCYYY("BILLING"),U,2)=RCBNM_"/"_RCBILL_"^"_0
- +9 ;loop through claim providers
- IF $DATA(RCXXX)
- SET RCPROV=""
- FOR
- SET RCPROV=$ORDER(RCXXX(399.0222,RCPROV))
- if RCPROV=""
- QUIT
- Begin DoDot:1
- +10 SET RCIEN=$PIECE(RCXXX(399.0222,RCPROV,.02,"I"),";",1)
- +11 SET RCID=$SELECT($PIECE(RCXXX(399.0222,RCPROV,.02,"I"),";",2)["VA(200":"Individual_ID",1:"Non_VA_Provider_ID")
- +12 ;retrieve provider NPI
- SET RCNPI=$$NPI^XUSNPI(RCID,RCIEN)
- +13 SET $PIECE(RCYYY(RCXXX(399.0222,RCPROV,.01,"E")),U,2)=$EXTRACT(RCXXX(399.0222,RCPROV,.02,"E"),1,20)_"/"_$SELECT(+RCNPI=0:"No NPI on file",+RCNPI=-1:"Can't look up NPI",1:+RCNPI)
- +14 if $PIECE(RCYYY(RCXXX(399.0222,RCPROV,.01,"E")),U,3)=""
- SET $PIECE(RCYYY(RCXXX(399.0222,RCPROV,.01,"E")),U,3)=0
- End DoDot:1
- LINESET ;SET THE PRINT LINES
- +1 ;loop through the found provider types
- SET (RCWARN,RCPROV)=""
- FOR
- SET RCPROV=$ORDER(RCYYY(RCPROV))
- if RCPROV=""
- QUIT
- Begin DoDot:1
- +2 ;increment line counter
- SET RC=RC+1
- +3 ; build display detail line
- +4 SET RCXM1(RC-1)=RCPROV_": "_$PIECE(RCYYY(RCPROV),U,1)
- +5 IF $LENGTH(RCXM1(RC-1))>39
- Begin DoDot:2
- +6 SET RCXM1(RC-1)=$EXTRACT($PIECE(RCXM1(RC-1),"/"),1,27)_"/"_$PIECE(RCXM1(RC-1),"/",2)
- End DoDot:2
- +7 SET RCXM1(RC-1)=$EXTRACT(RCXM1(RC-1)_RCBLANK,1,39)_$PIECE(RCYYY(RCPROV),U,2)
- +8 IF $PIECE(RCYYY(RCPROV),U,3)'=0
- SET RCWARN=$PIECE(RCYYY(RCPROV),U,3)
- End DoDot:1
- +9 IF RCWARN'=""
- Begin DoDot:1
- +10 ;Blank line for separation
- SET RC=RC+1
- SET RCXM1(RC-1)=" "
- +11 SET RC=RC+1
- SET RCXM1(RC-1)="Rendering/Servicing Provider NPI Warning:"
- +12 SET RC=RC+1
- SET RCXM1(RC-1)=RCWARN
- End DoDot:1
- +13 ;Blank line to separate from possible comments
- SET RC=RC+1
- SET RCXM1(RC-1)=" "
- +14 ;Error in NPI format
- SET RCCOM1=$PIECE(RCYNODE3,U,5)
- SET RCCOM2=$PIECE(RCYNODE3,U,6)
- Begin DoDot:1
- +15 IF $GET(RCCOM1)'=""
- SET RC=RC+1
- SET RCXM1(RC-1)=RCCOM1
- +16 IF $GET(RCCOM2)'=""
- SET RC=RC+1
- SET RCXM1(RC-1)=RCCOM2
- End DoDot:1
- +17 QUIT
- +18 ;
- NPICHK ;CHECK THAT THE NPI RETURNED MATCHES THE ENTITY TYPE QUALIFIER
- +1 ; ENTITY TYPE QUALIFIER
- SET RCEXP=""
- if $PIECE(RCYNODE3,U,3)=""
- QUIT
- +2 ;
- +3 ; Ren/Serv comment
- SET RCCOM2=$PIECE(RCYNODE3,U,6)
- +4 SET XUSNPI=$PIECE(RCYNODE3,U,2)
- +5 IF RCCOM2=""
- IF (XUSNPI="")
- SET RCEXP="**NO SERVICING/RENDERING NPI INCLUDED IN 835**"
- DO EXPSET
- QUIT
- +6 SET RCRTN=$$QI^XUSNPI(XUSNPI)
- +7 IF $PIECE(RCRTN,U,1)="Individual_ID"
- Begin DoDot:1
- +8 IF $PIECE(RCYNODE3,U,3)'=1
- SET RCEXP="**NPI from 835 indicated organizational but is associated with an individual**"
- DO EXPSET
- QUIT
- End DoDot:1
- QUIT
- +9 IF $PIECE(RCRTN,U,1)="Organization_ID"
- Begin DoDot:1
- +10 IF $PIECE(RCYNODE3,U,3)'=2
- SET RCEXP="**NPI from 835 indicated individual but is associated with an organization**"
- DO EXPSET
- QUIT
- End DoDot:1
- QUIT
- +11 IF $EXTRACT($PIECE(RCRTN,U,1),1,3)="Non"
- Begin DoDot:1
- +12 NEW RCIEN,RCTYPE
- SET RCIEN=$PIECE(RCRTN,U,2)
- SET RCTYPE=$$GET1^DIQ(355.93,RCIEN,.02,"I")
- if $GET(RCTYPE)=""
- QUIT
- +13 IF $PIECE(RCYNODE3,U,3)=1
- IF RCTYPE=1
- SET RCEXP="**NPI from 835 indicated individual but is associated with an organization**"
- DO EXPSET
- QUIT
- +14 IF $PIECE(RCYNODE3,U,3)=2
- IF RCTYPE=2
- SET RCEXP="**NPI from 835 indicated organizational but is associated with an individual**"
- DO EXPSET
- QUIT
- End DoDot:1
- QUIT
- +15 IF RCCOM2=""
- IF (+RCRTN=0)
- SET RCEXP="**The NPI returned on the 835 is not associated with this VistA system**"
- DO EXPSET
- QUIT
- +16 QUIT
- +17 ;
- EXPSET ;SET THE PRINT LINE WITH THE ERROR AS DEFINED IN RCEXP
- +1 SET $PIECE(RCYYY(RCPROV),U,3)=RCEXP
- +2 QUIT
- +3 ;
- PARAMS(RCQUIT) ;PARAMETERS ENTRY CONTINUED FROM RCDPEWL0
- +1 IF $GET(RCQUIT)
- KILL ^TMP("RCERA_PARAMS",$JOB)
- PARMSQ ;
- +1 QUIT
- +2 ;
- PARAMS2() ;EP from RCDPEWL0
- +1 ; PRCA*4.5*317 - Moved due to routine size issues
- +2 ; Input: None
- +3 ; Returns: RCQUIT - 1 if user ^ or timed out, 0 otherwise
- +4 ; Ask for zero/payment PRCA*4.5*321
- SET RCQUIT=$$PAYMNT()
- +5 ; PRCA*4.5*321
- if RCQUIT
- QUIT 1
- +6 ; Ask Posting Status
- SET RCQUIT=$$POSTSTAT()
- +7 if RCQUIT
- QUIT 1
- +8 ; Ask Posting Method
- SET RCQUIT=$$POSTMETH
- +9 if RCQUIT
- QUIT 1
- +10 ; Ask ERA-EFT Matching Status
- SET RCQUIT=$$MATCHST
- +11 if RCQUIT
- QUIT 1
- +12 ; Ask Claim Type
- SET RCQUIT=$$CLAIMTYP()
- +13 if RCQUIT
- QUIT 1
- +14 ; Ask for selected payers
- SET RCQUIT=$$PAYR()
- +15 QUIT RCQUIT
- +16 ;
- PAYMNT() ; Payment Type (Zero/Payment or Both) Selection ; PRCA*4.5*321 this whole subroutine
- +1 ; Input: ^TMP("RCERA_PARAMS") - Global array of preferred values (if any)
- +2 ; Output: ^TMP("RCERA_PARAMS",$J,"RCPAYMNT") - ERA Posting Status filter
- +3 ; Returns: 1 if user quit or timed out, 0 otherwise
- +4 NEW DIR,DTOUT,DUOUT,RCTYPEDF
- +5 SET RCTYPEDF=$GET(^TMP("RCERA_PARAMS",$JOB,"RCPAYMNT"))
- +6 KILL DIR
- SET DIR(0)="SA^Z:ZERO;P:PAYMENT;B:BOTH"
- +7 SET DIR("A")="(Z)ERO, (P)AYMENT, or (B)OTH: "
- +8 SET DIR("B")="B"
- +9 SET DIR("?",1)="Select ZERO to only see ERAs with a zero total amount paid."
- +10 SET DIR("?",2)="Select PAYMENT to only see ERAs with a non-zero amount paid."
- +11 SET DIR("?")="Select BOTH to see both zero and non-zero amount ERAs."
- +12 ;Stored preferred value, use as default
- if RCTYPEDF'=""
- SET DIR("B")=RCTYPEDF
- +13 WRITE !
- +14 DO ^DIR
- +15 IF $DATA(DTOUT)!$DATA(DUOUT)
- QUIT 1
- +16 SET ^TMP("RCERA_PARAMS",$JOB,"RCPAYMNT")=Y
- +17 QUIT 0
- +18 ;
- POSTSTAT() ; ERA Posting Status (Posted/Unposted/Both) Selection
- +1 ; Input: ^TMP("RCERA_PARAMS") - Global array of preferred values (if any)
- +2 ; Output: ^TMP("RCERA_PARAMS",$J,"RCPOST")- ERA Posting Status filter
- +3 ; Returns: 1 if user quit or timed out, 0 otherwise
- +4 NEW DIR,DTOUT,DUOUT,RCPOSTDF
- +5 SET RCPOSTDF=$GET(^TMP("RCERA_PARAMS",$JOB,"RCPOST"))
- +6 KILL DIR
- SET DIR(0)="SA^U:UNPOSTED;P:POSTED;B:BOTH"
- +7 SET DIR("A")="ERA posting status: (U)NPOSTED, (P)OSTED, or (B)OTH: "
- +8 SET DIR("B")="U"
- +9 SET DIR("?",1)="Select UNPOSTED to only see ERAs with a status of UNPOSTED."
- +10 SET DIR("?",2)="Select POSTED to only see ERAs with a status of POSTED."
- +11 SET DIR("?")="Select BOTH to see both unposted and posted ERAs."
- +12 ; Stored preferred value, use as default
- if RCPOSTDF'=""
- SET DIR("B")=RCPOSTDF
- +13 WRITE !
- +14 DO ^DIR
- +15 IF $DATA(DTOUT)!$DATA(DUOUT)
- QUIT 1
- +16 SET ^TMP("RCERA_PARAMS",$JOB,"RCPOST")=Y
- +17 QUIT 0
- +18 ;
- POSTMETH() ; PRCA*4.5*317 moved from RCDPEWL0 because of routine size issues
- +1 ; ERA Posting Method (Auto-Posting/Non Auto-Posting/Both) Selection
- +2 ; Input: ^TMP("RCERA_PARAMS") - Global array of preferred values (if any)
- +3 ; Output: ^TMP("RCERA_PARAMS",$J,"RCAUTOP")- ERA Posting Status filter
- +4 ; Returns: 1 if user quit or timed out, 0 otherwise
- +5 NEW DIR,DTOUT,DUOUT,RCAUTOPDF
- P1 ; PRCA*4.5*326
- SET RCAUTOPDF=$GET(^TMP("RCERA_PARAMS",$JOB,"RCAUTOP"))
- +1 KILL DIR
- SET DIR(0)="SA^A:AUTO-POSTING;N:NON AUTO-POSTING;B:BOTH"
- +2 SET DIR("A")="Display (A)UTO-POSTING, (N)ON AUTO-POSTING, or (B)OTH: "
- +3 SET DIR("B")="B"
- +4 SET DIR("?",1)="Select AUTO-POSTING to only see auto-posted ERAs."
- +5 SET DIR("?",2)="Select NON AUTO-POSTING to only see ERAs that were NOT auto-posted."
- +6 SET DIR("?")="Select BOTH to see both auto-posted and non auto-posted ERAs."
- +7 ;Stored preferred value, use as default
- if RCAUTOPDF'=""
- SET DIR("B")=RCAUTOPDF
- +8 WRITE !
- +9 DO ^DIR
- +10 IF $DATA(DTOUT)!$DATA(DUOUT)
- QUIT 1
- +11 SET ^TMP("RCERA_PARAMS",$JOB,"RCAUTOP")=Y
- +12 ; If including auto-post ERA ask for auto-post status filters
- +13 ; PRCA*4.5*326
- IF Y'="N"
- QUIT $$AUTOPST()
- +14 QUIT 0
- +15 ;
- MATCHST() ; ERA-EFT Matching Status(Matched/Unmatched/Both) Selection
- +1 ; Input: ^TMP("RCERA_PARAMS") - Global array of preferred values (if any)
- +2 ; Output: ^TMP("RCERA_PARAMS",$J,"RCMATCH")- ERA Posting Status filter
- +3 ; Returns: 1 if user quit or timed out, 0 otherwise
- +4 NEW DIR,DTOUT,DUOUT,RCMATCHD
- M1 ; PRCA*4.5*326
- SET RCMATCHD=$GET(^TMP("RCERA_PARAMS",$JOB,"RCMATCH"))
- +1 KILL DIR
- SET DIR(0)="SA^N:NOT MATCHED;M:MATCHED;B:BOTH"
- +2 SET DIR("A")="ERA-EFT match status: (N)OT MATCHED, (M)ATCHED, or (B)OTH: "
- +3 SET DIR("B")="B"
- +4 SET DIR("?",1)="Select NOT MATCHED to only see unmatched ERAs."
- +5 SET DIR("?",2)="Select MATCHED to only see matched ERAs."
- +6 SET DIR("?")="Select BOTH to see both matched and unmatched ERAs."
- +7 ;Stored preferred value, use as default
- if RCMATCHD'=""
- SET DIR("B")=RCMATCHD
- +8 WRITE !
- +9 DO ^DIR
- +10 IF $DATA(DTOUT)!$DATA(DUOUT)
- QUIT 1
- +11 ; PRCA*4.5*326
- if '$$VALM(Y)
- GOTO M1
- +12 SET ^TMP("RCERA_PARAMS",$JOB,"RCMATCH")=Y
- +13 QUIT 0
- +14 ;
- CLAIMTYP() ; Claim Type (Medical/Pharmacy/Tricare/CHAMPVA/Both) Selection
- +1 ; Input: ^TMP("RCERA_PARAMS") - Global array of preferred values (if any)
- +2 ; Output: ^TMP("RCERA_PARAMS",$J,"RCTYPE") - ERA Posting Status filter
- +3 ; Returns: 1 if user quit or timed out, 0 otherwise
- +4 NEW DIR,DTOUT,DUOUT,RCTYPEDF
- +5 SET RCTYPEDF=$GET(^TMP("RCERA_PARAMS",$JOB,"RCTYPE"))
- +6 ; PRCA*4.5*321 - Changed set of codes and help
- +7 ;PRCA*4.5*432 CHAMPVA
- KILL DIR
- SET DIR(0)="SA^M:MEDICAL;P:PHARMACY;T:TRICARE;C:CHAMPVA;A:ALL"
- +8 ;PRCA*4.5*432 CHAMPVA
- SET DIR("A")="(M)EDICAL, (P)HARMACY, (T)RICARE, (C)HAMPVA or (A)LL: "
- +9 SET DIR("B")="A"
- +10 SET DIR("?",1)="Select MEDICAL to only see ERAs with a payer type of medical."
- +11 SET DIR("?",2)="Select PHARMACY to only see ERAs with a payer type of pharmacy."
- +12 SET DIR("?",3)="Select TRICARE to only see ERAs with a payer type of Tricare."
- +13 ;PRCA*4.5*432 CHAMPVA
- SET DIR("?",4)="Select CHAMPVA to only see ERAs with a payer type of CHAMPVA."
- +14 ;PRCA*4.5*432 CHAMPVA
- SET DIR("?")="Select ALL to see medical, pharmacy, Tricare, and CHAMPVA ERAs."
- +15 ; PRCA*4.5*321 - End modified code block
- +16 ;Stored preferred value, use as default
- if RCTYPEDF'=""
- SET DIR("B")=RCTYPEDF
- +17 WRITE !
- +18 DO ^DIR
- +19 IF $DATA(DTOUT)!$DATA(DUOUT)
- QUIT 1
- +20 SET ^TMP("RCERA_PARAMS",$JOB,"RCTYPE")=Y
- +21 QUIT 0
- +22 ;
- PAYR() ; Payer Selection
- +1 ; Input: ^TMP("RCERA_PARAMS",$J) - Global array of preferred values (if any)
- +2 ; Output: ^TMP("RCERA_PARAMS",$J,"RCTYPE") - ERA Posting Status filter
- +3 ; Returns: 1 if user quit or timed out, 0 otherwise
- +4 NEW DIR,DTOUT,DUOUT,RCPAYR,RCPAYRDF,RCOUT,RCDONE
- +5 SET RCPAYRDF=$GET(^TMP("RCERA_PARAMS",$JOB,"RCPAYR"))
- +6 ; PRCA*4.5*332 - wrapped prompts in a for loop to allow the payer range prompt to return to inital prompt if
- +7 ; user cancels out
- +8 SET (RCQUIT,RCDONE,RCOUT)=0
- +9 FOR
- if RCDONE
- QUIT
- Begin DoDot:1
- +10 KILL DIR
- SET DIR(0)="SA^A:ALL;R:RANGE"
- +11 SET DIR("A")="(A)LL payers, (R)ANGE of payer names: "
- +12 SET DIR("B")="ALL"
- +13 SET DIR("?",1)="Entering ALL will select all payers."
- +14 SET DIR("?")="If RANGE is entered, you will be prompted for a payer range."
- +15 ;Stored preferred value, use as default
- if $PIECE(RCPAYRDF,"^")'=""
- SET DIR("B")=$PIECE(RCPAYRDF,"^",1)
- +16 WRITE !
- +17 DO ^DIR
- +18 IF $DATA(DTOUT)!$DATA(DUOUT)
- SET (RCDONE,RCOUT)=1
- QUIT
- +19 SET RCPAYR=Y
- +20 IF RCPAYR="A"
- Begin DoDot:2
- +21 ;All payers selected
- SET ^TMP("RCERA_PARAMS",$JOB,"RCPAYR")=Y
- +22 SET RCDONE=1
- End DoDot:2
- QUIT
- +23 IF RCPAYR="R"
- Begin DoDot:2
- +24 WRITE !,"Names you select here will be the payer names from the ERA, not the ins. file"
- +25 KILL DIR
- +26 SET DIR("?")="Enter a name from 1 to 30 characters in UPPER CASE."
- +27 SET DIR(0)="FA^1:30^K:X'?.U X"
- +28 SET DIR("A")="Start with payer name: "
- +29 ;Stored preferred value, use as default
- if $PIECE(RCPAYRDF,"^",2)'=""
- SET DIR("B")=$PIECE(RCPAYRDF,"^",2)
- +30 WRITE !
- +31 DO ^DIR
- +32 IF $DATA(DTOUT)!$DATA(DUOUT)
- Begin DoDot:3
- +33 KILL ^TMP("RCERA_PARAMS",$JOB,"RCPAYR")
- End DoDot:3
- QUIT
- +34 SET RCPAYR("FROM")=Y
- +35 KILL DIR
- +36 SET DIR("?")="Enter a name from 1 to 30 characters in UPPER CASE."
- +37 SET DIR(0)="FA^1:30^K:X'?.U X"
- SET DIR("A")="Go to payer name: "
- +38 SET DIR("B")=$EXTRACT(RCPAYR("FROM"),1,27)_"ZZZ"
- +39 ;Stored preferred value, use as default
- if $PIECE(RCPAYRDF,"^",3)'=""
- SET DIR("B")=$PIECE(RCPAYRDF,"^",3)
- +40 WRITE !
- +41 DO ^DIR
- +42 IF $DATA(DTOUT)!$DATA(DUOUT)
- QUIT
- +43 SET ^TMP("RCERA_PARAMS",$JOB,"RCPAYR")=RCPAYR_"^"_RCPAYR("FROM")_"^"_Y
- +44 SET RCDONE=1
- End DoDot:2
- End DoDot:1
- +45 QUIT RCOUT
- +46 ;
- +47 ; BEGIN PRCA*4.5*326
- AUTOPST() ; Auto-post Status (Marked/Partial/Complete/All) Selection
- +1 ; Input: ^TMP("RCERA_PARAMS") - Global array of preferred values (if any)
- +2 ; Output: ^TMP("RCERA_PARAMS",$J,"RCAPSTA") - Auto-post Status filter
- +3 ; Returns: 1 if user quit or timed out, 0 otherwise
- +4 NEW DIR,DTOUT,DUOUT,APTYPEDF
- A1 SET APTYPEDF=$GET(^TMP("RCERA_PARAMS",$JOB,"RCAPSTA"))
- +1 KILL DIR
- SET DIR(0)="SA^M:MARKED;P:PARTIAL;C:COMPLETE;A:ALL"
- +2 SET DIR("A")="Auto-Post status: (M)ARKED, (P)ARTIAL, (C)OMPLETE or (A)LL: "
- +3 SET DIR("B")="A"
- +4 SET DIR("?",1)="Select MARKED to only see ERAs currently marked for autopost."
- +5 SET DIR("?",2)="Select PARTIAL to only see ERAs with a partial auto-post status."
- +6 SET DIR("?",3)="Select COMPLETE to only see ERAs with a complete auto-post status."
- +7 SET DIR("?")="Select ALL to see ERAs with any autopost status."
- +8 ;Stored preferred value, use as default
- if APTYPEDF'=""
- SET DIR("B")=APTYPEDF
- +9 WRITE !
- +10 DO ^DIR
- +11 IF $DATA(DTOUT)!$DATA(DUOUT)
- QUIT 1
- +12 if '$$VALA(Y)
- GOTO A1
- +13 SET ^TMP("RCERA_PARAMS",$JOB,"RCAPSTA")=Y
- +14 QUIT 0
- +15 ;
- VALA(INP) ; Compare input auto-post status filter to other filters
- +1 ; Input INP - Y value from ^DIR
- +2 ; Output 1 = Valid 0 = Invalid
- +3 ;
- +4 IF INP="C"
- IF $GET(^TMP("RCERA_PARAMS",$JOB,"RCPOST"))="U"
- Begin DoDot:1
- +5 WRITE !!,"Auto-post COMPLETE is an invalid selection for UNPOSTED ERAs"
- End DoDot:1
- QUIT 0
- +6 IF INP="P"
- IF $GET(^TMP("RCERA_PARAMS",$JOB,"RCPOST"))="U"
- Begin DoDot:1
- +7 WRITE !!,"Auto-post PARTIAL is an invalid selection for UNPOSTED ERAs"
- End DoDot:1
- QUIT 0
- +8 IF INP="M"
- IF $GET(^TMP("RCERA_PARAMS",$JOB,"RCPOST"))="P"
- Begin DoDot:1
- +9 WRITE !!,"MARKED for Auto-post is an invalid selection for POSTED ERAs"
- End DoDot:1
- QUIT 0
- +10 QUIT 1
- +11 ;
- VALM(INP) ; Compare input match type filter to other filters
- +1 ; Input INP - Y value from ^DIR
- +2 ; Output 1 = Valid 0 = Invalid
- +3 ;
- +4 IF INP="N"
- IF $GET(^TMP("RCERA_PARAMS",$JOB,"RCAUTOP"))="A"
- Begin DoDot:1
- +5 WRITE !!,"NOT MATCHED is an invalid selection for AUTO-POSTING ERAs"
- End DoDot:1
- QUIT 0
- +6 QUIT 1
- +7 ;
- +8 ; Following FILTER code moved from RCDPEWL7 due to routine size PRCA*4.5*432
- FILTER(IEN344P4) ; Returns 1 if record in entry IEN344P4 in 344.4 passes
- +1 ; the edits for the worklist selection of ERAs
- +2 ; Parameters found in ^TMP("RCERA_PARAMS",$J)
- +3 NEW OK,RCPOST,RCAPST,RCAPSTA,RCAUTOP,RCMATCH,RCTYPE,RCDFR,RCDTO,RCPAYFR,RCPAYMNT,RCPAYTO,RCPAYR,RC0,RC4
- +4 SET OK=1
- SET RC0=$GET(^RCY(344.4,IEN344P4,0))
- SET RC4=$GET(^RCY(344.4,IEN344P4,4))
- +5 ;
- +6 SET RCMATCH=$GET(^TMP("RCERA_PARAMS",$JOB,"RCMATCH"))
- SET RCPOST=$GET(^TMP("RCERA_PARAMS",$JOB,"RCPOST"))
- +7 SET RCAUTOP=$GET(^TMP("RCERA_PARAMS",$JOB,"RCAUTOP"))
- SET RCTYPE=$GET(^TMP("RCERA_PARAMS",$JOB,"RCTYPE"))
- +8 SET RCDFR=+$PIECE($GET(^TMP("RCERA_PARAMS",$JOB,"RCDT")),U)
- SET RCDTO=+$PIECE($GET(^TMP("RCERA_PARAMS",$JOB,"RCDT")),U,2)
- +9 SET RCPAYR=$PIECE($GET(^TMP("RCERA_PARAMS",$JOB,"RCPAYR")),U)
- SET RCPAYFR=$PIECE($GET(^TMP("RCERA_PARAMS",$JOB,"RCPAYR")),U,2)
- SET RCPAYTO=$PIECE($GET(^TMP("RCERA_PARAMS",$JOB,"RCPAYR")),U,3)
- +10 ; PRCA*4.5*321
- SET RCPAYMNT=$GET(^TMP("RCERA_PARAMS",$JOB,"RCPAYMNT"))
- +11 SET RCAPSTA=$GET(^TMP("RCERA_PARAMS",$JOB,"RCAPSTA"))
- +12 ;
- +13 ; Post status
- +14 IF $SELECT(RCPOST="B":0,RCPOST="U":$PIECE(RC0,U,14),1:'$PIECE(RC0,U,14))
- SET OK=0
- GOTO FQ
- +15 ; Auto-Posting status
- +16 IF $SELECT(RCAUTOP="B":0,RCAUTOP="A":($PIECE(RC4,U,2)=""),1:($PIECE(RC4,U,2)'=""))
- SET OK=0
- GOTO FQ
- +17 ; If ERA is autopost and filtering on selected Autopost statuses check status
- +18 IF $PIECE(RC4,U,2)'=""
- IF RCAPSTA'="A"
- IF (RCAUTOP="B")!(RCAUTOP="A")
- Begin DoDot:1
- +19 ;Auto-post Status
- +20 SET RCAPST=$$GET1^DIQ(344.4,IEN344P4_",",4.02,"I")
- +21 ;Complete filter
- +22 IF RCAPSTA="C"
- if RCAPST'=2
- SET OK=0
- GOTO FQ
- +23 ;Partial filter
- +24 IF RCAPSTA="P"
- if RCAPST'=1
- SET OK=0
- GOTO FQ
- +25 ;Marked for Auto-post filter - ignores if not partial post or unposted
- +26 IF RCAPSTA="M"
- IF RCAPST'=1
- IF RCAPST'=0
- SET OK=0
- GOTO FQ
- +27 ;Marked for Auto-post filter - ignores PARTIAL auto-post era if no lines on ERA are marked
- +28 IF RCAPSTA="M"
- IF RCAPST=1
- IF '$ORDER(^RCY(344.4,"AP",1,IEN344P4,""))
- SET OK=0
- GOTO FQ
- +29 ;Marked for Auto-post filter - ignores UNPROCESSED auto-post era if no marked for autopost user
- +30 IF RCAPSTA="M"
- IF RCAPST=0
- IF $$GET1^DIQ(344.4,IEN344P4_",",4.04,"I")=""
- SET OK=0
- GOTO FQ
- End DoDot:1
- if OK=0
- GOTO FQ
- +31 ; Match status
- +32 IF $SELECT(RCMATCH="B":0,RCMATCH="N":$PIECE(RC0,U,9),1:'$PIECE(RC0,U,9))
- SET OK=0
- GOTO FQ
- +33 ; Medical/Pharmacy/Tricare Claim
- +34 ; I $S(RCTYPE="B":0,RCTYPE="M":$$PHARM^RCDPEWLP(IEN344P4),1:'$$PHARM^RCDPEWLP(IEN344P4)) S OK=0 G FQ
- +35 IF RCTYPE'="A"
- Begin DoDot:1
- +36 NEW RCFLAG
- +37 IF '$$PAYFLAGS^RCDPEWL7(IEN344P4,.RCFLAG)
- SET OK=0
- QUIT
- +38 IF RCTYPE="P"
- IF 'RCFLAG("P")
- SET OK=0
- QUIT
- +39 IF RCTYPE="T"
- IF 'RCFLAG("T")
- SET OK=0
- QUIT
- +40 ;PRCA*4.5*432 CHAMPVA
- IF RCTYPE="C"
- IF 'RCFLAG("C")
- SET OK=0
- QUIT
- +41 ;PRCA*4.5*432 CHAMPVA
- IF RCTYPE="M"
- IF (RCFLAG("P")!RCFLAG("T")!RCFLAG("C"))
- SET OK=0
- End DoDot:1
- IF 'OK
- GOTO FQ
- +42 ; dt rec'd range
- +43 IF $SELECT(RCDFR=0:0,1:$PIECE(RC0,U,7)\1<RCDFR)
- SET OK=0
- GOTO FQ
- +44 IF $SELECT(RCDTO=DT:0,1:$PIECE(RC0,U,7)\1>RCDTO)
- SET OK=0
- GOTO FQ
- +45 ; Payer name
- +46 IF RCPAYR'="A"
- Begin DoDot:1
- +47 NEW Q
- +48 SET Q=$$UP^RCDPEARL($PIECE(RC0,U,6))
- +49 IF $SELECT(Q=RCPAYFR:1,Q=RCPAYTO:1,Q]RCPAYFR:RCPAYTO]Q,1:0)
- QUIT
- +50 SET OK=0
- End DoDot:1
- if 'OK
- GOTO FQ
- +51 ; PRCA*4.5*321 - Start modified code block
- +52 ; Zero amount or payment
- +53 ;
- IF RCPAYMNT'="B"
- Begin DoDot:1
- +54 IF RCPAYMNT="Z"
- IF $PIECE(RC0,U,5)
- SET OK=0
- QUIT
- +55 IF RCPAYMNT="P"
- IF '$PIECE(RC0,U,5)
- SET OK=0
- End DoDot:1
- +56 ; PRCA*4.5*321 - End modified code block
- +57 ;
- FQ QUIT OK
- +1 ; END PRCA*4.5*326