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

ABSPOSRY.m

Go to the documentation of this file.
ABSPOSRY  ;IHS/OIT/SCR - COLLECTION PRODUCTIVITY REPORT ;/IHS/OIT/CNI/RAN REWRITTEN TO NOT USE REPORT MASTER
 ;;1.0;PHARMACY POINT OF SALE;**38,40**;JUN 21, 2001;Build 38
 ; OPTION: ABSP RPT COLLECTION PRODUCT
 ; DISPLAYS COST AMOUNT RECOVERED FOR TRANSACTIONS THAT WERE REJECTED AT ONE TIME AND HAVE
 ; BECOME PAYABLE FOR A RANGE OF RELEASE DATES LIKE THE WRR, BUT ALSO INCLUDES
 ; REJECT CODES FROM THE MOST RECENT REJECTED TRANSACTION AND IDENTIFIES FIELDS AND MODIFIED
 ; VALUES THAT WERE USED TO MAKE THE CLAIM PAYABLE
EN ;  EP
 N ABSPQUIT,ABSPDONE,ABSPQUIT,ABSPPHRM,ABSPREJS,Y,X1,X2,ABSPEND,ABSPSTRT,ABSPDAT,ABSPPRXI,ABSPRJCT
 N ABSPPHMP,ABSPPHMI,ABSPDATP,ABSPDATI,ABSPGRNP,ABSPGRNI,ABSPUSR,ABSPCNT,STARTIME,STOPTIME,ABSPSDAT
 S ABSPDONE=0
 S ABSPQUIT=0
 F  Q:ABSPDONE=1  D
 .S ABSPSTRT=$$BDT()
 .I ABSPSTRT=-1 D
 ..S ABSPQUIT=1
 ..S ABSPDONE=1
 ..Q
 .Q:ABSPQUIT
 .S ABSPEND=$$EDT()
 .I ABSPEND=-1 D
 ..S ABSPQUIT=1
 ..S ABSPDONE=1
 ..Q
 .Q:ABSPQUIT
 .I ABSPSTRT<0 S ABSPDONE=1 Q
 .I ABSPEND<0 S ABSPDONE=1 Q
 .S X2=ABSPSTRT,X1=ABSPEND D ^%DTC
 .I X<0 D EN^DDIOL("Ending Date is BEFORE Beginning Date Please enter new dates","","!!,*7")
 .I X>=0 S ABSPDONE=1
 .Q
 Q:ABSPQUIT
 S ABSPPHRM=$$CLNC()
 Q:ABSPPHRM=-1
 S ABSPUSR=$$USER()
 D ^XBCLS
 ;D FIND(ABSPSTRT,ABSPEND,ABSPPHRM,.ABSPTMP) IHS/OIT/SCR 083109 patch 34
 S STARTIME=$H
 D FIND(ABSPSTRT,ABSPEND,ABSPPHRM,ABSPUSR,.ABSPREJS)
 S STOPTIME=$H
 S ^TMP("ABSPOSRY-RUNLOG",$J,STARTIME)=ABSPSTRT_"^"_ABSPEND_"^"_($P(STOPTIME,",",2)-$P(STARTIME,",",2))
 I $O(^TMP("ABSPOSRY",$J,""))="" D
 .W !,"      ****NO RECORDS FOUND FOR DATE RANGE***",!!
 .N DIR
 .S DIR(0)="Y"
 .S DIR("A")="PRINT ANYWAY"
 .D ^DIR
 .I Y'=1 S ABSPQUIT=1
 .Q
 Q:ABSPQUIT
 D DEVSEL
 D PRHDR(ABSPSTRT,ABSPEND)
 S ABSPSDAT=""
 S ABSPGRNP=0,ABSPGRNI=0 ;IHS/OIT/SCR 082709 patch 34
 F  S ABSPSDAT=$O(^TMP("ABSPOSRY",$J,ABSPSDAT)) Q:(ABSPSDAT="")!(ABSPQUIT)  D
 .M ABSPTMP(ABSPSDAT)=^TMP("ABSPOSRY",$J,ABSPSDAT)
 .S ABSPDATP=0,ABSPDATI=0 ;IHS/OIT/SCR 082709 patch 34
 .S ABSPPHRM=""
 .S Y=$P(ABSPSDAT,".")
 .D DD^%DT
 .;IHS/OIT/CNI/RAN 05042010 patch 38 - When printing to screen, use paging
 .S ABSPQUIT=$$WRITE^ABSPOSUU("!!?10,""RELEASED DATE: ""_Y")
 .Q:ABSPQUIT
 .F  S ABSPPHRM=$O(ABSPTMP(ABSPSDAT,ABSPPHRM)) Q:(ABSPPHRM="")!(ABSPQUIT)  D
 ..S ABSPPHMP=0,ABSPPHMI=0
 ..;IHS/OIT/CNI/RAN 05042010 patch 39 - When printing to screen, use paging
 ..S ABSPQUIT=$$WRITE^ABSPOSUU("!?15,""PHARMACY: ""_$P($G(^ABSP(9002313.56,ABSPPHRM,0)),U,1)")
 ..Q:ABSPQUIT
 ..I ABSPUSR="ALL" S ABSPQUIT=$$WRITE^ABSPOSUU("!,?19,""USER: ALL""")
 ..Q:ABSPQUIT
 ..I ABSPUSR'="ALL" S ABSPQUIT=$$WRITE^ABSPOSUU("!,?19,""USER: ""_$P($G(^VA(200,ABSPUSR,0)),U,1)")
 ..Q:ABSPQUIT
 ..S ABSPPRXI=""
 ..F  S ABSPPRXI=$O(ABSPTMP(ABSPSDAT,ABSPPHRM,ABSPPRXI)) Q:(ABSPPRXI="")!(ABSPQUIT)  D
 ...;IHS/OIT/CNI/RAN 05042010 patch 38 - When printing to screen, use paging
 ...S ABSPQUIT=$$WRITE^ABSPOSUU("!!,""RX #/REFILL: `""_ABSPPRXI_""/""_$P(ABSPTMP(ABSPSDAT,ABSPPHRM,ABSPPRXI),U,1)")
 ...Q:ABSPQUIT
 ...S Y=$P(ABSPTMP(ABSPSDAT,ABSPPHRM,ABSPPRXI),"^",2) D DD^%DT
 ...;IHS/OIT/CNI/RAN 05042010 patch 38 - When printing to screen, use paging
 ...S ABSPQUIT=$$WRITE^ABSPOSUU("!?5,""TRANSACTION DATE: ""_Y,?40,""RECOVERED BY: ""_$P(ABSPTMP(ABSPSDAT,ABSPPHRM,ABSPPRXI),U,5)")
 ...Q:ABSPQUIT
 ...;W !?0,"TOTAL PRICE: "_$P(ABSPTMP(ABSPSDAT,ABSPPHRM,ABSPPRXI),"^",3),?25,"PAID BY INSURER: "_$P(ABSPTMP(ABSPSDAT,ABSPPHRM,ABSPPRXI),"^",4) ;IHS/OIT/SCR 122909 patch 36
 ...;IHS/OIT/CNI/RAN 05042010 patch 38 - When printing to screen, use paging
 ...S ABSPQUIT=$$WRITE^ABSPOSUU("!?5,""TOTAL PRICE: ""_$FNUMBER($P(ABSPTMP(ABSPSDAT,ABSPPHRM,ABSPPRXI),U,3),"","",2),?40,""PAID BY INSURER: ""_$FNUMBER($P(ABSPTMP(ABSPSDAT,ABSPPHRM,ABSPPRXI),U,4),"","",2)")
 ...Q:ABSPQUIT
 ...S ABSPPHMP=ABSPPHMP+$P(ABSPTMP(ABSPSDAT,ABSPPHRM,ABSPPRXI),"^",3)
 ...S ABSPPHMI=ABSPPHMI+$P(ABSPTMP(ABSPSDAT,ABSPPHRM,ABSPPRXI),"^",4)
 ...;PRINT OUT REJECTION REASONS FOR THE REJECTION BEFORE THE PAID TXN
 ...S ABSPCNT=0
 ...F  S ABSPCNT=$O(ABSPRJCT(ABSPSDAT,ABSPPHRM,ABSPPRXI,ABSPCNT)) Q:(ABSPCNT="")!(ABSPQUIT)  D
 ....;IHS/OIT/CNI/RAN 05042010 patch 38 - When printing to screen, use paging
 ....S ABSPQUIT=$$WRITE^ABSPOSUU("!?15,ABSPCNT_"". REJECTION CODE: ""_ABSPRJCT(ABSPSDAT,ABSPPHRM,ABSPPRXI,ABSPCNT,""CODE"")")
 ....Q:ABSPQUIT
 ....S ABSPQUIT=$$WRITE^ABSPOSUU("?20,""REASON: ""_ABSPRJCT(ABSPSDAT,ABSPPHRM,ABSPPRXI,ABSPCNT,""REASON"")")
 ....Q:ABSPQUIT
 ...Q:ABSPQUIT
 ...;PRINT OUT FIELDS AND VALUES OF ENTRIES IN ABSP NCPDP OVERRIDE FILE FOR THIS TXN
 ...;W !!
 ...;S ABSPCNT=0
 ...;F  S ABSPCNT=$O(ABSPORID(ABSPSDAT,ABSPPRM,ATSPPRXI,ABSPCNT)) Q:ABSPCNT=""  D
 ...;.W !,?5,"MOST RECENT OVERIDE FIELD: "_ABSPORID(ABSPSDAT,ABSPPRM,ATSPPRXI,ABSPCNT,"FIELD")
 ...;.W !,?15,"CHANGED TO: "_ABSPORID(ABSPSDAT,ABSPPRM,ATSPPRXI,ABSPCNT,"NEW VALUE")
 ..Q:ABSPQUIT
 ..;IHS/OIT/CNI/RAN 05042010 patch 38 - When printing to screen, use paging
 ..S ABSPQUIT=$$WRITE^ABSPOSUU("!!,""PHARMACY TOTAL ""_$FNUMBER(ABSPPHMP,"","",2),?40,""INSURER PAID: ""_$FNUMBER(ABSPPHMI,"","",2)")
 ..Q:ABSPQUIT
 ..S ABSPDATP=ABSPDATP+ABSPPHMP
 ..S ABSPDATI=ABSPDATI+ABSPPHMI
 ..S ABSPQUIT=$$WRITE^ABSPOSUU("!!,""DATE TOTAL: ""_$FNUMBER(ABSPPHMP,"","",2),?40,""TOTAL PAID BY INSURER FOR DATE: ""_$FNUMBER(ABSPPHMI,"","",2)")
 ..Q:ABSPQUIT
 ..S ABSPGRNP=ABSPGRNP+ABSPDATP
 ..S ABSPGRNI=ABSPGRNI+ABSPDATI
 .K ABSPTMP(ABSPSDAT)
 .Q:ABSPQUIT
 I ABSPQUIT D ZEND Q
 ;W !!,"GRAND TOTAL PRICE: "_ABSPGRNP,?25,"GRAND TOTAL PAID BY INSURER :"_ABSPGRNI
 ;IHS/OIT/CNI/RAN 05042010 patch 38 - When printing to screen, use paging
 S ABSPQUIT=$$WRITE^ABSPOSUU("!!,""GRAND TOTAL: ""_$FNUMBER(ABSPGRNP,"","",2),?40,""GRAND TOTAL INSURER PAID: ""_$FNUMBER(ABSPGRNI,"","",2)")
 D ZEND   ;IHS/OIT/SCR 1/4/09 patch 36 close the printer device
 Q
