- RCDPESR8 ;ALB/TMK - EFT return file field captions ;09-SEP-2003
- ;;4.5;Accounts Receivable;**173**;Mar 20, 1995
- ;
- ; Note: if the 835 EFT flat file changes, make the corresponding changes
- ; in this routine.
- DISP(RCMIN,RCMOUT,RCFMT,RCFULL,RCW) ; Format display for 835 EFT return msg
- ; RCMIN = the name of the array that contains the raw message data
- ; The data is contained at the next level and the subscript is
- ; numeric and greater than 0 OR the data can be at the
- ; 0-node subsequent to the final subscript.
- ; If the message array is a global ^TMP($J,"MSG",n), RCMIN
- ; will equal "^TMP($J,""MSG"")" and the message text will be
- ; in ^TMP($J,"MSG",1), ^TMP($J,"MSG",2), etc. OR
- ; the message text can be defined at TMP($J,"MSG",1,0) ^...,2,0)
- ; etc.
- ; RCMOUT = the name of the array that should be returned. This array
- ; will follow the same convention as the input array. The
- ; array will be returned with a numeric final subscript. If
- ; RCMOUT is passed as "^TMP($J,""MSG1"")", then the display
- ; lines will be returned in ^TMP($J,"MSG1",1),
- ; ^TMP($J,"MSG1",2), etc. Note the array RCMOUT is killed
- ; on entry to this call
- ; RCFMT = 0 or null if call should return raw data, 1 to execute the
- ; transforms attached to the fields
- ; RCFULL = the name of an array if the data should be returned in
- ; this array, formatted into lines for display. If not sent,
- ; only the display data by element is returned in RCMOUT. If
- ; RCFULL is sent, the array is killed before populating it
- ; RCW = max # of characters per line to return in array RCFULL
- ;
- N Z,Z0,Z1,R,RC,RCCT,RCREF,RCDATA,RCQ
- S RCCT=0 K @RCMOUT
- S Z=0 F S Z=$O(@RCMIN@(Z)) Q:'Z S Z0=$S($G(@RCMIN@(Z))'="":@RCMIN@(Z),1:$G(@RCMIN@(Z,0))) I Z0'="" S RCQ=0 D
- . F Z1=1:1:$L(Z0,U) I $P(Z0,U,Z1)'="" D Q:RCQ
- .. S RCDATA=$P(Z0,U,Z1)
- .. I Z1=1 D Q:RCQ
- ... S RCREF=$S(RCDATA'["EFT":RCDATA,1:"EFT"),R=RCREF_"^RCDPESR8",RC=$P($T(@R),";;",2)
- ... I RC="" S RCCT=RCCT+1,@RCMOUT@(RCCT)="<<<INVALID LINE TYPE - RAW DATA IS:",RCCT=RCCT+1,@RCMOUT@(RCCT)=Z0
- .. Q:RCDATA=""
- .. S R=RCREF_"+"_Z1_"^RCDPESR8",RC=$P($T(@R),";;",2)
- .. I RC=""!($P(RC,U)'=RCREF) S:$S(RCDATA'="":1,1:'$P(RC,U,2)) RCCT=RCCT+1,@RCMOUT@(RCCT)="NO DATA DEFINITION PC "_Z1_": "_RCDATA Q
- .. I RC'="" D
- ... N X,X1,Y
- ... S X1=$P(RC,U,4,99)
- ... I $G(RCFMT),X1'="" S X=RCDATA X X1 S RCDATA=Y ; Output transform
- ... S RC=$P(RC,U,3)
- ... Q:RC=""&(RCDATA="")
- ... S RCCT=RCCT+1,@RCMOUT@(RCCT)=$S(Z1=1:"<<<",1:"")_RC_": "_RCDATA_$S(Z1=1:">>>",1:"")
- I $G(RCFULL)'="" D FMTDSP(RCMOUT,RCFULL,$G(RCW))
- Q
- ;
- FMTDSP(RCMUN,RCMFO,RCW) ; Format the display data in array named in RCMUN into
- ; lines up to RCW characters wide RCMUN must be set up the same as the
- ; output of the DISP call above
- ; Returns array named in RCMFO with the last subscript being the line #
- ; Note @RCMFO is killed on entry to this call
- ; Default is 80 if RCW=0 or null
- N Z,RCLINE,RCCT,RCCT1,RCMID,RCD,RCSTART,RCDASH
- K @RCMFO
- S:'$G(RCW) RCW=80
- S RCDASH=" "_$TR($J("",RCW-2)," ","-")
- S (RCCT,RCCT1)=0,RCLINE="",RCMID=RCW\2-1
- S Z=0 F S Z=$O(@RCMUN@(Z)) Q:'Z S RCD=$G(@RCMUN@(Z)) D
- . I $E(RCD,1,3)="<<<" D Q ; New line needed ... record start
- .. I $L(RCLINE)>0 S RCCT=RCCT+1,@RCMFO@(RCCT)=RCLINE,RCLINE=""
- .. I $L(RCLINE)=0 D
- ... I Z>1 S RCCT=RCCT+1,@RCMFO@(RCCT)=" "
- ... I RCD["<<<Line Type: 01 " S RCCT1=RCCT1+1,RCCT=RCCT+1,@RCMFO@(RCCT)=RCDASH,RCCT=RCCT+1,@RCMFO@(RCCT)="*** EFT PAYMENT DETAIL START - PAYMENT SEQUENCE #"_RCCT1_"***",RCCT=RCCT+1,@RCMFO@(RCCT)=RCDASH
- ... I $L(RCD)>RCW D Q
- .... S RCSTART=1
- .... F S RCCT=RCCT+1,@RCMFO@(RCCT)=$E(RCD,RCSTART,RCSTART+RCW-1),RCSTART=RCSTART+RCW Q:RCSTART>$L(RCD)
- ... S RCCT=RCCT+1,@RCMFO@(RCCT)=RCD
- . ;
- . I $L(RCD)>RCW D Q ; Split line if greater than width given
- .. I $L(RCLINE) S RCCT=RCCT+1,@RCMFO@(RCCT)=RCLINE
- .. S RCSTART=1
- .. F S RCCT=RCCT+1,@RCMFO@(RCCT)=$E(RCD,RCSTART,RCSTART+RCW-1),RCSTART=RCSTART+RCW Q:RCSTART>$L(RCD)
- .. S RCLINE=""
- . I $L(RCLINE)=0 D Q ; Format left side of line
- .. S RCLINE=RCD
- .. ;
- .. I $L(RCLINE)>RCMID S RCCT=RCCT+1,@RCMFO@(RCCT)=RCLINE,RCLINE=""
- . ;
- . I (RCMID+$L(RCD)+1)>RCW D Q ; data too long for right side of line
- .. S RCCT=RCCT+1,@RCMFO@(RCCT)=RCLINE,RCLINE=""
- . S RCLINE=$E(RCLINE_$J("",RCMID),1,RCMID)_" "_RCD,RCCT=RCCT+1,@RCMFO@(RCCT)=RCLINE,RCLINE=""
- I $L(RCLINE) S RCCT=RCCT+1,@RCMFO@(RCCT)=RCLINE
- Q
- ;
- ;
- DISPADJ(RC3444,RCARRAY) ; Returns formatted lines of ERA level takeback data
- ; in array @RCARRAY@(n) where n=line #. Data is taken from entry
- ; # RC3444 in file 344.4, subfile 344.42
- N RCT,Z,Z0
- S RCT=0
- S Z=0 F S Z=$O(^RCY(344.4,RC3444,2,Z)) Q:'Z S Z0=$G(^(Z,0)) D
- . S RCT=RCT+1,@RCARRAY@(RCT)="REFERENCE #/BILL #: "_$P(Z0,U)
- . S RCT=RCT+1,@RCARRAY@(RCT)=" "_$E("ADJUSTMENT CODE: "_$P(Z0,U,2)_$J("",30),1,30)_"AMOUNT: "_$J($P(Z0,U,3),0,2)
- Q
- ;
- EFT ;;HEADER DATA
- ;;EFT^^Return Message ID^S Y=X_" (EFT HEADER DATA)"
- ;;EFT^^^S Y=""
- ;;EFT^^File Date^S Y=$$FDT^RCDPESR9(X)
- ;;EFT^^File Time^S Y=$E(X,1,2)-$S($E(X,1,2)>12:12,1:0)_":"_$E(X,3,4)_$S($E(X,1,2)=24:" AM",$E(X,1,2)>11:" PM",1:" AM")
- ;;EFT^1^
- ;;EFT^^Deposit #
- ;;EFT^^Deposit Date^S Y=$$FDT^RCDPESR9(X)
- ;;EFT^^Total Deposit Amount^S Y=$$ZERO^RCDPESR9(X,1)
- ;
- 01 ;;EFT DETAIL RECORD
- ;;01^^Line Type^S Y=X_" (PAYMENT IDENTIFICATION)"
- ;;01^^Trace #
- ;;01^^Date Claims Paid^S Y=$$FDT^RCDPESR9(X)
- ;;01^^TOTAL AMOUNT PAID^S Y=$$ZERO^RCDPESR9(X,1)
- ;;01^^Payer Name
- ;;01^^Payer ID
- ;;01^^Provider Tax ID Sent
- ;;01^^Tax ID correction Flag^S Y=$S(X="E":"CHANGED BY EPHRA",X="C":"DETERMINED FROM CLAIM DATA",X="":"NO CHANGE MADE",1:X)
- ;;01^^ACH Trace #
- ;
- --- Routine Detail --- with STRUCTURED ROUTINE LISTING ---[H[J[2J[HRCDPESR8 5872 printed Feb 18, 2025@23:11:52 Page 2
- RCDPESR8 ;ALB/TMK - EFT return file field captions ;09-SEP-2003
- +1 ;;4.5;Accounts Receivable;**173**;Mar 20, 1995
- +2 ;
- +3 ; Note: if the 835 EFT flat file changes, make the corresponding changes
- +4 ; in this routine.
- DISP(RCMIN,RCMOUT,RCFMT,RCFULL,RCW) ; Format display for 835 EFT return msg
- +1 ; RCMIN = the name of the array that contains the raw message data
- +2 ; The data is contained at the next level and the subscript is
- +3 ; numeric and greater than 0 OR the data can be at the
- +4 ; 0-node subsequent to the final subscript.
- +5 ; If the message array is a global ^TMP($J,"MSG",n), RCMIN
- +6 ; will equal "^TMP($J,""MSG"")" and the message text will be
- +7 ; in ^TMP($J,"MSG",1), ^TMP($J,"MSG",2), etc. OR
- +8 ; the message text can be defined at TMP($J,"MSG",1,0) ^...,2,0)
- +9 ; etc.
- +10 ; RCMOUT = the name of the array that should be returned. This array
- +11 ; will follow the same convention as the input array. The
- +12 ; array will be returned with a numeric final subscript. If
- +13 ; RCMOUT is passed as "^TMP($J,""MSG1"")", then the display
- +14 ; lines will be returned in ^TMP($J,"MSG1",1),
- +15 ; ^TMP($J,"MSG1",2), etc. Note the array RCMOUT is killed
- +16 ; on entry to this call
- +17 ; RCFMT = 0 or null if call should return raw data, 1 to execute the
- +18 ; transforms attached to the fields
- +19 ; RCFULL = the name of an array if the data should be returned in
- +20 ; this array, formatted into lines for display. If not sent,
- +21 ; only the display data by element is returned in RCMOUT. If
- +22 ; RCFULL is sent, the array is killed before populating it
- +23 ; RCW = max # of characters per line to return in array RCFULL
- +24 ;
- +25 NEW Z,Z0,Z1,R,RC,RCCT,RCREF,RCDATA,RCQ
- +26 SET RCCT=0
- KILL @RCMOUT
- +27 SET Z=0
- FOR
- SET Z=$ORDER(@RCMIN@(Z))
- if 'Z
- QUIT
- SET Z0=$SELECT($GET(@RCMIN@(Z))'="":@RCMIN@(Z),1:$GET(@RCMIN@(Z,0)))
- IF Z0'=""
- SET RCQ=0
- Begin DoDot:1
- +28 FOR Z1=1:1:$LENGTH(Z0,U)
- IF $PIECE(Z0,U,Z1)'=""
- Begin DoDot:2
- +29 SET RCDATA=$PIECE(Z0,U,Z1)
- +30 IF Z1=1
- Begin DoDot:3
- +31 SET RCREF=$SELECT(RCDATA'["EFT":RCDATA,1:"EFT")
- SET R=RCREF_"^RCDPESR8"
- SET RC=$PIECE($TEXT(@R),";;",2)
- +32 IF RC=""
- SET RCCT=RCCT+1
- SET @RCMOUT@(RCCT)="<<<INVALID LINE TYPE - RAW DATA IS:"
- SET RCCT=RCCT+1
- SET @RCMOUT@(RCCT)=Z0
- End DoDot:3
- if RCQ
- QUIT
- +33 if RCDATA=""
- QUIT
- +34 SET R=RCREF_"+"_Z1_"^RCDPESR8"
- SET RC=$PIECE($TEXT(@R),";;",2)
- +35 IF RC=""!($PIECE(RC,U)'=RCREF)
- if $SELECT(RCDATA'=""
- SET RCCT=RCCT+1
- SET @RCMOUT@(RCCT)="NO DATA DEFINITION PC "_Z1_": "_RCDATA
- QUIT
- +36 IF RC'=""
- Begin DoDot:3
- +37 NEW X,X1,Y
- +38 SET X1=$PIECE(RC,U,4,99)
- +39 ; Output transform
- IF $GET(RCFMT)
- IF X1'=""
- SET X=RCDATA
- XECUTE X1
- SET RCDATA=Y
- +40 SET RC=$PIECE(RC,U,3)
- +41 if RC=""&(RCDATA="")
- QUIT
- +42 SET RCCT=RCCT+1
- SET @RCMOUT@(RCCT)=$SELECT(Z1=1:"<<<",1:"")_RC_": "_RCDATA_$SELECT(Z1=1:">>>",1:"")
- End DoDot:3
- End DoDot:2
- if RCQ
- QUIT
- End DoDot:1
- +43 IF $GET(RCFULL)'=""
- DO FMTDSP(RCMOUT,RCFULL,$GET(RCW))
- +44 QUIT
- +45 ;
- FMTDSP(RCMUN,RCMFO,RCW) ; Format the display data in array named in RCMUN into
- +1 ; lines up to RCW characters wide RCMUN must be set up the same as the
- +2 ; output of the DISP call above
- +3 ; Returns array named in RCMFO with the last subscript being the line #
- +4 ; Note @RCMFO is killed on entry to this call
- +5 ; Default is 80 if RCW=0 or null
- +6 NEW Z,RCLINE,RCCT,RCCT1,RCMID,RCD,RCSTART,RCDASH
- +7 KILL @RCMFO
- +8 if '$GET(RCW)
- SET RCW=80
- +9 SET RCDASH=" "_$TRANSLATE($JUSTIFY("",RCW-2)," ","-")
- +10 SET (RCCT,RCCT1)=0
- SET RCLINE=""
- SET RCMID=RCW\2-1
- +11 SET Z=0
- FOR
- SET Z=$ORDER(@RCMUN@(Z))
- if 'Z
- QUIT
- SET RCD=$GET(@RCMUN@(Z))
- Begin DoDot:1
- +12 ; New line needed ... record start
- IF $EXTRACT(RCD,1,3)="<<<"
- Begin DoDot:2
- +13 IF $LENGTH(RCLINE)>0
- SET RCCT=RCCT+1
- SET @RCMFO@(RCCT)=RCLINE
- SET RCLINE=""
- +14 IF $LENGTH(RCLINE)=0
- Begin DoDot:3
- +15 IF Z>1
- SET RCCT=RCCT+1
- SET @RCMFO@(RCCT)=" "
- +16 IF RCD["<<<Line Type: 01 "
- SET RCCT1=RCCT1+1
- SET RCCT=RCCT+1
- SET @RCMFO@(RCCT)=RCDASH
- SET RCCT=RCCT+1
- SET @RCMFO@(RCCT)="*** EFT PAYMENT DETAIL START - PAYMENT SEQUENCE #"_RCCT1_"***"
- SET RCCT=RCCT+1
- SET @RCMFO@(RCCT)=RCDASH
- +17 IF $LENGTH(RCD)>RCW
- Begin DoDot:4
- +18 SET RCSTART=1
- +19 FOR
- SET RCCT=RCCT+1
- SET @RCMFO@(RCCT)=$EXTRACT(RCD,RCSTART,RCSTART+RCW-1)
- SET RCSTART=RCSTART+RCW
- if RCSTART>$LENGTH(RCD)
- QUIT
- End DoDot:4
- QUIT
- +20 SET RCCT=RCCT+1
- SET @RCMFO@(RCCT)=RCD
- End DoDot:3
- End DoDot:2
- QUIT
- +21 ;
- +22 ; Split line if greater than width given
- IF $LENGTH(RCD)>RCW
- Begin DoDot:2
- +23 IF $LENGTH(RCLINE)
- SET RCCT=RCCT+1
- SET @RCMFO@(RCCT)=RCLINE
- +24 SET RCSTART=1
- +25 FOR
- SET RCCT=RCCT+1
- SET @RCMFO@(RCCT)=$EXTRACT(RCD,RCSTART,RCSTART+RCW-1)
- SET RCSTART=RCSTART+RCW
- if RCSTART>$LENGTH(RCD)
- QUIT
- +26 SET RCLINE=""
- End DoDot:2
- QUIT
- +27 ; Format left side of line
- IF $LENGTH(RCLINE)=0
- Begin DoDot:2
- +28 SET RCLINE=RCD
- +29 ;
- +30 IF $LENGTH(RCLINE)>RCMID
- SET RCCT=RCCT+1
- SET @RCMFO@(RCCT)=RCLINE
- SET RCLINE=""
- End DoDot:2
- QUIT
- +31 ;
- +32 ; data too long for right side of line
- IF (RCMID+$LENGTH(RCD)+1)>RCW
- Begin DoDot:2
- +33 SET RCCT=RCCT+1
- SET @RCMFO@(RCCT)=RCLINE
- SET RCLINE=""
- End DoDot:2
- QUIT
- +34 SET RCLINE=$EXTRACT(RCLINE_$JUSTIFY("",RCMID),1,RCMID)_" "_RCD
- SET RCCT=RCCT+1
- SET @RCMFO@(RCCT)=RCLINE
- SET RCLINE=""
- End DoDot:1
- +35 IF $LENGTH(RCLINE)
- SET RCCT=RCCT+1
- SET @RCMFO@(RCCT)=RCLINE
- +36 QUIT
- +37 ;
- +38 ;
- DISPADJ(RC3444,RCARRAY) ; Returns formatted lines of ERA level takeback data
- +1 ; in array @RCARRAY@(n) where n=line #. Data is taken from entry
- +2 ; # RC3444 in file 344.4, subfile 344.42
- +3 NEW RCT,Z,Z0
- +4 SET RCT=0
- +5 SET Z=0
- FOR
- SET Z=$ORDER(^RCY(344.4,RC3444,2,Z))
- if 'Z
- QUIT
- SET Z0=$GET(^(Z,0))
- Begin DoDot:1
- +6 SET RCT=RCT+1
- SET @RCARRAY@(RCT)="REFERENCE #/BILL #: "_$PIECE(Z0,U)
- +7 SET RCT=RCT+1
- SET @RCARRAY@(RCT)=" "_$EXTRACT("ADJUSTMENT CODE: "_$PIECE(Z0,U,2)_$JUSTIFY("",30),1,30)_"AMOUNT: "_$JUSTIFY($PIECE(Z0,U,3),0,2)
- End DoDot:1
- +8 QUIT
- +9 ;
- EFT ;;HEADER DATA
- +1 ;;EFT^^Return Message ID^S Y=X_" (EFT HEADER DATA)"
- +2 ;;EFT^^^S Y=""
- +3 ;;EFT^^File Date^S Y=$$FDT^RCDPESR9(X)
- +4 ;;EFT^^File Time^S Y=$E(X,1,2)-$S($E(X,1,2)>12:12,1:0)_":"_$E(X,3,4)_$S($E(X,1,2)=24:" AM",$E(X,1,2)>11:" PM",1:" AM")
- +5 ;;EFT^1^
- +6 ;;EFT^^Deposit #
- +7 ;;EFT^^Deposit Date^S Y=$$FDT^RCDPESR9(X)
- +8 ;;EFT^^Total Deposit Amount^S Y=$$ZERO^RCDPESR9(X,1)
- +9 ;
- 01 ;;EFT DETAIL RECORD
- +1 ;;01^^Line Type^S Y=X_" (PAYMENT IDENTIFICATION)"
- +2 ;;01^^Trace #
- +3 ;;01^^Date Claims Paid^S Y=$$FDT^RCDPESR9(X)
- +4 ;;01^^TOTAL AMOUNT PAID^S Y=$$ZERO^RCDPESR9(X,1)
- +5 ;;01^^Payer Name
- +6 ;;01^^Payer ID
- +7 ;;01^^Provider Tax ID Sent
- +8 ;;01^^Tax ID correction Flag^S Y=$S(X="E":"CHANGED BY EPHRA",X="C":"DETERMINED FROM CLAIM DATA",X="":"NO CHANGE MADE",1:X)
- +9 ;;01^^ACH Trace #
- +10 ;