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

RCDPEMAP.m

Go to the documentation of this file.
  1. RCDPEMAP ;AITC/FA - LIST ALL AUTO-POSTED RECEIPTS REPORT ;Nov 17, 2016
  1. ;;4.5;Accounts Receivable;**332,432**;Mar 20, 1995;Build 16
  1. ;Per VA Directive 6402, this routine should not be modified.
  1. ;
  1. EN ; Main entry point
  1. N INPUT,RCPAR,RCVAUTD,XX,YY
  1. K ^TMP($J,"RCDPE_MAP"),^TMP("RCDPE_MAP",$J)
  1. K ^TMP("RCSELPAY",$J),^TMP($J,"SELPAYER"),^TMP($J,"SELUSER")
  1. ;
  1. S INPUT=$$STADIV(.RCVAUTD) ; Division filter
  1. Q:'INPUT ; '^' or timeout
  1. S $P(INPUT,"^",2)=$$DTRNG(0) ; Start Date|End date
  1. Q:'$P(INPUT,"^",2) ; '^' or timeout
  1. S $P(INPUT,"^",3)=$$RTYPE^RCDPEU1("") ; M/P/T/C filter ;PRCA*4.5*432 Add CHAMPVA
  1. Q:$P(INPUT,"^",3)<0 ; '^' or timeout
  1. S RCPAR("SELC")=$$PAYRNG^RCDPEU1() ; Selected or Range of Payers
  1. Q:RCPAR("SELC")=-1 ; '^' or timeout
  1. S $P(INPUT,"^",4)=RCPAR("SELC")
  1. ;
  1. I RCPAR("SELC")'="A" D Q:XX=-1 ; Since we don't want all payers
  1. . S RCPAR("TYPE")=$P(INPUT,"^",3) ; prompt for payers we do want
  1. . S RCPAR("FILE")=344.4
  1. . S RCPAR("DICA")="Select Insurance Company NAME: "
  1. . S XX=$$SELPAY^RCDPEU1(.RCPAR)
  1. ;
  1. S $P(INPUT,"^",5)=$$SELUSER() ; Selected or All users filter
  1. Q:$P(INPUT,"^",5)<0 ; '^' or timeout
  1. ;
  1. I $P(INPUT,"^",5)=2 D Q:XX=-1 ; Prompt for selected users
  1. . S XX=$$SELUSER2()
  1. ;
  1. S $P(INPUT,"^",6)=$$SECSORT() ; Secondary Sort
  1. Q:$P(INPUT,"^",6)<0 ; '^' or timeout
  1. S $P(INPUT,"^",7)=$$ASKLM^RCDPEARL ; Ask to Display in Listman Template
  1. Q:$P(INPUT,"^",7)<0 ; '^' or timeout
  1. I $P(INPUT,"^",7)=1 D Q ; Compile data and call listman to display
  1. . D LMOUT(INPUT,.RCVAUTD,.IO)
  1. S $P(INPUT,"^",8)=$$EXCEL() ; Ask to output to Excel
  1. Q:$P(INPUT,"^",8)=-1 ; '^' or timeout
  1. D:$P(INPUT,"^",8)=1 INFO^RCDPEM6 ; Display capture information for Excel
  1. S $P(INPUT,"^",9)=$$DEVICE($P(INPUT,"^",8),.IO) ; Ask output device
  1. Q:'$P(INPUT,"^",9)
  1. ;
  1. ; Option to queue
  1. I $D(IO("Q")) D Q
  1. . N JOB S JOB=$J
  1. . N ZTDESC,ZTRTN,ZTSAVE,ZTSK
  1. . S ZTRTN="REPORT^RCDPEMAP(INPUT,.RCVAUTD,.IO,JOB)"
  1. . S ZTDESC="EEOBS MARKED FOR AUTO-POST AUDIT REPORT"
  1. . M RCPYRSEL=^TMP("RCSELPAY",$J)
  1. . S ZTSAVE("RC*")="",ZTSAVE("VAUTD")="",ZTSAVE("IO*")=""
  1. . S ZTSAVE("INPUT")="",ZTSAVE("JOB")=""
  1. . S ZTSAVE("^TMP(""RCDPEU1"",$J,")=""
  1. . D ^%ZTLOAD
  1. . W !!,$S($D(ZTSK):"Task number "_ZTSK_" was queued.",1:"Unable to queue this task.")
  1. . K ZTSK,IO("Q")
  1. . D HOME^%ZIS
  1. ;
  1. D REPORT(INPUT,.RCVAUTD,.IO) ; Compile and Display Report data
  1. Q
  1. ;
  1. LMOUT(INPUT,RCVAUTD,IO) ; Output report to Listman
  1. ; Input: INPUT - See REPORT for a complete description
  1. ; RCVAUTD - Array of selected Divisions
  1. ; Only passed if A1=2
  1. ; Output: ^TMP("RCDPE_MAP",$J,CTR)=Line - Array of display lines (no headers)
  1. ; for output to Listman
  1. N HDR,RCTEMP
  1. S $P(INPUT,"^",10)=0 ; Initial listman line counter
  1. D REPORT(INPUT,.RCVAUTD,.IO) ; Get the lines to be displayed
  1. S HDR("TITLE")="EEOBs MARKED FOR AP AUDIT"
  1. S HDR(1)=$$HDRLN2^RCDPEMA1(INPUT)
  1. S HDR(2)=$$HDRLN3^RCDPEMA1(INPUT)
  1. S HDR(3)=$$HDRLN4^RCDPEMA1(INPUT)
  1. S HDR(4)="ERA # Claim # Trace #"
  1. S RCTEMP="RCDPE EEOB MARKED FOR AP AUDIT"
  1. D LMRPT^RCDPEARL(.HDR,$NA(^TMP("RCDPE_MAP",$J)),RCTEMP) ; Generate ListMan display
  1. ;
  1. D ^%ZISC ; Close the device
  1. K ^TMP("RCDPE_MAP",$J),^TMP($J,"RCDPE_MAP")
  1. K ^TMP("RCSELPAY",$J),^TMP($J,"SELPAYER"),^TMP($J,"SELUSER")
  1. Q
  1. ;
  1. STADIV(RCVAUTD) ; Division/Station Filter
  1. ; Input: None
  1. ; Output: RCVAUTD - Array of selected divisions, if 1 is returned
  1. ; Returns: 0 - User up-arrowed or timed out
  1. ; 1 - All divisions selected
  1. ; 2 - Selected Divisions
  1. N DIR,DIROUT,DIRUT,DTOUT,DUOUT,VAUTD,X,Y
  1. D DIVISION^VAUTOMA ; IA #664 allows this
  1. Q:Y<0 0 ; User up-arrowed or timed out
  1. Q:VAUTD=1 1 ; All divisions selected
  1. M RCVAUTD=VAUTD ; Save selected divisions (if any)
  1. Q 2
  1. ;
  1. SELUSER() ; Ask the user if they only want to all users or only selected ones
  1. ; Input: None
  1. ; Returns: 0 - User up-arrowed or timed out
  1. ; 1 - Show all users
  1. ; 2 - Show selected user
  1. N DIR,DIROUT,DIRUT,DTOUT,DUOUT,X,Y
  1. S DIR("A")="Run Report for (S)pecific or (A)ll Users: "
  1. S DIR(0)="SA^S:Specific;A:All"
  1. S DIR("?",1)="Enter 'A' to show EEOBs marked by any user."
  1. S DIR("?")="Enter 'S' to show EEOBs marked by specific user(s)."
  1. S DIR("B")="A"
  1. D ^DIR
  1. I $D(DTOUT)!$D(DUOUT)!(Y="") Q -1
  1. Q:Y="A" 1
  1. Q 2
  1. ;
  1. SELUSER2(PARAM) ; Allows the user to enter the selected users to filter by
  1. ; Input: None
  1. ; Output: ^TMP($J,"SELUSER",IEN)="" Where IEN - IEN for file 200
  1. ; Returns: 1 - Success, -1 - Abort
  1. N RCA,RET,RETURN,QUIT
  1. K ^TMP($J,"SELUSER")
  1. S QUIT=0,RETURN=1
  1. F D Q:QUIT
  1. . S RET=$$ASKUSER()
  1. . I RET=-1 S RETURN=-1,QUIT=1 Q
  1. . I RET=0 D
  1. . . I $D(^TMP($J,"SELUSER")) S QUIT=1
  1. . . E D
  1. . . . W !!,"You must select at least one user",*7,!
  1. I RETURN=-1 K ^TMP($J,"SELUSER") Q -1
  1. S RETURN=$S($D(^TMP($J,"SELUSER")):1,1:-1)
  1. Q RETURN
  1. ;
  1. ASKUSER() ; Prompt for a User from file 200
  1. ; Input: None
  1. ; Output: ^TMP($J,"SELUSER",IEN)="" - Selected User
  1. ; Returns: 1 - User selected
  1. ; 0 - No User selected
  1. ; -1 - user typed '^' or timed out
  1. ;
  1. N DIC,DIR,DIROUT,DIRUT,DTOUT,DUOUT,X,Y
  1. S RETURN=1
  1. ;
  1. S DIC=200,DIC(0)="QEA"
  1. S DIC("A")="Select User: "
  1. S DIC("S")="I '$D(^TMP($J,""SELUSER"",Y))"
  1. D ^DIC
  1. I $D(DTOUT)!$D(DUOUT) Q -1
  1. I Y=-1 Q 0
  1. S ^TMP($J,"SELUSER",+Y)=""
  1. Q 1
  1. ;
  1. SECSORT() ; Ask the user if they want the secondary sort by User or Payer Name
  1. ; Input: None
  1. ; Returns: 0 - User up-arrowed or timed out
  1. ; 1 - Sort by User
  1. ; 2 - Sort by Payer Name
  1. N DIR,DIROUT,DIRUT,DTOUT,DUOUT,X,Y
  1. S DIR("A")="Sort by Insurance Company (N)ame or (U)ser: "
  1. S DIR(0)="SA^N:Name;U:User"
  1. S DIR("?",1)="Enter 'N' to sort by Payer Name."
  1. S DIR("?")="Enter 'U' to sort by user."
  1. S DIR("B")="N"
  1. D ^DIR
  1. I $D(DTOUT)!$D(DUOUT)!(Y="") Q -1
  1. Q:Y="U" 1
  1. Q 2
  1. ;
  1. DTRNG(WHICH) ; Allows the user to select the Auto-Post OR ERA Received
  1. ; date range to be used
  1. ; Input: WHICH - 0 - Auto-Post Date Range
  1. ; 1 - ERA Date Received Date Range
  1. ; Returns: 0 - User up-arrowed or timed out, 1 otherwise
  1. ; A1^A2 - Where:
  1. ; A1 - Aut-Post Start Date
  1. ; A2 - Auto-Post End Date
  1. N DIR,DIROUT,DIRUT,DTOUT,DUOUT,RANGE,START,X,XX,Y
  1. S DIR(0)="DA^:"_DT_":APE"
  1. S DIR("A")="Start Date: "
  1. S DIR("?")="Enter the earliest Auto-Post date"
  1. D ^DIR
  1. Q:$D(DTOUT)!$D(DUOUT)!(Y="") 0
  1. S START=Y
  1. ENDDT ; Prompt for end date
  1. K DIR
  1. S DIR("B")=Y(0)
  1. S DIR(0)="DA^"_START_":"_DT_":APE"
  1. S DIR("A")="End Date: "
  1. S DIR("?")="Enter the latest Auto-Post date"
  1. D ^DIR
  1. Q:$D(DTOUT)!$D(DUOUT)!(Y="") 0
  1. I Y<START D G ENDDT
  1. . S XX=$$FMTE^XLFDT(START,"2ZD") ;****
  1. . W !,*7,"Enter an End date that is not less than "_XX
  1. S RANGE=START_"|"_Y
  1. Q RANGE
  1. ;
  1. EXCEL() ; Ask the user if they want to export to Excel
  1. ; Input: None
  1. ; Returns: -1 - User up-arrowed or timed out
  1. ; 0 - Output to paper
  1. ; 1 - Output to Excel
  1. N DIR,DIROUT,DIRUT,DTOUT,DUOUT,X,Y
  1. S DIR(0)="Y"
  1. S DIR("A")="Export the report to Microsoft Excel"
  1. S DIR("B")="NO"
  1. S DIR("?")="Enter 'YES' to output to Excel. Otherwise enter 'NO'"
  1. D ^DIR
  1. I $G(DUOUT) Q -1
  1. Q Y
  1. ;
  1. DEVICE(EXCEL,IO) ; Select the output device
  1. ; Input: EXCEL - 1 - Ouput to Excel, 0 otherwise
  1. ; Output: %ZIS - Selected device
  1. ; IO - Array of selected output info
  1. ; Returns: 0 - No device selected, 1 otherwise
  1. N POP,RCPYRSEL,%ZIS
  1. S %ZIS="QM"
  1. D ^%ZIS
  1. Q:POP 0
  1. Q:EXCEL 1 ; Output to Excel, no queueing
  1. ;
  1. Q 1
  1. ;
  1. REPORT(INPUT,RCVAUTD,IO,JOB) ; Compile and run the report
  1. ; Expects ZTQUEUED to be defined already if queued
  1. ; Input: INPUT - A1^A2^A3^...^An Where:
  1. ; A1 - 1 - All divisions selected
  1. ; 2 - Selected divisions
  1. ; A2 - B1|B2 - Where:
  1. ; B1 - Auto-Post Start Date
  1. ; B2 - Auto-Post End Date
  1. ; A3 - 'M' - Medical Payers only
  1. ; 'P' - Pharmacy Payers only
  1. ; 'T' - Tricare Payers only
  1. ; 'C' - CHAMPVA Payers only ;PRCA*4.5*432 Add CHAMPVA
  1. ; 'A' - All Payers
  1. ; A4 - 'S' - Specific Payers
  1. ; 'R' - Range of Payers
  1. ; 'A' - All Payers
  1. ; A5 - 1 - Display all users
  1. ; 2 - Display selected users
  1. ; A6 - 1 - Sort by User
  1. ; 2 - Sort by Payer Name
  1. ; A7 - 0 - Do not display in a listman template
  1. ; 1 - Display in a listman template
  1. ; A8 - 0 - Output to paper
  1. ; 1 - Output to Excel
  1. ; A9 - Line counter for Listman output
  1. ; RCVAUTD - Array of selected Divisions
  1. ; Only passed if A1=2
  1. ; IO - Interface device
  1. ; JOB - $J (optional, only passed in when report is queued)
  1. ; ^TMP($J,"RCSELPAY") - Global Array of selected insurance companies
  1. ; ^TMP($J,"SELUSER") - Global Array of selected users
  1. ; Output: ^TMP("RCDPEMAP",$J,CTR)=Line - Array of display lines (no headers)
  1. ; for output to Listman
  1. ; Only set when A7-1
  1. N CURDT,DIVFLT,DTEND,DTSTART,IENS,IEN3444,IEN34441,PAYER,PAYERU
  1. N RCTYPE,RCPAYS,SORT,TIN,UIEN,USER,USERU,USERF,SVAL,XX,YY,ZZ
  1. K ^TMP("RCDPE_MAP",$J),^TMP($J,"RCDPE_MAP")
  1. ; I '$G(JOB) S JOB=""
  1. U IO
  1. S DIVFLT=$P(INPUT,"^",1) ; Division filter
  1. S SORT=$P(INPUT,"^",6) ; Type of secondary sort
  1. S DTEND=$P($P(INPUT,"^",2),"|",2)_".9999" ; End of Date Range
  1. S DTSTART=$P($P(INPUT,"^",2),"|",1) ; End of Date Range
  1. S RCTYPE=$P(INPUT,"^",3) ; Medical/Pharmacy/Tricare/CHAMPVA/All ;PRCA*4.5*432 Add CHAMPVA
  1. S RCPAYS=$P(INPUT,"^",4) ; Payers All/Selected/Range
  1. S USERF=$P(INPUT,"^",5) ; All Users/Selected Users
  1. ;
  1. ; First filter and sort the report
  1. S CURDT=(DTSTART-1)_.9999
  1. F D Q:'CURDT Q:CURDT>(DTEND)
  1. . S CURDT=$O(^RCY(344.4,"F",CURDT))
  1. . Q:'CURDT
  1. . Q:CURDT>(DTEND)
  1. . S IEN3444=0
  1. . F D Q:'IEN3444
  1. . . S IEN3444=$O(^RCY(344.4,"F",CURDT,IEN3444))
  1. . . Q:'IEN3444
  1. . . I DIVFLT'=1 Q:'$$CHKDIV^RCDPEDAR(IEN3444,1,.RCVAUTD) ; Not a selected Division
  1. . . S PAYER=$$GET1^DIQ(344.4,IEN3444,.06,"I") ; Payment From field
  1. . . S TIN=$$GET1^DIQ(344.4,IEN3444,.03,"I") ; Insurance Co Id
  1. . . S PAYERU=$$UP^XLFSTR(PAYER)
  1. . . S PAYER=TIN_"/"_$E(PAYER,1,70-$L(TIN))
  1. . . S XX=1
  1. . . I RCPAYS'="A" D Q:'XX
  1. . . . S XX=$$ISSEL^RCDPEU1(344.4,IEN3444) ; Check if payer was selected
  1. . . E I RCTYPE'="A" D Q:'XX ; If all of a give type of payer selected
  1. . . . S XX=$$ISTYPE^RCDPEU1(344.4,IEN3444,RCTYPE) ; Check that payer matches type
  1. . . S IEN34441=""
  1. . . F D Q:IEN34441=""
  1. . . . S IEN34441=$O(^RCY(344.4,"F",CURDT,IEN3444,IEN34441))
  1. . . . Q:IEN34441=""
  1. . . . S IENS=IEN34441_","_IEN3444_","
  1. . . . S UIEN=$$GET1^DIQ(344.41,IENS,6.01,"I") ; ERA Detail line Marked Auto-Post User
  1. . . . Q:UIEN="" ; Not marked for Auto-Post
  1. . . . S USER=$$GET1^DIQ(200,UIEN_",",.01,"E")
  1. . . . S USERU=$$UP^XLFSTR(USER)
  1. . . . I USERF'=1,'$D(^TMP($J,"SELUSER",UIEN)) Q ; Not a selected User
  1. . . . S SVAL=$S(SORT=2:PAYERU,1:USERU) ; Get the sort value
  1. . . . S XX=PAYER_"^"_USER
  1. . . . S $P(XX,"^",3)=$$GET1^DIQ(344.4,IEN3444_",",.01,"E")_"."_IEN34441 ; ERA#_"."_SEQ
  1. . . . S YY=$$GET1^DIQ(344.41,IENS,.02,"I") ; IEN for 361.1
  1. . . . S ZZ=$$GET1^DIQ(361.1,YY_",",.01,"I") ; IEN for 399/430
  1. . . . S ZZ=$$GET1^DIQ(430,ZZ_",",.01,"E") ; Claim #
  1. . . . S ZZ=$TR(ZZ,"-","")
  1. . . . S $P(XX,"^",4)=ZZ
  1. . . . S $P(XX,"^",5)=$$GET1^DIQ(361.1,YY_",",.07,"E") ; Trace #
  1. . . . ;
  1. . . . ; Found one that was marked for auto-post
  1. . . . S ^TMP($J,"RCDPE_MAP","SEL",CURDT)=$$FMTE^XLFDT(CURDT,"2ZD")
  1. . . . S ^TMP($J,"RCDPE_MAP","SEL",CURDT,SVAL)=$S(SORT=2:PAYER,1:USER)
  1. . . . S ^TMP($J,"RCDPE_MAP","SEL",CURDT,SVAL,IEN3444,IEN34441)=XX
  1. ;
  1. D RPTOUT^RCDPEMA1(INPUT) ; Output the report
  1. ;
  1. ; Quit if Listman - clean up of ^TMP & device is handled in LMOUT^RCDPELAR
  1. Q:$P(INPUT,"^",7)=1
  1. ;
  1. ; Close device
  1. I '$D(ZTQUEUED) D ^%ZISC
  1. I $D(ZTQUEUED) S ZTREQ="@"
  1. K ^TMP("RCDPE_MAP",$J),^TMP($J,"RCDPE_MAP")
  1. K ^TMP("RCSELPAY",$J),^TMP($J,"SELPAYER"),^TMP($J,"SELUSER")
  1. K ^TMP("RCDPEU1",$J)
  1. K ZTQUEUED
  1. Q
  1. ;
  1. ASKSTOP() ;EP from RCDPEMA1
  1. ; Ask to continue
  1. ; Input: IOST - Device Type
  1. ; Returns: 1 - User wants to quit, 0 otherwise
  1. N DIR,DIROUT,DIRUT,DTOUT,DUOUT
  1. Q:$E(IOST,1,2)'["C-" 0 ; Not a terminal
  1. S DIR(0)="E"
  1. W ! D ^DIR
  1. I ($D(DIRUT))!($D(DUOUT)) Q 1
  1. Q 0
  1. ;