CLNC() ; PICK WHICH OR ALL CLINIC PHARMACIES
 N DIC,X,Y,ABSPPHRM
 S DIC="^ABSP(9002313.56,"
 S DIC(0)="AEMQVZ"
 S DIC("A")="Please Select a Pharmacy or leave blank for ALL:  "
 D ^DIC K DIC
 I X["^" Q -1
 I Y=-1 S ABSPPHRM="ALL"
 I Y>-1 S ABSPPHRM=$P(Y,"^",1)
 Q ABSPPHRM
USER() ; PICK WHICH OR ALL NEW PESRSON
 ;IHS/OIT/SCR 083109 patch 34
 N DIC,X,Y,ABSPUSER
 S DIC="^VA(200,"
 S DIC(0)="AEMQVZ"
 S DIC("A")="Please Select a User or leave blank for ALL:  "
 D ^DIC K DIC
 I X["^" Q -1
 I Y=-1 S ABSPUSER="ALL"
 I Y>-1 S ABSPUSER=$P(Y,"^",1)
 Q ABSPUSER
DEVSEL ; SELECT DEVICE
 N ABSPSTOP,POP
 S ABSPSTOP=0
 D ^%ZIS
 I POP D
 .D ^%ZIS
 .Q
 I $D(DUOUT) D
  .D ZEND
  .S ABSPSTOP=1
  .Q
 Q:ABSPSTOP
 I POP D
 .W "DEVICE UNAVAILABLE" G DEVSEL
 Q
FIND(ABSPSTRT,ABSPEND,ABSPPHRM,ABSPUSR,ABSPREJS) ;  FIND PAYABLE CLAIMS IN A DATE RANGE, AND THEN DETERMINE IF THEY WERE REJECTED AT ONE TIME...
 N ABSPDONE,ABSPRDT,ABSPTDAT,ABSPTRXN,ABSPPHM1,APSPTRXI,ABSPRICE,ABSPFND,ABSPRXI,ABSPTRXR,ABSPRXN,ABSPIRME,ABSPPRMI
 N ABSPUSR1,ABSPUSRN,ABSPRESP,ABSPPSTN,ABSPCNT,ABSP1LTP,ABSPRWR,ABSPTRN1,ABSPFND,ABSPCLMI,ABSPCLMS,ABSPIRMI,ABSPTRNS
 S ABSPDONE=0
 S ABSPRDT=ABSPSTRT
 S ABSPEND=ABSPEND_".99999999"
 S ABSPDONE=0
 F  S ABSPRDT=$O(^PSRX("AL",ABSPRDT)) Q:(ABSPRDT="")!(ABSPDONE)!(+ABSPRDT=0)  D
 .I ABSPRDT>ABSPEND S ABSPDONE=1 Q
 .;S ^TMP("ABSPOSRY",$J,$P(ABSPRDT,"."))=""
 .S ABSPPRMI=""
 .F  S ABSPPRMI=$O(^PSRX("AL",ABSPRDT,ABSPPRMI)) Q:ABSPPRMI=""  D
 ..S ABSPFND=0
 ..S ABSPIRMI=ABSPPRMI
 ..S ABSPIRME=ABSPPRMI_".99999999"
 ..F  S ABSPIRMI=$O(^ABSPTL("B",ABSPIRMI)) Q:(ABSPIRMI>ABSPIRME)!(ABSPIRMI="")!(ABSPFND)  D
 ...Q:+$E($P(ABSPIRMI,".",2))>1   ;ONLY PROCESS PRIMARY NOT SECONDARY OR TERTIARY
 ...S ABSPTRNS=""
 ...F  S ABSPTRNS=$O(^ABSPTL("B",ABSPIRMI,ABSPTRNS),-1) Q:(ABSPTRNS="")!(ABSPFND)  D
 ....; WE ONLY WANT PAID CLAIMS HERE
 ....S ABSPRWR=$$GET1^DIQ(9002313.57,ABSPTRNS_",","RESULT WITH REVERSAL")
 ....S ABSP1LTP=^ABSPTL(ABSPTRNS,1)
 ....S ABSPUSR1=$P(ABSP1LTP,U,17)
 ....I (ABSPUSR'="ALL"),(ABSPUSR1'=ABSPUSR) Q   ; NOT SELECTED USER
 ....S ABSPPHM1=$P(ABSP1LTP,U,7)    ; SET PHARMACY
 ....I (ABSPPHRM'="ALL")&&(ABSPPHM1'=ABSPPHRM) Q   ; NOT SELECTED PHARMACY
 ....I ABSPPHM1="" Q
 ....I ABSPRWR'="E PAYABLE" Q
 ....;NOW WE HAVE A PAYABLE CLAIM...BUT IT ONLY BELONGS ON THIS REPORT IF IT HAS BEEN REJECTED BEFORE
 ....;SO....WE HAVE TO  LOOK AT THE LOG OF TRANSACTIONS FOR THIS PRESCRIPTION BEFORE THE ONE
 ....;WE HAVE IN OUR HANDS...IF THAT ONE WAS REJECTED, PUT THIS INFO ON THE REPORT
 ....S ABSPTRN1=ABSPTRNS
 ....F  S ABSPTRN1=$O(^ABSPTL("B",ABSPIRMI,ABSPTRN1),-1) Q:(ABSPTRN1="")!(ABSPFND)  D
 .....S ABSPRWR=$$GET1^DIQ(9002313.57,ABSPTRN1_",","RESULT WITH REVERSAL")
 .....I (ABSPRWR="E REJECTED")!(ABSPRWR="PAPER") D
 ......S ABSPFND=1
 ......S ABSPTLTP=^ABSPTL(ABSPTRNS,0)
 ......S ABSPRSMI=$P(ABSPTLTP,U,5) ;Response reference
 ......S ABSPCLMI=$P(ABSPTLTP,U,4) ;Claim Reference
 ......Q:(ABSPRSMI="")!(ABSPCLMI="")
 ......S DO=$P(ABSPTLTP,U,9)  ;Position on claim(and response)
 ......;I '$D(^ABSPR(ABSPRSMI,1000,DO)) S DO=$$GETDO^ZRANOSR5(ABSPRSMI,$P(ABSPIRMI,".")) ;IHS/OIT/CNI/SCR patch 40 - commentd out call to non-namespaced routine
 ......Q:DO=""
 ......Q:$D(ABSPCLMS(ABSPIRMI))
 ......S ABSPTINS=$P(ABSP1LTP,U,6)
 ......S ABSPTRXR=$P(ABSP1LTP,U,1)
 ......S ABSPTDAT=$P($P(ABSPTLTP,U,8),".",1)
 ......S ABSPRICE=$P(^ABSPTL(ABSPTRNS,5),U,5)  ;TOTAL PRICE
 ......S ABSPPAID=$$509^ABSPOS03(ABSPRSMI,DO)
 ......S ABSPUSRI=$P(ABSPTLTP,U,17) ;USER LAST UPDATED - IHS/OIT/SCR 082709 patch 34
 ......S ABSPUSRN=""
 ......S:ABSPUSRI>0 ABSPUSRN=$P($G(^VA(200,ABSPUSRI,0)),"^",1)
 ......;IHS/OIT/SCR 082109 START changes patch 34
 ......S ABSPCLMS(ABSPIRMI)=""
 ......;S ^TMP("CPR-RPT",$J,ABSPRDT,ABSPPHM1,ABSPPRMI)=ABSPTRXR_"^"_ABSPTDAT_"^"_ABSPRICE_"^"_ABSPPAID_"^"_ABSPUSRN
 ......S ^TMP("ABSPOSRY",$J,ABSPRDT,ABSPPHM1,ABSPPRMI)=ABSPTRXR_"^"_ABSPTDAT_"^"_ABSPRICE_"^"_ABSPPAID_"^"_ABSPUSRN
 ......;This populates ABSPREJS(n) with code:text format of each rejection for this position in this response
 ......S ABSPCNT=0
 ......S ABSPRSP=$P(^ABSPTL(ABSPTRN1,0),U,5)  ;POINTER TO RESPONSE FILE for REJECTED transaction
 ......S ABSPSTN=$P(^ABSPTL(ABSPTRN1,0),U,9)  ;POSITION IN CLAIM for REJECTED transaction
 ......I $G(ABSPRSP)'="" D
 .......;FOR EACH REJECTION CODE AND REASON associated to the REJECTED TRANSACTION, add it to an array
 .......;BREAK
 .......K ABSPREJS
 .......D REJTEXT^ABSPOS03(ABSPRSP,ABSPSTN,.ABSPREJS)
 .......F  S ABSPCNT=$O(ABSPREJS(ABSPCNT)) Q:(ABSPCNT="")  D
 ........S ABSPRJCT(ABSPRDT,ABSPPHM1,ABSPPRMI,ABSPCNT,"CODE")=$P(ABSPREJS(ABSPCNT),":",1)
 ........S ABSPRJCT(ABSPRDT,ABSPPHM1,ABSPPRMI,ABSPCNT,"REASON")=$P(ABSPREJS(ABSPCNT),":",2)
 ....I 'ABSPFND S ABSPFND=1  ;DONT DO THIS HOLE LOOP AGAIN FOR THE ABSPTRNS
 Q
PRHDR(ABSPSTRT,ABSPEND) ; PRINT HEADER
 N ABSPFEDT,ABSPFBDT
 W @IOF
 S Y=ABSPSTRT
 D DD^%DT
 S ABSPFBDT=Y
 S Y=ABSPEND
 D DD^%DT
 S ABSPFEDT=Y
 W !,?19,"Pharmacy Point of Sale Collection Productivity Report"
 W !?22,"From "_ABSPFBDT_" TO "_ABSPFEDT
 Q
BDT()  ; ENTER BEGINING DATE
 N ABSPBDT,DIR,X1,X
 W !
 K DIR
 S DIR(0)="DEX"
 S DIR("A")="Enter Beginning Prescription Release Date"
 D ^DIR
 I $D(DIRUT) Q -1
 S ABSPBDT=+Y
 S X1=ABSPBDT D C^%DTC
 Q X
EDT()  ; ENTER END DATE
 N ABSPEDT,DIR,X1,X
 W !
 K DIR
 S DIR(0)="DEX"
 S DIR("A")="Enter Ending Prescription Release Date"
 D ^DIR
 I $D(DIRUT) Q -1
 S ABSPEDT=+Y
 S X1=ABSPEDT D C^%DTC
 Q X
ZEND   ;Close the device that was opened
 ;K ^TMP("CPR-RPT",$J)
 K ^TMP("ABSPOSRY",$J)
 D ^%ZISC
 Q