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

ABSPER20.m

Go to the documentation of this file.
  1. ABSPER20 ; IHS/FCS/DRS - Payable claims report ; [ 09/12/2002 10:01 AM ]
  1. ;;1.0;PHARMACY POINT OF SALE;**3**;JUN 21, 2001;Build 38
  1. ;----------------------------------------------------------------------
  1. ;----------------------------------------------------------------------
  1. ;Pharmacy Claim Payable Report (by Tran Date, Sorted by Insurer)
  1. ;----------------------------------------------------------------------
  1. EN ; option ABSP PAYABLE REPORT
  1. N SCRNTXT,SDATE,EDATE,ANS,XBRP,J,XBNS,RPTNAME,PREFIXES
  1. ;
  1. D DT^DICRW
  1. D HOME^%ZIS
  1. ;
  1. S RPTNAME="RX Payable RPT"
  1. S SCRNTXT="Pharmacy Claim Payable Report (by Transmission Date)"
  1. D WHEADER^ABSPOSU9(SCRNTXT,IOF,IOM)
  1. W !
  1. ;
  1. S PREFIXES=$$PREFIXES^ABSPER10 Q:"^"[PREFIXES ; report which claims?
  1. ;
  1. ;Start Date Prompt
  1. S (SDATE,EDATE)=""
  1. LP1 S ANS=$$DATE^ABSPOSU1("Transmission - Start Date: ",SDATE,1,"","DT","E",DTIME)
  1. G:ANS=-1!(ANS="^")!(ANS="^^")!(ANS="") EXIT
  1. S SDATE=ANS
  1. ;
  1. ;End Date Prompt
  1. LP2 S ANS=$$DATE^ABSPOSU1("Transmission - End Date: ",EDATE,1,SDATE,"DT","E",DTIME)
  1. I ANS="^" D WHEADER^ABSPOSU9(SCRNTXT,IOF,IOM) G LP1
  1. G:ANS=-1!(ANS="^^")!(ANS="") EXIT
  1. S EDATE=ANS
  1. ;
  1. S XBRP="RPT^ABSPER20"
  1. F J="SDATE","EDATE","SCRNTXT","RPTNAME","PREFIXES" S XBNS(J)=""
  1. D ^XBDBQUE
  1. EXIT Q
  1. ;----------------------------------------------------------------------
  1. RPT N PAGE
  1. U IO
  1. K ^TMP($J,RPTNAME)
  1. D SET
  1. D PRINT^ABSPER2A
  1. D ^%ZISC
  1. K ^TMP($J,RPTNAME)
  1. Q
  1. ;----------------------------------------------------------------------
  1. SET N DATE1,DATE2,TDATE,RESPIEN,MEDIEN,CLAIMIEN,DATA,CLAIMID,INSIEN
  1. N INSNAME,INSHELP,BITEMIEN,PCN,PATNAME,NDC
  1. N INGRPD,DISPPD,TOTPD,PATPAY,REMDED,PSIEN S PSIEN=1
  1. ;
  1. S DATE1=$$CDTFM^ABSPOSU1(SDATE,-1)_".245959"
  1. S DATE2=EDATE_".245959"
  1. K ^TMP($J,RPTNAME)
  1. Q:IOM<132
  1. ;
  1. ;Loop through "AE" x-ref and gather responses within date range
  1. S TDATE=DATE1
  1. F D Q:TDATE=""!(TDATE>DATE2)
  1. .S TDATE=$O(^ABSPR("AE",TDATE))
  1. .Q:TDATE=""!(TDATE>DATE2)
  1. .S RESPIEN=0
  1. .F D Q:'+RESPIEN
  1. ..S RESPIEN=$O(^ABSPR("AE",TDATE,RESPIEN))
  1. ..Q:'+RESPIEN
  1. ..;Determine if response has paid items
  1. ..Q:'$D(^ABSPR("AC","P",RESPIEN))
  1. ..;Loop through payable index and get medication records
  1. ..S MEDIEN=0
  1. ..F D Q:'MEDIEN
  1. ...S MEDIEN=$O(^ABSPR("AC","P",RESPIEN,MEDIEN))
  1. ...Q:'+MEDIEN
  1. ...;Get needed data from 9002313.02 file
  1. ...S CLAIMIEN=$P($G(^ABSPR(RESPIEN,0)),U,1)
  1. ...Q:CLAIMIEN=""
  1. ...Q:'$D(^ABSPC(CLAIMIEN,0))
  1. ...S DATA=$G(^ABSPC(CLAIMIEN,0))
  1. ...S CLAIMID=$P(DATA,U,1)
  1. ...I PREFIXES]"",PREFIXES'[$E(CLAIMID) Q ; but do we want this claim?
  1. ...S INSIEN=$P(DATA,U,2)
  1. ...Q:'+INSIEN
  1. ...S INSNAME=$P($G(^AUTNINS(INSIEN,0)),U,1)
  1. ...Q:INSNAME=""
  1. ...S INSHELP=$$INSHELP^ABSPER10(INSIEN)
  1. ...S BITEMIEN=$P(DATA,U,3)
  1. ...S PCN=$S(BITEMIEN="":"",$P($G(^ABSP(9002313.99,+$G(PSIEN),2)),U,1)="VCN":$P($G(^ABSBITMS(9002302,BITEMIEN,"VCN")),U,1),1:$P($G(^ABSBITMS(9002302,BITEMIEN,0)),U,1)) ;either PCN or VCN displays
  1. ...I PCN="" S PCN="RX# "_$$RXNUM
  1. ...S PATNAME=$P($G(^ABSPC(CLAIMIEN,1)),U,1)
  1. ...S DATA=$G(^ABSPC(CLAIMIEN,400,MEDIEN,400))
  1. ...S NDC=$P(DATA,U,7)
  1. ...;Get and format fields from 9002313.03 for Medication record
  1. ...S DATA=$G(^ABSPR(RESPIEN,1000,MEDIEN,500))
  1. ...; But if the claim has been successfully reversed, rig $ fields
  1. ...I $$REVERSED(RESPIEN,MEDIEN) D
  1. ....S (INGRPD,DISPPD,PATPAY,REMDED)=""
  1. ....S TOTPD="REVERSED"
  1. ...E D
  1. ....S INGRPD=$J($$DFF2EXT^ABSPECFM($P(DATA,U,6)),7,2)
  1. ....S DISPPD=$J($$DFF2EXT^ABSPECFM($P(DATA,U,7)),7,2)
  1. ....S TOTPD=$J($$DFF2EXT^ABSPECFM($P(DATA,U,9)),9,2)
  1. ....S PATPAY=$J($$DFF2EXT^ABSPECFM($P(DATA,U,5)),9,2)
  1. ....S REMDED=$J($$DFF2EXT^ABSPECFM($P(DATA,U,13)),11,2)
  1. ...S ^TMP($J,RPTNAME,INSNAME,TDATE,RESPIEN,MEDIEN)=CLAIMID_U_PCN_U_PATNAME_U_NDC_U_INGRPD_U_DISPPD_U_TOTPD_U_PATPAY_U_REMDED
  1. ...S ^TMP($J,RPTNAME,INSNAME)=INSHELP
  1. Q
  1. RXNUM() ;EP - from ABSPER10,ABSPER30
  1. ; try to return external #; try to append refill # if nonzero
  1. ; given CLAIMIEN, MEDIEN pointers into ^ABSPC
  1. N X S X=+$P($G(^ABSPC(CLAIMIEN,400,MEDIEN,400)),U,2)
  1. I 'X Q ""
  1. I $D(^PSRX(X)) S X=$P(^PSRX(X,0),U)
  1. E S X="`"_X
  1. N Y S Y=+$P($G(^ABSPC(CLAIMIEN,400,MEDIEN,400)),U,3)
  1. I Y S X=X_"r"_+Y
  1. Q X
  1. REVERSED(RESPIEN,MEDIEN) ; $$ = 1 if yes, = 0 if no
  1. ; It would be nice to use the numbering scheme - of attaching "R"
  1. ; to the CLAIMID - but we have a problem - what if you want to
  1. ; reverse two paid claims in the same CLAIMID. That will have to
  1. ; be fixed, to append R and and the MEDIEN. Separate issue, someday.
  1. ; F now, go through the POS file - if you find a successful
  1. ; reversal with a reversal response higher than RESPIEN, then
  1. ; it must have been reversed.
  1. N REVERSED S REVERSED=0
  1. N RXI S RXI=0
  1. N STOP S STOP=0
  1. F S RXI=$O(^ABSPT("AF",RESPIEN,RXI)) Q:RXI="" D Q:STOP
  1. . I $P(^ABSPT(RXI,0),U,9)=MEDIEN S STOP=1 Q
  1. I RXI D ; this prescription has this RESPIEN and position = MEDIEN
  1. . I '$G(^ABSPT(RXI,4)) Q ; no reversal activity
  1. . ; Make sure the reversal has a response & it's earlier than
  1. . ; this paid response:
  1. . I $P(^ABSPT(RXI,4),U,2)'>RESPIEN Q
  1. . N X S X=$$RXPAID^ABSPOSNC(RXI) ; convenient routine to query this
  1. . I $P(X,U,3)="Accepted reversal" S REVERSED=1
  1. Q REVERSED