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

PSUUD2.m

Go to the documentation of this file.
  1. PSUUD2 ;BIR/TJH - PBM UNIT DOSE SUBROUTINES & FUNCTIONS ;24 DEC 2003
  1. ;;4.0;PHARMACY BENEFITS MANAGEMENT;;MARCH, 2005
  1. ;DBIA(s)
  1. ; Reference to file #55 supported by DBIA 2497
  1. ;
  1. DISAMT ; precompute dispensed amounts by drug
  1. N DADATE,DADRUG,DAMT,DAHOW
  1. K PSUDAS ; initialize Dispensed Amount Summary array
  1. ;*34 |=>
  1. S PSUXX=PSUSDT\1-.0001
  1. DAL134 S PSUXX=$O(^PS(55,PSPAT,5,PSDOSE,11,"B",PSUXX))
  1. G:'PSUXX DISAMTQ
  1. I PSUXX>PSUTEDT G DISAMTQ
  1. S DISPDA=0
  1. F S DISPDA=$O(^PS(55,PSPAT,5,PSDOSE,11,"B",PSUXX,DISPDA)) Q:DISPDA'>0 D
  1. . K DISPI
  1. . D GETS^PSUTL(55.0611,"PSPAT,PSDOSE,DISPDA",".01;.02;.03;.05","DISPI","I")
  1. . D MOVEI^PSUTL("DISPI")
  1. . S DADATE=DISPI(.01)
  1. . S DADRUG=$G(DISPI(.02)) G:DADRUG="" DAL134
  1. . S DAMT=$G(DISPI(.03))
  1. . S DAHOW=$G(DISPI(.05))
  1. . S PSUDAS(DADRUG)=$G(PSUDAS(DADRUG))+$S(DAHOW=4:DAMT*-1,1:DAMT) ;net
  1. . I DAHOW'=4 D
  1. ..S PSUDAS("DISP",DADRUG)=$G(PSUDAS("DISP",DADRUG))+$G(DAMT) ;Dispense
  1. . I DAHOW=4 D
  1. ..S PSUDAS("RET",DADRUG)=$G(PSUDAS("RET",DADRUG))+$G(DAMT) ;Return
  1. . S PSUDAS("NET",DADRUG)=$G(PSUDAS("DISP",DADRUG))-$G(PSUDAS("RET",DADRUG)) ;Net dispensed
  1. .;
  1. . K DISPI
  1. G DAL134
  1. ;*34 <=|
  1. DISAMTQ K ^TMP($J,"PSUTA") Q ; exit point from DISAMT subroutine
  1. ;
  1. SETUP ; set up some variables required later
  1. D SECTN^PSUTL1
  1. D DT^DILF("E",PSUSDT,.EXTD)
  1. S PSURP("START")=EXTD(0)
  1. D DT^DILF("E",PSUEDT,.EXTD)
  1. S PSURP("END")=EXTD(0)
  1. S X1=PSUSDT,X2=-101
  1. D C^%DTC K %,%H,%T
  1. S PSDATE=X
  1. S PSUEDTIM=PSUEDT+.2400
  1. S PSUJOB=$G(PSUJOB,$J),PSUUDSUB="PSUUD_"_PSUJOB
  1. K ^XTMP(PSUUDSUB)
  1. K PSUDTLRN
  1. S X1=DT,X2=3 D C^%DTC
  1. S ^XTMP(PSUUDSUB,0)=X_U_DT_U_"PSU PBM UNIT DOSE STATISTICAL DATA"
  1. SETUPQ Q ; exit from SETUP
  1. ;
  1. TMPUD ; store Unit Dose data in first half of record, pieces 2-7
  1. S DLM="^",REC1="^"
  1. S REC1=REC1_$TR(PSUFACN,"^","'")_DLM_$TR(PSUDOSE(10),"^","'")_DLM_$TR(PSUDOSE(.01),"^","'")
  1. S REC1=REC1_DLM_PSUSSN_DLM_$TR(PSUDOSE(26),"^","'")_DLM_PSUVSSN ;_DLM_$TR(PSUVCL,"^","'")
  1. ;S REC1=REC1_DLM_$TR(PSUVSV,"^","'")_DLM_$TR(PSUVS1,"^","'")_DLM_$TR(PSUVS2,"^","'")
  1. TMPUDQ Q ; exit from TMPUD
  1. ;
  1. TMPDD ; create Dispense Drug record and store in ^XTMP
  1. N PSUDAMT S PSUDAMT=$G(PSUDAS(PSUDISD(.01)))
  1. Q:'PSUDAMT ; per Lina B., do not store if dispensed amount=0
  1. S DLM="^",REC2="",PSUDTLRN(PSUFACN)=+$G(PSUDTLRN(PSUFACN))+1
  1. S REC2=REC1_DLM_$TR(PSUDRUG(21),"^","'")_DLM_$TR(PSUDRUG(2),"^","'")_DLM
  1. S REC2=REC2_$TR(PSUDRUG(.01),"^","'")_DLM_$TR(PSUDRUG(31),"^","'")_DLM
  1. S REC2=REC2_PSUDRUG(51)_DLM_PSUDNFI_DLM_PSUDNFR_DLM
  1. S REC2=REC2_$TR(PSUDISD(.02),"^","'")_DLM_$TR(PSUDRUG(14.5),"^","'")_DLM
  1. S REC2=REC2_$TR(PSUDRUG(16),"^","'")_DLM_PSUDAMT_DLM_PSUDRUG(52)_DLM_PSUDRUG(3)_"^"
  1. ;VMP OIFO BAY PINES;ELR;PSU*3.0*24
  1. D ICN^PSUV1 S PSUPICN=$G(^XTMP("PSU_"_PSUJOB,"PSUPICN"))
  1. S REC2=REC2_$G(PSUPICN)_DLM_$G(PSUDOSE(1))_DLM_PSUUDST_DLM
  1. ;
  1. ;ADD AMIS DATA
  1. N PSUDSP,PSURET
  1. S PSUDSP=$G(PSUDAS("DISP",PSUDISD(.01)))
  1. S ^XTMP(PSUUDSUB,"DISP",PSUFACN)=PSUDSP+$G(^XTMP(PSUUDSUB,"DISP",PSUFACN))
  1. S PSURET=$G(PSUDAS("RET",PSUDISD(.01)))
  1. S ^XTMP(PSUUDSUB,"RET",PSUFACN)=PSURET+$G(^XTMP(PSUUDSUB,"RET",PSUFACN))
  1. S:'$G(PSURET) PSURET=0
  1. S REC2=REC2_PSUDSP_DLM_PSURET_DLM
  1. ;END AMIS DATA
  1. ;
  1. S ^XTMP(PSUUDSUB,"DETAIL",PSUFACN,PSUDTLRN(PSUFACN))=REC2
  1. ; increase Unit Dose and Patient counts if not already counted
  1. I '$D(^XTMP(PSUUDSUB,"ORD",PSUFACN,PSUDOSE(.01))) D
  1. .S ^XTMP(PSUUDSUB,"ORD",PSUFACN,PSUDOSE(.01))=""
  1. .S ^XTMP(PSUUDSUB,"ORD",PSUFACN)=1+$G(^XTMP(PSUUDSUB,"ORD",PSUFACN))
  1. I '$D(^XTMP(PSUUDSUB,"SSN",PSUFACN,PSUSSN)) D
  1. .S ^XTMP(PSUUDSUB,"SSN",PSUFACN,PSUSSN)=""
  1. .S ^XTMP(PSUUDSUB,"SSN",PSUFACN)=1+$G(^XTMP(PSUUDSUB,"SSN",PSUFACN))
  1. S PSUDIV=PSUFACN D GETDIV^PSUV3 I PSUDIVNM'="" D
  1. .S ^XTMP("PSU_"_PSUJOB,"PSUDIV",PSUDIVNM,PSUSSN)=""
  1. I PSUDIVNM="" S ^XTMP("PSU_"_PSUJOB,"PSUDIV",PSUDIV,PSUSSN)=""
  1. ; and store totals by drug in ^TMP("PSUUD DRUG",$J,PSUFACN
  1. I '$D(^XTMP(PSUUDSUB,"DRUG",PSUFACN,PSUDRUG(.01))) D
  1. .S ^XTMP(PSUUDSUB,"DRUG",PSUFACN,PSUDRUG(.01))=0_U_PSUDRUG(16)_U_PSUDRUG(51)_U_PSUDNFI
  1. S $P(^XTMP(PSUUDSUB,"DRUG",PSUFACN,PSUDRUG(.01)),U,1)=$P(^XTMP(PSUUDSUB,"DRUG",PSUFACN,PSUDRUG(.01)),U,1)+PSUDAMT
  1. ; and store Summary totals
  1. S ^XTMP(PSUUDSUB,"DIS",PSUFACN)=PSUDAMT+$G(^XTMP(PSUUDSUB,"DIS",PSUFACN))
  1. S ^XTMP(PSUUDSUB,"CST",PSUFACN)=(PSUDRUG(16)*PSUDAMT)+$G(^XTMP(PSUUDSUB,"CST",PSUFACN))
  1. TMPDDQ Q ; exit from TMPDD